{"_id":"@dbeauyat/user-sessions-utils","_rev":"9-80a10ce007fd0690d02f7fc6722bd834","name":"@dbeauyat/user-sessions-utils","dist-tags":{"latest":"1.0.12"},"versions":{"1.0.4":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.4","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.4","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"11f12670f5a9cd6382f59212bfe9c30e745c6b3e","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.4.tgz","fileCount":7,"integrity":"sha512-To8mTEURqijnbLj/VuvbCcIAXlU2mq35+YekOmiwiFtzQe+qHoSTubnSTz3TlhU05jxqygEFRWgRYYKJo2fBug==","signatures":[{"sig":"MEYCIQDfCm8wmWWrkzOocfJ05jetEeoVtW/g2094KkOJ6kHGygIhAJEEGZAFg9NLH/AWYSVRsTVCboA4dA2iMfkWK3z7el5U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14037},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"06a206c7504ad28fa9161b7bffa70355299fbb21","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 30 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.4.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-sessions-utils_1.0.4_1785348764957_0.7356946919140246","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.5","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.5","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"299571027635e12a153f6de2dd87956502ca4fa5","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.5.tgz","fileCount":14,"integrity":"sha512-hmuFR3TBW9Xcpz7gxIwpb+teKzwDxfy71DKOK/W1onkjGQq7Ny2udLuVVfm+a0aZYucKuZwknS+S2hmFo4JMDQ==","signatures":[{"sig":"MEUCIQCqEJOPofBKp3eZ4TZT+UV2x0vpj/coaxEg3zvanhxiLgIgA/ctMmFzB9Hoz2+qtk7tDVkVEUwRy4HZUTQ3sNoT3pM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49495},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"65af8b532ce2846476d9671305604291c0579e5e","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 30 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.4.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-sessions-utils_1.0.5_1785349087383_0.7504720686658102","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.6","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.6","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"2c1ef88be3e85a1fd87445c92ef6e6f317e458ee","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.6.tgz","fileCount":6,"integrity":"sha512-eyR1RcLxlOKDKleSbKrrwXgoVj22zipNkMpAqUoYbJiU5astiMzs97UBYdSfLh1J+W2YEaOAEiJ032IuFitEZg==","signatures":[{"sig":"MEUCIQDVtQOGCSSGKonfoCl5uqAYWSIbr18OQbFNYWrAfJnaKgIgWvQGhLDD5QH+crkBWZGiATGM1wPKVQf2tnut+AmGGyI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13422},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"fd9291e5e087c08ed98a552cbd732111e723d9eb","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 30 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.4.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-sessions-utils_1.0.6_1785349199366_0.7275373958589664","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.7","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.7","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"9c975655be553ec47e9a87798be203ac2a052b23","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.7.tgz","fileCount":6,"integrity":"sha512-ET17rF3V0U8snZuA0fYDoChg2pWfZ4j2Z8ekKpeji7bou+lWn3XTZ8ITUFPsP+WHi8KWNVYk1ou3Psf/JxDCZw==","signatures":[{"sig":"MEQCIBEJIMMN0HAVY4vfrvpQuvuxWV7JdEpr0pSepvF1Eu2QAiBrwyBTkEgSlCnYoApuwoCy+Y498N/pTFnTu1/kj8p0Lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13319},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"9d92d2bb164977929f3b18cf8df2c181d3a4f002","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 30 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.4.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-sessions-utils_1.0.7_1785349361539_0.8159754325923003","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.8","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.8","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"790112f9dacb1858780f68f3ef84ed3e6e5c6c19","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.8.tgz","fileCount":6,"integrity":"sha512-4dtwdVQ7lr7wI74PgKwPxiUWRruK0sPIYN/+smPcBh5DuEdbXLOxwfJvbdKxPi0bZn3S+26v+zPjIwLExUAIFw==","signatures":[{"sig":"MEQCIHFAk/x/+monKTaZSRqGwp5+XgSZIRHxUihAaVlKWYpIAiALKK2S19NxL9uRu0yBUaaD2Z1WKwVmWBIBSk70VMV+Dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13541},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"9d92d2bb164977929f3b18cf8df2c181d3a4f002","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 30 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.5.1","dependencies":{"nanoid":"^5.1.16","tracer":"^1.3.0","ioredis":"^5.11.1"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-sessions-utils_1.0.8_1786035266533_0.36483669503562277","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.9","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.9","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"e0700b30eaf22972dfd33450940bb4d1e9bf1573","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.9.tgz","fileCount":6,"integrity":"sha512-lb36nKd20YRZStFO9IulB1qpkWtNCMfvgn/wUqdh/n56TwylkfToRQaHupBVZci3nvyE83CVPggWDQpkS2cHWA==","signatures":[{"sig":"MEQCICs0oDw1lQ/qQRpLPujccaH6lFVYH54jVbyjvHpcIR9vAiAbNahWJZL1ZnBMwpu7FfvPOl/d9RTE1/skXu9FY5zMAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13176},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"c56f7722583ef1dc6767dd224624ae34f3ae63a3","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 30 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.5.1","dependencies":{"nanoid":"^5.1.16","ioredis":"^5.11.1"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-sessions-utils_1.0.9_1786036463578_0.12215717354931366","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.10","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.10","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"a61bc18df79a79c7ecff9378ae48b80d7c403f88","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.10.tgz","fileCount":6,"integrity":"sha512-wgoyXwPlCLTn/O1v2SRDC2FpTiinmRkFuG09XlOVNN7LGVW9E+Yp4vCEWEjwNHYCtiybhXEeWCAKaTsu0XTjJA==","signatures":[{"sig":"MEQCIBvEZDkttDf61uH7Ko88AFJxzYZzKyxAumQGakrJ4sA6AiA2eLZq8vqLDC3AHZdfp13vFZIqfrq7H6+iadE1is9nPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13678},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"4a1daa232c5975d80368d520064dc94bce02c39f","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 15 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.5.1","dependencies":{"nanoid":"^5.1.16","ioredis":"^5.11.1"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-sessions-utils_1.0.10_1786040861986_0.21903390512519172","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.11","keywords":[],"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","_id":"@dbeauyat/user-sessions-utils@1.0.11","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"dist":{"shasum":"4eb5cebf5c8efe2c57865a26f0d1b4b97be4eb34","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.11.tgz","fileCount":6,"integrity":"sha512-/Oq/HfYcv5a5nXiJV86ZubjX3d1tgJnaUiRC/dLtRG9FzFo1mejAwuydSM+o1KG8sB4hQ2lmy2hOc1eM0Z11pQ==","signatures":[{"sig":"MEUCIG3aJ2IftNZMQ61Qe/RXgeMxl5zpuFv1LXkrFtnv+wJ+AiEAgWG1idaMcKsLOkrkrAWQvQ3mwBu6xn5lg/q0XSj7JH4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14450},"main":"index.js","type":"module","exports":{".":"./index.js"},"gitHead":"5072b334b307a9681c8c53a708743a8da62e385f","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":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 15 minutes via JSON documents et un TTL configuré par clé.","directories":{},"_nodeVersion":"26.5.1","dependencies":{"nanoid":"^5.1.16","ioredis":"^5.11.1"},"publishConfig":{"registry":"http://localhost:4873"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/user-sessions-utils_1.0.11_1786043393393_0.20401832190192226","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@dbeauyat/user-sessions-utils","version":"1.0.12","description":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 15 minutes via JSON documents et un TTL configuré par clé.","type":"module","main":"index.js","exports":{".":{"types":"./types/index.d.ts","default":"./index.js"}},"types":"./types/index.d.ts","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":{"ioredis":"^5.11.1","nanoid":"^5.1.16"},"gitHead":"0170879ef5d9ca9308d98eea86a46bc0eecef73d","_id":"@dbeauyat/user-sessions-utils@1.0.12","_nodeVersion":"26.5.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-WUmJDMU2958D3VGMbcf1yErpc96i9l10eV2+iG2dxLO0bD0el8PABjhbacUtDcpi7jtrzv25qo4R3N70MZkw3A==","shasum":"1c64b8db50ffb85eacb586afc0e88fb056e15ee0","tarball":"https://registry.npmjs.org/@dbeauyat/user-sessions-utils/-/user-sessions-utils-1.0.12.tgz","fileCount":7,"unpackedSize":20372,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCEUNL0oiOxM6Xz8gz4mU8mofJ1T7TGTAXddr/tGbb4xwIhAMSxSX4oW9prRns3C7cydYCu2uNdB4XOShdNA3aiV1z2"}]},"_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-sessions-utils_1.0.12_1787850011318_0.6597814372072219"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-29T18:12:44.797Z","modified":"2026-08-27T17:00:11.689Z","1.0.4":"2026-07-29T18:12:45.141Z","1.0.5":"2026-07-29T18:18:07.529Z","1.0.6":"2026-07-29T18:19:59.530Z","1.0.7":"2026-07-29T18:22:41.684Z","1.0.8":"2026-08-06T16:54:26.689Z","1.0.9":"2026-08-06T17:14:23.737Z","1.0.10":"2026-08-06T18:27:42.127Z","1.0.11":"2026-08-06T19:09:53.516Z","1.0.12":"2026-08-27T17:00:11.490Z"},"author":{"name":"daniel beauyat","email":"zkd@tuta.io"},"license":"ISC","keywords":[],"description":"Gestion de sessions authentifiées stockées dans Redis, avec expiration automatique à 15 minutes via JSON documents et un TTL configuré par clé.","maintainers":[{"name":"bzkdjc","email":"dan.beauyat@gmail.com"}],"readme":"# @dbeauyat/user-sessions-utils\n\nGestion de sessions authentifiées stockées dans Redis Stack (module JSON), avec expiration automatique via TTL configurable (15 min par défaut).\n\n[![npm version](https://badge.fury.io/js/@dbeauyat%2Fuser-sessions-utils.svg)](https://www.npmjs.com/package/@dbeauyat/user-sessions-utils)\n\n## Install\n\n```bash\nnpm install @dbeauyat/user-sessions-utils\n```\n\n\n## TypeScript\n\nLe package inclut des déclarations de type (`types/index.d.ts`). Les imports sont donc typés dans les projets TypeScript, sans avoir à ajouter manuellement un fichier `.d.ts` :\n\n```ts\nimport {\n  createSession,\n  retrieveSession,\n  verifySession,\n  updateSession,\n  refreshSession,\n  deleteSession,\n  setConfig,\n  setSessionKeyPrefix\n} from '@dbeauyat/user-sessions-utils';\n\nconst { sessionId } = await createSession('alice');\nconst session = await retrieveSession(sessionId);\nif (session) {\n  console.log(session.startDate, session.contenuValide);\n}\n```\n\nTypes de retour :\n\n| Fonction | Type de retour |\n|---|---|\n| `createSession(username)` | `Promise<{ success: true; sessionId: string }>` |\n| `retrieveSession(sessionId)` | `Promise<{ startDate; lastAccess; associatedUsername; contenuValide } \\| null>` |\n| `verifySession(sessionId)` | `Promise<{ valid: boolean; reason?: string }>` |\n| `updateSession(sessionId, updates)` | `Promise<{ success: true }>` |\n| `refreshSession(sessionId)` | `Promise<{ success: true; lastAccess: string }>` |\n| `deleteSession(sessionId)` | `Promise<{ success: true }>` |\n| `setConfig(key, value)` | `void` |\n| `setSessionKeyPrefix(newPrefix)` | `void` |\n\n## API\n\n### `createSession(username)`\n\nCrée une nouvelle session avec un identifiant aléatoire, enregistre la date de début et rafraîchit le TTL (configurable, défaut 15 min).\n\n**Paramètres :**\n\n- `username` (string) — nom d'utilisateur associé à la session\n\n**Retourne :** Promise\\<{ success: true, sessionId: string }\\>\n\n### `retrieveSession(sessionId)`\n\nRécupère les données complètes d'une session depuis Redis.\n\n**Paramètres :**\n\n- `sessionId` (string) — identifiant unique de la session\n\n**Retourne :** Promise\\<{ startDate: string, lastAccess: string, associatedUsername: string, contenuValide: Record<string, any> } \\| null\\>\n\n### `verifySession(sessionId)`\n\nVérifie l'existence d'une session dans Redis.\n\n**Paramètres :**\n\n- `sessionId` (string) — identifiant unique de la session\n\n**Retourne :** Promise\\<{ valid: boolean, reason?: string }\\>\n\n### `updateSession(sessionId, updates)`\n\nMet à jour un ou plusieurs champs de l'objet `contenuValide` d'une session et rafraîchit le TTL.\n\n**Paramètres :**\n\n- `sessionId` (string) — identifiant unique de la session\n- `updates` (object) — objet contenant les champs et valeurs à mettre à jour dans `contenuValide`\n\n**Retourne :** Promise\\<{ success: true }\\>\n\n### `refreshSession(sessionId)`\n\nMet à jour le timestamp `lastAccess` et réinitialise le TTL de la session (configurable, défaut 15 min).\n\n**Paramètres :**\n\n- `sessionId` (string) — identifiant unique de la session\n\n**Retourne :** Promise\\<{ success: true, lastAccess: string }\\>\n\n### `deleteSession(sessionId)`\n\nSupprime une session de Redis en utilisant JSON.DEL.\n\n**Paramètres :**\n\n- `sessionId` (string) — identifiant unique de la session à supprimer\n\n**Retourne :** Promise\\<{ success: true }\\>\n\n### `setConfig(key, value)`\n\nModifie dynamiquement une valeur de configuration au runtime. La modification est immédiate pour le processus actuel mais disparaît au rechargement.\n\n**Paramètres :**\n\n- `key` (string) — chemin hiérarchique séparé par des points (ex: `\"DBs.redis.port\"`, `\"DBs.sessionTTLMinutes\"`)\n- `value` (\\*) — nouvelle valeur à assigner\n\n**Retourne :** `void`\n\n**Exemple :**\n\n```js\nsetConfig('DBs.sessionTTLMinutes', 60); // passer le TTL à 60 min\nsetConfig('DBs.sessionKeyPrefix', 'monapp:sessions');\n```\n\n### `setSessionKeyPrefix(newPrefix)`\n\nRaccourci pour modifier le préfixe des clés Redis.\n\n**Paramètres :**\n\n- `newPrefix` (string) — nouveau préfixe (ex: `\"monapp:sessions\"`)\n\n**Retourne :** `void`\n\n## Configuration\n\nLa configuration s'effectue via **variables d'environnement** (12-factor). Aucun fichier de configuration n'est nécessaire :\n\n| Variable | Description | Défaut |\n|---|---|---|\n| `REDIS_HOST` | Adresse du serveur Redis | `127.0.0.1` |\n| `REDIS_PORT` | Port du serveur Redis | `6379` |\n| `REDIS_USERNAME` | Nom d'utilisateur Redis | `default` |\n| `REDIS_PASSWORD` | Mot de passe Redis | `\"\"` |\n| `SESSION_KEY_PREFIX` | Préfixe des clés Redis (`{prefix}:{sessionId}`) | `fimeco2:sessions` |\n| `SESSION_TTL_MINUTES` | TTL de session en minutes | `15` |\n\nExemple :\n\n```bash\nREDIS_HOST=redis.local REDIS_PORT=6380 SESSION_TTL_MINUTES=60 node app.js\n```\n\n## Architecture\n\nLes sessions sont stockées sous forme de documents JSON dans Redis Stack (module `ReJSON`) avec le pattern de clé `{prefix}:{sessionId}` — le préfixe est configurable via la variable `SESSION_KEY_PREFIX` (défaut : `\"fimeco2:sessions\"`). Chaque session dispose d'un TTL configurable via `SESSION_TTL_MINUTES` (défaut : 15 min), appliqué après chaque opération d'écriture.\n\n## Technologies utilisées\n\n- **ioredis** — client Redis asynchrone pour Node.js\n- **nanoid** — génération d'identifiants uniques cryptographiquement sécurisés\n\n## Scripts npm\n\n| Commande | Description |\n|----------|-------------|\n| `npm test` | Lance les tests |\n| `npm run release:local` | Crée une nouvelle version mineure et publie localement |\n| `npm run release:public` | Crée une nouvelle version mineure et publie sur npmjs.org |\n\n## Licence\n\nISC — © 2026 Daniel Beauyat\n","readmeFilename":"README.md"}