@proappstore/sdk 1.16.80 → 1.16.82

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.
package/dist/logs.js CHANGED
@@ -15,17 +15,44 @@
15
15
  * SSR-safe.
16
16
  * - **Silent.** No throw path, ever. A logger that breaks the app it observes is
17
17
  * worse than no logger.
18
- * - **Backs off instead of retrying.** The server answers 202 when an app is over
19
- * its budget; retrying would turn an error loop into a flood. See `cooldown`.
18
+ * - **Backs off instead of retrying into a flood.** The server answers 202 when an
19
+ * app is over its budget; the SDK goes quiet (see `COOLDOWN_MS`). Only a
20
+ * transient failure (network, timeout, 5xx) is retried, a few times with
21
+ * backoff and within a TTL (#392); offline, the queue waits for `online`.
22
+ * - **Best effort.** The queue is bounded and lives in memory: a closed tab, a
23
+ * long outage or an over-budget app loses entries. `health()` says how many.
20
24
  * - **Not a replacement for usage telemetry.** `app.usage` is unchanged; the two
21
25
  * share only the transport.
22
26
  */
23
- import { postTelemetry } from './telemetry-transport.js';
27
+ import { SDK_VERSION } from './sdk-version.js';
28
+ import { sendTelemetry } from './telemetry-transport.js';
24
29
  const AUTH_CATEGORIES = new Set(['auth.session_lost', 'auth.hydration_failure']);
25
30
  const AUTH_REASONS = new Set(['api_401', 'explicit_sign_out', 'legacy_session_rejected', 'http_error', 'network_error']);
26
31
  const AUTH_PHASES = new Set(['api_request', 'cookie_hydration', 'legacy_hydration', 'explicit_sign_out']);
27
32
  const AUTH_ROUTES = new Set(['platform.api', 'auth.me', 'auth.logout']);
28
33
  const CORRELATION_ID_RE = /^[a-f0-9]{32}$/i;
34
+ /** Envelope version on every entry; the ingest allowlist keys on it. */
35
+ export const LOG_ENVELOPE_VERSION = 1;
36
+ const SPAN_ID_RE = /^[a-f0-9]{16}$/i;
37
+ const CODE_RE = /^[A-Za-z0-9._:-]{1,64}$/;
38
+ const MAX_DURATION_MS = 60 * 60 * 1000;
39
+ function envelopeFields(ctx) {
40
+ if (!ctx)
41
+ return {};
42
+ const out = {};
43
+ if (typeof ctx.spanId === 'string' && SPAN_ID_RE.test(ctx.spanId) && !/^0+$/.test(ctx.spanId))
44
+ out.spanId = ctx.spanId.toLowerCase();
45
+ if (typeof ctx.operation === 'string' && CODE_RE.test(ctx.operation))
46
+ out.operation = ctx.operation;
47
+ if (ctx.result === 'ok' || ctx.result === 'error')
48
+ out.result = ctx.result;
49
+ if (typeof ctx.errorCode === 'string' && CODE_RE.test(ctx.errorCode))
50
+ out.errorCode = ctx.errorCode;
51
+ if (Number.isInteger(ctx.durationMs) && ctx.durationMs >= 0 && ctx.durationMs <= MAX_DURATION_MS)
52
+ out.durationMs = ctx.durationMs;
53
+ return out;
54
+ }
55
+ const BREADCRUMB_CATEGORIES = new Set(['navigation', 'ui', 'network', 'room', 'auth', 'action']);
29
56
  const FLUSH_INTERVAL_MS = 10_000;
30
57
  /** Matches the server's per-request cap; a full queue flushes immediately. */
31
58
  const MAX_BATCH = 100;
@@ -34,6 +61,23 @@ const MAX_QUEUE = 200;
34
61
  /** How long to stay quiet after the server says we are over budget. */
35
62
  const COOLDOWN_MS = 60_000;
36
63
  const MESSAGE_MAX = 4096;
64
+ /** Backoff before each retry of a batch that failed transiently. */
65
+ const RETRY_DELAYS_MS = [1_000, 2_000, 4_000];
66
+ /** A batch still failing this long after its first failure is dropped, not retried. */
67
+ const RETRY_TTL_MS = 60_000;
68
+ const MAX_BREADCRUMBS = 50;
69
+ /** The most recent breadcrumbs attached to an error entry. */
70
+ const ATTACHED_BREADCRUMBS = 20;
71
+ const BREADCRUMB_MESSAGE_MAX = 200;
72
+ const BREADCRUMB_VALUE_MAX = 120;
73
+ const BREADCRUMB_DATA_KEYS = 8;
74
+ /** An identical entry among the last few queued is folded into it (`repeats`). */
75
+ const DEDUPE_WINDOW = 5;
76
+ /** Ingest keeps `data` up to 4 KB of JSON; leave room for its redaction. */
77
+ const DATA_BUDGET = 3500;
78
+ const STACK_MAX = 2500;
79
+ const MAX_CAUSE_DEPTH = 5;
80
+ const CAUSE_LINES = 4;
37
81
  const CLIENT_ID_KEY = 'pas:client-id';
38
82
  const LEVEL_ORDER = { debug: 0, info: 1, warn: 2, error: 3 };
39
83
  /**
@@ -90,8 +134,7 @@ export function readOrCreateClientId() {
90
134
  return null;
91
135
  }
92
136
  }
93
- /** Serialize an unknown thrown value into a message + stack. */
94
- export function describeError(value) {
137
+ function describeOne(value) {
95
138
  if (value instanceof Error) {
96
139
  return { message: `${value.name}: ${value.message}`, stack: value.stack ?? undefined };
97
140
  }
@@ -104,6 +147,61 @@ export function describeError(value) {
104
147
  return { message: String(value) };
105
148
  }
106
149
  }
150
+ /**
151
+ * Serialize an unknown thrown value into a message + stack. An Error's `cause`
152
+ * chain (#392, up to five levels) is appended to the stack as `Caused by:`
153
+ * sections, so a wrapped failure keeps its root. Bounded; never throws.
154
+ */
155
+ export function describeError(value) {
156
+ const head = describeOne(value);
157
+ const causes = [];
158
+ try {
159
+ const seen = new Set([value]);
160
+ let cause = value instanceof Error ? value.cause : undefined;
161
+ for (let depth = 0; cause !== undefined && cause !== null && depth < MAX_CAUSE_DEPTH && !seen.has(cause); depth++) {
162
+ seen.add(cause);
163
+ const described = describeOne(cause);
164
+ // The message and the top frames: enough to place the root, small enough to keep every level.
165
+ causes.push(`Caused by: ${(described.stack ?? described.message).split('\n').slice(0, CAUSE_LINES).join('\n')}`);
166
+ cause = cause instanceof Error ? cause.cause : undefined;
167
+ }
168
+ }
169
+ catch {
170
+ // A hostile `cause` getter: keep what we have.
171
+ }
172
+ if (!head.stack && causes.length === 0)
173
+ return { message: head.message };
174
+ const tail = causes.join('\n').slice(0, STACK_MAX);
175
+ // The outer stack gives way first, so the root cause always survives the cap.
176
+ const outer = head.stack ? head.stack.slice(0, Math.max(0, STACK_MAX - tail.length - 1)) : '';
177
+ return { message: head.message, stack: [outer, tail].filter(Boolean).join('\n') };
178
+ }
179
+ /** Category of a render error a React error boundary caught. */
180
+ export const REACT_ERROR_CATEGORY = 'react.error-boundary';
181
+ /**
182
+ * The entry for a render error a React error boundary caught: the message and
183
+ * stack (with causes), the component stack and the path. Shared by ProShell's
184
+ * boundary and {@link Logs.captureReactError}, so both read the same.
185
+ */
186
+ export function describeReactError(error, componentStack) {
187
+ const described = describeError(error);
188
+ return {
189
+ message: described.message,
190
+ data: {
191
+ stack: described.stack,
192
+ componentStack: componentStack ? componentStack.slice(0, STACK_MAX) : undefined,
193
+ path: typeof window === 'undefined' ? undefined : window.location?.pathname,
194
+ },
195
+ };
196
+ }
197
+ function isOffline() {
198
+ return typeof navigator !== 'undefined' && navigator.onLine === false;
199
+ }
200
+ function isPlainObject(value) {
201
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
202
+ }
203
+ /** The logger that owns auto-capture for each app id, so a second init does not double it. */
204
+ const activeLoggers = new Map();
107
205
  export class Logs {
108
206
  appId;
109
207
  apiBase;
@@ -123,6 +221,18 @@ export class Logs {
123
221
  /** Guards against an error raised inside our own handler re-entering. */
124
222
  capturing = false;
125
223
  minLevel;
224
+ onOnline = null;
225
+ /** In-memory only, never persisted (#392). */
226
+ breadcrumbs = [];
227
+ /** Errors already recorded, so a caught-then-rethrown error is one event. */
228
+ reported = new WeakSet();
229
+ stats = { sent: 0, dropped: 0, duplicates: 0 };
230
+ /** A non-unload send is in flight: the next one waits for it. */
231
+ sending = false;
232
+ retryAttempt = 0;
233
+ retryStartedAt = 0;
234
+ retryAt = 0;
235
+ retryTimer = null;
126
236
  constructor(appId, apiBase, auth, options = {}) {
127
237
  this.appId = appId;
128
238
  this.apiBase = apiBase;
@@ -134,9 +244,19 @@ export class Logs {
134
244
  start() {
135
245
  if (this.running || !hasBrowser())
136
246
  return;
247
+ // A second init for the same app (StrictMode, HMR, a re-created instance)
248
+ // takes over auto-capture rather than registering every handler twice.
249
+ const previous = activeLoggers.get(this.appId);
250
+ if (previous && previous !== this) {
251
+ previous.flush();
252
+ previous.stop();
253
+ }
254
+ activeLoggers.set(this.appId, this);
137
255
  this.running = true;
138
256
  this.clientId = readOrCreateClientId();
139
257
  this.onError = (event) => {
258
+ if (this.alreadyReported(event.error))
259
+ return;
140
260
  const described = event.error
141
261
  ? describeError(event.error)
142
262
  : { message: event.message || 'unknown error' };
@@ -148,6 +268,8 @@ export class Logs {
148
268
  };
149
269
  window.addEventListener('error', this.onError);
150
270
  this.onRejection = (event) => {
271
+ if (this.alreadyReported(event.reason))
272
+ return;
151
273
  const described = describeError(event.reason);
152
274
  this.capture('error', 'unhandledrejection', described.message, {
153
275
  stack: described.stack,
@@ -156,6 +278,12 @@ export class Logs {
156
278
  window.addEventListener('unhandledrejection', this.onRejection);
157
279
  this.onPageHide = () => this.flush();
158
280
  window.addEventListener('pagehide', this.onPageHide);
281
+ // Offline, `send` holds the queue; back online, deliver it now.
282
+ this.onOnline = () => {
283
+ this.retryAt = 0;
284
+ void this.send(false);
285
+ };
286
+ window.addEventListener('online', this.onOnline);
159
287
  this.timer = setInterval(() => {
160
288
  void this.send(false);
161
289
  }, FLUSH_INTERVAL_MS);
@@ -165,10 +293,16 @@ export class Logs {
165
293
  if (!this.running)
166
294
  return;
167
295
  this.running = false;
296
+ if (activeLoggers.get(this.appId) === this)
297
+ activeLoggers.delete(this.appId);
168
298
  if (this.timer) {
169
299
  clearInterval(this.timer);
170
300
  this.timer = null;
171
301
  }
302
+ if (this.retryTimer) {
303
+ clearTimeout(this.retryTimer);
304
+ this.retryTimer = null;
305
+ }
172
306
  if (hasBrowser()) {
173
307
  if (this.onError)
174
308
  window.removeEventListener('error', this.onError);
@@ -176,10 +310,13 @@ export class Logs {
176
310
  window.removeEventListener('unhandledrejection', this.onRejection);
177
311
  if (this.onPageHide)
178
312
  window.removeEventListener('pagehide', this.onPageHide);
313
+ if (this.onOnline)
314
+ window.removeEventListener('online', this.onOnline);
179
315
  }
180
316
  this.onError = null;
181
317
  this.onRejection = null;
182
318
  this.onPageHide = null;
319
+ this.onOnline = null;
183
320
  }
184
321
  debug(message, data) {
185
322
  this.capture('debug', 'app', message, data);
@@ -223,43 +360,106 @@ export class Logs {
223
360
  const message = event.category === 'auth.session_lost'
224
361
  ? 'PAS session was invalidated'
225
362
  : 'PAS session hydration could not establish validity';
226
- this.captureWithTrace('warn', event.category, message, data, event.correlationId);
363
+ this.capture('warn', event.category, message, data, { traceId: event.correlationId });
227
364
  }
228
365
  /** Number of entries waiting to be sent. Exposed for tests and diagnostics. */
229
366
  get pending() {
230
367
  return this.queue.length;
231
368
  }
369
+ /** Delivery health: queued, sent and dropped entries, breadcrumbs, backpressure. */
370
+ health() {
371
+ return {
372
+ queued: this.queue.length,
373
+ sent: this.stats.sent,
374
+ dropped: this.stats.dropped,
375
+ duplicates: this.stats.duplicates,
376
+ breadcrumbs: this.breadcrumbs.length,
377
+ disabled: this.disabled,
378
+ quietUntil: this.quietUntil > Date.now() ? this.quietUntil : null,
379
+ };
380
+ }
381
+ /**
382
+ * Record a breadcrumb (#392): a short, redacted note of what happened before a
383
+ * failure. Kept in a bounded in-memory buffer (the newest 50) and attached to
384
+ * the next error entries; never persisted and never sent on its own. Only the
385
+ * listed categories are kept, and `data` keeps up to eight primitive values —
386
+ * do not pass form text, DOM content, tokens or user data.
387
+ */
388
+ addBreadcrumb(category, message, data) {
389
+ try {
390
+ if (!BREADCRUMB_CATEGORIES.has(category))
391
+ return;
392
+ const crumb = { ts: Date.now(), category, message: redactClient(String(message)).slice(0, BREADCRUMB_MESSAGE_MAX) };
393
+ if (isPlainObject(data)) {
394
+ const clean = {};
395
+ for (const key of Object.keys(data).slice(0, BREADCRUMB_DATA_KEYS)) {
396
+ const value = data[key];
397
+ if (typeof value === 'string')
398
+ clean[key] = redactClient(value).slice(0, BREADCRUMB_VALUE_MAX);
399
+ else if ((typeof value === 'number' && Number.isFinite(value)) || typeof value === 'boolean' || value === null)
400
+ clean[key] = value;
401
+ }
402
+ if (Object.keys(clean).length)
403
+ crumb.data = clean;
404
+ }
405
+ this.breadcrumbs.push(crumb);
406
+ if (this.breadcrumbs.length > MAX_BREADCRUMBS)
407
+ this.breadcrumbs.splice(0, this.breadcrumbs.length - MAX_BREADCRUMBS);
408
+ }
409
+ catch {
410
+ // Never let capture throw into app code.
411
+ }
412
+ }
413
+ /** Forget every breadcrumb. The SDK calls this when the signed-in user changes. */
414
+ clearBreadcrumbs() {
415
+ this.breadcrumbs = [];
416
+ }
232
417
  /**
233
418
  * Queue one entry.
234
419
  *
235
420
  * Public so app code can record its own categories (`app.logs.capture('warn',
236
421
  * 'checkout', ...)`), and so SDK primitives can report their own failures
237
- * (platform#106's client half) without another queue.
422
+ * (platform#106's client half) without another queue. `context` (#390) joins
423
+ * the entry to a request: pass the trace and span ids the call was sent with.
238
424
  */
239
- capture(level, category, message, data) {
240
- this.captureWithTrace(level, category, message, data);
241
- }
242
- captureWithTrace(level, category, message, data, traceId) {
425
+ capture(level, category, message, data, context) {
243
426
  if (this.disabled || this.capturing)
244
427
  return;
245
428
  if (LEVEL_ORDER[level] < LEVEL_ORDER[this.minLevel])
246
429
  return;
247
430
  this.capturing = true;
248
431
  try {
432
+ const redactedMessage = redactClient(String(message)).slice(0, MESSAGE_MAX);
433
+ // An error loop repeats one fault: fold it into the queued entry. Not for
434
+ // request-correlated entries — each failed call keeps its own trace.
435
+ if (!context?.spanId) {
436
+ const twin = this.queue.slice(-DEDUPE_WINDOW).find((e) => !e.spanId && e.level === level && e.category === category && e.message === redactedMessage);
437
+ if (twin && (twin.data === undefined || isPlainObject(twin.data))) {
438
+ const prior = isPlainObject(twin.data) && typeof twin.data.repeats === 'number' ? twin.data.repeats : 1;
439
+ twin.data = { ...twin.data, repeats: prior + 1 };
440
+ this.stats.duplicates++;
441
+ return;
442
+ }
443
+ }
444
+ let payload = data === undefined ? undefined : this.safeData(data);
445
+ if (level === 'error')
446
+ payload = this.withBreadcrumbs(payload);
249
447
  const entry = {
250
448
  ts: Date.now(),
251
449
  level,
252
450
  category,
253
- message: redactClient(String(message)).slice(0, MESSAGE_MAX),
254
- data: data === undefined ? undefined : this.safeData(data),
451
+ message: redactedMessage,
452
+ data: payload,
255
453
  build: this.options.build,
256
- traceId: traceId ?? this.newTraceId(),
454
+ traceId: typeof context?.traceId === 'string' && CORRELATION_ID_RE.test(context.traceId) && !/^0+$/.test(context.traceId)
455
+ ? context.traceId.toLowerCase()
456
+ : this.newTraceId(),
457
+ v: LOG_ENVELOPE_VERSION,
458
+ sdkVersion: SDK_VERSION,
459
+ ...envelopeFields(context),
257
460
  };
258
461
  this.queue.push(entry);
259
- // Drop the OLDEST on overflow: during a loop the newest entries are all
260
- // the same fault, while the first entries include what preceded it.
261
- if (this.queue.length > MAX_QUEUE)
262
- this.queue.splice(0, this.queue.length - MAX_QUEUE);
462
+ this.trimQueue();
263
463
  if (this.queue.length >= MAX_BATCH)
264
464
  void this.send(false);
265
465
  }
@@ -270,6 +470,43 @@ export class Logs {
270
470
  this.capturing = false;
271
471
  }
272
472
  }
473
+ /**
474
+ * Record a thrown value as an `error` entry: its name, message and stack
475
+ * (redacted like every entry), plus the request context when there is one.
476
+ * Category defaults to `exception`.
477
+ */
478
+ captureException(error, context) {
479
+ try {
480
+ if (this.alreadyReported(error))
481
+ return;
482
+ this.markReported(error);
483
+ const described = describeError(error);
484
+ const { category, ...rest } = context ?? {};
485
+ this.capture('error', category ?? 'exception', described.message, described.stack ? { stack: described.stack } : undefined, { result: 'error', ...rest });
486
+ }
487
+ catch {
488
+ // Never let capture throw into app code.
489
+ }
490
+ }
491
+ /**
492
+ * Record a render error your own React error boundary caught (#392). React
493
+ * does not pass a caught error to `window.onerror`, so call this from
494
+ * `componentDidCatch(error, info)`: `app.logs.captureReactError(error,
495
+ * info.componentStack)`. Same entry as ProShell's boundary (category
496
+ * `react.error-boundary`, stack with causes, component stack, path).
497
+ */
498
+ captureReactError(error, componentStack) {
499
+ try {
500
+ if (this.alreadyReported(error))
501
+ return;
502
+ this.markReported(error);
503
+ const { message, data } = describeReactError(error, componentStack);
504
+ this.capture('error', REACT_ERROR_CATEGORY, message, data, { result: 'error' });
505
+ }
506
+ catch {
507
+ // Never let capture throw into app code.
508
+ }
509
+ }
273
510
  /** Fire-and-forget flush, safe on the unload path. */
274
511
  flush() {
275
512
  void this.send(true);
@@ -278,6 +515,35 @@ export class Logs {
278
515
  async flushAsync() {
279
516
  await this.send(false);
280
517
  }
518
+ alreadyReported(error) {
519
+ return error !== null && typeof error === 'object' && this.reported.has(error);
520
+ }
521
+ markReported(error) {
522
+ if (error !== null && typeof error === 'object')
523
+ this.reported.add(error);
524
+ }
525
+ /** The newest breadcrumbs that fit the ingest size budget, on an object payload only. */
526
+ withBreadcrumbs(payload) {
527
+ if (this.breadcrumbs.length === 0 || (payload !== undefined && !isPlainObject(payload)))
528
+ return payload;
529
+ const recent = this.breadcrumbs.slice(-ATTACHED_BREADCRUMBS);
530
+ while (recent.length) {
531
+ const candidate = { ...payload, breadcrumbs: recent };
532
+ if (JSON.stringify(candidate).length <= DATA_BUDGET)
533
+ return candidate;
534
+ recent.shift();
535
+ }
536
+ return payload;
537
+ }
538
+ /** Drop the OLDEST on overflow: during a loop the newest entries are all the
539
+ * same fault, while the first entries include what preceded it. */
540
+ trimQueue() {
541
+ if (this.queue.length <= MAX_QUEUE)
542
+ return;
543
+ const excess = this.queue.length - MAX_QUEUE;
544
+ this.queue.splice(0, excess);
545
+ this.stats.dropped += excess;
546
+ }
281
547
  safeData(data) {
282
548
  try {
283
549
  return JSON.parse(redactClient(JSON.stringify(data) ?? 'null'));
@@ -305,34 +571,98 @@ export class Logs {
305
571
  return;
306
572
  if (Date.now() < this.quietUntil)
307
573
  return;
574
+ // Offline: keep the queue; the `online` listener resumes.
575
+ if (isOffline())
576
+ return;
577
+ // The unload path goes regardless: it is the last chance.
578
+ if (!keepalive && (this.sending || Date.now() < this.retryAt))
579
+ return;
308
580
  const batch = this.queue.slice(0, MAX_BATCH);
309
- // Remove before sending: a retry loop is worse than losing a log line, and
310
- // the entries most likely to be dropped are duplicates of a fault we already
311
- // reported.
312
581
  this.queue = this.queue.slice(batch.length);
313
582
  const body = JSON.stringify({
314
583
  entries: batch,
315
584
  ...(this.clientId ? { clientId: this.clientId } : {}),
316
585
  });
317
- const res = await postTelemetry(this.auth, this.apiBase, `/v1/apps/${this.appId}/logs`, body, {
318
- keepalive,
319
- // A beacon cannot carry the bearer token, so only use it where the
320
- // same-origin cookie speaks for us. In legacy-bearer mode a keepalive
321
- // fetch still attaches the token and still survives unload in practice.
322
- beacon: this.auth.usesPlatformCookie === true,
323
- });
324
- if (!res)
586
+ if (!keepalive)
587
+ this.sending = true;
588
+ try {
589
+ const result = await sendTelemetry(this.auth, this.apiBase, `/v1/apps/${this.appId}/logs`, body, {
590
+ keepalive,
591
+ // A beacon cannot carry the bearer token, so only use it where the
592
+ // same-origin cookie speaks for us. In legacy-bearer mode a keepalive
593
+ // fetch still attaches the token and still survives unload in practice.
594
+ beacon: this.auth.usesPlatformCookie === true,
595
+ });
596
+ this.settle(batch, result, keepalive);
597
+ }
598
+ finally {
599
+ if (!keepalive)
600
+ this.sending = false;
601
+ }
602
+ }
603
+ settle(batch, result, keepalive) {
604
+ if (result.kind === 'beacon') {
605
+ this.stats.sent += batch.length;
606
+ return;
607
+ }
608
+ if (result.kind === 'failed' || result.response.status >= 500) {
609
+ this.retryLater(batch, keepalive);
325
610
  return;
326
- if (res.status === 404) {
611
+ }
612
+ const { status } = result.response;
613
+ if (status === 404) {
327
614
  // Unknown app id — a misconfigured `appId` will never succeed, so stop
328
615
  // rather than retry every ten seconds for the life of the page.
329
616
  this.disabled = true;
617
+ this.stats.dropped += batch.length + this.queue.length;
618
+ this.queue = [];
330
619
  return;
331
620
  }
332
- if (res.status === 202 || res.status === 429) {
333
- // Over budget. Go quiet; the server is still counting the spike.
621
+ if (status === 202 || status === 429) {
622
+ // Over budget. Go quiet; the server is still counting the spike, and the
623
+ // batch was not stored.
334
624
  this.quietUntil = Date.now() + COOLDOWN_MS;
625
+ this.stats.dropped += batch.length;
626
+ return;
335
627
  }
628
+ this.resetRetry();
629
+ if (result.response.ok)
630
+ this.stats.sent += batch.length;
631
+ else
632
+ this.stats.dropped += batch.length; // a 4xx will not succeed on retry
633
+ }
634
+ /**
635
+ * A transient failure: put the batch back and retry with backoff, a bounded
636
+ * number of times within {@link RETRY_TTL_MS}. Offline is a pause, not a
637
+ * failed attempt. One timer at most, so a failing endpoint cannot cause a
638
+ * retry storm, and the transport never logs, so it cannot recurse.
639
+ */
640
+ retryLater(batch, keepalive) {
641
+ if (!keepalive && !isOffline()) {
642
+ const now = Date.now();
643
+ if (this.retryAttempt === 0)
644
+ this.retryStartedAt = now;
645
+ if (this.retryAttempt >= RETRY_DELAYS_MS.length || now - this.retryStartedAt > RETRY_TTL_MS) {
646
+ this.stats.dropped += batch.length;
647
+ this.resetRetry();
648
+ return;
649
+ }
650
+ const delay = RETRY_DELAYS_MS[this.retryAttempt++];
651
+ this.retryAt = now + delay;
652
+ if (this.running && !this.retryTimer) {
653
+ this.retryTimer = setTimeout(() => {
654
+ this.retryTimer = null;
655
+ void this.send(false);
656
+ }, delay);
657
+ }
658
+ }
659
+ this.queue = batch.concat(this.queue);
660
+ this.trimQueue();
661
+ }
662
+ resetRetry() {
663
+ this.retryAttempt = 0;
664
+ this.retryStartedAt = 0;
665
+ this.retryAt = 0;
336
666
  }
337
667
  }
338
668
  //# sourceMappingURL=logs.js.map
package/dist/logs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../src/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAmB7E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAiC,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC,CAAC;AACjH,MAAM,YAAY,GAAG,IAAI,GAAG,CAA+B,CAAC,SAAS,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;AACvJ,MAAM,WAAW,GAAG,IAAI,GAAG,CAA8B,CAAC,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACvI,MAAM,WAAW,GAAG,IAAI,GAAG,CAA8B,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;AACrG,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAuB5C,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,8EAA8E;AAC9E,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,6EAA6E;AAC7E,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,uEAAuE;AACvE,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB,MAAM,aAAa,GAAG,eAAe,CAAC;AACtC,MAAM,WAAW,GAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,UAAU,GAA4B;IAC1C,CAAC,6BAA6B,EAAE,mBAAmB,CAAC;IACpD;QACE,4HAA4H;QAC5H,gBAAgB;KACjB;IACD,CAAC,8BAA8B,EAAE,OAAO,CAAC;IACzC,CAAC,kCAAkC,EAAE,SAAS,CAAC;IAC/C,CAAC,uBAAuB,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,UAAU;QAAE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACzF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACvC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,UAAU,EAAE;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,QAAQ,IAAI,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QACxE,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;YACtE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,wCAAwC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACzD,IAAI,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,IAAI;IAiBI;IACA;IACA;IACA;IAnBX,KAAK,GAAkB,EAAE,CAAC;IAC1B,OAAO,GAAG,KAAK,CAAC;IAChB,KAAK,GAA0C,IAAI,CAAC;IACpD,OAAO,GAAqC,IAAI,CAAC;IACjD,WAAW,GAAgD,IAAI,CAAC;IAChE,UAAU,GAAwB,IAAI,CAAC;IACvC,QAAQ,GAAkB,IAAI,CAAC;IACvC,sEAAsE;IAC9D,UAAU,GAAG,CAAC,CAAC;IACvB,yEAAyE;IACjE,QAAQ,GAAG,KAAK,CAAC;IACzB,yEAAyE;IACjE,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,CAAW;IAE3B,YACmB,KAAa,EACb,OAAe,EACf,IAAmB,EACnB,UAA6B,EAAE;QAH/B,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAe;QACnB,YAAO,GAAP,OAAO,CAAwB;QAEhD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IAC1C,CAAC;IAED,4DAA4D;IAC5D,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,oBAAoB,EAAE,CAAC;QAEvC,IAAI,CAAC,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE;YACnC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK;gBAC3B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,OAAO,EAAE;gBACvD,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,MAAM,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;gBACnC,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;aAChC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,WAAW,GAAG,CAAC,KAA4B,EAAE,EAAE;YAClD,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,SAAS,CAAC,OAAO,EAAE;gBAC7D,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhE,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAErD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;IAED,gFAAgF;IAChF,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,WAAW;gBAAE,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACzF,IAAI,IAAI,CAAC,UAAU;gBAAE,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAAc;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAc;QACnC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,KAAyB;QACxC,IACE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;eACjC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;eAC/B,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;eAC7B,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;eAC7B,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;eAC5C,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;eAClC,KAAK,CAAC,SAAS,GAAG,CAAC;eACnB,KAAK,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;eAChC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;YAChH,OAAO;QAET,MAAM,IAAI,GAAG;YACX,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/D,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,mBAAmB;YACpD,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,oDAAoD,CAAC;QACzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACpF,CAAC;IAED,+EAA+E;IAC/E,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,KAAe,EAAE,QAAgB,EAAE,OAAe,EAAE,IAAc;QACxE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAEO,gBAAgB,CAAC,KAAe,EAAE,QAAgB,EAAE,OAAe,EAAE,IAAc,EAAE,OAAgB;QAC3G,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5C,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO;QAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,KAAK,GAAgB;gBACzB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,KAAK;gBACL,QAAQ;gBACR,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;gBAC5D,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC1D,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;aACtC,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,wEAAwE;YACxE,oEAAoE;YACpE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;YACvF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS;gBAAE,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,KAAK;QACH,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAEO,QAAQ,CAAC,IAAa;QAC5B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,8EAA8E;YAC9E,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;wEACoE;IAC5D,UAAU;QAChB,IAAI,CAAC;YACH,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC7E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,SAAkB;QACnC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACrD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU;YAAE,OAAO;QAEzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7C,2EAA2E;QAC3E,6EAA6E;QAC7E,YAAY;QACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,OAAO,EAAE,KAAK;YACd,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,CAAC,KAAK,OAAO,EAAE,IAAI,EAAE;YAC5F,SAAS;YACT,mEAAmE;YACnE,sEAAsE;YACtE,wEAAwE;YACxE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,KAAK,IAAI;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,uEAAuE;YACvE,gEAAgE;YAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,iEAAiE;YACjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;QAC7C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../src/logs.ts"],"names":[],"mappings":"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"}