UNPKG

@dash0/sdk-web

Version:

Dash0's Web SDK to collect telemetry from end-users' web browsers

35 lines (29 loc) 855 B
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 ); }; }