{"_id":"@bernierllc/session-manager","_rev":"11-8f55f53f541082fb23f852d4af4df828","name":"@bernierllc/session-manager","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.2":{"name":"@bernierllc/session-manager","version":"1.0.2","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"4d9971f517fc2e1938dc69b04b7e099f9ff3129c","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.0.2.tgz","fileCount":46,"integrity":"sha512-Qb9BN3V+DydCGadfjbS48SYzIarySd1ldmvnwJyGVyvi1TS+YU5QA5WkhEvYiD9KYMbY+v+fWVAvStIhbf087g==","signatures":[{"sig":"MEUCIGs8l9i3amaHN7PxIAsIwr0MRfvEzhlIVNnM7fSltb11AiEAjx30ftqlAk2wF+VWXgVdR5crv/XtZQTJpF2wyKkQgKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91417},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e37b7e7e8bdb050dda779f0ed25e9c4698fc5673","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.4.2","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@bernierllc/crypto-utils":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.0.2_1757004933146_0.29874960020474695","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bernierllc/session-manager","version":"1.0.3","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.0.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"dab897fcc74dd6665916e2254233952a6a378242","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.0.3.tgz","fileCount":46,"integrity":"sha512-VX9lbKI4UahQM8qrBc7O/7Nar1TYsoUQDD0RiUDoyGKISUP4ARGZSU6doxqpexieJ7TkNyFBBGuhQnOrP3ZISw==","signatures":[{"sig":"MEUCIAcQLm9yAUtBi8DIRHGVusHl9yp1D0NwFXNkMoHWOyZ+AiEAnftZ+t268eUWYXVnaGTDBUY+KLa8oQeWIhj3tt6kFwY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91417},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ac9ffe8f71cc60332213827982b8725d476bda57","private":false,"scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.4.2","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"24.4.1","dependencies":{"@bernierllc/crypto-utils":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@typescript-eslint/parser":"^5.57.0","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.0.3_1757005023978_0.39997522256351226","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bernierllc/session-manager","version":"1.0.6","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.0.6","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"3be1578a0f7d88f7377d7d6ab13c1fc42f1ec56a","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.0.6.tgz","fileCount":46,"integrity":"sha512-0mh/gGa+nNP1BltmF+j10fHjcjtXV+3IpJCs/NU5xk1OptPTMJZuJmAGh8D91sVNLiY4roVzs+dROPaDPZuvGw==","signatures":[{"sig":"MEQCIGfRKPkdQd7mG5HBZgvuLGCCYAlH7BVciQMjTJWDXWXJAiA0AMxFmwYuhkzb6NitDaBaJqEOElI2i2koQp0NPQDBBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91488},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"96b0ee8db76a45967d0a26bec52267cacd4a636c","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.6.2","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"25.2.1","dependencies":{"@bernierllc/crypto-utils":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^5.57.0","@types/express-serve-static-core":"^4.17.43","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.0.6_1766434393138_0.14935628957481195","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@bernierllc/session-manager","version":"1.0.8","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.0.8","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"2c17af7aced1859acb500da79e28c29d7f131193","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.0.8.tgz","fileCount":46,"integrity":"sha512-m6zvEiYCrpnATux0B/bMQfxf8596SnJvky+JjCXWXerx4kpywI3j8UU1vsXRtGFXk1Y9rTGQjaxqPiODnU6law==","signatures":[{"sig":"MEUCIQDeliimcI1MhcjKacysYdzzpAyz6/wRF4RIoNN1NMuE7gIgdMMTWe4woPDtJoMCt5MFxWqmN54FPmXuIAyrvRIWa78=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91586},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7908fba6-5197-4557-b4ff-9728cb645aae"}},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/crypto-utils":"1.0.6"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^5.57.0","@types/express-serve-static-core":"^4.17.43","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.0.8_1767642384078_0.12464534387625226","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@bernierllc/session-manager","version":"1.0.9","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.0.9","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"9f16810f554f728bcab0194ff4a03ada850f2145","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.0.9.tgz","fileCount":46,"integrity":"sha512-fpUEHs8BHgUQo5yXtJtcQtsDozjzPjhMnt6bbGLxwoMkDP3yV1aSkgL4gMLwxI+GZ3cZuLNHENfuDjdHX8JNvA==","signatures":[{"sig":"MEUCIQCyqBZJ0DnCv1tLD+t7ybybYcctn4rhHi0Rou0gATztzAIgEOk9FbaXiRySD/lWgDRDxTwfCy+8nhwRBzMcb+e6B7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91528},"main":"dist/index.js","_from":"file:bernierllc-session-manager-1.0.9.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7908fba6-5197-4557-b4ff-9728cb645aae"}},"_resolved":"/tmp/e188fd6e980e95c1774347723a71aa11/bernierllc-session-manager-1.0.9.tgz","_integrity":"sha512-fpUEHs8BHgUQo5yXtJtcQtsDozjzPjhMnt6bbGLxwoMkDP3yV1aSkgL4gMLwxI+GZ3cZuLNHENfuDjdHX8JNvA==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.11.0","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/crypto-utils":"1.0.7"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^5.57.0","@types/express-serve-static-core":"^4.17.43","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.0.9_1773078189024_0.5469214661195385","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@bernierllc/session-manager","version":"1.0.10","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.0.10","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"5e15b99940923a69470859a181aa7ede9f265d5f","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.0.10.tgz","fileCount":46,"integrity":"sha512-1L9hpQA2gSJBjjN7P5RQMw10KVpUzLax9OOY3PkAknX3fB+xUI+atsdr8ZU62XWtP6PUJ5OKfLI2rUXhO4FBPQ==","signatures":[{"sig":"MEYCIQDFNDju6mGJxdsbz3HffA3NZTbwkwcm/9IkASQZcBWp8AIhAJqnUzkILCR4bha3gP3qNAYRWQWhMUKaRpR7E8XD88QQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91529},"main":"dist/index.js","_from":"file:bernierllc-session-manager-1.0.10.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7908fba6-5197-4557-b4ff-9728cb645aae"}},"_resolved":"/home/runner/work/tools/tools/packages/core/session-manager/bernierllc-session-manager-1.0.10.tgz","_integrity":"sha512-1L9hpQA2gSJBjjN7P5RQMw10KVpUzLax9OOY3PkAknX3fB+xUI+atsdr8ZU62XWtP6PUJ5OKfLI2rUXhO4FBPQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.11.0","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/crypto-utils":"1.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^5.57.0","@types/express-serve-static-core":"^4.17.43","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.0.10_1773163277578_0.6230103989557765","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bernierllc/session-manager","version":"1.1.0","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"d95b91e9c26700c7b5317c6fd5509b6470fe8e62","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.1.0.tgz","fileCount":46,"integrity":"sha512-ptJVLD9uwLQkX0W38pW86mUOegHiIlXypcZ4O/B+WpQ67G9PlvHoz17hBYsnObztUSer/Cjibr7N3ClQsghGvg==","signatures":[{"sig":"MEQCIBWVqqCaoFPds0nnMMMkwJC3D6UK4QVJqprf7SeHQrzqAiAHGMgYzn6ucR4uNThzbCGUg7bOhNQr4EGZ4eN5Fip4uQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91528},"main":"dist/index.js","_from":"file:bernierllc-session-manager-1.1.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7908fba6-5197-4557-b4ff-9728cb645aae"}},"_resolved":"/home/runner/work/tools/tools/packages/core/session-manager/bernierllc-session-manager-1.1.0.tgz","_integrity":"sha512-ptJVLD9uwLQkX0W38pW86mUOegHiIlXypcZ4O/B+WpQ67G9PlvHoz17hBYsnObztUSer/Cjibr7N3ClQsghGvg==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.14.1","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/crypto-utils":"1.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^5.57.0","@types/express-serve-static-core":"^4.17.43","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.1.0_1779221419191_0.41672130209231373","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/session-manager","version":"1.2.0","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"1a5abf4232421ca47fa6be84faeb002bca1245b1","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.2.0.tgz","fileCount":46,"integrity":"sha512-d5Kt+5U4J9oK/s0G5+cIE5ocP9t2z38k6E0CR/AdaRwxFP86Sh8E0Nkru8HOlcAKWBI0Epmu9WgZ0xVePnKZrQ==","signatures":[{"sig":"MEUCIBkZK4RzQJuErHBYI5an50aLHYca7l9Az9+jo1XbNAARAiEAp8fbFZ7EKBqchyW7gi3gAx1YcBDBUU6/cR5ZuvRlR1A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91528},"main":"dist/index.js","_from":"file:bernierllc-session-manager-1.2.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7908fba6-5197-4557-b4ff-9728cb645aae"}},"_resolved":"/home/runner/work/tools/tools/packages/core/session-manager/bernierllc-session-manager-1.2.0.tgz","_integrity":"sha512-d5Kt+5U4J9oK/s0G5+cIE5ocP9t2z38k6E0CR/AdaRwxFP86Sh8E0Nkru8HOlcAKWBI0Epmu9WgZ0xVePnKZrQ==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.14.1","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/crypto-utils":"1.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^5.57.0","@types/express-serve-static-core":"^4.17.43","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.2.0_1779241398228_0.6255380264869201","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/session-manager","version":"1.3.0","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/session-manager@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"1852ac875f332beb8c702b7550f78da3f721f32b","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.3.0.tgz","fileCount":50,"integrity":"sha512-86NuacQUVd+Sn+Ik6xFKx8cYyF7lIgygUgInXKHlkP1vuKULONX/XBycNhlE7yLgkB7+47Mem8JcRKJrsgCu5w==","signatures":[{"sig":"MEYCIQDDpcRoYvvrK2s5NHghz36leBjf+XKhYyD3FXkSbQ5tyQIhAP6h1zCreG80WuhpoTohOBiK8NqrRKFskHz3+PBxGJkw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94956},"main":"dist/index.js","_from":"file:bernierllc-session-manager-1.3.0.tgz","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7908fba6-5197-4557-b4ff-9728cb645aae"}},"_resolved":"/home/runner/work/tools/tools/packages/core/session-manager/bernierllc-session-manager-1.3.0.tgz","_integrity":"sha512-86NuacQUVd+Sn+Ik6xFKx8cYyF7lIgygUgInXKHlkP1vuKULONX/XBycNhlE7yLgkB7+47Mem8JcRKJrsgCu5w==","repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/core/session-manager"},"_npmVersion":"11.14.1","description":"Secure session management with multiple storage backends and authentication integration","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/crypto-utils":"1.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.37.0","ts-jest":"^29.0.5","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.15.0","@types/cookie":"^0.5.0","@types/express":"^4.17.21","@typescript-eslint/parser":"^5.57.0","@types/express-serve-static-core":"^4.17.43","@typescript-eslint/eslint-plugin":"^5.57.0"},"peerDependencies":{"redis":"^4.0.0","cookie":"^0.5.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/session-manager_1.3.0_1779243298294_0.1526240874803857","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/session-manager","version":"1.4.0","description":"Secure session management with multiple storage backends and authentication integration","main":"dist/index.js","types":"dist/index.d.ts","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","dependencies":{"@bernierllc/crypto-utils":"1.4.0"},"peerDependencies":{"cookie":"^0.5.0","redis":"^4.0.0"},"peerDependenciesMeta":{"redis":{"optional":true},"cookie":{"optional":true}},"devDependencies":{"@types/cookie":"^0.5.0","@types/express":"^4.17.21","@types/express-serve-static-core":"^4.17.43","@types/jest":"^29.5.0","@types/node":"^18.15.0","@typescript-eslint/eslint-plugin":"^5.57.0","@typescript-eslint/parser":"^5.57.0","eslint":"^8.37.0","jest":"^29.5.0","ts-jest":"^29.0.5","typescript":"^5.0.0"},"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/core/session-manager"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","dev":"tsc --watch","test":"jest","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","clean":"rm -rf dist"},"_id":"@bernierllc/session-manager@1.4.0","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"homepage":"https://github.com/bernierllc/tools#readme","_integrity":"sha512-xb/XVylget0JfJZHvRl5CJZpLcan14WhQT1sTOVweAMJu01tcGfr7qUIYrQ+Ucn2yCnJS5AE+XStH60k4GAORw==","_resolved":"/home/runner/work/tools/tools/packages/core/session-manager/bernierllc-session-manager-1.4.0.tgz","_from":"file:bernierllc-session-manager-1.4.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-xb/XVylget0JfJZHvRl5CJZpLcan14WhQT1sTOVweAMJu01tcGfr7qUIYrQ+Ucn2yCnJS5AE+XStH60k4GAORw==","shasum":"fd9563c489e0e7a4f797da21ce42800ccf5a3172","tarball":"https://registry.npmjs.org/@bernierllc/session-manager/-/session-manager-1.4.0.tgz","fileCount":50,"unpackedSize":94956,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGhWj4nA5zfzFX0bot8MCzAquH8d9R40LEdLq2JD0oHRAiB6tY9ELTu+MqF1i2TWKuOc/GgyHbNKOVYa6mL+zyR5gQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7908fba6-5197-4557-b4ff-9728cb645aae"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/session-manager_1.4.0_1779250144128_0.43877135667845746"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-04T16:55:32.730Z","modified":"2026-05-20T04:09:04.457Z","1.0.2":"2025-09-04T16:55:33.345Z","1.0.3":"2025-09-04T16:57:04.168Z","1.0.6":"2025-12-22T20:13:13.299Z","1.0.8":"2026-01-05T19:46:24.253Z","1.0.9":"2026-03-09T17:43:09.172Z","1.0.10":"2026-03-10T17:21:17.729Z","1.1.0":"2026-05-19T20:10:19.339Z","1.2.0":"2026-05-20T01:43:18.378Z","1.3.0":"2026-05-20T02:14:58.444Z","1.4.0":"2026-05-20T04:09:04.301Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","homepage":"https://github.com/bernierllc/tools#readme","keywords":["session","session-management","authentication","redis","middleware","express","fastify","nextjs","security"],"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/core/session-manager"},"description":"Secure session management with multiple storage backends and authentication integration","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/session-manager\n\nSecure session management with multiple storage backends and authentication integration.\n\n## Installation\n\n```bash\nnpm install @bernierllc/session-manager @bernierllc/crypto-utils\n```\n\nFor Redis support:\n```bash\nnpm install @bernierllc/session-manager redis\n```\n\nFor Express middleware:\n```bash\nnpm install @bernierllc/session-manager cookie\n```\n\n## Quick Start\n\n```typescript\nimport { SessionManager, MemorySessionStorage } from '@bernierllc/session-manager';\n\n// Create session manager\nconst sessionManager = new SessionManager({\n  storage: new MemorySessionStorage(),\n  secret: process.env.SESSION_SECRET!,\n  maxAge: 24 * 60 * 60 * 1000 // 24 hours\n});\n\n// Create new session\nconst session = await sessionManager.create({\n  userId: '123',\n  roles: ['user'],\n  loginTime: new Date()\n});\n\n// Retrieve session\nconst retrievedSession = await sessionManager.get(session.id);\n\nconsole.log('Session data:', retrievedSession?.data);\n```\n\n## Core Features\n\n- **Multiple Storage**: Memory, Redis, database, encrypted cookies\n- **Security**: Secure session IDs, CSRF protection, session fixation prevention\n- **Lifecycle Management**: TTL, sliding expiration, automatic cleanup\n- **Authentication Integration**: User binding, role-based sessions\n- **Framework Support**: Express, Fastify, Next.js middleware\n- **Serialization**: JSON, encrypted, compressed session data\n- **Monitoring**: Session analytics and security tracking\n\n## API Reference\n\n### SessionManager\n\n#### Constructor\n\n```typescript\nconst sessionManager = new SessionManager(options: SessionOptions)\n```\n\n**Options:**\n- `storage: SessionStorage` - Storage backend (required)\n- `secret: string` - Signing/encryption secret (required)\n- `name?: string` - Session cookie name (default: 'sessionId')\n- `maxAge?: number` - Session TTL in milliseconds (default: 24 hours)\n- `secure?: boolean` - HTTPS only cookies (default: false)\n- `httpOnly?: boolean` - HTTP only cookies (default: true)\n- `sameSite?: 'strict' | 'lax' | 'none'` - SameSite cookie attribute (default: 'lax')\n- `rolling?: boolean` - Refresh TTL on access (default: true)\n- `genid?: () => string` - Custom session ID generator\n\n#### Core Methods\n\n```typescript\n// Session operations\nawait sessionManager.create(initialData?: SessionData): Promise<Session>\nawait sessionManager.get(sessionId: string): Promise<Session | null>\nawait sessionManager.destroy(sessionId: string): Promise<void>\nawait sessionManager.destroyAll(): Promise<void>\n\n// User session management\nawait sessionManager.getSessionsForUser(userId: string): Promise<Session[]>\nawait sessionManager.destroyUserSessions(userId: string): Promise<void>\nawait sessionManager.destroyAllButCurrent(currentSessionId: string, userId: string): Promise<void>\n\n// Security\nawait sessionManager.regenerateId(session: Session): Promise<void>\nawait sessionManager.validateSession(sessionId: string, ipAddress?: string, userAgent?: string): Promise<boolean>\n\n// Cleanup\nawait sessionManager.cleanup(): Promise<number>\nsessionManager.startCleanupInterval(intervalMs?: number): void\nsessionManager.stopCleanupInterval(): void\n\n// Statistics\nawait sessionManager.getStats(): Promise<SessionStats>\n```\n\n### Session\n\n```typescript\n// Data operations\nsession.get<T>(key: string): T | undefined\nsession.set<T>(key: string, value: T): void\nsession.has(key: string): boolean\nsession.delete(key: string): boolean\nsession.clear(): void\nsession.touch(): void\n\n// Persistence\nawait session.save(): Promise<void>\nawait session.reload(): Promise<void>\nawait session.destroy(): Promise<void>\n```\n\n## Usage Examples\n\n### Basic Session Management\n\n```typescript\nimport { SessionManager, MemorySessionStorage } from '@bernierllc/session-manager';\n\nconst sessionManager = new SessionManager({\n  storage: new MemorySessionStorage({ maxSessions: 1000 }),\n  secret: process.env.SESSION_SECRET!,\n  maxAge: 60 * 60 * 1000, // 1 hour\n  rolling: true\n});\n\n// Create session with user data\nconst session = await sessionManager.create({\n  userId: '123',\n  username: 'john_doe',\n  roles: ['user', 'premium']\n});\n\n// Use session\nsession.set('lastActivity', new Date());\nsession.set('preferences', { theme: 'dark', lang: 'en' });\n\nawait session.save();\n```\n\n### Redis-backed Distributed Sessions\n\n```typescript\nimport { SessionManager, RedisSessionStorage } from '@bernierllc/session-manager';\n\nconst sessionManager = new SessionManager({\n  storage: new RedisSessionStorage({\n    host: 'localhost',\n    port: 6379,\n    keyPrefix: 'sess:',\n    password: process.env.REDIS_PASSWORD\n  }),\n  secret: process.env.SESSION_SECRET!,\n  maxAge: 30 * 60 * 1000, // 30 minutes\n  rolling: true\n});\n\n// Sessions work across multiple application instances\nconst session = await sessionManager.create({ userId: '456' });\n```\n\n### Express Middleware Integration\n\n```typescript\nimport express from 'express';\nimport { createSessionMiddleware, RedisSessionStorage } from '@bernierllc/session-manager';\n\nconst app = express();\n\nconst sessionMiddleware = createSessionMiddleware({\n  storage: new RedisSessionStorage({\n    host: 'localhost',\n    port: 6379\n  }),\n  secret: process.env.SESSION_SECRET!,\n  name: 'sid',\n  maxAge: 24 * 60 * 60 * 1000, // 24 hours\n  secure: process.env.NODE_ENV === 'production',\n  rolling: true\n});\n\napp.use(sessionMiddleware);\n\n// Login route\napp.post('/login', async (req, res) => {\n  const { username, password } = req.body;\n  \n  if (await validateCredentials(username, password)) {\n    const user = await getUserByUsername(username);\n    \n    req.session.set('userId', user.id);\n    req.session.set('roles', user.roles);\n    req.session.set('loginTime', new Date());\n    \n    await req.session.save();\n    res.json({ success: true });\n  } else {\n    res.status(401).json({ error: 'Invalid credentials' });\n  }\n});\n\n// Logout route\napp.post('/logout', async (req, res) => {\n  await req.session.destroy();\n  res.clearCookie('sid');\n  res.json({ success: true });\n});\n\n// Protected route\napp.get('/profile', async (req, res) => {\n  const userId = req.session.get('userId');\n  \n  if (!userId) {\n    return res.status(401).json({ error: 'Not authenticated' });\n  }\n  \n  const user = await getUserById(userId);\n  res.json(user);\n});\n```\n\n### Advanced Security Features\n\n```typescript\nimport { SessionManager } from '@bernierllc/session-manager';\n\nconst sessionManager = new SessionManager({\n  // ... configuration\n});\n\n// Session validation with security checks\nasync function secureSessionValidation(sessionId: string, req: any) {\n  const isValid = await sessionManager.validateSession(\n    sessionId,\n    req.ip,\n    req.headers['user-agent']\n  );\n  \n  if (!isValid) {\n    throw new Error('Session validation failed');\n  }\n  \n  const session = await sessionManager.get(sessionId);\n  \n  // Additional security checks\n  if (session && session.data.ipAddress !== req.ip) {\n    console.warn(`Suspicious activity: IP changed for session ${sessionId}`);\n    await sessionManager.destroy(sessionId);\n    throw new Error('Session terminated due to security concerns');\n  }\n  \n  return session;\n}\n\n// Session regeneration for privilege escalation\nasync function escalatePrivileges(session: Session, newRoles: string[]) {\n  // Regenerate session ID for security\n  await sessionManager.regenerateId(session);\n  \n  // Update roles\n  session.set('roles', newRoles);\n  session.set('privilegeEscalation', new Date());\n  \n  await session.save();\n}\n```\n\n### Multi-Device Session Management\n\n```typescript\n// Limit concurrent sessions per user\nasync function enforceSessionLimit(userId: string, maxSessions: number = 3) {\n  const userSessions = await sessionManager.getSessionsForUser(userId);\n  \n  if (userSessions.length >= maxSessions) {\n    // Sort by last accessed time, keep most recent\n    userSessions.sort((a, b) => \n      b.lastAccessedAt.getTime() - a.lastAccessedAt.getTime()\n    );\n    \n    // Destroy oldest sessions\n    const sessionsToDestroy = userSessions.slice(maxSessions - 1);\n    for (const session of sessionsToDestroy) {\n      await session.destroy();\n    }\n  }\n}\n\n// Logout from all devices except current\napp.post('/logout-all-devices', async (req, res) => {\n  const currentSessionId = req.sessionID;\n  const userId = req.session.get('userId');\n  \n  await sessionManager.destroyAllButCurrent(currentSessionId, userId);\n  \n  res.json({ \n    success: true, \n    message: 'Logged out from all other devices' \n  });\n});\n```\n\n### Session Analytics and Monitoring\n\n```typescript\n// Monitor session activity\nsetInterval(async () => {\n  const stats = await sessionManager.getStats();\n  \n  console.log(`Session Statistics:\n    Active Sessions: ${stats.active}\n    Total Created: ${stats.totalCreated}\n    Peak Concurrent: ${stats.peakConcurrent}\n    Average Duration: ${Math.round(stats.averageDuration / 1000)}s\n  `);\n  \n  // Alert on suspicious activity\n  if (stats.active > stats.peakConcurrent * 1.2) {\n    console.warn('Unusually high session activity detected');\n  }\n}, 60000); // Check every minute\n\n// Automatic cleanup\nsessionManager.startCleanupInterval(15 * 60 * 1000); // Clean every 15 minutes\n\n// Graceful shutdown\nprocess.on('SIGTERM', async () => {\n  console.log('Shutting down session manager...');\n  await sessionManager.close();\n  process.exit(0);\n});\n```\n\n## Configuration\n\n### Storage Backends\n\n#### MemorySessionStorage\n```typescript\nnew MemorySessionStorage({\n  maxSessions: 1000        // Maximum number of sessions in memory\n})\n```\n\n#### RedisSessionStorage\n```typescript\nnew RedisSessionStorage({\n  host: 'localhost',\n  port: 6379,\n  password: 'secret',       // Optional\n  db: 0,                    // Database number\n  keyPrefix: 'sess:',       // Key prefix for sessions\n  connectionString: 'redis://localhost:6379' // Alternative to host/port\n})\n```\n\n### Security Best Practices\n\n1. **Use Strong Secrets**: Generate cryptographically secure secrets\n2. **Enable Secure Cookies**: Set `secure: true` in production\n3. **Regular Cleanup**: Enable automatic session cleanup\n4. **Session Regeneration**: Regenerate session IDs after authentication\n5. **IP Validation**: Consider IP address validation for high-security apps\n6. **Rolling Sessions**: Use rolling expiration to maintain active sessions\n\n### Performance Optimization\n\n```typescript\n// Optimize for high-traffic applications\nconst sessionManager = new SessionManager({\n  storage: new RedisSessionStorage({\n    // Redis connection pooling\n    host: 'redis-cluster',\n    port: 6379\n  }),\n  // Shorter cleanup intervals for active cleanup\n  maxAge: 30 * 60 * 1000,   // 30 minutes\n  rolling: true,             // Keep active sessions alive\n  saveUninitialized: false,  // Don't save empty sessions\n  resave: false             // Don't resave unchanged sessions\n});\n\n// Efficient cleanup\nsessionManager.startCleanupInterval(5 * 60 * 1000); // 5 minutes\n```\n\n## Error Handling\n\n```typescript\ntry {\n  const session = await sessionManager.get(sessionId);\n  \n  if (!session) {\n    throw new Error('Session not found or expired');\n  }\n  \n  // Use session...\n} catch (error) {\n  console.error('Session error:', error);\n  // Handle session errors appropriately\n}\n```\n\n## Testing\n\nThe package includes comprehensive tests covering:\n\n- Session lifecycle management\n- Security features and validation\n- Storage backend implementations\n- Memory management and cleanup\n- Express middleware integration\n\nRun tests:\n```bash\nnpm test\nnpm run test:coverage\n```\n\n## Integration Documentation\n\n### Logger Integration\n\nThe session manager supports optional logger integration using `@bernierllc/logger`:\n\n```typescript\nimport { SessionManager } from '@bernierllc/session-manager';\nimport { detectLogger } from '@bernierllc/logger';\n\nconst sessionManager = new SessionManager({\n  storage: new MemorySessionStorage(),\n  secret: process.env.SESSION_SECRET!\n});\n\n// Auto-detect logger if available\nconst logger = await detectLogger();\nif (logger) {\n  // Enhanced logging for session events\n  sessionManager.on('sessionCreated', (sessionId) => {\n    logger.info('Session created', { sessionId });\n  });\n  \n  sessionManager.on('sessionDestroyed', (sessionId) => {\n    logger.info('Session destroyed', { sessionId });\n  });\n}\n```\n\n### NeverHub Integration\n\nThe session manager integrates with NeverHub when available for enhanced service discovery and event communication:\n\n```typescript\nimport { SessionManager } from '@bernierllc/session-manager';\nimport { detectNeverHub } from '@bernierllc/neverhub-adapter';\n\nasync function initializeSessionManager() {\n  const sessionManager = new SessionManager({\n    storage: new MemorySessionStorage(),\n    secret: process.env.SESSION_SECRET!\n  });\n\n  // Auto-detect NeverHub\n  const neverhub = await detectNeverHub();\n  if (neverhub) {\n    // Register session manager as a service\n    await neverhub.register({\n      type: 'session-manager',\n      name: '@bernierllc/session-manager',\n      version: '1.0.0',\n      capabilities: [\n        { type: 'session', name: 'management', version: '1.0.0' },\n        { type: 'auth', name: 'session-auth', version: '1.0.0' }\n      ]\n    });\n\n    // Publish session events\n    sessionManager.on('sessionCreated', async (data) => {\n      await neverhub.publishEvent({\n        type: 'session.created',\n        data: { sessionId: data.sessionId, userId: data.userId }\n      });\n    });\n\n    // Subscribe to authentication events\n    await neverhub.subscribe('auth.login', async (event) => {\n      // Create session for authenticated user\n      await sessionManager.create({\n        userId: event.data.userId,\n        roles: event.data.roles\n      });\n    });\n  }\n\n  return sessionManager;\n}\n```\n\n### Graceful Degradation\n\nThe session manager implements graceful degradation patterns:\n\n- **Works without external services**: Core functionality operates independently\n- **Logger integration**: Enhanced logging when logger service is available\n- **NeverHub integration**: Service discovery and events when NeverHub is present\n- **Storage flexibility**: Falls back to memory storage if Redis is unavailable\n\n## Dependencies\n\n- **Required**: `@bernierllc/crypto-utils` for secure session ID generation\n- **Optional**: `redis` for Redis storage backend\n- **Optional**: `cookie` for Express middleware support\n- **Optional**: `@bernierllc/logger` for enhanced logging capabilities\n- **Optional**: `@bernierllc/neverhub-adapter` for service discovery integration\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.","readmeFilename":"README.md"}