@glasstrace/sdk 1.15.0 → 1.16.0
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/README.md +117 -8
- package/dist/async-context/index.cjs +21 -2
- package/dist/async-context/index.cjs.map +1 -1
- package/dist/async-context/index.js +2 -2
- package/dist/{capture-error-03qDnC5v.d.cts → capture-error-B0txjNut.d.cts} +2 -2
- package/dist/{capture-error-CAfFUyIU.d.ts → capture-error-Dc01rYNR.d.ts} +2 -2
- package/dist/{chunk-F7A3QXCT.js → chunk-774XIOZG.js} +2 -2
- package/dist/{chunk-VMK2G6QR.js → chunk-AFTCLH77.js} +2 -2
- package/dist/{chunk-XMD5OYD6.js → chunk-BGJKEFBN.js} +2 -2
- package/dist/{chunk-LQZRGBN5.js → chunk-DW3CZDS6.js} +2 -2
- package/dist/{chunk-PSMSSLQY.js → chunk-EWW3TZ52.js} +123 -12
- package/dist/{chunk-PSMSSLQY.js.map → chunk-EWW3TZ52.js.map} +1 -1
- package/dist/{chunk-7LE2O4ZJ.js → chunk-GBVMPMVV.js} +54 -5
- package/dist/{chunk-7LE2O4ZJ.js.map → chunk-GBVMPMVV.js.map} +1 -1
- package/dist/{chunk-HMEHYSTS.js → chunk-KM4UNN3Q.js} +2 -2
- package/dist/{chunk-MP3QNDXQ.js → chunk-OHSX224U.js} +2 -2
- package/dist/{chunk-6ST4QV7T.js → chunk-T7B752NF.js} +3 -3
- package/dist/{chunk-ZIYT2Y4B.js → chunk-WOYJAG7H.js} +3 -3
- package/dist/cli/init.cjs +18 -5
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.js +7 -7
- package/dist/cli/mcp-add.cjs +15 -2
- package/dist/cli/mcp-add.cjs.map +1 -1
- package/dist/cli/mcp-add.js +3 -3
- package/dist/cli/uninit.js +3 -3
- package/dist/cli/upgrade-instructions.cjs +1 -1
- package/dist/cli/upgrade-instructions.js +3 -3
- package/dist/cli/validate.cjs +14 -1
- package/dist/cli/validate.cjs.map +1 -1
- package/dist/cli/validate.js +2 -2
- package/dist/{correlation-id-YcfcqOru.d.ts → correlation-id-B9YYmoZw.d.ts} +1 -1
- package/dist/{correlation-id-CZ2bstzA.d.cts → correlation-id-CelUvw7j.d.cts} +1 -1
- package/dist/edge-entry.cjs +21 -2
- package/dist/edge-entry.cjs.map +1 -1
- package/dist/edge-entry.d.cts +2 -2
- package/dist/edge-entry.d.ts +2 -2
- package/dist/edge-entry.js +4 -4
- package/dist/import-graph-DBLGNjcI.d.cts +238 -0
- package/dist/import-graph-Dka_Fm7j.d.ts +238 -0
- package/dist/index.cjs +165 -12
- package/dist/index.cjs.map +1 -1
- package/dist/{index.d-BQIJ5Dvc.d.cts → index.d-3-cJoY8y.d.cts} +10 -2
- package/dist/{index.d-BQIJ5Dvc.d.ts → index.d-3-cJoY8y.d.ts} +10 -2
- package/dist/index.d.cts +28 -4
- package/dist/index.d.ts +28 -4
- package/dist/index.js +5 -5
- package/dist/middleware/index.cjs +21 -2
- package/dist/middleware/index.cjs.map +1 -1
- package/dist/middleware/index.js +2 -2
- package/dist/node-entry.cjs +56 -9
- package/dist/node-entry.cjs.map +1 -1
- package/dist/node-entry.d.cts +4 -4
- package/dist/node-entry.d.ts +4 -4
- package/dist/node-entry.js +7 -7
- package/dist/node-subpath.cjs +27 -1
- package/dist/node-subpath.cjs.map +1 -1
- package/dist/node-subpath.d.cts +51 -235
- package/dist/node-subpath.d.ts +51 -235
- package/dist/node-subpath.js +16 -3
- package/dist/node-subpath.js.map +1 -1
- package/dist/{source-map-uploader-NUONOEJG.js → source-map-uploader-UJPZCUFN.js} +3 -3
- package/dist/trpc/index.cjs +21 -2
- package/dist/trpc/index.cjs.map +1 -1
- package/dist/trpc/index.js +1 -1
- package/package.json +1 -1
- /package/dist/{chunk-F7A3QXCT.js.map → chunk-774XIOZG.js.map} +0 -0
- /package/dist/{chunk-VMK2G6QR.js.map → chunk-AFTCLH77.js.map} +0 -0
- /package/dist/{chunk-XMD5OYD6.js.map → chunk-BGJKEFBN.js.map} +0 -0
- /package/dist/{chunk-LQZRGBN5.js.map → chunk-DW3CZDS6.js.map} +0 -0
- /package/dist/{chunk-HMEHYSTS.js.map → chunk-KM4UNN3Q.js.map} +0 -0
- /package/dist/{chunk-MP3QNDXQ.js.map → chunk-OHSX224U.js.map} +0 -0
- /package/dist/{chunk-6ST4QV7T.js.map → chunk-T7B752NF.js.map} +0 -0
- /package/dist/{chunk-ZIYT2Y4B.js.map → chunk-WOYJAG7H.js.map} +0 -0
- /package/dist/{source-map-uploader-NUONOEJG.js.map → source-map-uploader-UJPZCUFN.js.map} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -15338,7 +15338,11 @@ function isSideEffectSemanticFieldKey(key) {
|
|
|
15338
15338
|
key
|
|
15339
15339
|
) || SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN.test(key);
|
|
15340
15340
|
}
|
|
15341
|
-
|
|
15341
|
+
function isSideEffectScalarKey(key) {
|
|
15342
|
+
if (key.length > MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH) return false;
|
|
15343
|
+
return SIDE_EFFECT_SCALAR_KEY_PATTERN.test(key);
|
|
15344
|
+
}
|
|
15345
|
+
var DevApiKeySchema, AnonApiKeySchema, SessionIdSchema, BuildHashSchema, SdkDiagnosticCodeSchema, CaptureConfigSchema, SdkCachedConfigSchema, GlasstraceOptionsSchema, GlasstraceEnvVarsSchema, GLASSTRACE_ATTRIBUTE_NAMES, DEFAULT_CAPTURE_CONFIG, MAX_SOURCE_MAP_FILE_PATH_LENGTH, MAX_SOURCE_MAP_FILE_SIZE, MAX_SOURCE_MAP_FILE_COUNT, MAX_PRESIGNED_CLIENT_TOKEN_LENGTH, MAX_PRESIGNED_PATHNAME_LENGTH, ImportGraphPayloadSchema, SdkHealthReportSchema, TierLimitsSchema, SdkInitResponseSchema, DiscoveryResponseSchema, SourceMapUploadResponseSchema, PresignedUploadRequestSchema, PresignedUploadResponseSchema, SourceMapManifestRequestSchema, SourceMapManifestResponseSchema, K, SIDE_EFFECT_OPERATION_KINDS, SIDE_EFFECT_SEMANTIC_FIELD_STABLE_CORE_KEYS, SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN, MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH, SIDE_EFFECT_OMISSION_REASONS, SIDE_EFFECT_SCALAR_KEY_PATTERN, SIDE_EFFECT_SCALAR_PREFIX, MAX_SIDE_EFFECT_SCALARS_PER_OPERATION, SIDE_EFFECT_HASHED_ID_PREFIX, SIDE_EFFECT_HASHED_ID_HEX_LENGTH, SIDE_EFFECT_OPERATION_STATUSES, SIDE_EFFECT_OPERATION_PHASES;
|
|
15342
15346
|
var init_dist = __esm({
|
|
15343
15347
|
"../protocol/dist/index.js"() {
|
|
15344
15348
|
"use strict";
|
|
@@ -15377,7 +15381,20 @@ var init_dist = __esm({
|
|
|
15377
15381
|
* client-side allowlist enforcement layered with the product's
|
|
15378
15382
|
* storage-time filter as defense-in-depth.
|
|
15379
15383
|
*/
|
|
15380
|
-
sideEffectEvidence: external_exports.boolean().optional().default(false)
|
|
15384
|
+
sideEffectEvidence: external_exports.boolean().optional().default(false),
|
|
15385
|
+
/**
|
|
15386
|
+
* Per-account value-fidelity capture posture (server-pushed).
|
|
15387
|
+
*
|
|
15388
|
+
* `strict` (default) is fail-closed: the SDK rejects raw wall-clock
|
|
15389
|
+
* timestamps and unhashed identifiers from the `scalar.*` channel at
|
|
15390
|
+
* emit time. `full` relaxes those rejections so raw magnitudes can be
|
|
15391
|
+
* surfaced — but only in conjunction with an explicit producer opt-in
|
|
15392
|
+
* (so a `full`-configured account still emits strict-shaped scalars
|
|
15393
|
+
* unless the producer also opts in). The operator owns this flag; it
|
|
15394
|
+
* is never derived from producer or request input. Absent on the wire
|
|
15395
|
+
* ⇒ `strict`.
|
|
15396
|
+
*/
|
|
15397
|
+
captureFidelity: external_exports.enum(["strict", "full"]).optional().default("strict")
|
|
15381
15398
|
});
|
|
15382
15399
|
SdkCachedConfigSchema = external_exports.object({
|
|
15383
15400
|
response: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
@@ -15568,7 +15585,13 @@ var init_dist = __esm({
|
|
|
15568
15585
|
SIDE_EFFECT_OMITTED_UNSUPPORTED_KEY: "glasstrace.side_effect.omitted.unsupported_key",
|
|
15569
15586
|
SIDE_EFFECT_OMITTED_VALUE_TOO_LONG: "glasstrace.side_effect.omitted.value_too_long",
|
|
15570
15587
|
SIDE_EFFECT_OMITTED_NOT_EMITTED: "glasstrace.side_effect.omitted.not_emitted",
|
|
15571
|
-
SIDE_EFFECT_OMITTED_CAPTURE_DISABLED: "glasstrace.side_effect.omitted.capture_disabled"
|
|
15588
|
+
SIDE_EFFECT_OMITTED_CAPTURE_DISABLED: "glasstrace.side_effect.omitted.capture_disabled",
|
|
15589
|
+
// Value-fidelity scalar-channel omission reasons. Counts only; the
|
|
15590
|
+
// rejected raw value (timestamp, unhashed id, non-finite number) is
|
|
15591
|
+
// never echoed. Mirror the product omission enum verbatim.
|
|
15592
|
+
SIDE_EFFECT_OMITTED_RAW_TIMESTAMP: "glasstrace.side_effect.omitted.raw_timestamp",
|
|
15593
|
+
SIDE_EFFECT_OMITTED_UNHASHED_ID: "glasstrace.side_effect.omitted.unhashed_id",
|
|
15594
|
+
SIDE_EFFECT_OMITTED_NON_FINITE: "glasstrace.side_effect.omitted.non_finite"
|
|
15572
15595
|
};
|
|
15573
15596
|
DEFAULT_CAPTURE_CONFIG = {
|
|
15574
15597
|
requestBodies: false,
|
|
@@ -15578,7 +15601,8 @@ var init_dist = __esm({
|
|
|
15578
15601
|
importGraph: false,
|
|
15579
15602
|
consoleErrors: false,
|
|
15580
15603
|
errorResponseBodies: false,
|
|
15581
|
-
sideEffectEvidence: false
|
|
15604
|
+
sideEffectEvidence: false,
|
|
15605
|
+
captureFidelity: "strict"
|
|
15582
15606
|
};
|
|
15583
15607
|
MAX_SOURCE_MAP_FILE_PATH_LENGTH = 512;
|
|
15584
15608
|
MAX_SOURCE_MAP_FILE_SIZE = 50 * 1024 * 1024;
|
|
@@ -15793,8 +15817,28 @@ var init_dist = __esm({
|
|
|
15793
15817
|
"unsupported_key",
|
|
15794
15818
|
"value_too_long",
|
|
15795
15819
|
"not_emitted",
|
|
15796
|
-
"capture_disabled"
|
|
15820
|
+
"capture_disabled",
|
|
15821
|
+
// Value-fidelity scalar channel reasons. A scalar is dropped under
|
|
15822
|
+
// `raw_timestamp` when a wall-clock value (a `Date` instance, or a
|
|
15823
|
+
// numeric epoch on a `*Ms` key) is rejected in favor of a bounded
|
|
15824
|
+
// delta; `unhashed_id` when an `*Id` scalar is not the `gthid_<hex>`
|
|
15825
|
+
// output of `hashId`; `non_finite` when a number is NaN/±Infinity.
|
|
15826
|
+
// (A type-mismatched value — e.g. a date *string* on a numeric key —
|
|
15827
|
+
// is dropped under `raw_payload`, not `raw_timestamp`, since the
|
|
15828
|
+
// scalar channel only carries native numbers/booleans plus `gthid_`
|
|
15829
|
+
// ids.) These mirror the product `SideEffectOmissionReasonSchema`
|
|
15830
|
+
// tuple verbatim (hand-maintained on both sides; see @drift-check
|
|
15831
|
+
// above). `non_finite` is SDK-emit-time only — JSON cannot carry
|
|
15832
|
+
// NaN/Infinity to the wire.
|
|
15833
|
+
"raw_timestamp",
|
|
15834
|
+
"unhashed_id",
|
|
15835
|
+
"non_finite"
|
|
15797
15836
|
];
|
|
15837
|
+
SIDE_EFFECT_SCALAR_KEY_PATTERN = /^[a-z][A-Za-z0-9]*(Ms|Amount|Bytes|Ratio|Id|Value|Flag)$/;
|
|
15838
|
+
SIDE_EFFECT_SCALAR_PREFIX = "glasstrace.side_effect.scalar.";
|
|
15839
|
+
MAX_SIDE_EFFECT_SCALARS_PER_OPERATION = 16;
|
|
15840
|
+
SIDE_EFFECT_HASHED_ID_PREFIX = "gthid_";
|
|
15841
|
+
SIDE_EFFECT_HASHED_ID_HEX_LENGTH = 32;
|
|
15798
15842
|
SIDE_EFFECT_OPERATION_STATUSES = [
|
|
15799
15843
|
"scheduled",
|
|
15800
15844
|
"started",
|
|
@@ -23685,6 +23729,13 @@ async function tryImport(moduleId) {
|
|
|
23685
23729
|
return null;
|
|
23686
23730
|
}
|
|
23687
23731
|
}
|
|
23732
|
+
function warnPrismaInstrumentationUnavailable(verbose, detail) {
|
|
23733
|
+
if (!verbose) return;
|
|
23734
|
+
sdkLog(
|
|
23735
|
+
"warn",
|
|
23736
|
+
`[glasstrace] @prisma/instrumentation ${detail}; Prisma query spans will not be captured. If you use Prisma and expect database spans, add @prisma/instrumentation as a direct dependency (some package managers, e.g. pnpm, do not expose transitive copies).`
|
|
23737
|
+
);
|
|
23738
|
+
}
|
|
23688
23739
|
async function configureOtel(config2, sessionManager) {
|
|
23689
23740
|
setOtelState(OtelState.CONFIGURING);
|
|
23690
23741
|
await new Promise((resolve3) => {
|
|
@@ -23792,7 +23843,14 @@ async function runRegistrationPath(config2, sessionManager) {
|
|
|
23792
23843
|
const PrismaInstrumentation = prismaModule2.PrismaInstrumentation;
|
|
23793
23844
|
if (PrismaInstrumentation) {
|
|
23794
23845
|
otelConfig.instrumentations = [new PrismaInstrumentation()];
|
|
23846
|
+
} else {
|
|
23847
|
+
warnPrismaInstrumentationUnavailable(
|
|
23848
|
+
config2.verbose,
|
|
23849
|
+
"was loaded but did not export PrismaInstrumentation"
|
|
23850
|
+
);
|
|
23795
23851
|
}
|
|
23852
|
+
} else {
|
|
23853
|
+
warnPrismaInstrumentationUnavailable(config2.verbose, "could not be loaded");
|
|
23796
23854
|
}
|
|
23797
23855
|
vercelOtel.registerOTel(otelConfig);
|
|
23798
23856
|
const vercelProxy = trace.getTracerProvider();
|
|
@@ -23847,9 +23905,22 @@ async function runRegistrationPath(config2, sessionManager) {
|
|
|
23847
23905
|
const inst = new PrismaInstrumentation();
|
|
23848
23906
|
inst.setTracerProvider(provider);
|
|
23849
23907
|
inst.enable();
|
|
23850
|
-
} catch {
|
|
23908
|
+
} catch (err) {
|
|
23909
|
+
if (config2.verbose) {
|
|
23910
|
+
sdkLog(
|
|
23911
|
+
"warn",
|
|
23912
|
+
`[glasstrace] @prisma/instrumentation failed to initialize: ${err instanceof Error ? err.message : String(err)}. Prisma query spans will not be captured.`
|
|
23913
|
+
);
|
|
23914
|
+
}
|
|
23851
23915
|
}
|
|
23916
|
+
} else {
|
|
23917
|
+
warnPrismaInstrumentationUnavailable(
|
|
23918
|
+
config2.verbose,
|
|
23919
|
+
"was loaded but did not export PrismaInstrumentation"
|
|
23920
|
+
);
|
|
23852
23921
|
}
|
|
23922
|
+
} else {
|
|
23923
|
+
warnPrismaInstrumentationUnavailable(config2.verbose, "could not be loaded");
|
|
23853
23924
|
}
|
|
23854
23925
|
setOtelState(OtelState.OWNS_PROVIDER);
|
|
23855
23926
|
emitLifecycleEvent("otel:configured", { state: OtelState.OWNS_PROVIDER, scenario: "A" });
|
|
@@ -24063,6 +24134,9 @@ function registerHeartbeatShutdownHook(config2, anonKey, sdkVersion) {
|
|
|
24063
24134
|
});
|
|
24064
24135
|
}
|
|
24065
24136
|
|
|
24137
|
+
// src/side-effect/index.ts
|
|
24138
|
+
init_dist();
|
|
24139
|
+
|
|
24066
24140
|
// src/side-effect/allowlist.ts
|
|
24067
24141
|
init_dist();
|
|
24068
24142
|
var MAX_SIDE_EFFECT_OPERATION_LABEL_LENGTH = 96;
|
|
@@ -24154,6 +24228,59 @@ function checkSemanticFieldValue(key, value) {
|
|
|
24154
24228
|
}
|
|
24155
24229
|
return { accepted: true, value };
|
|
24156
24230
|
}
|
|
24231
|
+
var GTHID_STRICT_REGEX = new RegExp(
|
|
24232
|
+
`^${SIDE_EFFECT_HASHED_ID_PREFIX}[0-9a-f]{${SIDE_EFFECT_HASHED_ID_HEX_LENGTH}}$`
|
|
24233
|
+
);
|
|
24234
|
+
var SCALAR_EPOCH_MS_MIN = 1e12;
|
|
24235
|
+
function isTimestampShapedScalarKey(key) {
|
|
24236
|
+
return key.endsWith("Ms");
|
|
24237
|
+
}
|
|
24238
|
+
function checkScalarField(key, value, mode = "strict") {
|
|
24239
|
+
if (typeof key !== "string" || !isSideEffectScalarKey(key)) {
|
|
24240
|
+
return { accepted: false, reason: "unsupported_key" };
|
|
24241
|
+
}
|
|
24242
|
+
if (value instanceof Date) {
|
|
24243
|
+
return { accepted: false, reason: "raw_timestamp" };
|
|
24244
|
+
}
|
|
24245
|
+
if (key.endsWith("Id")) {
|
|
24246
|
+
if (typeof value !== "string") {
|
|
24247
|
+
return { accepted: false, reason: "unhashed_id" };
|
|
24248
|
+
}
|
|
24249
|
+
if (mode === "strict") {
|
|
24250
|
+
if (!GTHID_STRICT_REGEX.test(value)) {
|
|
24251
|
+
return { accepted: false, reason: "unhashed_id" };
|
|
24252
|
+
}
|
|
24253
|
+
return { accepted: true, value };
|
|
24254
|
+
}
|
|
24255
|
+
if (value.length === 0) {
|
|
24256
|
+
return { accepted: false, reason: "raw_payload" };
|
|
24257
|
+
}
|
|
24258
|
+
const unsafe = detectUnsafePattern(value);
|
|
24259
|
+
if (unsafe) {
|
|
24260
|
+
return { accepted: false, reason: unsafe };
|
|
24261
|
+
}
|
|
24262
|
+
if (value.length > MAX_SIDE_EFFECT_FIELD_VALUE_LENGTH) {
|
|
24263
|
+
return { accepted: false, reason: "value_too_long" };
|
|
24264
|
+
}
|
|
24265
|
+
return { accepted: true, value };
|
|
24266
|
+
}
|
|
24267
|
+
if (key.endsWith("Flag")) {
|
|
24268
|
+
if (typeof value !== "boolean") {
|
|
24269
|
+
return { accepted: false, reason: "raw_payload" };
|
|
24270
|
+
}
|
|
24271
|
+
return { accepted: true, value };
|
|
24272
|
+
}
|
|
24273
|
+
if (typeof value !== "number") {
|
|
24274
|
+
return { accepted: false, reason: "raw_payload" };
|
|
24275
|
+
}
|
|
24276
|
+
if (!Number.isFinite(value)) {
|
|
24277
|
+
return { accepted: false, reason: "non_finite" };
|
|
24278
|
+
}
|
|
24279
|
+
if (mode === "strict" && isTimestampShapedScalarKey(key) && value >= SCALAR_EPOCH_MS_MIN) {
|
|
24280
|
+
return { accepted: false, reason: "raw_timestamp" };
|
|
24281
|
+
}
|
|
24282
|
+
return { accepted: true, value };
|
|
24283
|
+
}
|
|
24157
24284
|
function checkSemanticFieldKey(key) {
|
|
24158
24285
|
return typeof key === "string" && isSideEffectSemanticFieldKey(key);
|
|
24159
24286
|
}
|
|
@@ -24219,7 +24346,10 @@ var OMISSION_ATTRIBUTE_BY_REASON = {
|
|
|
24219
24346
|
unsupported_key: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_UNSUPPORTED_KEY,
|
|
24220
24347
|
value_too_long: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_VALUE_TOO_LONG,
|
|
24221
24348
|
not_emitted: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_NOT_EMITTED,
|
|
24222
|
-
capture_disabled: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_CAPTURE_DISABLED
|
|
24349
|
+
capture_disabled: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_CAPTURE_DISABLED,
|
|
24350
|
+
raw_timestamp: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_RAW_TIMESTAMP,
|
|
24351
|
+
unhashed_id: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_UNHASHED_ID,
|
|
24352
|
+
non_finite: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_NON_FINITE
|
|
24223
24353
|
};
|
|
24224
24354
|
var FIELD_ATTRIBUTE_BY_KEY = {
|
|
24225
24355
|
templateKey: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_FIELD_TEMPLATE_KEY,
|
|
@@ -24278,6 +24408,12 @@ function attachField(span, key, value) {
|
|
|
24278
24408
|
} catch {
|
|
24279
24409
|
}
|
|
24280
24410
|
}
|
|
24411
|
+
function attachScalar(span, key, value) {
|
|
24412
|
+
try {
|
|
24413
|
+
span.setAttribute(`${SIDE_EFFECT_SCALAR_PREFIX}${key}`, value);
|
|
24414
|
+
} catch {
|
|
24415
|
+
}
|
|
24416
|
+
}
|
|
24281
24417
|
function recordOmission(span, reason) {
|
|
24282
24418
|
recordOmissionOnSpan(span, reason);
|
|
24283
24419
|
}
|
|
@@ -24408,6 +24544,23 @@ function runRecordSideEffect(input) {
|
|
|
24408
24544
|
attachField(outcome.span, rawKey, valueOutcome.value);
|
|
24409
24545
|
}
|
|
24410
24546
|
}
|
|
24547
|
+
const scalars = candidate.scalars;
|
|
24548
|
+
if (scalars && typeof scalars === "object") {
|
|
24549
|
+
let scalarCount = 0;
|
|
24550
|
+
for (const [rawKey, rawValue] of Object.entries(scalars)) {
|
|
24551
|
+
if (scalarCount >= MAX_SIDE_EFFECT_SCALARS_PER_OPERATION) {
|
|
24552
|
+
recordOmission(outcome.span, "value_too_long");
|
|
24553
|
+
break;
|
|
24554
|
+
}
|
|
24555
|
+
scalarCount += 1;
|
|
24556
|
+
const scalarOutcome = checkScalarField(rawKey, rawValue);
|
|
24557
|
+
if (!scalarOutcome.accepted) {
|
|
24558
|
+
recordOmission(outcome.span, scalarOutcome.reason);
|
|
24559
|
+
continue;
|
|
24560
|
+
}
|
|
24561
|
+
attachScalar(outcome.span, rawKey, scalarOutcome.value);
|
|
24562
|
+
}
|
|
24563
|
+
}
|
|
24411
24564
|
}
|
|
24412
24565
|
|
|
24413
24566
|
// src/runtime-state.ts
|
|
@@ -24710,11 +24863,11 @@ function registerGlasstrace(options) {
|
|
|
24710
24863
|
setCoreState(CoreState.REGISTERING);
|
|
24711
24864
|
maybeWarnStaleAgentInstructions({
|
|
24712
24865
|
projectRoot: process.cwd(),
|
|
24713
|
-
sdkVersion: "1.
|
|
24866
|
+
sdkVersion: "1.16.0"
|
|
24714
24867
|
});
|
|
24715
24868
|
startRuntimeStateWriter({
|
|
24716
24869
|
projectRoot: process.cwd(),
|
|
24717
|
-
sdkVersion: "1.
|
|
24870
|
+
sdkVersion: "1.16.0"
|
|
24718
24871
|
});
|
|
24719
24872
|
const config2 = resolveConfig(options);
|
|
24720
24873
|
setSideEffectVerboseFlag(config2.verbose);
|
|
@@ -24882,8 +25035,8 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
|
|
|
24882
25035
|
if (config2.verbose) {
|
|
24883
25036
|
console.info("[glasstrace] Background init firing.");
|
|
24884
25037
|
}
|
|
24885
|
-
const healthReport = collectHealthReport("1.
|
|
24886
|
-
const initResult = await performInit(config2, anonKeyForInit, "1.
|
|
25038
|
+
const healthReport = collectHealthReport("1.16.0");
|
|
25039
|
+
const initResult = await performInit(config2, anonKeyForInit, "1.16.0", healthReport);
|
|
24887
25040
|
if (generation !== registrationGeneration) return;
|
|
24888
25041
|
const currentState = getCoreState();
|
|
24889
25042
|
if (currentState === CoreState.SHUTTING_DOWN || currentState === CoreState.SHUTDOWN) {
|
|
@@ -24906,7 +25059,7 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
|
|
|
24906
25059
|
}
|
|
24907
25060
|
maybeInstallConsoleCapture();
|
|
24908
25061
|
if (didLastInitSucceed()) {
|
|
24909
|
-
startHeartbeat(config2, anonKeyForInit, "1.
|
|
25062
|
+
startHeartbeat(config2, anonKeyForInit, "1.16.0", generation, (newApiKey, accountId) => {
|
|
24910
25063
|
setAuthState(AuthState.CLAIMING);
|
|
24911
25064
|
emitLifecycleEvent("auth:claim_started", { accountId });
|
|
24912
25065
|
setResolvedApiKey(newApiKey);
|