{"_id":"@alaska115/nextjs-toolkit","_rev":"7-71bfa5a3e7b86c44c32d22e0f213d78d","name":"@alaska115/nextjs-toolkit","dist-tags":{"latest":"0.7.0"},"versions":{"0.4.0":{"name":"@alaska115/nextjs-toolkit","version":"0.4.0","keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"license":"MIT","_id":"@alaska115/nextjs-toolkit@0.4.0","maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"dist":{"shasum":"3c01c200720db07470f206ea14090c5dff883b46","tarball":"https://registry.npmjs.org/@alaska115/nextjs-toolkit/-/nextjs-toolkit-0.4.0.tgz","fileCount":583,"integrity":"sha512-+0BwMBex3ynPWbLsqqgNb6ZqN1+VVkO3akI7TrWKDUjU8NfUdD9acYbS56I8qfYldmfwL8dOjsAgkN8LbCSu5Q==","signatures":[{"sig":"MEUCIQDagJeqyL5MbC/gc5rCaujToaHId8oevPliG4urgSWwDAIgTTcY8sNP3R3vSrcbCV8HTHdWmWwm0pKpL7JWjC1Flys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1195589},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit":{"types":"./dist/audit/index.d.ts","default":"./dist/audit/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./errors":{"types":"./dist/errors/index.d.ts","default":"./dist/errors/index.js"},"./health":{"types":"./dist/health/index.d.ts","default":"./dist/health/index.js"},"./outbox":{"types":"./dist/outbox/index.d.ts","default":"./dist/outbox/index.js"},"./secret":{"types":"./dist/secret/index.d.ts","default":"./dist/secret/index.js"},"./context":{"types":"./dist/context/index.d.ts","default":"./dist/context/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./shutdown":{"types":"./dist/shutdown/index.d.ts","default":"./dist/shutdown/index.js"},"./bootstrap":{"types":"./dist/bootstrap/index.d.ts","default":"./dist/bootstrap/index.js"},"./messaging":{"types":"./dist/messaging/index.d.ts","default":"./dist/messaging/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./resilience":{"types":"./dist/resilience/index.d.ts","default":"./dist/resilience/index.js"},"./persistence":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"./file-storage":{"types":"./dist/file-storage/index.d.ts","default":"./dist/file-storage/index.js"},"./feature-flags":{"types":"./dist/feature-flags/index.d.ts","default":"./dist/feature-flags/index.js"},"./multi-tenancy":{"types":"./dist/multi-tenancy/index.d.ts","default":"./dist/multi-tenancy/index.js"},"./observability":{"types":"./dist/observability/index.d.ts","default":"./dist/observability/index.js"}},"gitHead":"f4bdf70e049e903e17e8a3afbd491c0d6a70bcd6","scripts":{"test":"jest","audit":"pnpm audit --audit-level high --prod","build":"tsc","clean":"rm -rf dist","start:dev":"tsc --watch","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test"},"_npmUser":{"name":"alao115","email":"chegunmoulero@gmail.com"},"_npmVersion":"10.9.2","description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, file-storage, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown","directories":{},"_nodeVersion":"22.16.0","dependencies":{"joi":"^18.0.2","uuid":"^13.0.0","luxon":"^3.7.2","redis":"^5.11.0","helmet":"^8.1.0","ioredis":"^5.10.0","winston":"^3.19.0","@keyv/redis":"^5.1.6","change-case":"^5.4.4","connect-redis":"^9.0.0","express-session":"^1.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","ts-jest":"^29.1.2","nodemailer":"^7.0.13","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/node":"^18.19.130","prom-client":"^15.1.3","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@types/express":"^4.17.17","@nestjs/swagger":"^11.0.0","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependencies":{"twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","nodemailer":"^7.0.13","prom-client":"^15.1.3","@nestjs/core":"^10.0.0","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/common":"^10.0.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@nestjs/swagger":"^11.0.0","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@nestjs/platform-express":"^10.0.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependenciesMeta":{"twig":{"optional":true},"minio":{"optional":true},"argon2":{"optional":true},"nodemailer":{"optional":true},"prom-client":{"optional":true},"@ngrok/ngrok":{"optional":true},"@sentry/node":{"optional":true},"@prisma/client":{"optional":true},"@opentelemetry/api":{"optional":true},"@prisma/adapter-pg":{"optional":true},"@opentelemetry/sdk-node":{"optional":true},"@opentelemetry/resources":{"optional":true},"@opentelemetry/instrumentation":{"optional":true},"@opentelemetry/instrumentation-http":{"optional":true},"@opentelemetry/semantic-conventions":{"optional":true},"@opentelemetry/instrumentation-express":{"optional":true},"@opentelemetry/exporter-trace-otlp-http":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nextjs-toolkit_0.4.0_1779788714871_0.959386193152747","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@alaska115/nextjs-toolkit","version":"0.4.1","keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"license":"MIT","_id":"@alaska115/nextjs-toolkit@0.4.1","maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"homepage":"https://github.com/alao115/nextjs-toolkit#readme","bugs":{"url":"https://github.com/alao115/nextjs-toolkit/issues"},"dist":{"shasum":"ab72ae07ee37bf8209c483e0426132adb0d53de2","tarball":"https://registry.npmjs.org/@alaska115/nextjs-toolkit/-/nextjs-toolkit-0.4.1.tgz","fileCount":584,"integrity":"sha512-gsamuK1Gvx1/UMEqk1Pzr0EG0dJAWFDo5l08kBeL5ePpoHCiElWJIdm0DsCkeSQMcdBD0V8VxsU73/KDdHM7SQ==","signatures":[{"sig":"MEQCID6JAgATo6/UlzvPa9ymiqWKD0YkIhY5IjuVEkAOqroyAiAdq7hI1pwJUjODg80LvDeKo03GsFOI904F8q7G4Togdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1181407},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit":{"types":"./dist/audit/index.d.ts","default":"./dist/audit/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./errors":{"types":"./dist/errors/index.d.ts","default":"./dist/errors/index.js"},"./health":{"types":"./dist/health/index.d.ts","default":"./dist/health/index.js"},"./outbox":{"types":"./dist/outbox/index.d.ts","default":"./dist/outbox/index.js"},"./secret":{"types":"./dist/secret/index.d.ts","default":"./dist/secret/index.js"},"./context":{"types":"./dist/context/index.d.ts","default":"./dist/context/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./shutdown":{"types":"./dist/shutdown/index.d.ts","default":"./dist/shutdown/index.js"},"./bootstrap":{"types":"./dist/bootstrap/index.d.ts","default":"./dist/bootstrap/index.js"},"./messaging":{"types":"./dist/messaging/index.d.ts","default":"./dist/messaging/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./resilience":{"types":"./dist/resilience/index.d.ts","default":"./dist/resilience/index.js"},"./persistence":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"./file-storage":{"types":"./dist/file-storage/index.d.ts","default":"./dist/file-storage/index.js"},"./feature-flags":{"types":"./dist/feature-flags/index.d.ts","default":"./dist/feature-flags/index.js"},"./multi-tenancy":{"types":"./dist/multi-tenancy/index.d.ts","default":"./dist/multi-tenancy/index.js"},"./observability":{"types":"./dist/observability/index.d.ts","default":"./dist/observability/index.js"}},"gitHead":"bc1c60c68f9c5dbc4e05395976d2dcec65bb6e50","scripts":{"test":"jest","audit":"pnpm audit --audit-level high --prod","build":"tsc","clean":"rm -rf dist","start:dev":"tsc --watch","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test"},"_npmUser":{"name":"alao115","email":"chegunmoulero@gmail.com"},"repository":{"url":"git+https://github.com/alao115/nextjs-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, file-storage, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown","directories":{},"_nodeVersion":"22.16.0","dependencies":{"joi":"^18.0.2","uuid":"^13.0.0","luxon":"^3.7.2","redis":"^5.11.0","helmet":"^8.1.0","ioredis":"^5.10.0","winston":"^3.19.0","@keyv/redis":"^5.1.6","change-case":"^5.4.4","connect-redis":"^9.0.0","express-session":"^1.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rxjs":"^7.8.1","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","ts-jest":"^29.1.2","nodemailer":"^7.0.13","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/node":"^18.19.130","prom-client":"^15.1.3","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@types/express":"^4.17.17","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.2","reflect-metadata":"^0.2.0","class-transformer":"^0.5.1","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependencies":{"rxjs":"^7.0.0","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","nodemailer":"^7.0.13","prom-client":"^15.1.3","@nestjs/core":"^10.0.0","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/common":"^10.0.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@nestjs/platform-express":"^10.0.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependenciesMeta":{"twig":{"optional":true},"minio":{"optional":true},"argon2":{"optional":true},"nodemailer":{"optional":true},"prom-client":{"optional":true},"@ngrok/ngrok":{"optional":true},"@sentry/node":{"optional":true},"@prisma/client":{"optional":true},"@opentelemetry/api":{"optional":true},"@prisma/adapter-pg":{"optional":true},"@opentelemetry/sdk-node":{"optional":true},"@opentelemetry/resources":{"optional":true},"@opentelemetry/instrumentation":{"optional":true},"@opentelemetry/instrumentation-http":{"optional":true},"@opentelemetry/semantic-conventions":{"optional":true},"@opentelemetry/instrumentation-express":{"optional":true},"@opentelemetry/exporter-trace-otlp-http":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nextjs-toolkit_0.4.1_1779793906447_0.9684377991483348","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@alaska115/nextjs-toolkit","version":"0.4.2","keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"license":"MIT","_id":"@alaska115/nextjs-toolkit@0.4.2","maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"homepage":"https://github.com/alao115/nextjs-toolkit#readme","bugs":{"url":"https://github.com/alao115/nextjs-toolkit/issues"},"dist":{"shasum":"fa3d4b4b1e576f02d6b10ea9aee1d897930a919f","tarball":"https://registry.npmjs.org/@alaska115/nextjs-toolkit/-/nextjs-toolkit-0.4.2.tgz","fileCount":587,"integrity":"sha512-N28fKJXwhJJSmIL7WuJZyxX4WUL+5/j3VTej+AZj53u72M5P27MrB+ojwRIQC++h1hzQnbY2qcVVWHP2jjb49w==","signatures":[{"sig":"MEYCIQCxLfiCthl5yiUGTe1L6EiW9cHcsKS9+T6UaP7Pe10TyQIhAPY5WMfHr/fV4kkL+/leZ2abIf41ZKmK4GObXt5eqUkD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1186762},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit":{"types":"./dist/audit/index.d.ts","default":"./dist/audit/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./errors":{"types":"./dist/errors/index.d.ts","default":"./dist/errors/index.js"},"./health":{"types":"./dist/health/index.d.ts","default":"./dist/health/index.js"},"./outbox":{"types":"./dist/outbox/index.d.ts","default":"./dist/outbox/index.js"},"./secret":{"types":"./dist/secret/index.d.ts","default":"./dist/secret/index.js"},"./context":{"types":"./dist/context/index.d.ts","default":"./dist/context/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./shutdown":{"types":"./dist/shutdown/index.d.ts","default":"./dist/shutdown/index.js"},"./bootstrap":{"types":"./dist/bootstrap/index.d.ts","default":"./dist/bootstrap/index.js"},"./messaging":{"types":"./dist/messaging/index.d.ts","default":"./dist/messaging/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./resilience":{"types":"./dist/resilience/index.d.ts","default":"./dist/resilience/index.js"},"./persistence":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"./file-storage":{"types":"./dist/file-storage/index.d.ts","default":"./dist/file-storage/index.js"},"./feature-flags":{"types":"./dist/feature-flags/index.d.ts","default":"./dist/feature-flags/index.js"},"./multi-tenancy":{"types":"./dist/multi-tenancy/index.d.ts","default":"./dist/multi-tenancy/index.js"},"./observability":{"types":"./dist/observability/index.d.ts","default":"./dist/observability/index.js"}},"gitHead":"cb09d99e00eb3856acc86c5768e6a5aaacade8fa","scripts":{"test":"jest","audit":"pnpm audit --audit-level high --prod","build":"tsc","clean":"rm -rf dist","start:dev":"tsc --watch","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test"},"_npmUser":{"name":"alao115","email":"chegunmoulero@gmail.com"},"repository":{"url":"git+https://github.com/alao115/nextjs-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, file-storage, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown","directories":{},"_nodeVersion":"22.16.0","dependencies":{"joi":"^18.0.2","uuid":"^13.0.0","luxon":"^3.7.2","redis":"^5.11.0","helmet":"^8.1.0","ioredis":"^5.10.0","winston":"^3.19.0","@keyv/redis":"^5.1.6","change-case":"^5.4.4","connect-redis":"^9.0.0","express-session":"^1.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rxjs":"^7.8.1","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","ts-jest":"^29.1.2","nodemailer":"^7.0.13","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/node":"^18.19.130","prom-client":"^15.1.3","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@types/express":"^4.17.17","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.2","reflect-metadata":"^0.2.0","class-transformer":"^0.5.1","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependencies":{"rxjs":"^7.0.0","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","nodemailer":"^7.0.13","prom-client":"^15.1.3","@nestjs/core":"^10.0.0","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/common":"^10.0.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@nestjs/platform-express":"^10.0.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependenciesMeta":{"twig":{"optional":true},"minio":{"optional":true},"argon2":{"optional":true},"nodemailer":{"optional":true},"prom-client":{"optional":true},"@ngrok/ngrok":{"optional":true},"@sentry/node":{"optional":true},"@prisma/client":{"optional":true},"@opentelemetry/api":{"optional":true},"@prisma/adapter-pg":{"optional":true},"@opentelemetry/sdk-node":{"optional":true},"@opentelemetry/resources":{"optional":true},"@opentelemetry/instrumentation":{"optional":true},"@opentelemetry/instrumentation-http":{"optional":true},"@opentelemetry/semantic-conventions":{"optional":true},"@opentelemetry/instrumentation-express":{"optional":true},"@opentelemetry/exporter-trace-otlp-http":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nextjs-toolkit_0.4.2_1779803351664_0.9777468372983811","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@alaska115/nextjs-toolkit","version":"0.5.0","keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"license":"MIT","_id":"@alaska115/nextjs-toolkit@0.5.0","maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"homepage":"https://github.com/alao115/nextjs-toolkit#readme","bugs":{"url":"https://github.com/alao115/nextjs-toolkit/issues"},"dist":{"shasum":"eec11c0a155e2547d1e1513bc8010a5faf5eb9de","tarball":"https://registry.npmjs.org/@alaska115/nextjs-toolkit/-/nextjs-toolkit-0.5.0.tgz","fileCount":587,"integrity":"sha512-g5w70/++qqFWVkuuNUQBbWRwR8N64emx7fR90UX97Zu5LjdTTP53QXHXlZqejkvKLEPEiIt3EXnAoUCXPm0+Jw==","signatures":[{"sig":"MEYCIQDahW75sIu4H/RqFCglQS5Ox2yd1iByRsDtF3jUL/HscAIhAP4rpS8q13ZrXNjmo9hUNMAjb+f7qkCNGYMsOeoUBTVj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1188921},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit":{"types":"./dist/audit/index.d.ts","default":"./dist/audit/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./errors":{"types":"./dist/errors/index.d.ts","default":"./dist/errors/index.js"},"./health":{"types":"./dist/health/index.d.ts","default":"./dist/health/index.js"},"./outbox":{"types":"./dist/outbox/index.d.ts","default":"./dist/outbox/index.js"},"./secret":{"types":"./dist/secret/index.d.ts","default":"./dist/secret/index.js"},"./context":{"types":"./dist/context/index.d.ts","default":"./dist/context/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./shutdown":{"types":"./dist/shutdown/index.d.ts","default":"./dist/shutdown/index.js"},"./bootstrap":{"types":"./dist/bootstrap/index.d.ts","default":"./dist/bootstrap/index.js"},"./messaging":{"types":"./dist/messaging/index.d.ts","default":"./dist/messaging/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./resilience":{"types":"./dist/resilience/index.d.ts","default":"./dist/resilience/index.js"},"./persistence":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"./file-storage":{"types":"./dist/file-storage/index.d.ts","default":"./dist/file-storage/index.js"},"./feature-flags":{"types":"./dist/feature-flags/index.d.ts","default":"./dist/feature-flags/index.js"},"./multi-tenancy":{"types":"./dist/multi-tenancy/index.d.ts","default":"./dist/multi-tenancy/index.js"},"./observability":{"types":"./dist/observability/index.d.ts","default":"./dist/observability/index.js"}},"gitHead":"80440b2dbbfb9c4b9e094340602ce82389ac9d61","scripts":{"test":"jest","audit":"pnpm audit --audit-level high --prod","build":"tsc","clean":"rm -rf dist","start:dev":"tsc --watch","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test"},"_npmUser":{"name":"alao115","email":"chegunmoulero@gmail.com"},"repository":{"url":"git+https://github.com/alao115/nextjs-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, file-storage, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown","directories":{},"_nodeVersion":"22.16.0","dependencies":{"joi":"^18.0.2","uuid":"^13.0.0","luxon":"^3.7.2","redis":"^5.11.0","helmet":"^8.1.0","ioredis":"^5.10.0","winston":"^3.19.0","@keyv/redis":"^5.1.6","change-case":"^5.4.4","connect-redis":"^9.0.0","express-session":"^1.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rxjs":"^7.8.1","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","ts-jest":"^29.1.2","nodemailer":"^7.0.13","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/node":"^18.19.130","prom-client":"^15.1.3","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@types/express":"^4.17.17","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.2","reflect-metadata":"^0.2.0","class-transformer":"^0.5.1","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependencies":{"rxjs":"^7.0.0","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","nodemailer":"^7.0.13","prom-client":"^15.1.3","@nestjs/core":"^10.0.0","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/common":"^10.0.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@nestjs/platform-express":"^10.0.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependenciesMeta":{"twig":{"optional":true},"minio":{"optional":true},"argon2":{"optional":true},"nodemailer":{"optional":true},"prom-client":{"optional":true},"@ngrok/ngrok":{"optional":true},"@sentry/node":{"optional":true},"@prisma/client":{"optional":true},"@opentelemetry/api":{"optional":true},"@prisma/adapter-pg":{"optional":true},"@opentelemetry/sdk-node":{"optional":true},"@opentelemetry/resources":{"optional":true},"@opentelemetry/instrumentation":{"optional":true},"@opentelemetry/instrumentation-http":{"optional":true},"@opentelemetry/semantic-conventions":{"optional":true},"@opentelemetry/instrumentation-express":{"optional":true},"@opentelemetry/exporter-trace-otlp-http":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nextjs-toolkit_0.5.0_1780310411370_0.7769044937532983","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@alaska115/nextjs-toolkit","version":"0.5.1","keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"license":"MIT","_id":"@alaska115/nextjs-toolkit@0.5.1","maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"homepage":"https://github.com/alao115/nextjs-toolkit#readme","bugs":{"url":"https://github.com/alao115/nextjs-toolkit/issues"},"dist":{"shasum":"6c94de64bd87ba6fca47d039c114dc3a0e844b83","tarball":"https://registry.npmjs.org/@alaska115/nextjs-toolkit/-/nextjs-toolkit-0.5.1.tgz","fileCount":587,"integrity":"sha512-cHX76s9+PIBysetlGX+fKZ87v6jgBB5yvzxHXhRSUZyvxO0zyziulrQVEnOod71Kkv3uSxyAxhkzWkcUQjjKIw==","signatures":[{"sig":"MEYCIQCmF3Ts3x8OicQT7PWai+M9IC4oQTBPygsRjbAPecYzwwIhAJ8VTGJFR6Xc0vG69xENcdmYcGhh15voSy270dwxOT+/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1189434},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit":{"types":"./dist/audit/index.d.ts","default":"./dist/audit/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./errors":{"types":"./dist/errors/index.d.ts","default":"./dist/errors/index.js"},"./health":{"types":"./dist/health/index.d.ts","default":"./dist/health/index.js"},"./outbox":{"types":"./dist/outbox/index.d.ts","default":"./dist/outbox/index.js"},"./secret":{"types":"./dist/secret/index.d.ts","default":"./dist/secret/index.js"},"./context":{"types":"./dist/context/index.d.ts","default":"./dist/context/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./shutdown":{"types":"./dist/shutdown/index.d.ts","default":"./dist/shutdown/index.js"},"./bootstrap":{"types":"./dist/bootstrap/index.d.ts","default":"./dist/bootstrap/index.js"},"./messaging":{"types":"./dist/messaging/index.d.ts","default":"./dist/messaging/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./resilience":{"types":"./dist/resilience/index.d.ts","default":"./dist/resilience/index.js"},"./persistence":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"./file-storage":{"types":"./dist/file-storage/index.d.ts","default":"./dist/file-storage/index.js"},"./feature-flags":{"types":"./dist/feature-flags/index.d.ts","default":"./dist/feature-flags/index.js"},"./multi-tenancy":{"types":"./dist/multi-tenancy/index.d.ts","default":"./dist/multi-tenancy/index.js"},"./observability":{"types":"./dist/observability/index.d.ts","default":"./dist/observability/index.js"}},"gitHead":"c859422217b905cad59c32d3043a9d5f01ea0d5e","scripts":{"test":"jest","audit":"pnpm audit --audit-level high --prod","build":"tsc","clean":"rm -rf dist","start:dev":"tsc --watch","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test"},"_npmUser":{"name":"alao115","email":"chegunmoulero@gmail.com"},"repository":{"url":"git+https://github.com/alao115/nextjs-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, file-storage, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown","directories":{},"_nodeVersion":"22.16.0","dependencies":{"joi":"^18.0.2","uuid":"^13.0.0","luxon":"^3.7.2","redis":"^5.11.0","helmet":"^8.1.0","ioredis":"^5.10.0","winston":"^3.19.0","@keyv/redis":"^5.1.6","change-case":"^5.4.4","connect-redis":"^9.0.0","express-session":"^1.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rxjs":"^7.8.1","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","ts-jest":"^29.1.2","nodemailer":"^7.0.13","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/node":"^18.19.130","prom-client":"^15.1.3","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@types/express":"^4.17.17","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.2","reflect-metadata":"^0.2.0","class-transformer":"^0.5.1","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependencies":{"rxjs":"^7.0.0","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","nodemailer":"^7.0.13","prom-client":"^15.1.3","@nestjs/core":"^10.0.0","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/common":"^10.0.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@nestjs/platform-express":"^10.0.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependenciesMeta":{"twig":{"optional":true},"minio":{"optional":true},"argon2":{"optional":true},"nodemailer":{"optional":true},"prom-client":{"optional":true},"@ngrok/ngrok":{"optional":true},"@sentry/node":{"optional":true},"@prisma/client":{"optional":true},"@opentelemetry/api":{"optional":true},"@prisma/adapter-pg":{"optional":true},"@opentelemetry/sdk-node":{"optional":true},"@opentelemetry/resources":{"optional":true},"@opentelemetry/instrumentation":{"optional":true},"@opentelemetry/instrumentation-http":{"optional":true},"@opentelemetry/semantic-conventions":{"optional":true},"@opentelemetry/instrumentation-express":{"optional":true},"@opentelemetry/exporter-trace-otlp-http":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nextjs-toolkit_0.5.1_1780310600331_0.9433704433342329","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@alaska115/nextjs-toolkit","version":"0.6.0","keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"license":"MIT","_id":"@alaska115/nextjs-toolkit@0.6.0","maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"homepage":"https://github.com/alao115/nextjs-toolkit#readme","bugs":{"url":"https://github.com/alao115/nextjs-toolkit/issues"},"dist":{"shasum":"781dc636d9672a608010e0d4769a9b1690168fcc","tarball":"https://registry.npmjs.org/@alaska115/nextjs-toolkit/-/nextjs-toolkit-0.6.0.tgz","fileCount":587,"integrity":"sha512-vv0jo4uD2HBgrIwPrmwE6THCX2+kdwS4zdKwWw/PKzK/k0XnD5uy/g0htk1axAA5YvRE5CEp+IVea8JL3V5H3g==","signatures":[{"sig":"MEQCIE8Pw49zgYNmzAetgwfxSt4Y9z03/hNbu1xVodxZ9x10AiAgy9c3TZGrtp1/9tCAEcOADtse11nP3CEjgp46kf6YWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1191719},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit":{"types":"./dist/audit/index.d.ts","default":"./dist/audit/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./errors":{"types":"./dist/errors/index.d.ts","default":"./dist/errors/index.js"},"./health":{"types":"./dist/health/index.d.ts","default":"./dist/health/index.js"},"./outbox":{"types":"./dist/outbox/index.d.ts","default":"./dist/outbox/index.js"},"./secret":{"types":"./dist/secret/index.d.ts","default":"./dist/secret/index.js"},"./context":{"types":"./dist/context/index.d.ts","default":"./dist/context/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./shutdown":{"types":"./dist/shutdown/index.d.ts","default":"./dist/shutdown/index.js"},"./bootstrap":{"types":"./dist/bootstrap/index.d.ts","default":"./dist/bootstrap/index.js"},"./messaging":{"types":"./dist/messaging/index.d.ts","default":"./dist/messaging/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./resilience":{"types":"./dist/resilience/index.d.ts","default":"./dist/resilience/index.js"},"./persistence":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"./file-storage":{"types":"./dist/file-storage/index.d.ts","default":"./dist/file-storage/index.js"},"./feature-flags":{"types":"./dist/feature-flags/index.d.ts","default":"./dist/feature-flags/index.js"},"./multi-tenancy":{"types":"./dist/multi-tenancy/index.d.ts","default":"./dist/multi-tenancy/index.js"},"./observability":{"types":"./dist/observability/index.d.ts","default":"./dist/observability/index.js"}},"gitHead":"ab070737d4785801392ef0eaec86adea563f8bd2","scripts":{"test":"jest","audit":"pnpm audit --audit-level high --prod","build":"tsc","clean":"rm -rf dist","start:dev":"tsc --watch","test:watch":"jest --watch","prepublishOnly":"npm run clean && npm run build && npm run test"},"_npmUser":{"name":"alao115","email":"chegunmoulero@gmail.com"},"repository":{"url":"git+https://github.com/alao115/nextjs-toolkit.git","type":"git"},"_npmVersion":"10.9.2","description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, file-storage, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown","directories":{},"_nodeVersion":"22.16.0","dependencies":{"joi":"^18.0.2","uuid":"^13.0.0","luxon":"^3.7.2","redis":"^5.11.0","helmet":"^8.1.0","ioredis":"^5.10.0","winston":"^3.19.0","@keyv/redis":"^5.1.6","change-case":"^5.4.4","connect-redis":"^9.0.0","express-session":"^1.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rxjs":"^7.8.1","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","ts-jest":"^29.1.2","nodemailer":"^7.0.13","typescript":"^5.9.3","@types/jest":"^29.5.12","@types/node":"^18.19.130","prom-client":"^15.1.3","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@types/express":"^4.17.17","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.2","reflect-metadata":"^0.2.0","class-transformer":"^0.5.1","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependencies":{"rxjs":"^7.0.0","twig":"^1.17.1","minio":"^8.0.7","argon2":"^0.44.0","express":"^4.18.2","nodemailer":"^7.0.13","prom-client":"^15.1.3","@nestjs/core":"^10.0.0","@ngrok/ngrok":"^1.7.0","@sentry/node":"^10.41.0","@nestjs/common":"^10.0.0","@nestjs/config":"^4.0.0","@prisma/client":"^6.19.2","@nestjs/swagger":"^11.0.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","class-transformer":"^0.5.0","@opentelemetry/api":"^1.9.1","@prisma/adapter-pg":"^7.4.2","@nestjs/cache-manager":"^3.1.0","@opentelemetry/sdk-node":"^0.218.0","@nestjs/platform-express":"^10.0.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.0"},"peerDependenciesMeta":{"twig":{"optional":true},"minio":{"optional":true},"argon2":{"optional":true},"nodemailer":{"optional":true},"prom-client":{"optional":true},"@ngrok/ngrok":{"optional":true},"@sentry/node":{"optional":true},"@prisma/client":{"optional":true},"@opentelemetry/api":{"optional":true},"@prisma/adapter-pg":{"optional":true},"@opentelemetry/sdk-node":{"optional":true},"@opentelemetry/resources":{"optional":true},"@opentelemetry/instrumentation":{"optional":true},"@opentelemetry/instrumentation-http":{"optional":true},"@opentelemetry/semantic-conventions":{"optional":true},"@opentelemetry/instrumentation-express":{"optional":true},"@opentelemetry/exporter-trace-otlp-http":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nextjs-toolkit_0.6.0_1780311704604_0.23045882586708388","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@alaska115/nextjs-toolkit","version":"0.7.0","description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown, and utils.","repository":{"type":"git","url":"git+https://github.com/alao115/nextjs-toolkit.git"},"homepage":"https://github.com/alao115/nextjs-toolkit#readme","bugs":{"url":"https://github.com/alao115/nextjs-toolkit/issues"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./audit":{"types":"./dist/audit/index.d.ts","default":"./dist/audit/index.js"},"./bootstrap":{"types":"./dist/bootstrap/index.d.ts","default":"./dist/bootstrap/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./context":{"types":"./dist/context/index.d.ts","default":"./dist/context/index.js"},"./errors":{"types":"./dist/errors/index.d.ts","default":"./dist/errors/index.js"},"./feature-flags":{"types":"./dist/feature-flags/index.d.ts","default":"./dist/feature-flags/index.js"},"./health":{"types":"./dist/health/index.d.ts","default":"./dist/health/index.js"},"./messaging":{"types":"./dist/messaging/index.d.ts","default":"./dist/messaging/index.js"},"./multi-tenancy":{"types":"./dist/multi-tenancy/index.d.ts","default":"./dist/multi-tenancy/index.js"},"./observability":{"types":"./dist/observability/index.d.ts","default":"./dist/observability/index.js"},"./outbox":{"types":"./dist/outbox/index.d.ts","default":"./dist/outbox/index.js"},"./persistence":{"types":"./dist/persistence/index.d.ts","default":"./dist/persistence/index.js"},"./rate-limit":{"types":"./dist/rate-limit/index.d.ts","default":"./dist/rate-limit/index.js"},"./resilience":{"types":"./dist/resilience/index.d.ts","default":"./dist/resilience/index.js"},"./secret":{"types":"./dist/secret/index.d.ts","default":"./dist/secret/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./shutdown":{"types":"./dist/shutdown/index.d.ts","default":"./dist/shutdown/index.js"},"./utils":{"types":"./dist/utils/index.d.ts","default":"./dist/utils/index.js"}},"scripts":{"build":"tsc","start:dev":"tsc --watch","clean":"rm -rf dist","test":"jest","test:watch":"jest --watch","audit":"pnpm audit --audit-level high --prod","prepublishOnly":"npm run clean && npm run build && npm run test"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"dependencies":{"@keyv/redis":"^5.1.6","change-case":"^5.4.4","connect-redis":"^9.0.0","express-session":"^1.19.0","helmet":"^8.1.0","ioredis":"^5.10.0","joi":"^18.0.2","luxon":"^3.7.2","redis":"^5.11.0","uuid":"^13.0.0","winston":"^3.19.0"},"devDependencies":{"@nestjs/cache-manager":"^3.1.0","@nestjs/config":"^4.0.0","@nestjs/swagger":"^11.0.0","@ngrok/ngrok":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@prisma/adapter-pg":"^7.4.2","@prisma/client":"^6.19.2","@sentry/node":"^10.41.0","@types/express":"^4.17.17","@types/jest":"^29.5.12","@types/node":"^18.19.130","argon2":"^0.44.0","class-transformer":"^0.5.1","class-validator":"^0.14.2","express":"^4.18.2","jest":"^29.7.0","minio":"^8.0.7","nodemailer":"^7.0.13","prom-client":"^15.1.3","reflect-metadata":"^0.2.0","rxjs":"^7.8.1","ts-jest":"^29.1.2","twig":"^1.17.1","typescript":"^5.9.3"},"peerDependencies":{"@nestjs/cache-manager":"^3.1.0","@nestjs/common":"^10.0.0","@nestjs/config":"^4.0.0","@nestjs/core":"^10.0.0","@nestjs/platform-express":"^10.0.0","@nestjs/swagger":"^11.0.0","class-transformer":"^0.5.0","class-validator":"^0.14.0","reflect-metadata":"^0.2.0","rxjs":"^7.0.0","@ngrok/ngrok":"^1.7.0","@opentelemetry/api":"^1.9.1","@opentelemetry/exporter-trace-otlp-http":"^0.218.0","@opentelemetry/instrumentation":"^0.218.0","@opentelemetry/instrumentation-express":"^0.66.0","@opentelemetry/instrumentation-http":"^0.218.0","@opentelemetry/resources":"^2.7.1","@opentelemetry/sdk-node":"^0.218.0","@opentelemetry/semantic-conventions":"^1.41.1","@prisma/adapter-pg":"^7.4.2","@prisma/client":"^6.19.2","@sentry/node":"^10.41.0","argon2":"^0.44.0","express":"^4.18.2","minio":"^8.0.7","nodemailer":"^7.0.13","prom-client":"^15.1.3","twig":"^1.17.1"},"peerDependenciesMeta":{"@ngrok/ngrok":{"optional":true},"@opentelemetry/api":{"optional":true},"@opentelemetry/exporter-trace-otlp-http":{"optional":true},"@opentelemetry/instrumentation":{"optional":true},"@opentelemetry/instrumentation-express":{"optional":true},"@opentelemetry/instrumentation-http":{"optional":true},"@opentelemetry/resources":{"optional":true},"@opentelemetry/sdk-node":{"optional":true},"@opentelemetry/semantic-conventions":{"optional":true},"@prisma/adapter-pg":{"optional":true},"@prisma/client":{"optional":true},"@sentry/node":{"optional":true},"argon2":{"optional":true},"minio":{"optional":true},"nodemailer":{"optional":true},"prom-client":{"optional":true},"twig":{"optional":true}},"keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"license":"MIT","_id":"@alaska115/nextjs-toolkit@0.7.0","gitHead":"585af0446d7286c14374870835b7b49f58daa8f2","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-nUlwduaSsORg9NSL9lcCJ4MKda5+YOttIxb1hNYdiqjUaID1I1CGZ4+T/JOVyDRDtpM63rWE0hbLtO5T+ULEiA==","shasum":"c1e2b4b62138cb5df8267d688879ebb52cd04b53","tarball":"https://registry.npmjs.org/@alaska115/nextjs-toolkit/-/nextjs-toolkit-0.7.0.tgz","fileCount":536,"unpackedSize":1111809,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH/hLrXoJOaz2RpxAzCUIrUxNI9Fqjsvm0tVjqAMMeUWAiBHYAWw/Z67QXgawhpcemB5B9KF06L+UXAq3q5TFOgsng=="}]},"_npmUser":{"name":"alao115","email":"chegunmoulero@gmail.com"},"directories":{},"maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nextjs-toolkit_0.7.0_1780418355273_0.9179335785687504"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-26T09:45:14.770Z","modified":"2026-06-02T16:39:15.587Z","0.4.0":"2026-05-26T09:45:15.037Z","0.4.1":"2026-05-26T11:11:46.647Z","0.4.2":"2026-05-26T13:49:11.855Z","0.5.0":"2026-06-01T10:40:11.553Z","0.5.1":"2026-06-01T10:43:20.548Z","0.6.0":"2026-06-01T11:01:44.845Z","0.7.0":"2026-06-02T16:39:15.460Z"},"bugs":{"url":"https://github.com/alao115/nextjs-toolkit/issues"},"license":"MIT","homepage":"https://github.com/alao115/nextjs-toolkit#readme","keywords":["nestjs","express","backend","toolkit","observability","opentelemetry","prisma","redis","minio","health","security","config","cache","shutdown"],"repository":{"type":"git","url":"git+https://github.com/alao115/nextjs-toolkit.git"},"description":"Reusable backend toolkit for NestJS + Express services: audit, bootstrap, cache, config, context, errors, feature-flags, health, messaging, multi-tenancy, observability, outbox, persistence, rate-limit, resilience, secret, security, shutdown, and utils.","maintainers":[{"name":"alao115","email":"chegunmoulero@gmail.com"}],"readme":"# @alaska115/nextjs-toolkit\n\nA reusable backend toolkit for **NestJS + Express** services. Ships ready-to-use building blocks for:\n\n| Module             | What it provides                                                                  |\n| ------------------ | --------------------------------------------------------------------------------- |\n| `bootstrap`        | CORS, Helmet, CSP, sessions, Swagger, ngrok proxy, graceful shutdown registration |\n| `cache`            | Redis-backed cache integration                                                    |\n| `config`           | Joi-validated config loaders                                                      |\n| `context`          | Async request context (interceptor + service)                                     |\n| `errors`           | Typed error classes and HTTP error mapping                                        |\n| `health`           | Liveness / readiness endpoints                                                    |\n| `messaging`        | Notifications (mail via nodemailer, templating via Twig)                          |\n| `observability`    | OpenTelemetry tracing + Prometheus metrics + Sentry + Winston logging             |\n| `persistence`      | Prisma client wiring (pg adapter)                                                 |\n| `secret`           | Pluggable secret manager interface (with local implementation)                    |\n| `security`         | Argon2 hashing helpers, security middleware                                       |\n| `shutdown`         | Graceful shutdown hooks                                                           |\n| `utils`            | Date (luxon), case conversion, UUID, fetch                                        |\n\n---\n\n## Install\n\n```bash\nnpm install @alaska115/nextjs-toolkit\n# or\npnpm add @alaska115/nextjs-toolkit\n# or\nyarn add @alaska115/nextjs-toolkit\n```\n\nThen install the **peer dependencies** so the consumer controls the NestJS / Express version:\n\n```bash\nnpm install \\\n  @nestjs/common@^10 \\\n  @nestjs/core@^10 \\\n  @nestjs/platform-express@^10 \\\n  @nestjs/config@^4 \\\n  @nestjs/cache-manager@^3 \\\n  @nestjs/swagger@^11 \\\n  express@^4 \\\n  rxjs@^7 \\\n  reflect-metadata\n```\n\n### `tsconfig.json` requirement\n\nThe package uses subpath `exports` (`@alaska115/nextjs-toolkit/audit`, `.../resilience`, etc.) so consumers must set **`moduleResolution`** to a modern value:\n\n```json\n{\n  \"compilerOptions\": {\n    \"moduleResolution\": \"bundler\"   // or \"node16\" or \"nodenext\"\n  }\n}\n```\n\nThe legacy `\"node\"` / `\"node10\"` resolver doesn't read `package.json` `exports` and will fail with `Cannot find module '@alaska115/nextjs-toolkit/<subpath>'`. See the [`mini-app` example](./examples/mini-app/) for a working `tsconfig.json`.\n\n---\n\n## Usage\n\n```ts\n// Root re-exports\nimport { AppError, RequestContextService } from \"@alaska115/nextjs-toolkit\";\n\n// Subpath imports (preferred — better tree-shaking and clearer intent)\nimport { bootstrap } from \"@alaska115/nextjs-toolkit/bootstrap\";\nimport { CacheModule } from \"@alaska115/nextjs-toolkit/cache\";\nimport { loadConfig } from \"@alaska115/nextjs-toolkit/config\";\nimport { RequestContextService } from \"@alaska115/nextjs-toolkit/context\";\nimport { AppError } from \"@alaska115/nextjs-toolkit/errors\";\nimport { HealthModule } from \"@alaska115/nextjs-toolkit/health\";\nimport { NotificationService } from \"@alaska115/nextjs-toolkit/messaging\";\nimport { Observability } from \"@alaska115/nextjs-toolkit/observability\";\nimport { PrismaService } from \"@alaska115/nextjs-toolkit/persistence\";\nimport { SecretManager } from \"@alaska115/nextjs-toolkit/secret\";\nimport { SecurityModule } from \"@alaska115/nextjs-toolkit/security\";\nimport { gracefulShutdown } from \"@alaska115/nextjs-toolkit/shutdown\";\nimport { ... } from \"@alaska115/nextjs-toolkit/utils\";\n```\n\n---\n\n## Publishing\n\nThe package is a **standalone npm module**. Build artifacts in `dist/` are what gets published — source `.ts` files are intentionally excluded via the `files` field.\n\n### One-time setup\n\n1. **Own the scope.** `@alaska115` must be a scope you control on the registry you publish to. If it isn't, change `name` in `package.json` to one you own.\n2. **Authenticate** to your registry:\n   - **Public npmjs.org:** `npm login`\n   - **Private registry / GitHub Packages / GitLab / Verdaccio:** add a `.npmrc` with the appropriate `registry=` and `_authToken=` entries.\n\n### Release\n\n```bash\ncd packages/core\nnpm version <patch|minor|major>   # bumps version, creates a git tag\nnpm publish                       # prepublishOnly will clean + build first\ngit push --follow-tags\n```\n\n- `publishConfig.access` is set to `public`, so a scoped package will be published publicly by default. Change to `restricted` (or remove the field) for a paid private package on npmjs.org.\n\n### Publishing to a different registry\n\nAdd `publishConfig.registry` in `package.json` (or pass `--registry` on the CLI):\n\n```json\n\"publishConfig\": {\n  \"access\": \"restricted\",\n  \"registry\": \"https://npm.pkg.github.com\"\n}\n```\n\nCommon targets:\n\n| Registry                    | URL                                                           |\n| --------------------------- | ------------------------------------------------------------- |\n| npmjs.org (public)          | `https://registry.npmjs.org`                                  |\n| GitHub Packages             | `https://npm.pkg.github.com`                                  |\n| GitLab Package Registry     | `https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/npm/` |\n| Self-hosted Verdaccio       | `https://your-verdaccio.example.com`                          |\n\n---\n\n## Local development\n\n```bash\nnpm install\nnpm run build         # one-shot compile to dist/\nnpm run start:dev     # tsc --watch\nnpm run clean         # remove dist/\n```\n\nTo consume the package locally from another project without publishing, use `npm link`, a workspace, or [yalc](https://github.com/wclr/yalc):\n\n```bash\n# from packages/core\nnpm pack                              # produces alaska115-nextjs-toolkit-0.4.0.tgz\n# from the consumer project\nnpm install /absolute/path/to/alaska115-nextjs-toolkit-0.4.0.tgz\n```\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}