@upstash/ratelimit 0.2.0 → 0.3.0-rc.0
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.
- package/README.md +14 -0
- package/esm/analytics.js +84 -0
- package/esm/deps/deno.land/x/base64@v0.2.1/base.js +100 -0
- package/esm/deps/deno.land/x/base64@v0.2.1/base64url.js +9 -0
- package/esm/deps/deno.land/x/sha1@v1.0.3/deps.js +1 -0
- package/esm/deps/deno.land/x/sha1@v1.0.3/mod.js +191 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/mod.js +66 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/append.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitcount.js +16 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitop.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitpos.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/command.js +57 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/dbsize.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decr.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decrby.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/del.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/echo.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/eval.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/evalsha.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/exists.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expire.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expireat.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushall.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushdb.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/get.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getbit.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getdel.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getrange.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getset.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hdel.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hexists.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hget.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hgetall.js +29 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrby.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrbyfloat.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hkeys.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hlen.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmget.js +35 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmset.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hrandfield.js +39 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hscan.js +16 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hset.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hsetnx.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hstrlen.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hvals.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incr.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrby.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrbyfloat.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/keys.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lindex.js +6 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/linsert.js +6 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/llen.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lmove.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpop.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpos.js +19 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpush.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpushx.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrange.js +6 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrem.js +6 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lset.js +6 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ltrim.js +6 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mget.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mod.js +119 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mset.js +12 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/msetnx.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/persist.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpire.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpireat.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ping.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/psetex.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pttl.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/publish.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/randomkey.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rename.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/renamenx.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpop.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpush.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpushx.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sadd.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scan.js +19 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scard.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_exists.js +12 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_flush.js +16 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_load.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiff.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiffstore.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/set.js +36 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setbit.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setex.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setnx.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setrange.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinter.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinterstore.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sismember.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smembers.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smismember.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smove.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/spop.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srandmember.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srem.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sscan.js +16 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/strlen.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunion.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunionstore.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/time.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/touch.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ttl.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/type.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/unlink.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zadd.js +26 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcard.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcount.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zdiffstore.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zincrby.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zinterstore.js +27 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zlexcount.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zmscore.js +10 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmax.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmin.js +13 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrange.js +26 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrank.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrem.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebylex.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyrank.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyscore.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrevrank.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscan.js +16 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscore.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zunionstore.js +27 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/error.js +9 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/http.js +165 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/pipeline.js +1199 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/redis.js +1200 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/script.js +77 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/types.js +1 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/pkg/util.js +31 -0
- package/esm/deps/deno.land/x/upstash_redis@v1.19.3/version.js +1 -0
- package/esm/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +50 -0
- package/esm/multi.js +1 -0
- package/esm/ratelimit.js +28 -2
- package/esm/single.js +1 -0
- package/package.json +1 -1
- package/script/analytics.js +88 -0
- package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
- package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/mod.js +93 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/append.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitcount.js +20 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitop.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitpos.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/command.js +61 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/dbsize.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decr.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decrby.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/del.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/echo.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/eval.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/evalsha.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/exists.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expire.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expireat.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushall.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushdb.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/get.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getbit.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getdel.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getrange.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getset.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hdel.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hexists.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hget.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hgetall.js +33 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrby.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrbyfloat.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hkeys.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hlen.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmget.js +39 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmset.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hrandfield.js +43 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hscan.js +20 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hset.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hsetnx.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hstrlen.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hvals.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incr.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrby.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrbyfloat.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/keys.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lindex.js +10 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/linsert.js +10 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/llen.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lmove.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpop.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpos.js +23 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpush.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpushx.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrange.js +10 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrem.js +10 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lset.js +10 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ltrim.js +10 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mget.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mod.js +135 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mset.js +16 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/msetnx.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/persist.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpire.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpireat.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ping.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/psetex.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pttl.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/publish.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/randomkey.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rename.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/renamenx.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpop.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpush.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpushx.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sadd.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scan.js +23 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scard.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_exists.js +16 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_flush.js +20 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_load.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiff.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiffstore.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/set.js +40 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setbit.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setex.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setnx.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setrange.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinter.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinterstore.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sismember.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smembers.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smismember.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smove.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/spop.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srandmember.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srem.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sscan.js +20 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/strlen.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunion.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunionstore.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/time.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/touch.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ttl.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/type.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/unlink.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zadd.js +30 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcard.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcount.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zdiffstore.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zincrby.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zinterstore.js +31 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zlexcount.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zmscore.js +14 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmax.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmin.js +17 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrange.js +30 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrank.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrem.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebylex.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyrank.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyscore.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrevrank.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscan.js +20 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscore.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zunionstore.js +31 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/error.js +13 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/http.js +169 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/pipeline.js +1203 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/redis.js +1204 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/script.js +81 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/types.js +2 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/pkg/util.js +35 -0
- package/script/deps/deno.land/x/upstash_redis@v1.19.3/version.js +4 -0
- package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
- package/script/multi.js +1 -0
- package/script/ratelimit.js +28 -2
- package/script/single.js +1 -0
- package/types/analytics.d.ts +36 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/mod.d.ts +41 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/append.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitcount.d.ts +8 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitop.d.ts +12 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/bitpos.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/command.d.ts +37 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/dbsize.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decr.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/decrby.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/del.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/echo.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/eval.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/evalsha.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/exists.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expire.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/expireat.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushall.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/flushdb.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/get.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getbit.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getdel.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getrange.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/getset.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hdel.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hexists.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hget.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hgetall.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrby.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hincrbyfloat.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hkeys.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hlen.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmget.d.ts +15 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hmset.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hrandfield.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hscan.d.ts +24 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hset.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hsetnx.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hstrlen.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/hvals.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incr.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrby.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/incrbyfloat.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/keys.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lindex.d.ts +4 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/linsert.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/llen.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lmove.d.ts +12 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpop.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpos.d.ts +15 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpush.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lpushx.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrange.d.ts +4 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lrem.d.ts +4 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/lset.d.ts +4 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ltrim.d.ts +4 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mget.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mod.d.ts +119 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/mset.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/msetnx.d.ts +9 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/persist.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpire.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pexpireat.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ping.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/psetex.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/pttl.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/publish.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/randomkey.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rename.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/renamenx.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpop.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpush.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/rpushx.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sadd.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scan.d.ts +18 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/scard.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_exists.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_flush.d.ts +14 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/script_load.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiff.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sdiffstore.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/set.d.ts +55 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setbit.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setex.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setnx.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/setrange.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinter.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sinterstore.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sismember.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smembers.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smismember.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/smove.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/spop.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srandmember.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/srem.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sscan.d.ts +24 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/strlen.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunion.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/sunionstore.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/time.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/touch.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/ttl.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/type.d.ts +8 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/unlink.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zadd.d.ts +35 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcard.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zcount.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zdiffstore.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zincrby.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zinterstore.d.ts +30 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zlexcount.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zmscore.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmax.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zpopmin.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrange.d.ts +42 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrank.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrem.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebylex.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyrank.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zremrangebyscore.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zrevrank.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscan.d.ts +24 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zscore.d.ts +7 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/commands/zunionstore.d.ts +30 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/error.d.ts +6 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/http.d.ts +87 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/pipeline.d.ts +577 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/redis.d.ts +575 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/script.d.ts +42 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/types.d.ts +18 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/pkg/util.d.ts +1 -0
- package/types/deps/deno.land/x/upstash_redis@v1.19.3/version.d.ts +1 -0
- package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
- package/types/multi.d.ts +8 -1
- package/types/ratelimit.d.ts +12 -1
- package/types/single.d.ts +8 -1
- package/types/types.d.ts +1 -4
package/README.md
CHANGED
|
@@ -150,6 +150,20 @@ export type RatelimitResponse = {
|
|
|
150
150
|
};
|
|
151
151
|
````
|
|
152
152
|
|
|
153
|
+
### Timeout
|
|
154
|
+
|
|
155
|
+
You can define an optional timeout in milliseconds, after which the request will
|
|
156
|
+
be allowed to pass regardless of what the current limit is. This can be useful
|
|
157
|
+
if you don't want network issues to cause your application to reject requests.
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
const ratelimit = new Ratelimit({
|
|
161
|
+
redis: Redis.fromEnv(),
|
|
162
|
+
limiter: Ratelimit.slidingWindow(10, "10 s"),
|
|
163
|
+
timeout: 1000, // 1 second
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
153
167
|
### Block until ready
|
|
154
168
|
|
|
155
169
|
In case you don't want to reject a request immediately but wait until it can be
|
package/esm/analytics.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export class Analytics {
|
|
2
|
+
constructor(config) {
|
|
3
|
+
Object.defineProperty(this, "redis", {
|
|
4
|
+
enumerable: true,
|
|
5
|
+
configurable: true,
|
|
6
|
+
writable: true,
|
|
7
|
+
value: void 0
|
|
8
|
+
});
|
|
9
|
+
Object.defineProperty(this, "prefix", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: void 0
|
|
14
|
+
});
|
|
15
|
+
this.redis = config.redis;
|
|
16
|
+
this.prefix = config.prefix ?? "@upstash/ratelimit";
|
|
17
|
+
}
|
|
18
|
+
extractGeo(req) {
|
|
19
|
+
if (typeof req.geo !== "undefined") {
|
|
20
|
+
return req.geo;
|
|
21
|
+
}
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
async record(event) {
|
|
25
|
+
// Bucket is a unix timestamp in milliseconds marking the beginning of a day
|
|
26
|
+
const bucket = (new Date().setUTCHours(0, 0, 0, 0)).toFixed(0);
|
|
27
|
+
const key = [this.prefix, "events", bucket].join(":");
|
|
28
|
+
await this.redis.hincrby(key, JSON.stringify({
|
|
29
|
+
...event,
|
|
30
|
+
time: undefined,
|
|
31
|
+
}), 1);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Aggregates the events by the given field and returns the number of successes and failures per value
|
|
35
|
+
*
|
|
36
|
+
* @param aggregateBy - The field to aggregate by
|
|
37
|
+
* @param cutoff - Timestamp in milliseconds to limit the aggregation to `cutoff` until now
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
async aggregate(aggregateBy, cutoff = 0) {
|
|
41
|
+
const keys = [];
|
|
42
|
+
let cursor = 0;
|
|
43
|
+
do {
|
|
44
|
+
const [nextCursor, found] = await this.redis.scan(cursor, { match: [this.prefix, "events", "*"].join(":"), count: 1000 });
|
|
45
|
+
cursor = nextCursor;
|
|
46
|
+
for (const key of found) {
|
|
47
|
+
const timestamp = parseInt(key.split(":").pop());
|
|
48
|
+
// Take all the keys that at least overlap with the given timestamp
|
|
49
|
+
if (timestamp >= cutoff) {
|
|
50
|
+
keys.push(key);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
} while (cursor !== 0);
|
|
54
|
+
const days = await Promise.all(keys.sort().map(async (key) => {
|
|
55
|
+
const fields = await this.redis.hgetall(key);
|
|
56
|
+
if (!fields) {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
const day = {};
|
|
60
|
+
for (const [field, count] of Object.entries(fields)) {
|
|
61
|
+
const r = JSON.parse(field);
|
|
62
|
+
for (const [k, v] of Object.entries(r)) {
|
|
63
|
+
if (k !== aggregateBy) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (!day[v]) {
|
|
67
|
+
day[v] = {
|
|
68
|
+
success: 0,
|
|
69
|
+
blocked: 0,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (r.success) {
|
|
73
|
+
day[v].success += count;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
day[v].blocked += count;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return day;
|
|
81
|
+
}));
|
|
82
|
+
return days;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
function getLengths(b64) {
|
|
2
|
+
const len = b64.length;
|
|
3
|
+
// if (len % 4 > 0) {
|
|
4
|
+
// throw new TypeError("Invalid string. Length must be a multiple of 4");
|
|
5
|
+
// }
|
|
6
|
+
// Trim off extra bytes after placeholder bytes are found
|
|
7
|
+
// See: https://github.com/beatgammit/base64-js/issues/42
|
|
8
|
+
let validLen = b64.indexOf("=");
|
|
9
|
+
if (validLen === -1) {
|
|
10
|
+
validLen = len;
|
|
11
|
+
}
|
|
12
|
+
const placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4);
|
|
13
|
+
return [validLen, placeHoldersLen];
|
|
14
|
+
}
|
|
15
|
+
export function init(lookup, revLookup, urlsafe = false) {
|
|
16
|
+
function _byteLength(validLen, placeHoldersLen) {
|
|
17
|
+
return Math.floor(((validLen + placeHoldersLen) * 3) / 4 - placeHoldersLen);
|
|
18
|
+
}
|
|
19
|
+
function tripletToBase64(num) {
|
|
20
|
+
return (lookup[(num >> 18) & 0x3f] +
|
|
21
|
+
lookup[(num >> 12) & 0x3f] +
|
|
22
|
+
lookup[(num >> 6) & 0x3f] +
|
|
23
|
+
lookup[num & 0x3f]);
|
|
24
|
+
}
|
|
25
|
+
function encodeChunk(buf, start, end) {
|
|
26
|
+
const out = new Array((end - start) / 3);
|
|
27
|
+
for (let i = start, curTriplet = 0; i < end; i += 3) {
|
|
28
|
+
out[curTriplet++] = tripletToBase64((buf[i] << 16) + (buf[i + 1] << 8) + buf[i + 2]);
|
|
29
|
+
}
|
|
30
|
+
return out.join("");
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
// base64 is 4/3 + up to two characters of the original data
|
|
34
|
+
byteLength(b64) {
|
|
35
|
+
return _byteLength.apply(null, getLengths(b64));
|
|
36
|
+
},
|
|
37
|
+
toUint8Array(b64) {
|
|
38
|
+
const [validLen, placeHoldersLen] = getLengths(b64);
|
|
39
|
+
const buf = new Uint8Array(_byteLength(validLen, placeHoldersLen));
|
|
40
|
+
// If there are placeholders, only get up to the last complete 4 chars
|
|
41
|
+
const len = placeHoldersLen ? validLen - 4 : validLen;
|
|
42
|
+
let tmp;
|
|
43
|
+
let curByte = 0;
|
|
44
|
+
let i;
|
|
45
|
+
for (i = 0; i < len; i += 4) {
|
|
46
|
+
tmp = (revLookup[b64.charCodeAt(i)] << 18) |
|
|
47
|
+
(revLookup[b64.charCodeAt(i + 1)] << 12) |
|
|
48
|
+
(revLookup[b64.charCodeAt(i + 2)] << 6) |
|
|
49
|
+
revLookup[b64.charCodeAt(i + 3)];
|
|
50
|
+
buf[curByte++] = (tmp >> 16) & 0xff;
|
|
51
|
+
buf[curByte++] = (tmp >> 8) & 0xff;
|
|
52
|
+
buf[curByte++] = tmp & 0xff;
|
|
53
|
+
}
|
|
54
|
+
if (placeHoldersLen === 2) {
|
|
55
|
+
tmp = (revLookup[b64.charCodeAt(i)] << 2) |
|
|
56
|
+
(revLookup[b64.charCodeAt(i + 1)] >> 4);
|
|
57
|
+
buf[curByte++] = tmp & 0xff;
|
|
58
|
+
}
|
|
59
|
+
else if (placeHoldersLen === 1) {
|
|
60
|
+
tmp = (revLookup[b64.charCodeAt(i)] << 10) |
|
|
61
|
+
(revLookup[b64.charCodeAt(i + 1)] << 4) |
|
|
62
|
+
(revLookup[b64.charCodeAt(i + 2)] >> 2);
|
|
63
|
+
buf[curByte++] = (tmp >> 8) & 0xff;
|
|
64
|
+
buf[curByte++] = tmp & 0xff;
|
|
65
|
+
}
|
|
66
|
+
return buf;
|
|
67
|
+
},
|
|
68
|
+
fromUint8Array(buf) {
|
|
69
|
+
const maxChunkLength = 16383; // Must be multiple of 3
|
|
70
|
+
const len = buf.length;
|
|
71
|
+
const extraBytes = len % 3; // If we have 1 byte left, pad 2 bytes
|
|
72
|
+
const len2 = len - extraBytes;
|
|
73
|
+
const parts = new Array(Math.ceil(len2 / maxChunkLength) + (extraBytes ? 1 : 0));
|
|
74
|
+
let curChunk = 0;
|
|
75
|
+
let chunkEnd;
|
|
76
|
+
// Go through the array every three bytes, we'll deal with trailing stuff later
|
|
77
|
+
for (let i = 0; i < len2; i += maxChunkLength) {
|
|
78
|
+
chunkEnd = i + maxChunkLength;
|
|
79
|
+
parts[curChunk++] = encodeChunk(buf, i, chunkEnd > len2 ? len2 : chunkEnd);
|
|
80
|
+
}
|
|
81
|
+
let tmp;
|
|
82
|
+
// Pad the end with zeros, but make sure to not forget the extra bytes
|
|
83
|
+
if (extraBytes === 1) {
|
|
84
|
+
tmp = buf[len2];
|
|
85
|
+
parts[curChunk] = lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3f];
|
|
86
|
+
if (!urlsafe)
|
|
87
|
+
parts[curChunk] += "==";
|
|
88
|
+
}
|
|
89
|
+
else if (extraBytes === 2) {
|
|
90
|
+
tmp = (buf[len2] << 8) | (buf[len2 + 1] & 0xff);
|
|
91
|
+
parts[curChunk] = lookup[tmp >> 10] +
|
|
92
|
+
lookup[(tmp >> 4) & 0x3f] +
|
|
93
|
+
lookup[(tmp << 2) & 0x3f];
|
|
94
|
+
if (!urlsafe)
|
|
95
|
+
parts[curChunk] += "=";
|
|
96
|
+
}
|
|
97
|
+
return parts.join("");
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { init } from "./base.js";
|
|
2
|
+
const lookup = [];
|
|
3
|
+
const revLookup = [];
|
|
4
|
+
const code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
5
|
+
for (let i = 0, l = code.length; i < l; ++i) {
|
|
6
|
+
lookup[i] = code[i];
|
|
7
|
+
revLookup[code.charCodeAt(i)] = i;
|
|
8
|
+
}
|
|
9
|
+
export const { byteLength, toUint8Array, fromUint8Array } = init(lookup, revLookup, true);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { encode, decode } from "../../../denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js";
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { encode, decode } from "./deps.js";
|
|
2
|
+
function rotl(x, n) {
|
|
3
|
+
return (x << n) | (x >>> (32 - n));
|
|
4
|
+
}
|
|
5
|
+
/** Byte length of a SHA1 digest. */
|
|
6
|
+
export const BYTES = 20;
|
|
7
|
+
/** A class representation of the SHA1 algorithm. */
|
|
8
|
+
export class SHA1 {
|
|
9
|
+
/** Creates a SHA1 instance. */
|
|
10
|
+
constructor() {
|
|
11
|
+
Object.defineProperty(this, "hashSize", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true,
|
|
15
|
+
value: BYTES
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, "_buf", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: new Uint8Array(64)
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "_bufIdx", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: void 0
|
|
28
|
+
});
|
|
29
|
+
Object.defineProperty(this, "_count", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: true,
|
|
32
|
+
writable: true,
|
|
33
|
+
value: void 0
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(this, "_K", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value: new Uint32Array([0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6])
|
|
40
|
+
});
|
|
41
|
+
Object.defineProperty(this, "_H", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true,
|
|
45
|
+
value: void 0
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(this, "_finalized", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: void 0
|
|
52
|
+
});
|
|
53
|
+
this.init();
|
|
54
|
+
}
|
|
55
|
+
/** Reduces the four input numbers to a single one. */
|
|
56
|
+
static F(t, b, c, d) {
|
|
57
|
+
if (t <= 19) {
|
|
58
|
+
return (b & c) | (~b & d);
|
|
59
|
+
}
|
|
60
|
+
else if (t <= 39) {
|
|
61
|
+
return b ^ c ^ d;
|
|
62
|
+
}
|
|
63
|
+
else if (t <= 59) {
|
|
64
|
+
return (b & c) | (b & d) | (c & d);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return b ^ c ^ d;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** Initializes a hash instance. */
|
|
71
|
+
init() {
|
|
72
|
+
// prettier-ignore
|
|
73
|
+
this._H = new Uint32Array([
|
|
74
|
+
0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0
|
|
75
|
+
]);
|
|
76
|
+
this._bufIdx = 0;
|
|
77
|
+
this._count = new Uint32Array(2);
|
|
78
|
+
this._buf.fill(0);
|
|
79
|
+
this._finalized = false;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/** Updates a hash with additional message data. */
|
|
83
|
+
update(msg, inputEncoding) {
|
|
84
|
+
if (msg === null) {
|
|
85
|
+
throw new TypeError("msg must be a string or Uint8Array.");
|
|
86
|
+
}
|
|
87
|
+
else if (typeof msg === "string") {
|
|
88
|
+
msg = encode(msg, inputEncoding);
|
|
89
|
+
}
|
|
90
|
+
// process the msg as many times as possible, the rest is stored in the buffer
|
|
91
|
+
// message is processed in 512 bit (64 byte chunks)
|
|
92
|
+
for (let i = 0; i < msg.length; i++) {
|
|
93
|
+
this._buf[this._bufIdx++] = msg[i];
|
|
94
|
+
if (this._bufIdx === 64) {
|
|
95
|
+
this.transform();
|
|
96
|
+
this._bufIdx = 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// counter update (number of message bits)
|
|
100
|
+
const c = this._count;
|
|
101
|
+
if ((c[0] += msg.length << 3) < msg.length << 3) {
|
|
102
|
+
c[1]++;
|
|
103
|
+
}
|
|
104
|
+
c[1] += msg.length >>> 29;
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
/** Finalizes a hash with additional message data. */
|
|
108
|
+
digest(outputEncoding) {
|
|
109
|
+
if (this._finalized) {
|
|
110
|
+
throw new Error("digest has already been called.");
|
|
111
|
+
}
|
|
112
|
+
this._finalized = true;
|
|
113
|
+
// append '1'
|
|
114
|
+
const b = this._buf;
|
|
115
|
+
let idx = this._bufIdx;
|
|
116
|
+
b[idx++] = 0x80;
|
|
117
|
+
// zeropad up to byte pos 56
|
|
118
|
+
while (idx !== 56) {
|
|
119
|
+
if (idx === 64) {
|
|
120
|
+
this.transform();
|
|
121
|
+
idx = 0;
|
|
122
|
+
}
|
|
123
|
+
b[idx++] = 0;
|
|
124
|
+
}
|
|
125
|
+
// append length in bits
|
|
126
|
+
const c = this._count;
|
|
127
|
+
b[56] = (c[1] >>> 24) & 0xff;
|
|
128
|
+
b[57] = (c[1] >>> 16) & 0xff;
|
|
129
|
+
b[58] = (c[1] >>> 8) & 0xff;
|
|
130
|
+
b[59] = (c[1] >>> 0) & 0xff;
|
|
131
|
+
b[60] = (c[0] >>> 24) & 0xff;
|
|
132
|
+
b[61] = (c[0] >>> 16) & 0xff;
|
|
133
|
+
b[62] = (c[0] >>> 8) & 0xff;
|
|
134
|
+
b[63] = (c[0] >>> 0) & 0xff;
|
|
135
|
+
this.transform();
|
|
136
|
+
// return the hash as byte array (20 bytes)
|
|
137
|
+
const hash = new Uint8Array(BYTES);
|
|
138
|
+
for (let i = 0; i < 5; i++) {
|
|
139
|
+
hash[(i << 2) + 0] = (this._H[i] >>> 24) & 0xff;
|
|
140
|
+
hash[(i << 2) + 1] = (this._H[i] >>> 16) & 0xff;
|
|
141
|
+
hash[(i << 2) + 2] = (this._H[i] >>> 8) & 0xff;
|
|
142
|
+
hash[(i << 2) + 3] = (this._H[i] >>> 0) & 0xff;
|
|
143
|
+
}
|
|
144
|
+
// clear internal states and prepare for new hash
|
|
145
|
+
this.init();
|
|
146
|
+
return outputEncoding ? decode(hash, outputEncoding) : hash;
|
|
147
|
+
}
|
|
148
|
+
/** Performs one transformation cycle. */
|
|
149
|
+
transform() {
|
|
150
|
+
const h = this._H;
|
|
151
|
+
let a = h[0];
|
|
152
|
+
let b = h[1];
|
|
153
|
+
let c = h[2];
|
|
154
|
+
let d = h[3];
|
|
155
|
+
let e = h[4];
|
|
156
|
+
// convert byte buffer to words
|
|
157
|
+
const w = new Uint32Array(80);
|
|
158
|
+
for (let i = 0; i < 16; i++) {
|
|
159
|
+
w[i] =
|
|
160
|
+
this._buf[(i << 2) + 3] |
|
|
161
|
+
(this._buf[(i << 2) + 2] << 8) |
|
|
162
|
+
(this._buf[(i << 2) + 1] << 16) |
|
|
163
|
+
(this._buf[i << 2] << 24);
|
|
164
|
+
}
|
|
165
|
+
for (let t = 0; t < 80; t++) {
|
|
166
|
+
if (t >= 16) {
|
|
167
|
+
w[t] = rotl(w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16], 1);
|
|
168
|
+
}
|
|
169
|
+
const tmp = (rotl(a, 5) +
|
|
170
|
+
SHA1.F(t, b, c, d) +
|
|
171
|
+
e +
|
|
172
|
+
w[t] +
|
|
173
|
+
this._K[Math.floor(t / 20)]) |
|
|
174
|
+
0;
|
|
175
|
+
e = d;
|
|
176
|
+
d = c;
|
|
177
|
+
c = rotl(b, 30);
|
|
178
|
+
b = a;
|
|
179
|
+
a = tmp;
|
|
180
|
+
}
|
|
181
|
+
h[0] = (h[0] + a) | 0;
|
|
182
|
+
h[1] = (h[1] + b) | 0;
|
|
183
|
+
h[2] = (h[2] + c) | 0;
|
|
184
|
+
h[3] = (h[3] + d) | 0;
|
|
185
|
+
h[4] = (h[4] + e) | 0;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/** Generates a SHA1 hash of the input data. */
|
|
189
|
+
export function sha1(msg, inputEncoding, outputEncoding) {
|
|
190
|
+
return new SHA1().update(msg, inputEncoding).digest(outputEncoding);
|
|
191
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { HttpClient, } from "./pkg/http.js";
|
|
2
|
+
import * as core from "./pkg/redis.js";
|
|
3
|
+
import { VERSION } from "./version.js";
|
|
4
|
+
/**
|
|
5
|
+
* Serverless redis client for upstash.
|
|
6
|
+
*/
|
|
7
|
+
export class Redis extends core.Redis {
|
|
8
|
+
/**
|
|
9
|
+
* Create a new redis client
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const redis = new Redis({
|
|
14
|
+
* url: "<UPSTASH_REDIS_REST_URL>",
|
|
15
|
+
* token: "<UPSTASH_REDIS_REST_TOKEN>",
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
constructor(config) {
|
|
20
|
+
if (config.url.startsWith(" ") ||
|
|
21
|
+
config.url.endsWith(" ") ||
|
|
22
|
+
/\r|\n/.test(config.url)) {
|
|
23
|
+
console.warn("The redis url contains whitespace or newline, which can cause errors!");
|
|
24
|
+
}
|
|
25
|
+
if (config.token.startsWith(" ") ||
|
|
26
|
+
config.token.endsWith(" ") ||
|
|
27
|
+
/\r|\n/.test(config.token)) {
|
|
28
|
+
console.warn("The redis token contains whitespace or newline, which can cause errors!");
|
|
29
|
+
}
|
|
30
|
+
const telemetry = {};
|
|
31
|
+
if (!Deno.env.get("UPSTASH_DISABLE_TELEMETRY")) {
|
|
32
|
+
// Deno Deploy does not include the version data, so we need to treat it as optional
|
|
33
|
+
telemetry.runtime = `deno@${Deno.version?.deno}`;
|
|
34
|
+
telemetry.sdk = `@upstash/redis@${VERSION}`;
|
|
35
|
+
}
|
|
36
|
+
const client = new HttpClient({
|
|
37
|
+
retry: config.retry,
|
|
38
|
+
baseUrl: config.url,
|
|
39
|
+
headers: { authorization: `Bearer ${config.token}` },
|
|
40
|
+
responseEncoding: config.responseEncoding,
|
|
41
|
+
telemetry,
|
|
42
|
+
});
|
|
43
|
+
super(client, {
|
|
44
|
+
automaticDeserialization: config.automaticDeserialization,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/*
|
|
48
|
+
* Create a new Upstash Redis instance from environment variables on Deno.
|
|
49
|
+
|
|
50
|
+
*
|
|
51
|
+
*/
|
|
52
|
+
static fromEnv(opts) {
|
|
53
|
+
/**
|
|
54
|
+
* These should be injected by Deno.
|
|
55
|
+
*/
|
|
56
|
+
const url = Deno.env.get("UPSTASH_REDIS_REST_URL");
|
|
57
|
+
if (!url) {
|
|
58
|
+
throw new Error("Unable to find environment variable: `UPSTASH_REDIS_REST_URL`.");
|
|
59
|
+
}
|
|
60
|
+
const token = Deno.env.get("UPSTASH_REDIS_REST_TOKEN");
|
|
61
|
+
if (!token) {
|
|
62
|
+
throw new Error("Unable to find environment variable: `UPSTASH_REDIS_REST_TOKEN`.");
|
|
63
|
+
}
|
|
64
|
+
return new Redis({ ...opts, url, token });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/bitcount
|
|
4
|
+
*/
|
|
5
|
+
export class BitCountCommand extends Command {
|
|
6
|
+
constructor([key, start, end], opts) {
|
|
7
|
+
const command = ["bitcount", key];
|
|
8
|
+
if (typeof start === "number") {
|
|
9
|
+
command.push(start);
|
|
10
|
+
}
|
|
11
|
+
if (typeof end === "number") {
|
|
12
|
+
command.push(end);
|
|
13
|
+
}
|
|
14
|
+
super(command, opts);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { UpstashError } from "../error.js";
|
|
2
|
+
import { parseResponse } from "../util.js";
|
|
3
|
+
const defaultSerializer = (c) => typeof c === "string" ? c : JSON.stringify(c);
|
|
4
|
+
/**
|
|
5
|
+
* Command offers default (de)serialization and the exec method to all commands.
|
|
6
|
+
*
|
|
7
|
+
* TData represents what the user will enter or receive,
|
|
8
|
+
* TResult is the raw data returned from upstash, which may need to be transformed or parsed.
|
|
9
|
+
*/
|
|
10
|
+
export class Command {
|
|
11
|
+
/**
|
|
12
|
+
* Create a new command instance.
|
|
13
|
+
*
|
|
14
|
+
* You can define a custom `deserialize` function. By default we try to deserialize as json.
|
|
15
|
+
*/
|
|
16
|
+
constructor(command, opts) {
|
|
17
|
+
Object.defineProperty(this, "command", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: void 0
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "serialize", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: void 0
|
|
28
|
+
});
|
|
29
|
+
Object.defineProperty(this, "deserialize", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: true,
|
|
32
|
+
writable: true,
|
|
33
|
+
value: void 0
|
|
34
|
+
});
|
|
35
|
+
this.serialize = defaultSerializer;
|
|
36
|
+
this.deserialize = typeof opts?.automaticDeserialization === "undefined" ||
|
|
37
|
+
opts.automaticDeserialization
|
|
38
|
+
? opts?.deserialize ?? parseResponse
|
|
39
|
+
: (x) => x;
|
|
40
|
+
this.command = command.map(this.serialize);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Execute the command using a client.
|
|
44
|
+
*/
|
|
45
|
+
async exec(client) {
|
|
46
|
+
const { result, error } = await client.request({
|
|
47
|
+
body: this.command,
|
|
48
|
+
});
|
|
49
|
+
if (error) {
|
|
50
|
+
throw new UpstashError(error);
|
|
51
|
+
}
|
|
52
|
+
if (typeof result === "undefined") {
|
|
53
|
+
throw new Error(`Request did not return a result`);
|
|
54
|
+
}
|
|
55
|
+
return this.deserialize(result);
|
|
56
|
+
}
|
|
57
|
+
}
|