@qlever-llc/trellis 0.10.10 → 0.10.12
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/esm/client.d.ts +2 -0
- package/esm/client.d.ts.map +1 -1
- package/esm/client.js +2 -0
- package/esm/client_connect.d.ts +3 -2
- package/esm/client_connect.d.ts.map +1 -1
- package/esm/client_connect.js +4 -1
- package/esm/errors/TrellisError.d.ts +3 -3
- package/esm/errors/TrellisError.js +3 -3
- package/esm/server/health.d.ts.map +1 -1
- package/esm/server/health.js +34 -3
- package/esm/server/internal_jobs/job-manager.d.ts.map +1 -1
- package/esm/server/internal_jobs/job-manager.js +32 -1
- package/esm/server/runtime.d.ts +3 -0
- package/esm/server/runtime.d.ts.map +1 -1
- package/esm/server/service.d.ts +15 -0
- package/esm/server/service.d.ts.map +1 -1
- package/esm/server/service.js +41 -3
- package/esm/server.d.ts.map +1 -1
- package/esm/server.js +99 -10
- package/esm/service/deno.d.ts +1 -1
- package/esm/service/deno.d.ts.map +1 -1
- package/esm/service/mod.d.ts +1 -1
- package/esm/service/mod.d.ts.map +1 -1
- package/esm/service/node.d.ts +1 -1
- package/esm/service/node.d.ts.map +1 -1
- package/esm/service/outbox_inbox.d.ts.map +1 -1
- package/esm/service/outbox_inbox.js +14 -0
- package/esm/telemetry/core.d.ts.map +1 -1
- package/esm/telemetry/core.js +1 -1
- package/esm/telemetry/env.d.ts.map +1 -1
- package/esm/telemetry/env.js +6 -1
- package/esm/telemetry/init.d.ts +3 -0
- package/esm/telemetry/init.d.ts.map +1 -0
- package/esm/telemetry/init.js +7 -0
- package/esm/telemetry/metrics.d.ts +34 -0
- package/esm/telemetry/metrics.d.ts.map +1 -0
- package/esm/telemetry/metrics.js +181 -0
- package/esm/telemetry/mod.d.ts +3 -0
- package/esm/telemetry/mod.d.ts.map +1 -1
- package/esm/telemetry/mod.js +2 -0
- package/esm/telemetry/runtime.d.ts +2 -0
- package/esm/telemetry/runtime.d.ts.map +1 -0
- package/esm/telemetry/runtime.js +134 -0
- package/esm/telemetry.d.ts +3 -0
- package/esm/telemetry.d.ts.map +1 -0
- package/esm/telemetry.js +2 -0
- package/esm/transfer.d.ts.map +1 -1
- package/esm/transfer.js +27 -16
- package/esm/trellis.d.ts +28 -4
- package/esm/trellis.d.ts.map +1 -1
- package/esm/trellis.js +575 -80
- package/package.json +7 -5
- package/script/client.d.ts +2 -0
- package/script/client.d.ts.map +1 -1
- package/script/client.js +2 -0
- package/script/client_connect.d.ts +3 -2
- package/script/client_connect.d.ts.map +1 -1
- package/script/client_connect.js +4 -1
- package/script/errors/TrellisError.d.ts +3 -3
- package/script/errors/TrellisError.js +3 -3
- package/script/server/health.d.ts.map +1 -1
- package/script/server/health.js +34 -3
- package/script/server/internal_jobs/job-manager.d.ts.map +1 -1
- package/script/server/internal_jobs/job-manager.js +32 -1
- package/script/server/runtime.d.ts +3 -0
- package/script/server/runtime.d.ts.map +1 -1
- package/script/server/service.d.ts +15 -0
- package/script/server/service.d.ts.map +1 -1
- package/script/server/service.js +40 -2
- package/script/server.d.ts.map +1 -1
- package/script/server.js +98 -9
- package/script/service/deno.d.ts +1 -1
- package/script/service/deno.d.ts.map +1 -1
- package/script/service/mod.d.ts +1 -1
- package/script/service/mod.d.ts.map +1 -1
- package/script/service/node.d.ts +1 -1
- package/script/service/node.d.ts.map +1 -1
- package/script/service/outbox_inbox.d.ts.map +1 -1
- package/script/service/outbox_inbox.js +14 -0
- package/script/telemetry/core.d.ts.map +1 -1
- package/script/telemetry/core.js +1 -1
- package/script/telemetry/env.d.ts.map +1 -1
- package/script/telemetry/env.js +6 -1
- package/script/telemetry/init.d.ts +3 -0
- package/script/telemetry/init.d.ts.map +1 -0
- package/script/telemetry/init.js +10 -0
- package/script/telemetry/metrics.d.ts +34 -0
- package/script/telemetry/metrics.d.ts.map +1 -0
- package/script/telemetry/metrics.js +186 -0
- package/script/telemetry/mod.d.ts +3 -0
- package/script/telemetry/mod.d.ts.map +1 -1
- package/script/telemetry/mod.js +7 -1
- package/script/telemetry/runtime.d.ts +2 -0
- package/script/telemetry/runtime.d.ts.map +1 -0
- package/script/telemetry/runtime.js +137 -0
- package/script/telemetry.d.ts +3 -0
- package/script/telemetry.d.ts.map +1 -0
- package/script/telemetry.js +18 -0
- package/script/transfer.d.ts.map +1 -1
- package/script/transfer.js +28 -17
- package/script/trellis.d.ts +28 -4
- package/script/trellis.d.ts.map +1 -1
- package/script/trellis.js +606 -110
- package/src/client.ts +4 -0
- package/src/client_connect.ts +11 -9
- package/src/errors/TrellisError.ts +4 -4
- package/src/server/health.ts +41 -3
- package/src/server/internal_jobs/job-manager.ts +35 -5
- package/src/server/runtime.ts +4 -0
- package/src/server/service.ts +75 -3
- package/src/server.ts +124 -14
- package/src/service/deno.ts +1 -0
- package/src/service/mod.ts +1 -0
- package/src/service/node.ts +1 -0
- package/src/service/outbox_inbox.ts +14 -0
- package/src/telemetry/core.ts +1 -1
- package/src/telemetry/env.ts +5 -1
- package/src/telemetry/init.ts +8 -0
- package/src/telemetry/metrics.ts +294 -0
- package/src/telemetry/mod.ts +7 -0
- package/src/telemetry/runtime.ts +218 -0
- package/src/telemetry.ts +2 -0
- package/src/transfer.ts +69 -30
- package/src/trellis.ts +652 -141
- package/esm/tracing.d.ts +0 -5
- package/esm/tracing.d.ts.map +0 -1
- package/esm/tracing.js +0 -8
- package/script/tracing.d.ts +0 -5
- package/script/tracing.d.ts.map +0 -1
- package/script/tracing.js +0 -27
- package/src/tracing.ts +0 -28
package/script/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAO,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,WAAW,EAMZ,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAKL,aAAa,EAId,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/script/server.js
CHANGED
|
@@ -19,6 +19,7 @@ const ulid_1 = require("ulid");
|
|
|
19
19
|
const codec_js_1 = require("./codec.js");
|
|
20
20
|
const index_js_1 = require("./errors/index.js");
|
|
21
21
|
const server_logger_js_1 = require("./server_logger.js");
|
|
22
|
+
const mod_js_1 = require("./telemetry/mod.js");
|
|
22
23
|
const trellis_js_1 = require("./trellis.js");
|
|
23
24
|
function isJsonValue(value) {
|
|
24
25
|
if (value === null || typeof value === "string" || typeof value === "number" ||
|
|
@@ -82,6 +83,29 @@ function asOptionalStringRecordPointerValue(input, pointer) {
|
|
|
82
83
|
}
|
|
83
84
|
return (0, result_1.ok)(Object.fromEntries(entries));
|
|
84
85
|
}
|
|
86
|
+
function traceIdFromTraceparent(traceparent) {
|
|
87
|
+
const [version, traceId, parentId, flags, extra] = traceparent?.split("-") ??
|
|
88
|
+
[];
|
|
89
|
+
if (extra !== undefined ||
|
|
90
|
+
!/^[0-9a-f]{2}$/u.test(version ?? "") ||
|
|
91
|
+
version === "ff" ||
|
|
92
|
+
!/^[0-9a-f]{32}$/u.test(traceId ?? "") ||
|
|
93
|
+
traceId === "00000000000000000000000000000000" ||
|
|
94
|
+
!/^[0-9a-f]{16}$/u.test(parentId ?? "") ||
|
|
95
|
+
parentId === "0000000000000000" ||
|
|
96
|
+
!/^[0-9a-f]{2}$/u.test(flags ?? "")) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
return traceId;
|
|
100
|
+
}
|
|
101
|
+
function recordOperationServerError(error, attributes) {
|
|
102
|
+
(0, mod_js_1.recordTrellisError)(error, {
|
|
103
|
+
messagingSystem: "nats",
|
|
104
|
+
surface: "operation",
|
|
105
|
+
direction: "server",
|
|
106
|
+
...attributes,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
85
109
|
class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
86
110
|
constructor(name, nats, auth, opts) {
|
|
87
111
|
super(name, nats, auth, { ...opts, log: opts?.log ?? server_logger_js_1.serverLogger });
|
|
@@ -121,7 +145,7 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
121
145
|
event: { type: "completed" },
|
|
122
146
|
}),
|
|
123
147
|
fail: (operationId, error) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyOperationUpdate).call(this, operationId, "failed", {
|
|
124
|
-
patch: { error:
|
|
148
|
+
patch: { error: error.toSerializable() },
|
|
125
149
|
event: { type: "failed" },
|
|
126
150
|
}),
|
|
127
151
|
cancel: (operationId) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyOperationUpdate).call(this, operationId, "cancelled", {
|
|
@@ -179,7 +203,7 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
179
203
|
}
|
|
180
204
|
runtime.waiters.clear();
|
|
181
205
|
};
|
|
182
|
-
const makeOperation = (runtime) => {
|
|
206
|
+
const makeOperation = (runtime, context) => {
|
|
183
207
|
const ensureActive = () => {
|
|
184
208
|
if (runtime.terminal) {
|
|
185
209
|
return (0, result_1.err)(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_operationAlreadyTerminalError).call(this, runtime));
|
|
@@ -244,8 +268,16 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
244
268
|
const active = ensureActive();
|
|
245
269
|
if (active)
|
|
246
270
|
return active;
|
|
271
|
+
const annotatedError = (0, trellis_js_1.annotateHandlerBoundaryError)(error, {
|
|
272
|
+
operation: String(operation),
|
|
273
|
+
requestId: context.requestId,
|
|
274
|
+
service: this.name,
|
|
275
|
+
contractId: this.contractId,
|
|
276
|
+
contractDigest: this.contractDigest,
|
|
277
|
+
traceId: context.traceId,
|
|
278
|
+
});
|
|
247
279
|
const snapshot = (0, trellis_js_1.buildRuntimeOperationSnapshot)(runtime, "failed", {
|
|
248
|
-
error:
|
|
280
|
+
error: annotatedError.toSerializable(),
|
|
249
281
|
completedAt: now(),
|
|
250
282
|
});
|
|
251
283
|
runtime.sequence += 1;
|
|
@@ -390,29 +422,50 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
390
422
|
const validated = await authenticate(msg, true);
|
|
391
423
|
const value = validated.take();
|
|
392
424
|
if ((0, result_1.isErr)(value)) {
|
|
425
|
+
recordOperationServerError(value.error, {
|
|
426
|
+
operation: String(operation),
|
|
427
|
+
phase: "start",
|
|
428
|
+
});
|
|
393
429
|
this.respondWithError(msg, value.error);
|
|
394
430
|
continue;
|
|
395
431
|
}
|
|
396
432
|
let transferSession;
|
|
397
433
|
if (ctx.transfer) {
|
|
398
434
|
if (!__classPrivateFieldGet(this, _TrellisServiceRuntime_transferSupport, "f")) {
|
|
399
|
-
|
|
435
|
+
const error = new index_js_1.UnexpectedError({
|
|
400
436
|
cause: new Error(`Operation '${String(operation)}' declared transfer support but no runtime transfer support is configured`),
|
|
401
|
-
})
|
|
437
|
+
});
|
|
438
|
+
recordOperationServerError(error, {
|
|
439
|
+
operation: String(operation),
|
|
440
|
+
phase: "start",
|
|
441
|
+
});
|
|
442
|
+
this.respondWithError(msg, error);
|
|
402
443
|
continue;
|
|
403
444
|
}
|
|
404
445
|
const key = asStringPointerValue(String(operation), value.input, ctx.transfer.key, "key").take();
|
|
405
446
|
if ((0, result_1.isErr)(key)) {
|
|
447
|
+
recordOperationServerError(key.error, {
|
|
448
|
+
operation: String(operation),
|
|
449
|
+
phase: "start",
|
|
450
|
+
});
|
|
406
451
|
this.respondWithError(msg, key.error);
|
|
407
452
|
continue;
|
|
408
453
|
}
|
|
409
454
|
const contentType = asOptionalStringPointerValue(value.input, ctx.transfer.contentType).take();
|
|
410
455
|
if ((0, result_1.isErr)(contentType)) {
|
|
456
|
+
recordOperationServerError(contentType.error, {
|
|
457
|
+
operation: String(operation),
|
|
458
|
+
phase: "start",
|
|
459
|
+
});
|
|
411
460
|
this.respondWithError(msg, contentType.error);
|
|
412
461
|
continue;
|
|
413
462
|
}
|
|
414
463
|
const metadata = asOptionalStringRecordPointerValue(value.input, ctx.transfer.metadata).take();
|
|
415
464
|
if ((0, result_1.isErr)(metadata)) {
|
|
465
|
+
recordOperationServerError(metadata.error, {
|
|
466
|
+
operation: String(operation),
|
|
467
|
+
phase: "start",
|
|
468
|
+
});
|
|
416
469
|
this.respondWithError(msg, metadata.error);
|
|
417
470
|
continue;
|
|
418
471
|
}
|
|
@@ -429,6 +482,10 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
429
482
|
...(metadata !== undefined ? { metadata } : {}),
|
|
430
483
|
}).take();
|
|
431
484
|
if ((0, result_1.isErr)(openedTransferValue)) {
|
|
485
|
+
recordOperationServerError(openedTransferValue.error, {
|
|
486
|
+
operation: String(operation),
|
|
487
|
+
phase: "start",
|
|
488
|
+
});
|
|
432
489
|
this.respondWithError(msg, openedTransferValue.error);
|
|
433
490
|
continue;
|
|
434
491
|
}
|
|
@@ -486,7 +543,11 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
486
543
|
};
|
|
487
544
|
msg.respond(JSON.stringify(accepted));
|
|
488
545
|
void (async () => {
|
|
489
|
-
const
|
|
546
|
+
const operationContext = {
|
|
547
|
+
requestId: msg.headers?.get("request-id"),
|
|
548
|
+
traceId: traceIdFromTraceparent(msg.headers?.get("traceparent")),
|
|
549
|
+
};
|
|
550
|
+
const op = makeOperation(runtime, operationContext);
|
|
490
551
|
try {
|
|
491
552
|
const handlerResult = await handler(transferSession
|
|
492
553
|
? {
|
|
@@ -504,7 +565,19 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
504
565
|
? handlerResult.take()
|
|
505
566
|
: handlerResult;
|
|
506
567
|
if ((0, result_1.isErr)(handlerOutcome)) {
|
|
507
|
-
|
|
568
|
+
const error = (0, trellis_js_1.annotateHandlerBoundaryError)(handlerOutcome.error, {
|
|
569
|
+
operation: String(operation),
|
|
570
|
+
requestId: operationContext.requestId,
|
|
571
|
+
service: this.name,
|
|
572
|
+
contractId: this.contractId,
|
|
573
|
+
contractDigest: this.contractDigest,
|
|
574
|
+
traceId: operationContext.traceId,
|
|
575
|
+
});
|
|
576
|
+
recordOperationServerError(error, {
|
|
577
|
+
operation: String(operation),
|
|
578
|
+
phase: "handler_result",
|
|
579
|
+
});
|
|
580
|
+
await op.fail(error);
|
|
508
581
|
return;
|
|
509
582
|
}
|
|
510
583
|
if ((0, trellis_js_1.isOperationDeferred)(handlerOutcome)) {
|
|
@@ -522,7 +595,19 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
522
595
|
}
|
|
523
596
|
}
|
|
524
597
|
catch (cause) {
|
|
525
|
-
|
|
598
|
+
const error = (0, trellis_js_1.annotateHandlerBoundaryError)(cause, {
|
|
599
|
+
operation: String(operation),
|
|
600
|
+
requestId: operationContext.requestId,
|
|
601
|
+
service: this.name,
|
|
602
|
+
contractId: this.contractId,
|
|
603
|
+
contractDigest: this.contractDigest,
|
|
604
|
+
traceId: operationContext.traceId,
|
|
605
|
+
});
|
|
606
|
+
recordOperationServerError(error, {
|
|
607
|
+
operation: String(operation),
|
|
608
|
+
phase: "handler_throw",
|
|
609
|
+
});
|
|
610
|
+
await op.fail(error);
|
|
526
611
|
}
|
|
527
612
|
})();
|
|
528
613
|
}
|
|
@@ -721,7 +806,7 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
|
|
|
721
806
|
event: { type: "completed" },
|
|
722
807
|
}),
|
|
723
808
|
fail: (error) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyControlledOperationUpdate).call(this, runtime, ctx, "failed", {
|
|
724
|
-
patch: { error:
|
|
809
|
+
patch: { error: error.toSerializable() },
|
|
725
810
|
event: { type: "failed" },
|
|
726
811
|
}),
|
|
727
812
|
cancel: () => {
|
|
@@ -993,6 +1078,10 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
|
|
|
993
1078
|
const trellisError = error instanceof result_1.BaseError
|
|
994
1079
|
? error
|
|
995
1080
|
: new index_js_1.UnexpectedError({ cause: error });
|
|
1081
|
+
recordOperationServerError(trellisError, {
|
|
1082
|
+
operation,
|
|
1083
|
+
phase: "control",
|
|
1084
|
+
});
|
|
996
1085
|
msg.respond(JSON.stringify({
|
|
997
1086
|
kind: "error",
|
|
998
1087
|
error: trellisError.toSerializable(),
|
package/script/service/deno.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import "../_dnt.polyfills.js";
|
|
2
|
-
export { type BoundTrellisService, type FeedHandler, type HealthCheckHandler, type HealthInfoHandler, type JobArgs, type JobHandler, type JobQueue, type JobResult, type JobsFacadeOf, type OperationHandler, type OperationRegistration, type RpcHandler, type ServiceContract, type ServiceEventHandler, type Trellis, TrellisService, type TrellisServiceConnectOpts, } from "../server/service.js";
|
|
2
|
+
export { type BoundTrellisService, type FeedHandler, type HealthCheckHandler, type HealthInfoHandler, type JobArgs, type JobHandler, type JobQueue, type JobResult, type JobsFacadeOf, type OperationHandler, type OperationRegistration, type RpcHandler, type ServiceContract, type ServiceEventHandler, type Trellis, TrellisService, type TrellisServiceConnectOpts, type TrellisServiceConnectTelemetryOpts, } from "../server/service.js";
|
|
3
3
|
//# sourceMappingURL=deno.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deno.d.ts","sourceRoot":"","sources":["../../src/service/deno.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,cAAc,EACd,KAAK,yBAAyB,
|
|
1
|
+
{"version":3,"file":"deno.d.ts","sourceRoot":"","sources":["../../src/service/deno.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,cAAc,EACd,KAAK,yBAAyB,EAC9B,KAAK,kCAAkC,GACxC,MAAM,sBAAsB,CAAC"}
|
package/script/service/mod.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import "../_dnt.polyfills.js";
|
|
|
10
10
|
export { createHealthHeartbeat, type HealthCheckFn, type HealthCheckResult, type HealthHeartbeat, type HealthResponse, runAllHealthChecks, runAllServiceHealthChecks, runHealthCheck, runServiceHealthCheck, ServiceHealth, type ServiceHealthCheck, type ServiceHealthCheckFn, type ServiceHealthInfo, type ServiceHealthInfoFn, } from "../server/health.js";
|
|
11
11
|
export { mountStandardHealthRpc } from "../server/health_rpc.js";
|
|
12
12
|
export { HealthCheckResultSchema, HealthHeartbeatHeaderSchema, HealthHeartbeatSchema, HealthHeartbeatServiceSchema, HealthInfoSchema, HealthResponseSchema, HealthRpcSchema, } from "../server/health_schemas.js";
|
|
13
|
-
export { type BoundTrellisService, type FeedHandler, type HealthCheckHandler, type HealthInfoHandler, type JobArgs, type JobHandler, type JobQueue, type JobResult, type JobsFacadeOf, type OperationHandler, type OperationRegistration, type RpcHandler, type ServiceContract, type ServiceEventHandler, StoreHandle, type Trellis, TrellisService, type TrellisServiceConnectOpts, } from "../server/service.js";
|
|
13
|
+
export { type BoundTrellisService, type FeedHandler, type HealthCheckHandler, type HealthInfoHandler, type JobArgs, type JobHandler, type JobQueue, type JobResult, type JobsFacadeOf, type OperationHandler, type OperationRegistration, type RpcHandler, type ServiceContract, type ServiceEventHandler, StoreHandle, type Trellis, TrellisService, type TrellisServiceConnectOpts, type TrellisServiceConnectTelemetryOpts, } from "../server/service.js";
|
|
14
14
|
export { createPostgresOutboxSchema, createSqliteOutboxSchema, createSqlOutboxAdapter, defaultSqlOutboxTables, dispatchOutbox, type InboxRepository, type KvOutboxRecord, KvOutboxRecordSchema, MemoryInboxRepository, MemoryOutboxRepository, NatsKvInboxRepository, NatsKvOutboxRepository, OutboxDispatcher, type OutboxDispatcherOptions, type OutboxDispatchResult, type OutboxKvEntry, type OutboxKvStore, type OutboxMessage, type OutboxMessageState, outboxMessageToPrepared, type OutboxRepository, type SqlDialect, type SqlExecutor, SqlInboxRepository, type SqlOutboxAdapter, SqlOutboxRepository, type SqlOutboxTables, type SqlRow, } from "./outbox_inbox.js";
|
|
15
15
|
export { createEventContext, type EventContext, type EventHandler, type GroupedSubscription, isGroupedSubscription, type MultiEventSubscription, type MultiSubscribeOpts, type OrderingGroup, type SingleSubscription, type SubscribeOpts, } from "../server/subscription.js";
|
|
16
16
|
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/service/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,WAAW,EACX,KAAK,OAAO,EACZ,cAAc,EACd,KAAK,yBAAyB,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/service/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,4BAA4B,EAC5B,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,WAAW,EACX,KAAK,OAAO,EACZ,cAAc,EACd,KAAK,yBAAyB,EAC9B,KAAK,kCAAkC,GACxC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,MAAM,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,2BAA2B,CAAC"}
|
package/script/service/node.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import "../_dnt.polyfills.js";
|
|
2
|
-
export { type BoundTrellisService, type FeedHandler, type HealthCheckHandler, type HealthInfoHandler, type JobArgs, type JobHandler, type JobQueue, type JobResult, type JobsFacadeOf, type OperationHandler, type OperationRegistration, type RpcHandler, type ServiceContract, type ServiceEventHandler, type Trellis, TrellisService, type TrellisServiceConnectOpts, } from "../server/service.js";
|
|
2
|
+
export { type BoundTrellisService, type FeedHandler, type HealthCheckHandler, type HealthInfoHandler, type JobArgs, type JobHandler, type JobQueue, type JobResult, type JobsFacadeOf, type OperationHandler, type OperationRegistration, type RpcHandler, type ServiceContract, type ServiceEventHandler, type Trellis, TrellisService, type TrellisServiceConnectOpts, type TrellisServiceConnectTelemetryOpts, } from "../server/service.js";
|
|
3
3
|
//# sourceMappingURL=node.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/service/node.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,cAAc,EACd,KAAK,yBAAyB,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/service/node.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,cAAc,EACd,KAAK,yBAAyB,EAC9B,KAAK,kCAAkC,GACxC,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox_inbox.d.ts","sourceRoot":"","sources":["../../src/service/outbox_inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAS,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,KAAK,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"outbox_inbox.d.ts","sourceRoot":"","sources":["../../src/service/outbox_inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ exports.outboxMessageToPrepared = outboxMessageToPrepared;
|
|
|
21
21
|
const result_1 = require("@qlever-llc/result");
|
|
22
22
|
const typebox_1 = require("typebox");
|
|
23
23
|
const kv_js_1 = require("../kv.js");
|
|
24
|
+
const mod_js_1 = require("../telemetry/mod.js");
|
|
24
25
|
exports.defaultSqlOutboxTables = Object.freeze({
|
|
25
26
|
outbox: "trellis_outbox",
|
|
26
27
|
inbox: "trellis_inbox",
|
|
@@ -554,6 +555,12 @@ _OutboxDispatcher_repository = new WeakMap(), _OutboxDispatcher_runtime = new We
|
|
|
554
555
|
});
|
|
555
556
|
}
|
|
556
557
|
catch (error) {
|
|
558
|
+
(0, mod_js_1.recordTrellisError)(error, {
|
|
559
|
+
surface: "outbox",
|
|
560
|
+
direction: "dispatcher",
|
|
561
|
+
operation: "batch",
|
|
562
|
+
phase: "dispatch",
|
|
563
|
+
});
|
|
557
564
|
__classPrivateFieldGet(this, _OutboxDispatcher_instances, "m", _OutboxDispatcher_scheduleRetryWakeup).call(this);
|
|
558
565
|
try {
|
|
559
566
|
__classPrivateFieldGet(this, _OutboxDispatcher_options, "f").onError?.(error);
|
|
@@ -590,6 +597,13 @@ async function dispatchOutbox(repository, runtime, options = {}) {
|
|
|
590
597
|
const result = await runtime.publishPrepared(outboxMessageToPrepared(message));
|
|
591
598
|
const value = result.take();
|
|
592
599
|
if ((0, result_1.isErr)(value)) {
|
|
600
|
+
(0, mod_js_1.recordTrellisError)(value.error, {
|
|
601
|
+
surface: "outbox",
|
|
602
|
+
direction: "dispatcher",
|
|
603
|
+
operation: message.event,
|
|
604
|
+
phase: "publish",
|
|
605
|
+
messagingSystem: "nats",
|
|
606
|
+
});
|
|
593
607
|
failed += 1;
|
|
594
608
|
await repository.markFailed(message.id, {
|
|
595
609
|
error: value.error.message,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/telemetry/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,OAAO,EACP,KAAK,IAAI,EACT,QAAQ,EACR,cAAc,EACd,KAAK,EACL,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,SAAS,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/telemetry/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,OAAO,EACP,KAAK,IAAI,EACT,QAAQ,EACR,cAAc,EACd,KAAK,EACL,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,SAAS,CAAC,KAAK,SAAkC,GAAG,MAAM,CAEzE;AAED,wBAAgB,aAAa,IAAI,IAAI,GAAG,SAAS,CAEhD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEtD;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;AACpD,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
package/script/telemetry/core.js
CHANGED
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "context", { enumerable: true, get: function () {
|
|
|
10
10
|
Object.defineProperty(exports, "SpanKind", { enumerable: true, get: function () { return api_1.SpanKind; } });
|
|
11
11
|
Object.defineProperty(exports, "SpanStatusCode", { enumerable: true, get: function () { return api_1.SpanStatusCode; } });
|
|
12
12
|
Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return api_1.trace; } });
|
|
13
|
-
function getTracer(scope = "@qlever-llc/trellis/
|
|
13
|
+
function getTracer(scope = "@qlever-llc/trellis/telemetry") {
|
|
14
14
|
return api_1.trace.getTracer(scope);
|
|
15
15
|
}
|
|
16
16
|
function getActiveSpan() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/telemetry/env.ts"],"names":[],"mappings":"AAYA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/telemetry/env.ts"],"names":[],"mappings":"AAYA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CActD"}
|
package/script/telemetry/env.js
CHANGED
|
@@ -39,7 +39,12 @@ const dntShim = __importStar(require("../_dnt.shims.js"));
|
|
|
39
39
|
function getEnv(key) {
|
|
40
40
|
const deno = dntShim.dntGlobalThis;
|
|
41
41
|
if (deno.Deno?.env?.get) {
|
|
42
|
-
|
|
42
|
+
try {
|
|
43
|
+
return deno.Deno.env.get(key);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
43
48
|
}
|
|
44
49
|
const processGlobal = dntShim.dntGlobalThis;
|
|
45
50
|
return processGlobal.process?.env?.[key];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/telemetry/init.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGvD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initTelemetry = initTelemetry;
|
|
4
|
+
const result_js_1 = require("./result.js");
|
|
5
|
+
const runtime_js_1 = require("./runtime.js");
|
|
6
|
+
/** Initializes Trellis telemetry for a service runtime. */
|
|
7
|
+
function initTelemetry(serviceName) {
|
|
8
|
+
(0, result_js_1.configureErrorTraceId)();
|
|
9
|
+
(0, runtime_js_1.initTelemetryRuntime)(serviceName);
|
|
10
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Meter } from "@opentelemetry/api";
|
|
2
|
+
/** Low-cardinality attributes accepted by {@link recordTrellisError}. */
|
|
3
|
+
export type TrellisErrorMetricAttributes = {
|
|
4
|
+
/** Stable Trellis surface name, such as `rpc`, `jobs`, or `operations`. */
|
|
5
|
+
surface?: string;
|
|
6
|
+
/** Stable flow direction such as `client`, `server`, `publish`, or `consume`. */
|
|
7
|
+
direction?: string;
|
|
8
|
+
/** Stable operation kind or method name. Do not pass IDs, subjects, or URLs. */
|
|
9
|
+
operation?: string;
|
|
10
|
+
/** Stable lifecycle phase such as `encode`, `send`, `auth`, or `handler`. */
|
|
11
|
+
phase?: string;
|
|
12
|
+
/** Stable local Trellis error type override when the thrown value does not expose one. */
|
|
13
|
+
errorType?: string;
|
|
14
|
+
/** Stable wrapped remote Trellis error type override. */
|
|
15
|
+
remoteErrorType?: string;
|
|
16
|
+
/** Stable auth failure reason, such as `missing_session_key`. */
|
|
17
|
+
authReason?: string;
|
|
18
|
+
/** Static messaging system name, when already known. */
|
|
19
|
+
messagingSystem?: string;
|
|
20
|
+
/** Static messaging operation name, when already known. */
|
|
21
|
+
messagingOperation?: string;
|
|
22
|
+
};
|
|
23
|
+
/** Returns the shared Trellis OpenTelemetry meter. */
|
|
24
|
+
export declare function getTrellisMeter(): Meter;
|
|
25
|
+
/** Records one Trellis error with only stable, low-cardinality attributes. */
|
|
26
|
+
export declare function recordTrellisError(error: unknown, attributes?: TrellisErrorMetricAttributes): void;
|
|
27
|
+
/**
|
|
28
|
+
* Builds sanitized, low-cardinality attributes for `trellis.errors`.
|
|
29
|
+
*
|
|
30
|
+
* @internal Exported for focused tests; runtime callers should use
|
|
31
|
+
* {@link recordTrellisError}.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildTrellisErrorMetricAttributes(error: unknown, attributes?: TrellisErrorMetricAttributes): Record<string, string>;
|
|
34
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAW,MAAM,oBAAoB,CAAC;AAiDzD,yEAAyE;AACzE,MAAM,MAAM,4BAA4B,GAAG;IACzC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AASF,sDAAsD;AACtD,wBAAgB,eAAe,IAAI,KAAK,CAEvC;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,UAAU,GAAE,4BAAiC,GAC5C,IAAI,CAWN;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,UAAU,GAAE,4BAAiC,GAC5C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsDxB"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTrellisMeter = getTrellisMeter;
|
|
4
|
+
exports.recordTrellisError = recordTrellisError;
|
|
5
|
+
exports.buildTrellisErrorMetricAttributes = buildTrellisErrorMetricAttributes;
|
|
6
|
+
const api_1 = require("@opentelemetry/api");
|
|
7
|
+
const TRELLIS_METER_NAME = "@qlever-llc/trellis";
|
|
8
|
+
const MAX_ATTRIBUTE_LENGTH = 96;
|
|
9
|
+
const LOW_CARDINALITY_PATTERN = /^[A-Za-z0-9_.:-]+$/;
|
|
10
|
+
const UUID_PATTERN = /(^|[_.:-])[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}($|[_.:-])/i;
|
|
11
|
+
const ULID_PATTERN = /(^|[_.:-])[0-7][0-9A-HJKMNP-TV-Z]{25}($|[_.:-])/i;
|
|
12
|
+
const LONG_HEX_SEGMENT_PATTERN = /(^|[_.:-])[0-9a-f]{12,}($|[_.:-])/i;
|
|
13
|
+
const TRELLIS_SUBJECT_PREFIX_PATTERN = /^(rpc|events|feeds|operations|jobs|state|kv|store|resources|transfer)\.v\d+\./;
|
|
14
|
+
const AUTH_REASONS = new Set([
|
|
15
|
+
"invalid_request",
|
|
16
|
+
"missing_session_key",
|
|
17
|
+
"missing_proof",
|
|
18
|
+
"session_not_found",
|
|
19
|
+
"session_expired",
|
|
20
|
+
"invalid_signature",
|
|
21
|
+
"user_not_found",
|
|
22
|
+
"user_already_exists",
|
|
23
|
+
"username_taken",
|
|
24
|
+
"identity_already_exists",
|
|
25
|
+
"identity_not_found",
|
|
26
|
+
"user_inactive",
|
|
27
|
+
"unknown_device",
|
|
28
|
+
"device_deployment_not_found",
|
|
29
|
+
"device_deployment_disabled",
|
|
30
|
+
"device_activation_revoked",
|
|
31
|
+
"unknown_service",
|
|
32
|
+
"service_disabled",
|
|
33
|
+
"iat_out_of_range",
|
|
34
|
+
"invalid_binding_token",
|
|
35
|
+
"session_corrupted",
|
|
36
|
+
"session_already_bound",
|
|
37
|
+
"authtoken_already_used",
|
|
38
|
+
"oauth_session_key_mismatch",
|
|
39
|
+
"reply_subject_mismatch",
|
|
40
|
+
"insufficient_permissions",
|
|
41
|
+
"forbidden",
|
|
42
|
+
"last_admin_required",
|
|
43
|
+
"missing_flow_id",
|
|
44
|
+
"device_activation_flow_not_found",
|
|
45
|
+
"device_activation_flow_expired",
|
|
46
|
+
"device_activation_rejected",
|
|
47
|
+
"device_identity_key_mismatch",
|
|
48
|
+
"invalid_device_qr_mac",
|
|
49
|
+
]);
|
|
50
|
+
/** Returns the shared Trellis OpenTelemetry meter. */
|
|
51
|
+
function getTrellisMeter() {
|
|
52
|
+
return api_1.metrics.getMeter(TRELLIS_METER_NAME);
|
|
53
|
+
}
|
|
54
|
+
/** Records one Trellis error with only stable, low-cardinality attributes. */
|
|
55
|
+
function recordTrellisError(error, attributes = {}) {
|
|
56
|
+
getTrellisMeter().createCounter("trellis.errors", {
|
|
57
|
+
description: "Trellis errors observed by runtime instrumentation.",
|
|
58
|
+
unit: "{error}",
|
|
59
|
+
}).add(1, buildTrellisErrorMetricAttributes(error, attributes));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Builds sanitized, low-cardinality attributes for `trellis.errors`.
|
|
63
|
+
*
|
|
64
|
+
* @internal Exported for focused tests; runtime callers should use
|
|
65
|
+
* {@link recordTrellisError}.
|
|
66
|
+
*/
|
|
67
|
+
function buildTrellisErrorMetricAttributes(error, attributes = {}) {
|
|
68
|
+
const serializable = serializableErrorData(error);
|
|
69
|
+
const metricAttributes = {
|
|
70
|
+
"exception.type": exceptionType(error),
|
|
71
|
+
"trellis.error.type": trellisErrorType(error, serializable, attributes.errorType),
|
|
72
|
+
};
|
|
73
|
+
const remoteErrorType = lowCardinalityValue(attributes.remoteErrorType) ??
|
|
74
|
+
remoteSerializableErrorType(serializable);
|
|
75
|
+
if (remoteErrorType) {
|
|
76
|
+
metricAttributes["trellis.remote_error.type"] = remoteErrorType;
|
|
77
|
+
}
|
|
78
|
+
setLowCardinalityAttribute(metricAttributes, "trellis.surface", attributes.surface);
|
|
79
|
+
setLowCardinalityAttribute(metricAttributes, "trellis.direction", attributes.direction);
|
|
80
|
+
setLowCardinalityAttribute(metricAttributes, "trellis.operation", attributes.operation);
|
|
81
|
+
setLowCardinalityAttribute(metricAttributes, "trellis.phase", attributes.phase);
|
|
82
|
+
setLowCardinalityAttribute(metricAttributes, "trellis.auth.reason", boundedAuthReason(attributes.authReason) ?? authReason(serializable));
|
|
83
|
+
setLowCardinalityAttribute(metricAttributes, "messaging.system", attributes.messagingSystem);
|
|
84
|
+
setLowCardinalityAttribute(metricAttributes, "messaging.operation", attributes.messagingOperation);
|
|
85
|
+
return metricAttributes;
|
|
86
|
+
}
|
|
87
|
+
function trellisErrorType(error, serializable, override) {
|
|
88
|
+
const overrideType = lowCardinalityValue(override);
|
|
89
|
+
if (overrideType)
|
|
90
|
+
return overrideType;
|
|
91
|
+
const serializableType = lowCardinalityValue(serializable?.type);
|
|
92
|
+
if (serializableType)
|
|
93
|
+
return serializableType;
|
|
94
|
+
const objectType = objectStringProperty(error, "type");
|
|
95
|
+
if (objectType)
|
|
96
|
+
return objectType;
|
|
97
|
+
return exceptionType(error);
|
|
98
|
+
}
|
|
99
|
+
function exceptionType(error) {
|
|
100
|
+
if (error instanceof Error) {
|
|
101
|
+
const name = lowCardinalityValue(error.name);
|
|
102
|
+
if (name)
|
|
103
|
+
return name;
|
|
104
|
+
}
|
|
105
|
+
const objectType = objectStringProperty(error, "type");
|
|
106
|
+
if (objectType)
|
|
107
|
+
return objectType;
|
|
108
|
+
return "unknown";
|
|
109
|
+
}
|
|
110
|
+
function serializableErrorData(error) {
|
|
111
|
+
const toSerializable = safeProperty(error, "toSerializable");
|
|
112
|
+
if (!isSerializableMethod(toSerializable))
|
|
113
|
+
return undefined;
|
|
114
|
+
try {
|
|
115
|
+
const data = toSerializable.call(error);
|
|
116
|
+
return isRecord(data) ? data : undefined;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function remoteSerializableErrorType(serializable) {
|
|
123
|
+
const remoteError = safeProperty(serializable, "remoteError");
|
|
124
|
+
if (!isRecord(remoteError))
|
|
125
|
+
return undefined;
|
|
126
|
+
return objectStringProperty(remoteError, "type");
|
|
127
|
+
}
|
|
128
|
+
function authReason(serializable) {
|
|
129
|
+
const type = safeProperty(serializable, "type");
|
|
130
|
+
if (type === "AuthError") {
|
|
131
|
+
return boundedAuthReason(safeProperty(serializable, "reason"));
|
|
132
|
+
}
|
|
133
|
+
if (type === "RemoteError") {
|
|
134
|
+
const remoteError = safeProperty(serializable, "remoteError");
|
|
135
|
+
if (isRecord(remoteError) && objectStringProperty(remoteError, "type") ===
|
|
136
|
+
"AuthError") {
|
|
137
|
+
return boundedAuthReason(safeProperty(remoteError, "reason"));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
function boundedAuthReason(value) {
|
|
143
|
+
const sanitized = lowCardinalityValue(value);
|
|
144
|
+
if (!sanitized || !AUTH_REASONS.has(sanitized))
|
|
145
|
+
return undefined;
|
|
146
|
+
return sanitized;
|
|
147
|
+
}
|
|
148
|
+
function isRecord(value) {
|
|
149
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
150
|
+
}
|
|
151
|
+
function isSerializableMethod(value) {
|
|
152
|
+
return typeof value === "function";
|
|
153
|
+
}
|
|
154
|
+
function safeProperty(value, key) {
|
|
155
|
+
if (!isRecord(value))
|
|
156
|
+
return undefined;
|
|
157
|
+
try {
|
|
158
|
+
return value[key];
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function objectStringProperty(value, key) {
|
|
165
|
+
return lowCardinalityValue(safeProperty(value, key));
|
|
166
|
+
}
|
|
167
|
+
function setLowCardinalityAttribute(attributes, key, value) {
|
|
168
|
+
const sanitized = lowCardinalityValue(value);
|
|
169
|
+
if (sanitized)
|
|
170
|
+
attributes[key] = sanitized;
|
|
171
|
+
}
|
|
172
|
+
function lowCardinalityValue(value) {
|
|
173
|
+
if (typeof value !== "string")
|
|
174
|
+
return undefined;
|
|
175
|
+
const trimmed = value.trim();
|
|
176
|
+
if (trimmed.length === 0 ||
|
|
177
|
+
trimmed.length > MAX_ATTRIBUTE_LENGTH ||
|
|
178
|
+
!LOW_CARDINALITY_PATTERN.test(trimmed) ||
|
|
179
|
+
UUID_PATTERN.test(trimmed) ||
|
|
180
|
+
ULID_PATTERN.test(trimmed) ||
|
|
181
|
+
LONG_HEX_SEGMENT_PATTERN.test(trimmed) ||
|
|
182
|
+
TRELLIS_SUBJECT_PREFIX_PATTERN.test(trimmed)) {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
return trimmed;
|
|
186
|
+
}
|
|
@@ -3,6 +3,9 @@ export { createMapCarrier, extractTraceContext, injectTraceContext, } from "./ca
|
|
|
3
3
|
export type { Context, Span } from "./core.js";
|
|
4
4
|
export { context, getActiveSpan, getTracer, SpanKind, SpanStatusCode, trace, withSpan, withSpanAsync, } from "./core.js";
|
|
5
5
|
export { getEnv } from "./env.js";
|
|
6
|
+
export { initTelemetry } from "./init.js";
|
|
7
|
+
export { buildTrellisErrorMetricAttributes, getTrellisMeter, recordTrellisError, } from "./metrics.js";
|
|
8
|
+
export type { TrellisErrorMetricAttributes } from "./metrics.js";
|
|
6
9
|
export type { NatsHeadersLike } from "./nats.js";
|
|
7
10
|
export { createNatsHeaderCarrier } from "./nats.js";
|
|
8
11
|
export { configureErrorTraceId } from "./result.js";
|