@upstash/ratelimit 0.3.0-rc.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/dist/index.d.ts +571 -0
  2. package/dist/index.js +736 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/index.mjs +707 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +23 -42
  7. package/.releaserc +0 -14
  8. package/esm/_dnt.shims.js +0 -62
  9. package/esm/analytics.js +0 -84
  10. package/esm/cache.js +0 -40
  11. package/esm/deps/deno.land/x/base64@v0.2.1/base.js +0 -100
  12. package/esm/deps/deno.land/x/base64@v0.2.1/base64url.js +0 -9
  13. package/esm/deps/deno.land/x/sha1@v1.0.3/deps.js +0 -1
  14. package/esm/deps/deno.land/x/sha1@v1.0.3/mod.js +0 -191
  15. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/mod.js +0 -66
  16. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/append.js +0 -9
  17. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitcount.js +0 -16
  18. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitop.js +0 -9
  19. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitpos.js +0 -9
  20. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/command.js +0 -57
  21. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/dbsize.js +0 -9
  22. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decr.js +0 -9
  23. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decrby.js +0 -9
  24. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/del.js +0 -9
  25. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/echo.js +0 -9
  26. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/eval.js +0 -9
  27. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/evalsha.js +0 -9
  28. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/exists.js +0 -9
  29. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expire.js +0 -9
  30. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expireat.js +0 -9
  31. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushall.js +0 -13
  32. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushdb.js +0 -13
  33. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/get.js +0 -9
  34. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getbit.js +0 -9
  35. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getdel.js +0 -9
  36. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getrange.js +0 -9
  37. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getset.js +0 -9
  38. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hdel.js +0 -9
  39. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hexists.js +0 -9
  40. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hget.js +0 -9
  41. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hgetall.js +0 -29
  42. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrby.js +0 -9
  43. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrbyfloat.js +0 -9
  44. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hkeys.js +0 -9
  45. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hlen.js +0 -9
  46. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmget.js +0 -35
  47. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmset.js +0 -13
  48. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hrandfield.js +0 -39
  49. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hscan.js +0 -16
  50. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hset.js +0 -13
  51. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hsetnx.js +0 -9
  52. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hstrlen.js +0 -9
  53. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hvals.js +0 -9
  54. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incr.js +0 -9
  55. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrby.js +0 -9
  56. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrbyfloat.js +0 -9
  57. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/keys.js +0 -9
  58. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lindex.js +0 -6
  59. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/linsert.js +0 -6
  60. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/llen.js +0 -9
  61. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lmove.js +0 -9
  62. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpop.js +0 -9
  63. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpos.js +0 -19
  64. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpush.js +0 -9
  65. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpushx.js +0 -9
  66. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrange.js +0 -6
  67. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrem.js +0 -6
  68. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lset.js +0 -6
  69. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ltrim.js +0 -6
  70. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mget.js +0 -9
  71. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mod.js +0 -119
  72. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mset.js +0 -12
  73. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/msetnx.js +0 -9
  74. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/persist.js +0 -9
  75. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpire.js +0 -9
  76. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpireat.js +0 -9
  77. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ping.js +0 -13
  78. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/psetex.js +0 -9
  79. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pttl.js +0 -9
  80. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/publish.js +0 -9
  81. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/randomkey.js +0 -9
  82. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rename.js +0 -9
  83. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/renamenx.js +0 -9
  84. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpop.js +0 -9
  85. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpush.js +0 -9
  86. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpushx.js +0 -9
  87. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sadd.js +0 -9
  88. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scan.js +0 -19
  89. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scard.js +0 -9
  90. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_exists.js +0 -12
  91. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_flush.js +0 -16
  92. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_load.js +0 -9
  93. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiff.js +0 -9
  94. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiffstore.js +0 -9
  95. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/set.js +0 -36
  96. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setbit.js +0 -9
  97. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setex.js +0 -9
  98. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setnx.js +0 -9
  99. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setrange.js +0 -9
  100. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinter.js +0 -9
  101. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinterstore.js +0 -9
  102. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sismember.js +0 -9
  103. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smembers.js +0 -9
  104. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smismember.js +0 -9
  105. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smove.js +0 -9
  106. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/spop.js +0 -13
  107. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srandmember.js +0 -13
  108. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srem.js +0 -9
  109. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sscan.js +0 -16
  110. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/strlen.js +0 -9
  111. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunion.js +0 -9
  112. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunionstore.js +0 -9
  113. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/time.js +0 -9
  114. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/touch.js +0 -9
  115. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ttl.js +0 -9
  116. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/type.js +0 -9
  117. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/unlink.js +0 -9
  118. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zadd.js +0 -26
  119. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcard.js +0 -9
  120. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcount.js +0 -9
  121. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zdiffstore.js +0 -9
  122. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zincrby.js +0 -9
  123. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zinterstore.js +0 -27
  124. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zlexcount.js +0 -9
  125. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zmscore.js +0 -10
  126. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmax.js +0 -13
  127. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmin.js +0 -13
  128. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrange.js +0 -26
  129. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrank.js +0 -9
  130. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrem.js +0 -9
  131. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebylex.js +0 -9
  132. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyrank.js +0 -9
  133. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyscore.js +0 -9
  134. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrevrank.js +0 -9
  135. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscan.js +0 -16
  136. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscore.js +0 -9
  137. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zunionstore.js +0 -27
  138. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/error.js +0 -9
  139. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/http.js +0 -165
  140. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/pipeline.js +0 -1199
  141. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/redis.js +0 -1200
  142. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/script.js +0 -77
  143. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/types.js +0 -1
  144. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/util.js +0 -31
  145. package/esm/deps/deno.land/x/upstash_redis@v1.19.3/version.js +0 -1
  146. package/esm/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +0 -50
  147. package/esm/duration.js +0 -21
  148. package/esm/mod.js +0 -3
  149. package/esm/multi.js +0 -268
  150. package/esm/package.json +0 -3
  151. package/esm/ratelimit.js +0 -197
  152. package/esm/single.js +0 -376
  153. package/esm/types.js +0 -1
  154. package/script/_dnt.shims.js +0 -66
  155. package/script/analytics.js +0 -88
  156. package/script/cache.js +0 -44
  157. package/script/deps/deno.land/x/base64@v0.2.1/base.js +0 -104
  158. package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +0 -13
  159. package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +0 -6
  160. package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +0 -196
  161. package/script/deps/deno.land/x/upstash_redis@v1.19.3/mod.js +0 -93
  162. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/append.js +0 -13
  163. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitcount.js +0 -20
  164. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitop.js +0 -13
  165. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitpos.js +0 -13
  166. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/command.js +0 -61
  167. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/dbsize.js +0 -13
  168. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decr.js +0 -13
  169. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decrby.js +0 -13
  170. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/del.js +0 -13
  171. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/echo.js +0 -13
  172. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/eval.js +0 -13
  173. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/evalsha.js +0 -13
  174. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/exists.js +0 -13
  175. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expire.js +0 -13
  176. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expireat.js +0 -13
  177. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushall.js +0 -17
  178. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushdb.js +0 -17
  179. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/get.js +0 -13
  180. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getbit.js +0 -13
  181. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getdel.js +0 -13
  182. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getrange.js +0 -13
  183. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getset.js +0 -13
  184. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hdel.js +0 -13
  185. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hexists.js +0 -13
  186. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hget.js +0 -13
  187. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hgetall.js +0 -33
  188. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrby.js +0 -13
  189. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrbyfloat.js +0 -13
  190. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hkeys.js +0 -13
  191. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hlen.js +0 -13
  192. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmget.js +0 -39
  193. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmset.js +0 -17
  194. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hrandfield.js +0 -43
  195. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hscan.js +0 -20
  196. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hset.js +0 -17
  197. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hsetnx.js +0 -13
  198. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hstrlen.js +0 -13
  199. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hvals.js +0 -13
  200. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incr.js +0 -13
  201. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrby.js +0 -13
  202. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrbyfloat.js +0 -13
  203. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/keys.js +0 -13
  204. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lindex.js +0 -10
  205. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/linsert.js +0 -10
  206. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/llen.js +0 -13
  207. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lmove.js +0 -13
  208. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpop.js +0 -13
  209. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpos.js +0 -23
  210. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpush.js +0 -13
  211. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpushx.js +0 -13
  212. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrange.js +0 -10
  213. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrem.js +0 -10
  214. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lset.js +0 -10
  215. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ltrim.js +0 -10
  216. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mget.js +0 -13
  217. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mod.js +0 -135
  218. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mset.js +0 -16
  219. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/msetnx.js +0 -13
  220. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/persist.js +0 -13
  221. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpire.js +0 -13
  222. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpireat.js +0 -13
  223. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ping.js +0 -17
  224. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/psetex.js +0 -13
  225. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pttl.js +0 -13
  226. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/publish.js +0 -13
  227. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/randomkey.js +0 -13
  228. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rename.js +0 -13
  229. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/renamenx.js +0 -13
  230. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpop.js +0 -13
  231. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpush.js +0 -13
  232. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpushx.js +0 -13
  233. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sadd.js +0 -13
  234. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scan.js +0 -23
  235. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scard.js +0 -13
  236. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_exists.js +0 -16
  237. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_flush.js +0 -20
  238. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_load.js +0 -13
  239. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiff.js +0 -13
  240. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiffstore.js +0 -13
  241. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/set.js +0 -40
  242. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setbit.js +0 -13
  243. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setex.js +0 -13
  244. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setnx.js +0 -13
  245. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setrange.js +0 -13
  246. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinter.js +0 -13
  247. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinterstore.js +0 -13
  248. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sismember.js +0 -13
  249. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smembers.js +0 -13
  250. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smismember.js +0 -13
  251. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smove.js +0 -13
  252. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/spop.js +0 -17
  253. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srandmember.js +0 -17
  254. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srem.js +0 -13
  255. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sscan.js +0 -20
  256. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/strlen.js +0 -13
  257. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunion.js +0 -13
  258. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunionstore.js +0 -13
  259. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/time.js +0 -13
  260. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/touch.js +0 -13
  261. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ttl.js +0 -13
  262. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/type.js +0 -13
  263. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/unlink.js +0 -13
  264. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zadd.js +0 -30
  265. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcard.js +0 -13
  266. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcount.js +0 -13
  267. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zdiffstore.js +0 -13
  268. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zincrby.js +0 -13
  269. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zinterstore.js +0 -31
  270. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zlexcount.js +0 -13
  271. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zmscore.js +0 -14
  272. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmax.js +0 -17
  273. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmin.js +0 -17
  274. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrange.js +0 -30
  275. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrank.js +0 -13
  276. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrem.js +0 -13
  277. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebylex.js +0 -13
  278. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyrank.js +0 -13
  279. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyscore.js +0 -13
  280. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrevrank.js +0 -13
  281. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscan.js +0 -20
  282. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscore.js +0 -13
  283. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zunionstore.js +0 -31
  284. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/error.js +0 -13
  285. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/http.js +0 -169
  286. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/pipeline.js +0 -1203
  287. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/redis.js +0 -1204
  288. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/script.js +0 -81
  289. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/types.js +0 -2
  290. package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/util.js +0 -35
  291. package/script/deps/deno.land/x/upstash_redis@v1.19.3/version.js +0 -4
  292. package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +0 -55
  293. package/script/duration.js +0 -25
  294. package/script/mod.js +0 -22
  295. package/script/multi.js +0 -295
  296. package/script/package.json +0 -3
  297. package/script/ratelimit.js +0 -202
  298. package/script/single.js +0 -380
  299. package/script/types.js +0 -2
  300. package/types/_dnt.shims.d.ts +0 -5
  301. package/types/analytics.d.ts +0 -36
  302. package/types/cache.d.ts +0 -16
  303. package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +0 -5
  304. package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +0 -1
  305. package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +0 -1
  306. package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +0 -26
  307. package/types/deps/deno.land/x/upstash_redis@v1.19.3/mod.d.ts +0 -41
  308. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/append.d.ts +0 -7
  309. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitcount.d.ts +0 -8
  310. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitop.d.ts +0 -12
  311. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitpos.d.ts +0 -7
  312. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/command.d.ts +0 -37
  313. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/dbsize.d.ts +0 -7
  314. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decr.d.ts +0 -7
  315. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decrby.d.ts +0 -7
  316. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/del.d.ts +0 -7
  317. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/echo.d.ts +0 -7
  318. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/eval.d.ts +0 -7
  319. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/evalsha.d.ts +0 -7
  320. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/exists.d.ts +0 -7
  321. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expire.d.ts +0 -7
  322. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expireat.d.ts +0 -7
  323. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushall.d.ts +0 -9
  324. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushdb.d.ts +0 -9
  325. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/get.d.ts +0 -7
  326. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getbit.d.ts +0 -7
  327. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getdel.d.ts +0 -7
  328. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getrange.d.ts +0 -7
  329. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getset.d.ts +0 -7
  330. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hdel.d.ts +0 -7
  331. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hexists.d.ts +0 -7
  332. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hget.d.ts +0 -7
  333. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hgetall.d.ts +0 -7
  334. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrby.d.ts +0 -7
  335. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrbyfloat.d.ts +0 -7
  336. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hkeys.d.ts +0 -7
  337. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hlen.d.ts +0 -7
  338. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmget.d.ts +0 -15
  339. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmset.d.ts +0 -9
  340. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hrandfield.d.ts +0 -9
  341. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hscan.d.ts +0 -24
  342. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hset.d.ts +0 -9
  343. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hsetnx.d.ts +0 -7
  344. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hstrlen.d.ts +0 -7
  345. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hvals.d.ts +0 -7
  346. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incr.d.ts +0 -7
  347. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrby.d.ts +0 -7
  348. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrbyfloat.d.ts +0 -7
  349. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/keys.d.ts +0 -7
  350. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lindex.d.ts +0 -4
  351. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/linsert.d.ts +0 -9
  352. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/llen.d.ts +0 -7
  353. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lmove.d.ts +0 -12
  354. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpop.d.ts +0 -7
  355. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpos.d.ts +0 -15
  356. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpush.d.ts +0 -7
  357. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpushx.d.ts +0 -7
  358. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrange.d.ts +0 -4
  359. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrem.d.ts +0 -4
  360. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lset.d.ts +0 -4
  361. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ltrim.d.ts +0 -4
  362. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mget.d.ts +0 -7
  363. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mod.d.ts +0 -119
  364. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mset.d.ts +0 -9
  365. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/msetnx.d.ts +0 -9
  366. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/persist.d.ts +0 -7
  367. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpire.d.ts +0 -7
  368. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpireat.d.ts +0 -7
  369. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ping.d.ts +0 -7
  370. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/psetex.d.ts +0 -7
  371. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pttl.d.ts +0 -7
  372. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/publish.d.ts +0 -7
  373. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/randomkey.d.ts +0 -7
  374. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rename.d.ts +0 -7
  375. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/renamenx.d.ts +0 -7
  376. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpop.d.ts +0 -7
  377. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpush.d.ts +0 -7
  378. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpushx.d.ts +0 -7
  379. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sadd.d.ts +0 -7
  380. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scan.d.ts +0 -18
  381. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scard.d.ts +0 -7
  382. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_exists.d.ts +0 -7
  383. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_flush.d.ts +0 -14
  384. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_load.d.ts +0 -7
  385. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiff.d.ts +0 -7
  386. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiffstore.d.ts +0 -7
  387. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/set.d.ts +0 -55
  388. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setbit.d.ts +0 -7
  389. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setex.d.ts +0 -7
  390. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setnx.d.ts +0 -7
  391. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setrange.d.ts +0 -7
  392. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinter.d.ts +0 -7
  393. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinterstore.d.ts +0 -7
  394. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sismember.d.ts +0 -7
  395. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smembers.d.ts +0 -7
  396. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smismember.d.ts +0 -7
  397. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smove.d.ts +0 -7
  398. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/spop.d.ts +0 -7
  399. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srandmember.d.ts +0 -7
  400. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srem.d.ts +0 -7
  401. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sscan.d.ts +0 -24
  402. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/strlen.d.ts +0 -7
  403. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunion.d.ts +0 -7
  404. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunionstore.d.ts +0 -7
  405. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/time.d.ts +0 -7
  406. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/touch.d.ts +0 -7
  407. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ttl.d.ts +0 -7
  408. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/type.d.ts +0 -8
  409. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/unlink.d.ts +0 -7
  410. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zadd.d.ts +0 -35
  411. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcard.d.ts +0 -7
  412. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcount.d.ts +0 -7
  413. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zdiffstore.d.ts +0 -7
  414. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zincrby.d.ts +0 -7
  415. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zinterstore.d.ts +0 -30
  416. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zlexcount.d.ts +0 -7
  417. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zmscore.d.ts +0 -7
  418. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmax.d.ts +0 -7
  419. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmin.d.ts +0 -7
  420. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrange.d.ts +0 -42
  421. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrank.d.ts +0 -7
  422. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrem.d.ts +0 -7
  423. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebylex.d.ts +0 -7
  424. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyrank.d.ts +0 -7
  425. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyscore.d.ts +0 -7
  426. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrevrank.d.ts +0 -7
  427. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscan.d.ts +0 -24
  428. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscore.d.ts +0 -7
  429. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zunionstore.d.ts +0 -30
  430. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/error.d.ts +0 -6
  431. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/http.d.ts +0 -87
  432. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/pipeline.d.ts +0 -577
  433. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/redis.d.ts +0 -575
  434. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/script.d.ts +0 -42
  435. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/types.d.ts +0 -18
  436. package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/util.d.ts +0 -1
  437. package/types/deps/deno.land/x/upstash_redis@v1.19.3/version.d.ts +0 -1
  438. package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +0 -3
  439. package/types/duration.d.ts +0 -7
  440. package/types/mod.d.ts +0 -6
  441. package/types/multi.d.ts +0 -128
  442. package/types/ratelimit.d.ts +0 -123
  443. package/types/single.d.ts +0 -194
  444. package/types/types.d.ts +0 -67
package/dist/index.js ADDED
@@ -0,0 +1,736 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ Analytics: () => Analytics,
24
+ MultiRegionRatelimit: () => MultiRegionRatelimit,
25
+ Ratelimit: () => RegionRatelimit
26
+ });
27
+ module.exports = __toCommonJS(src_exports);
28
+
29
+ // src/duration.ts
30
+ function ms(d) {
31
+ const [timeString, duration] = d.split(" ");
32
+ const time = parseFloat(timeString);
33
+ switch (duration) {
34
+ case "ms":
35
+ return time;
36
+ case "s":
37
+ return time * 1e3;
38
+ case "m":
39
+ return time * 1e3 * 60;
40
+ case "h":
41
+ return time * 1e3 * 60 * 60;
42
+ case "d":
43
+ return time * 1e3 * 60 * 60 * 24;
44
+ default:
45
+ throw new Error(`Unable to parse window size: ${d}`);
46
+ }
47
+ }
48
+
49
+ // src/analytics.ts
50
+ var Analytics = class {
51
+ redis;
52
+ prefix;
53
+ constructor(config) {
54
+ this.redis = config.redis;
55
+ this.prefix = config.prefix ?? "@upstash/ratelimit";
56
+ }
57
+ extractGeo(req) {
58
+ if (typeof req.geo !== "undefined") {
59
+ return req.geo;
60
+ }
61
+ if (typeof req.cf !== "undefined") {
62
+ return req.cf;
63
+ }
64
+ return {};
65
+ }
66
+ async record(event) {
67
+ const bucket = new Date().setUTCHours(0, 0, 0, 0).toFixed(0);
68
+ const key = [this.prefix, "events", bucket].join(":");
69
+ await this.redis.hincrby(
70
+ key,
71
+ JSON.stringify({
72
+ ...event,
73
+ time: void 0
74
+ }),
75
+ 1
76
+ );
77
+ }
78
+ async aggregate(aggregateBy, cutoff = 0) {
79
+ const keys = [];
80
+ let cursor = 0;
81
+ do {
82
+ const [nextCursor, found] = await this.redis.scan(cursor, {
83
+ match: [this.prefix, "events", "*"].join(":"),
84
+ count: 1e3
85
+ });
86
+ cursor = nextCursor;
87
+ for (const key of found) {
88
+ const timestamp = parseInt(key.split(":").pop());
89
+ if (timestamp >= cutoff) {
90
+ keys.push(key);
91
+ }
92
+ }
93
+ } while (cursor !== 0);
94
+ const days = {};
95
+ await Promise.all(
96
+ keys.sort().map(async (key) => {
97
+ const fields = await this.redis.hgetall(key);
98
+ if (!fields) {
99
+ return;
100
+ }
101
+ const day = {};
102
+ for (const [field, count] of Object.entries(fields)) {
103
+ const r = JSON.parse(field);
104
+ for (const [k, v] of Object.entries(r)) {
105
+ if (k !== aggregateBy) {
106
+ continue;
107
+ }
108
+ if (!day[v]) {
109
+ day[v] = {
110
+ success: 0,
111
+ blocked: 0
112
+ };
113
+ }
114
+ if (r.success) {
115
+ day[v].success += count;
116
+ } else {
117
+ day[v].blocked += count;
118
+ }
119
+ }
120
+ }
121
+ days[key.split(":")[2]] = day;
122
+ })
123
+ );
124
+ return days;
125
+ }
126
+ async series(aggregateBy, cutoff = 0) {
127
+ const keys = [];
128
+ let cursor = 0;
129
+ do {
130
+ const [nextCursor, found] = await this.redis.scan(cursor, {
131
+ match: [this.prefix, "events", "*"].join(":"),
132
+ count: 1e3
133
+ });
134
+ cursor = nextCursor;
135
+ for (const key of found) {
136
+ const timestamp = parseInt(key.split(":").pop());
137
+ if (timestamp >= cutoff) {
138
+ keys.push(key);
139
+ }
140
+ }
141
+ } while (cursor !== 0);
142
+ const days = await Promise.all(
143
+ keys.sort().map(async (key) => {
144
+ const fields = await this.redis.hgetall(key);
145
+ const day = { time: parseInt(key.split(":")[2]) };
146
+ if (!fields) {
147
+ return day;
148
+ }
149
+ for (const [field, count] of Object.entries(fields)) {
150
+ const r = JSON.parse(field);
151
+ for (const [k, v] of Object.entries(r)) {
152
+ console.log({ k, v });
153
+ if (k !== aggregateBy) {
154
+ continue;
155
+ }
156
+ if (!day[v]) {
157
+ day[v] = 0;
158
+ }
159
+ day[v] += count;
160
+ }
161
+ }
162
+ return day;
163
+ })
164
+ );
165
+ return days;
166
+ }
167
+ async getUsage(cutoff = 0) {
168
+ const records = await this.aggregate("identifier", cutoff);
169
+ const usage = {};
170
+ for (const day of Object.values(records)) {
171
+ for (const [k, v] of Object.entries(day)) {
172
+ if (!usage[k]) {
173
+ usage[k] = { success: 0, blocked: 0 };
174
+ }
175
+ usage[k].success += v.success;
176
+ usage[k].blocked += v.blocked;
177
+ }
178
+ }
179
+ return usage;
180
+ }
181
+ };
182
+
183
+ // src/cache.ts
184
+ var Cache = class {
185
+ cache;
186
+ constructor(cache) {
187
+ this.cache = cache;
188
+ }
189
+ isBlocked(identifier) {
190
+ if (!this.cache.has(identifier)) {
191
+ return { blocked: false, reset: 0 };
192
+ }
193
+ const reset = this.cache.get(identifier);
194
+ if (reset < Date.now()) {
195
+ this.cache.delete(identifier);
196
+ return { blocked: false, reset: 0 };
197
+ }
198
+ return { blocked: true, reset };
199
+ }
200
+ blockUntil(identifier, reset) {
201
+ this.cache.set(identifier, reset);
202
+ }
203
+ set(key, value) {
204
+ this.cache.set(key, value);
205
+ }
206
+ get(key) {
207
+ return this.cache.get(key) || null;
208
+ }
209
+ incr(key) {
210
+ let value = this.cache.get(key) ?? 0;
211
+ value += 1;
212
+ this.cache.set(key, value);
213
+ return value;
214
+ }
215
+ };
216
+
217
+ // src/ratelimit.ts
218
+ var Ratelimit = class {
219
+ limiter;
220
+ ctx;
221
+ prefix;
222
+ timeout;
223
+ analytics;
224
+ constructor(config) {
225
+ this.ctx = config.ctx;
226
+ this.limiter = config.limiter;
227
+ this.timeout = config.timeout ?? 5e3;
228
+ this.prefix = config.prefix ?? "@upstash/ratelimit";
229
+ this.analytics = config.analytics !== false ? new Analytics({
230
+ redis: Array.isArray(this.ctx.redis) ? this.ctx.redis[0] : this.ctx.redis,
231
+ prefix: this.prefix
232
+ }) : void 0;
233
+ if (config.ephemeralCache instanceof Map) {
234
+ this.ctx.cache = new Cache(config.ephemeralCache);
235
+ } else if (typeof config.ephemeralCache === "undefined") {
236
+ this.ctx.cache = new Cache(/* @__PURE__ */ new Map());
237
+ }
238
+ }
239
+ limit = async (identifier, req) => {
240
+ const key = [this.prefix, identifier].join(":");
241
+ let timeoutId = null;
242
+ try {
243
+ const arr = [this.limiter(this.ctx, key)];
244
+ if (this.timeout > 0) {
245
+ arr.push(
246
+ new Promise((resolve) => {
247
+ timeoutId = setTimeout(() => {
248
+ resolve({
249
+ success: true,
250
+ limit: 0,
251
+ remaining: 0,
252
+ reset: 0,
253
+ pending: Promise.resolve()
254
+ });
255
+ }, this.timeout);
256
+ })
257
+ );
258
+ }
259
+ const res = await Promise.race(arr);
260
+ if (this.analytics) {
261
+ const geo = req ? this.analytics.extractGeo(req) : void 0;
262
+ const analyticsP = this.analytics.record({
263
+ identifier,
264
+ time: Date.now(),
265
+ success: res.success,
266
+ ...geo
267
+ });
268
+ res.pending = Promise.all([res.pending, analyticsP]);
269
+ }
270
+ return res;
271
+ } finally {
272
+ if (timeoutId) {
273
+ clearTimeout(timeoutId);
274
+ }
275
+ }
276
+ };
277
+ blockUntilReady = async (identifier, timeout) => {
278
+ if (timeout <= 0) {
279
+ throw new Error("timeout must be positive");
280
+ }
281
+ let res;
282
+ const deadline = Date.now() + timeout;
283
+ while (true) {
284
+ res = await this.limit(identifier);
285
+ if (res.success) {
286
+ break;
287
+ }
288
+ if (res.reset === 0) {
289
+ throw new Error("This should not happen");
290
+ }
291
+ const wait = Math.min(res.reset, deadline) - Date.now();
292
+ await new Promise((r) => setTimeout(r, wait));
293
+ if (Date.now() > deadline) {
294
+ break;
295
+ }
296
+ }
297
+ return res;
298
+ };
299
+ };
300
+
301
+ // src/single.ts
302
+ var RegionRatelimit = class extends Ratelimit {
303
+ constructor(config) {
304
+ super({
305
+ prefix: config.prefix,
306
+ limiter: config.limiter,
307
+ timeout: config.timeout,
308
+ analytics: config.analytics,
309
+ ctx: {
310
+ redis: config.redis
311
+ },
312
+ ephemeralCache: config.ephemeralCache
313
+ });
314
+ }
315
+ static fixedWindow(tokens, window) {
316
+ const windowDuration = ms(window);
317
+ const script = `
318
+ local key = KEYS[1]
319
+ local window = ARGV[1]
320
+
321
+ local r = redis.call("INCR", key)
322
+ if r == 1 then
323
+ -- The first time this key is set, the value will be 1.
324
+ -- So we only need the expire command once
325
+ redis.call("PEXPIRE", key, window)
326
+ end
327
+
328
+ return r
329
+ `;
330
+ return async function(ctx, identifier) {
331
+ const bucket = Math.floor(Date.now() / windowDuration);
332
+ const key = [identifier, bucket].join(":");
333
+ if (ctx.cache) {
334
+ const { blocked, reset: reset2 } = ctx.cache.isBlocked(identifier);
335
+ if (blocked) {
336
+ return {
337
+ success: false,
338
+ limit: tokens,
339
+ remaining: 0,
340
+ reset: reset2,
341
+ pending: Promise.resolve()
342
+ };
343
+ }
344
+ }
345
+ const usedTokensAfterUpdate = await ctx.redis.eval(script, [key], [windowDuration]);
346
+ const success = usedTokensAfterUpdate <= tokens;
347
+ const reset = (bucket + 1) * windowDuration;
348
+ if (ctx.cache && !success) {
349
+ ctx.cache.blockUntil(identifier, reset);
350
+ }
351
+ return {
352
+ success,
353
+ limit: tokens,
354
+ remaining: tokens - usedTokensAfterUpdate,
355
+ reset,
356
+ pending: Promise.resolve()
357
+ };
358
+ };
359
+ }
360
+ static slidingWindow(tokens, window) {
361
+ const script = `
362
+ local currentKey = KEYS[1] -- identifier including prefixes
363
+ local previousKey = KEYS[2] -- key of the previous bucket
364
+ local tokens = tonumber(ARGV[1]) -- tokens per window
365
+ local now = ARGV[2] -- current timestamp in milliseconds
366
+ local window = ARGV[3] -- interval in milliseconds
367
+
368
+ local requestsInCurrentWindow = redis.call("GET", currentKey)
369
+ if requestsInCurrentWindow == false then
370
+ requestsInCurrentWindow = 0
371
+ end
372
+
373
+
374
+ local requestsInPreviousWindow = redis.call("GET", previousKey)
375
+ if requestsInPreviousWindow == false then
376
+ requestsInPreviousWindow = 0
377
+ end
378
+ local percentageInCurrent = ( now % window) / window
379
+ if requestsInPreviousWindow * ( 1 - percentageInCurrent ) + requestsInCurrentWindow >= tokens then
380
+ return 0
381
+ end
382
+
383
+ local newValue = redis.call("INCR", currentKey)
384
+ if newValue == 1 then
385
+ -- The first time this key is set, the value will be 1.
386
+ -- So we only need the expire command once
387
+ redis.call("PEXPIRE", currentKey, window * 2 + 1000) -- Enough time to overlap with a new window + 1 second
388
+ end
389
+ return tokens - newValue
390
+ `;
391
+ const windowSize = ms(window);
392
+ return async function(ctx, identifier) {
393
+ const now = Date.now();
394
+ const currentWindow = Math.floor(now / windowSize);
395
+ const currentKey = [identifier, currentWindow].join(":");
396
+ const previousWindow = currentWindow - windowSize;
397
+ const previousKey = [identifier, previousWindow].join(":");
398
+ if (ctx.cache) {
399
+ const { blocked, reset: reset2 } = ctx.cache.isBlocked(identifier);
400
+ if (blocked) {
401
+ return {
402
+ success: false,
403
+ limit: tokens,
404
+ remaining: 0,
405
+ reset: reset2,
406
+ pending: Promise.resolve()
407
+ };
408
+ }
409
+ }
410
+ const remaining = await ctx.redis.eval(script, [currentKey, previousKey], [tokens, now, windowSize]);
411
+ const success = remaining > 0;
412
+ const reset = (currentWindow + 1) * windowSize;
413
+ if (ctx.cache && !success) {
414
+ ctx.cache.blockUntil(identifier, reset);
415
+ }
416
+ return {
417
+ success,
418
+ limit: tokens,
419
+ remaining,
420
+ reset,
421
+ pending: Promise.resolve()
422
+ };
423
+ };
424
+ }
425
+ static tokenBucket(refillRate, interval, maxTokens) {
426
+ const script = `
427
+ local key = KEYS[1] -- identifier including prefixes
428
+ local maxTokens = tonumber(ARGV[1]) -- maximum number of tokens
429
+ local interval = tonumber(ARGV[2]) -- size of the window in milliseconds
430
+ local refillRate = tonumber(ARGV[3]) -- how many tokens are refilled after each interval
431
+ local now = tonumber(ARGV[4]) -- current timestamp in milliseconds
432
+ local remaining = 0
433
+
434
+ local bucket = redis.call("HMGET", key, "updatedAt", "tokens")
435
+
436
+ if bucket[1] == false then
437
+ -- The bucket does not exist yet, so we create it and add a ttl.
438
+ remaining = maxTokens - 1
439
+
440
+ redis.call("HMSET", key, "updatedAt", now, "tokens", remaining)
441
+ redis.call("PEXPIRE", key, interval)
442
+
443
+ return {remaining, now + interval}
444
+ end
445
+
446
+ -- The bucket does exist
447
+
448
+ local updatedAt = tonumber(bucket[1])
449
+ local tokens = tonumber(bucket[2])
450
+
451
+ if now >= updatedAt + interval then
452
+ remaining = math.min(maxTokens, tokens + refillRate) - 1
453
+
454
+ redis.call("HMSET", key, "updatedAt", now, "tokens", remaining)
455
+ return {remaining, now + interval}
456
+ end
457
+
458
+ if tokens > 0 then
459
+ remaining = tokens - 1
460
+ redis.call("HMSET", key, "updatedAt", now, "tokens", remaining)
461
+ end
462
+
463
+ return {remaining, updatedAt + interval}
464
+ `;
465
+ const intervalDuration = ms(interval);
466
+ return async function(ctx, identifier) {
467
+ if (ctx.cache) {
468
+ const { blocked, reset: reset2 } = ctx.cache.isBlocked(identifier);
469
+ if (blocked) {
470
+ return {
471
+ success: false,
472
+ limit: maxTokens,
473
+ remaining: 0,
474
+ reset: reset2,
475
+ pending: Promise.resolve()
476
+ };
477
+ }
478
+ }
479
+ const now = Date.now();
480
+ const key = [identifier, Math.floor(now / intervalDuration)].join(":");
481
+ const [remaining, reset] = await ctx.redis.eval(
482
+ script,
483
+ [key],
484
+ [maxTokens, intervalDuration, refillRate, now]
485
+ );
486
+ const success = remaining > 0;
487
+ if (ctx.cache && !success) {
488
+ ctx.cache.blockUntil(identifier, reset);
489
+ }
490
+ return {
491
+ success,
492
+ limit: maxTokens,
493
+ remaining,
494
+ reset,
495
+ pending: Promise.resolve()
496
+ };
497
+ };
498
+ }
499
+ static cachedFixedWindow(tokens, window) {
500
+ const windowDuration = ms(window);
501
+ const script = `
502
+ local key = KEYS[1]
503
+ local window = ARGV[1]
504
+
505
+ local r = redis.call("INCR", key)
506
+ if r == 1 then
507
+ -- The first time this key is set, the value will be 1.
508
+ -- So we only need the expire command once
509
+ redis.call("PEXPIRE", key, window)
510
+ end
511
+
512
+ return r
513
+ `;
514
+ return async function(ctx, identifier) {
515
+ if (!ctx.cache) {
516
+ throw new Error("This algorithm requires a cache");
517
+ }
518
+ const bucket = Math.floor(Date.now() / windowDuration);
519
+ const key = [identifier, bucket].join(":");
520
+ const reset = (bucket + 1) * windowDuration;
521
+ const hit = typeof ctx.cache.get(key) === "number";
522
+ if (hit) {
523
+ const cachedTokensAfterUpdate = ctx.cache.incr(key);
524
+ const success = cachedTokensAfterUpdate < tokens;
525
+ const pending = success ? ctx.redis.eval(script, [key], [windowDuration]).then((t) => {
526
+ ctx.cache.set(key, t);
527
+ }) : Promise.resolve();
528
+ return {
529
+ success,
530
+ limit: tokens,
531
+ remaining: tokens - cachedTokensAfterUpdate,
532
+ reset,
533
+ pending
534
+ };
535
+ }
536
+ const usedTokensAfterUpdate = await ctx.redis.eval(script, [key], [windowDuration]);
537
+ ctx.cache.set(key, usedTokensAfterUpdate);
538
+ const remaining = tokens - usedTokensAfterUpdate;
539
+ return {
540
+ success: remaining >= 0,
541
+ limit: tokens,
542
+ remaining,
543
+ reset,
544
+ pending: Promise.resolve()
545
+ };
546
+ };
547
+ }
548
+ };
549
+
550
+ // src/multi.ts
551
+ function randomId() {
552
+ let result = "";
553
+ const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
554
+ const charactersLength = characters.length;
555
+ for (let i = 0; i < 16; i++) {
556
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
557
+ }
558
+ return result;
559
+ }
560
+ var MultiRegionRatelimit = class extends Ratelimit {
561
+ constructor(config) {
562
+ super({
563
+ prefix: config.prefix,
564
+ limiter: config.limiter,
565
+ timeout: config.timeout,
566
+ analytics: config.analytics,
567
+ ctx: {
568
+ redis: config.redis,
569
+ cache: config.ephemeralCache ? new Cache(config.ephemeralCache) : void 0
570
+ }
571
+ });
572
+ }
573
+ static fixedWindow(tokens, window) {
574
+ const windowDuration = ms(window);
575
+ const script = `
576
+ local key = KEYS[1]
577
+ local id = ARGV[1]
578
+ local window = ARGV[2]
579
+
580
+ redis.call("SADD", key, id)
581
+ local members = redis.call("SMEMBERS", key)
582
+ if #members == 1 then
583
+ -- The first time this key is set, the value will be 1.
584
+ -- So we only need the expire command once
585
+ redis.call("PEXPIRE", key, window)
586
+ end
587
+
588
+ return members
589
+ `;
590
+ return async function(ctx, identifier) {
591
+ if (ctx.cache) {
592
+ const { blocked, reset: reset2 } = ctx.cache.isBlocked(identifier);
593
+ if (blocked) {
594
+ return {
595
+ success: false,
596
+ limit: tokens,
597
+ remaining: 0,
598
+ reset: reset2,
599
+ pending: Promise.resolve()
600
+ };
601
+ }
602
+ }
603
+ const requestID = randomId();
604
+ const bucket = Math.floor(Date.now() / windowDuration);
605
+ const key = [identifier, bucket].join(":");
606
+ const dbs = ctx.redis.map((redis) => ({
607
+ redis,
608
+ request: redis.eval(script, [key], [requestID, windowDuration])
609
+ }));
610
+ const firstResponse = await Promise.any(dbs.map((s) => s.request));
611
+ const usedTokens = firstResponse.length;
612
+ const remaining = tokens - usedTokens - 1;
613
+ async function sync() {
614
+ const individualIDs = await Promise.all(dbs.map((s) => s.request));
615
+ const allIDs = Array.from(new Set(individualIDs.flatMap((_) => _)).values());
616
+ for (const db of dbs) {
617
+ const ids = await db.request;
618
+ if (ids.length >= tokens) {
619
+ continue;
620
+ }
621
+ const diff = allIDs.filter((id) => !ids.includes(id));
622
+ if (diff.length === 0) {
623
+ continue;
624
+ }
625
+ await db.redis.sadd(key, ...allIDs);
626
+ }
627
+ }
628
+ const success = remaining > 0;
629
+ const reset = (bucket + 1) * windowDuration;
630
+ if (ctx.cache && !success) {
631
+ ctx.cache.blockUntil(identifier, reset);
632
+ }
633
+ return {
634
+ success,
635
+ limit: tokens,
636
+ remaining,
637
+ reset,
638
+ pending: sync()
639
+ };
640
+ };
641
+ }
642
+ static slidingWindow(tokens, window) {
643
+ const windowSize = ms(window);
644
+ const script = `
645
+ local currentKey = KEYS[1] -- identifier including prefixes
646
+ local previousKey = KEYS[2] -- key of the previous bucket
647
+ local tokens = tonumber(ARGV[1]) -- tokens per window
648
+ local now = ARGV[2] -- current timestamp in milliseconds
649
+ local window = ARGV[3] -- interval in milliseconds
650
+ local requestID = ARGV[4] -- uuid for this request
651
+
652
+
653
+ local currentMembers = redis.call("SMEMBERS", currentKey)
654
+ local requestsInCurrentWindow = #currentMembers
655
+ local previousMembers = redis.call("SMEMBERS", previousKey)
656
+ local requestsInPreviousWindow = #previousMembers
657
+
658
+ local percentageInCurrent = ( now % window) / window
659
+ if requestsInPreviousWindow * ( 1 - percentageInCurrent ) + requestsInCurrentWindow >= tokens then
660
+ return {currentMembers, previousMembers}
661
+ end
662
+
663
+ redis.call("SADD", currentKey, requestID)
664
+ table.insert(currentMembers, requestID)
665
+ if requestsInCurrentWindow == 0 then
666
+ -- The first time this key is set, the value will be 1.
667
+ -- So we only need the expire command once
668
+ redis.call("PEXPIRE", currentKey, window * 2 + 1000) -- Enough time to overlap with a new window + 1 second
669
+ end
670
+ return {currentMembers, previousMembers}
671
+ `;
672
+ const windowDuration = ms(window);
673
+ return async function(ctx, identifier) {
674
+ if (ctx.cache) {
675
+ const { blocked, reset: reset2 } = ctx.cache.isBlocked(identifier);
676
+ if (blocked) {
677
+ return {
678
+ success: false,
679
+ limit: tokens,
680
+ remaining: 0,
681
+ reset: reset2,
682
+ pending: Promise.resolve()
683
+ };
684
+ }
685
+ }
686
+ const requestID = randomId();
687
+ const now = Date.now();
688
+ const currentWindow = Math.floor(now / windowSize);
689
+ const currentKey = [identifier, currentWindow].join(":");
690
+ const previousWindow = currentWindow - windowSize;
691
+ const previousKey = [identifier, previousWindow].join(":");
692
+ const dbs = ctx.redis.map((redis) => ({
693
+ redis,
694
+ request: redis.eval(script, [currentKey, previousKey], [tokens, now, windowDuration, requestID])
695
+ }));
696
+ const percentageInCurrent = now % windowDuration / windowDuration;
697
+ const [current, previous] = await Promise.any(dbs.map((s) => s.request));
698
+ const usedTokens = previous.length * (1 - percentageInCurrent) + current.length;
699
+ const remaining = tokens - usedTokens;
700
+ async function sync() {
701
+ const [individualIDs] = await Promise.all(dbs.map((s) => s.request));
702
+ const allIDs = Array.from(new Set(individualIDs.flatMap((_) => _)).values());
703
+ for (const db of dbs) {
704
+ const [ids] = await db.request;
705
+ if (ids.length >= tokens) {
706
+ continue;
707
+ }
708
+ const diff = allIDs.filter((id) => !ids.includes(id));
709
+ if (diff.length === 0) {
710
+ continue;
711
+ }
712
+ await db.redis.sadd(currentKey, ...allIDs);
713
+ }
714
+ }
715
+ const success = remaining > 0;
716
+ const reset = (currentWindow + 1) * windowDuration;
717
+ if (ctx.cache && !success) {
718
+ ctx.cache.blockUntil(identifier, reset);
719
+ }
720
+ return {
721
+ success,
722
+ limit: tokens,
723
+ remaining,
724
+ reset,
725
+ pending: sync()
726
+ };
727
+ };
728
+ }
729
+ };
730
+ // Annotate the CommonJS export names for ESM import in node:
731
+ 0 && (module.exports = {
732
+ Analytics,
733
+ MultiRegionRatelimit,
734
+ Ratelimit
735
+ });
736
+ //# sourceMappingURL=index.js.map