@dash0/sdk-web
Version:
Dash0's Web SDK to collect telemetry from end-users' web browsers
35 lines (29 loc) • 855 B
text/typescript
import { setInterval } from "./timers";
export function createRateLimiter(opts: {
maxCalls?: number;
maxCallsPerTenMinutes: number;
maxCallsPerTenSeconds: number;
}) {
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
);
};
}