{"_id":"@dbeauyat/user-accounts-utils","_rev":"18-7da96843c38f66ed54bb654dc4c980aa","name":"@dbeauyat/user-accounts-utils","dist-tags":{"latest":"1.0.22"},"versions":{"1.0.5":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.5","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.5","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"3aab603e44b03a20572d8093b6b8cbc223deadf8","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.5.tgz","fileCount":6,"integrity":"sha512-9k7mw0jnIdy84x/N9mi8Om6dQCBtjGW71IDtQ+4j0m5vTz2frEEVmap6xdtSSw67z1+KDAqJk6O4VOY+CMShaQ==","signatures":[{"sig":"MEQCIGnQjxyzbhUgZSaWFWaevDbGz/gNp4dUM0Ag5/52D4nRAiARz53aCCCb6JamELi1yzj3zfwshbD3utAg9G1rx/SwNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9469},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"3723a677ef18c0edbdf2a658fd3a5303cc738d87","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.17.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","tracer":"^1.3.0","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.5_1783119922063_0.2740571947528123","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.6","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.6","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"ba4bf262f1860e783ed16a6ab5730f622a354b1f","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.6.tgz","fileCount":6,"integrity":"sha512-1cQ0QTGRjHqoygJvPk0eQcpNrQBks9baS/2jA+ZNaymcUn3+gafIPWW7LRcIBnvwl1PAGNPSpe90sN1YVv/HnQ==","signatures":[{"sig":"MEYCIQDJR6HfkZMK7dTGtWm355NgWQaGJu74tP28dYO/zlxV3AIhAMGD3ahLrOVdADHxnbO9CcbUNhQcE4fgsqOg0fh6Ob+3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9733},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"c3314c69fdb5abfc9849f1f0fec36186c8669df5","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.17.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.6_1783120543942_0.5675272023501585","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.8","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.8","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"d414ba3dec804bd8fc7ffbcfd03740623c8fc3e7","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.8.tgz","fileCount":6,"integrity":"sha512-k+KbXiYoPAiHatDGzBVm+8ReUG5xw6+52zsT7m+BJ6eqUXENFbE1yfymWsgTkFcekpgteND4RSYq3j0v9yHnNw==","signatures":[{"sig":"MEYCIQCRUsqeha21ixNdxs6KbJDo5A82RIKcZ7ryKj1nNaBTrgIhAOKaoXylIctQu/Nc2VIUCkDClG5TfTiefeg9st7n+//E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9821},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"354b93676d723f1f7f915afd56b6b0eb7d7972b2","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.17.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.8_1783133943696_0.8632150502119449","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.9","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.9","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"14fcd1de1f80d7feb5d22e079b2ab3e2c39ed04f","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.9.tgz","fileCount":6,"integrity":"sha512-KDyTfXz6rTgCrRJm6ZTSyhZa5EtWKyzbEgL/ut1VXsWtHDDR37DmXiXWpGLrBLxP8ed7qDR04Gkvzep9xAdLpQ==","signatures":[{"sig":"MEUCIQC2Xtwf2REDOgyKCsI6NTILfgsHmmtt8tPg+kRVKd09HQIgEiBx4rcbzxUkBRM1IHykUpW1BJm8nNp1q1y4Lg+cDx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10487},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"dd2225f05bfbe6102169165d7c5c0847786c72db","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.17.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.9_1783190923576_0.8973287153216674","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.11","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.11","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"793e7abcda0d0a280fc9f72e17c8c92651e8d397","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.11.tgz","fileCount":6,"integrity":"sha512-PlTiBZdIj2beuSxCY8+rMs2PN0P4CHZUZ6hQQZaghTDxkWlJ9EvwiAcvUGKW6Jc8NfCM5dngG588j1Pg4p7qFQ==","signatures":[{"sig":"MEUCIQDknMWJ6LbARW4TPibU9OSFFsg/AKwbg0vWMfJQBPjyyQIgOzHLYo78wGPcDCLqcnAcIGJ1FYrdWpjCXvw+OE8bhVQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11788},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"a0ea2db4dd65fd59b864600f822fd10d392fa08a","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.17.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.11_1783222248228_0.3506022934380584","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.12","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.12","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"9916c2d7a3abde9826260c9733ac024ef0fb5d0c","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.12.tgz","fileCount":7,"integrity":"sha512-6oQbpBjcdY18ZmWdKnyQFyhDhShuEiT073nHUn3BYJgt3gzSQA6TBz5Io9qIxvIxmMK9CKm6qS/4snZ3UEnqRA==","signatures":[{"sig":"MEUCIHhu2IX45CjwbykiP5sZOmkEjiqH226CT+0eq0FSkrRwAiEA/QR27koQiOmyF+ZhNuoB7vwHs8FDfX5mfMvH9tQw65g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16818},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"87cf1c871f4dad1b6e461e67318cc4dbff7c35b6","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.12_1783528629297_0.3301293899103108","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.13","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.13","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"11a346af6e5ce483f674447550c66fde6ce02389","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.13.tgz","fileCount":7,"integrity":"sha512-lMe5sS9qZ7ux0WdBRztz71+ftNmLKf1CTaP97rdzvOmTNY9yrh1cmHl3dbLLWkIkXk2olu6yChLlk9cmWm8gbg==","signatures":[{"sig":"MEUCIQDiru9rNfIkhHEl5GR5LkZ20PjZ9f7tIBVeeu9U5zdmagIgf7cPumSuvzp3DoakU2HPnb5OwcSso78u6kI6HW03c34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18018},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"af37cc7e94cbd1c2e1bbf32565990dc60156523c","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.13_1783534423483_0.651005769590681","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.14","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.14","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"4bd1931a2fd38faa34666f93138c0949b5020763","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.14.tgz","fileCount":7,"integrity":"sha512-KxB0wZ6RAohIKvqVL+deMpBn+FloKiT/gJFwPWrxCjeMiw+7RvhuA9jUF9Lo9ZIgomjOFzBYTpUVpzPYRcpvoQ==","signatures":[{"sig":"MEYCIQCX382wFAQlB4TvfSV4wVFoadobEcb30taRNRCzdGMqSgIhAOqCm2ebhdJTJbTIEe3YTi41rhPEu+dHgmoS8MBsr+g5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19072},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"84a38596512121aeefe95e8f36dc15024bb5feca","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.14_1783600797226_0.8191933131646834","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.15","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.15","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"309fa115f6f7cfe5d9c9404ad375e4ff85d1d882","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.15.tgz","fileCount":7,"integrity":"sha512-Ffm/maYqcDOr7MpoRA8Hfso+xg2839ZeN6wCW8FhUi+p9P38M9uxKpSk0CvNxmMfYOE6k1k7U0FRjlNXQQflhw==","signatures":[{"sig":"MEYCIQCQhJGKBOE3oKvbYJOf8D6oLZI4EgIxVyOxnxLJk9dxxwIhALMxfTQmmVsN9yaBbgyxMcObeH6BzpT2bYtRi3LOJK92","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19358},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"72669c33d5a7874a642ab7302915c318cc425261","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.15_1783601547714_0.05418874122547468","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.16","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.16","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"5fe0795328b43d4a79a4baa94b0c1a5d6b4a5652","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.16.tgz","fileCount":7,"integrity":"sha512-wOwOhQv3Or3EJO80e391vNWCztv7/mei1HBtmSQSdnqE4lRKljaX+QFoMaDUERGFygXlr0fK16ZmZLQON/DcTQ==","signatures":[{"sig":"MEQCIFwKdmvg+0fT7wuuZqACwftLmmIWlgQHTM3VmU4vhafzAiBvKEudh7o/fBLW/GYiyZ6zIygjgHLzbqkV9N00FbCc8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19378},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"fe7d2bb0fb7077d6b40599679ae0c38cb9f95372","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.16_1783613623543_0.328270249230707","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.17","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.17","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"b11c366353e0b49621d7b79d798273e131554bd2","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.17.tgz","fileCount":7,"integrity":"sha512-5Ymiw959oHlxCqzsYQX+NUFVN0nr0ax25GD8wCi2huICfMWJnr8cENp3J9v399OIlKc2cCiP3OEVT5XOTATMsg==","signatures":[{"sig":"MEUCIGjeNPb9sZQQYcqb16SWXOFJ1WlJCEaC3cb6aTf6gPQjAiEAskVPwlMx8fhhprru0UMB+9V2gxHNRP9fV9QaM7bxwKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36232},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"537d4dc4b9a265179aaad286bb244a03ae71ce67","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.17_1783638676120_0.259372668860572","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.18","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.18","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"ed5ecf24c700a2cf79b8d2e0bb77789c6797dea0","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.18.tgz","fileCount":7,"integrity":"sha512-uZmevWMPzmzl0CGb54ip28mP9n68Avr+4imsHMoq1ziu2V78/39rPKDOxkLvkwLJ/FqGMRA2pc6cyQwezJutRg==","signatures":[{"sig":"MEYCIQDt9VFCHvj0ZwWy12RvCYlDPZUpFxw5Ajb2Yz1d91E/+QIhAPefJzNbDezqHjslfuhCH8yG3fZZ448a/yRX0wTbEHml","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36608},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"f17dd135ec44a7167ad45daf1810caefe485bb01","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"11.18.0","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.18_1783660244039_0.5417615246879557","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.19","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.19","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"8c1de1dfdf74234da90ce4055c168b76709f1012","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.19.tgz","fileCount":14,"integrity":"sha512-CyxGHIX+ieGe8Vm1XBcnkxqsX8PCTFH1Pju5VeuK06omN7voRpF0drb9tqWlfd8tfFiQMlOdPreMWo2juWTVJQ==","signatures":[{"sig":"MEUCIAXKHaieXhLdH6bZu2qdD7rwutjuT7dYcW6s6oJEkUIoAiEA/xUXqeBO3URPlTB7K1QSTJvi8FOOkqiIncrOnQB5SAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70109},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"53c5e4303b8294e9b2256e091ed7c1e908defc77","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"12.0.1","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.19_1783833273806_0.0007305006138187409","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.20","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.20","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"fa3297b2b88e65b8d3e08d7d9eed38ec3fc884cc","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.20.tgz","fileCount":14,"integrity":"sha512-5UIDskkIePvHKovyLk+mDpDkfb+PeYPD9Ev2mzuppty+e0edSzMiZSBPl8r/wNdyMo3oyqsnk+6FXOltYTk2zg==","signatures":[{"sig":"MEUCID9DITXbBPmMoCiV+W7l0vw/f5ommLM8N6Onp5QuOJHIAiEAgIper/gPLMwP0Vi7UDQciYKQlfbvZrFmt5Kh74uVyrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70611},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"26be448bc52eef59cbabf30fa590e9789f80b4fc","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"12.0.1","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.20_1783834724002_0.44818047170324227","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.21","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-accounts-utils@1.0.21","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"e18a86e43aa7ac1adaf9eef0f4113bbfcce91e8a","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.21.tgz","fileCount":6,"integrity":"sha512-bn5V/Uco/X6wGrROunLYcAtmKtTimUM+a+NsAm6SfFLLlyHZdt9li2H9CuLOykhJeL0shcofe6lvyMuNrkYqfA==","signatures":[{"sig":"MEUCICZ9Eiv9fh26bhZouNyEAQJ8+KxfVZmX836HMqYq/Nv0AiEA1OZUc/JyAvmc8O8DMgW74rMN/Rjm9r/XOVuKYepaw7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36528},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"4fbe610d22aaf5a6254832460459749fdd7de42f","scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"_npmVersion":"12.0.1","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"argon2@0.44.0":true},"dependencies":{"argon2":"^0.44.0","moment":"^2.30.1","nanoid":"^5.1.16","ioredis":"^5.11.1","require-json5":"^1.3.0"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-accounts-utils_1.0.21_1783839151833_0.9019067244224519","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"@dbeauyat/user-accounts-utils","version":"1.0.22","description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","type":"module","main":"index.js","types":"index.d.ts","exports":{".":"./index.js"},"publishConfig":{"registry":"http://localhost:4873"},"scripts":{"release:local":"npm publish --registry http://localhost:4873","release:public":"npm publish --registry https://registry.npmjs.org --access public"},"keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","dependencies":{"argon2":"^0.44.0","ioredis":"^5.11.1","moment":"^2.30.1","nanoid":"^5.1.16","require-json5":"^1.3.0"},"allowScripts":{"argon2@0.44.0":true},"gitHead":"4fbe610d22aaf5a6254832460459749fdd7de42f","_id":"@dbeauyat/user-accounts-utils@1.0.22","_nodeVersion":"26.4.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-prZKms+WaFUyMWrN4v7yXhLRI+VhwNupLTJ3fXH+3sWKVpsJSBM07Yn5GoqAcS2YsL0Cv8Fu5Ut6JU30ss6h1A==","shasum":"44a232f619c0b5b6991034db2b6b292ee4df7fe2","tarball":"https://registry.npmjs.org/@dbeauyat/user-accounts-utils/-/user-accounts-utils-1.0.22.tgz","fileCount":8,"unpackedSize":42108,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCgTUtgpYRvsBgb4uryzuoahMbaD+iNwdKj862Ew3KEmQIhALc41HJPB79oF2SB0kWSWDGs7rwUM/vw2e4S94JTcap0"}]},"_npmUser":{"name":"bzkdjc","email":"dan.beauyat@gmail.com"},"directories":{},"maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/user-accounts-utils_1.0.22_1784495261507_0.07685937262603404"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-03T23:05:21.871Z","modified":"2026-07-19T21:07:41.815Z","1.0.5":"2026-07-03T23:05:22.221Z","1.0.6":"2026-07-03T23:15:44.144Z","1.0.8":"2026-07-04T02:59:03.838Z","1.0.9":"2026-07-04T18:48:43.719Z","1.0.10":"2026-07-04T20:47:18.585Z","1.0.11":"2026-07-05T03:30:48.345Z","1.0.12":"2026-07-08T16:37:09.434Z","1.0.13":"2026-07-08T18:13:43.623Z","1.0.14":"2026-07-09T12:39:57.362Z","1.0.15":"2026-07-09T12:52:27.855Z","1.0.16":"2026-07-09T16:13:43.683Z","1.0.17":"2026-07-09T23:11:16.278Z","1.0.18":"2026-07-10T05:10:44.193Z","1.0.19":"2026-07-12T05:14:33.967Z","1.0.20":"2026-07-12T05:38:44.145Z","1.0.21":"2026-07-12T06:52:31.978Z","1.0.22":"2026-07-19T21:07:41.654Z"},"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","keywords":[],"description":"Module Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"readme":"# @dbeauyat/user-accounts-utils\n\nModule Node.js pour la gestion d'utilisateurs avec stockage Redis et hachage Argon2.\n\n## Installation\n\n```bash\nnpm install @dbeauyat/user-accounts-utils@1.0.22\n```\n\n## Configuration\n\nLe module charge automatiquement `config.json5` au démarrage. Les paramètres principaux :\n\n| Paramètre | Type | Description | Défaut |\n|-----------|------|-------------|--------|\n| `DBs.redis.host` | string | Host Redis | `127.0.0.1` |\n| `DBs.redis.port` | number | Port Redis | 6379 |\n| `DBs.redis.username` | string | Username Redis | `default` |\n| `DBs.redis.password` | string | Password Redis | `` |\n| `usersKeyPrefix` | string | Préfixe des clés Redis | `'uau:users'` (config) / `'sigsdid:ba:users'` (fallback code) |\n\n> Note : les paramètres MQTT (`brokerUrl`, `listenTopic`, `qos`, `clientId`) sont présents dans `config.json5` mais ne sont pas utilisés par ce module.\n\n## TypeScript\n\nLe package inclut ses propres déclarations de types (`.d.ts`). Aucun package `@types/...` supplémentaire n'est nécessaire.\n\n```typescript\nimport { createUser, retrieveUser, verifyPassword } from '@dbeauyat/user-accounts-utils';\n\nconst result = await createUser('alice', 'motdepasse', 'Alice Dupont', true);\n//    ^? { success: true; username: string } | { success: false; reason: \"USER_ALREADY_EXISTS\" }\n\nconst user = await retrieveUser('alice');\n//    ^? RetrievedUser | null\n```\n\n## Usage\n\n```javascript\nimport {\n  createUser, createUserTemp, retrieveUser, verifyPassword,\n  updateUser, updatePassword, deleteUser,\n  enableUser, disableUser, setScope,\n  setResetPasswordCode, getResetPasswordCode, deleteResetPasswordCode,\n  createUserWithScope, createUserTempWithScope,\n  retrieveUserWithScope, verifyPasswordWithScope,\n  updateUserWithScope, updatePasswordWithScope,\n  deleteUserWithScope, enableUserWithScope, disableUserWithScope,\n  setResetPasswordCodeWithScope, getResetPasswordCodeWithScope, deleteResetPasswordCodeWithScope\n} from '@dbeauyat/user-accounts-utils';\n\n// Créer un utilisateur\nawait createUser('alice', 'motdepasse', 'Alice Dupont');\n\n// Créer un utilisateur avec scope\nawait createUserWithScope('uau:users', 'alice', 'motdepasse', 'Alice Dupont');\n\n// Récupérer un utilisateur\nconst user = await retrieveUser('alice');\n\n// Récupérer un utilisateur avec scope\nconst userWithScope = await retrieveUserWithScope('uau:users', 'alice');\n\n// Vérifier un mot de passe\nconst valid = await verifyPassword('alice', 'motdepasse');\n\n// Vérifier un mot de passe avec scope\nconst validWithScope = await verifyPasswordWithScope('uau:users', 'alice', 'motdepasse');\n\n// Modifier un champ\nawait updateUser('alice', { nom: 'Alice Martin' });\n\n// Modifier un champ avec scope\nawait updateUserWithScope('uau:users', 'alice', { nom: 'Alice Martin' });\n\n// Changer le mot de passe\nawait updatePassword('alice', 'nouveaumotdepasse');\n\n// Changer le mot de passe avec scope\nawait updatePasswordWithScope('uau:users', 'alice', 'nouveaumotdepasse');\n\n// Supprimer un utilisateur\nawait deleteUser('alice');\n\n// Supprimer un utilisateur avec scope\nawait deleteUserWithScope('uau:users', 'alice');\n\n// Activer / désactiver\nawait enableUser('alice');\nawait disableUser('alice');\n\n// Activer / désactiver avec scope\nawait enableUserWithScope('uau:users', 'alice');\nawait disableUserWithScope('uau:users', 'alice');\n\n// Modifier dynamiquement le préfixe Redis (applicable aux opérations suivantes)\nsetScope('uau:users2');\n```\n\n## API\n\n### `createUserTemp(ttlMinutes = 1)`\n\nCré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.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `ttlMinutes` | number | Durée de vie en minutes. Par défaut : `1`. Entier décimal entre 1 et 120. |\n\nStocke en Redis :\n- `JSON.SET` avec `NX` (anti-clobber) sur `${usersKeyPrefix}:${generatedUsername}`\n- `EXPIRE` sur la clé avec le TTL en secondes\n\nRetourne `{ 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' }`.\n\n### `createUser(username, password, fullname)`\n\nCré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.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur unique |\n| `password` | string | Mot de passe (haché automatiquement) |\n| `fullname` | string | Nom complet |\n\nRetourne `{ success: true, username }` en cas de succès, ou `{ success: false, reason: 'USER_ALREADY_EXISTS' }` si le compte existe déjà.\n\n### `retrieveUser(username)`\n\nRécupère les informations d'un utilisateur. **Vérification enabled** : si l'utilisateur n'existe pas ou est désactivé, la fonction renvoie `null`.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n\nRetourne un objet utilisateur (avec champs `enabled`, `nom`, `password`) ou `null` si l'utilisateur n'existe pas ou est désactivé.\n\n### `verifyPassword(username, password)`\n\nVé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.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n| `password` | string | Mot de passe à vérifier |\n\nRetourne `{ valid: true }` si le mot de passe correspond, ou :\n- `{ valid: false, reason: 'USER_NOT_FOUND' }` si l'utilisateur n'existe pas\n- `{ valid: false, reason: 'USER_NOT_ENABLED' }` si l'utilisateur existe mais est désactivé (cas échéant)\n- `{ valid: false, reason: 'WRONG_PASSWORD' }` si le mot de passe ne correspond pas au hachage stocké\n\n### `updateUser(username, updates)`\n\nMet à jour un champ ou plusieurs champs d'un utilisateur.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n| `updates` | object | Objet clé-valeur des champs à mettre à jour (ex: `{ nom: '...' }`) |\n\nRetourne `{ success: true }`.\n\n### `updatePassword(username, newPassword)`\n\nChange le mot de passe d'un utilisateur. Le nouveau mot de passe est haché avec Argon2.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n| `newPassword` | string | Nouveau mot de passe |\n\nRetourne `{ success: true }`.\n\n### `deleteUser(username)`\n\nSupprime un utilisateur.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur à supprimer |\n\nRetourne `{ success: true }`.\n\n### `enableUser(username)` / `disableUser(username)`\n\nActive ou désactive un utilisateur.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n\nRetourne `{ success: true }`.\n\n### `setScope(prefix)`\n\nModifie dynamiquement le préfixe des clés Redis utilisées par toutes les opérations suivantes (`createUser`, `retrieveUser`, etc.).\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `prefix` | string | Nouveau préfixe (ex: `'uau:users2'`) |\n\n### `setResetPasswordCode(username, code, ttlMinutes = 15)`\n\nDéfinit un code de réinitialisation de mot de passe pour un utilisateur. Le code est stocké dans Redis avec un TTL.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n| `code` | string | Code de réinitialisation |\n| `ttlMinutes` | number | Durée de vie en minutes. Par défaut : `15`. |\n\nRetourne `{ success: true }`.\n\n### `getResetPasswordCode(username)`\n\nRécupère le code de réinitialisation de mot de passe d'un utilisateur.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n\nRetourne le code de réinitialisation ou `null` si aucun code n'est défini.\n\n### `deleteResetPasswordCode(username)`\n\nSupprime le code de réinitialisation de mot de passe d'un utilisateur.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `username` | string | Nom d'utilisateur |\n\nRetourne `{ success: true }`.\n\n### `createUserWithScope(scope, username, password, fullname, enabled)`\n\nCrée un nouvel utilisateur avec un scope personnalisé. Le scope détermine le préfixe de la clé Redis.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur unique |\n| `password` | string | Mot de passe (haché automatiquement) |\n| `fullname` | string | Nom complet |\n| `enabled` | boolean | Si l'utilisateur est activé |\n\nRetourne `{ success: true, username }` en cas de succès, ou `{ success: false, reason: 'USER_ALREADY_EXISTS' }` si le compte existe déjà.\n\n### `createUserTempWithScope(scope, ttlMinutes = 1)`\n\nCrée un utilisateur temporaire avec un scope personnalisé. Le password est haché avec Argon2 avant stockage.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `ttlMinutes` | number | Durée de vie en minutes. Par défaut : `1`. Entier décimal entre 1 et 120. |\n\n### `retrieveUserWithScope(scope, username)`\n\nRécupère les informations d'un utilisateur avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n\nRetourne un objet utilisateur ou `null` si l'utilisateur n'existe pas ou est désactivé.\n\n### `verifyPasswordWithScope(scope, username, password)`\n\nVérifie qu'un mot de passe correspond au hachage stocké avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n| `password` | string | Mot de passe à vérifier |\n\nRetourne `{ valid: true }` si le mot de passe correspond, ou `{ valid: false, reason: '...' }` en cas d'erreur.\n\n### `updateUserWithScope(scope, username, updates)`\n\nMet à jour un champ ou plusieurs champs d'un utilisateur avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n| `updates` | object | Objet clé-valeur des champs à mettre à jour |\n\nRetourne `{ success: true }`.\n\n### `updatePasswordWithScope(scope, username, newPassword)`\n\nChange le mot de passe d'un utilisateur avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n| `newPassword` | string | Nouveau mot de passe |\n\nRetourne `{ success: true }`.\n\n### `deleteUserWithScope(scope, username)`\n\nSupprime un utilisateur avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur à supprimer |\n\nRetourne `{ success: true }`.\n\n### `enableUserWithScope(scope, username)` / `disableUserWithScope(scope, username)`\n\nActive ou désactive un utilisateur avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n\nRetourne `{ success: true }`.\n\n### `setResetPasswordCodeWithScope(scope, username, code, ttlMinutes = 15)`\n\nDéfinit un code de réinitialisation de mot de passe avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n| `code` | string | Code de réinitialisation |\n| `ttlMinutes` | number | Durée de vie en minutes. Par défaut : `15`. |\n\nRetourne `{ success: true }`.\n\n### `getResetPasswordCodeWithScope(scope, username)`\n\nRécupère le code de réinitialisation de mot de passe avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n\nRetourne le code de réinitialisation ou `null` si aucun code n'est défini.\n\n### `deleteResetPasswordCodeWithScope(scope, username)`\n\nSupprime le code de réinitialisation de mot de passe avec un scope personnalisé.\n\n| Paramètre | Type | Description |\n|-----------|------|-------------|\n| `scope` | string | Scope (ex: `'uau:users'`) |\n| `username` | string | Nom d'utilisateur |\n\nRetourne `{ success: true }`.\n\n## Stockage\n\nLes 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'`.\n\nExemple : `uau:users:alice`.\n\n## Licence\n\nISC\n","readmeFilename":"README.md"}