bitfab 0.52.0 → 0.52.1

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-6M3EOIRH.js";
9
+ } from "./chunk-SPJPNJEW.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-EBBRHSDB.js.map
20
+ //# sourceMappingURL=http-UU27W3YQ.js.map
@@ -6,7 +6,7 @@ import {
6
6
  flushTraces,
7
7
  parseRetryAfterMs,
8
8
  serializePayloadBody
9
- } from "./chunk-K4XVZ7BD.js";
9
+ } from "./chunk-4OCHRRLT.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-OVESYGOV.js.map
19
+ //# sourceMappingURL=http-X6ZM4GT4.js.map
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.0";
54
+ __version__ = "0.52.1";
55
55
  __packageName__ = "bitfab";
56
56
  }
57
57
  });
@@ -543,6 +543,69 @@ var init_serializePayload = __esm({
543
543
  }
544
544
  });
545
545
 
546
+ // src/traceMetadata.ts
547
+ function recordCallerTraceMetadata(traceId, metadata) {
548
+ if (typeof traceId !== "string" || traceId === "") {
549
+ return;
550
+ }
551
+ if (typeof metadata !== "object" || metadata === null) {
552
+ return;
553
+ }
554
+ if (Object.keys(metadata).length === 0) {
555
+ return;
556
+ }
557
+ callerMetadata.set(traceId, { ...callerMetadata.get(traceId), ...metadata });
558
+ }
559
+ function callerTraceMetadata(traceId) {
560
+ const recorded = callerMetadata.get(traceId);
561
+ return recorded ? { ...recorded } : void 0;
562
+ }
563
+ function forgetTraceMetadata(traceId) {
564
+ callerMetadata.delete(traceId);
565
+ derivedMetadata.delete(traceId);
566
+ }
567
+ function mergeCallerMetadataIntoTracePayload(payload) {
568
+ const externalTrace = payload.externalTrace;
569
+ if (typeof externalTrace !== "object" || externalTrace === null) {
570
+ return payload;
571
+ }
572
+ const external = externalTrace;
573
+ const traceId = typeof payload.id === "string" && payload.id !== "" ? payload.id : external.id;
574
+ if (typeof traceId !== "string" || traceId === "") {
575
+ return payload;
576
+ }
577
+ const caller = callerMetadata.get(traceId);
578
+ if (!caller) {
579
+ return payload;
580
+ }
581
+ const derived = derivedMetadata.get(traceId) ?? {};
582
+ const exported = external.metadata;
583
+ 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
+ );
593
+ }
594
+ return {
595
+ ...payload,
596
+ externalTrace: { ...external, metadata: { ...derived, ...caller } }
597
+ };
598
+ }
599
+ var callerMetadata, derivedMetadata;
600
+ var init_traceMetadata = __esm({
601
+ "src/traceMetadata.ts"() {
602
+ "use strict";
603
+ init_warnOnce();
604
+ callerMetadata = /* @__PURE__ */ new Map();
605
+ derivedMetadata = /* @__PURE__ */ new Map();
606
+ }
607
+ });
608
+
546
609
  // src/transportTypes.ts
547
610
  var DeliveryError;
548
611
  var init_transportTypes = __esm({
@@ -1361,6 +1424,7 @@ var init_http = __esm({
1361
1424
  init_errors();
1362
1425
  init_replayContext();
1363
1426
  init_serializePayload();
1427
+ init_traceMetadata();
1364
1428
  init_transport();
1365
1429
  init_transportTypes();
1366
1430
  init_unrefTimer();
@@ -1824,7 +1888,8 @@ var init_http = __esm({
1824
1888
  * {@link HttpClient.sendExternalSpan}; replay confirms persistence with the
1825
1889
  * server-authoritative barrier in `replay.ts`, not by awaiting this call.
1826
1890
  */
1827
- sendExternalTrace(payload) {
1891
+ sendExternalTrace(rawPayload) {
1892
+ const payload = mergeCallerMetadataIntoTracePayload(rawPayload);
1828
1893
  this.getTraceTransport()?.submit(
1829
1894
  "external_trace",
1830
1895
  {
@@ -5709,6 +5774,7 @@ function runWithSeedContext(ctx, fn) {
5709
5774
 
5710
5775
  // src/client.ts
5711
5776
  init_serialize();
5777
+ init_traceMetadata();
5712
5778
 
5713
5779
  // src/tracing.ts
5714
5780
  init_constants();
@@ -6389,8 +6455,7 @@ function getCurrentTrace() {
6389
6455
  if (typeof metadata !== "object" || metadata === null) {
6390
6456
  return;
6391
6457
  }
6392
- const traceState = getOrCreateTraceState();
6393
- traceState.metadata = { ...traceState.metadata, ...metadata };
6458
+ recordCallerTraceMetadata(traceId, metadata);
6394
6459
  } catch {
6395
6460
  }
6396
6461
  },
@@ -7383,7 +7448,7 @@ var Bitfab = class {
7383
7448
  endedAt,
7384
7449
  sessionId: traceState?.sessionId,
7385
7450
  name: traceState?.name,
7386
- metadata: traceState?.metadata,
7451
+ metadata: callerTraceMetadata(traceId),
7387
7452
  contexts: traceState?.contexts ?? [],
7388
7453
  testRunId: traceState?.testRunId,
7389
7454
  inputSourceTraceId: traceState?.inputSourceTraceId,
@@ -7407,6 +7472,7 @@ var Bitfab = class {
7407
7472
  }
7408
7473
  });
7409
7474
  activeTraceStates.delete(traceId);
7475
+ forgetTraceMetadata(traceId);
7410
7476
  }
7411
7477
  } catch {
7412
7478
  }
@@ -7599,6 +7665,7 @@ var Bitfab = class {
7599
7665
  } catch (setupError) {
7600
7666
  if (registeredTraceId) {
7601
7667
  activeTraceStates.delete(registeredTraceId);
7668
+ forgetTraceMetadata(registeredTraceId);
7602
7669
  }
7603
7670
  if (setupError instanceof MixedTracingError) {
7604
7671
  throw setupError;
@@ -7959,14 +8026,16 @@ var Bitfab = class {
7959
8026
  }
7960
8027
  const traceId = randomUuid();
7961
8028
  const startedAt = nowIsoTimestamp();
8029
+ if (options.metadata !== void 0) {
8030
+ recordCallerTraceMetadata(traceId, options.metadata);
8031
+ }
7962
8032
  activeTraceStates.set(traceId, {
7963
8033
  traceId,
7964
8034
  startedAt,
7965
8035
  contexts: [],
7966
8036
  ingestionType: "seeded",
7967
8037
  ...options.sessionId !== void 0 && { sessionId: options.sessionId },
7968
- ...options.name !== void 0 && { name: options.name },
7969
- ...options.metadata !== void 0 && { metadata: options.metadata }
8038
+ ...options.name !== void 0 && { name: options.name }
7970
8039
  });
7971
8040
  try {
7972
8041
  this.sendWrapperSpan({
@@ -7989,12 +8058,13 @@ var Bitfab = class {
7989
8058
  endedAt: startedAt,
7990
8059
  sessionId: options.sessionId,
7991
8060
  name: options.name,
7992
- metadata: options.metadata,
8061
+ metadata: callerTraceMetadata(traceId),
7993
8062
  contexts: [],
7994
8063
  ingestionType: "seeded"
7995
8064
  });
7996
8065
  } finally {
7997
8066
  activeTraceStates.delete(traceId);
8067
+ forgetTraceMetadata(traceId);
7998
8068
  }
7999
8069
  return traceId;
8000
8070
  }
@@ -8019,14 +8089,16 @@ var Bitfab = class {
8019
8089
  }
8020
8090
  await seedContextReady;
8021
8091
  const traceId = randomUuid();
8092
+ if (options?.metadata !== void 0) {
8093
+ recordCallerTraceMetadata(traceId, options.metadata);
8094
+ }
8022
8095
  activeTraceStates.set(traceId, {
8023
8096
  traceId,
8024
8097
  startedAt: nowIsoTimestamp(),
8025
8098
  contexts: [],
8026
8099
  ingestionType: "seeded",
8027
8100
  ...options?.sessionId !== void 0 && { sessionId: options.sessionId },
8028
- ...options?.name !== void 0 && { name: options.name },
8029
- ...options?.metadata !== void 0 && { metadata: options.metadata }
8101
+ ...options?.name !== void 0 && { name: options.name }
8030
8102
  });
8031
8103
  const args = options?.args ?? [];
8032
8104
  let unrecorded = true;
@@ -8038,6 +8110,7 @@ var Bitfab = class {
8038
8110
  await flushTraces2(3e4);
8039
8111
  } finally {
8040
8112
  unrecorded = activeTraceStates.delete(traceId);
8113
+ forgetTraceMetadata(traceId);
8041
8114
  }
8042
8115
  }
8043
8116
  if (unrecorded) {