bitfab 0.51.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.
- package/dist/{chunk-WBV4YW7X.js → chunk-4OCHRRLT.js} +40 -3
- package/dist/chunk-4OCHRRLT.js.map +1 -0
- package/dist/{chunk-TCOMLVHK.js → chunk-6SYDHA4R.js} +2 -2
- package/dist/{chunk-4Z5FCOMO.js → chunk-SPJPNJEW.js} +63 -3
- package/dist/chunk-SPJPNJEW.js.map +1 -0
- package/dist/{chunk-2RAX75MI.js → chunk-XEARN7AS.js} +41 -19
- package/dist/chunk-XEARN7AS.js.map +1 -0
- package/dist/{http-CS565CIX.js → http-UU27W3YQ.js} +2 -2
- package/dist/{http-RQXNGCUQ.js → http-X6ZM4GT4.js} +2 -2
- package/dist/index.cjs +100 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -3
- package/dist/index.d.ts +12 -3
- package/dist/index.js +3 -3
- package/dist/node.cjs +100 -15
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +3 -3
- package/dist/{replay-77T5PFOU.js → replay-RHMCXWRK.js} +3 -3
- package/dist/replayCli.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-2RAX75MI.js.map +0 -1
- package/dist/chunk-4Z5FCOMO.js.map +0 -1
- package/dist/chunk-WBV4YW7X.js.map +0 -1
- /package/dist/{chunk-TCOMLVHK.js.map → chunk-6SYDHA4R.js.map} +0 -0
- /package/dist/{http-CS565CIX.js.map → http-UU27W3YQ.js.map} +0 -0
- /package/dist/{http-RQXNGCUQ.js.map → http-X6ZM4GT4.js.map} +0 -0
- /package/dist/{replay-77T5PFOU.js.map → replay-RHMCXWRK.js.map} +0 -0
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
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-
|
|
20
|
+
//# sourceMappingURL=http-UU27W3YQ.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
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-
|
|
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.
|
|
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(
|
|
1891
|
+
sendExternalTrace(rawPayload) {
|
|
1892
|
+
const payload = mergeCallerMetadataIntoTracePayload(rawPayload);
|
|
1828
1893
|
this.getTraceTransport()?.submit(
|
|
1829
1894
|
"external_trace",
|
|
1830
1895
|
{
|
|
@@ -3325,7 +3390,8 @@ __export(index_exports, {
|
|
|
3325
3390
|
module.exports = __toCommonJS(index_exports);
|
|
3326
3391
|
|
|
3327
3392
|
// src/assertions.ts
|
|
3328
|
-
|
|
3393
|
+
var ASSERTIONS_PATH = "/api/sdk/traces/assertions";
|
|
3394
|
+
function traceAssertionsPath(traceId, suffix = "") {
|
|
3329
3395
|
return `/api/sdk/traces/${encodeURIComponent(traceId)}/assertions${suffix}`;
|
|
3330
3396
|
}
|
|
3331
3397
|
var TracesClient = class {
|
|
@@ -3333,18 +3399,29 @@ var TracesClient = class {
|
|
|
3333
3399
|
this.httpClient = httpClient;
|
|
3334
3400
|
}
|
|
3335
3401
|
async getAssertions(traceId) {
|
|
3336
|
-
return this.httpClient.get(
|
|
3402
|
+
return this.httpClient.get(
|
|
3403
|
+
traceAssertionsPath(traceId)
|
|
3404
|
+
);
|
|
3337
3405
|
}
|
|
3338
3406
|
async saveAssertions(params) {
|
|
3339
|
-
|
|
3340
|
-
assertions: params.assertions,
|
|
3407
|
+
return this.saveAssertionsAll({
|
|
3408
|
+
updates: [{ traceId: params.traceId, assertions: params.assertions }],
|
|
3409
|
+
source: params.source
|
|
3410
|
+
});
|
|
3411
|
+
}
|
|
3412
|
+
async saveAssertionsAll(params) {
|
|
3413
|
+
if (params.updates.length === 0) {
|
|
3414
|
+
return [];
|
|
3415
|
+
}
|
|
3416
|
+
const response = await this.httpClient.request(ASSERTIONS_PATH, {
|
|
3417
|
+
updates: params.updates,
|
|
3341
3418
|
source: params.source ?? "agent"
|
|
3342
3419
|
});
|
|
3343
3420
|
return response.assertions;
|
|
3344
3421
|
}
|
|
3345
3422
|
async archiveAssertions(params) {
|
|
3346
3423
|
const response = await this.httpClient.request(
|
|
3347
|
-
|
|
3424
|
+
traceAssertionsPath(params.traceId, "/archive"),
|
|
3348
3425
|
{ assertionIds: params.assertionIds }
|
|
3349
3426
|
);
|
|
3350
3427
|
return response.archived;
|
|
@@ -5697,6 +5774,7 @@ function runWithSeedContext(ctx, fn) {
|
|
|
5697
5774
|
|
|
5698
5775
|
// src/client.ts
|
|
5699
5776
|
init_serialize();
|
|
5777
|
+
init_traceMetadata();
|
|
5700
5778
|
|
|
5701
5779
|
// src/tracing.ts
|
|
5702
5780
|
init_constants();
|
|
@@ -6377,8 +6455,7 @@ function getCurrentTrace() {
|
|
|
6377
6455
|
if (typeof metadata !== "object" || metadata === null) {
|
|
6378
6456
|
return;
|
|
6379
6457
|
}
|
|
6380
|
-
|
|
6381
|
-
traceState.metadata = { ...traceState.metadata, ...metadata };
|
|
6458
|
+
recordCallerTraceMetadata(traceId, metadata);
|
|
6382
6459
|
} catch {
|
|
6383
6460
|
}
|
|
6384
6461
|
},
|
|
@@ -7371,7 +7448,7 @@ var Bitfab = class {
|
|
|
7371
7448
|
endedAt,
|
|
7372
7449
|
sessionId: traceState?.sessionId,
|
|
7373
7450
|
name: traceState?.name,
|
|
7374
|
-
metadata:
|
|
7451
|
+
metadata: callerTraceMetadata(traceId),
|
|
7375
7452
|
contexts: traceState?.contexts ?? [],
|
|
7376
7453
|
testRunId: traceState?.testRunId,
|
|
7377
7454
|
inputSourceTraceId: traceState?.inputSourceTraceId,
|
|
@@ -7395,6 +7472,7 @@ var Bitfab = class {
|
|
|
7395
7472
|
}
|
|
7396
7473
|
});
|
|
7397
7474
|
activeTraceStates.delete(traceId);
|
|
7475
|
+
forgetTraceMetadata(traceId);
|
|
7398
7476
|
}
|
|
7399
7477
|
} catch {
|
|
7400
7478
|
}
|
|
@@ -7587,6 +7665,7 @@ var Bitfab = class {
|
|
|
7587
7665
|
} catch (setupError) {
|
|
7588
7666
|
if (registeredTraceId) {
|
|
7589
7667
|
activeTraceStates.delete(registeredTraceId);
|
|
7668
|
+
forgetTraceMetadata(registeredTraceId);
|
|
7590
7669
|
}
|
|
7591
7670
|
if (setupError instanceof MixedTracingError) {
|
|
7592
7671
|
throw setupError;
|
|
@@ -7947,14 +8026,16 @@ var Bitfab = class {
|
|
|
7947
8026
|
}
|
|
7948
8027
|
const traceId = randomUuid();
|
|
7949
8028
|
const startedAt = nowIsoTimestamp();
|
|
8029
|
+
if (options.metadata !== void 0) {
|
|
8030
|
+
recordCallerTraceMetadata(traceId, options.metadata);
|
|
8031
|
+
}
|
|
7950
8032
|
activeTraceStates.set(traceId, {
|
|
7951
8033
|
traceId,
|
|
7952
8034
|
startedAt,
|
|
7953
8035
|
contexts: [],
|
|
7954
8036
|
ingestionType: "seeded",
|
|
7955
8037
|
...options.sessionId !== void 0 && { sessionId: options.sessionId },
|
|
7956
|
-
...options.name !== void 0 && { name: options.name }
|
|
7957
|
-
...options.metadata !== void 0 && { metadata: options.metadata }
|
|
8038
|
+
...options.name !== void 0 && { name: options.name }
|
|
7958
8039
|
});
|
|
7959
8040
|
try {
|
|
7960
8041
|
this.sendWrapperSpan({
|
|
@@ -7977,12 +8058,13 @@ var Bitfab = class {
|
|
|
7977
8058
|
endedAt: startedAt,
|
|
7978
8059
|
sessionId: options.sessionId,
|
|
7979
8060
|
name: options.name,
|
|
7980
|
-
metadata:
|
|
8061
|
+
metadata: callerTraceMetadata(traceId),
|
|
7981
8062
|
contexts: [],
|
|
7982
8063
|
ingestionType: "seeded"
|
|
7983
8064
|
});
|
|
7984
8065
|
} finally {
|
|
7985
8066
|
activeTraceStates.delete(traceId);
|
|
8067
|
+
forgetTraceMetadata(traceId);
|
|
7986
8068
|
}
|
|
7987
8069
|
return traceId;
|
|
7988
8070
|
}
|
|
@@ -8007,14 +8089,16 @@ var Bitfab = class {
|
|
|
8007
8089
|
}
|
|
8008
8090
|
await seedContextReady;
|
|
8009
8091
|
const traceId = randomUuid();
|
|
8092
|
+
if (options?.metadata !== void 0) {
|
|
8093
|
+
recordCallerTraceMetadata(traceId, options.metadata);
|
|
8094
|
+
}
|
|
8010
8095
|
activeTraceStates.set(traceId, {
|
|
8011
8096
|
traceId,
|
|
8012
8097
|
startedAt: nowIsoTimestamp(),
|
|
8013
8098
|
contexts: [],
|
|
8014
8099
|
ingestionType: "seeded",
|
|
8015
8100
|
...options?.sessionId !== void 0 && { sessionId: options.sessionId },
|
|
8016
|
-
...options?.name !== void 0 && { name: options.name }
|
|
8017
|
-
...options?.metadata !== void 0 && { metadata: options.metadata }
|
|
8101
|
+
...options?.name !== void 0 && { name: options.name }
|
|
8018
8102
|
});
|
|
8019
8103
|
const args = options?.args ?? [];
|
|
8020
8104
|
let unrecorded = true;
|
|
@@ -8026,6 +8110,7 @@ var Bitfab = class {
|
|
|
8026
8110
|
await flushTraces2(3e4);
|
|
8027
8111
|
} finally {
|
|
8028
8112
|
unrecorded = activeTraceStates.delete(traceId);
|
|
8113
|
+
forgetTraceMetadata(traceId);
|
|
8029
8114
|
}
|
|
8030
8115
|
}
|
|
8031
8116
|
if (unrecorded) {
|