bitfab 0.52.2 → 0.52.3

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/index.cjs CHANGED
@@ -51,7 +51,7 @@ var __version__, __packageName__;
51
51
  var init_version_generated = __esm({
52
52
  "src/version.generated.ts"() {
53
53
  "use strict";
54
- __version__ = "0.52.2";
54
+ __version__ = "0.52.3";
55
55
  __packageName__ = "bitfab";
56
56
  }
57
57
  });
@@ -394,15 +394,18 @@ var init_payloadBudget = __esm({
394
394
  });
395
395
 
396
396
  // src/warnOnce.ts
397
+ function warn(message) {
398
+ try {
399
+ console.warn(`[bitfab] ${message}`);
400
+ } catch {
401
+ }
402
+ }
397
403
  function warnOnce(key, message) {
398
404
  if (warned.has(key)) {
399
405
  return;
400
406
  }
401
407
  warned.add(key);
402
- try {
403
- console.warn(`[bitfab] ${message}`);
404
- } catch {
405
- }
408
+ warn(message);
406
409
  }
407
410
  var warned;
408
411
  var init_warnOnce = __esm({
@@ -544,6 +547,9 @@ var init_serializePayload = __esm({
544
547
  });
545
548
 
546
549
  // src/traceMetadata.ts
550
+ function findRecord(traceId) {
551
+ return activeRecords.get(traceId) ?? completedRecords.get(traceId);
552
+ }
547
553
  function recordCallerTraceMetadata(traceId, metadata) {
548
554
  if (typeof traceId !== "string" || traceId === "") {
549
555
  return;
@@ -554,15 +560,52 @@ function recordCallerTraceMetadata(traceId, metadata) {
554
560
  if (Object.keys(metadata).length === 0) {
555
561
  return;
556
562
  }
557
- callerMetadata.set(traceId, { ...callerMetadata.get(traceId), ...metadata });
563
+ const existing = findRecord(traceId);
564
+ if (existing) {
565
+ Object.assign(existing.caller, metadata);
566
+ return;
567
+ }
568
+ activeRecords.set(traceId, {
569
+ caller: { ...metadata },
570
+ derived: {},
571
+ warnedKeys: /* @__PURE__ */ new Set()
572
+ });
558
573
  }
559
574
  function callerTraceMetadata(traceId) {
560
- const recorded = callerMetadata.get(traceId);
561
- return recorded ? { ...recorded } : void 0;
575
+ const record = findRecord(traceId);
576
+ if (!record || Object.keys(record.caller).length === 0) {
577
+ return void 0;
578
+ }
579
+ return { ...record.caller };
562
580
  }
563
- function forgetTraceMetadata(traceId) {
564
- callerMetadata.delete(traceId);
565
- derivedMetadata.delete(traceId);
581
+ function retireTraceMetadata(traceId) {
582
+ const record = activeRecords.get(traceId);
583
+ if (!record) {
584
+ return;
585
+ }
586
+ activeRecords.delete(traceId);
587
+ completedRecords.set(traceId, record);
588
+ while (completedRecords.size > RETAINED_COMPLETED_TRACES) {
589
+ const oldest = completedRecords.keys().next();
590
+ if (oldest.done) {
591
+ return;
592
+ }
593
+ completedRecords.delete(oldest.value);
594
+ }
595
+ }
596
+ function warnAboutShadowedKeys(traceId, record) {
597
+ const shadowed = Object.keys(record.derived).filter(
598
+ (key) => key in record.caller && record.caller[key] !== record.derived[key] && !record.warnedKeys.has(key)
599
+ ).sort();
600
+ if (shadowed.length === 0) {
601
+ return;
602
+ }
603
+ for (const key of shadowed) {
604
+ record.warnedKeys.add(key);
605
+ }
606
+ warn(
607
+ `trace metadata key(s) ${shadowed.join(", ")} on trace ${traceId} were set both by the caller and by an integration's own trace export; the caller's value is the one kept on the trace.`
608
+ );
566
609
  }
567
610
  function mergeCallerMetadataIntoTracePayload(payload) {
568
611
  const externalTrace = payload.externalTrace;
@@ -574,35 +617,31 @@ function mergeCallerMetadataIntoTracePayload(payload) {
574
617
  if (typeof traceId !== "string" || traceId === "") {
575
618
  return payload;
576
619
  }
577
- const caller = callerMetadata.get(traceId);
578
- if (!caller) {
620
+ const record = findRecord(traceId);
621
+ if (!record || Object.keys(record.caller).length === 0) {
579
622
  return payload;
580
623
  }
581
- const derived = derivedMetadata.get(traceId) ?? {};
582
624
  const exported = external.metadata;
583
625
  if (typeof exported === "object" && exported !== null) {
584
- Object.assign(derived, exported);
585
- }
586
- derivedMetadata.set(traceId, derived);
587
- const shadowed = Object.keys(derived).filter((key) => key in caller && caller[key] !== derived[key]).sort();
588
- if (shadowed.length > 0) {
589
- warnOnce(
590
- `trace-metadata-shadowed:${shadowed.join(",")}`,
591
- `trace metadata key(s) ${shadowed.join(", ")} were set both by the caller and by an integration's own trace export; the caller's value is the one kept on the trace.`
592
- );
626
+ Object.assign(record.derived, exported);
593
627
  }
628
+ warnAboutShadowedKeys(traceId, record);
594
629
  return {
595
630
  ...payload,
596
- externalTrace: { ...external, metadata: { ...derived, ...caller } }
631
+ externalTrace: {
632
+ ...external,
633
+ metadata: { ...record.derived, ...record.caller }
634
+ }
597
635
  };
598
636
  }
599
- var callerMetadata, derivedMetadata;
637
+ var RETAINED_COMPLETED_TRACES, activeRecords, completedRecords;
600
638
  var init_traceMetadata = __esm({
601
639
  "src/traceMetadata.ts"() {
602
640
  "use strict";
603
641
  init_warnOnce();
604
- callerMetadata = /* @__PURE__ */ new Map();
605
- derivedMetadata = /* @__PURE__ */ new Map();
642
+ RETAINED_COMPLETED_TRACES = 128;
643
+ activeRecords = /* @__PURE__ */ new Map();
644
+ completedRecords = /* @__PURE__ */ new Map();
606
645
  }
607
646
  });
608
647
 
@@ -7467,7 +7506,7 @@ var Bitfab = class {
7467
7506
  }
7468
7507
  });
7469
7508
  activeTraceStates.delete(traceId);
7470
- forgetTraceMetadata(traceId);
7509
+ retireTraceMetadata(traceId);
7471
7510
  }
7472
7511
  } catch {
7473
7512
  }
@@ -7660,7 +7699,7 @@ var Bitfab = class {
7660
7699
  } catch (setupError) {
7661
7700
  if (registeredTraceId) {
7662
7701
  activeTraceStates.delete(registeredTraceId);
7663
- forgetTraceMetadata(registeredTraceId);
7702
+ retireTraceMetadata(registeredTraceId);
7664
7703
  }
7665
7704
  if (setupError instanceof MixedTracingError) {
7666
7705
  throw setupError;
@@ -8059,7 +8098,7 @@ var Bitfab = class {
8059
8098
  });
8060
8099
  } finally {
8061
8100
  activeTraceStates.delete(traceId);
8062
- forgetTraceMetadata(traceId);
8101
+ retireTraceMetadata(traceId);
8063
8102
  }
8064
8103
  return traceId;
8065
8104
  }
@@ -8105,7 +8144,7 @@ var Bitfab = class {
8105
8144
  await flushTraces2(3e4);
8106
8145
  } finally {
8107
8146
  unrecorded = activeTraceStates.delete(traceId);
8108
- forgetTraceMetadata(traceId);
8147
+ retireTraceMetadata(traceId);
8109
8148
  }
8110
8149
  }
8111
8150
  if (unrecorded) {