@dasasian/firebase-structured-logger 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,28 +2,66 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.configureRateLimiter = configureRateLimiter;
4
4
  exports.signatureFor = signatureFor;
5
+ exports.describeSignature = describeSignature;
5
6
  exports.allow = allow;
7
+ exports.flushDueSummaries = flushDueSummaries;
8
+ exports.peekPendingSummaries = peekPendingSummaries;
9
+ exports.acknowledgeSummary = acknowledgeSummary;
6
10
  exports.resetRateLimiter = resetRateLimiter;
11
+ const severity_1 = require("../shared/severity");
7
12
  const DEFAULT_SESSION_LIMIT = 50;
13
+ const DEFAULT_REFILL_PER_MINUTE = 1;
14
+ const DEFAULT_ERROR_RESERVE = 0.2;
8
15
  const DEFAULT_DUPLICATE_LIMIT = 3;
9
16
  const DEFAULT_STORAGE_KEY = 'fsl_ratelimit';
17
+ const DEFAULT_SUMMARY_INTERVAL_MINUTES = 60;
18
+ const DEFAULT_SUMMARY_MAX_AGE_DAYS = 7;
19
+ const DEFAULT_MAX_PENDING_SUMMARIES = 50;
20
+ // Fixed, not configurable — the seven knobs in RateLimitConfig are the whole
21
+ // documented surface (README, "Volume controls"). A second storage key for the
22
+ // summary queue would be an eighth nobody asked for.
23
+ const SUMMARY_STORAGE_KEY = 'fsl_pending_summaries';
24
+ /**
25
+ * The flood this feature exists to survive is exactly "many distinct
26
+ * messages" — a URL, an id, anything with a variable in the string — so
27
+ * `state.signatures` cannot be left to grow one entry per message forever:
28
+ * that eventually fills sessionStorage (a quota error, then the state is
29
+ * silently lost) and makes every `allow()` parse an ever-larger map. Not a
30
+ * config knob: nobody tunes this per app, it is a safety valve.
31
+ */
32
+ const MAX_SIGNATURES = 200;
10
33
  // Session-scoped by design: one browser session, one budget. Deliberately not
11
34
  // per-Logger — see the module-scoped state rule in CLAUDE.md.
12
35
  let config = {
13
36
  sessionLimit: DEFAULT_SESSION_LIMIT,
37
+ refillPerMinute: DEFAULT_REFILL_PER_MINUTE,
38
+ errorReserve: DEFAULT_ERROR_RESERVE,
14
39
  duplicateLimit: DEFAULT_DUPLICATE_LIMIT,
15
40
  storageKey: DEFAULT_STORAGE_KEY,
41
+ summaryIntervalMinutes: DEFAULT_SUMMARY_INTERVAL_MINUTES,
42
+ summaryMaxAgeDays: DEFAULT_SUMMARY_MAX_AGE_DAYS,
43
+ maxPendingSummaries: DEFAULT_MAX_PENDING_SUMMARIES,
16
44
  };
17
45
  function configureRateLimiter(options) {
18
46
  config = { ...config, ...options };
19
47
  }
48
+ // This tab's identity for `sentLate`. Regenerated by `resetRateLimiter`, which
49
+ // is how tests simulate a new visit — a real reload gets a new one for free,
50
+ // since the module (and this `let`) is re-evaluated from scratch.
51
+ let bootId = generateId();
52
+ function generateId() {
53
+ return `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`;
54
+ }
55
+ function defaultState() {
56
+ return { available: config.sessionLimit, lastRefillAt: Date.now(), signatures: {} };
57
+ }
20
58
  function readState() {
21
59
  try {
22
60
  const stored = sessionStorage.getItem(config.storageKey);
23
- return stored ? JSON.parse(stored) : { logCount: 0, errorSignatures: {} };
61
+ return stored ? JSON.parse(stored) : defaultState();
24
62
  }
25
63
  catch {
26
- return { logCount: 0, errorSignatures: {} };
64
+ return defaultState();
27
65
  }
28
66
  }
29
67
  function writeState(state) {
@@ -34,6 +72,38 @@ function writeState(state) {
34
72
  // sessionStorage full or unavailable — rate limiting degrades, logging continues
35
73
  }
36
74
  }
75
+ function readSummaryQueue() {
76
+ try {
77
+ const stored = localStorage.getItem(SUMMARY_STORAGE_KEY);
78
+ return stored ? JSON.parse(stored) : [];
79
+ }
80
+ catch {
81
+ return [];
82
+ }
83
+ }
84
+ function writeSummaryQueue(queue) {
85
+ try {
86
+ localStorage.setItem(SUMMARY_STORAGE_KEY, JSON.stringify(queue));
87
+ }
88
+ catch {
89
+ // localStorage full or unavailable — summaries degrade, logging continues
90
+ }
91
+ }
92
+ function isExpired(summary, now) {
93
+ return now - summary.createdAt >= config.summaryMaxAgeDays * 24 * 60 * 60 * 1000;
94
+ }
95
+ /**
96
+ * Refill the budget for the time elapsed since it was last touched, capped at
97
+ * `sessionLimit`. Mutates `state` in place; the caller decides whether the
98
+ * result is worth persisting.
99
+ */
100
+ function refill(state, now) {
101
+ const elapsedMinutes = (now - state.lastRefillAt) / 60_000;
102
+ if (elapsedMinutes <= 0)
103
+ return;
104
+ state.available = Math.min(config.sessionLimit, state.available + elapsedMinutes * config.refillPerMinute);
105
+ state.lastRefillAt = now;
106
+ }
37
107
  /**
38
108
  * Build the key used to recognise a repeat of the same problem. Two occurrences
39
109
  * count as duplicates only if the message and the screen both match, so the same
@@ -45,8 +115,51 @@ function writeState(state) {
45
115
  * without the staleness of a span someone has to remember to clear.
46
116
  */
47
117
  function signatureFor(error, screen) {
48
- const str = error instanceof Error ? `${error.name}:${error.message}` : String(error);
49
- return `${str}|${screen ?? ''}`;
118
+ // A JSON list, not a joined string: a summary rebuilds the name, message and
119
+ // screen from this key (parseSignatureKey), and a message containing `:` or
120
+ // `|` — "upload failed: timeout" — must not split into the wrong fields.
121
+ const errorType = error instanceof Error ? error.name : null;
122
+ const message = error instanceof Error ? error.message : String(error);
123
+ return JSON.stringify([errorType, message, screen ?? '']);
124
+ }
125
+ /** A signature as a person reads it, for the console: `TypeError: cannot read 'id' | checkout`. */
126
+ function describeSignature(signature) {
127
+ const { errorType, message, screen } = parseSignature(signature);
128
+ return `${errorType ? `${errorType}: ` : ''}${message}${screen ? ` | ${screen}` : ''}`;
129
+ }
130
+ function parseSignature(signature) {
131
+ try {
132
+ const [errorType, message, screen] = JSON.parse(signature);
133
+ return { errorType: errorType ?? undefined, message, screen: screen || undefined };
134
+ }
135
+ catch {
136
+ // Not one of ours — keep it whole rather than guess at its parts.
137
+ return { message: signature };
138
+ }
139
+ }
140
+ /**
141
+ * A signature is further scoped to the release and the user before it is
142
+ * counted — two releases, or two people on one machine, must never share one
143
+ * running count. See README, "Repeats are counted, not dropped".
144
+ */
145
+ function compoundKey(signature, labels) {
146
+ return JSON.stringify([signature, labels?.releaseId ?? '', labels?.userId ?? '']);
147
+ }
148
+ /**
149
+ * The inverse of `compoundKey` + `signatureFor`: recover the name, message,
150
+ * screen, releaseId and userId a summary needs from the key that already
151
+ * holds them, rather than storing a second copy per signature — see
152
+ * `SignatureState`'s doc for why that copy has to go. Both are JSON lists, so
153
+ * the fields come back exactly, whatever characters a message contains.
154
+ */
155
+ function parseSignatureKey(key) {
156
+ try {
157
+ const [signature, releaseId, userId] = JSON.parse(key);
158
+ return { ...parseSignature(signature), releaseId: releaseId || undefined, userId: userId || undefined };
159
+ }
160
+ catch {
161
+ return { message: key };
162
+ }
50
163
  }
51
164
  /**
52
165
  * Decide whether one log may be sent, and consume its budget if so.
@@ -58,24 +171,177 @@ function signatureFor(error, screen) {
58
171
  * cannot be checked without consuming.
59
172
  *
60
173
  * Pass a `signature` to opt this log into duplicate suppression. Any severity
61
- * may do so; it is not reserved for errors.
174
+ * may do so; it is not reserved for errors. Once `duplicateLimit` full copies
175
+ * have gone out, further occurrences are neither sent nor refused outright —
176
+ * they are counted here, toward the next repeat summary, and cost no budget.
177
+ */
178
+ /**
179
+ * Keep `state.signatures` at or under `MAX_SIGNATURES`. Evicts the oldest
180
+ * (by `lastTouched`) signatures that have no pending repeat count first;
181
+ * a signature with an unsent `repeatCount` is never dropped, even if that
182
+ * leaves the map over the cap — losing a count already promised to a summary
183
+ * is worse than a temporarily oversized map.
62
184
  */
63
- function allow(signature) {
185
+ function pruneSignatures(state) {
186
+ const keys = Object.keys(state.signatures);
187
+ let overflow = keys.length - MAX_SIGNATURES;
188
+ if (overflow <= 0)
189
+ return;
190
+ const evictable = keys
191
+ .filter((k) => state.signatures[k].repeatCount === undefined)
192
+ .sort((a, b) => state.signatures[a].lastTouched - state.signatures[b].lastTouched);
193
+ for (const k of evictable) {
194
+ if (overflow <= 0)
195
+ break;
196
+ delete state.signatures[k];
197
+ overflow--;
198
+ }
199
+ }
200
+ function allow(options) {
201
+ const now = Date.now();
64
202
  const state = readState();
65
- if (state.logCount >= config.sessionLimit) {
203
+ refill(state, now);
204
+ let key;
205
+ let sig;
206
+ if (options.signature !== undefined) {
207
+ key = compoundKey(options.signature, options.labels);
208
+ sig = state.signatures[key] ?? { count: 0, repeatKey: generateId(), lastTouched: now };
209
+ sig.lastTouched = now;
210
+ }
211
+ if (sig && key && sig.count >= config.duplicateLimit) {
212
+ sig.repeatCount = (sig.repeatCount ?? 0) + 1;
213
+ if (sig.firstSeen === undefined)
214
+ sig.firstSeen = now;
215
+ sig.lastSeen = now;
216
+ state.signatures[key] = sig;
217
+ pruneSignatures(state);
218
+ writeState(state);
219
+ return { allowed: false, reason: 'duplicate', signature: options.signature };
220
+ }
221
+ const reserveThreshold = config.sessionLimit * config.errorReserve;
222
+ if (state.available < 1) {
223
+ writeState(state);
66
224
  return { allowed: false, reason: 'session-limit' };
67
225
  }
68
- if (signature !== undefined) {
69
- const seen = state.errorSignatures[signature] ?? 0;
70
- if (seen >= config.duplicateLimit) {
71
- return { allowed: false, reason: 'duplicate', signature };
72
- }
73
- state.errorSignatures[signature] = seen + 1;
226
+ // "ERROR and above" as a rank, not the literal string 'ERROR' — so the check
227
+ // stays right if a more severe level is ever added to SEVERITY_ORDER.
228
+ if (state.available <= reserveThreshold && severity_1.SEVERITY_ORDER[options.severity] > severity_1.SEVERITY_ORDER.ERROR) {
229
+ writeState(state);
230
+ return { allowed: false, reason: 'reserve' };
231
+ }
232
+ state.available -= 1;
233
+ if (sig && key) {
234
+ sig.count += 1;
235
+ state.signatures[key] = sig;
236
+ pruneSignatures(state);
74
237
  }
75
- state.logCount++;
76
238
  writeState(state);
77
- return { allowed: true };
239
+ return { allowed: true, repeatKey: sig?.repeatKey };
78
240
  }
241
+ /**
242
+ * Move any signature's accumulated repeats into the pending-summary queue —
243
+ * every one whose window (`summaryIntervalMinutes`) has elapsed, or every one
244
+ * with anything to send when `force` is true (the tab going hidden).
245
+ *
246
+ * Only the counting resets; `count` (full copies already sent) is untouched,
247
+ * so a signature stays in "counting" mode across summary windows rather than
248
+ * sending three more full copies before the next summary.
249
+ */
250
+ function flushDueSummaries(force = false) {
251
+ const now = Date.now();
252
+ const state = readState();
253
+ refill(state, now);
254
+ const intervalMs = config.summaryIntervalMinutes * 60_000;
255
+ let changed = false;
256
+ for (const key of Object.keys(state.signatures)) {
257
+ const sig = state.signatures[key];
258
+ if (!sig.repeatCount || sig.firstSeen === undefined || sig.lastSeen === undefined)
259
+ continue;
260
+ if (!force && now - sig.firstSeen < intervalMs)
261
+ continue;
262
+ const { errorType, message, screen, releaseId, userId } = parseSignatureKey(key);
263
+ const maxAgeMs = config.summaryMaxAgeDays * 24 * 60 * 60 * 1000;
264
+ const queue = readSummaryQueue().filter((s) => now - s.createdAt < maxAgeMs);
265
+ queue.push({
266
+ id: generateId(),
267
+ message,
268
+ errorType,
269
+ screen,
270
+ releaseId,
271
+ userId,
272
+ repeatOf: sig.repeatKey,
273
+ repeatCount: sig.repeatCount,
274
+ firstSeen: new Date(sig.firstSeen).toISOString(),
275
+ lastSeen: new Date(sig.lastSeen).toISOString(),
276
+ createdAt: now,
277
+ bootId,
278
+ });
279
+ // Keep the newest when the queue is over its cap.
280
+ const trimmed = queue.length > config.maxPendingSummaries
281
+ ? queue.slice(queue.length - config.maxPendingSummaries)
282
+ : queue;
283
+ writeSummaryQueue(trimmed);
284
+ sig.repeatCount = undefined;
285
+ sig.firstSeen = undefined;
286
+ sig.lastSeen = undefined;
287
+ changed = true;
288
+ }
289
+ if (changed)
290
+ writeState(state);
291
+ }
292
+ function toSentSummary(s) {
293
+ return {
294
+ id: s.id,
295
+ message: s.message,
296
+ errorType: s.errorType,
297
+ screen: s.screen,
298
+ releaseId: s.releaseId,
299
+ userId: s.userId,
300
+ repeatOf: s.repeatOf,
301
+ repeatCount: s.repeatCount,
302
+ firstSeen: s.firstSeen,
303
+ lastSeen: s.lastSeen,
304
+ sentLate: s.bootId !== bootId,
305
+ };
306
+ }
307
+ /**
308
+ * Look at every pending summary not past `summaryMaxAgeDays`, WITHOUT
309
+ * removing it from the queue. A summary may only leave the queue once its
310
+ * send has actually succeeded — see `acknowledgeSummary` — so a failed send
311
+ * (offline, or the tab tearing down right after the `visibilitychange` that
312
+ * triggered this) leaves it queued for the next flush or the next visit to
313
+ * retry, instead of losing it. `sentLate` is true for anything queued by an
314
+ * earlier page load (a different `bootId`): the case the README's "next
315
+ * visit sends them" describes.
316
+ *
317
+ * Expired entries ARE removed here — there is no send to wait on for those.
318
+ */
319
+ function peekPendingSummaries() {
320
+ const now = Date.now();
321
+ const queue = readSummaryQueue();
322
+ const fresh = queue.filter((s) => !isExpired(s, now));
323
+ if (fresh.length !== queue.length)
324
+ writeSummaryQueue(fresh);
325
+ return fresh.map(toSentSummary);
326
+ }
327
+ /**
328
+ * Remove one summary from the queue by id, once its send has resolved. A
329
+ * retry that calls this again for an id already gone is a no-op — it never
330
+ * re-adds anything, so it cannot create a second entry.
331
+ */
332
+ function acknowledgeSummary(id) {
333
+ const queue = readSummaryQueue();
334
+ const next = queue.filter((s) => s.id !== id);
335
+ if (next.length !== queue.length)
336
+ writeSummaryQueue(next);
337
+ }
338
+ /**
339
+ * Test-only reset. There is no `beforeunload` wiring any more — the budget
340
+ * lives in `sessionStorage` on purpose, so a reload keeps it — but tests still
341
+ * need a way to start a clean session, and to simulate a genuinely new visit
342
+ * (a new tab gets a new `bootId` for free, since the module reloads with it;
343
+ * a test in the same process cannot, so this rotates it explicitly).
344
+ */
79
345
  function resetRateLimiter() {
80
346
  try {
81
347
  sessionStorage.removeItem(config.storageKey);
@@ -83,8 +349,6 @@ function resetRateLimiter() {
83
349
  catch {
84
350
  // Silently fail
85
351
  }
86
- }
87
- if (typeof window !== 'undefined') {
88
- window.addEventListener('beforeunload', resetRateLimiter);
352
+ bootId = generateId();
89
353
  }
90
354
  //# sourceMappingURL=rateLimiter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/client/rateLimiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/client/rateLimiter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logHandler.d.ts","sourceRoot":"","sources":["../../src/functions/logHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,aAAa,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAA;AAuB/D,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAClD;AAID;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,UAAU;gBAArC,IAAI,EAAE,kBAAkB,GAAG,UAAU,EAC9C,OAAO,EAAE,MAAM;CAKlB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAA;CACjB;AA6DD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,IAGrD,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAAC,CAqCxD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,sBAAsB,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,sEAiB/F"}
1
+ {"version":3,"file":"logHandler.d.ts","sourceRoot":"","sources":["../../src/functions/logHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,aAAa,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAA;AAuB/D,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAClD;AAID;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,UAAU;gBAArC,IAAI,EAAE,kBAAkB,GAAG,UAAU,EAC9C,OAAO,EAAE,MAAM;CAKlB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAA;CACjB;AA6DD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,IAGrD,SAAS,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAAC,CAsCxD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,sBAAsB,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,sEAiB/F"}
@@ -117,6 +117,7 @@ function createClientLogHandler(config) {
117
117
  labels: (0, logger_1.cleanLabels)(labels),
118
118
  jsonPayload: { ...jsonPayload, error: processedError },
119
119
  attachments: request.data.attachments,
120
+ timestamp: request.data.timestamp,
120
121
  });
121
122
  }
122
123
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"logHandler.js","sourceRoot":"","sources":["../../src/functions/logHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logHandler.js","sourceRoot":"","sources":["../../src/functions/logHandler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/functions/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQ/D,KAAK,WAAW,GAAG,OAAO,aAAa,CAAC;AAgCxC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAWrE;AAGD,eAAO,MAAM,YAAY,cAAc,CAAC;AAExC,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAKD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAQ9D;AAoFD;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,UAAU,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,IAAI,CAkKN;AAaD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;eAuBrC,OAAO,WACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC5C,IAAI;oBAWI,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAC5C,IAAI;uBAEI,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAC5C,IAAI;qBAEI,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAC5C,IAAI;EAEV;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAG3D,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/functions/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAQhF,KAAK,WAAW,GAAG,OAAO,aAAa,CAAC;AA+CxC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAKrE;AAkKD,eAAO,MAAM,YAAY,cAAc,CAAC;AAExC,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAKD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAQ9D;AAoFD;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,UAAU,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,IAAI,CAoON;AAaD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;eAuBrC,OAAO,WACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC5C,IAAI;oBAWI,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAC5C,IAAI;uBAEI,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAC5C,IAAI;qBAEI,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,YACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACnB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAC5C,IAAI;EAEV;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAG3D,YAAY,EAAE,WAAW,EAAE,CAAC"}