{"_id":"@armored1486/api-gateway-core","_rev":"16-638842235485a86e073fdf8d0fe1636e","name":"@armored1486/api-gateway-core","dist-tags":{"latest":"2.2.1"},"versions":{"1.0.0":{"name":"@armored1486/api-gateway-core","version":"1.0.0","license":"MIT","_id":"@armored1486/api-gateway-core@1.0.0","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"dist":{"shasum":"f876f7583e3f128fe5609cfa3268716d115576b5","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-1.0.0.tgz","fileCount":21,"integrity":"sha512-vpWyfV+PHb7ooBV06We3EPh+48RGONvl2M7iqFbGZG/B6hDAbjsbdGM+kvTJy8lrbxZExUgaYPCkcJa/8vIBJw==","signatures":[{"sig":"MEYCIQDokljMFCQLU1jKmYlK4+KsyI1eIDAAVRu7VBx22oFnFgIhANZz/IKLuw4pyk0YBe67EvQh9tXM1g/jCPq+mjWXML/n","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20980},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"273b5f12c794042226b4c7249e52f2f34e4e533c","scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"_npmVersion":"10.8.2","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"3.24.0","jsonwebtoken":"9.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/jsonwebtoken":"^9.0.9"},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_1.0.0_1778760227846_0.564566159264605","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@armored1486/api-gateway-core","version":"1.0.1","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"license":"MIT","_id":"@armored1486/api-gateway-core@1.0.1","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"6ff5dbaa9ff819790dd99e3a4f2414f32fda80ab","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-1.0.1.tgz","fileCount":22,"integrity":"sha512-NlEljuxR78B/q4OBX2qZcZODDg5IYfaUJsowzFOBDoeXZE576Xm1VtbDJuUT7D0+L1hiSk+++WjF1f2miFuXQw==","signatures":[{"sig":"MEUCIQDp7MYTUAcw17kCjOsBzmnImzQDOyai8diNT9THeBqdFQIgClTic9cfrKOmhliwO80fhWhksaXZKHhvXquhdkOVWgc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28615},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"645ac7d6babb282856b49a4cf258fc8f26857b2c","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.8.2","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"3.24.0","jose":"^5.10.0","@aws-sdk/lib-dynamodb":"^3.700.0","@aws-sdk/client-dynamodb":"^3.700.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^3.0.0","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_1.0.1_1778773888800_0.8694103048670898","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@armored1486/api-gateway-core","version":"1.0.2","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"license":"MIT","_id":"@armored1486/api-gateway-core@1.0.2","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"33a6281f57add8ceb324c804b13048a4c98208fc","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-1.0.2.tgz","fileCount":22,"integrity":"sha512-HJyvcOcKNDlttQcEeIcOOD/21lLrflyxCnqn/tGBmwXAHYOEdlTqE7oFFcuzrH+Fmp9X0/mTNYRWiq4aCH7/xA==","signatures":[{"sig":"MEUCIHOpRGUAWIMvi4/aPeo6cAMwyEdkxJYy2iurc/ofWgOKAiEAh+qqQ97NnLYJAbJKQ9rQeHShLNd13xHpeQpZUJvb2jM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28856},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1e15b4cc228fb19a4236f1e4618446bd3d5edd19","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.8.2","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"3.24.0","jose":"^5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^3.0.0","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.700.0","@aws-sdk/client-dynamodb":"^3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_1.0.2_1778774635334_0.9665446027488331","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@armored1486/api-gateway-core","version":"1.0.5","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"license":"MIT","_id":"@armored1486/api-gateway-core@1.0.5","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"c43ddc7c4b451def8ef21e4447eac8e0e77b0ec8","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-1.0.5.tgz","fileCount":22,"integrity":"sha512-J57Oy+c5Q0bZ1Yfqui1/c+5wY4+bNUmjn2a7mYr6Hg05yZkV19GrvDM/vfsCiugyrKWD9lo9aWJPws3UantuTg==","signatures":[{"sig":"MEYCIQCUmzMGffFrzsh8jOGgcHOFvphCrSizMMO69Kicm10OYAIhAPtNGoBsFWVj/U96JLVCfPwRp95w4Kc/CEg0G8p5fCly","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28856},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"11d815b630e1bf9aecf081440436a7088b630914","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"3.24.0","jose":"^5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^3.0.0","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.700.0","@aws-sdk/client-dynamodb":"^3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_1.0.5_1778784285949_0.05807660733952491","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@armored1486/api-gateway-core","version":"1.0.6","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"license":"MIT","_id":"@armored1486/api-gateway-core@1.0.6","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"2636f990874e7f70306ea45d4c995c16aacbaa25","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-1.0.6.tgz","fileCount":22,"integrity":"sha512-PNLIHajavyzJfY7Upwfq5hvTCaDG+c16/HnWzN29SMqKUEShnL48F+YVoWLUZZwH/HeDZCelR5QM9clgREljkw==","signatures":[{"sig":"MEUCIQC1WhlfnqlCinLJZDnTNb4NwxuXg1OnyeO/vKw7YPT00QIgV2qMuLiR70SLdL9BRy8EXlp5yLbRmiB5b9tA5i2AjmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28856},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5a631362510618c5d11e50169a8dc172c11f97d6","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"3.24.0","jose":"^5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^3.0.0","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.700.0","@aws-sdk/client-dynamodb":"^3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_1.0.6_1778785203651_0.26647087259139224","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@armored1486/api-gateway-core","version":"1.0.8","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"license":"MIT","_id":"@armored1486/api-gateway-core@1.0.8","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"487107f80b92cd3802ce50103fd86abe68391672","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-1.0.8.tgz","fileCount":22,"integrity":"sha512-/tbpLI3D8ELVDvYVcinMsH9W43O7Y/b36ZrthWxvuFiPQ3GJOdrifzb/qAKUtHVYbd8CjjJlQmL46Ra1klx10w==","signatures":[{"sig":"MEYCIQC3750CKnjfyQhyPJUVdSoTc9lDpJmcpHddWI4uqyHUQwIhANLa8BxAwkETM9bURVjc/WdSySrAaSJMsnVaz/jghBlp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28894},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"261951d9bf2d24c2103bb6ccbdc6c398a04543bd","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"3.24.0","jose":"5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^3.0.0","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.700.0","@aws-sdk/client-dynamodb":"^3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_1.0.8_1778835059141_0.4998368556835635","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@armored1486/api-gateway-core","version":"1.0.9","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@1.0.9","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"9f8a9465e63471152389bdbcfce375204d2cf440","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-1.0.9.tgz","fileCount":23,"integrity":"sha512-duvhBvfZqyd9zTH1Saq5O+Hw+t2cG1ySCNcYBvU6x5/iTRdt1OmBk4o96RO34QK9JK1Zxr9FSKTLAJfgTvyZ5A==","signatures":[{"sig":"MEUCIQCHEQnMFqld9ZeQ6rM6vCjH+A6kDT29OWT7hZesGISo2wIgbphnOCOSBu9BywZlBieGmCPpPawOF44mcCw4hGLcpmk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30086},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"16b5069feed12b4df2f8eb44ef86dd6076d87869","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"3.24.0","jose":"5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^3.0.0","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"3.700.0","@aws-sdk/client-dynamodb":"3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_1.0.9_1778835436859_0.05742621123677516","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@armored1486/api-gateway-core","version":"2.0.0","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.0.0","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"5c309c044459bd8fd87daae966d9364e1c784012","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.0.0.tgz","fileCount":23,"integrity":"sha512-BBZOYlwYK2jb6bZChqpLCIF9U+G+SNu2jQLJfdvDpulyfbCZ2waVARBUB5vU9595cLcuSUSCgb4a+bxMT3qNSg==","signatures":[{"sig":"MEUCIQCXyieTDYVvo0U44+0wtuAv9fyQw8Ybh56KWXpGUil9rgIgTE3ZUtybA+xJuN++koLqrwC/RRgGE4soOHnpcjp9dOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32311},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"96222303c0e668111b05901c1cafe884947810d1","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"3.24.0","jose":"5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^3.0.0","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"3.700.0","@aws-sdk/client-dynamodb":"3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.0.0_1779108559557_0.7524055590616339","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@armored1486/api-gateway-core","version":"2.0.1","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.0.1","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"e9e6e12467f9d368bdaac8231ddf8dec822e4df1","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.0.1.tgz","fileCount":23,"integrity":"sha512-qyNAPyfigFggVft/ycH5GAjBS/KbmgAGCopBFo0AXYJtzo3pGVdc7XYN0nisRfd3ve02OcEC+kOp19DPICJ63w==","signatures":[{"sig":"MEYCIQDw51jE38WLqxMmgWsECtnuRSqVpJtDfRvkxTHWEmUwCwIhAOhil959RFxud+ETD1zE8o73qNfPe1fKFTHx1tro5HH9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32561},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"213907ce4b73515a4297f0bd56eeb54639b2de63","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"3.24.0","jose":"5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"3.700.0","@aws-sdk/client-dynamodb":"3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.0.1_1779109483480_0.25410775086257087","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@armored1486/api-gateway-core","version":"2.0.2","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.0.2","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"8457f5bf2fc30a68f5e02b4dd498d77d730348ab","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.0.2.tgz","fileCount":23,"integrity":"sha512-D6D2ouw23Bm9t2GJiZV3Zbg2tKq6kDPEWtwvcbvzZsJADHL1j2naHkrBq8TXh3opvpQ9WpOdObN2JZ71UdvpAw==","signatures":[{"sig":"MEYCIQDPSoMKUxITWmy0H5xUG+ngeDeYgfrPddljilkN8xtJvAIhAKzJsC4UtACPL2H2pW/hgQLZzpyTvOpRg4+HPtaks7VQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32561},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"048b4ef8bc17cdba11293ba585742bc53d027f1c","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"3.24.0","jose":"5.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"3.700.0","@aws-sdk/client-dynamodb":"3.700.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.0.2_1779177657609_0.7986059213789618","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@armored1486/api-gateway-core","version":"2.1.0","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.1.0","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"a3c82e250e9f0c2445f8ed2223622e16deaae5e4","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.1.0.tgz","fileCount":23,"integrity":"sha512-6MjJixSLcQZXLvkUyTC7aykGNUrJVRnFZjpbBdy1IlFX9MhZ6izpTCzDUpDNRD4xMl6CJOZuI8GjBEs68EQObQ==","signatures":[{"sig":"MEQCIEt3uId/LiF6nf9NvScdnfUAHW7N7CMaQDk8FrS/WUY9AiAfveL9wLvty5AhgFVMYJUQF2osF9+GYjcSa2p5KeJe6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32652},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1193231b84358f551d63974a16f7ee1854261a67","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.7","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.25.76","jose":"^6.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3","@aws-sdk/lib-dynamodb":"^3.1051.0","@aws-sdk/client-dynamodb":"^3.1051.0"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.699.0","@aws-sdk/client-dynamodb":"^3.699.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.1.0_1779452555857_0.5812960450336222","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@armored1486/api-gateway-core","version":"2.1.1","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.1.1","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"4cfdb7bf8ae912b9686730dc60e52bc8cfbb6c9d","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.1.1.tgz","fileCount":23,"integrity":"sha512-lJ+PhXtXLjf7u5M/hMBfUjvCVbNwVeZ06b/TqFx9KdiyHDUxHIBFtkvq+POX2NDOIUh2qf6YHrT0QiVZui9acg==","signatures":[{"sig":"MEUCIQC5OhpCN1yLRbiKHraPpiAPq/SU/ySjg0WFad+Hfa96lwIgN/NEAACfpyj8q+NfYSYAdVYr/m2EIru2k/TYd7VFlgM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32650},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"34e1cb8359689d0d186b75f17aa8ffc8895e8a4a","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.8","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"3.25.76","jose":"6.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^3.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3","@aws-sdk/lib-dynamodb":"^3.1051.0","@aws-sdk/client-dynamodb":"^3.1051.0"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.699.0","@aws-sdk/client-dynamodb":"^3.699.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.1.1_1779458333636_0.5654287745119531","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@armored1486/api-gateway-core","version":"2.1.2","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.1.2","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"9d87748068cdc6afda10d144605e3e9166720b20","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.1.2.tgz","fileCount":23,"integrity":"sha512-6XiZpsiJfcRDFH+I57ZoFHIYTdNtBZxNq7g/+5dLCOqXfsjnskOTSgaxFrGZa5pWYQRupInBQhEihmNnr4h/zQ==","signatures":[{"sig":"MEQCIHYqDjZ9xxo5o3USah0dBFcH4lUgTU2GrVlgy7HiPQJXAiAJ8ps4eLWhWPH2Hx3BRuumxKm3znFeF7CgqkS/cl5reg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32650},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"722bbf7948fb4063ccea4d89f2ce074fee97a32b","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.8","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"3.25.76","jose":"6.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3","@aws-sdk/lib-dynamodb":"^3.1051.0","@aws-sdk/client-dynamodb":"^3.1051.0"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.699.0","@aws-sdk/client-dynamodb":"^3.699.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.1.2_1781527474340_0.19972445658803384","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@armored1486/api-gateway-core","version":"2.1.3","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.1.3","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"7020c7295250246388294cbe5960e9e0d4473c8c","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.1.3.tgz","fileCount":23,"integrity":"sha512-D6ga4sYyPgOpaYON528oUmnl02fK1jh7SBtCO+Qer25HMcFaAVDibB5E5TjVsO4rGVPP7NStBq/USamelMHNIQ==","signatures":[{"sig":"MEUCIESb4wkWAHrhmztwsGIEzE2frPM+NmowDj+hKJFYCFgHAiEA7Svs3w6jHL66zOiyH7OFn3XyFaqplkykT/oCWTRUBy8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32650},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"243e75de3f70324a24b7054909ffed3c5f629e29","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.8","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"3.25.76","jose":"6.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3","@aws-sdk/lib-dynamodb":"^3.1051.0","@aws-sdk/client-dynamodb":"^3.1051.0"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.699.0","@aws-sdk/client-dynamodb":"^3.699.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.1.3_1781527990722_0.4502187740840795","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"@armored1486/api-gateway-core","version":"2.1.4","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","_id":"@armored1486/api-gateway-core@2.1.4","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"homepage":"https://github.com/Gleaming0427/api-gateway#readme","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"8310b9612299696223f8aad02ea089765388ca84","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.1.4.tgz","fileCount":23,"integrity":"sha512-HfsXrYcfxK8eROBN3uSL0ykqzlMYv6XHxw7+mJ13vTRrpgJvLv9TM55pw1SnpvX/DTAEESR76FcDfyA70d+/IA==","signatures":[{"sig":"MEYCIQDklQ9+BUtWvM41zQn1Hiy46GLk9mHcSpJwhJiSjkAIegIhANXeEpojfmUPMvkXBRLNXNMM9YwI+9tJe3tGheVCVczU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35009},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0a55415bec4f6379f1a67cea32a4157f8f53aa05","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","typecheck":"tsc --noEmit","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"_npmVersion":"10.9.8","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"_nodeVersion":"22.22.3","dependencies":{"zod":"3.25.76","jose":"6.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"^4.1.0","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3","@aws-sdk/lib-dynamodb":"^3.1051.0","@aws-sdk/client-dynamodb":"^3.1051.0"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.699.0","@aws-sdk/client-dynamodb":"^3.699.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/api-gateway-core_2.1.4_1781528794728_0.2938660607800274","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"_id":"@armored1486/api-gateway-core@2.2.1","bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"dist":{"shasum":"74a8868c2d46151f4cc99a4a222c6e57097415a4","tarball":"https://registry.npmjs.org/@armored1486/api-gateway-core/-/api-gateway-core-2.2.1.tgz","fileCount":27,"integrity":"sha512-U6PzSdWGbs5IOU9pyVJteFKfvUNTmc9rMRKX3BniAWkLF1kQHbJO8WjmOo6JxN09q1d8fHSsJB5N8C5+FSWREg==","signatures":[{"sig":"MEUCIQCJbHHzHCsAgBTVh1Hzr81p37EdBt20uwZ3VZ0/sIU9eAIgYBanJkGg4i/7ZxlQ1nQd8hjnlQ583hMD39iE/m6mFf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCE/SEixBMnxBbBhTEyfiP3HAQ7lH+98i/cSOkrSbQA7AIgEq5RKeG35NVb5JPsOV29vCIwX/9riajfsCOwvOsSSO0="}],"unpackedSize":53721},"main":"./dist/core/index.js","name":"@armored1486/api-gateway-core","type":"module","types":"./dist/core/index.d.ts","author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"engines":{"node":">=22"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"}},"gitHead":"c0fb549e49a014cc961af41f3ab513ae68bfbaf2","license":"MIT","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","dev-jwks":"npx tsx scripts/dev-jwks-server.ts","build:all":"npm run build && npm run build --workspaces","typecheck":"tsc --noEmit","test:redis":"vitest run packages/store-redis/tests","test:watch":"vitest","generate-keys":"bash scripts/generate-keys.sh","generate-token":"npx tsx scripts/generate-token.ts"},"version":"2.2.1","_npmUser":{"name":"armored1486","email":"voyage7981@proton.me"},"homepage":"https://github.com/Gleaming0427/api-gateway#readme","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"overrides":{"postcss":"8.5.23"},"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"10.9.8","description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","directories":{},"maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"_nodeVersion":"22.23.2","dependencies":{"zod":"3.25.76","jose":"6.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.14.1","tsx":"^4.22.0","eslint":"^10.3.0","vitest":"4.1.11","@eslint/js":"^10.0.1","typescript":"^5.7.0","@types/node":"^22.0.0","@types/aws-lambda":"^8.10.0","typescript-eslint":"^8.59.3","@aws-sdk/lib-dynamodb":"^3.1051.0","@aws-sdk/client-dynamodb":"^3.1051.0"},"peerDependencies":{"@aws-sdk/lib-dynamodb":"^3.699.0","@aws-sdk/client-dynamodb":"^3.699.0"},"peerDependenciesMeta":{"@aws-sdk/lib-dynamodb":{"optional":true},"@aws-sdk/client-dynamodb":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/api-gateway-core_2.2.1_1790147147827_0.7861955248021151"}}},"time":{"created":"2026-05-14T12:03:47.749Z","modified":"2026-09-23T07:05:48.071Z","1.0.0":"2026-05-14T12:03:48.033Z","1.0.1":"2026-05-14T15:51:28.938Z","1.0.2":"2026-05-14T16:03:55.500Z","1.0.5":"2026-05-14T18:44:46.102Z","1.0.6":"2026-05-14T19:00:03.814Z","1.0.8":"2026-05-15T08:50:59.284Z","1.0.9":"2026-05-15T08:57:17.049Z","2.0.0":"2026-05-18T12:49:19.757Z","2.0.1":"2026-05-18T13:04:43.632Z","2.0.2":"2026-05-19T08:00:57.855Z","2.1.0":"2026-05-22T12:22:36.057Z","2.1.1":"2026-05-22T13:58:53.799Z","2.1.2":"2026-06-15T12:44:34.466Z","2.1.3":"2026-06-15T12:53:10.848Z","2.1.4":"2026-06-15T13:06:34.891Z","2.2.1":"2026-09-23T07:05:47.909Z"},"bugs":{"url":"https://github.com/Gleaming0427/api-gateway/issues"},"author":{"name":"Julien Chapron","email":"jigsaw_culpable558@simplelogin.com"},"license":"MIT","homepage":"https://github.com/Gleaming0427/api-gateway#readme","keywords":["api-gateway","rate-limiting","jwt","token-bucket","serverless","aws","sst","b2b-saas"],"repository":{"url":"git+https://github.com/Gleaming0427/api-gateway.git","type":"git"},"description":"Serverless-native API Gateway core — rate limiting, JWT auth, typed errors for B2B SaaS","maintainers":[{"name":"armored1486","email":"voyage7981@proton.me"}],"readme":"# @armored1486/api-gateway-core\n\n[![npm version](https://img.shields.io/npm/v/@armored1486/api-gateway-core)](https://www.npmjs.com/package/@armored1486/api-gateway-core)\n[![npm downloads](https://img.shields.io/npm/dm/@armored1486/api-gateway-core)](https://www.npmjs.com/package/@armored1486/api-gateway-core)\n[![install size](https://packagephobia.com/badge?p=@armored1486/api-gateway-core)](https://packagephobia.com/result?p=@armored1486/api-gateway-core)\n[![types](https://img.shields.io/npm/types/@armored1486/api-gateway-core)](https://www.npmjs.com/package/@armored1486/api-gateway-core)\n[![license](https://img.shields.io/npm/l/@armored1486/api-gateway-core)](./LICENSE)\n\nServerless-native API Gateway toolkit — **token-bucket rate limiting, RS256 JWT auth, and typed errors**. Pure logic with zero AWS imports, so it drops into any runtime (Lambda, Node, edge). Where `express-rate-limit` + `jsonwebtoken` leave you wiring storage and error shapes by hand, this ships a pluggable atomic store and a machine-readable error contract out of the box.\n\n```bash\nnpm install @armored1486/api-gateway-core\n```\n\n## Requirements\n\n- **Node ≥ 22**\n- **ESM only** — ships as ES modules (`import`); there is no CommonJS (`require`) build.\n\n## What's inside\n\n| Module | What it does |\n|---|---|\n| `CircuitBreaker` | Rolling failure window, cooldown and bounded recovery probes |\n| `RateLimiter` | Token bucket rate limiter with pluggable store (in-memory, DynamoDB, Redis) |\n| `validateToken` | RS256 JWT validation with pluggable JWKS fetcher |\n| `validate` | Zod-based request validation with typed errors |\n| `AppError` | Typed error hierarchy — HTTP status + machine-readable code |\n\n## RateLimiter\n\n```ts\nimport { RateLimiter } from \"@armored1486/api-gateway-core\";\nimport type { RateLimiterStore, BucketState } from \"@armored1486/api-gateway-core\";\n\nconst store: RateLimiterStore = new MyStore(); // implement get/set\nconst limiter = new RateLimiter(store, { capacity: 100, refillRate: 10 });\n\nconst result = await limiter.consume(\"api-key-abc\");\n// { allowed: true, remaining: 99 }\n// { allowed: false, remaining: 0, retryAfter: 5.2 }\n```\n\nThe store is **pluggable** — implement `get(key)`, `set(key, state)`, and optionally `atomicConsume(key, tokens, capacity, refillRate)` using any backend (DynamoDB, Redis, PostgreSQL). The optional `atomicConsume` folds read-modify-write into one round trip and prevents TOCTOU race conditions under concurrency. The rate limiter is pure logic with zero runtime dependencies.\n\nThe official Redis adapter is a separate workspace package; see\n[installation, VPC requirements and integration tests](./packages/store-redis/README.md).\nIt never adds Redis dependencies to core.\n\n## Circuit breaker (core 2.2.0)\n\n```ts\nimport { CircuitBreaker, MemoryCircuitBreakerStore } from \"@armored1486/api-gateway-core\";\n\nconst breaker = new CircuitBreaker(new MemoryCircuitBreakerStore(), {\n  failureThreshold: 0.5,\n  minimumCalls: 10,\n  windowSize: 20,\n  cooldownMs: 30_000,\n  halfOpenMaxProbes: 1,\n});\nconst response = await breaker.execute(\n  \"upstream\",\n  () => fetch(\"https://api.example.com/health\"),\n  () => true, // classify rejected calls as upstream failures\n  response => response.status >= 500,\n);\n```\n\nAn open circuit throws `CircuitOpenError` (503, `CIRCUIT_OPEN`), whose\n`toLambdaResponse()` includes `Retry-After` in seconds. HTTP 4xx responses do\nnot open the circuit with the predicate above. The gateway also counts body-read\nfailures and network timeouts. Rate limiting happens before the breaker check.\n\nState and concurrency coordination are local to one breaker instance/warm\nLambda environment. Cold starts begin closed. A shared store alone does not\nprovide distributed probe coordination. The first completed successful recovery\nprobe closes the circuit; later results from the old generation are ignored.\nKeep the number of upstream keys bounded when using the in-memory store.\n\n## JWT validation\n\n```ts\nimport { validateToken } from \"@armored1486/api-gateway-core\";\nimport type { JwksFetcher } from \"@armored1486/api-gateway-core\";\n\nconst fetcher: JwksFetcher = {\n  async getKey(kid: string) {\n    // Fetch from JWKS endpoint, return the public key as a PEM (SPKI) string\n    return \"-----BEGIN PUBLIC KEY-----...\";\n  },\n};\n\nconst payload = await validateToken(token, {\n  issuer: \"https://auth.example.com\",\n  audience: \"api-gateway\",\n  maxTokenAge: 86_400, // 24h — reject tokens older than this (since iat)\n  clockTolerance: 30,  // 30s clock skew\n}, fetcher);\n// { sub: \"user-123\", iss: \"...\", aud: \"...\", exp: 1712345678, ... }\n```\n\nOnly `RS256` is accepted; tokens with any other `alg` are rejected.\n\n## Validation\n\n```ts\nimport { validate } from \"@armored1486/api-gateway-core\";\nimport { z } from \"zod\";\n\nconst schema = z.object({ name: z.string(), age: z.number() });\nconst data = validate(schema, req.body);\n// data is typed as { name: string; age: number }\n```\n\n## Error codes\n\nEvery error extends `AppError` and carries a machine-readable `code`. **These codes are a public API contract.**\n\n| Class | HTTP | Code |\n|---|---|---|\n| `UnauthorizedError` | 401 | `UNAUTHORIZED` |\n| `ThrottledError` | 429 | `THROTTLED` |\n| `ValidationError` | 400 | `VALIDATION_ERROR` |\n| `InternalError` | 500 | `INTERNAL_ERROR` |\n| `CircuitOpenError` | 503 | `CIRCUIT_OPEN` |\n\n```ts\nimport { AppError } from \"@armored1486/api-gateway-core\";\n\ntry {\n  await doSomething();\n} catch (err) {\n  if (err instanceof AppError) {\n    return err.toLambdaResponse();\n    // {\n    //   statusCode: 429,\n    //   headers: { \"Content-Type\": \"application/json\", \"Retry-After\": \"5.2\" },\n    //   body: '{\"error\":\"THROTTLED\",\"message\":\"Rate limit exceeded\"}'\n    // }\n  }\n}\n```\n\n`InternalError` always serializes a generic body — the underlying cause is preserved on the instance for logging only, never sent to the client.\n\n## Performance\n\nThe rate limiter is pure in-memory arithmetic — it does no I/O of its own. Latency depends on the injected store. The DynamoDB adapter performs a read and conditional write; Redis performs one atomic EVAL round trip. Performance targets require measurements of the actual deployment.\n\n## Bundle size\n\nUnder 50 KB gzipped (published tarball ≈ 10 KB). Two runtime dependencies: [Zod](https://zod.dev) and [jose](https://github.com/panva/jose). The AWS SDK is an optional peer dependency, only pulled in by the DynamoDB store in the template.\n\n## Deploy the full gateway\n\nThe SST template currently provisions a **single regional** API Gateway REST\nAPI, Lambda proxy/authorizer and DynamoDB table in production. Other stages use\na Function URL. It does not provision Global Tables replicas or latency-based\nRoute 53 routing. See the [deployment guide](./docs/deployment-guide.md).\n\n```bash\nnpx sst deploy --stage production\n```\n\n## Monitoring and response cache\n\nHandlers emit CloudWatch EMF under namespace `ApiGateway`, with only `Stage`\nas a dimension. Gateway metrics: `RequestCount`, `ThrottledCount`,\n`CircuitOpenCount`, `UpstreamErrorCount`, `GatewayLatencyMs`, and\n`UpstreamLatencyMs` when an upstream attempt occurs. Authorizer metrics:\n`AuthorizedCount`, `UnauthorizedCount`, `AuthorizerLatencyMs`.\n\nThe stack defines alarms for handler P99 >150ms over five one-minute periods,\nupstream errors >1% and throttling >5% of gateway requests over one minute.\nNotification destinations must be connected by the operator. Handler latency\nexcludes API Gateway transport and authorizer time; it is not end-to-end latency.\n\nAuthorizer cache effectiveness can be **estimated** using Lambda `Invocations`\nversus API Gateway `Count` over the same protected traffic, stage, region and\nperiod. It is not an exact hit ratio; see the guide for exclusions.\n\nResponse caching remains disabled after the\n[cache spike](./docs/specs/api-gateway-cache.md): identity, query/header variation,\nerror caching and upstream `Cache-Control` handling need a proven route contract.\nNo cache cluster is created.\n\n## Development\n\n```bash\nnpm ci\nnpm run build:all\nnpm run typecheck\nnpm run typecheck --workspaces\nnpx eslint .\nnpm test\n# Include real Redis integration tests:\nREDIS_URL=redis://127.0.0.1:16389 npm test\n```\n\nCore releases use `vX.Y.Z`; Redis releases use `store-redis-vX.Y.Z`. Both must\nmatch manifest versions. Core 2.2.0 and Redis 1.0.0 are prepared, not published.\n\n## Links\n\n- [Changelog](./CHANGELOG.md)\n- [Security policy](./SECURITY.md)\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}