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

@dbeauyat/user-accounts-utils

v1.0.21

Published

Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.

Readme

@dbeauyat/user-accounts-utils

Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.

Installation

npm install @dbeauyat/[email protected]

Configuration

Le module charge automatiquement config.json5 au démarrage. Les paramètres principaux :

| Paramètre | Type | Description | Défaut | |-----------|------|-------------|--------| | DBs.redis.host | string | Host Redis | 127.0.0.1 | | DBs.redis.port | number | Port Redis | 6379 | | DBs.redis.username | string | Username Redis | default | | DBs.redis.password | string | Password Redis | `` | | usersKeyPrefix | string | Préfixe des clés Redis | 'uau:users' (config) / 'sigsdid:ba:users' (fallback code) |

Note : les paramètres MQTT (brokerUrl, listenTopic, qos, clientId) sont présents dans config.json5 mais ne sont pas utilisés par ce module.

Usage

import {
  createUser, createUserTemp, retrieveUser, verifyPassword,
  updateUser, updatePassword, deleteUser,
  enableUser, disableUser, setScope,
  setResetPasswordCode, getResetPasswordCode, deleteResetPasswordCode,
  createUserWithScope, createUserTempWithScope,
  retrieveUserWithScope, verifyPasswordWithScope,
  updateUserWithScope, updatePasswordWithScope,
  deleteUserWithScope, enableUserWithScope, disableUserWithScope,
  setResetPasswordCodeWithScope, getResetPasswordCodeWithScope, deleteResetPasswordCodeWithScope
} from '@dbeauyat/user-accounts-utils';

// Créer un utilisateur
await createUser('alice', 'motdepasse', 'Alice Dupont');

// Créer un utilisateur avec scope
await createUserWithScope('uau:users', 'alice', 'motdepasse', 'Alice Dupont');

// Récupérer un utilisateur
const user = await retrieveUser('alice');

// Récupérer un utilisateur avec scope
const userWithScope = await retrieveUserWithScope('uau:users', 'alice');

// Vérifier un mot de passe
const valid = await verifyPassword('alice', 'motdepasse');

// Vérifier un mot de passe avec scope
const validWithScope = await verifyPasswordWithScope('uau:users', 'alice', 'motdepasse');

// Modifier un champ
await updateUser('alice', { nom: 'Alice Martin' });

// Modifier un champ avec scope
await updateUserWithScope('uau:users', 'alice', { nom: 'Alice Martin' });

// Changer le mot de passe
await updatePassword('alice', 'nouveaumotdepasse');

// Changer le mot de passe avec scope
await updatePasswordWithScope('uau:users', 'alice', 'nouveaumotdepasse');

// Supprimer un utilisateur
await deleteUser('alice');

// Supprimer un utilisateur avec scope
await deleteUserWithScope('uau:users', 'alice');

// Activer / désactiver
await enableUser('alice');
await disableUser('alice');

// Activer / désactiver avec scope
await enableUserWithScope('uau:users', 'alice');
await disableUserWithScope('uau:users', 'alice');

// Modifier dynamiquement le préfixe Redis (applicable aux opérations suivantes)
setScope('uau:users2');

API

createUserTemp(ttlMinutes = 1)

Crée un utilisateur temporaire dans Redis. Un username unique est généré avec le préfixe isc-tu-, suivi d'un password haché avec Argon2 et d'un credentials base64 stockés dans une clé avec TTL.

| Paramètre | Type | Description | |-----------|------|-------------| | ttlMinutes | number | Durée de vie en minutes. Par défaut : 1. Entier décimal entre 1 et 120. |

Stocke en Redis :

  • JSON.SET avec NX (anti-clobber) sur ${usersKeyPrefix}:${generatedUsername}
  • EXPIRE sur la clé avec le TTL en secondes

Retourne { success: true, credentials } (base64 de <username>:<password>). En cas d'échec répété (max 5 tentatives), retourne { success: false, reason: 'SERVICE_BUSY_RETRY_LATER' }. En cas de valeur invalide, retourne { success: false, reason: 'INVALID_TTL_MINUTES' }.

createUser(username, password, fullname)

Crée un nouvel utilisateur. Le mot de passe est haché avec Argon2. Protection anti-surcharge : si l'utilisateur existe déjà, la fonction retourne { success: false, reason: 'USER_ALREADY_EXISTS' } au lieu de surécrire le compte existant.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur unique | | password | string | Mot de passe (haché automatiquement) | | fullname | string | Nom complet |

Retourne { success: true, username } en cas de succès, ou { success: false, reason: 'USER_ALREADY_EXISTS' } si le compte existe déjà.

retrieveUser(username)

Récupère les informations d'un utilisateur. Vérification enabled : si l'utilisateur n'existe pas ou est désactivé, la fonction renvoie null.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur |

Retourne un objet utilisateur (avec champs enabled, nom, password) ou null si l'utilisateur n'existe pas ou est désactivé.

verifyPassword(username, password)

Vérifie qu'un mot de passe correspond au hachage stocké. Vérification enabled : la fonction vérifie que l'utilisateur est activé avant de comparer les mots de passe.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur | | password | string | Mot de passe à vérifier |

Retourne { valid: true } si le mot de passe correspond, ou :

  • { valid: false, reason: 'USER_NOT_FOUND' } si l'utilisateur n'existe pas
  • { valid: false, reason: 'USER_NOT_ENABLED' } si l'utilisateur existe mais est désactivé (cas échéant)
  • { valid: false, reason: 'WRONG_PASSWORD' } si le mot de passe ne correspond pas au hachage stocké

updateUser(username, updates)

Met à jour un champ ou plusieurs champs d'un utilisateur.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur | | updates | object | Objet clé-valeur des champs à mettre à jour (ex: { nom: '...' }) |

Retourne { success: true }.

updatePassword(username, newPassword)

Change le mot de passe d'un utilisateur. Le nouveau mot de passe est haché avec Argon2.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur | | newPassword | string | Nouveau mot de passe |

Retourne { success: true }.

deleteUser(username)

Supprime un utilisateur.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur à supprimer |

Retourne { success: true }.

enableUser(username) / disableUser(username)

Active ou désactive un utilisateur.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur |

Retourne { success: true }.

setScope(prefix)

Modifie dynamiquement le préfixe des clés Redis utilisées par toutes les opérations suivantes (createUser, retrieveUser, etc.).

| Paramètre | Type | Description | |-----------|------|-------------| | prefix | string | Nouveau préfixe (ex: 'uau:users2') |

setResetPasswordCode(username, code, ttlMinutes = 15)

Définit un code de réinitialisation de mot de passe pour un utilisateur. Le code est stocké dans Redis avec un TTL.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur | | code | string | Code de réinitialisation | | ttlMinutes | number | Durée de vie en minutes. Par défaut : 15. |

Retourne { success: true }.

getResetPasswordCode(username)

Récupère le code de réinitialisation de mot de passe d'un utilisateur.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur |

Retourne le code de réinitialisation ou null si aucun code n'est défini.

deleteResetPasswordCode(username)

Supprime le code de réinitialisation de mot de passe d'un utilisateur.

| Paramètre | Type | Description | |-----------|------|-------------| | username | string | Nom d'utilisateur |

Retourne { success: true }.

createUserWithScope(scope, username, password, fullname, enabled)

Crée un nouvel utilisateur avec un scope personnalisé. Le scope détermine le préfixe de la clé Redis.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur unique | | password | string | Mot de passe (haché automatiquement) | | fullname | string | Nom complet | | enabled | boolean | Si l'utilisateur est activé |

Retourne { success: true, username } en cas de succès, ou { success: false, reason: 'USER_ALREADY_EXISTS' } si le compte existe déjà.

createUserTempWithScope(scope, ttlMinutes = 1)

Crée un utilisateur temporaire avec un scope personnalisé. Le password est haché avec Argon2 avant stockage.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | ttlMinutes | number | Durée de vie en minutes. Par défaut : 1. Entier décimal entre 1 et 120. |

retrieveUserWithScope(scope, username)

Récupère les informations d'un utilisateur avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur |

Retourne un objet utilisateur ou null si l'utilisateur n'existe pas ou est désactivé.

verifyPasswordWithScope(scope, username, password)

Vérifie qu'un mot de passe correspond au hachage stocké avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur | | password | string | Mot de passe à vérifier |

Retourne { valid: true } si le mot de passe correspond, ou { valid: false, reason: '...' } en cas d'erreur.

updateUserWithScope(scope, username, updates)

Met à jour un champ ou plusieurs champs d'un utilisateur avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur | | updates | object | Objet clé-valeur des champs à mettre à jour |

Retourne { success: true }.

updatePasswordWithScope(scope, username, newPassword)

Change le mot de passe d'un utilisateur avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur | | newPassword | string | Nouveau mot de passe |

Retourne { success: true }.

deleteUserWithScope(scope, username)

Supprime un utilisateur avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur à supprimer |

Retourne { success: true }.

enableUserWithScope(scope, username) / disableUserWithScope(scope, username)

Active ou désactive un utilisateur avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur |

Retourne { success: true }.

setResetPasswordCodeWithScope(scope, username, code, ttlMinutes = 15)

Définit un code de réinitialisation de mot de passe avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur | | code | string | Code de réinitialisation | | ttlMinutes | number | Durée de vie en minutes. Par défaut : 15. |

Retourne { success: true }.

getResetPasswordCodeWithScope(scope, username)

Récupère le code de réinitialisation de mot de passe avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur |

Retourne le code de réinitialisation ou null si aucun code n'est défini.

deleteResetPasswordCodeWithScope(scope, username)

Supprime le code de réinitialisation de mot de passe avec un scope personnalisé.

| Paramètre | Type | Description | |-----------|------|-------------| | scope | string | Scope (ex: 'uau:users') | | username | string | Nom d'utilisateur |

Retourne { success: true }.

Stockage

Les données sont stockées dans Redis au format JSON sous la clé <premier>:<username>, où <prémier> est défini par le paramètre usersKeyPrefix de config.json5 (défaut : 'uau:users'). Si ce paramètre n'est pas défini, le fallback code utilise 'sigsdid:ba:users'.

Exemple : uau:users:alice.

Licence

ISC