@bitfab/sdk 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-RGC7IEOI.js → chunk-6DIR65JW.js} +63 -3
- package/dist/chunk-6DIR65JW.js.map +1 -0
- package/dist/{chunk-DNYZJLNY.js → chunk-A5UGSRMK.js} +2 -2
- package/dist/{chunk-4CLJF2DZ.js → chunk-UQLT25PG.js} +40 -3
- package/dist/chunk-UQLT25PG.js.map +1 -0
- package/dist/{chunk-VXD27AJ3.js → chunk-XAT6WLCS.js} +41 -19
- package/dist/chunk-XAT6WLCS.js.map +1 -0
- package/dist/{http-HLRWCSFF.js → http-B2AK43BN.js} +2 -2
- package/dist/{http-AKFJONE7.js → http-RI4YCAS2.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-ISXRCXUP.js → replay-24F3F5RD.js} +3 -3
- package/dist/replayCli.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-4CLJF2DZ.js.map +0 -1
- package/dist/chunk-RGC7IEOI.js.map +0 -1
- package/dist/chunk-VXD27AJ3.js.map +0 -1
- /package/dist/{chunk-DNYZJLNY.js.map → chunk-A5UGSRMK.js.map} +0 -0
- /package/dist/{http-AKFJONE7.js.map → http-B2AK43BN.js.map} +0 -0
- /package/dist/{http-HLRWCSFF.js.map → http-RI4YCAS2.js.map} +0 -0
- /package/dist/{replay-ISXRCXUP.js.map → replay-24F3F5RD.js.map} +0 -0
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6DIR65JW.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-B2AK43BN.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
flushTraces,
|
|
7
7
|
parseRetryAfterMs,
|
|
8
8
|
serializePayloadBody
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UQLT25PG.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-RI4YCAS2.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.
|
|
45
|
+
__version__ = "0.52.1";
|
|
46
46
|
__packageName__ = "@bitfab/sdk";
|
|
47
47
|
}
|
|
48
48
|
});
|
|
@@ -534,6 +534,69 @@ var init_serializePayload = __esm({
|
|
|
534
534
|
}
|
|
535
535
|
});
|
|
536
536
|
|
|
537
|
+
// src/traceMetadata.ts
|
|
538
|
+
function recordCallerTraceMetadata(traceId, metadata) {
|
|
539
|
+
if (typeof traceId !== "string" || traceId === "") {
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
if (typeof metadata !== "object" || metadata === null) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
if (Object.keys(metadata).length === 0) {
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
callerMetadata.set(traceId, { ...callerMetadata.get(traceId), ...metadata });
|
|
549
|
+
}
|
|
550
|
+
function callerTraceMetadata(traceId) {
|
|
551
|
+
const recorded = callerMetadata.get(traceId);
|
|
552
|
+
return recorded ? { ...recorded } : void 0;
|
|
553
|
+
}
|
|
554
|
+
function forgetTraceMetadata(traceId) {
|
|
555
|
+
callerMetadata.delete(traceId);
|
|
556
|
+
derivedMetadata.delete(traceId);
|
|
557
|
+
}
|
|
558
|
+
function mergeCallerMetadataIntoTracePayload(payload) {
|
|
559
|
+
const externalTrace = payload.externalTrace;
|
|
560
|
+
if (typeof externalTrace !== "object" || externalTrace === null) {
|
|
561
|
+
return payload;
|
|
562
|
+
}
|
|
563
|
+
const external = externalTrace;
|
|
564
|
+
const traceId = typeof payload.id === "string" && payload.id !== "" ? payload.id : external.id;
|
|
565
|
+
if (typeof traceId !== "string" || traceId === "") {
|
|
566
|
+
return payload;
|
|
567
|
+
}
|
|
568
|
+
const caller = callerMetadata.get(traceId);
|
|
569
|
+
if (!caller) {
|
|
570
|
+
return payload;
|
|
571
|
+
}
|
|
572
|
+
const derived = derivedMetadata.get(traceId) ?? {};
|
|
573
|
+
const exported = external.metadata;
|
|
574
|
+
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
|
+
);
|
|
584
|
+
}
|
|
585
|
+
return {
|
|
586
|
+
...payload,
|
|
587
|
+
externalTrace: { ...external, metadata: { ...derived, ...caller } }
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
var callerMetadata, derivedMetadata;
|
|
591
|
+
var init_traceMetadata = __esm({
|
|
592
|
+
"src/traceMetadata.ts"() {
|
|
593
|
+
"use strict";
|
|
594
|
+
init_warnOnce();
|
|
595
|
+
callerMetadata = /* @__PURE__ */ new Map();
|
|
596
|
+
derivedMetadata = /* @__PURE__ */ new Map();
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
|
|
537
600
|
// src/transportTypes.ts
|
|
538
601
|
var DeliveryError;
|
|
539
602
|
var init_transportTypes = __esm({
|
|
@@ -1352,6 +1415,7 @@ var init_http = __esm({
|
|
|
1352
1415
|
init_errors();
|
|
1353
1416
|
init_replayContext();
|
|
1354
1417
|
init_serializePayload();
|
|
1418
|
+
init_traceMetadata();
|
|
1355
1419
|
init_transport();
|
|
1356
1420
|
init_transportTypes();
|
|
1357
1421
|
init_unrefTimer();
|
|
@@ -1815,7 +1879,8 @@ var init_http = __esm({
|
|
|
1815
1879
|
* {@link HttpClient.sendExternalSpan}; replay confirms persistence with the
|
|
1816
1880
|
* server-authoritative barrier in `replay.ts`, not by awaiting this call.
|
|
1817
1881
|
*/
|
|
1818
|
-
sendExternalTrace(
|
|
1882
|
+
sendExternalTrace(rawPayload) {
|
|
1883
|
+
const payload = mergeCallerMetadataIntoTracePayload(rawPayload);
|
|
1819
1884
|
this.getTraceTransport()?.submit(
|
|
1820
1885
|
"external_trace",
|
|
1821
1886
|
{
|
|
@@ -3316,7 +3381,8 @@ __export(index_exports, {
|
|
|
3316
3381
|
module.exports = __toCommonJS(index_exports);
|
|
3317
3382
|
|
|
3318
3383
|
// src/assertions.ts
|
|
3319
|
-
|
|
3384
|
+
var ASSERTIONS_PATH = "/api/sdk/traces/assertions";
|
|
3385
|
+
function traceAssertionsPath(traceId, suffix = "") {
|
|
3320
3386
|
return `/api/sdk/traces/${encodeURIComponent(traceId)}/assertions${suffix}`;
|
|
3321
3387
|
}
|
|
3322
3388
|
var TracesClient = class {
|
|
@@ -3324,18 +3390,29 @@ var TracesClient = class {
|
|
|
3324
3390
|
this.httpClient = httpClient;
|
|
3325
3391
|
}
|
|
3326
3392
|
async getAssertions(traceId) {
|
|
3327
|
-
return this.httpClient.get(
|
|
3393
|
+
return this.httpClient.get(
|
|
3394
|
+
traceAssertionsPath(traceId)
|
|
3395
|
+
);
|
|
3328
3396
|
}
|
|
3329
3397
|
async saveAssertions(params) {
|
|
3330
|
-
|
|
3331
|
-
assertions: params.assertions,
|
|
3398
|
+
return this.saveAssertionsAll({
|
|
3399
|
+
updates: [{ traceId: params.traceId, assertions: params.assertions }],
|
|
3400
|
+
source: params.source
|
|
3401
|
+
});
|
|
3402
|
+
}
|
|
3403
|
+
async saveAssertionsAll(params) {
|
|
3404
|
+
if (params.updates.length === 0) {
|
|
3405
|
+
return [];
|
|
3406
|
+
}
|
|
3407
|
+
const response = await this.httpClient.request(ASSERTIONS_PATH, {
|
|
3408
|
+
updates: params.updates,
|
|
3332
3409
|
source: params.source ?? "agent"
|
|
3333
3410
|
});
|
|
3334
3411
|
return response.assertions;
|
|
3335
3412
|
}
|
|
3336
3413
|
async archiveAssertions(params) {
|
|
3337
3414
|
const response = await this.httpClient.request(
|
|
3338
|
-
|
|
3415
|
+
traceAssertionsPath(params.traceId, "/archive"),
|
|
3339
3416
|
{ assertionIds: params.assertionIds }
|
|
3340
3417
|
);
|
|
3341
3418
|
return response.archived;
|
|
@@ -5688,6 +5765,7 @@ function runWithSeedContext(ctx, fn) {
|
|
|
5688
5765
|
|
|
5689
5766
|
// src/client.ts
|
|
5690
5767
|
init_serialize();
|
|
5768
|
+
init_traceMetadata();
|
|
5691
5769
|
|
|
5692
5770
|
// src/tracing.ts
|
|
5693
5771
|
init_constants();
|
|
@@ -6368,8 +6446,7 @@ function getCurrentTrace() {
|
|
|
6368
6446
|
if (typeof metadata !== "object" || metadata === null) {
|
|
6369
6447
|
return;
|
|
6370
6448
|
}
|
|
6371
|
-
|
|
6372
|
-
traceState.metadata = { ...traceState.metadata, ...metadata };
|
|
6449
|
+
recordCallerTraceMetadata(traceId, metadata);
|
|
6373
6450
|
} catch {
|
|
6374
6451
|
}
|
|
6375
6452
|
},
|
|
@@ -7362,7 +7439,7 @@ var Bitfab = class {
|
|
|
7362
7439
|
endedAt,
|
|
7363
7440
|
sessionId: traceState?.sessionId,
|
|
7364
7441
|
name: traceState?.name,
|
|
7365
|
-
metadata:
|
|
7442
|
+
metadata: callerTraceMetadata(traceId),
|
|
7366
7443
|
contexts: traceState?.contexts ?? [],
|
|
7367
7444
|
testRunId: traceState?.testRunId,
|
|
7368
7445
|
inputSourceTraceId: traceState?.inputSourceTraceId,
|
|
@@ -7386,6 +7463,7 @@ var Bitfab = class {
|
|
|
7386
7463
|
}
|
|
7387
7464
|
});
|
|
7388
7465
|
activeTraceStates.delete(traceId);
|
|
7466
|
+
forgetTraceMetadata(traceId);
|
|
7389
7467
|
}
|
|
7390
7468
|
} catch {
|
|
7391
7469
|
}
|
|
@@ -7578,6 +7656,7 @@ var Bitfab = class {
|
|
|
7578
7656
|
} catch (setupError) {
|
|
7579
7657
|
if (registeredTraceId) {
|
|
7580
7658
|
activeTraceStates.delete(registeredTraceId);
|
|
7659
|
+
forgetTraceMetadata(registeredTraceId);
|
|
7581
7660
|
}
|
|
7582
7661
|
if (setupError instanceof MixedTracingError) {
|
|
7583
7662
|
throw setupError;
|
|
@@ -7938,14 +8017,16 @@ var Bitfab = class {
|
|
|
7938
8017
|
}
|
|
7939
8018
|
const traceId = randomUuid();
|
|
7940
8019
|
const startedAt = nowIsoTimestamp();
|
|
8020
|
+
if (options.metadata !== void 0) {
|
|
8021
|
+
recordCallerTraceMetadata(traceId, options.metadata);
|
|
8022
|
+
}
|
|
7941
8023
|
activeTraceStates.set(traceId, {
|
|
7942
8024
|
traceId,
|
|
7943
8025
|
startedAt,
|
|
7944
8026
|
contexts: [],
|
|
7945
8027
|
ingestionType: "seeded",
|
|
7946
8028
|
...options.sessionId !== void 0 && { sessionId: options.sessionId },
|
|
7947
|
-
...options.name !== void 0 && { name: options.name }
|
|
7948
|
-
...options.metadata !== void 0 && { metadata: options.metadata }
|
|
8029
|
+
...options.name !== void 0 && { name: options.name }
|
|
7949
8030
|
});
|
|
7950
8031
|
try {
|
|
7951
8032
|
this.sendWrapperSpan({
|
|
@@ -7968,12 +8049,13 @@ var Bitfab = class {
|
|
|
7968
8049
|
endedAt: startedAt,
|
|
7969
8050
|
sessionId: options.sessionId,
|
|
7970
8051
|
name: options.name,
|
|
7971
|
-
metadata:
|
|
8052
|
+
metadata: callerTraceMetadata(traceId),
|
|
7972
8053
|
contexts: [],
|
|
7973
8054
|
ingestionType: "seeded"
|
|
7974
8055
|
});
|
|
7975
8056
|
} finally {
|
|
7976
8057
|
activeTraceStates.delete(traceId);
|
|
8058
|
+
forgetTraceMetadata(traceId);
|
|
7977
8059
|
}
|
|
7978
8060
|
return traceId;
|
|
7979
8061
|
}
|
|
@@ -7998,14 +8080,16 @@ var Bitfab = class {
|
|
|
7998
8080
|
}
|
|
7999
8081
|
await seedContextReady;
|
|
8000
8082
|
const traceId = randomUuid();
|
|
8083
|
+
if (options?.metadata !== void 0) {
|
|
8084
|
+
recordCallerTraceMetadata(traceId, options.metadata);
|
|
8085
|
+
}
|
|
8001
8086
|
activeTraceStates.set(traceId, {
|
|
8002
8087
|
traceId,
|
|
8003
8088
|
startedAt: nowIsoTimestamp(),
|
|
8004
8089
|
contexts: [],
|
|
8005
8090
|
ingestionType: "seeded",
|
|
8006
8091
|
...options?.sessionId !== void 0 && { sessionId: options.sessionId },
|
|
8007
|
-
...options?.name !== void 0 && { name: options.name }
|
|
8008
|
-
...options?.metadata !== void 0 && { metadata: options.metadata }
|
|
8092
|
+
...options?.name !== void 0 && { name: options.name }
|
|
8009
8093
|
});
|
|
8010
8094
|
const args = options?.args ?? [];
|
|
8011
8095
|
let unrecorded = true;
|
|
@@ -8017,6 +8101,7 @@ var Bitfab = class {
|
|
|
8017
8101
|
await flushTraces2(3e4);
|
|
8018
8102
|
} finally {
|
|
8019
8103
|
unrecorded = activeTraceStates.delete(traceId);
|
|
8104
|
+
forgetTraceMetadata(traceId);
|
|
8020
8105
|
}
|
|
8021
8106
|
}
|
|
8022
8107
|
if (unrecorded) {
|