{"_id":"@contract-kit/provider-rate-limit-upstash","_rev":"11-6492eb597d51ce976a3e85ac6d6c33f9","name":"@contract-kit/provider-rate-limit-upstash","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.1":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.0.1","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.0.1","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"dist":{"shasum":"26b2cd109d2a3474abc42b2205f6bb40d7261c4b","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.0.1.tgz","fileCount":12,"integrity":"sha512-Futo80dqk3WtDiFz6u9CcVjx/GD6jPQYJY8P/hes9pOtpTSDLgRhk2VAI7hhMV9myLBnc+qh+BnA9DA+4yALnQ==","signatures":[{"sig":"MEYCIQDLB+voEc54s4J4Ggg0zz5HtFf2yGE+n7cEjEtV0VoKSAIhAKxUg9gR0OErZJoa2r5/5shFre7xZBEEPLSWRXzErDNE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43304},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"000327aeb15d9b6753ceb8c0a04aa286d975c4fe","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"_npmVersion":"10.8.2","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^3.24.0","@contract-kit/ports":"*"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.4","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.0.1_1765348451502_0.38594288115691544","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.1","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.1","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"5213da9ad34470e36033b993acc711fd40c5a8f5","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.1.tgz","fileCount":13,"integrity":"sha512-mtQ7RIK4gVth2lFpL1+XSSfrSQJxIKwhRY4KyVeOW/O4hBWYr0oDtvgpaR3siK+8vMbu/1Bvgm+1xJPEMfe9+A==","signatures":[{"sig":"MEQCIG0hmPJy+iS+oTiUma/c6g0boAI2Xww0KnxlFa1azl0DAiAHYXiqtfTXRE6aXQ9xQoqQP2Wv9ljJBPsRYQOFpWPVvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36209},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"56e21c50d36e17463f6f73399bbecb62bde7f793","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"10.8.2","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"zod":"^3.24.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.1_1766346618061_0.5979753123178517","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.2","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.2","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"d497e2ac6083af130acd0ff8716f0066a813ee37","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.2.tgz","fileCount":13,"integrity":"sha512-gnjO9SXDXk/O3UCaU7SHzGUQ7S0hD26ItsUlpImzHlWJnQe3sWSsiYc/9Yjdi8FgsTqe6phE0cxTaCrvyu160Q==","signatures":[{"sig":"MEYCIQD6N05fJb7uwUULY/05XPGwLc34eXD60deNsIlONogbDAIhAIX5t+O8yU34XKWs2G+ngUA70L2Nnjso8R/B9TrL2eQt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36392},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"877bbbf2892c080c4a52bee23ac45223e8497a28","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"10.8.2","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.24.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.2_1771801723539_0.3508301127298299","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.4","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.4","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"7d16a020e099ee3dbde5eb418beb43017402c201","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.4.tgz","fileCount":14,"integrity":"sha512-3IkW9dU9lplXeFzIYKmGPkg4EFkYmQyNdviuxkMuYB8+E3Jx1HidbxYvhBF6iUfZkTD6RsvUPDiSUTFemjZnUg==","signatures":[{"sig":"MEYCIQCaACO0GqG+xqZ4sc12OfA3hGYSUqToJq5Uc/35lItqWgIhAI8fv/nctrovhj2M0ZrYseNpXFjkOGUU6HFtECH+E86g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39636},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"8b77a6da239d5efb09623b38efc4d0be14e447a5","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"10.8.2","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"20.20.1","dependencies":{"zod":"^3.24.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.4_1773529418514_0.5945368495213534","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.5","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.5","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"7dd7f33d491e5137fafcf0dfe695f598188bcebd","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.5.tgz","fileCount":13,"integrity":"sha512-7owS5VrmD1jliTOcVePAwsMBCgnLpW4nlzBhGHJUpp8UXzgK1KdPyCG0nlHms9yV6bZqOSoABwTjuv5oYwOAag==","signatures":[{"sig":"MEYCIQDQ372Lr6E+nceGM+LMTLefoMs2zn6cooRCrGXDFwQirgIhAMGToyt+0jWqKIL2W4UFFwFvnguqLZa/qWrBnBYL1haJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37615},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"57c8bdb32cd74faf90f87d8093a06a6aba4d5be6","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist coverage .turbo","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"10.8.2","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.24.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.13","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.5_1777684709566_0.21368318151253196","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.6","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.6","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"de677e4d6ddb993a633dddc8f99807bdafbb2684","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.6.tgz","fileCount":7,"integrity":"sha512-RZLxMUXNUHnSsSLwe6HocehRQIxd2Hzm2fTyGlEgoi0a3UJT2M2RwQRJIxxLspZ+8PdBLCSTo6s/pvexvXtGPw==","signatures":[{"sig":"MEYCIQCs8PcOxpl1+IVDrDqgoCDvqK9J0EEjUVF0PVzr1/Z8JAIhAMAOXNMIwTULZlN9Vzyd/OsdZ40Zif8sM9XH6IYfGffH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20535},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"7ae72bbc67e1838ae8aea10708f7d5897c94f1b1","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist coverage .turbo","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"11.12.1","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"zod":"^4.0.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.13","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.6_1777687315783_0.30051218038765537","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.7","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.7","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"19c5ec9cd5aa3d88737e971f59b5d3d017978ce1","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.7.tgz","fileCount":7,"integrity":"sha512-DW0FpiifnDwjMA1msJ7fptBdF22+VWldAWp1EbvColhZbQrygThbWLuLPOOIiNalqO1BecH7q8OGIkGkM0dRVg==","signatures":[{"sig":"MEUCIARPx6UCKC9nEHzDP117b7+ExL1syJurljp2XZz4+f4yAiEA8a9EJVKgs6TwwEHjq7Dr2yQBCZs5cA8WC1VbF71u3Zo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20593},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6720a67b4add23696780704f22a82764e7f4251d","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist coverage .turbo","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"11.12.1","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"zod":"^4.0.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.13","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.7_1777691579805_0.0873503232336359","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.8","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.8","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"c99080a90ec268e26d520b54a27137d4848411e4","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.8.tgz","fileCount":7,"integrity":"sha512-QOsU47zBBsOIsuX9/Byc0VknsYo7E+3/7seBbpb04uNRXQ1IvYJXvbQZoBYDL2Ia5s3ysR6IEgOgSULJ8YnEAA==","signatures":[{"sig":"MEUCIDUqZCU1SfdYDZIl9AYM7R1bPcEJi6nZg3flGVB004SNAiEAk8bpSn89uyjjJCJ+xt3Eajw0gS+7NaeGOUcE10YGKgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20651},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"1163eb1a8cbfe0afcdd0315f1688a227c1fe2d6e","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist coverage .turbo","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"11.12.1","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"zod":"^4.0.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.13","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.8_1777869146129_0.402290149995304","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.9","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.9","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"51187b209f7bdce87ace3fc86e281bcec27db7d0","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.9.tgz","fileCount":7,"integrity":"sha512-RwhApg10wmWau9jfNfQO7HHk16WLlD8hiLOUzTuggI2cDZwrCPpCxPl2MmJtbpXJVwUf25uYDgLfbL2P6LSpNw==","signatures":[{"sig":"MEUCIB3qIyUSHjrInNCAY5MZPpBXslXb7khGiYSH+Xno6bKLAiEAmSs0FQ98oPVXoRhW2QHrZP55QsFHHP0Z5oA7NRvdkaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20709},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"1163eb1a8cbfe0afcdd0315f1688a227c1fe2d6e","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist coverage .turbo","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"11.12.1","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"25.9.0","dependencies":{"zod":"^4.0.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.13","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.9_1777937718541_0.3628078937459278","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@contract-kit/provider-rate-limit-upstash","version":"0.1.10","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"author":{"name":"Taylor Bryant"},"license":"MIT","_id":"@contract-kit/provider-rate-limit-upstash@0.1.10","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"dist":{"shasum":"93f6134b8644d94ea00efdd66f63ec8e0c7d55a5","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-0.1.10.tgz","fileCount":8,"integrity":"sha512-AYhH7KSm8BDHtcyFKoXCQpqXMkwPuCO87E2GcqSuxw6ms5Ekl9oCXxescvwreTHrXBuzzdY8HGye3a56XdurbA==","signatures":[{"sig":"MEUCIQCsbG5VdCOFAK/6gq8iMrs7UhpdWHexwid43W/DM4BIdQIgUyWYP1RCbuPuzIPnTxfaQ1/DusuWiozSSPguDQTO5mQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26054},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"2bfd9106834c35818ebc4f04a8395010a876f583","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"bun test","build":"tsc","clean":"rm -rf dist coverage .turbo","test:coverage":"bun test --coverage"},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"repository":{"url":"git+https://github.com/taylorbryant/contract-kit.git","type":"git","directory":"packages/provider-rate-limit-upstash"},"_npmVersion":"10.8.2","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","directories":{},"sideEffects":false,"_nodeVersion":"20.20.2","dependencies":{"zod":"^4.0.0","@contract-kit/ports":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.13","typescript":"^5.3.0","@types/node":"^20.10.0","@upstash/redis":"^1.35.7","@upstash/ratelimit":"^2.0.7"},"peerDependencies":{"@upstash/redis":"^1.0.0","@upstash/ratelimit":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/provider-rate-limit-upstash_0.1.10_1778986549088_0.8614071886381682","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@contract-kit/provider-rate-limit-upstash","version":"1.0.0","type":"module","description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc","dev":"tsc --watch","clean":"rm -rf dist coverage .turbo","test":"bun test","test:coverage":"bun test --coverage","lint":"biome check ."},"keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/taylorbryant/contract-kit.git","directory":"packages/provider-rate-limit-upstash"},"author":{"name":"Taylor Bryant"},"homepage":"https://github.com/taylorbryant/contract-kit#readme","bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"sideEffects":false,"publishConfig":{"access":"public"},"engines":{"node":">=18.0.0"},"peerDependencies":{"@upstash/ratelimit":"^2.0.0","@upstash/redis":"^1.0.0"},"dependencies":{"@contract-kit/devtools":"*","@contract-kit/ports":"*","zod":"^4.0.0"},"devDependencies":{"@types/bun":"^1.3.13","@types/node":"^20.10.0","@upstash/ratelimit":"^2.0.7","@upstash/redis":"^1.35.7","typescript":"^5.3.0"},"_id":"@contract-kit/provider-rate-limit-upstash@1.0.0","gitHead":"9579d803d4c25e0b648271f32ce5b9ff266549a8","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-iS+R+I5AzY/4T5/498fcCk7bfG5GHx7LzDwHmiOQ14dk4ZPr1yX7KY44bn4qY/rtcgc3AeD9+O1AzORTvXh1YA==","shasum":"53e5e2acecdcb0ac1c10aeabc52768f868344704","tarball":"https://registry.npmjs.org/@contract-kit/provider-rate-limit-upstash/-/provider-rate-limit-upstash-1.0.0.tgz","fileCount":8,"unpackedSize":32529,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGaS2HgdD9uRe9rxf2lIN7ohQWxr85wRHG1QZnhM3KT5AiEAkCOjDv047qMhwBR3l30Br7Y7k88teqaqS4DTMMyhyLk="}]},"_npmUser":{"name":"taylorbryant","email":"taylor@bryant.io"},"directories":{},"maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/provider-rate-limit-upstash_1.0.0_1779231371070_0.5771908201446785"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-10T06:34:11.398Z","modified":"2026-05-19T22:56:11.381Z","0.0.1":"2025-12-10T06:34:11.651Z","0.1.1":"2025-12-21T19:50:18.395Z","0.1.2":"2026-02-22T23:08:43.676Z","0.1.4":"2026-03-14T23:03:38.657Z","0.1.5":"2026-05-02T01:18:29.733Z","0.1.6":"2026-05-02T02:01:55.935Z","0.1.7":"2026-05-02T03:12:59.929Z","0.1.8":"2026-05-04T04:32:26.273Z","0.1.9":"2026-05-04T23:35:18.673Z","0.1.10":"2026-05-17T02:55:49.228Z","1.0.0":"2026-05-19T22:56:11.229Z"},"bugs":{"url":"https://github.com/taylorbryant/contract-kit/issues"},"author":{"name":"Taylor Bryant"},"license":"MIT","homepage":"https://github.com/taylorbryant/contract-kit#readme","keywords":["contract-kit","upstash","rate-limit","provider","redis","ports"],"repository":{"type":"git","url":"git+https://github.com/taylorbryant/contract-kit.git","directory":"packages/provider-rate-limit-upstash"},"description":"Upstash-based rate limit provider for contract-kit - adds rate limit port using Upstash Redis","maintainers":[{"name":"taylorbryant","email":"taylor@bryant.io"}],"readme":"# @contract-kit/provider-rate-limit-upstash\n\nUpstash-based implementation of the `RateLimitPort` for Contract Kit apps.\n\nThis provider uses [Upstash Redis](https://upstash.com/) and the [@upstash/ratelimit](https://github.com/upstash/ratelimit) library to provide distributed rate limiting capabilities to your Contract Kit applications.\n\n## Features\n\n- ✅ Implements the standard `RateLimitPort` interface\n- ✅ Uses Upstash Redis REST API (serverless-friendly, no connection pooling needed)\n- ✅ Fixed window rate limiting algorithm\n- ✅ Dynamic rate limit configuration per request\n- ✅ Configurable key prefix to avoid collisions\n- ✅ Type-safe configuration with Zod validation\n- ✅ Devtools events for allowed, blocked, and failed hits\n- ✅ Works seamlessly with Contract Kit framework and middleware\n\n## Installation\n\n```bash\nnpm install @contract-kit/provider-rate-limit-upstash @upstash/redis @upstash/ratelimit\n```\n\nOr with other package managers:\n\n```bash\nbun add @contract-kit/provider-rate-limit-upstash @upstash/redis @upstash/ratelimit\npnpm add @contract-kit/provider-rate-limit-upstash @upstash/redis @upstash/ratelimit\nyarn add @contract-kit/provider-rate-limit-upstash @upstash/redis @upstash/ratelimit\n```\n\n\n## TypeScript requirements\n\nThis package requires TypeScript 5.0 or higher for proper type inference.\n\n## Configuration\n\nSet these environment variables:\n\n| Variable | Required | Description | Example |\n|----------|----------|-------------|---------|\n| `UPSTASH_REDIS_REST_URL` | Yes | Your Upstash Redis REST URL | `https://us1-properly-ancient-12345.upstash.io` |\n| `UPSTASH_REDIS_REST_TOKEN` | Yes | Your Upstash Redis REST token | `AXXXeyJpZCI6IjEy...` |\n| `UPSTASH_PREFIX` | No | Key prefix for rate limit keys (default: `ck:ratelimit`) | `myapp:ratelimit` |\n\n### Getting Upstash credentials\n\n1. Sign up at [Upstash](https://upstash.com/)\n2. Create a new Redis database\n3. Navigate to the database details page\n4. Copy the REST URL and REST token from the \"REST API\" section\n\n## Usage\n\n### With Contract Kit framework\n\n```ts\nimport { createServer } from \"@contract-kit/server\";\nimport { upstashRateLimitProvider } from \"@contract-kit/provider-rate-limit-upstash\";\n\nexport const app = await createServer({\n  ports: basePorts,\n  providers: [upstashRateLimitProvider],\n  createContext: ({ ports }) => ({ ports }),\n  routes: [\n    // ... your routes\n  ],\n  mapUnhandledError: () => ({\n    status: 500,\n    body: {\n      code: \"INTERNAL_SERVER_ERROR\",\n      message: \"Internal server error\",\n    },\n  }),\n});\n```\n\n### In middleware or policies\n\nOnce the provider is registered, you can use the rate limit port in your middleware:\n\n```ts\n// Example middleware that rate limits by IP address\nasync function rateLimitMiddleware(ctx: AppCtx) {\n  const result = await ctx.ports.rateLimit.hit({\n    key: `ip:${ctx.ip}`,\n    limit: 100,\n    windowSec: 60, // 100 requests per 60 seconds\n  });\n\n  if (!result.allowed) {\n    return {\n      status: 429,\n      headers: {\n        \"X-RateLimit-Limit\": \"100\",\n        \"X-RateLimit-Remaining\": String(result.remaining ?? 0),\n        \"X-RateLimit-Reset\": result.resetAt?.toISOString() ?? \"\",\n        \"Retry-After\": String(result.retryAfterSeconds ?? 0),\n      },\n      body: {\n        code: \"TOO_MANY_REQUESTS\",\n        message: \"Rate limit exceeded. Please try again later.\",\n      },\n    };\n  }\n\n  // Request is allowed\n  return undefined; // continue to next middleware/handler\n}\n```\n\n### Different rate limits for different endpoints\n\nYou can apply different rate limits for different operations:\n\n```ts\n// Strict rate limit for auth endpoints\nconst loginResult = await ctx.ports.rateLimit.hit({\n  key: `login:${ctx.ip}`,\n  limit: 5,\n  windowSec: 300, // 5 attempts per 5 minutes\n});\n\n// More relaxed rate limit for API endpoints\nconst apiResult = await ctx.ports.rateLimit.hit({\n  key: `api:user:${userId}`,\n  limit: 1000,\n  windowSec: 3600, // 1000 requests per hour\n});\n```\n\n### Using with contract metadata\n\nYou can define rate limit metadata on your contracts:\n\n```ts\nconst getTodos = api.get(\"/todos\")\n  .meta({\n    rateLimit: { max: 60, windowSec: 60, scope: \"user\" },\n  });\n```\n\nThen in your middleware, read this metadata and apply rate limits:\n\n```ts\nasync function rateLimitFromMeta(ctx: AppCtx, meta?: any) {\n  if (!meta?.rateLimit) return;\n\n  const { max, windowSec, scope = \"global\" } = meta.rateLimit;\n  const result = await ctx.ports.rateLimit.hit({\n    key: `${scope}:${ctx.userId ?? ctx.ip ?? \"global\"}`,\n    limit: max,\n    windowSec,\n  });\n\n  if (!result.allowed) {\n    return {\n      status: 429,\n      body: {\n        code: \"TOO_MANY_REQUESTS\",\n        message: \"Too many requests\",\n      },\n    };\n  }\n}\n```\n\n## Rate limit result\n\nThe `hit` method returns a `RateLimitResult` with:\n\n```ts\ninterface RateLimitResult {\n  allowed: boolean;                 // true if the hit is within the limit\n  remaining: number | null;         // requests remaining in the window\n  resetAt: Date | null;             // when the window resets\n  retryAfterSeconds: number | null; // retry delay when the hit is rejected\n}\n```\n\n## Implementation details\n\n- **Algorithm**: Uses fixed window rate limiting via `Ratelimit.fixedWindow()`\n- **Backend**: Upstash Redis REST API (serverless-compatible)\n- **Per-request configuration**: Creates a new `Ratelimit` instance for each `hit()` call to support dynamic limits\n- **Key prefix**: Configurable prefix to avoid key collisions\n\n## Devtools\n\nWhen `@contract-kit/devtools` is installed before this provider, rate limit\nchecks appear under the dashboard's Rate limits watcher.\n\nThe provider records `rateLimit.hit` events with the key, limit, window,\nconfigured prefix, allowed/blocked result, remaining count, reset time,\nretry-after value, and duration. Provider failures are recorded as\n`rateLimit.hit.failed`.\n\n## Advanced usage\n\n### Access the underlying Redis client\n\nThe provider extends the standard `RateLimitPort` with access to the underlying Upstash Redis client:\n\n```ts\nimport type { UpstashRateLimitPort } from \"@contract-kit/provider-rate-limit-upstash\";\n\nconst rateLimit = ctx.ports.rateLimit as UpstashRateLimitPort;\n\n// Access the Redis client for advanced operations\nawait rateLimit.client.get(\"some:key\");\nawait rateLimit.client.set(\"some:key\", \"value\");\n```\n\n## Testing\n\nThe provider includes comprehensive tests. Run them with:\n\n```bash\nbun test\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}