@dash0/sdk-web
Version:
Dash0's Web SDK to collect telemetry from end-users' web browsers
21 lines (20 loc) • 778 B
JavaScript
import { setInterval } from "./timers";
export function createRateLimiter(opts) {
const maxCalls = opts.maxCalls || 4096;
const maxCallsPerTenMinutes = opts.maxCallsPerTenMinutes || 128;
const maxCallsPerTenSeconds = opts.maxCallsPerTenSeconds || 32;
let totalCalls = 0;
let totalCallsInLastTenMinutes = 0;
let totalCallsInLastTenSeconds = 0;
setInterval(function () {
totalCallsInLastTenMinutes = 0;
}, 1000 * 60 * 10);
setInterval(function () {
totalCallsInLastTenSeconds = 0;
}, 1000 * 10);
return function isExcessiveUsage() {
return (++totalCalls > maxCalls ||
++totalCallsInLastTenMinutes > maxCallsPerTenMinutes ||
++totalCallsInLastTenSeconds > maxCallsPerTenSeconds);
};
}