@bitfab/sdk 0.52.1 → 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.
@@ -6,7 +6,7 @@ import {
6
6
  flushTraces,
7
7
  parseRetryAfterMs,
8
8
  serializePayloadBody
9
- } from "./chunk-6DIR65JW.js";
9
+ } from "./chunk-ODF4JSYX.js";
10
10
  import "./chunk-H6LZRFMN.js";
11
11
  export {
12
12
  BitfabError,
@@ -17,4 +17,4 @@ export {
17
17
  parseRetryAfterMs,
18
18
  serializePayloadBody
19
19
  };
20
- //# sourceMappingURL=http-B2AK43BN.js.map
20
+ //# sourceMappingURL=http-3MPIPYKC.js.map
@@ -6,7 +6,7 @@ import {
6
6
  flushTraces,
7
7
  parseRetryAfterMs,
8
8
  serializePayloadBody
9
- } from "./chunk-UQLT25PG.js";
9
+ } from "./chunk-QHA46TT6.js";
10
10
  export {
11
11
  BitfabError,
12
12
  HttpClient,
@@ -16,4 +16,4 @@ export {
16
16
  parseRetryAfterMs,
17
17
  serializePayloadBody
18
18
  };
19
- //# sourceMappingURL=http-RI4YCAS2.js.map
19
+ //# sourceMappingURL=http-ZW5THLTW.js.map
package/dist/index.cjs CHANGED
@@ -42,7 +42,7 @@ var __version__, __packageName__;
42
42
  var init_version_generated = __esm({
43
43
  "src/version.generated.ts"() {
44
44
  "use strict";
45
- __version__ = "0.52.1";
45
+ __version__ = "0.52.3";
46
46
  __packageName__ = "@bitfab/sdk";
47
47
  }
48
48
  });
@@ -385,15 +385,18 @@ var init_payloadBudget = __esm({
385
385
  });
386
386
 
387
387
  // src/warnOnce.ts
388
+ function warn(message) {
389
+ try {
390
+ console.warn(`[bitfab] ${message}`);
391
+ } catch {
392
+ }
393
+ }
388
394
  function warnOnce(key, message) {
389
395
  if (warned.has(key)) {
390
396
  return;
391
397
  }
392
398
  warned.add(key);
393
- try {
394
- console.warn(`[bitfab] ${message}`);
395
- } catch {
396
- }
399
+ warn(message);
397
400
  }
398
401
  var warned;
399
402
  var init_warnOnce = __esm({
@@ -535,6 +538,9 @@ var init_serializePayload = __esm({
535
538
  });
536
539
 
537
540
  // src/traceMetadata.ts
541
+ function findRecord(traceId) {
542
+ return activeRecords.get(traceId) ?? completedRecords.get(traceId);
543
+ }
538
544
  function recordCallerTraceMetadata(traceId, metadata) {
539
545
  if (typeof traceId !== "string" || traceId === "") {
540
546
  return;
@@ -545,15 +551,52 @@ function recordCallerTraceMetadata(traceId, metadata) {
545
551
  if (Object.keys(metadata).length === 0) {
546
552
  return;
547
553
  }
548
- callerMetadata.set(traceId, { ...callerMetadata.get(traceId), ...metadata });
554
+ const existing = findRecord(traceId);
555
+ if (existing) {
556
+ Object.assign(existing.caller, metadata);
557
+ return;
558
+ }
559
+ activeRecords.set(traceId, {
560
+ caller: { ...metadata },
561
+ derived: {},
562
+ warnedKeys: /* @__PURE__ */ new Set()
563
+ });
549
564
  }
550
565
  function callerTraceMetadata(traceId) {
551
- const recorded = callerMetadata.get(traceId);
552
- return recorded ? { ...recorded } : void 0;
566
+ const record = findRecord(traceId);
567
+ if (!record || Object.keys(record.caller).length === 0) {
568
+ return void 0;
569
+ }
570
+ return { ...record.caller };
553
571
  }
554
- function forgetTraceMetadata(traceId) {
555
- callerMetadata.delete(traceId);
556
- derivedMetadata.delete(traceId);
572
+ function retireTraceMetadata(traceId) {
573
+ const record = activeRecords.get(traceId);
574
+ if (!record) {
575
+ return;
576
+ }
577
+ activeRecords.delete(traceId);
578
+ completedRecords.set(traceId, record);
579
+ while (completedRecords.size > RETAINED_COMPLETED_TRACES) {
580
+ const oldest = completedRecords.keys().next();
581
+ if (oldest.done) {
582
+ return;
583
+ }
584
+ completedRecords.delete(oldest.value);
585
+ }
586
+ }
587
+ function warnAboutShadowedKeys(traceId, record) {
588
+ const shadowed = Object.keys(record.derived).filter(
589
+ (key) => key in record.caller && record.caller[key] !== record.derived[key] && !record.warnedKeys.has(key)
590
+ ).sort();
591
+ if (shadowed.length === 0) {
592
+ return;
593
+ }
594
+ for (const key of shadowed) {
595
+ record.warnedKeys.add(key);
596
+ }
597
+ warn(
598
+ `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.`
599
+ );
557
600
  }
558
601
  function mergeCallerMetadataIntoTracePayload(payload) {
559
602
  const externalTrace = payload.externalTrace;
@@ -565,35 +608,31 @@ function mergeCallerMetadataIntoTracePayload(payload) {
565
608
  if (typeof traceId !== "string" || traceId === "") {
566
609
  return payload;
567
610
  }
568
- const caller = callerMetadata.get(traceId);
569
- if (!caller) {
611
+ const record = findRecord(traceId);
612
+ if (!record || Object.keys(record.caller).length === 0) {
570
613
  return payload;
571
614
  }
572
- const derived = derivedMetadata.get(traceId) ?? {};
573
615
  const exported = external.metadata;
574
616
  if (typeof exported === "object" && exported !== null) {
575
- Object.assign(derived, exported);
576
- }
577
- derivedMetadata.set(traceId, derived);
578
- const shadowed = Object.keys(derived).filter((key) => key in caller && caller[key] !== derived[key]).sort();
579
- if (shadowed.length > 0) {
580
- warnOnce(
581
- `trace-metadata-shadowed:${shadowed.join(",")}`,
582
- `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.`
583
- );
617
+ Object.assign(record.derived, exported);
584
618
  }
619
+ warnAboutShadowedKeys(traceId, record);
585
620
  return {
586
621
  ...payload,
587
- externalTrace: { ...external, metadata: { ...derived, ...caller } }
622
+ externalTrace: {
623
+ ...external,
624
+ metadata: { ...record.derived, ...record.caller }
625
+ }
588
626
  };
589
627
  }
590
- var callerMetadata, derivedMetadata;
628
+ var RETAINED_COMPLETED_TRACES, activeRecords, completedRecords;
591
629
  var init_traceMetadata = __esm({
592
630
  "src/traceMetadata.ts"() {
593
631
  "use strict";
594
632
  init_warnOnce();
595
- callerMetadata = /* @__PURE__ */ new Map();
596
- derivedMetadata = /* @__PURE__ */ new Map();
633
+ RETAINED_COMPLETED_TRACES = 128;
634
+ activeRecords = /* @__PURE__ */ new Map();
635
+ completedRecords = /* @__PURE__ */ new Map();
597
636
  }
598
637
  });
599
638
 
@@ -2993,11 +3032,6 @@ async function replay(httpClient, serviceUrl, traceFunctionKey, fn, options, reg
2993
3032
  }
2994
3033
  }
2995
3034
  const datasetIds = resolveDatasetIds(options);
2996
- if (options?.traceIds !== void 0 && datasetIds !== void 0) {
2997
- throw new BitfabError(
2998
- "traceIds and datasetIds select different replay sources and cannot be used together."
2999
- );
3000
- }
3001
3035
  if (options?.limit !== void 0 && options?.traceIds !== void 0) {
3002
3036
  try {
3003
3037
  console.warn(
@@ -7463,7 +7497,7 @@ var Bitfab = class {
7463
7497
  }
7464
7498
  });
7465
7499
  activeTraceStates.delete(traceId);
7466
- forgetTraceMetadata(traceId);
7500
+ retireTraceMetadata(traceId);
7467
7501
  }
7468
7502
  } catch {
7469
7503
  }
@@ -7656,7 +7690,7 @@ var Bitfab = class {
7656
7690
  } catch (setupError) {
7657
7691
  if (registeredTraceId) {
7658
7692
  activeTraceStates.delete(registeredTraceId);
7659
- forgetTraceMetadata(registeredTraceId);
7693
+ retireTraceMetadata(registeredTraceId);
7660
7694
  }
7661
7695
  if (setupError instanceof MixedTracingError) {
7662
7696
  throw setupError;
@@ -8055,7 +8089,7 @@ var Bitfab = class {
8055
8089
  });
8056
8090
  } finally {
8057
8091
  activeTraceStates.delete(traceId);
8058
- forgetTraceMetadata(traceId);
8092
+ retireTraceMetadata(traceId);
8059
8093
  }
8060
8094
  return traceId;
8061
8095
  }
@@ -8101,7 +8135,7 @@ var Bitfab = class {
8101
8135
  await flushTraces2(3e4);
8102
8136
  } finally {
8103
8137
  unrecorded = activeTraceStates.delete(traceId);
8104
- forgetTraceMetadata(traceId);
8138
+ retireTraceMetadata(traceId);
8105
8139
  }
8106
8140
  }
8107
8141
  if (unrecorded) {