@qlever-llc/trellis 0.10.11 → 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/errors/TrellisError.d.ts +3 -3
- package/esm/errors/TrellisError.js +3 -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 +8 -0
- package/esm/server.d.ts.map +1 -1
- package/esm/server.js +54 -6
- 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.map +1 -1
- package/esm/trellis.js +460 -56
- package/package.json +7 -5
- package/script/errors/TrellisError.d.ts +3 -3
- package/script/errors/TrellisError.js +3 -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 +8 -0
- package/script/server.d.ts.map +1 -1
- package/script/server.js +54 -6
- 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.map +1 -1
- package/script/trellis.js +490 -86
- package/src/errors/TrellisError.ts +4 -4
- package/src/server/internal_jobs/job-manager.ts +35 -5
- package/src/server/runtime.ts +4 -0
- package/src/server/service.ts +27 -0
- package/src/server.ts +66 -11
- 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 +487 -88
- 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/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 {
|
|
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
|
|
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
|
-
|
|
256
|
-
cause
|
|
257
|
-
|
|
258
|
-
|
|
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
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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
|
-
|
|
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
|
-
|
|
464
|
-
|
|
465
|
-
|
|
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
|
-
|
|
477
|
-
|
|
478
|
-
|
|
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(
|
|
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(
|
|
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));
|