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

@mostajs/enrollment

v0.2.1

Published

Enrôler une machine chez un client distant, sans configuration : code dictable au téléphone (usage unique, 7 jours), identité Ed25519 générée sur la machine, approbation par un clic dans la console, re-tentative automatique. Compose crypto-box et schedule

Downloads

435

Readme

@mostajs/enrollment

Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later Niveau : N1 · Dépendance : @mostajs/crypto-box

Enrôler une machine chez un client distant — sans configuration.

Ce que ce module n'est PAS

Ce n'est pas de la licence. Deux questions distinctes, qu'il ne faut jamais fusionner :

| Question | Module | |---|---| | « Ce client a-t-il le droit d'utiliser le logiciel ? » | @mostajs/licensing | | « Cette machine est-elle bien la sienne ? » | ce module |

Les mélanger interdirait de révoquer un enrôlement (machine volée) sans couper la licence.

Les trois verrous

1. Pas de jeton générique dans le binaire. Un jeton d'amorçage embarqué dans chaque .exe est une faille : quiconque possède le binaire pourrait s'enrôler et devenir un « site » légitime de votre console. → Un code par client, dictable au téléphone, usage unique, 7 jours.

2. machineId n'authentifie pas — il identifie. C'est une valeur publique et falsifiable. → Une paire Ed25519 générée sur la machine ; la clé privée ne sort jamais. Un jeton volé (fichier de config, sauvegarde, capture réseau) est rejouable ; une clé qui ne bouge pas, non.

3. La console peut être usurpée (DNS détourné, certificat frauduleux). TLS prouve qu'on parle à console.example — pas qu'on parle à LA console. → Chaque approbation est signée Ed25519, vérifiée avec la clé publique embarquée dans le binaire. Même si TLS tombait, un faux jeton ne pourrait pas être forgé.

Rien à configurer chez le client

L'enrôlement est sortant : la machine appelle la console, jamais l'inverse. Aucun certificat, aucun port ouvert, aucun reverse proxy. Fonctionne derrière une box, un NAT, un pare-feu d'entreprise.

Le code, dictable au téléphone

MJSE-7K4P-2XQ9-M3TA

Crockford Base32 — ni I, ni L, ni O, ni U. Fini le « c'est un zéro ou un O ? », la question qui fait échouer une installation à distance. Insensible à la casse, tirets décoratifs.

10 caractères aléatoires + 2 de contrôle : une faute de frappe est rejetée hors ligne, le client voit « code invalide » tout de suite — pas après trente secondes d'attente pour un refus qui ne lui dit pas si c'est lui ou le serveur.

Jamais stocké en clair côté console : seule son empreinte HMAC est conservée. Une fuite de la base ne donne aucun code utilisable.

Le clic est indolore

L'approbation est humaine — mais l'agent re-sonde en boucle. Le client installe et part travailler ; vous approuvez quand vous voulez ; la machine se rattache toute seule. Personne ne refait rien.

Sans cette re-tentative, le client qui installe un dimanche à 8 h devrait tout recommencer lundi.

Le piège du ré-enrôlement

Une machine déjà enrôlée qui revient avec une clé publique différente : disque remplacé chez le client, ou usurpation ? On ne peut pas deviner — donc on ne décide pas. La console lève une alerte explicite et refuse d'approuver sans confirmation consciente.

Tests

npm test   # 16 tests mjs-unit

Un protocole d'enrôlement se juge sur ce qu'il refuse : force brute verrouillée, faute de frappe qui ne verrouille pas le client maladroit, code expiré, code réutilisé, ré-enrôlement non confirmé, approbation forgée par un imposteur.