UNPKG

@da440dil/js-counter

Version:

Distributed rate limiting using Redis

22 lines (21 loc) 869 B
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BatchLimiter = void 0; const fs_1 = require("fs"); const path_1 = require("path"); const js_redis_script_1 = require("@da440dil/js-redis-script"); const src = (0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, '../limit.lua')).toString(); class BatchLimiter { constructor(client, prefixes, args) { this.prefixes = []; this.args = []; this.script = (0, js_redis_script_1.createScript)(client, src, prefixes.length); this.prefixes = prefixes; this.args = args; } async limit(key) { const v = await this.script.run(...this.prefixes.map((v) => `${v}${key}`), ...this.args); return { ok: v[0] === 1, counter: v[1], remainder: v[3] - v[1], ttl: v[2] }; } } exports.BatchLimiter = BatchLimiter;