{"version":3,"file":"rate-limiter.mjs","sources":["../../../src/services/metrics/rate-limiter.ts"],"sourcesContent":["import type { Sender } from './sender';\n\ninterface Options {\n  limitedEvents?: string[];\n}\n\ntype TailParams<T extends (...args: any[]) => any> =\n  Parameters<T> extends [unknown, ...infer U] ? U : never;\n\nfunction nextResetDate(): number {\n  return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nexport default (sender: Sender, { limitedEvents = [] }: Options = {}) => {\n  let cacheExpiresAt = nextResetDate();\n  const eventCache = new Map();\n\n  return async (event: string, ...args: TailParams<Sender>) => {\n    if (!limitedEvents.includes(event)) {\n      return sender(event, ...args);\n    }\n\n    if (Date.now() > cacheExpiresAt) {\n      eventCache.clear();\n      cacheExpiresAt = nextResetDate();\n    }\n\n    if (eventCache.has(event)) {\n      return false;\n    }\n\n    eventCache.set(event, true);\n    return sender(event, ...args);\n  };\n};\n"],"names":["nextResetDate","Date","now","sender","limitedEvents","cacheExpiresAt","eventCache","Map","event","args","includes","clear","has","set"],"mappings":"AASA,SAASA,aAAAA,GAAAA;AACP,IAAA,OAAOC,KAAKC,GAAG,EAAA,GAAK,KAAK,EAAA,GAAK,EAAA,GAAK;AACrC;AAEA,wBAAe,CAAA,CAACC,MAAAA,EAAgB,EAAEC,gBAAgB,EAAE,EAAW,GAAG,EAAE,GAAA;AAClE,IAAA,IAAIC,cAAAA,GAAiBL,aAAAA,EAAAA;AACrB,IAAA,MAAMM,aAAa,IAAIC,GAAAA,EAAAA;IAEvB,OAAO,OAAOC,OAAe,GAAGC,IAAAA,GAAAA;AAC9B,QAAA,IAAI,CAACL,aAAAA,CAAcM,QAAQ,CAACF,KAAAA,CAAAA,EAAQ;AAClC,YAAA,OAAOL,OAAOK,KAAAA,EAAAA,GAAUC,IAAAA,CAAAA;AAC1B,QAAA;QAEA,IAAIR,IAAAA,CAAKC,GAAG,EAAA,GAAKG,cAAAA,EAAgB;AAC/BC,YAAAA,UAAAA,CAAWK,KAAK,EAAA;YAChBN,cAAAA,GAAiBL,aAAAA,EAAAA;AACnB,QAAA;QAEA,IAAIM,UAAAA,CAAWM,GAAG,CAACJ,KAAAA,CAAAA,EAAQ;YACzB,OAAO,KAAA;AACT,QAAA;QAEAF,UAAAA,CAAWO,GAAG,CAACL,KAAAA,EAAO,IAAA,CAAA;AACtB,QAAA,OAAOL,OAAOK,KAAAA,EAAAA,GAAUC,IAAAA,CAAAA;AAC1B,IAAA,CAAA;AACF,CAAA;;;;"}