npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@vasakgroup/plugin-vsk-store

v0.2.0

Published

Client for the VasakOS system store: verified owner, sync status and change notices (Created for VasakOS)

Readme

tauri-plugin-vsk-store

CI

El cliente del almacén del sistema de VasakOS para las aplicaciones de Tauri.

vasak-accounts-sync mantiene en segundo plano una base cifrada por cuenta con el correo, el calendario y los contactos, y la publica en el bus de sesión como ar.net.vasak.os.AccountsStore. Las aplicaciones —vasak-mail, vasak-calendar, vasak-contacts, el escritorio— leen de ahí, sin esperar a la red. Este plugin es la única forma en que lo hacen.

Qué hace

  • Comprueba quién tiene el nombre del sincronizador antes de creerle nada. El bus de sesión deja que cualquier proceso tome un nombre libre: si el sincronizador no arrancó o se está reiniciando, otro programa de la sesión podría hacerse pasar por él y mostrar correo, eventos o contactos inventados bajo la cuenta real de la persona (vasak-accounts#77). El plugin exige que el dueño del nombre ejecute el mismo archivo que /usr/bin/vasak-accounts-sync, en los mismos espacios de nombres que la aplicación y sin variables del cargador, y desde ahí habla sólo con ese dueño, por su nombre único. Si el nombre cambia de dueño, vuelve a comprobar.

    Es una primera capa, no un límite completo: un programa del mismo usuario todavía puede pasarla por otros caminos. Cerrarlo pide que el bus mismo decida quién puede tomar el nombre (AppArmor mediando D-Bus); eso se sigue en vasak-accounts#77.

  • «Actualizar»: le pide al sincronizador una vuelta (RequestSync) y dice a qué cuentas no se les pudo pedir y por qué: sin permiso, se pidió hace un momento, el servicio no está.

  • El estado de la sincronización de un área de cada cuenta (GetStatus): esperando, sincronizando, al día y desde cuándo, falló o no disponible.

  • Los avisos: Changed y StatusChanged del almacén, juntando los de una misma vuelta, pasados a la ventana como vsk-store://changed (con las áreas que cambiaron) y vsk-store://status.

Lo que se lee del almacén lo sigue decidiendo el permiso store.<área> de vasak-permissions para cada aplicación: el plugin no da acceso a nada que la aplicación no tenga.

Uso

Rust

tauri::Builder::default()
    // Las áreas cuyos cambios le interesan a la aplicación.
    .plugin(tauri_plugin_vsk_store::init(&["calendar"]))

Las lecturas propias de cada aplicación pasan por el mismo cliente comprobado:

use tauri_plugin_vsk_store::StoreExt;

let json: String = app.store().call_json("ListCalendars", &()).await?;

Interfaz

bun add @vasakgroup/plugin-vsk-store
import {
	onStoreChanged,
	onSyncStatus,
	requestSync,
	syncLine,
	syncStatus,
} from '@vasakgroup/plugin-vsk-store';

const failures = await requestSync(['cuenta-1']);
const statuses = await syncStatus('calendar');
const stop = await onStoreChanged((areas) => reload());
// La línea que va debajo de cada cuenta: tono, clave de traducción y si late.
const line = syncLine(statuses[0], failures[0]);

Los permisos por omisión (vsk-store:default) dejan pedir una vuelta y leer el estado.

Desarrollo

cargo test -p tauri-plugin-vsk-store   # pruebas de Rust
bun install && bun run test           # pruebas de la parte JS
cargo fmt --check

Se publica solo en crates.io y npm al mergear a main con la versión nueva (publicar-plugin.yml del CI compartido).

Licencia

GPL-3.0. Ver LICENSE.