@qlever-llc/trellis 0.10.11 → 0.10.13

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 (124) hide show
  1. package/esm/contract_support/mod.d.ts +1 -0
  2. package/esm/contract_support/mod.d.ts.map +1 -1
  3. package/esm/contract_support/mod.js +1 -0
  4. package/esm/contract_support/schema_pointers.d.ts +6 -0
  5. package/esm/contract_support/schema_pointers.d.ts.map +1 -1
  6. package/esm/contract_support/schema_pointers.js +59 -7
  7. package/esm/errors/TrellisError.d.ts +3 -3
  8. package/esm/errors/TrellisError.js +3 -3
  9. package/esm/server/internal_jobs/job-manager.d.ts.map +1 -1
  10. package/esm/server/internal_jobs/job-manager.js +32 -1
  11. package/esm/server/runtime.d.ts +3 -0
  12. package/esm/server/runtime.d.ts.map +1 -1
  13. package/esm/server/service.d.ts +15 -0
  14. package/esm/server/service.d.ts.map +1 -1
  15. package/esm/server/service.js +8 -0
  16. package/esm/server.d.ts.map +1 -1
  17. package/esm/server.js +54 -6
  18. package/esm/service/deno.d.ts +1 -1
  19. package/esm/service/deno.d.ts.map +1 -1
  20. package/esm/service/mod.d.ts +1 -1
  21. package/esm/service/mod.d.ts.map +1 -1
  22. package/esm/service/node.d.ts +1 -1
  23. package/esm/service/node.d.ts.map +1 -1
  24. package/esm/service/outbox_inbox.d.ts.map +1 -1
  25. package/esm/service/outbox_inbox.js +14 -0
  26. package/esm/telemetry/core.d.ts.map +1 -1
  27. package/esm/telemetry/core.js +1 -1
  28. package/esm/telemetry/env.d.ts.map +1 -1
  29. package/esm/telemetry/env.js +6 -1
  30. package/esm/telemetry/init.d.ts +3 -0
  31. package/esm/telemetry/init.d.ts.map +1 -0
  32. package/esm/telemetry/init.js +7 -0
  33. package/esm/telemetry/metrics.d.ts +34 -0
  34. package/esm/telemetry/metrics.d.ts.map +1 -0
  35. package/esm/telemetry/metrics.js +181 -0
  36. package/esm/telemetry/mod.d.ts +3 -0
  37. package/esm/telemetry/mod.d.ts.map +1 -1
  38. package/esm/telemetry/mod.js +2 -0
  39. package/esm/telemetry/runtime.d.ts +2 -0
  40. package/esm/telemetry/runtime.d.ts.map +1 -0
  41. package/esm/telemetry/runtime.js +134 -0
  42. package/esm/telemetry.d.ts +3 -0
  43. package/esm/telemetry.d.ts.map +1 -0
  44. package/esm/telemetry.js +2 -0
  45. package/esm/transfer.d.ts.map +1 -1
  46. package/esm/transfer.js +27 -16
  47. package/esm/trellis.d.ts.map +1 -1
  48. package/esm/trellis.js +460 -56
  49. package/package.json +7 -5
  50. package/script/contract_support/mod.d.ts +1 -0
  51. package/script/contract_support/mod.d.ts.map +1 -1
  52. package/script/contract_support/mod.js +4 -1
  53. package/script/contract_support/schema_pointers.d.ts +6 -0
  54. package/script/contract_support/schema_pointers.d.ts.map +1 -1
  55. package/script/contract_support/schema_pointers.js +59 -7
  56. package/script/errors/TrellisError.d.ts +3 -3
  57. package/script/errors/TrellisError.js +3 -3
  58. package/script/server/internal_jobs/job-manager.d.ts.map +1 -1
  59. package/script/server/internal_jobs/job-manager.js +32 -1
  60. package/script/server/runtime.d.ts +3 -0
  61. package/script/server/runtime.d.ts.map +1 -1
  62. package/script/server/service.d.ts +15 -0
  63. package/script/server/service.d.ts.map +1 -1
  64. package/script/server/service.js +8 -0
  65. package/script/server.d.ts.map +1 -1
  66. package/script/server.js +54 -6
  67. package/script/service/deno.d.ts +1 -1
  68. package/script/service/deno.d.ts.map +1 -1
  69. package/script/service/mod.d.ts +1 -1
  70. package/script/service/mod.d.ts.map +1 -1
  71. package/script/service/node.d.ts +1 -1
  72. package/script/service/node.d.ts.map +1 -1
  73. package/script/service/outbox_inbox.d.ts.map +1 -1
  74. package/script/service/outbox_inbox.js +14 -0
  75. package/script/telemetry/core.d.ts.map +1 -1
  76. package/script/telemetry/core.js +1 -1
  77. package/script/telemetry/env.d.ts.map +1 -1
  78. package/script/telemetry/env.js +6 -1
  79. package/script/telemetry/init.d.ts +3 -0
  80. package/script/telemetry/init.d.ts.map +1 -0
  81. package/script/telemetry/init.js +10 -0
  82. package/script/telemetry/metrics.d.ts +34 -0
  83. package/script/telemetry/metrics.d.ts.map +1 -0
  84. package/script/telemetry/metrics.js +186 -0
  85. package/script/telemetry/mod.d.ts +3 -0
  86. package/script/telemetry/mod.d.ts.map +1 -1
  87. package/script/telemetry/mod.js +7 -1
  88. package/script/telemetry/runtime.d.ts +2 -0
  89. package/script/telemetry/runtime.d.ts.map +1 -0
  90. package/script/telemetry/runtime.js +137 -0
  91. package/script/telemetry.d.ts +3 -0
  92. package/script/telemetry.d.ts.map +1 -0
  93. package/script/telemetry.js +18 -0
  94. package/script/transfer.d.ts.map +1 -1
  95. package/script/transfer.js +28 -17
  96. package/script/trellis.d.ts.map +1 -1
  97. package/script/trellis.js +490 -86
  98. package/src/contract_support/mod.ts +4 -0
  99. package/src/contract_support/schema_pointers.ts +80 -7
  100. package/src/errors/TrellisError.ts +4 -4
  101. package/src/server/internal_jobs/job-manager.ts +35 -5
  102. package/src/server/runtime.ts +4 -0
  103. package/src/server/service.ts +27 -0
  104. package/src/server.ts +66 -11
  105. package/src/service/deno.ts +1 -0
  106. package/src/service/mod.ts +1 -0
  107. package/src/service/node.ts +1 -0
  108. package/src/service/outbox_inbox.ts +14 -0
  109. package/src/telemetry/core.ts +1 -1
  110. package/src/telemetry/env.ts +5 -1
  111. package/src/telemetry/init.ts +8 -0
  112. package/src/telemetry/metrics.ts +294 -0
  113. package/src/telemetry/mod.ts +7 -0
  114. package/src/telemetry/runtime.ts +218 -0
  115. package/src/telemetry.ts +2 -0
  116. package/src/transfer.ts +69 -30
  117. package/src/trellis.ts +487 -88
  118. package/esm/tracing.d.ts +0 -5
  119. package/esm/tracing.d.ts.map +0 -1
  120. package/esm/tracing.js +0 -8
  121. package/script/tracing.d.ts +0 -5
  122. package/script/tracing.d.ts.map +0 -1
  123. package/script/tracing.js +0 -27
  124. package/src/tracing.ts +0 -28
package/src/transfer.ts CHANGED
@@ -17,7 +17,11 @@ import { ulid } from "ulid";
17
17
  import { buildProofInput, verifyProof } from "./auth/proof.js";
18
18
  import { base64urlEncode, sha256 } from "./auth/utils.js";
19
19
  import { TransferError } from "./errors/TransferError.js";
20
- import { createNatsHeaderCarrier, injectTraceContext } from "./tracing.js";
20
+ import {
21
+ createNatsHeaderCarrier,
22
+ injectTraceContext,
23
+ recordTrellisError,
24
+ } from "./telemetry/mod.js";
21
25
 
22
26
  const TRANSFER_SEQUENCE_HEADER = "trellis-transfer-seq";
23
27
  const TRANSFER_EOF_HEADER = "trellis-transfer-eof";
@@ -184,11 +188,10 @@ function deserializeTransferError(msg: Msg, operation: string): TransferError {
184
188
  try {
185
189
  const value = JSON.parse(msg.string()) as {
186
190
  message?: string;
187
- operation?: string;
188
191
  context?: Record<string, unknown>;
189
192
  };
190
193
  return new TransferError({
191
- operation: value.operation ?? operation,
194
+ operation,
192
195
  context: value.context,
193
196
  cause: value.message ? new Error(value.message) : undefined,
194
197
  });
@@ -197,6 +200,21 @@ function deserializeTransferError(msg: Msg, operation: string): TransferError {
197
200
  }
198
201
  }
199
202
 
203
+ function recordTransferError(
204
+ error: TransferError,
205
+ direction: "receive" | "send",
206
+ phase: string,
207
+ ): TransferError {
208
+ recordTrellisError(error, {
209
+ surface: "transfer",
210
+ direction,
211
+ operation: error.operation ?? direction,
212
+ phase,
213
+ messagingSystem: "nats",
214
+ });
215
+ return error;
216
+ }
217
+
200
218
  function receiveStream(
201
219
  sub: Subscription,
202
220
  timeoutMs: number,
@@ -252,11 +270,10 @@ function receiveStream(
252
270
  }
253
271
  } catch (cause) {
254
272
  sub.unsubscribe();
255
- controller.error(
256
- cause instanceof TransferError
257
- ? cause
258
- : new TransferError({ operation: "stream", cause }),
259
- );
273
+ const error = cause instanceof TransferError
274
+ ? cause
275
+ : new TransferError({ operation: "stream", cause });
276
+ controller.error(recordTransferError(error, "receive", "stream"));
260
277
  }
261
278
  },
262
279
  cancel() {
@@ -393,7 +410,7 @@ export class SendTransferHandle extends BaseTransferHandle {
393
410
  (async (): Promise<ResultType<FileInfo, TransferError>> => {
394
411
  const valid = this.validateGrant(this.#grant, "send").take();
395
412
  if (isErr(valid)) {
396
- return Result.err(valid.error);
413
+ return Result.err(recordTransferError(valid.error, "send", "grant"));
397
414
  }
398
415
 
399
416
  let sentBytes = 0;
@@ -407,14 +424,18 @@ export class SendTransferHandle extends BaseTransferHandle {
407
424
  sentBytes > this.#grant.maxBytes
408
425
  ) {
409
426
  return Result.err(
410
- new TransferError({
411
- operation: "send",
412
- context: {
413
- reason: "max_bytes_exceeded",
414
- maxBytes: this.#grant.maxBytes,
415
- attemptedBytes: sentBytes,
416
- },
417
- }),
427
+ recordTransferError(
428
+ new TransferError({
429
+ operation: "send",
430
+ context: {
431
+ reason: "max_bytes_exceeded",
432
+ maxBytes: this.#grant.maxBytes,
433
+ attemptedBytes: sentBytes,
434
+ },
435
+ }),
436
+ "send",
437
+ "validation",
438
+ ),
418
439
  );
419
440
  }
420
441
 
@@ -432,13 +453,17 @@ export class SendTransferHandle extends BaseTransferHandle {
432
453
  ).take();
433
454
  if (isErr(response)) {
434
455
  return Result.err(
435
- new TransferError({ operation: "send", cause: response.error }),
456
+ recordTransferError(
457
+ new TransferError({ operation: "send", cause: response.error }),
458
+ "send",
459
+ "send",
460
+ ),
436
461
  );
437
462
  }
438
463
 
439
464
  const ack = parseTransferAck(response, "send").take();
440
465
  if (isErr(ack)) {
441
- return Result.err(ack.error);
466
+ return Result.err(recordTransferError(ack.error, "send", "ack"));
442
467
  }
443
468
  if (ack.status === "complete") {
444
469
  completed = ack.info;
@@ -460,23 +485,31 @@ export class SendTransferHandle extends BaseTransferHandle {
460
485
  ).take();
461
486
  if (isErr(finalResponse)) {
462
487
  return Result.err(
463
- new TransferError({
464
- operation: "send",
465
- cause: finalResponse.error,
466
- }),
488
+ recordTransferError(
489
+ new TransferError({
490
+ operation: "send",
491
+ cause: finalResponse.error,
492
+ }),
493
+ "send",
494
+ "send",
495
+ ),
467
496
  );
468
497
  }
469
498
 
470
499
  const finalAck = parseTransferAck(finalResponse, "send").take();
471
500
  if (isErr(finalAck)) {
472
- return Result.err(finalAck.error);
501
+ return Result.err(recordTransferError(finalAck.error, "send", "ack"));
473
502
  }
474
503
  if (finalAck.status !== "complete") {
475
504
  return Result.err(
476
- new TransferError({
477
- operation: "send",
478
- context: { reason: "missing_completion" },
479
- }),
505
+ recordTransferError(
506
+ new TransferError({
507
+ operation: "send",
508
+ context: { reason: "missing_completion" },
509
+ }),
510
+ "send",
511
+ "ack",
512
+ ),
480
513
  );
481
514
  }
482
515
  return Result.ok(finalAck.info ?? completed!);
@@ -505,7 +538,9 @@ export class ReceiveTransferHandle extends BaseTransferHandle {
505
538
  > => {
506
539
  const valid = this.validateGrant(this.#grant, "stream").take();
507
540
  if (isErr(valid)) {
508
- return Result.err(valid.error);
541
+ return Result.err(
542
+ recordTransferError(valid.error, "receive", "grant"),
543
+ );
509
544
  }
510
545
 
511
546
  const inbox = createInbox(
@@ -523,7 +558,11 @@ export class ReceiveTransferHandle extends BaseTransferHandle {
523
558
  await this.nc.flush();
524
559
  } catch (cause) {
525
560
  sub.unsubscribe();
526
- return Result.err(new TransferError({ operation: "stream", cause }));
561
+ return Result.err(recordTransferError(
562
+ new TransferError({ operation: "stream", cause }),
563
+ "receive",
564
+ "send",
565
+ ));
527
566
  }
528
567
 
529
568
  return Result.ok(receiveStream(sub, this.timeoutMs));