Skip to content

ikuzweelisa/ratelimit-sdk

Repository files navigation

ratelimit-sdk

Generic Rate Limiter for JavaScript/TypeScript.

npm (scoped)

Installation

pnpm add ratelimit-sdk

Usage

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

About

Generic Ratelimiter for Typescript/Javascript

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •