ratelimit-sdk
v0.5.2
Published
Generic Rate Limiter for JavaScript/TypeScript
Maintainers
Readme
ratelimit-sdk
Generic Rate Limiter for JavaScript/TypeScript.
Installation
pnpm add ratelimit-sdkUsage
BYOK(Bring Your Own Key-Value Store) Redis,Valkey,Upstash,memory,etc.
Using ioredis or iovalkey
import { Ratelimit } from "ratelimit-sdk";
import Redis from "ioredis";
const redisClient = new Redis("redis://localhost:6379");
const ratelimiter = new Ratelimit("api", {
kv: redisClient,
limiter: Ratelimit.fixedWindow(50, "10s"), // 50 requests per 10 seconds
});
// Use the rate limiter
const result = await ratelimiter.limit("user-123");Using node-redis
import { Ratelimit } from "ratelimit-sdk";
import { createClient } from "redis";
const redisClient = createClient({
url: "redis://localhost:6379",
});
await redisClient.connect();
const ratelimiter = new Ratelimit("api", {
kv: redisClient,
limiter: Ratelimit.fixedWindow(100, "1m"), // 100 requests per minute
});
// Use the rate limiter
const userId = "user-123";
const result = await ratelimiter.limit(userId);
console.log(result);Using Upstash Redis
import { Ratelimit } from "ratelimit-sdk";
import { Redis } from "@upstash/redis";
const ratelimiter = new Ratelimit("api-ratelimiter", {
kv: Redis.fromEnv(),
limiter: Ratelimit.fixedWindow(50, "10s"), // 50 requests per 10 seconds
});
const userId = "user-123";
const result = await ratelimiter.limit(userId);
console.log(result);Using Memory
import { Ratelimit } from "ratelimit-sdk";
import { createLocalKv } from "ratelimit-sdk/utils";
const localKV = createLocalKv();
const ratelimiter = new Ratelimit("api-ratelimiter", {
kv: localKV,
limiter: Ratelimit.fixedWindow(5, "1m"),
});
// Use the rate limiter
const userId = "user-123";
const result = await ratelimiter.limit(userId);
console.log(result);The local KV store is not persistent and keeps data in memory only. It is not suitable for serverless functions or any environment where your application might restart frequently. Use Redis or another persistent store for production environments.
Important Resources
License
MIT license
