@bitfab/sdk 0.36.0 → 0.36.2
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-4YTIVUYX.js → chunk-4IY5SZYR.js} +22 -8
- package/dist/chunk-4IY5SZYR.js.map +1 -0
- package/dist/{chunk-JECWMVJG.js → chunk-XZKYSTWH.js} +21 -9
- package/dist/chunk-XZKYSTWH.js.map +1 -0
- package/dist/index.cjs +39 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -6
- package/dist/index.d.ts +23 -6
- package/dist/index.js +2 -2
- package/dist/node.cjs +39 -13
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +2 -2
- package/dist/{replay-CVMULH7T.js → replay-UGABWDPP.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-4YTIVUYX.js.map +0 -1
- package/dist/chunk-JECWMVJG.js.map +0 -1
- /package/dist/{replay-CVMULH7T.js.map → replay-UGABWDPP.js.map} +0 -0
package/dist/index.d.cts
CHANGED
|
@@ -266,9 +266,11 @@ interface ReplayContext {
|
|
|
266
266
|
* obtains `databaseUrl` for this item. Reported on the trace completion inside
|
|
267
267
|
* `db_snapshot_usage` so the server can distinguish "branch was
|
|
268
268
|
* provisioned and exposed" from "branch URL was actually consumed".
|
|
269
|
-
*
|
|
270
|
-
* other means (e.g. a process-isolated runner writing an env
|
|
271
|
-
* must
|
|
269
|
+
* Only an explicit `databaseUrl` read may set it. A path that hands the URL
|
|
270
|
+
* over by other means (e.g. a process-isolated runner writing an env
|
|
271
|
+
* overlay) must leave it alone: setting it there would make every such
|
|
272
|
+
* replay report `accessed` for free, and the flag would stop separating
|
|
273
|
+
* "branch was used" from "branch was offered".
|
|
272
274
|
*/
|
|
273
275
|
dbSnapshotAccessed?: boolean;
|
|
274
276
|
}
|
|
@@ -455,8 +457,11 @@ declare class HttpClient {
|
|
|
455
457
|
/**
|
|
456
458
|
* Fetch an external span by ID.
|
|
457
459
|
* Blocking GET request.
|
|
460
|
+
* The replay view limits rawData to input/output serialization fields.
|
|
458
461
|
*/
|
|
459
|
-
getExternalSpan(spanId: string
|
|
462
|
+
getExternalSpan(spanId: string, options?: {
|
|
463
|
+
view?: "full" | "replay";
|
|
464
|
+
}): Promise<ExternalSpanResponse>;
|
|
460
465
|
/**
|
|
461
466
|
* Fetch the span tree for a root span.
|
|
462
467
|
* Blocking GET request.
|
|
@@ -464,9 +469,11 @@ declare class HttpClient {
|
|
|
464
469
|
* Pass `includeOutputs: false` for a payload-free tree (structure +
|
|
465
470
|
* `externalSpanId` only), so recorded outputs are fetched lazily per mocked
|
|
466
471
|
* span instead of all up front. Omit it (default eager) for `mock: "all"`.
|
|
472
|
+
* Pass `includeRootOutput: false` when the root was already fetched.
|
|
467
473
|
*/
|
|
468
474
|
getSpanTree(externalSpanId: string, options?: {
|
|
469
475
|
includeOutputs?: boolean;
|
|
476
|
+
includeRootOutput?: boolean;
|
|
470
477
|
}): Promise<SpanTreeResponse>;
|
|
471
478
|
/**
|
|
472
479
|
* Read which of a replay run's traces the server has fully persisted.
|
|
@@ -1393,10 +1400,20 @@ interface ReplayResult<T> {
|
|
|
1393
1400
|
* exposed directly here so customer code never sees the word.
|
|
1394
1401
|
*/
|
|
1395
1402
|
|
|
1396
|
-
declare class ReplayBranch {
|
|
1403
|
+
declare class ReplayBranch implements Omit<DbBranchLease, "databaseUrl"> {
|
|
1397
1404
|
#private;
|
|
1405
|
+
/** The provider's own id for this branch, e.g. for correlating with its console. */
|
|
1406
|
+
readonly neonBranchId: string;
|
|
1407
|
+
/** Env var name the customer's app reads, e.g. `DATABASE_URL`. */
|
|
1408
|
+
readonly envKey: string;
|
|
1398
1409
|
/** When this branch's URL stops being valid. ISO-8601. */
|
|
1399
1410
|
readonly expiresAt: string;
|
|
1411
|
+
/**
|
|
1412
|
+
* The instant this branch is pinned to: the source trace's wall clock, read
|
|
1413
|
+
* just before the traced function ran. Compare it against the trace you meant
|
|
1414
|
+
* to replay to confirm the branch is the right point in history.
|
|
1415
|
+
*/
|
|
1416
|
+
readonly snapshotTimestamp?: string;
|
|
1400
1417
|
/** Deep link to the branch in the provider console, if available. */
|
|
1401
1418
|
readonly providerConsoleUrl?: string;
|
|
1402
1419
|
/**
|
|
@@ -2336,7 +2353,7 @@ declare class BitfabFunction {
|
|
|
2336
2353
|
/**
|
|
2337
2354
|
* SDK version from package.json (injected at build time)
|
|
2338
2355
|
*/
|
|
2339
|
-
declare const __version__ = "0.36.
|
|
2356
|
+
declare const __version__ = "0.36.2";
|
|
2340
2357
|
|
|
2341
2358
|
/**
|
|
2342
2359
|
* Constants for the Bitfab SDK.
|
package/dist/index.d.ts
CHANGED
|
@@ -266,9 +266,11 @@ interface ReplayContext {
|
|
|
266
266
|
* obtains `databaseUrl` for this item. Reported on the trace completion inside
|
|
267
267
|
* `db_snapshot_usage` so the server can distinguish "branch was
|
|
268
268
|
* provisioned and exposed" from "branch URL was actually consumed".
|
|
269
|
-
*
|
|
270
|
-
* other means (e.g. a process-isolated runner writing an env
|
|
271
|
-
* must
|
|
269
|
+
* Only an explicit `databaseUrl` read may set it. A path that hands the URL
|
|
270
|
+
* over by other means (e.g. a process-isolated runner writing an env
|
|
271
|
+
* overlay) must leave it alone: setting it there would make every such
|
|
272
|
+
* replay report `accessed` for free, and the flag would stop separating
|
|
273
|
+
* "branch was used" from "branch was offered".
|
|
272
274
|
*/
|
|
273
275
|
dbSnapshotAccessed?: boolean;
|
|
274
276
|
}
|
|
@@ -455,8 +457,11 @@ declare class HttpClient {
|
|
|
455
457
|
/**
|
|
456
458
|
* Fetch an external span by ID.
|
|
457
459
|
* Blocking GET request.
|
|
460
|
+
* The replay view limits rawData to input/output serialization fields.
|
|
458
461
|
*/
|
|
459
|
-
getExternalSpan(spanId: string
|
|
462
|
+
getExternalSpan(spanId: string, options?: {
|
|
463
|
+
view?: "full" | "replay";
|
|
464
|
+
}): Promise<ExternalSpanResponse>;
|
|
460
465
|
/**
|
|
461
466
|
* Fetch the span tree for a root span.
|
|
462
467
|
* Blocking GET request.
|
|
@@ -464,9 +469,11 @@ declare class HttpClient {
|
|
|
464
469
|
* Pass `includeOutputs: false` for a payload-free tree (structure +
|
|
465
470
|
* `externalSpanId` only), so recorded outputs are fetched lazily per mocked
|
|
466
471
|
* span instead of all up front. Omit it (default eager) for `mock: "all"`.
|
|
472
|
+
* Pass `includeRootOutput: false` when the root was already fetched.
|
|
467
473
|
*/
|
|
468
474
|
getSpanTree(externalSpanId: string, options?: {
|
|
469
475
|
includeOutputs?: boolean;
|
|
476
|
+
includeRootOutput?: boolean;
|
|
470
477
|
}): Promise<SpanTreeResponse>;
|
|
471
478
|
/**
|
|
472
479
|
* Read which of a replay run's traces the server has fully persisted.
|
|
@@ -1393,10 +1400,20 @@ interface ReplayResult<T> {
|
|
|
1393
1400
|
* exposed directly here so customer code never sees the word.
|
|
1394
1401
|
*/
|
|
1395
1402
|
|
|
1396
|
-
declare class ReplayBranch {
|
|
1403
|
+
declare class ReplayBranch implements Omit<DbBranchLease, "databaseUrl"> {
|
|
1397
1404
|
#private;
|
|
1405
|
+
/** The provider's own id for this branch, e.g. for correlating with its console. */
|
|
1406
|
+
readonly neonBranchId: string;
|
|
1407
|
+
/** Env var name the customer's app reads, e.g. `DATABASE_URL`. */
|
|
1408
|
+
readonly envKey: string;
|
|
1398
1409
|
/** When this branch's URL stops being valid. ISO-8601. */
|
|
1399
1410
|
readonly expiresAt: string;
|
|
1411
|
+
/**
|
|
1412
|
+
* The instant this branch is pinned to: the source trace's wall clock, read
|
|
1413
|
+
* just before the traced function ran. Compare it against the trace you meant
|
|
1414
|
+
* to replay to confirm the branch is the right point in history.
|
|
1415
|
+
*/
|
|
1416
|
+
readonly snapshotTimestamp?: string;
|
|
1400
1417
|
/** Deep link to the branch in the provider console, if available. */
|
|
1401
1418
|
readonly providerConsoleUrl?: string;
|
|
1402
1419
|
/**
|
|
@@ -2336,7 +2353,7 @@ declare class BitfabFunction {
|
|
|
2336
2353
|
/**
|
|
2337
2354
|
* SDK version from package.json (injected at build time)
|
|
2338
2355
|
*/
|
|
2339
|
-
declare const __version__ = "0.36.
|
|
2356
|
+
declare const __version__ = "0.36.2";
|
|
2340
2357
|
|
|
2341
2358
|
/**
|
|
2342
2359
|
* Constants for the Bitfab SDK.
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
getCurrentReplayBranch,
|
|
12
12
|
getCurrentSpan,
|
|
13
13
|
getCurrentTrace
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-XZKYSTWH.js";
|
|
15
15
|
import {
|
|
16
16
|
BITFAB_PROGRESS_PREFIX,
|
|
17
17
|
BitfabError,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
__version__,
|
|
21
21
|
flushTraces,
|
|
22
22
|
reportReplayProgress
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-4IY5SZYR.js";
|
|
24
24
|
export {
|
|
25
25
|
BITFAB_PROGRESS_PREFIX,
|
|
26
26
|
Bitfab,
|
package/dist/node.cjs
CHANGED
|
@@ -88,7 +88,7 @@ var __version__;
|
|
|
88
88
|
var init_version_generated = __esm({
|
|
89
89
|
"src/version.generated.ts"() {
|
|
90
90
|
"use strict";
|
|
91
|
-
__version__ = "0.36.
|
|
91
|
+
__version__ = "0.36.2";
|
|
92
92
|
}
|
|
93
93
|
});
|
|
94
94
|
|
|
@@ -1528,9 +1528,11 @@ var init_http = __esm({
|
|
|
1528
1528
|
/**
|
|
1529
1529
|
* Fetch an external span by ID.
|
|
1530
1530
|
* Blocking GET request.
|
|
1531
|
+
* The replay view limits rawData to input/output serialization fields.
|
|
1531
1532
|
*/
|
|
1532
|
-
async getExternalSpan(spanId) {
|
|
1533
|
-
const
|
|
1533
|
+
async getExternalSpan(spanId, options) {
|
|
1534
|
+
const query = options?.view === "replay" ? "?view=replay" : "";
|
|
1535
|
+
const url = `${this.serviceUrl}/api/sdk/externalSpans/${spanId}${query}`;
|
|
1534
1536
|
const controller = new AbortController();
|
|
1535
1537
|
const timeoutId = setTimeout(() => controller.abort(), 3e4);
|
|
1536
1538
|
try {
|
|
@@ -1568,9 +1570,18 @@ var init_http = __esm({
|
|
|
1568
1570
|
* Pass `includeOutputs: false` for a payload-free tree (structure +
|
|
1569
1571
|
* `externalSpanId` only), so recorded outputs are fetched lazily per mocked
|
|
1570
1572
|
* span instead of all up front. Omit it (default eager) for `mock: "all"`.
|
|
1573
|
+
* Pass `includeRootOutput: false` when the root was already fetched.
|
|
1571
1574
|
*/
|
|
1572
1575
|
async getSpanTree(externalSpanId, options) {
|
|
1573
|
-
const
|
|
1576
|
+
const searchParams = new URLSearchParams();
|
|
1577
|
+
if (options?.includeOutputs === false) {
|
|
1578
|
+
searchParams.set("includeOutputs", "false");
|
|
1579
|
+
}
|
|
1580
|
+
if (options?.includeRootOutput === false) {
|
|
1581
|
+
searchParams.set("includeRootOutput", "false");
|
|
1582
|
+
}
|
|
1583
|
+
const encodedQuery = searchParams.toString();
|
|
1584
|
+
const query = encodedQuery ? `?${encodedQuery}` : "";
|
|
1574
1585
|
const url = `${this.serviceUrl}/api/sdk/replay/spanTree/${externalSpanId}${query}`;
|
|
1575
1586
|
const controller = new AbortController();
|
|
1576
1587
|
const timeoutId = setTimeout(() => controller.abort(), 3e4);
|
|
@@ -2153,7 +2164,9 @@ async function processItem(httpClient, serverItem, fn, testRunId, mockStrategy,
|
|
|
2153
2164
|
`Replay requested a database branch for trace ${originalTraceId} but it could not be resolved (${leaseError.code}): ${leaseError.message}. The function was not run, because replaying it against the live database would produce a result that looks valid but did not use the historical data you asked for.`
|
|
2154
2165
|
);
|
|
2155
2166
|
}
|
|
2156
|
-
const span = await httpClient.getExternalSpan(originalSpanId
|
|
2167
|
+
const span = await httpClient.getExternalSpan(originalSpanId, {
|
|
2168
|
+
view: "replay"
|
|
2169
|
+
});
|
|
2157
2170
|
const spanData = span.rawData?.span_data ?? {};
|
|
2158
2171
|
inputs = deserializeInputs(spanData);
|
|
2159
2172
|
originalOutput = deserializeOutput(spanData);
|
|
@@ -2173,7 +2186,8 @@ async function processItem(httpClient, serverItem, fn, testRunId, mockStrategy,
|
|
|
2173
2186
|
if (needTree) {
|
|
2174
2187
|
try {
|
|
2175
2188
|
const treeResponse = await httpClient.getSpanTree(originalSpanId, {
|
|
2176
|
-
includeOutputs
|
|
2189
|
+
includeOutputs,
|
|
2190
|
+
includeRootOutput: false
|
|
2177
2191
|
});
|
|
2178
2192
|
if (treeResponse.root) {
|
|
2179
2193
|
mockTree = buildMockTree(treeResponse.root);
|
|
@@ -2195,7 +2209,7 @@ async function processItem(httpClient, serverItem, fn, testRunId, mockStrategy,
|
|
|
2195
2209
|
const fetchSpanOutput = mockTree && !includeOutputs ? (externalSpanId) => {
|
|
2196
2210
|
let pending = outputCache.get(externalSpanId);
|
|
2197
2211
|
if (!pending) {
|
|
2198
|
-
pending = httpClient.getExternalSpan(externalSpanId).then(
|
|
2212
|
+
pending = httpClient.getExternalSpan(externalSpanId, { view: "replay" }).then(
|
|
2199
2213
|
(s) => deserializeOutput(
|
|
2200
2214
|
s.rawData?.span_data ?? {}
|
|
2201
2215
|
)
|
|
@@ -4195,12 +4209,20 @@ var ReplayBranch = class {
|
|
|
4195
4209
|
// context can ride along into a log line or a serialized payload.
|
|
4196
4210
|
__privateAdd(this, _url);
|
|
4197
4211
|
__privateAdd(this, _context);
|
|
4198
|
-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4212
|
+
const { databaseUrl, ...exposed } = lease;
|
|
4213
|
+
for (const [key, value] of Object.entries(exposed)) {
|
|
4214
|
+
Object.defineProperty(this, key, {
|
|
4215
|
+
value,
|
|
4216
|
+
enumerable: true,
|
|
4217
|
+
configurable: true
|
|
4218
|
+
});
|
|
4219
|
+
}
|
|
4220
|
+
Object.defineProperty(this, "traceId", {
|
|
4221
|
+
value: traceId,
|
|
4222
|
+
enumerable: true,
|
|
4223
|
+
configurable: true
|
|
4224
|
+
});
|
|
4225
|
+
__privateSet(this, _url, databaseUrl);
|
|
4204
4226
|
__privateSet(this, _context, context);
|
|
4205
4227
|
}
|
|
4206
4228
|
/**
|
|
@@ -5540,6 +5562,7 @@ var Bitfab = class {
|
|
|
5540
5562
|
dbSnapshotUsage: {
|
|
5541
5563
|
neonBranchId: replayCtx.dbBranchLease.neonBranchId,
|
|
5542
5564
|
snapshotTimestamp: replayCtx.dbBranchLease.snapshotTimestamp,
|
|
5565
|
+
region: replayCtx.dbBranchLease.region,
|
|
5543
5566
|
originalTraceId: replayCtx.sourceBitfabTraceId,
|
|
5544
5567
|
accessed: replayCtx.dbSnapshotAccessed === true
|
|
5545
5568
|
}
|
|
@@ -5815,6 +5838,9 @@ var Bitfab = class {
|
|
|
5815
5838
|
...params.dbSnapshotUsage.snapshotTimestamp && {
|
|
5816
5839
|
snapshot_timestamp: params.dbSnapshotUsage.snapshotTimestamp
|
|
5817
5840
|
},
|
|
5841
|
+
...params.dbSnapshotUsage.region && {
|
|
5842
|
+
region: params.dbSnapshotUsage.region
|
|
5843
|
+
},
|
|
5818
5844
|
...params.dbSnapshotUsage.originalTraceId && {
|
|
5819
5845
|
original_trace_id: params.dbSnapshotUsage.originalTraceId,
|
|
5820
5846
|
// Deprecated wire alias, kept so this SDK still reports usage
|