@da440dil/js-counter
Version:
Distributed rate limiting using Redis
22 lines (21 loc) • 869 B
JavaScript
;
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;