@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.
Files changed (131) hide show
  1. package/esm/client.d.ts +2 -0
  2. package/esm/client.d.ts.map +1 -1
  3. package/esm/client.js +2 -0
  4. package/esm/client_connect.d.ts +3 -2
  5. package/esm/client_connect.d.ts.map +1 -1
  6. package/esm/client_connect.js +4 -1
  7. package/esm/errors/TrellisError.d.ts +3 -3
  8. package/esm/errors/TrellisError.js +3 -3
  9. package/esm/server/health.d.ts.map +1 -1
  10. package/esm/server/health.js +34 -3
  11. package/esm/server/internal_jobs/job-manager.d.ts.map +1 -1
  12. package/esm/server/internal_jobs/job-manager.js +32 -1
  13. package/esm/server/runtime.d.ts +3 -0
  14. package/esm/server/runtime.d.ts.map +1 -1
  15. package/esm/server/service.d.ts +15 -0
  16. package/esm/server/service.d.ts.map +1 -1
  17. package/esm/server/service.js +41 -3
  18. package/esm/server.d.ts.map +1 -1
  19. package/esm/server.js +99 -10
  20. package/esm/service/deno.d.ts +1 -1
  21. package/esm/service/deno.d.ts.map +1 -1
  22. package/esm/service/mod.d.ts +1 -1
  23. package/esm/service/mod.d.ts.map +1 -1
  24. package/esm/service/node.d.ts +1 -1
  25. package/esm/service/node.d.ts.map +1 -1
  26. package/esm/service/outbox_inbox.d.ts.map +1 -1
  27. package/esm/service/outbox_inbox.js +14 -0
  28. package/esm/telemetry/core.d.ts.map +1 -1
  29. package/esm/telemetry/core.js +1 -1
  30. package/esm/telemetry/env.d.ts.map +1 -1
  31. package/esm/telemetry/env.js +6 -1
  32. package/esm/telemetry/init.d.ts +3 -0
  33. package/esm/telemetry/init.d.ts.map +1 -0
  34. package/esm/telemetry/init.js +7 -0
  35. package/esm/telemetry/metrics.d.ts +34 -0
  36. package/esm/telemetry/metrics.d.ts.map +1 -0
  37. package/esm/telemetry/metrics.js +181 -0
  38. package/esm/telemetry/mod.d.ts +3 -0
  39. package/esm/telemetry/mod.d.ts.map +1 -1
  40. package/esm/telemetry/mod.js +2 -0
  41. package/esm/telemetry/runtime.d.ts +2 -0
  42. package/esm/telemetry/runtime.d.ts.map +1 -0
  43. package/esm/telemetry/runtime.js +134 -0
  44. package/esm/telemetry.d.ts +3 -0
  45. package/esm/telemetry.d.ts.map +1 -0
  46. package/esm/telemetry.js +2 -0
  47. package/esm/transfer.d.ts.map +1 -1
  48. package/esm/transfer.js +27 -16
  49. package/esm/trellis.d.ts +28 -4
  50. package/esm/trellis.d.ts.map +1 -1
  51. package/esm/trellis.js +575 -80
  52. package/package.json +7 -5
  53. package/script/client.d.ts +2 -0
  54. package/script/client.d.ts.map +1 -1
  55. package/script/client.js +2 -0
  56. package/script/client_connect.d.ts +3 -2
  57. package/script/client_connect.d.ts.map +1 -1
  58. package/script/client_connect.js +4 -1
  59. package/script/errors/TrellisError.d.ts +3 -3
  60. package/script/errors/TrellisError.js +3 -3
  61. package/script/server/health.d.ts.map +1 -1
  62. package/script/server/health.js +34 -3
  63. package/script/server/internal_jobs/job-manager.d.ts.map +1 -1
  64. package/script/server/internal_jobs/job-manager.js +32 -1
  65. package/script/server/runtime.d.ts +3 -0
  66. package/script/server/runtime.d.ts.map +1 -1
  67. package/script/server/service.d.ts +15 -0
  68. package/script/server/service.d.ts.map +1 -1
  69. package/script/server/service.js +40 -2
  70. package/script/server.d.ts.map +1 -1
  71. package/script/server.js +98 -9
  72. package/script/service/deno.d.ts +1 -1
  73. package/script/service/deno.d.ts.map +1 -1
  74. package/script/service/mod.d.ts +1 -1
  75. package/script/service/mod.d.ts.map +1 -1
  76. package/script/service/node.d.ts +1 -1
  77. package/script/service/node.d.ts.map +1 -1
  78. package/script/service/outbox_inbox.d.ts.map +1 -1
  79. package/script/service/outbox_inbox.js +14 -0
  80. package/script/telemetry/core.d.ts.map +1 -1
  81. package/script/telemetry/core.js +1 -1
  82. package/script/telemetry/env.d.ts.map +1 -1
  83. package/script/telemetry/env.js +6 -1
  84. package/script/telemetry/init.d.ts +3 -0
  85. package/script/telemetry/init.d.ts.map +1 -0
  86. package/script/telemetry/init.js +10 -0
  87. package/script/telemetry/metrics.d.ts +34 -0
  88. package/script/telemetry/metrics.d.ts.map +1 -0
  89. package/script/telemetry/metrics.js +186 -0
  90. package/script/telemetry/mod.d.ts +3 -0
  91. package/script/telemetry/mod.d.ts.map +1 -1
  92. package/script/telemetry/mod.js +7 -1
  93. package/script/telemetry/runtime.d.ts +2 -0
  94. package/script/telemetry/runtime.d.ts.map +1 -0
  95. package/script/telemetry/runtime.js +137 -0
  96. package/script/telemetry.d.ts +3 -0
  97. package/script/telemetry.d.ts.map +1 -0
  98. package/script/telemetry.js +18 -0
  99. package/script/transfer.d.ts.map +1 -1
  100. package/script/transfer.js +28 -17
  101. package/script/trellis.d.ts +28 -4
  102. package/script/trellis.d.ts.map +1 -1
  103. package/script/trellis.js +606 -110
  104. package/src/client.ts +4 -0
  105. package/src/client_connect.ts +11 -9
  106. package/src/errors/TrellisError.ts +4 -4
  107. package/src/server/health.ts +41 -3
  108. package/src/server/internal_jobs/job-manager.ts +35 -5
  109. package/src/server/runtime.ts +4 -0
  110. package/src/server/service.ts +75 -3
  111. package/src/server.ts +124 -14
  112. package/src/service/deno.ts +1 -0
  113. package/src/service/mod.ts +1 -0
  114. package/src/service/node.ts +1 -0
  115. package/src/service/outbox_inbox.ts +14 -0
  116. package/src/telemetry/core.ts +1 -1
  117. package/src/telemetry/env.ts +5 -1
  118. package/src/telemetry/init.ts +8 -0
  119. package/src/telemetry/metrics.ts +294 -0
  120. package/src/telemetry/mod.ts +7 -0
  121. package/src/telemetry/runtime.ts +218 -0
  122. package/src/telemetry.ts +2 -0
  123. package/src/transfer.ts +69 -30
  124. package/src/trellis.ts +652 -141
  125. package/esm/tracing.d.ts +0 -5
  126. package/esm/tracing.d.ts.map +0 -1
  127. package/esm/tracing.js +0 -8
  128. package/script/tracing.d.ts +0 -5
  129. package/script/tracing.d.ts.map +0 -1
  130. package/script/tracing.js +0 -27
  131. package/src/tracing.ts +0 -28
package/esm/server.js CHANGED
@@ -16,7 +16,8 @@ import { ulid } from "ulid";
16
16
  import { parseSchema } from "./codec.js";
17
17
  import { AuthError, OperationAlreadyTerminalError, OperationMismatchError, OperationNotFoundError, TransferError, UnexpectedError, ValidationError, } from "./errors/index.js";
18
18
  import { serverLogger } from "./server_logger.js";
19
- import { base64urlDecode, base64urlEncode, buildProofInput, buildRuntimeOperationSnapshot, isOperationDeferred, isResultLike, isTerminalRuntimeOperationSnapshot, safeJson, sha256, toArrayBuffer, Trellis, } from "./trellis.js";
19
+ import { recordTrellisError, } from "./telemetry/mod.js";
20
+ import { annotateHandlerBoundaryError, base64urlDecode, base64urlEncode, buildProofInput, buildRuntimeOperationSnapshot, isOperationDeferred, isResultLike, isTerminalRuntimeOperationSnapshot, safeJson, sha256, toArrayBuffer, Trellis, } from "./trellis.js";
20
21
  function isJsonValue(value) {
21
22
  if (value === null || typeof value === "string" || typeof value === "number" ||
22
23
  typeof value === "boolean") {
@@ -79,6 +80,29 @@ function asOptionalStringRecordPointerValue(input, pointer) {
79
80
  }
80
81
  return ok(Object.fromEntries(entries));
81
82
  }
83
+ function traceIdFromTraceparent(traceparent) {
84
+ const [version, traceId, parentId, flags, extra] = traceparent?.split("-") ??
85
+ [];
86
+ if (extra !== undefined ||
87
+ !/^[0-9a-f]{2}$/u.test(version ?? "") ||
88
+ version === "ff" ||
89
+ !/^[0-9a-f]{32}$/u.test(traceId ?? "") ||
90
+ traceId === "00000000000000000000000000000000" ||
91
+ !/^[0-9a-f]{16}$/u.test(parentId ?? "") ||
92
+ parentId === "0000000000000000" ||
93
+ !/^[0-9a-f]{2}$/u.test(flags ?? "")) {
94
+ return undefined;
95
+ }
96
+ return traceId;
97
+ }
98
+ function recordOperationServerError(error, attributes) {
99
+ recordTrellisError(error, {
100
+ messagingSystem: "nats",
101
+ surface: "operation",
102
+ direction: "server",
103
+ ...attributes,
104
+ });
105
+ }
82
106
  export class TrellisServiceRuntime extends Trellis {
83
107
  constructor(name, nats, auth, opts) {
84
108
  super(name, nats, auth, { ...opts, log: opts?.log ?? serverLogger });
@@ -118,7 +142,7 @@ export class TrellisServiceRuntime extends Trellis {
118
142
  event: { type: "completed" },
119
143
  }),
120
144
  fail: (operationId, error) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyOperationUpdate).call(this, operationId, "failed", {
121
- patch: { error: { type: error.name, message: error.message } },
145
+ patch: { error: error.toSerializable() },
122
146
  event: { type: "failed" },
123
147
  }),
124
148
  cancel: (operationId) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyOperationUpdate).call(this, operationId, "cancelled", {
@@ -176,7 +200,7 @@ export class TrellisServiceRuntime extends Trellis {
176
200
  }
177
201
  runtime.waiters.clear();
178
202
  };
179
- const makeOperation = (runtime) => {
203
+ const makeOperation = (runtime, context) => {
180
204
  const ensureActive = () => {
181
205
  if (runtime.terminal) {
182
206
  return err(__classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_operationAlreadyTerminalError).call(this, runtime));
@@ -241,8 +265,16 @@ export class TrellisServiceRuntime extends Trellis {
241
265
  const active = ensureActive();
242
266
  if (active)
243
267
  return active;
268
+ const annotatedError = annotateHandlerBoundaryError(error, {
269
+ operation: String(operation),
270
+ requestId: context.requestId,
271
+ service: this.name,
272
+ contractId: this.contractId,
273
+ contractDigest: this.contractDigest,
274
+ traceId: context.traceId,
275
+ });
244
276
  const snapshot = buildRuntimeOperationSnapshot(runtime, "failed", {
245
- error: { type: error.name, message: error.message },
277
+ error: annotatedError.toSerializable(),
246
278
  completedAt: now(),
247
279
  });
248
280
  runtime.sequence += 1;
@@ -387,29 +419,50 @@ export class TrellisServiceRuntime extends Trellis {
387
419
  const validated = await authenticate(msg, true);
388
420
  const value = validated.take();
389
421
  if (isErr(value)) {
422
+ recordOperationServerError(value.error, {
423
+ operation: String(operation),
424
+ phase: "start",
425
+ });
390
426
  this.respondWithError(msg, value.error);
391
427
  continue;
392
428
  }
393
429
  let transferSession;
394
430
  if (ctx.transfer) {
395
431
  if (!__classPrivateFieldGet(this, _TrellisServiceRuntime_transferSupport, "f")) {
396
- this.respondWithError(msg, new UnexpectedError({
432
+ const error = new UnexpectedError({
397
433
  cause: new Error(`Operation '${String(operation)}' declared transfer support but no runtime transfer support is configured`),
398
- }));
434
+ });
435
+ recordOperationServerError(error, {
436
+ operation: String(operation),
437
+ phase: "start",
438
+ });
439
+ this.respondWithError(msg, error);
399
440
  continue;
400
441
  }
401
442
  const key = asStringPointerValue(String(operation), value.input, ctx.transfer.key, "key").take();
402
443
  if (isErr(key)) {
444
+ recordOperationServerError(key.error, {
445
+ operation: String(operation),
446
+ phase: "start",
447
+ });
403
448
  this.respondWithError(msg, key.error);
404
449
  continue;
405
450
  }
406
451
  const contentType = asOptionalStringPointerValue(value.input, ctx.transfer.contentType).take();
407
452
  if (isErr(contentType)) {
453
+ recordOperationServerError(contentType.error, {
454
+ operation: String(operation),
455
+ phase: "start",
456
+ });
408
457
  this.respondWithError(msg, contentType.error);
409
458
  continue;
410
459
  }
411
460
  const metadata = asOptionalStringRecordPointerValue(value.input, ctx.transfer.metadata).take();
412
461
  if (isErr(metadata)) {
462
+ recordOperationServerError(metadata.error, {
463
+ operation: String(operation),
464
+ phase: "start",
465
+ });
413
466
  this.respondWithError(msg, metadata.error);
414
467
  continue;
415
468
  }
@@ -426,6 +479,10 @@ export class TrellisServiceRuntime extends Trellis {
426
479
  ...(metadata !== undefined ? { metadata } : {}),
427
480
  }).take();
428
481
  if (isErr(openedTransferValue)) {
482
+ recordOperationServerError(openedTransferValue.error, {
483
+ operation: String(operation),
484
+ phase: "start",
485
+ });
429
486
  this.respondWithError(msg, openedTransferValue.error);
430
487
  continue;
431
488
  }
@@ -483,7 +540,11 @@ export class TrellisServiceRuntime extends Trellis {
483
540
  };
484
541
  msg.respond(JSON.stringify(accepted));
485
542
  void (async () => {
486
- const op = makeOperation(runtime);
543
+ const operationContext = {
544
+ requestId: msg.headers?.get("request-id"),
545
+ traceId: traceIdFromTraceparent(msg.headers?.get("traceparent")),
546
+ };
547
+ const op = makeOperation(runtime, operationContext);
487
548
  try {
488
549
  const handlerResult = await handler(transferSession
489
550
  ? {
@@ -501,7 +562,19 @@ export class TrellisServiceRuntime extends Trellis {
501
562
  ? handlerResult.take()
502
563
  : handlerResult;
503
564
  if (isErr(handlerOutcome)) {
504
- await op.fail(handlerOutcome.error);
565
+ const error = annotateHandlerBoundaryError(handlerOutcome.error, {
566
+ operation: String(operation),
567
+ requestId: operationContext.requestId,
568
+ service: this.name,
569
+ contractId: this.contractId,
570
+ contractDigest: this.contractDigest,
571
+ traceId: operationContext.traceId,
572
+ });
573
+ recordOperationServerError(error, {
574
+ operation: String(operation),
575
+ phase: "handler_result",
576
+ });
577
+ await op.fail(error);
505
578
  return;
506
579
  }
507
580
  if (isOperationDeferred(handlerOutcome)) {
@@ -519,7 +592,19 @@ export class TrellisServiceRuntime extends Trellis {
519
592
  }
520
593
  }
521
594
  catch (cause) {
522
- await op.fail(new UnexpectedError({ cause }));
595
+ const error = annotateHandlerBoundaryError(cause, {
596
+ operation: String(operation),
597
+ requestId: operationContext.requestId,
598
+ service: this.name,
599
+ contractId: this.contractId,
600
+ contractDigest: this.contractDigest,
601
+ traceId: operationContext.traceId,
602
+ });
603
+ recordOperationServerError(error, {
604
+ operation: String(operation),
605
+ phase: "handler_throw",
606
+ });
607
+ await op.fail(error);
523
608
  }
524
609
  })();
525
610
  }
@@ -717,7 +802,7 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
717
802
  event: { type: "completed" },
718
803
  }),
719
804
  fail: (error) => __classPrivateFieldGet(this, _TrellisServiceRuntime_instances, "m", _TrellisServiceRuntime_applyControlledOperationUpdate).call(this, runtime, ctx, "failed", {
720
- patch: { error: { type: error.name, message: error.message } },
805
+ patch: { error: error.toSerializable() },
721
806
  event: { type: "failed" },
722
807
  }),
723
808
  cancel: () => {
@@ -989,6 +1074,10 @@ _TrellisServiceRuntime_version = new WeakMap(), _TrellisServiceRuntime_log = new
989
1074
  const trellisError = error instanceof BaseError
990
1075
  ? error
991
1076
  : new UnexpectedError({ cause: error });
1077
+ recordOperationServerError(trellisError, {
1078
+ operation,
1079
+ phase: "control",
1080
+ });
992
1081
  msg.respond(JSON.stringify({
993
1082
  kind: "error",
994
1083
  error: trellisError.toSerializable(),
@@ -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,GAC/B,MAAM,sBAAsB,CAAC"}
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"}
@@ -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,GAC/B,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"}
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"}
@@ -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,GAC/B,MAAM,sBAAsB,CAAC"}
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":"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"}
1
+ {"version":3,"file":"outbox_inbox.d.ts","sourceRoot":"","sources":["../../src/service/outbox_inbox.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ var _MemoryOutboxRepository_messages, _MemoryInboxRepository_seen, _OutboxDispat
13
13
  import { isErr } from "@qlever-llc/result";
14
14
  import { Type } from "typebox";
15
15
  import { TypedKV } from "../kv.js";
16
+ import { recordTrellisError } from "../telemetry/mod.js";
16
17
  export const defaultSqlOutboxTables = Object.freeze({
17
18
  outbox: "trellis_outbox",
18
19
  inbox: "trellis_inbox",
@@ -539,6 +540,12 @@ _OutboxDispatcher_repository = new WeakMap(), _OutboxDispatcher_runtime = new We
539
540
  });
540
541
  }
541
542
  catch (error) {
543
+ recordTrellisError(error, {
544
+ surface: "outbox",
545
+ direction: "dispatcher",
546
+ operation: "batch",
547
+ phase: "dispatch",
548
+ });
542
549
  __classPrivateFieldGet(this, _OutboxDispatcher_instances, "m", _OutboxDispatcher_scheduleRetryWakeup).call(this);
543
550
  try {
544
551
  __classPrivateFieldGet(this, _OutboxDispatcher_options, "f").onError?.(error);
@@ -575,6 +582,13 @@ export async function dispatchOutbox(repository, runtime, options = {}) {
575
582
  const result = await runtime.publishPrepared(outboxMessageToPrepared(message));
576
583
  const value = result.take();
577
584
  if (isErr(value)) {
585
+ recordTrellisError(value.error, {
586
+ surface: "outbox",
587
+ direction: "dispatcher",
588
+ operation: message.event,
589
+ phase: "publish",
590
+ messagingSystem: "nats",
591
+ });
578
592
  failed += 1;
579
593
  await repository.markFailed(message.id, {
580
594
  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,SAAgC,GAAG,MAAM,CAEvE;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"}
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"}
@@ -1,5 +1,5 @@
1
1
  import { context, SpanKind, SpanStatusCode, trace, } from "@opentelemetry/api";
2
- export function getTracer(scope = "@qlever-llc/trellis/tracing") {
2
+ export function getTracer(scope = "@qlever-llc/trellis/telemetry") {
3
3
  return trace.getTracer(scope);
4
4
  }
5
5
  export 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,CAUtD"}
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"}
@@ -3,7 +3,12 @@ import * as dntShim from "../_dnt.shims.js";
3
3
  export function getEnv(key) {
4
4
  const deno = dntShim.dntGlobalThis;
5
5
  if (deno.Deno?.env?.get) {
6
- return deno.Deno.env.get(key);
6
+ try {
7
+ return deno.Deno.env.get(key);
8
+ }
9
+ catch {
10
+ return undefined;
11
+ }
7
12
  }
8
13
  const processGlobal = dntShim.dntGlobalThis;
9
14
  return processGlobal.process?.env?.[key];
@@ -0,0 +1,3 @@
1
+ /** Initializes Trellis telemetry for a service runtime. */
2
+ export declare function initTelemetry(serviceName: string): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -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,7 @@
1
+ import { configureErrorTraceId } from "./result.js";
2
+ import { initTelemetryRuntime } from "./runtime.js";
3
+ /** Initializes Trellis telemetry for a service runtime. */
4
+ export function initTelemetry(serviceName) {
5
+ configureErrorTraceId();
6
+ initTelemetryRuntime(serviceName);
7
+ }
@@ -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,181 @@
1
+ import { metrics } from "@opentelemetry/api";
2
+ const TRELLIS_METER_NAME = "@qlever-llc/trellis";
3
+ const MAX_ATTRIBUTE_LENGTH = 96;
4
+ const LOW_CARDINALITY_PATTERN = /^[A-Za-z0-9_.:-]+$/;
5
+ 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;
6
+ const ULID_PATTERN = /(^|[_.:-])[0-7][0-9A-HJKMNP-TV-Z]{25}($|[_.:-])/i;
7
+ const LONG_HEX_SEGMENT_PATTERN = /(^|[_.:-])[0-9a-f]{12,}($|[_.:-])/i;
8
+ const TRELLIS_SUBJECT_PREFIX_PATTERN = /^(rpc|events|feeds|operations|jobs|state|kv|store|resources|transfer)\.v\d+\./;
9
+ const AUTH_REASONS = new Set([
10
+ "invalid_request",
11
+ "missing_session_key",
12
+ "missing_proof",
13
+ "session_not_found",
14
+ "session_expired",
15
+ "invalid_signature",
16
+ "user_not_found",
17
+ "user_already_exists",
18
+ "username_taken",
19
+ "identity_already_exists",
20
+ "identity_not_found",
21
+ "user_inactive",
22
+ "unknown_device",
23
+ "device_deployment_not_found",
24
+ "device_deployment_disabled",
25
+ "device_activation_revoked",
26
+ "unknown_service",
27
+ "service_disabled",
28
+ "iat_out_of_range",
29
+ "invalid_binding_token",
30
+ "session_corrupted",
31
+ "session_already_bound",
32
+ "authtoken_already_used",
33
+ "oauth_session_key_mismatch",
34
+ "reply_subject_mismatch",
35
+ "insufficient_permissions",
36
+ "forbidden",
37
+ "last_admin_required",
38
+ "missing_flow_id",
39
+ "device_activation_flow_not_found",
40
+ "device_activation_flow_expired",
41
+ "device_activation_rejected",
42
+ "device_identity_key_mismatch",
43
+ "invalid_device_qr_mac",
44
+ ]);
45
+ /** Returns the shared Trellis OpenTelemetry meter. */
46
+ export function getTrellisMeter() {
47
+ return metrics.getMeter(TRELLIS_METER_NAME);
48
+ }
49
+ /** Records one Trellis error with only stable, low-cardinality attributes. */
50
+ export function recordTrellisError(error, attributes = {}) {
51
+ getTrellisMeter().createCounter("trellis.errors", {
52
+ description: "Trellis errors observed by runtime instrumentation.",
53
+ unit: "{error}",
54
+ }).add(1, buildTrellisErrorMetricAttributes(error, attributes));
55
+ }
56
+ /**
57
+ * Builds sanitized, low-cardinality attributes for `trellis.errors`.
58
+ *
59
+ * @internal Exported for focused tests; runtime callers should use
60
+ * {@link recordTrellisError}.
61
+ */
62
+ export function buildTrellisErrorMetricAttributes(error, attributes = {}) {
63
+ const serializable = serializableErrorData(error);
64
+ const metricAttributes = {
65
+ "exception.type": exceptionType(error),
66
+ "trellis.error.type": trellisErrorType(error, serializable, attributes.errorType),
67
+ };
68
+ const remoteErrorType = lowCardinalityValue(attributes.remoteErrorType) ??
69
+ remoteSerializableErrorType(serializable);
70
+ if (remoteErrorType) {
71
+ metricAttributes["trellis.remote_error.type"] = remoteErrorType;
72
+ }
73
+ setLowCardinalityAttribute(metricAttributes, "trellis.surface", attributes.surface);
74
+ setLowCardinalityAttribute(metricAttributes, "trellis.direction", attributes.direction);
75
+ setLowCardinalityAttribute(metricAttributes, "trellis.operation", attributes.operation);
76
+ setLowCardinalityAttribute(metricAttributes, "trellis.phase", attributes.phase);
77
+ setLowCardinalityAttribute(metricAttributes, "trellis.auth.reason", boundedAuthReason(attributes.authReason) ?? authReason(serializable));
78
+ setLowCardinalityAttribute(metricAttributes, "messaging.system", attributes.messagingSystem);
79
+ setLowCardinalityAttribute(metricAttributes, "messaging.operation", attributes.messagingOperation);
80
+ return metricAttributes;
81
+ }
82
+ function trellisErrorType(error, serializable, override) {
83
+ const overrideType = lowCardinalityValue(override);
84
+ if (overrideType)
85
+ return overrideType;
86
+ const serializableType = lowCardinalityValue(serializable?.type);
87
+ if (serializableType)
88
+ return serializableType;
89
+ const objectType = objectStringProperty(error, "type");
90
+ if (objectType)
91
+ return objectType;
92
+ return exceptionType(error);
93
+ }
94
+ function exceptionType(error) {
95
+ if (error instanceof Error) {
96
+ const name = lowCardinalityValue(error.name);
97
+ if (name)
98
+ return name;
99
+ }
100
+ const objectType = objectStringProperty(error, "type");
101
+ if (objectType)
102
+ return objectType;
103
+ return "unknown";
104
+ }
105
+ function serializableErrorData(error) {
106
+ const toSerializable = safeProperty(error, "toSerializable");
107
+ if (!isSerializableMethod(toSerializable))
108
+ return undefined;
109
+ try {
110
+ const data = toSerializable.call(error);
111
+ return isRecord(data) ? data : undefined;
112
+ }
113
+ catch {
114
+ return undefined;
115
+ }
116
+ }
117
+ function remoteSerializableErrorType(serializable) {
118
+ const remoteError = safeProperty(serializable, "remoteError");
119
+ if (!isRecord(remoteError))
120
+ return undefined;
121
+ return objectStringProperty(remoteError, "type");
122
+ }
123
+ function authReason(serializable) {
124
+ const type = safeProperty(serializable, "type");
125
+ if (type === "AuthError") {
126
+ return boundedAuthReason(safeProperty(serializable, "reason"));
127
+ }
128
+ if (type === "RemoteError") {
129
+ const remoteError = safeProperty(serializable, "remoteError");
130
+ if (isRecord(remoteError) && objectStringProperty(remoteError, "type") ===
131
+ "AuthError") {
132
+ return boundedAuthReason(safeProperty(remoteError, "reason"));
133
+ }
134
+ }
135
+ return undefined;
136
+ }
137
+ function boundedAuthReason(value) {
138
+ const sanitized = lowCardinalityValue(value);
139
+ if (!sanitized || !AUTH_REASONS.has(sanitized))
140
+ return undefined;
141
+ return sanitized;
142
+ }
143
+ function isRecord(value) {
144
+ return value !== null && typeof value === "object" && !Array.isArray(value);
145
+ }
146
+ function isSerializableMethod(value) {
147
+ return typeof value === "function";
148
+ }
149
+ function safeProperty(value, key) {
150
+ if (!isRecord(value))
151
+ return undefined;
152
+ try {
153
+ return value[key];
154
+ }
155
+ catch {
156
+ return undefined;
157
+ }
158
+ }
159
+ function objectStringProperty(value, key) {
160
+ return lowCardinalityValue(safeProperty(value, key));
161
+ }
162
+ function setLowCardinalityAttribute(attributes, key, value) {
163
+ const sanitized = lowCardinalityValue(value);
164
+ if (sanitized)
165
+ attributes[key] = sanitized;
166
+ }
167
+ function lowCardinalityValue(value) {
168
+ if (typeof value !== "string")
169
+ return undefined;
170
+ const trimmed = value.trim();
171
+ if (trimmed.length === 0 ||
172
+ trimmed.length > MAX_ATTRIBUTE_LENGTH ||
173
+ !LOW_CARDINALITY_PATTERN.test(trimmed) ||
174
+ UUID_PATTERN.test(trimmed) ||
175
+ ULID_PATTERN.test(trimmed) ||
176
+ LONG_HEX_SEGMENT_PATTERN.test(trimmed) ||
177
+ TRELLIS_SUBJECT_PREFIX_PATTERN.test(trimmed)) {
178
+ return undefined;
179
+ }
180
+ return trimmed;
181
+ }
@@ -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";
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/telemetry/mod.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACd,KAAK,EACL,QAAQ,EACR,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/telemetry/mod.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACd,KAAK,EACL,QAAQ,EACR,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,iCAAiC,EACjC,eAAe,EACf,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,cAAc,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export { createMapCarrier, extractTraceContext, injectTraceContext, } from "./carrier.js";
2
2
  export { context, getActiveSpan, getTracer, SpanKind, SpanStatusCode, trace, withSpan, withSpanAsync, } from "./core.js";
3
3
  export { getEnv } from "./env.js";
4
+ export { initTelemetry } from "./init.js";
5
+ export { buildTrellisErrorMetricAttributes, getTrellisMeter, recordTrellisError, } from "./metrics.js";
4
6
  export { createNatsHeaderCarrier } from "./nats.js";
5
7
  export { configureErrorTraceId } from "./result.js";
6
8
  export { getTrellisTracer, startClientSpan, startServerSpan, } from "./trellis.js";
@@ -0,0 +1,2 @@
1
+ export declare function initTelemetryRuntime(serviceName: string): void;
2
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/telemetry/runtime.ts"],"names":[],"mappings":"AAmNA,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAM9D"}