{"_id":"@voilajsx/appkit","_rev":"32-22a93af085ff8659ae19c46e1404b14e","name":"@voilajsx/appkit","dist-tags":{"latest":"1.2.8"},"versions":{"1.0.2":{"name":"@voilajsx/appkit","version":"1.0.2","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.2","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajs/appkit#readme","bugs":{"url":"https://github.com/voilajs/appkit/issues"},"dist":{"shasum":"a36b9fc8fb148ca729be24c0633ab7cac990a5a2","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.2.tgz","fileCount":212,"integrity":"sha512-3tkCbiLrE4xLmCZzsFC0hRWkav3OzPLlheDsjvV7oX/GNL3fJfSblD1b8XrUxQ9FjCBAS5klpr7J5YI3Q5wN3w==","signatures":[{"sig":"MEUCIEvnQEXVHjnMHdlSFhp0CV25LpbOizfwUL7ve0eIM4V3AiEAhYmwWADLdLy3TVTVIso6HEWpCwMOnTAwsTouh6UPpso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":816368},"main":"src/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./src/auth/index.js"},"./cache":{"types":"./types/cache/index.d.ts","default":"./src/cache/index.js"},"./email":{"types":"./types/email/index.d.ts","default":"./src/email/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./src/error/index.js"},"./queue":{"types":"./types/queue/index.d.ts","default":"./src/queue/index.js"},"./utils":{"types":"./types/utils/index.d.ts","default":"./src/utils/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./src/config/index.js"},"./events":{"types":"./types/events/index.d.ts","default":"./src/events/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./src/logging/index.js"},"./storage":{"types":"./types/storage/index.d.ts","default":"./src/storage/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./src/security/index.js"},"./tenantdb":{"types":"./types/tenantdb/index.d.ts","default":"./src/tenantdb/index.js"},"./validation":{"types":"./types/validation/index.d.ts","default":"./src/validation/index.js"}},"gitHead":"670411abd1e6af8dde1e47b770cd7c9f9aaff34c","scripts":{"lint":"eslint src/","test":"vitest --run","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","test:watch":"vitest","build:types":"tsc","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajs/appkit.git","type":"git"},"_npmVersion":"10.8.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"18.20.8","dependencies":{"bcrypt":"^5.1.1","jsonwebtoken":"^9.0.2","express-session":"^1.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.2_1747313871858_0.0869021881710137","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@voilajsx/appkit","version":"1.0.3","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.3","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"b247f6c7265c2e74fbd06b3a87d5216e24fb6bbf","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.3.tgz","fileCount":212,"integrity":"sha512-MuyeakkigldtJkb3V0FM5HkUGfCBrz77OhimOhveAdkBvpdrNQeLrSiTGKqSgBzCiaTfLvRMz41LxJ+1/Y5m1g==","signatures":[{"sig":"MEUCIC1++oeCc1LzZDhu35PKnVrS/Ey4weOXGhnd8mv8LDX1AiEA2UYO3fb80H/jVW38KzBkdJJ7UR/po3ky8GLhj1bfOWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":816371},"main":"src/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./src/auth/index.js"},"./cache":{"types":"./types/cache/index.d.ts","default":"./src/cache/index.js"},"./email":{"types":"./types/email/index.d.ts","default":"./src/email/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./src/error/index.js"},"./queue":{"types":"./types/queue/index.d.ts","default":"./src/queue/index.js"},"./utils":{"types":"./types/utils/index.d.ts","default":"./src/utils/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./src/config/index.js"},"./events":{"types":"./types/events/index.d.ts","default":"./src/events/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./src/logging/index.js"},"./storage":{"types":"./types/storage/index.d.ts","default":"./src/storage/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./src/security/index.js"},"./tenantdb":{"types":"./types/tenantdb/index.d.ts","default":"./src/tenantdb/index.js"},"./validation":{"types":"./types/validation/index.d.ts","default":"./src/validation/index.js"}},"gitHead":"90b49f593623caf8f14e580899d96522270c1f19","scripts":{"lint":"eslint src/","test":"vitest --run","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","test:watch":"vitest","build:types":"tsc","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"10.8.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"18.20.8","dependencies":{"bcrypt":"^5.1.1","jsonwebtoken":"^9.0.2","express-session":"^1.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.3_1747314413479_0.5218146581492542","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@voilajsx/appkit","version":"1.0.5","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.5","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"c3cca8a2e6fa448e8d37597d910994cda7a25df8","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.5.tgz","fileCount":241,"integrity":"sha512-iQ3NwBwLptUQU14ILt0IxHrgBnTQSsR2iDhhYZE4E+4bWFWhen7+UjegQup8sfGLM608PytCSUCELnzoXQ0Wjg==","signatures":[{"sig":"MEYCIQCRiACBHIUpI1LBAC0ehJ4xMpz6LSws1w4CQ1YHKhNy5QIhANyEDq/ZbZfTM6PxgIlOVrpHsR4qiMi4Gal/av0Pqztk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":840709},"main":"src/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./src/auth/index.js"},"./cache":{"types":"./types/cache/index.d.ts","default":"./src/cache/index.js"},"./email":{"types":"./types/email/index.d.ts","default":"./src/email/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./src/error/index.js"},"./queue":{"types":"./types/queue/index.d.ts","default":"./src/queue/index.js"},"./utils":{"types":"./types/utils/index.d.ts","default":"./src/utils/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./src/config/index.js"},"./events":{"types":"./types/events/index.d.ts","default":"./src/events/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./src/logging/index.js"},"./storage":{"types":"./types/storage/index.d.ts","default":"./src/storage/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./src/security/index.js"},"./tenantdb":{"types":"./types/tenantdb/index.d.ts","default":"./src/tenantdb/index.js"},"./validation":{"types":"./types/validation/index.d.ts","default":"./src/validation/index.js"}},"gitHead":"5e38169cc1c4edf68931ac938970d5fb04469401","scripts":{"lint":"eslint src/","test":"vitest --run","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"10.8.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"18.20.8","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.5.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.5_1748862950011_0.5772531213849885","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@voilajsx/appkit","version":"1.0.7","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.7","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"0df374153e6a383fb85f825375f0e7768175ab99","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.7.tgz","fileCount":241,"integrity":"sha512-MKStcCG0nWiF+/kgJDq9apN13p+NXzHlUbqdNa73wGK36eZ8i8StERwBjGTrBpq1K2W172RjUeRDSPXUSWZqIw==","signatures":[{"sig":"MEUCIQCdC2uxOJsU2rDm4bTiVd0xjYKZgi87kYhUP7BvgkVg0QIgcWlhoScpIzRVwHGF5bBQT5GKyDsFfCpaEB28IoWG6nE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":747763},"main":"src/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./src/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./src/auth/index.js"},"./cache":{"types":"./types/cache/index.d.ts","default":"./src/cache/index.js"},"./email":{"types":"./types/email/index.d.ts","default":"./src/email/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./src/error/index.js"},"./queue":{"types":"./types/queue/index.d.ts","default":"./src/queue/index.js"},"./utils":{"types":"./types/utils/index.d.ts","default":"./src/utils/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./src/config/index.js"},"./events":{"types":"./types/events/index.d.ts","default":"./src/events/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./src/logging/index.js"},"./storage":{"types":"./types/storage/index.d.ts","default":"./src/storage/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./src/security/index.js"},"./tenantdb":{"types":"./types/tenantdb/index.d.ts","default":"./src/tenantdb/index.js"},"./validation":{"types":"./types/validation/index.d.ts","default":"./src/validation/index.js"}},"gitHead":"0553113c19e6e7f8950b2a6951838e3205cc8f49","scripts":{"lint":"eslint src/","test":"vitest --run","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"10.8.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"18.20.8","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.5.0","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.7_1748962523479_0.9292277000210853","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@voilajsx/appkit","version":"1.0.8","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.8","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"f5e3c8d197f14cd59d6ea8c833829e223283b93e","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.8.tgz","fileCount":51,"integrity":"sha512-E40dENuVCJyVYyabdnD9FfPcL3hdjMnMxKsFSrIuM28qOr+8pNWApFMYyIbkSKJTv3og4iIhViyeOBUlc54w9A==","signatures":[{"sig":"MEUCICkjhdnYIGqzfc2DIdyJhtTYKPTBeFQ7iUzEVRFfwn71AiEAkW9H61AJaldAUdZXee6F9bjaYSsopz0iIc1NUvx3xUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":411753},"main":"dist/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./dist/auth/index.js"},"./cache":{"types":"./types/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./types/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./types/queue/index.d.ts","default":"./dist/queue/index.js"},"./utils":{"types":"./types/utils/index.d.ts","default":"./dist/utils/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./dist/config/index.js"},"./events":{"types":"./types/events/index.d.ts","default":"./dist/events/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./dist/logging/index.js"},"./storage":{"types":"./types/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./types/database/index.d.ts","default":"./dist/database/index.js"},"./prismadb":{"default":"./dist/prismadb/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./dist/security/index.js"},"./tenantdb":{"types":"./types/tenantdb/index.d.ts","default":"./dist/tenantdb/index.js"},"./validation":{"types":"./types/validation/index.d.ts","default":"./dist/validation/index.js"}},"gitHead":"536768cdd675d560c85c252442dfb4ed5a85bcf9","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.8_1751478079508_0.1123172805243946","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@voilajsx/appkit","version":"1.0.9","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.9","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"d93ccab9963ff98a3c31f5d8eaf50ff7e01fab02","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.9.tgz","fileCount":128,"integrity":"sha512-UgJ25fFoIxRPLsD1VPcip3UXAorZ/XXQ5pRiqS6FxVkZdx8dmJbjyro+RBM+TPCEq/feo78NBxVNW6dXa5Nj3g==","signatures":[{"sig":"MEQCICD8KyHcyig3s0FTSglaGf2c9415EOOhfCgVFdggEQ2mAiBqBdBx/Vx4/zBC0wEpRd7VfEsXX8PGIfyg+vqb8+HUMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1118020},"main":"dist/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./dist/auth/index.js"},"./cache":{"types":"./types/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./types/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./types/queue/index.d.ts","default":"./dist/queue/index.js"},"./utils":{"types":"./types/utils/index.d.ts","default":"./src/utils/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./dist/config/index.js"},"./events":{"types":"./types/events/index.d.ts","default":"./dist/events/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./dist/logging/index.js"},"./storage":{"types":"./types/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./types/database/index.d.ts","default":"./dist/database/index.js"},"./prismadb":{"default":"./dist/prismadb/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./dist/security/index.js"},"./tenantdb":{"types":"./types/tenantdb/index.d.ts","default":"./dist/tenantdb/index.js"},"./validation":{"types":"./types/validation/index.d.ts","default":"./dist/validation/index.js"}},"gitHead":"b8195fd7dff8f64c56899f2296133bca8ae85cc2","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.9_1751478678917_0.5957378676642213","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@voilajsx/appkit","version":"1.0.10","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.10","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"cde15d1a80bd25b774e88b8af1f8e2add85f1cc7","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.10.tgz","fileCount":104,"integrity":"sha512-z1KvbtuRzkJWCrIYICQmUhL4Fzr1uh2Uojzf/GZ5ad+iKf9UddoEk3vapy46pLYmyHSBchs5S4op0oGqkB/wWw==","signatures":[{"sig":"MEUCIDsbMjA5zk/8lJgzLdmHS5Cc9FAaF+XKxmdVLNV15QaOAiEA9VNx2u5B4H99gDUlZglW/taEidT1F6J/9yJlpsJMBLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":832452},"main":"dist/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./dist/auth/index.js"},"./cache":{"types":"./types/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./types/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./types/queue/index.d.ts","default":"./dist/queue/index.js"},"./utils":{"types":"./types/utils/index.d.ts","default":"./src/utils/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./dist/config/index.js"},"./events":{"types":"./types/events/index.d.ts","default":"./dist/events/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./dist/logging/index.js"},"./storage":{"types":"./types/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./types/database/index.d.ts","default":"./dist/database/index.js"},"./prismadb":{"default":"./dist/prismadb/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./dist/security/index.js"},"./tenantdb":{"types":"./types/tenantdb/index.d.ts","default":"./dist/tenantdb/index.js"},"./validation":{"types":"./types/validation/index.d.ts","default":"./dist/validation/index.js"}},"gitHead":"b8195fd7dff8f64c56899f2296133bca8ae85cc2","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.10_1751478904959_0.20865281504526734","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@voilajsx/appkit","version":"1.0.12","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.12","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"f6beba4c48a90c1e09da5d58d85f3c00b461ff61","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.12.tgz","fileCount":104,"integrity":"sha512-DB/hJSF/mz77C/O/4h2GxiD0oU//pYE3MG3HogbaJ5qnHF5ejKB1X1oD5ftbD0uZ2dSeICyqafzIonGR4mt1Qw==","signatures":[{"sig":"MEUCIQCDKNWH0eUzkvBUKmdyrGrvChhgqK/meuK09CwMuTDLywIgOOwci1KxRQTvLWnVqMRLukzdbo0XiBJNYd+80qiAvlU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":831479},"main":"dist/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./src/auth/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./src/error/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./src/config/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./src/logging/index.js"},"./database":{"types":"./types/database/index.d.ts","default":"./src/database/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./src/security/index.js"}},"gitHead":"27df525d46cc10f27ce62dd021807d0de3f930b0","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.12_1751479111880_0.19857511999710575","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@voilajsx/appkit","version":"1.0.13","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.13","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"b55e7bf4f18b5bfde75242968866800e3fb339c6","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.13.tgz","fileCount":104,"integrity":"sha512-aP9VX7W3OBJm3TlNxiY9c/pojj62yES4toXQQLmOcvHYzoH8F+gC3HpLt1HAfOxfoE2VQzv61MYTtVRWRzcpsw==","signatures":[{"sig":"MEYCIQD98j8spVAS04lciIPtxrP8CVvKOCFuLQf4wvyDmH42mAIhAIwuJg/CbuGqiLxFyUuyeOQKOf6E2Za9EFp8iIrcax5f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":831562},"main":"dist/index.js","type":"module","types":"./types/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./types/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./types/auth/index.d.ts","default":"./dist/auth/index.js"},"./error":{"types":"./types/error/index.d.ts","default":"./dist/error/index.js"},"./config":{"types":"./types/config/index.d.ts","default":"./dist/config/index.js"},"./logging":{"types":"./types/logging/index.d.ts","default":"./dist/logging/index.js"},"./database":{"types":"./types/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./types/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"e3aabeea3bb68190a733aa6e0a20addd17ef2b8f","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.13_1751506435936_0.3285013895029907","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@voilajsx/appkit","version":"1.0.14","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.14","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"8f17e987b6e93adbf3700586870f7cfacac29794","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.14.tgz","fileCount":80,"integrity":"sha512-4DBRw00s+lZlISODzZSU5VMjUf9En9cYD22W5NO/4R9/B33mXf1qv798dXRWQ3k9/mHVsU3bYvA2Zw7uykFT9A==","signatures":[{"sig":"MEYCIQCrqMaDBlbFBN/7LTHptpGxjeP6k6cOtcWOUztL/sokUgIhAM+UWMHs07rFzjTqSjt4SeTIG3wz7agEZ2QMVo5I7RR1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":732893},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"5420d5abf6ae0de292d2357db23e19ea4edc9f2d","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.14_1751506616513_0.9341483896807643","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@voilajsx/appkit","version":"1.0.15","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.15","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"5776e1b62f769c80fba74d0c880c0724469f81ba","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.15.tgz","fileCount":27,"integrity":"sha512-ew0QvPLkQRZij6zU6ICwI2hRlFDu9P4ZjMzZp5F5PeZyig61RhKkj0jZ8OhzJqa4dGDdO/d74pntPW5ONqfgYw==","signatures":[{"sig":"MEQCIGNphEKldJ1TRjPpiUaBI944zVx5xoz55WR1Eg/C8zMvAiBXQpCP04NPxZOq5cpPk+8wA51hrGw6VrcnojMLhxlTLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":313561},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"fbe14c2b809a6d6570677d3a2d889aca28f7c2f1","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.15_1751506948464_0.8508903051133487","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@voilajsx/appkit","version":"1.0.16","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.0.16","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"e3c1e878a30e803c3994cdda9f18a13718abfa69","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.0.16.tgz","fileCount":99,"integrity":"sha512-75oR7yCJX66wqz1Ck5rJwCeSupFK7FjOAFpVwklX47QNCEdW7wAI48zMAwNWj2Uro286TNOMImDSmy8R++Y/+Q==","signatures":[{"sig":"MEQCIBTVvSVtboWjsrfSvV81X2L7S0R1LQvlJWIFKZrsKNwsAiBHpax+TbzPRK41vnCQzxHrhTRS1DU+Os9QzthLRTgPZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":637073},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=16.0.0"},"exports":{"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"fbe14c2b809a6d6570677d3a2d889aca28f7c2f1","scripts":{"lint":"eslint src/","test":"vitest --run","build":"tsc","format":"prettier --write 'src/**/*.js'","test:ui":"vitest --ui","version":"npm test","build:docs":"node scripts/build-docs.js","test:watch":"vitest","build:types":"tsc","deploy:docs":"node scripts/build-docs.js && node scripts/deploy-docs.js","preview:docs":"npx serve gh-pages","test:coverage":"vitest --coverage --run","prepublishOnly":"npm test && npm run build:types"},"_npmUser":{"name":"ktvoilacode","actor":{"name":"ktvoilacode","type":"user","email":"kt@voilacode.com"},"email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","multer":"^2.0.0","fastify":"^5.3.3","jsonwebtoken":"^9.0.2","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.1","@fastify/session":"^11.1.0","@voilajsx/appkit":"github:voilajsx/appkit","@fastify/formbody":"^8.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^24.0.8","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.9.0","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.0.16_1751507210143_0.6641713041014874","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@voilajsx/appkit","version":"1.1.0","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.1.0","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"d63c3f0ecfa8b7b5fcef5862287976188234412d","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.1.0.tgz","fileCount":223,"integrity":"sha512-OiH/pNZ24IrnBdL34VJ1b4ta9tm0Fs5usFfbduLFngTkai/XpPryteJTXvUP55UoYAWBGxXXP42G60A0mG1mnQ==","signatures":[{"sig":"MEYCIQDICAPZkMnh6yyydkatsIULQ1TGYCE5uF3i5w3ZF4IdMgIhAJZVSA+yg2l3ElaEJINyjKiREBV+ASOgvVl1ckDbQLN4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1522499},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/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"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"f610d948681dbd2cd1b372106fec0f1aaed45918","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"A minimal, framework-agnostic Node.js application toolkit","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.1.0_1752945049989_0.39665163684871785","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@voilajsx/appkit","version":"1.1.1","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.1.1","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"ab9219ffa3aa62af5ecee5f2074e4914488db5ce","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.1.1.tgz","fileCount":223,"integrity":"sha512-KsOEkckHqB7xuht0AC8qQFSe+AhBFOlxI88qGwdMw+gPBtBQp2ph1iG69TOQ1fgxDpBYCaJ+IGsYYcCJHxXVEA==","signatures":[{"sig":"MEYCIQDc3IAPXt/2edj3dJf37WyF+BC/9i/lI8BadA+MuGppWAIhAKzXsTg0XG/QLzlGGWQD3f0kedx1BXTMKFCAoBS8p+DN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1522957},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/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"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"f77dcb5f57dc12bd2d872059f2fb6c5dae0a5b47","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.1.1_1752975789693_0.2583569528152201","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@voilajsx/appkit","version":"1.1.2","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.1.2","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"4eba25ed112026a7c407e1b2ba6a0582fb079815","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.1.2.tgz","fileCount":275,"integrity":"sha512-fsoNM5jFyuKS6nkTxkywQDB4vJm8WLZJmtaPiiLn+Bo9WSxTCumOn0bJI7GmyfViI+8rDUybE2NbiiNmAFQvwQ==","signatures":[{"sig":"MEQCIGCi9d4YGk8VeYvMCwoVaRqMxw3YRZbZa102vAdNrZKMAiAZP3WkVJrKJnan/CcgvLFu6zF75JGM5T180A3NODESvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1942033},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/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"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"cc459125159787a66ac55ec8c57105cc6c04f29c","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.1.2_1753712252280_0.2993414815660216","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@voilajsx/appkit","version":"1.1.3","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.1.3","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"d414b00b9cfc23de037ac64308cf274f0e685ae5","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.1.3.tgz","fileCount":223,"integrity":"sha512-6kad87Vryd/dL51C1srVnzFE+CHIyWOmEfhdkHsxdg4NZSSH81SmbmkCD0h7kL20U9sZnYUqYMz1k+ALLyGQ4A==","signatures":[{"sig":"MEYCIQCwMpU4YHct4eqwe2EM7zfaLSpRM0ICJ0x1xyOLVG3xcAIhAPBTlJU/dUSPScKcGfaBQ5dX9wXgqwpp82etP2JnxKdO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1526271},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/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"},"./logging":{"types":"./dist/logging/index.d.ts","default":"./dist/logging/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"80fe0a752f741e1311a0abb12aa05c5a56253689","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.1.3_1753712634614_0.4792805409080041","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@voilajsx/appkit","version":"1.1.4","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.1.4","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"7db87ae54d54e6da220eceeb72c04666d6228cec","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.1.4.tgz","fileCount":227,"integrity":"sha512-c41LUAnvtMnaoZOcKQL8JjkmUShc0e9d070GFGM6uSHrsTrU03sBk8EcQ4uR3Ejlh3DwXRx0Zjk0RoX9/dr3Kg==","signatures":[{"sig":"MEUCIQDu2u0MnLRcZ+QCI7VKEapeGDdXndJ+SCTwM6+v2OiSrwIgJYjfPZ9Z9fdXzCPHB+nALny8u0OCcBwH5/eunaLQk40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1530870},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"gitHead":"2b7df32f28d4e09d02f84cd5b50116f6b40b3326","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.1.4_1753713704867_0.8752600131255639","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@voilajsx/appkit","version":"1.1.5","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.1.5","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"5ebe09dcdd758547d56ef64b24159141eae5b770","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.1.5.tgz","fileCount":227,"integrity":"sha512-SFG4aXt6/7Nt6/Sl0KcU7dz+ge0DAHY2winXEKT6VsRdG2OjZTSjOI6ybKJAXHTP5ARUi/Jf6w8Y7jVIjAJZdQ==","signatures":[{"sig":"MEQCIEfCCPxueYMFpL7mn/kAvb7E08rwxug+neaZCMT/GY1NAiAekcDd9h4C7U3/CUDTr+1/DJ0GSzSbts1IywKd7jGEiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1532179},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"3ff94147e7b385ff4998fa4bebfa9402de4db65e","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.1.5_1753714445252_0.40171247688651657","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@voilajsx/appkit","version":"1.2.0","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.0","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"dist":{"shasum":"f220d2ecac2889a7b8e7b36f7e1ae23452d7ed50","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.0.tgz","fileCount":227,"integrity":"sha512-HfPgxEABM3rjvV1Bp7IkXI2REODjfxIwPRP0TVa8PyK+CynE1gk0toi+l80b2CzREdw3qd4ZlrDOSBbyLsTjEA==","signatures":[{"sig":"MEUCIBf+3iXXbgzVnOktctiF/t9YV5DafrUtuzWz9cYd1PEyAiEA2VcqEjhDn++qHQ2KkkU3u8PIC9Jsr7eTWneU2tuzWj8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1530108},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"c0e60e0a2325fff56f6dc4cfee20edc72d1c8847","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"10.8.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"18.20.8","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.0_1756200717004_0.8302032160579038","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@voilajsx/appkit","version":"1.2.1","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.1","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"bin":{"appkit":"bin/appkit.js"},"dist":{"shasum":"d22dde958add980a273fd856a9182092ab7d7145","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.1.tgz","fileCount":240,"integrity":"sha512-m6vYm8zm4Mfw6bz8UJl0Iy6gudHxjYjKIZnqR1OXDmqcIL3XdK/FqcYPyxjrSi28G+/4S3UArI6ylp6sJ7cg9Q==","signatures":[{"sig":"MEUCIQC4fcAaecXMH7/XCMHQRKZJcAecKpZ8MBZiDTHkZZbyUQIgTylCM11SklUurJcIzBbxcXzNmhoiwHqeB+2qvlGFLIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1568103},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"39c1e90c25cb6b7e998c7e55beba903985fb769f","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","commander":"^12.1.0","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.1_1757932395511_0.8353524850944145","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@voilajsx/appkit","version":"1.2.2","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.2","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"bin":{"appkit":"bin/appkit.js"},"dist":{"shasum":"f9c78308391b4eae4fad8d8f6edc694eebc52afb","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.2.tgz","fileCount":246,"integrity":"sha512-op0xsMcIFsqY+6ksbW/h1NN9+utkGzOIFO/IEVtSAB2zBHVY+vgFUiXE8AkXIIGuivOv1rj1Yo50C/AvYbnPlA==","signatures":[{"sig":"MEUCIE8jxes8B7BASsSxQkI50RCeJ00j0sZCHguRRYG4RE08AiEAjc++s+agv+bAdZjQoqe7denCNdCZAcATT9MbyOXgwoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1594499},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"5be2fa3256f7ab8b92548ea6b3d68a3301a67f4c","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","ioredis":"^5.6.1","commander":"^12.1.0","jsonwebtoken":"^9.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.2_1757955686641_0.5840056656229553","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@voilajsx/appkit","version":"1.2.3","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.3","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"bin":{"appkit":"bin/appkit.js"},"dist":{"shasum":"4100bffe6f6ee49730e3a1ea0e62530f9eb0ea8a","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.3.tgz","fileCount":259,"integrity":"sha512-rCbPJiBFFAa4EPO5yZlMb8wLmnyRiXm/2tdqXZwEg2kg+1RIkPhyr1k9oqK7Mu4cEMcpCEoqY2/l5rWt+tNtKg==","signatures":[{"sig":"MEQCIAjDv9KOaBEHup+uXE82LZQn+u2DrpybX0RHaGQCIeafAiB03eiB8CtSyVBLHCkYHH9De0sbuh8h+4fCxu7zcqVQvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1651287},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"2363bd117d966e4a6635d4894163ac99ebb69fca","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build","prisma:generate":"prisma generate"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","prisma":"^6.16.2","ioredis":"^5.6.1","commander":"^12.1.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.16.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^1.0.0 || ^2.0.0","express":"^4.0.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@fastify/cookie":"^11.0.0","@fastify/helmet":"^13.0.0","express-session":"^1.18.0","@fastify/session":"^11.0.0","@fastify/formbody":"^8.0.0"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.3_1758193532158_0.6219522317464214","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@voilajsx/appkit","version":"1.2.4","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.4","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"bin":{"appkit":"bin/appkit.js"},"dist":{"shasum":"939239fb6fcb6cdbbe4443e59149f674f9053f46","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.4.tgz","fileCount":263,"integrity":"sha512-QyB92opbP3t9ZijGeN17+/MeXdzdFbmxymHIJcAdleXszVw6I1r1leW6R+22c4b0QpAZSGnLAroQ5/GZ7X8Hcg==","signatures":[{"sig":"MEUCIQCiyiU00ja7Cg7b9cKziBiRkryphsld84ao+HnQ/65KvAIgSWLvYFs+cqVkDrC0ZH3YiD2mKeclsuz4SHHG8vumoXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1740344},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"eb6f049295b6b6bb6754824e8b5401c3606fb1b4","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build","prisma:generate":"prisma generate"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","prisma":"^6.16.2","ioredis":"^5.6.1","commander":"^12.1.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.16.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^2.0.2","express":"^4.0.0 || ^5.0.0","fastify":"^5.6.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.2","@fastify/session":"^11.1.0","@fastify/formbody":"^8.0.2"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.4_1758197632635_0.6187353927239452","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@voilajsx/appkit","version":"1.2.5","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.5","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"bin":{"appkit":"bin/appkit.js"},"dist":{"shasum":"7c00d49fa7577bf01d7c0a764fba69c90333e37a","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.5.tgz","fileCount":263,"integrity":"sha512-sFME2HCnEbQqDxOA23KlkI0O0XHRqk5kbZqnpCJueA9w8yGhFvVGq43gRapJQnqlGDvR4OLWqR1Ly9mw53Vr3w==","signatures":[{"sig":"MEUCICXonsI32+8DAczHcbznhpGbY3YS8R1ZsbmyiowB978UAiEAwT4nHN7zqiUblStMmbU90yr/k4enqEKgCE81I6A2ZzU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1740596},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"cbd815a63b1be63b21eec28c70776cc735c38144","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build","prisma:generate":"prisma generate"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","prisma":"^6.16.2","ioredis":"^5.6.1","commander":"^12.1.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.16.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^2.0.2","express":"^4.0.0 || ^5.0.0","fastify":"^5.6.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.2","@fastify/session":"^11.1.0","@fastify/formbody":"^8.0.2"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.5_1758247368896_0.5958847090781694","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@voilajsx/appkit","version":"1.2.6","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.6","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"bin":{"appkit":"bin/appkit.js"},"dist":{"shasum":"9c2eedf3c498636b8bec73521d58760fcc5d3c30","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.6.tgz","fileCount":263,"integrity":"sha512-sxSLyZSkZmwRcXzZJMyrP+6O+p3XOw2I5/NJPjOMpgXzDGKU9m3MR/kQYVyxPPnujJIm9fK24rXAux1Irt9cXQ==","signatures":[{"sig":"MEUCID31Fh+n4bJuUHvPcKQA/5RsTG8kRzAFM+emA4Wvv7DTAiEA/LHTLdriJcHZByAvfR5gWinWxpqQnxXk9Z6SSQ1uc+8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1739768},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"81f89ce3a13e63a40daa261b02669e24e01bdba2","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build","prisma:generate":"prisma generate"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","prisma":"^6.16.2","ioredis":"^5.6.1","commander":"^12.1.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.16.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^2.0.2","express":"^4.0.0 || ^5.0.0","fastify":"^5.6.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.2","@fastify/session":"^11.1.0","@fastify/formbody":"^8.0.2"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.6_1758251828426_0.09971000988533474","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@voilajsx/appkit","version":"1.2.7","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"license":"MIT","_id":"@voilajsx/appkit@1.2.7","maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"contributors":[{"url":"https://voilacode.com","name":"Krishna Teja GS","email":"kt@voilacode.com"}],"homepage":"https://github.com/voilajsx/appkit#readme","bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"bin":{"appkit":"bin/appkit.js"},"dist":{"shasum":"28d2879c8fb4c141d1bad93e83e0d10fb8839733","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.7.tgz","fileCount":263,"integrity":"sha512-9yHiu+3gHJlSRcG0PJrwhye13DBGdv1Op1gikHkCx/FbfIzSerH7inSIlwQNFuVCE28CtcyuytQki82JEdMxkA==","signatures":[{"sig":"MEQCIEBuVjquAtlaiFK9eAU6CkktiFoSKi8yj6b6Dn+aWJ5KAiBOp/j0GVtQi9N/OoCd/M0UtL7lhn8mw5XBbzXS+Lyo+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1740158},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","creator":"Krishna Teja GS","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"}},"gitHead":"25b496d89b2c356b8af771cb25def0b6f4a8d560","scripts":{"lint":"eslint src/","test":"vitest --run --passWithNoTests","build":"tsc","format":"prettier --write 'src/**/*.js'","prepublishOnly":"npm run build","prisma:generate":"prisma generate"},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"repository":{"url":"git+https://github.com/voilajsx/appkit.git","type":"git"},"_npmVersion":"11.4.2","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","directories":{},"sideEffects":false,"_nodeVersion":"20.17.0","dependencies":{"bcrypt":"^5.1.1","dotenv":"^16.6.1","prisma":"^6.16.2","ioredis":"^5.6.1","commander":"^12.1.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.16.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","vitest":"^3.1.3","esbuild":">=0.25.0","express":"^5.1.0","prettier":"^3.2.4","@types/pg":"^8.10.0","supertest":"^7.1.1","@eslint/js":"^9.0.0","typescript":"^5.0.0","@types/node":"^18.0.0","@types/bcrypt":"^5.0.2","@types/nodemailer":"^6.4.17","@types/jsonwebtoken":"^9.0.10","@vitest/coverage-v8":"^3.1.3"},"peerDependencies":{"multer":"^2.0.2","express":"^4.0.0 || ^5.0.0","fastify":"^5.6.0","@fastify/cookie":"^11.0.2","@fastify/helmet":"^13.0.1","express-session":"^1.18.2","@fastify/session":"^11.1.0","@fastify/formbody":"^8.0.2"},"optionalDependencies":{"pg":"^8.11.0","bull":"^4.10.0","redis":"^4.7.1","mysql2":"^3.5.0","sqlite":"^4.2.1","sqlite3":"^5.1.6","mongoose":"^7.0.0","memcached":"^2.2.2","mailgun.js":"^9.0.0","nodemailer":"^6.10.1","@sendgrid/mail":"^8.1.5","@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0"},"peerDependenciesMeta":{"multer":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@fastify/cookie":{"optional":true},"@fastify/helmet":{"optional":true},"express-session":{"optional":true},"@fastify/session":{"optional":true},"@fastify/formbody":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/appkit_1.2.7_1758280342156_0.21385815965099986","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"@voilajsx/appkit","version":"1.2.8","description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","main":"dist/index.js","type":"module","types":"./dist/index.d.ts","sideEffects":false,"bin":{"appkit":"bin/appkit.js"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./auth":{"types":"./dist/auth/index.d.ts","default":"./dist/auth/index.js"},"./config":{"types":"./dist/config/index.d.ts","default":"./dist/config/index.js"},"./security":{"types":"./dist/security/index.d.ts","default":"./dist/security/index.js"},"./database":{"types":"./dist/database/index.d.ts","default":"./dist/database/index.js"},"./cache":{"types":"./dist/cache/index.d.ts","default":"./dist/cache/index.js"},"./email":{"types":"./dist/email/index.d.ts","default":"./dist/email/index.js"},"./error":{"types":"./dist/error/index.d.ts","default":"./dist/error/index.js"},"./logger":{"types":"./dist/logger/index.d.ts","default":"./dist/logger/index.js"},"./queue":{"types":"./dist/queue/index.d.ts","default":"./dist/queue/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","default":"./dist/storage/index.js"},"./util":{"types":"./dist/util/index.d.ts","default":"./dist/util/index.js"}},"scripts":{"test":"vitest --run --passWithNoTests","lint":"eslint src/","format":"prettier --write 'src/**/*.js'","prisma:generate":"prisma generate","build":"tsc","prepublishOnly":"npm run build"},"keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"author":{"name":"VoilaJS"},"contributors":[{"name":"Krishna Teja GS","email":"kt@voilacode.com","url":"https://voilacode.com"}],"creator":"Krishna Teja GS","license":"MIT","dependencies":{"@prisma/client":"^6.16.2","bcrypt":"^5.1.1","commander":"^12.1.0","dotenv":"^16.6.1","ioredis":"^5.6.1","jsonwebtoken":"^9.0.2","prisma":"^6.16.2"},"peerDependencies":{"@fastify/cookie":"^11.0.2","@fastify/formbody":"^8.0.2","@fastify/helmet":"^13.0.1","@fastify/session":"^11.1.0","express":"^4.0.0 || ^5.0.0","express-session":"^1.18.2","fastify":"^5.6.0","multer":"^2.0.2"},"peerDependenciesMeta":{"@fastify/cookie":{"optional":true},"@fastify/formbody":{"optional":true},"@fastify/helmet":{"optional":true},"@fastify/session":{"optional":true},"express":{"optional":true},"express-session":{"optional":true},"fastify":{"optional":true},"multer":{"optional":true}},"devDependencies":{"@eslint/js":"^9.0.0","@types/bcrypt":"^5.0.2","@types/jsonwebtoken":"^9.0.10","@types/node":"^18.0.0","@types/nodemailer":"^6.4.17","@types/pg":"^8.10.0","@vitest/coverage-v8":"^3.1.3","esbuild":">=0.25.0","eslint":"^9.0.0","express":"^5.1.0","prettier":"^3.2.4","supertest":"^7.1.1","typescript":"^5.0.0","vitest":"^3.1.3"},"optionalDependencies":{"@aws-sdk/client-s3":"^3.0.0","@aws-sdk/client-ses":"^3.0.0","@aws-sdk/s3-request-presigner":"^3.0.0","@sendgrid/mail":"^8.1.5","bull":"^4.10.0","mailgun.js":"^9.0.0","memcached":"^2.2.2","mongoose":"^7.0.0","mysql2":"^3.5.0","nodemailer":"^6.10.1","pg":"^8.11.0","redis":"^4.7.1","sqlite":"^4.2.1","sqlite3":"^5.1.6"},"engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/voilajsx/appkit.git"},"bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"publishConfig":{"access":"public"},"homepage":"https://github.com/voilajsx/appkit#readme","_id":"@voilajsx/appkit@1.2.8","gitHead":"9c147a9e1de9230f4df3866e96c5910892ccc216","_nodeVersion":"20.17.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-FmvRdFlP7QwBTaCh1MzvB7CFr5lskVRE+2G9wHl9FcVynBn8OaLP4Zf+PvDl0q7K2yPWw8fzi5oNWCCVihgVCQ==","shasum":"25b78e7119f3f2542f551ac0381224950aa3a256","tarball":"https://registry.npmjs.org/@voilajsx/appkit/-/appkit-1.2.8.tgz","fileCount":263,"unpackedSize":1740230,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB1Kz6T8sCMTtHPLMZbs/Q8Zj9Dhfvpb0BQUyTL5bz8zAiEA8e9ZAOgwP76A8GLTfKWmVxRVNZMs9XHe0K4HSC7XE0s="}]},"_npmUser":{"name":"ktvoilacode","email":"kt@voilacode.com"},"directories":{},"maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/appkit_1.2.8_1759887239466_0.3675974768269725"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-15T12:57:51.744Z","modified":"2025-10-08T01:33:59.971Z","1.0.0":"2025-05-15T02:51:33.409Z","1.0.1":"2025-05-15T03:00:48.048Z","1.0.2":"2025-05-15T12:57:52.064Z","1.0.3":"2025-05-15T13:06:53.691Z","1.0.5":"2025-06-02T11:15:50.230Z","1.0.7":"2025-06-03T14:55:23.731Z","1.0.8":"2025-07-02T17:41:19.718Z","1.0.9":"2025-07-02T17:51:19.137Z","1.0.10":"2025-07-02T17:55:05.180Z","1.0.12":"2025-07-02T17:58:32.229Z","1.0.13":"2025-07-03T01:33:56.160Z","1.0.14":"2025-07-03T01:36:56.706Z","1.0.15":"2025-07-03T01:42:28.649Z","1.0.16":"2025-07-03T01:46:50.320Z","1.1.0":"2025-07-19T17:10:50.299Z","1.1.1":"2025-07-20T01:43:09.937Z","1.1.2":"2025-07-28T14:17:32.501Z","1.1.3":"2025-07-28T14:23:54.892Z","1.1.4":"2025-07-28T14:41:45.138Z","1.1.5":"2025-07-28T14:54:05.521Z","1.2.0":"2025-08-26T09:31:57.287Z","1.2.1":"2025-09-15T10:33:15.729Z","1.2.2":"2025-09-15T17:01:26.941Z","1.2.3":"2025-09-18T11:05:32.372Z","1.2.4":"2025-09-18T12:13:52.863Z","1.2.5":"2025-09-19T02:02:49.159Z","1.2.6":"2025-09-19T03:17:08.676Z","1.2.7":"2025-09-19T11:12:22.373Z","1.2.8":"2025-10-08T01:33:59.755Z"},"bugs":{"url":"https://github.com/voilajsx/appkit/issues"},"author":{"name":"VoilaJS"},"license":"MIT","homepage":"https://github.com/voilajsx/appkit#readme","keywords":["nodejs","node","toolkit","framework-agnostic","auth","authentication","jwt","bcrypt","multi-tenant","tenant","database","saas","cache","caching","redis","memcached","events","event-bus","pubsub","security","csrf","rate-limiting","sanitization","email","smtp","ses","sendgrid","mailgun","queue","job-queue","background-jobs","logging","logger","storage","s3","file-storage","configuration","config","validation","utils","utilities","express","middleware","error-handling","tree-shaking","esm","typescript","cli","scaffolding","fbca","code-generation"],"repository":{"type":"git","url":"git+https://github.com/voilajsx/appkit.git"},"description":"Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development","contributors":[{"name":"Krishna Teja GS","email":"kt@voilacode.com","url":"https://voilacode.com"}],"maintainers":[{"name":"ktvoilacode","email":"kt@voilacode.com"},{"name":"anupam.j","email":"naninoyal55@gmail.com"},{"name":"shibe_13","email":"coulterpoiseuille@gmail.com"},{"name":"shifamahveen","email":"mahveenshifa1611@gmail.com"}],"readme":"# VoilaJSX AppKit 🚀\n\n[![npm version](https://img.shields.io/npm/v/@voilajsx/appkit.svg)](https://www.npmjs.com/package/@voilajsx/appkit)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n[![AI Ready](https://img.shields.io/badge/AI-Optimized-purple.svg)](https://github.com/voilajsx/appkit)\n\n> **Minimal and framework agnostic Node.js toolkit designed for AI agentic\n> backend development**\n\n**Zero configuration. Enterprise features by default. Optimized for both human\ndevelopers and AI code generation.**\n\n## 🚀 What VoilaJSX AppKit Really Is\n\nVoilaJSX AppKit is a **complete Node.js development toolkit** that eliminates\nthe complexity of building production-ready applications. Instead of juggling\ndozens of libraries and configuration files, you get 12 integrated modules that\nwork together seamlessly.\n\n### **How Developers Can Leverage AppKit**\n\n**🎯 For Rapid Development**\n\n- **One function per module**: `authClass.get()`, `databaseClass.get()`,\n  `securityClass.get()`\n- **Instant setup**: No configuration files, just environment variables\n- **Production patterns**: Enterprise-grade security and scalability built-in\n\n**🏗️ For Maintainable Architecture**\n\n- **Consistent APIs**: Same `{moduleClass}.get()` pattern across all modules\n- **Progressive complexity**: Start simple, scale to enterprise automatically\n- **Type-safe**: Full TypeScript support with intelligent IntelliSense\n\n**⚡ For Performance**\n\n- **Smart defaults**: Memory caching, connection pooling, resource management\n- **Auto-scaling**: Modules automatically upgrade (Memory → Redis → Database)\n- **Optimized**: Battle-tested patterns for high-throughput applications\n\n## 🤖 Enhanced for AI-Driven Development\n\nWhile perfectly designed for human developers, AppKit excels in AI-assisted\ndevelopment:\n\n- **🎯 Predictable Code Generation**: AI agents generate consistent, working\n  applications\n- **📝 LLM-Optimized Documentation**: Every function includes clear usage\n  patterns\n- **🔒 Built-in Best Practices**: Security, scalability, and maintainability by\n  default\n- **⚙️ Non-Ambiguous APIs**: Clear function signatures prevent common mistakes\n\n### **Why This Matters for Developers**\n\n| Traditional Approach                      | VoilaJSX AppKit Approach                |\n| ----------------------------------------- | --------------------------------------- |\n| Research → Configure → Integrate → Secure | **Import → Use → Deploy**               |\n| Multiple libraries, version conflicts     | **Integrated modules, tested together** |\n| Manual scaling decisions                  | **Environment-driven auto-scaling**     |\n| Security implemented later                | **Security enabled by default**         |\n| Inconsistent error handling               | **Unified error patterns**              |\n\n## 🏢 Enterprise Benefits\n\n### **Progressive Complexity**\n\n```typescript\n// Day 1: Simple development\nconst auth = authClass.get();\nconst token = auth.signToken({ userId: 123, role: 'user', level: 'basic' });\n\n// Month 6: Multi-tenant (just add environment variable)\n// VOILA_DB_TENANT=auto\nconst database = await databaseClass.get(); // Now auto-filtered by tenant\n\n// Year 1: Multi-organization enterprise (same code)\n// ORG_ACME=postgresql://acme.aws.com/prod\nconst acmeDatabase = await databaseClass.org('acme').get(); // Enterprise scaling\n```\n\n## 🚀 Quick Start\n\n**Two Ways to Use AppKit:**\n\n**📦 As a Library** - Install AppKit modules into your existing Node.js/Express projects (NestJS, Fastify, Koa, etc.):\n```bash\nnpm install @voilajsx/appkit\n```\nImport modules directly: `import { authClass, databaseClass } from '@voilajsx/appkit'`\n\n**🚀 Complete Microservice Scaffolding** - Use AppKit CLI to generate enterprise-ready backend applications:\n\n```bash\n# Step 1: Install AppKit CLI globally\nnpm install -g @voilajsx/appkit\n\n# Check if you have the latest version\nnpm list -g @voilajsx/appkit\n\n# Step 2: Create your app\nappkit generate app myproject\ncd myproject && npm run dev:api\n```\n\n**Done.** Your API is running with authentication, database, and enterprise features ready at http://localhost:3000/api\n\n### **Add Features Instantly**\n\n```bash\n# Add custom feature\nappkit generate feature product\n\n# Add complete authentication system\nappkit generate feature user\n\n# Add database-enabled feature\nappkit generate feature order --db\n```\n\n### **Library Integration Example**\n\n```bash\n# For library usage in existing projects\nnpm install @voilajsx/appkit\n```\n\n```typescript\nimport { authClass } from '@voilajsx/appkit/auth';\nimport { databaseClass } from '@voilajsx/appkit/database';\nimport { errorClass } from '@voilajsx/appkit/error';\nimport { loggerClass } from '@voilajsx/appkit/logger';\n\nconst auth = authClass.get();\nconst database = await databaseClass.get();\nconst error = errorClass.get();\nconst logger = loggerClass.get('api');\n\n// Protected API endpoint\napp.post(\n  '/api/users',\n  auth.requireRole('admin.tenant'),\n  error.asyncRoute(async (req, res) => {\n    const user = auth.user(req);\n\n    if (!req.body.email) {\n      throw error.badRequest('Email required');\n    }\n\n    const newUser = await database.user.create({ data: req.body });\n    logger.info('User created', { userId: newUser.id });\n\n    res.json({ user: newUser });\n  })\n);\n\n// Error handling middleware (must be last)\napp.use(error.handleErrors());\n```\n\n**Result**: Production-ready API with authentication, database, error handling,\nand logging. **Zero configuration needed.**\n\n## 🛠️ AppKit CLI\n\n### **Project Generation**\n\n```bash\n# Create complete backend application\nappkit generate app [name]\n\n# What you get:\n# ✅ TypeScript setup with proper configuration\n# ✅ Express server with auto-discovery routing\n# ✅ Environment variables with secure random keys\n# ✅ Database integration ready\n# ✅ Complete documentation included\n# ✅ Production-ready npm scripts\n```\n\n### **Feature Generation**\n\n```bash\n# Basic feature (route + service + types)\nappkit generate feature product\n\n# Database-enabled feature (+ model + HTTP tests)\nappkit generate feature order --db\n\n# Complete authentication system (9-role hierarchy)\nappkit generate feature user\n```\n\n### **Generated Project Structure**\n\n```\nmyproject/\n├── docs/                         # Complete documentation\n│   ├── APPKIT_CLI.md            # CLI reference\n│   ├── APPKIT_LLM_GUIDE.md      # AI integration guide\n│   └── APPKIT_COMMENTS_GUIDELINES.md # Code standards\n├── src/api/\n│   ├── server.ts                # Main server\n│   ├── lib/api-router.ts        # Auto-discovery routing\n│   └── features/                # Feature-based architecture\n│       ├── welcome/             # Default endpoints\n│       └── [your-features]/     # Generated features\n├── .env                         # Secure environment variables\n├── package.json                 # With backend scripts\n└── README.md                    # Project-specific guide\n```\n\n## 🎭 Complete Module Ecosystem\n\n| #   | Module                                  | Category                | Purpose                                               | Details                                                                                                                                   |\n| --- | --------------------------------------- | ----------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |\n| 1   | **[Auth](/src/auth/README.md)**         | 🔧 Infrastructure       | JWT tokens, dual token system, role-level permissions | `authClass.get()` - Login tokens (users) + API tokens (services), role.level hierarchy (user.basic → admin.system), automatic inheritance |\n| 2   | **[Database](/src/database/README.md)** | 🔧 Infrastructure       | Multi-tenant, progressive scaling                     | `databaseClass.get()` - Auto-tenant filtering, org management (.org()), mandatory future-proofing with tenant_id                          |\n| 3   | **[Security](/src/security/README.md)** | 🔧 Infrastructure       | CSRF, rate limiting, encryption                       | `securityClass.get()` - Enterprise-grade by default, AES-256-GCM encryption, input sanitization                                           |\n| 4   | **[Error](/src/error/README.md)**       | 🔧 Infrastructure       | HTTP status codes, semantic errors                    | `errorClass.get()` - Framework-agnostic middleware, semantic error types (badRequest, unauthorized)                                       |\n| 5   | **[Cache](/src/cache/README.md)**       | 📊 Data & Communication | Memory → Redis auto-scaling                           | `cacheClass.get('namespace')` - Namespace isolation, TTL management, getOrSet pattern                                                     |\n| 6   | **[Storage](/src/storage/README.md)**   | 📊 Data & Communication | Local → S3/R2 auto-scaling                            | `storageClass.get()` - CDN integration, signed URLs, automatic provider detection                                                         |\n| 7   | **[Queue](/src/queue/README.md)**       | 📊 Data & Communication | Memory → Redis → DB scaling                           | `queueClass.get()` - Background jobs, scheduling, retry logic with exponential backoff                                                    |\n| 8   | **[Email](/src/email/README.md)**       | 📊 Data & Communication | Console → SMTP → Resend                               | `emailClass.get()` - Templates, multi-provider, automatic strategy selection                                                              |\n| 9   | **[Event](/src/event/README.md)**       | 📊 Data & Communication | Memory → Redis distribution                           | `eventClass.get('namespace')` - Real-time, pub/sub, wildcard patterns (user.\\*)                                                           |\n| 10  | **[Util](/src/util/README.md)**         | 🛠️ Developer Experience | 12 essential utilities                                | `utilClass.get()` - Safe property access (get), performance helpers (debounce, chunk)                                                     |\n| 11  | **[Config](/src/config/README.md)**     | 🛠️ Developer Experience | Environment variables                                 | `configClass.get()` - Type-safe, UPPER_SNAKE_CASE convention, validation included                                                         |\n| 12  | **[Logger](/src/logger/README.md)**     | 🛠️ Developer Experience | Structured logging                                    | `loggerClass.get('component')` - Multi-transport, auto-scaling (Console → File → HTTP)                                                    |\n\n### **Category Summary**\n\n- **🔧 Infrastructure (4 modules)**: Core application foundation - auth,\n  database, security, error handling\n- **📊 Data & Communication (5 modules)**: Data flow and external interactions -\n  cache, storage, queue, email, events\n- **🛠️ Developer Experience (3 modules)**: Development productivity - utilities,\n  configuration, logging\n\n## 🌍 Environment-Driven Progressive Scaling\n\n### **Development** (Zero Configuration)\n\n```bash\nnpm start  # Memory cache, local storage, console logs\n```\n\n### **Production** (Auto-Detection)\n\n```bash\n# Set these environment variables - everything scales automatically\nDATABASE_URL=postgresql://prod-db/app     # → Database persistence\nREDIS_URL=redis://prod-cache:6379         # → Distributed cache/queue\nAWS_S3_BUCKET=prod-assets                 # → Cloud storage + CDN\nRESEND_API_KEY=re_production_key          # → Professional email\nVOILA_DB_TENANT=auto                      # → Multi-tenant mode\n```\n\n**Same code. Different environment. Enterprise features automatically enabled.**\n\n## 🏢 Enterprise-Ready Examples\n\n### **Multi-Tenant SaaS API**\n\n```typescript\nimport { authClass } from '@voilajsx/appkit/auth';\nimport { databaseClass } from '@voilajsx/appkit/database';\nimport { securityClass } from '@voilajsx/appkit/security';\nimport { cacheClass } from '@voilajsx/appkit/cache';\n\nconst auth = authClass.get();\nconst database = await databaseClass.get(); // Auto-filtered by tenant\nconst security = securityClass.get();\nconst cache = cacheClass.get('api');\n\n// User endpoint (tenant-isolated)\napp.get(\n  '/api/users',\n  auth.requireLogin(),\n  security.requests(100, 900000), // Rate limiting\n  async (req, res) => {\n    const users = await cache.getOrSet(\n      'users',\n      async () => {\n        return await database.user.findMany(); // Only current tenant\n      },\n      300\n    );\n\n    res.json(users);\n  }\n);\n\n// Admin endpoint (cross-tenant access)\napp.get(\n  '/api/admin/analytics',\n  auth.requireRole('admin.system'),\n  async (req, res) => {\n    const dbTenants = await databaseClass.getTenants(); // All tenants\n    const stats = await dbTenants.user.groupBy({\n      by: ['tenant_id'],\n      _count: true,\n    });\n\n    res.json(stats);\n  }\n);\n```\n\n### **Real-Time Chat Application**\n\n```typescript\nimport { eventClass } from '@voilajsx/appkit/event';\nimport { authClass } from '@voilajsx/appkit/auth';\nimport { databaseClass } from '@voilajsx/appkit/database';\n\nconst events = eventClass.get();\nconst auth = authClass.get();\nconst database = await databaseClass.get();\n\n// Handle user connections\nevents.on('user.connected', async (data) => {\n  const { userId, socketId } = data;\n\n  // Join user to their rooms\n  await events.emit('socket.join', {\n    socketId,\n    rooms: [`user:${userId}`, `tenant:${data.tenantId}`],\n  });\n});\n\n// Handle chat messages\nevents.on('message.send', async (data) => {\n  const message = await database.message.create({\n    data: {\n      content: data.content,\n      userId: data.userId,\n      roomId: data.roomId,\n    },\n  });\n\n  // Broadcast to room (tenant-isolated)\n  await events.emit('message.broadcast', {\n    roomId: data.roomId,\n    message: {\n      id: message.id,\n      content: message.content,\n      user: { name: data.userName },\n      timestamp: message.createdAt,\n    },\n  });\n});\n\n// REST API integration\napp.post('/api/notifications', auth.requireLogin(), async (req, res) => {\n  const user = auth.user(req);\n\n  // Send real-time notification\n  await events.emit('notification.send', {\n    userId: user.userId,\n    type: 'info',\n    message: req.body.message,\n    timestamp: new Date(),\n  });\n\n  res.json({ sent: true });\n});\n```\n\n### **File Upload with Background Processing**\n\n```typescript\nimport { storageClass } from '@voilajsx/appkit/storage';\nimport { queueClass } from '@voilajsx/appkit/queue';\nimport { loggerClass } from '@voilajsx/appkit/logger';\nimport { securityClass } from '@voilajsx/appkit/security';\n\nconst storage = storageClass.get();\nconst queue = queueClass.get();\nconst logger = loggerClass.get('upload');\nconst security = securityClass.get();\n\n// File upload with background processing\napp.post(\n  '/upload',\n  security.requests(10, 60000), // 10 uploads per minute\n  async (req, res) => {\n    // Sanitize filename\n    const safeName = security.input(req.file.originalname);\n    const key = `uploads/${Date.now()}-${safeName}`;\n\n    // Store file (auto-detects Local/S3/R2)\n    await storage.put(key, req.file.buffer, {\n      contentType: req.file.mimetype,\n    });\n\n    // Queue background processing\n    await queue.add('process-image', {\n      key,\n      userId: req.user.id,\n      originalName: req.file.originalname,\n    });\n\n    logger.info('File uploaded', { key, userId: req.user.id });\n\n    res.json({\n      url: storage.url(key),\n      key,\n      processing: true,\n    });\n  }\n);\n\n// Background processing\nqueue.process('process-image', async (data) => {\n  const logger = loggerClass.get('processor');\n\n  try {\n    const buffer = await storage.get(data.key);\n\n    // Process image (resize, optimize, etc.)\n    const processed = await processImage(buffer);\n\n    // Store processed version\n    const processedKey = data.key.replace('.', '-processed.');\n    await storage.put(processedKey, processed);\n\n    logger.info('Image processed', {\n      original: data.key,\n      processed: processedKey,\n    });\n\n    return { processedKey };\n  } catch (error) {\n    logger.error('Processing failed', {\n      key: data.key,\n      error: error.message,\n    });\n    throw error;\n  }\n});\n```\n\n## 🤖 AI Agent Integration Examples\n\n### **Prompt for Complete Auth System**\n\n```\nCreate a Node.js API with user authentication, role-based access control,\nand protected admin routes using VoilaJSX AppKit.\n```\n\n**AI Agent Output** (guaranteed to work):\n\n```typescript\nimport { authClass } from '@voilajsx/appkit/auth';\nimport { errorClass } from '@voilajsx/appkit/error';\nimport { databaseClass } from '@voilajsx/appkit/database';\nimport { loggerClass } from '@voilajsx/appkit/logger';\n\nconst auth = authClass.get();\nconst error = errorClass.get();\nconst database = await databaseClass.get();\nconst logger = loggerClass.get('auth');\n\n// Login endpoint\napp.post(\n  '/auth/login',\n  error.asyncRoute(async (req, res) => {\n    const { email, password } = req.body;\n\n    if (!email || !password) {\n      throw error.badRequest('Email and password required');\n    }\n\n    const user = await database.user.findUnique({ where: { email } });\n    if (!user) {\n      throw error.unauthorized('Invalid credentials');\n    }\n\n    const isValid = await auth.comparePassword(password, user.password);\n    if (!isValid) {\n      throw error.unauthorized('Invalid credentials');\n    }\n\n    // Generate login token for user authentication\n    const loginToken = auth.generateLoginToken({\n      userId: user.id,\n      role: user.role,\n      level: user.level,\n    });\n\n    logger.info('User logged in', { userId: user.id });\n    res.json({ token: loginToken, user: { id: user.id, email: user.email } });\n  })\n);\n\n// Create API token for external service\napp.post(\n  '/admin/api-tokens',\n  auth.requireLoginToken(),\n  auth.requireUserRoles(['admin.tenant']),\n  error.asyncRoute(async (req, res) => {\n    const { keyId, permissions } = req.body;\n\n    // Generate API token for service authentication\n    const apiToken = auth.generateApiToken(\n      {\n        keyId,\n        role: 'service',\n        level: 'external',\n        permissions,\n      },\n      '1y'\n    );\n\n    res.json({ apiToken });\n  })\n);\n\n// Protected user route (requires login token)\napp.get(\n  '/api/profile',\n  auth.requireLoginToken(),\n  error.asyncRoute(async (req, res) => {\n    const user = auth.user(req);\n    const profile = await database.user.findUnique({\n      where: { id: user.userId },\n    });\n    res.json(profile);\n  })\n);\n\n// Admin-only route (requires login token + admin role)\napp.get(\n  '/api/admin/users',\n  auth.requireLoginToken(),\n  auth.requireUserRoles(['admin.tenant']),\n  error.asyncRoute(async (req, res) => {\n    const users = await database.user.findMany();\n    res.json(users);\n  })\n);\n\n// API endpoint (requires API token)\napp.post(\n  '/webhook/data',\n  auth.requireApiToken(),\n  error.asyncRoute(async (req, res) => {\n    const token = auth.user(req);\n    logger.info('Webhook received', { keyId: token.keyId });\n    res.json({ received: true });\n  })\n);\n\n// Error handling middleware (must be last)\napp.use(error.handleErrors());\n```\n\n### **Prompt for Multi-Tenant Data API**\n\n```\nBuild a multi-tenant API where users can only see their organization's data,\nbut admins can access all organizations.\n```\n\n**AI Agent Output**:\n\n```typescript\nimport { databaseClass } from '@voilajsx/appkit/database';\nimport { authClass } from '@voilajsx/appkit/auth';\nimport { errorClass } from '@voilajsx/appkit/error';\n\nconst auth = authClass.get();\nconst error = errorClass.get();\n\n// User data (tenant-isolated)\napp.get(\n  '/api/projects',\n  auth.requireLogin(),\n  error.asyncRoute(async (req, res) => {\n    const database = await databaseClass.get(); // Auto-filtered by user's tenant\n    const projects = await database.project.findMany({\n      include: { tasks: true },\n    });\n    res.json(projects); // Only current tenant's projects\n  })\n);\n\n// Admin data (cross-tenant)\napp.get(\n  '/api/admin/all-projects',\n  auth.requireRole('admin.system'),\n  error.asyncRoute(async (req, res) => {\n    const dbTenants = await databaseClass.getTenants(); // All tenants\n    const allProjects = await dbTenants.project.findMany({\n      include: {\n        tasks: true,\n        _count: { select: { tasks: true } },\n      },\n    });\n    res.json(allProjects); // All organizations' projects\n  })\n);\n\n// Organization-specific admin access\napp.get(\n  '/api/admin/org/:orgId/projects',\n  auth.requireRole('admin.org'),\n  error.asyncRoute(async (req, res) => {\n    const { orgId } = req.params;\n    const orgDatabase = await databaseClass.org(orgId).get();\n    const projects = await orgDatabase.project.findMany();\n    res.json(projects); // Specific organization's projects\n  })\n);\n```\n\n## 🚀 Production Deployment\n\n### **Required Environment Variables**\n\n```bash\n# Core Security (Required)\nVOILA_AUTH_SECRET=your-super-secure-jwt-secret-minimum-32-chars\n\n# Database (Required)\nDATABASE_URL=postgresql://user:pass@host:5432/database\n\n# Production Services (Auto-detected)\nREDIS_URL=redis://user:pass@host:6379\nAWS_S3_BUCKET=your-bucket\nRESEND_API_KEY=re_your_api_key\nVOILA_SECURITY_CSRF_SECRET=your-csrf-secret-32-chars\n\n# Multi-tenancy (Optional)\nVOILA_DB_TENANT=auto\n\n# Organization Scaling (Optional)\nORG_ACME=postgresql://acme.dedicated.aws.com/prod\nORG_STARTUP=mongodb://startup.azure.com/db\n```\n\n### **Docker Production Setup**\n\n```dockerfile\nFROM node:18-alpine\nWORKDIR /app\n\n# Copy package files\nCOPY package*.json ./\nRUN npm ci --only=production\n\n# Copy application\nCOPY . .\n\n# Health check\nHEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\\n  CMD node -e \"require('http').get('http://localhost:3000/health', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })\"\n\nEXPOSE 3000\nCMD [\"node\", \"server.js\"]\n```\n\n### **Kubernetes Deployment**\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: voila-app\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: voila-app\n  template:\n    metadata:\n      labels:\n        app: voila-app\n    spec:\n      containers:\n        - name: app\n          image: my-app:latest\n          ports:\n            - containerPort: 3000\n          env:\n            - name: DATABASE_URL\n              valueFrom:\n                secretKeyRef:\n                  name: app-secrets\n                  key: database-url\n            - name: REDIS_URL\n              valueFrom:\n                secretKeyRef:\n                  name: app-secrets\n                  key: redis-url\n          livenessProbe:\n            httpGet:\n              path: /health\n              port: 3000\n            initialDelaySeconds: 30\n            periodSeconds: 10\n```\n\n## 📊 Performance & Scalability\n\n### **Benchmarks**\n\n- **Startup Time**: < 100ms (all modules loaded)\n- **Memory Usage**: < 50MB baseline (production)\n- **Request Throughput**: 10,000+ req/sec (with Redis)\n- **Database Connections**: Automatic pooling and management\n\n### **Scaling Characteristics**\n\n| Environment     | Cache         | Storage     | Queue         | Database      |\n| --------------- | ------------- | ----------- | ------------- | ------------- |\n| **Development** | Memory        | Local       | Memory        | Single        |\n| **Staging**     | Redis         | S3          | Redis         | Single        |\n| **Production**  | Redis Cluster | S3/R2 + CDN | Redis Cluster | Read Replicas |\n| **Enterprise**  | Multi-region  | Multi-cloud | Distributed   | Multi-tenant  |\n\n## 🧪 Testing & Quality\n\n### **Testing Setup**\n\n```typescript\nimport { utilClass } from '@voilajsx/appkit/util';\nimport { loggerClass } from '@voilajsx/appkit/logger';\nimport { cacheClass } from '@voilajsx/appkit/cache';\nimport { databaseClass } from '@voilajsx/appkit/database';\nimport { authClass } from '@voilajsx/appkit/auth';\n\ndescribe('API Tests', () => {\n  beforeEach(() => {\n    // Reset modules for clean tests\n    utilClass.clearCache();\n  });\n\n  afterEach(async () => {\n    // Clean up resources\n    await loggerClass.clear();\n    await cacheClass.clear();\n    await databaseClass.clear();\n  });\n\n  test('should handle user creation safely', async () => {\n    const auth = authClass.get();\n    const util = utilClass.get();\n\n    const userData = {\n      email: 'test@example.com',\n      name: 'Test User',\n    };\n\n    // Test safe property access\n    const email = util.get(userData, 'email');\n    expect(email).toBe('test@example.com');\n\n    // Test JWT token creation\n    const token = auth.signToken({\n      userId: 123,\n      role: 'user',\n      level: 'basic',\n    });\n\n    expect(token).toBeDefined();\n\n    // Test token verification\n    const payload = auth.verifyToken(token);\n    expect(payload.userId).toBe(123);\n  });\n});\n```\n\n### **Code Quality Standards**\n\n- **100% TypeScript**: Full type safety across all modules\n- **Comprehensive Tests**: Unit, integration, and e2e testing\n- **Security Audits**: Regular dependency and vulnerability scanning\n- **Performance Monitoring**: Built-in metrics and observability\n\n## 🔍 SEO & Discovery\n\n### **Keywords & Technologies**\n\n- **Node.js Framework**: Enterprise-grade backend development\n- **AI Code Generation**: LLM-optimized, agentic programming\n- **Multi-tenant SaaS**: Progressive scaling, organization management\n- **Zero Configuration**: Environment-driven, production-ready\n- **TypeScript Ready**: Full type safety, modern development\n- **Microservices**: Modular architecture, independent scaling\n- **JWT Authentication**: Role-based access control, security\n- **Real-time Applications**: WebSocket support, event-driven, pub/sub\n- **Cloud Native**: Docker, Kubernetes, auto-scaling\n- **Developer Experience**: Fast development, maintainable code\n\n### **Use Cases**\n\n- **SaaS Applications**: Multi-tenant, progressive scaling\n- **API Backends**: RESTful, GraphQL, real-time\n- **E-commerce Platforms**: Payments, inventory, user management\n- **Content Management**: File handling, media processing\n- **Enterprise Applications**: Security, compliance, audit trails\n- **Microservices**: Independent, scalable, maintainable\n- **AI Applications**: LLM integration, automated workflows\n- **Startup MVPs**: Rapid development, production-ready\n\n## 📚 Learning Resources\n\n### **Quick References**\n\n- [🚀 CLI Reference](docs/APPKIT_CLI.md) - Complete command guide and usage\n  examples\n- [🤖 LLM Integration Guide](docs/APPKIT_LLM_GUIDE.md) - AI development patterns\n  and module usage\n- [📝 Code Standards](docs/APPKIT_COMMENTS_GUIDELINES.md) - Documentation\n  guidelines for backend apps\n\n### **Module Documentation**\n\n- [Authentication & Authorization](/src/auth/README.md) - Dual token system,\n  role.level hierarchy, automatic inheritance\n- [Database & Multi-tenancy](/src/database/README.md) - Progressive scaling,\n  organizations\n- [File Storage & CDN](/src/storage/README.md) - Local to cloud, automatic\n  optimization\n- [Caching & Performance](/src/cache/README.md) - Memory to Redis, namespace\n  isolation\n- [Background Jobs](/src/queue/README.md) - Processing, scheduling, reliability\n- [Email & Communications](/src/email/README.md) - Multi-provider, templates\n- [Real-time Events](/src/event/README.md) - WebSocket, pub/sub, notifications\n- [Security & Compliance](/src/security/README.md) - CSRF, encryption, rate\n  limiting\n- [Error Handling](/src/error/README.md) - HTTP status codes, semantic errors\n- [Logging & Observability](/src/logger/README.md) - Structured, multi-transport\n- [Configuration Management](/src/config/README.md) - Environment-driven,\n  type-safe\n- [Utilities & Helpers](/src/util/README.md) - 12 essential developer tools\n\n## 🌟 Community & Support\n\n### **Getting Help**\n\n- 🐙 [GitHub Issues](https://github.com/voilajsx/appkit/issues) - Bug reports\n  and feature requests\n- 📧 [Email Support](mailto:kt@voilacode.com) - Direct support for enterprises\n\n### **Contributing**\n\nWe welcome contributions! See our [Contributing Guide](CONTRIBUTING.md) for:\n\n- 🐛 Bug fixes and improvements\n- 📝 Documentation enhancements\n- ✨ New module features\n- 🧪 Test coverage improvements\n- 💡 Feature suggestions\n\n## 📄 License\n\nMIT © [VoilaJSX](https://github.com/voilajsx) - See [LICENSE](LICENSE) for\ndetails.\n\n---\n\n<p align=\"center\">\n  <strong>🚀 Built for the AI-first future of software development</strong><br>\n  <strong>Where enterprise applications are generated, not written</strong><br><br>\n  <a href=\"https://github.com/voilajsx/appkit\">⭐ Star us on GitHub</a> \n</p>\n\n---\n\n### **🔖 Tags**\n\n`nodejs` `typescript` `framework` `ai-ready` `enterprise` `multi-tenant` `saas`\n`microservices` `jwt-authentication` `zero-config` `production-ready`\n`agentic-ai` `llm-optimized` `progressive-scaling` `real-time` `websocket`\n`pub-sub` `developer-experience`\n","readmeFilename":"README.md"}