@qlever-llc/trellis 0.10.12 → 0.10.14
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/auth/browser.js +0 -1
- package/esm/auth.js +0 -1
- package/esm/browser.d.ts +29 -2
- package/esm/browser.d.ts.map +1 -1
- package/esm/browser.js +14 -3
- package/esm/client_connect.d.ts.map +1 -1
- package/esm/client_connect.js +7 -3
- package/esm/contract_support/mod.d.ts +6 -10
- package/esm/contract_support/mod.d.ts.map +1 -1
- package/esm/contract_support/mod.js +42 -31
- package/esm/contract_support/protocol.d.ts +8 -13
- package/esm/contract_support/protocol.d.ts.map +1 -1
- package/esm/contract_support/protocol.js +4 -5
- package/esm/contract_support/schema_pointers.d.ts +6 -0
- package/esm/contract_support/schema_pointers.d.ts.map +1 -1
- package/esm/contract_support/schema_pointers.js +59 -7
- package/esm/contracts.js +0 -1
- package/esm/device.d.ts +0 -29
- package/esm/device.d.ts.map +1 -1
- package/esm/device.js +10 -1
- package/esm/errors/index.js +0 -1
- package/esm/index.d.ts +3 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -4
- package/esm/runtime_transport.d.ts.map +1 -1
- package/esm/runtime_transport.js +4 -2
- package/esm/server/health_rpc.d.ts +4 -2
- package/esm/server/health_rpc.d.ts.map +1 -1
- package/esm/server/health_rpc.js +6 -1
- package/esm/server/service.d.ts +12 -37
- package/esm/server/service.d.ts.map +1 -1
- package/esm/server/service.js +138 -103
- package/esm/server.js +3 -3
- package/esm/service/outbox_inbox.d.ts +1 -6
- package/esm/service/outbox_inbox.d.ts.map +1 -1
- package/esm/service/outbox_inbox.js +0 -21
- package/esm/telemetry/env.d.ts.map +1 -1
- package/esm/telemetry/env.js +5 -6
- package/esm/telemetry/metrics.d.ts +0 -7
- package/esm/telemetry/metrics.d.ts.map +1 -1
- package/esm/trellis.d.ts +1 -19
- package/esm/trellis.d.ts.map +1 -1
- package/esm/trellis.js +12 -8
- package/package.json +2 -2
- package/script/auth/browser.js +0 -1
- package/script/auth.js +0 -1
- package/script/browser.d.ts +29 -2
- package/script/browser.d.ts.map +1 -1
- package/script/browser.js +75 -17
- package/script/client_connect.d.ts.map +1 -1
- package/script/client_connect.js +7 -36
- package/script/contract_support/mod.d.ts +6 -10
- package/script/contract_support/mod.d.ts.map +1 -1
- package/script/contract_support/mod.js +46 -32
- package/script/contract_support/protocol.d.ts +8 -13
- package/script/contract_support/protocol.d.ts.map +1 -1
- package/script/contract_support/protocol.js +5 -6
- package/script/contract_support/schema_pointers.d.ts +6 -0
- package/script/contract_support/schema_pointers.d.ts.map +1 -1
- package/script/contract_support/schema_pointers.js +59 -7
- package/script/contracts.js +0 -1
- package/script/device.d.ts +0 -29
- package/script/device.d.ts.map +1 -1
- package/script/device.js +10 -1
- package/script/errors/index.js +0 -1
- package/script/index.d.ts +3 -4
- package/script/index.d.ts.map +1 -1
- package/script/index.js +1 -6
- package/script/runtime_transport.d.ts.map +1 -1
- package/script/runtime_transport.js +4 -2
- package/script/server/health_rpc.d.ts +4 -2
- package/script/server/health_rpc.d.ts.map +1 -1
- package/script/server/health_rpc.js +6 -1
- package/script/server/service.d.ts +12 -37
- package/script/server/service.d.ts.map +1 -1
- package/script/server/service.js +148 -112
- package/script/server.js +3 -3
- package/script/service/outbox_inbox.d.ts +1 -6
- package/script/service/outbox_inbox.d.ts.map +1 -1
- package/script/service/outbox_inbox.js +0 -21
- package/script/telemetry/env.d.ts.map +1 -1
- package/script/telemetry/env.js +5 -39
- package/script/telemetry/metrics.d.ts +0 -7
- package/script/telemetry/metrics.d.ts.map +1 -1
- package/script/trellis.d.ts +1 -19
- package/script/trellis.d.ts.map +1 -1
- package/script/trellis.js +12 -8
- package/src/browser.ts +200 -2
- package/src/client_connect.ts +10 -2
- package/src/contract_support/mod.ts +73 -45
- package/src/contract_support/protocol.ts +16 -7
- package/src/contract_support/schema_pointers.ts +80 -7
- package/src/device.ts +10 -2
- package/src/index.ts +3 -4
- package/src/runtime_transport.ts +6 -1
- package/src/server/health_rpc.ts +7 -2
- package/src/server/service.ts +177 -126
- package/src/server.ts +3 -3
- package/src/service/outbox_inbox.ts +1 -28
- package/src/telemetry/env.ts +10 -7
- package/src/trellis.ts +22 -13
package/script/server/service.js
CHANGED
|
@@ -10,12 +10,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var
|
|
13
|
+
var _InternalStoreHandle_nc, _TrellisService_instances, _TrellisService_server, _TrellisService_nc, _TrellisService_handlerTrellis, _TrellisService_operationTransfer, _TrellisService_stopHealthPublishing, _TrellisService_managedJobWorkers, _TrellisService_waitPromise, _TrellisService_stopPromise, _TrellisService_createBoundHealth, _TrellisService_createBoundEventFacade, _TrellisService_createHandleFacade, _TrellisService_createBoundHandleFacade, _TrellisService_operation;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.TrellisService = exports.StoreHandle = void 0;
|
|
16
16
|
exports.createConnectedService = createConnectedService;
|
|
17
|
+
exports.connectTrellisServiceWithRuntimeDeps = connectTrellisServiceWithRuntimeDeps;
|
|
17
18
|
const nats_core_1 = require("@nats-io/nats-core");
|
|
18
|
-
const
|
|
19
|
+
const kv_js_1 = require("../kv.js");
|
|
20
|
+
const store_js_1 = require("../store.js");
|
|
19
21
|
const auth_js_1 = require("../sdk/auth.js");
|
|
20
22
|
const server_js_1 = require("../server.js");
|
|
21
23
|
const auth_js_2 = require("../auth.js");
|
|
@@ -31,7 +33,7 @@ const transfer_js_1 = require("./transfer.js");
|
|
|
31
33
|
const globals_js_1 = require("../globals.js");
|
|
32
34
|
const runtime_transport_js_1 = require("../runtime_transport.js");
|
|
33
35
|
const server_logger_js_1 = require("../server_logger.js");
|
|
34
|
-
const
|
|
36
|
+
const index_js_1 = require("../errors/index.js");
|
|
35
37
|
const jobs_js_1 = require("../jobs.js");
|
|
36
38
|
const job_manager_js_1 = require("./internal_jobs/job-manager.js");
|
|
37
39
|
const runtime_worker_js_1 = require("./internal_jobs/runtime-worker.js");
|
|
@@ -346,7 +348,7 @@ async function fetchServiceBootstrapInfo(args) {
|
|
|
346
348
|
includeContract = true;
|
|
347
349
|
continue;
|
|
348
350
|
}
|
|
349
|
-
throw new
|
|
351
|
+
throw new index_js_1.TransportError({
|
|
350
352
|
code: "trellis.bootstrap.failed",
|
|
351
353
|
message: `Service bootstrap failed: ${failure.message ?? failure.reason}`,
|
|
352
354
|
hint: "Retry the connection. If it keeps failing, check Trellis bootstrap availability and contract activation.",
|
|
@@ -361,7 +363,7 @@ async function fetchServiceBootstrapInfo(args) {
|
|
|
361
363
|
}
|
|
362
364
|
if (!settled.response.ok) {
|
|
363
365
|
const detail = settled.responseText.trim();
|
|
364
|
-
throw new
|
|
366
|
+
throw new index_js_1.TransportError({
|
|
365
367
|
code: "trellis.bootstrap.failed",
|
|
366
368
|
message: detail.length > 0
|
|
367
369
|
? `Service bootstrap failed with HTTP ${settled.response.status}: ${detail}`
|
|
@@ -376,7 +378,7 @@ async function fetchServiceBootstrapInfo(args) {
|
|
|
376
378
|
});
|
|
377
379
|
}
|
|
378
380
|
if (settled.payload === undefined) {
|
|
379
|
-
throw new
|
|
381
|
+
throw new index_js_1.TransportError({
|
|
380
382
|
code: "trellis.bootstrap.invalid_response",
|
|
381
383
|
message: `Service bootstrap returned invalid JSON: ${settled.responseText.trim() || "<empty body>"}`,
|
|
382
384
|
hint: "Retry the connection. If it keeps happening, check the Trellis deployment.",
|
|
@@ -397,22 +399,26 @@ async function fetchServiceBootstrapInfo(args) {
|
|
|
397
399
|
}
|
|
398
400
|
}
|
|
399
401
|
class StoreHandle {
|
|
402
|
+
}
|
|
403
|
+
exports.StoreHandle = StoreHandle;
|
|
404
|
+
class InternalStoreHandle extends StoreHandle {
|
|
400
405
|
constructor(nc, binding, token) {
|
|
406
|
+
super();
|
|
401
407
|
Object.defineProperty(this, "binding", {
|
|
402
408
|
enumerable: true,
|
|
403
409
|
configurable: true,
|
|
404
410
|
writable: true,
|
|
405
411
|
value: void 0
|
|
406
412
|
});
|
|
407
|
-
|
|
413
|
+
_InternalStoreHandle_nc.set(this, void 0);
|
|
408
414
|
if (token !== storeHandleConstructorToken) {
|
|
409
415
|
throw new TypeError("StoreHandle instances are created by TrellisService");
|
|
410
416
|
}
|
|
411
|
-
__classPrivateFieldSet(this,
|
|
417
|
+
__classPrivateFieldSet(this, _InternalStoreHandle_nc, nc, "f");
|
|
412
418
|
this.binding = binding;
|
|
413
419
|
}
|
|
414
420
|
open() {
|
|
415
|
-
return
|
|
421
|
+
return store_js_1.TypedStore.open(__classPrivateFieldGet(this, _InternalStoreHandle_nc, "f"), this.binding.name, {
|
|
416
422
|
ttlMs: this.binding.ttlMs,
|
|
417
423
|
maxObjectBytes: this.binding.maxObjectBytes,
|
|
418
424
|
maxTotalBytes: this.binding.maxTotalBytes,
|
|
@@ -426,8 +432,7 @@ class StoreHandle {
|
|
|
426
432
|
return this.open().andThen((store) => store.waitFor(key, options));
|
|
427
433
|
}
|
|
428
434
|
}
|
|
429
|
-
|
|
430
|
-
_StoreHandle_nc = new WeakMap();
|
|
435
|
+
_InternalStoreHandle_nc = new WeakMap();
|
|
431
436
|
async function openServiceKvBindings(args) {
|
|
432
437
|
for (const alias of Object.keys(args.bindings)) {
|
|
433
438
|
if (!args.contractKv[alias]) {
|
|
@@ -442,7 +447,7 @@ async function openServiceKvBindings(args) {
|
|
|
442
447
|
}
|
|
443
448
|
throw new Error(`Required KV binding '${alias}' is unavailable`);
|
|
444
449
|
}
|
|
445
|
-
const store = await
|
|
450
|
+
const store = await kv_js_1.TypedKV.open(args.nc, binding.bucket, metadata.schema, {
|
|
446
451
|
history: binding.history,
|
|
447
452
|
ttl: binding.ttlMs,
|
|
448
453
|
maxValueBytes: binding.maxValueBytes,
|
|
@@ -463,6 +468,9 @@ function createServiceEventPublishFacade(outbound) {
|
|
|
463
468
|
}
|
|
464
469
|
return surface;
|
|
465
470
|
}
|
|
471
|
+
/**
|
|
472
|
+
* @internal Shared by Trellis-owned service bootstrap paths.
|
|
473
|
+
*/
|
|
466
474
|
async function createConnectedService(args) {
|
|
467
475
|
const resolvedLog = resolveServiceLogger(args.server.log);
|
|
468
476
|
const connection = (0, connection_js_1.observeNatsTrellisConnection)({
|
|
@@ -597,10 +605,25 @@ async function createConnectedService(args) {
|
|
|
597
605
|
auth: args.auth,
|
|
598
606
|
stores: Object.fromEntries(Object.entries(args.bindings.store ?? {}).map(([alias, binding]) => [
|
|
599
607
|
alias,
|
|
600
|
-
new
|
|
608
|
+
new InternalStoreHandle(args.nc, binding, storeHandleConstructorToken),
|
|
601
609
|
])),
|
|
602
610
|
});
|
|
603
|
-
const service =
|
|
611
|
+
const service = Reflect.construct(TrellisService, [
|
|
612
|
+
args.name,
|
|
613
|
+
args.auth,
|
|
614
|
+
args.nc,
|
|
615
|
+
server,
|
|
616
|
+
outbound.event,
|
|
617
|
+
handlerTrellis,
|
|
618
|
+
kv,
|
|
619
|
+
args.contractJobs,
|
|
620
|
+
args.bindings,
|
|
621
|
+
operationTransfer,
|
|
622
|
+
health,
|
|
623
|
+
stopHealthPublishing,
|
|
624
|
+
connection,
|
|
625
|
+
trellisServiceConstructorToken,
|
|
626
|
+
]);
|
|
604
627
|
handlerResources = {
|
|
605
628
|
kv: service.kv,
|
|
606
629
|
store: service.store,
|
|
@@ -617,9 +640,9 @@ async function createConnectedService(args) {
|
|
|
617
640
|
return service;
|
|
618
641
|
}
|
|
619
642
|
function toUnexpectedError(cause) {
|
|
620
|
-
return cause instanceof
|
|
643
|
+
return cause instanceof index_js_1.UnexpectedError
|
|
621
644
|
? cause
|
|
622
|
-
: new
|
|
645
|
+
: new index_js_1.UnexpectedError({ cause });
|
|
623
646
|
}
|
|
624
647
|
function serializeJobHandlerError(error) {
|
|
625
648
|
try {
|
|
@@ -1139,6 +1162,98 @@ function createBoundJobsFacade(args) {
|
|
|
1139
1162
|
}
|
|
1140
1163
|
return boundJobs;
|
|
1141
1164
|
}
|
|
1165
|
+
/**
|
|
1166
|
+
* Connects a service with caller-supplied runtime dependencies for tests and
|
|
1167
|
+
* Trellis-owned internals. This helper is intentionally not re-exported from
|
|
1168
|
+
* public package subpaths.
|
|
1169
|
+
*
|
|
1170
|
+
* @internal
|
|
1171
|
+
*/
|
|
1172
|
+
function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
1173
|
+
return result_1.AsyncResult.from((async () => {
|
|
1174
|
+
try {
|
|
1175
|
+
const runtimeDeps = {
|
|
1176
|
+
...(await loadDefaultServiceRuntimeDeps()),
|
|
1177
|
+
...deps,
|
|
1178
|
+
};
|
|
1179
|
+
if (automaticTelemetryEnabled(args.telemetry)) {
|
|
1180
|
+
runtimeDeps.initTelemetry?.(args.name);
|
|
1181
|
+
}
|
|
1182
|
+
const auth = await (0, auth_js_2.createAuth)({ sessionKeySeed: args.sessionKeySeed });
|
|
1183
|
+
const bootstrapLog = resolveServiceLogger(args.server?.log);
|
|
1184
|
+
const bootstrap = await fetchServiceBootstrapInfo({
|
|
1185
|
+
trellisUrl: args.trellisUrl,
|
|
1186
|
+
serviceName: args.name,
|
|
1187
|
+
contractId: args.contract.CONTRACT_ID,
|
|
1188
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1189
|
+
contract: args.contract.CONTRACT,
|
|
1190
|
+
auth,
|
|
1191
|
+
log: bootstrapLog,
|
|
1192
|
+
});
|
|
1193
|
+
const { authenticator: authTokenAuthenticator, inboxPrefix } = await auth
|
|
1194
|
+
.natsConnectOptions({
|
|
1195
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1196
|
+
});
|
|
1197
|
+
let nc;
|
|
1198
|
+
try {
|
|
1199
|
+
nc = await runtimeDeps.connect({
|
|
1200
|
+
servers: (0, runtime_transport_js_1.selectRuntimeTransportServers)(bootstrap.connectInfo.transports),
|
|
1201
|
+
maxReconnectAttempts: runtime_transport_js_1.DEFAULT_RUNTIME_MAX_RECONNECT_ATTEMPTS,
|
|
1202
|
+
waitOnFirstConnect: runtime_transport_js_1.DEFAULT_SERVICE_RUNTIME_WAIT_ON_FIRST_CONNECT,
|
|
1203
|
+
inboxPrefix,
|
|
1204
|
+
authenticator: [
|
|
1205
|
+
authTokenAuthenticator,
|
|
1206
|
+
(0, nats_core_1.jwtAuthenticator)(bootstrap.connectInfo.transport.sentinel.jwt, new TextEncoder().encode(bootstrap.connectInfo.transport.sentinel.seed)),
|
|
1207
|
+
],
|
|
1208
|
+
});
|
|
1209
|
+
}
|
|
1210
|
+
catch (cause) {
|
|
1211
|
+
throw new index_js_1.TransportError({
|
|
1212
|
+
code: "trellis.runtime.connect_failed",
|
|
1213
|
+
message: "Trellis could not open the service runtime connection.",
|
|
1214
|
+
hint: "Retry the connection. If it keeps failing, check Trellis transport availability.",
|
|
1215
|
+
cause,
|
|
1216
|
+
context: {
|
|
1217
|
+
trellisUrl: args.trellisUrl,
|
|
1218
|
+
contractId: args.contract.CONTRACT_ID,
|
|
1219
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1220
|
+
},
|
|
1221
|
+
});
|
|
1222
|
+
}
|
|
1223
|
+
try {
|
|
1224
|
+
const server = args.contract.API.trellis
|
|
1225
|
+
? {
|
|
1226
|
+
...(args.server ?? {}),
|
|
1227
|
+
api: args.contract.API.owned,
|
|
1228
|
+
trellisApi: args.contract.API.trellis,
|
|
1229
|
+
}
|
|
1230
|
+
: {
|
|
1231
|
+
...(args.server ?? {}),
|
|
1232
|
+
api: args.contract.API.owned,
|
|
1233
|
+
};
|
|
1234
|
+
return result_1.Result.ok(await createConnectedService({
|
|
1235
|
+
name: args.name,
|
|
1236
|
+
auth,
|
|
1237
|
+
nc,
|
|
1238
|
+
contractId: args.contract.CONTRACT_ID,
|
|
1239
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1240
|
+
contractJobs: (args.contract[mod_js_1.CONTRACT_JOBS_METADATA] ?? {}),
|
|
1241
|
+
contractKv: (args.contract[mod_js_1.CONTRACT_KV_METADATA] ?? {}),
|
|
1242
|
+
contractEventConsumers: args.contract.CONTRACT.eventConsumers,
|
|
1243
|
+
server,
|
|
1244
|
+
bindings: bootstrap.binding.resources,
|
|
1245
|
+
}));
|
|
1246
|
+
}
|
|
1247
|
+
catch (cause) {
|
|
1248
|
+
await closeFailedServiceBootstrapConnection(nc);
|
|
1249
|
+
throw cause;
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
catch (cause) {
|
|
1253
|
+
return result_1.Result.err(cause instanceof index_js_1.TransportError ? cause : toUnexpectedError(cause));
|
|
1254
|
+
}
|
|
1255
|
+
})());
|
|
1256
|
+
}
|
|
1142
1257
|
class TrellisService {
|
|
1143
1258
|
constructor(name, auth, nc, server, event, handlerTrellis, kv, contractJobs, bindings, operationTransfer, health, stopHealthPublishing, connection, token) {
|
|
1144
1259
|
_TrellisService_instances.add(this);
|
|
@@ -1154,13 +1269,8 @@ class TrellisService {
|
|
|
1154
1269
|
writable: true,
|
|
1155
1270
|
value: void 0
|
|
1156
1271
|
});
|
|
1157
|
-
Object.defineProperty(this, "nc", {
|
|
1158
|
-
enumerable: true,
|
|
1159
|
-
configurable: true,
|
|
1160
|
-
writable: true,
|
|
1161
|
-
value: void 0
|
|
1162
|
-
});
|
|
1163
1272
|
_TrellisService_server.set(this, void 0);
|
|
1273
|
+
_TrellisService_nc.set(this, void 0);
|
|
1164
1274
|
_TrellisService_handlerTrellis.set(this, void 0);
|
|
1165
1275
|
/** Event lifecycle surface for service startup listeners and publishers. */
|
|
1166
1276
|
Object.defineProperty(this, "event", {
|
|
@@ -1217,7 +1327,7 @@ class TrellisService {
|
|
|
1217
1327
|
const storeBindings = bindings.store ?? {};
|
|
1218
1328
|
this.name = name;
|
|
1219
1329
|
this.auth = auth;
|
|
1220
|
-
this
|
|
1330
|
+
__classPrivateFieldSet(this, _TrellisService_nc, nc, "f");
|
|
1221
1331
|
__classPrivateFieldSet(this, _TrellisService_server, server, "f");
|
|
1222
1332
|
Object.defineProperty(this, "server", {
|
|
1223
1333
|
value: server,
|
|
@@ -1226,7 +1336,10 @@ class TrellisService {
|
|
|
1226
1336
|
__classPrivateFieldSet(this, _TrellisService_handlerTrellis, handlerTrellis, "f");
|
|
1227
1337
|
this.event = event;
|
|
1228
1338
|
this.kv = kv;
|
|
1229
|
-
this.store = Object.fromEntries(Object.entries(storeBindings).map(([alias, binding]) => [
|
|
1339
|
+
this.store = Object.fromEntries(Object.entries(storeBindings).map(([alias, binding]) => [
|
|
1340
|
+
alias,
|
|
1341
|
+
new InternalStoreHandle(nc, binding, storeHandleConstructorToken),
|
|
1342
|
+
]));
|
|
1230
1343
|
__classPrivateFieldSet(this, _TrellisService_operationTransfer, operationTransfer, "f");
|
|
1231
1344
|
const jobs = createJobsFacade({
|
|
1232
1345
|
serviceName: name,
|
|
@@ -1253,7 +1366,6 @@ class TrellisService {
|
|
|
1253
1366
|
return {
|
|
1254
1367
|
name: this.name,
|
|
1255
1368
|
auth: this.auth,
|
|
1256
|
-
nc: this.nc,
|
|
1257
1369
|
event: __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createBoundEventFacade).call(this, deps),
|
|
1258
1370
|
kv: this.kv,
|
|
1259
1371
|
store: this.store,
|
|
@@ -1293,7 +1405,7 @@ class TrellisService {
|
|
|
1293
1405
|
const current = await __classPrivateFieldGet(this, _TrellisService_server, "f").operations.get(operationId).take();
|
|
1294
1406
|
if (!(0, result_1.isErr)(current) && current.state === "completed") {
|
|
1295
1407
|
if (!operationOutputsEqual(current.output, output)) {
|
|
1296
|
-
return result_1.Result.err(new
|
|
1408
|
+
return result_1.Result.err(new index_js_1.UnexpectedError({
|
|
1297
1409
|
cause: new Error("operation already completed with different output"),
|
|
1298
1410
|
}));
|
|
1299
1411
|
}
|
|
@@ -1302,96 +1414,14 @@ class TrellisService {
|
|
|
1302
1414
|
return result_1.Result.err(completed.error);
|
|
1303
1415
|
})());
|
|
1304
1416
|
}
|
|
1305
|
-
static connect(args
|
|
1306
|
-
return
|
|
1307
|
-
try {
|
|
1308
|
-
const runtimeDeps = {
|
|
1309
|
-
...(await loadDefaultServiceRuntimeDeps()),
|
|
1310
|
-
...deps,
|
|
1311
|
-
};
|
|
1312
|
-
if (automaticTelemetryEnabled(args.telemetry)) {
|
|
1313
|
-
runtimeDeps.initTelemetry?.(args.name);
|
|
1314
|
-
}
|
|
1315
|
-
const auth = await (0, auth_js_2.createAuth)({ sessionKeySeed: args.sessionKeySeed });
|
|
1316
|
-
const bootstrapLog = resolveServiceLogger(args.server?.log);
|
|
1317
|
-
const bootstrap = await fetchServiceBootstrapInfo({
|
|
1318
|
-
trellisUrl: args.trellisUrl,
|
|
1319
|
-
serviceName: args.name,
|
|
1320
|
-
contractId: args.contract.CONTRACT_ID,
|
|
1321
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1322
|
-
contract: args.contract.CONTRACT,
|
|
1323
|
-
auth,
|
|
1324
|
-
log: bootstrapLog,
|
|
1325
|
-
});
|
|
1326
|
-
const { authenticator: authTokenAuthenticator, inboxPrefix } = await auth
|
|
1327
|
-
.natsConnectOptions({
|
|
1328
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1329
|
-
});
|
|
1330
|
-
let nc;
|
|
1331
|
-
try {
|
|
1332
|
-
nc = await runtimeDeps.connect({
|
|
1333
|
-
servers: (0, runtime_transport_js_1.selectRuntimeTransportServers)(bootstrap.connectInfo.transports),
|
|
1334
|
-
maxReconnectAttempts: runtime_transport_js_1.DEFAULT_RUNTIME_MAX_RECONNECT_ATTEMPTS,
|
|
1335
|
-
waitOnFirstConnect: runtime_transport_js_1.DEFAULT_SERVICE_RUNTIME_WAIT_ON_FIRST_CONNECT,
|
|
1336
|
-
inboxPrefix,
|
|
1337
|
-
authenticator: [
|
|
1338
|
-
authTokenAuthenticator,
|
|
1339
|
-
(0, nats_core_1.jwtAuthenticator)(bootstrap.connectInfo.transport.sentinel.jwt, new TextEncoder().encode(bootstrap.connectInfo.transport.sentinel.seed)),
|
|
1340
|
-
],
|
|
1341
|
-
});
|
|
1342
|
-
}
|
|
1343
|
-
catch (cause) {
|
|
1344
|
-
throw new index_js_2.TransportError({
|
|
1345
|
-
code: "trellis.runtime.connect_failed",
|
|
1346
|
-
message: "Trellis could not open the service runtime connection.",
|
|
1347
|
-
hint: "Retry the connection. If it keeps failing, check Trellis transport availability.",
|
|
1348
|
-
cause,
|
|
1349
|
-
context: {
|
|
1350
|
-
trellisUrl: args.trellisUrl,
|
|
1351
|
-
contractId: args.contract.CONTRACT_ID,
|
|
1352
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1353
|
-
},
|
|
1354
|
-
});
|
|
1355
|
-
}
|
|
1356
|
-
try {
|
|
1357
|
-
const server = args.contract.API.trellis
|
|
1358
|
-
? {
|
|
1359
|
-
...(args.server ?? {}),
|
|
1360
|
-
api: args.contract.API.owned,
|
|
1361
|
-
trellisApi: args.contract.API.trellis,
|
|
1362
|
-
}
|
|
1363
|
-
: {
|
|
1364
|
-
...(args.server ?? {}),
|
|
1365
|
-
api: args.contract.API.owned,
|
|
1366
|
-
};
|
|
1367
|
-
return result_1.Result.ok(await createConnectedService({
|
|
1368
|
-
name: args.name,
|
|
1369
|
-
auth,
|
|
1370
|
-
nc,
|
|
1371
|
-
contractId: args.contract.CONTRACT_ID,
|
|
1372
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1373
|
-
contractJobs: (args.contract[mod_js_1.CONTRACT_JOBS_METADATA] ?? {}),
|
|
1374
|
-
contractKv: (args.contract[mod_js_1.CONTRACT_KV_METADATA] ?? {}),
|
|
1375
|
-
contractEventConsumers: args.contract.CONTRACT.eventConsumers,
|
|
1376
|
-
server,
|
|
1377
|
-
bindings: bootstrap.binding.resources,
|
|
1378
|
-
}));
|
|
1379
|
-
}
|
|
1380
|
-
catch (cause) {
|
|
1381
|
-
await closeFailedServiceBootstrapConnection(nc);
|
|
1382
|
-
throw cause;
|
|
1383
|
-
}
|
|
1384
|
-
}
|
|
1385
|
-
catch (cause) {
|
|
1386
|
-
return result_1.Result.err(cause instanceof index_js_2.TransportError ? cause : toUnexpectedError(cause));
|
|
1387
|
-
}
|
|
1388
|
-
})());
|
|
1417
|
+
static connect(args) {
|
|
1418
|
+
return connectTrellisServiceWithRuntimeDeps(args, {});
|
|
1389
1419
|
}
|
|
1390
1420
|
async wait() {
|
|
1391
1421
|
__classPrivateFieldSet(this, _TrellisService_waitPromise, __classPrivateFieldGet(this, _TrellisService_waitPromise, "f") ?? (async () => {
|
|
1392
1422
|
try {
|
|
1393
1423
|
await __classPrivateFieldGet(this, _TrellisService_managedJobWorkers, "f").start().orThrow();
|
|
1394
|
-
const closed = await this.
|
|
1424
|
+
const closed = await __classPrivateFieldGet(this, _TrellisService_nc, "f").closed();
|
|
1395
1425
|
if (closed instanceof Error) {
|
|
1396
1426
|
throw closed;
|
|
1397
1427
|
}
|
|
@@ -1418,6 +1448,12 @@ class TrellisService {
|
|
|
1418
1448
|
}
|
|
1419
1449
|
finally {
|
|
1420
1450
|
await __classPrivateFieldGet(this, _TrellisService_server, "f").stop();
|
|
1451
|
+
this.connection.setStatus({
|
|
1452
|
+
kind: this.connection.status.kind,
|
|
1453
|
+
phase: "closed",
|
|
1454
|
+
observedAt: new Date(),
|
|
1455
|
+
transport: { name: "nats" },
|
|
1456
|
+
});
|
|
1421
1457
|
}
|
|
1422
1458
|
}
|
|
1423
1459
|
}
|
|
@@ -1426,7 +1462,7 @@ class TrellisService {
|
|
|
1426
1462
|
}
|
|
1427
1463
|
}
|
|
1428
1464
|
exports.TrellisService = TrellisService;
|
|
1429
|
-
_TrellisService_server = new WeakMap(), _TrellisService_handlerTrellis = new WeakMap(), _TrellisService_operationTransfer = new WeakMap(), _TrellisService_stopHealthPublishing = new WeakMap(), _TrellisService_managedJobWorkers = new WeakMap(), _TrellisService_waitPromise = new WeakMap(), _TrellisService_stopPromise = new WeakMap(), _TrellisService_instances = new WeakSet(), _TrellisService_createBoundHealth = function _TrellisService_createBoundHealth(deps) {
|
|
1465
|
+
_TrellisService_server = new WeakMap(), _TrellisService_nc = new WeakMap(), _TrellisService_handlerTrellis = new WeakMap(), _TrellisService_operationTransfer = new WeakMap(), _TrellisService_stopHealthPublishing = new WeakMap(), _TrellisService_managedJobWorkers = new WeakMap(), _TrellisService_waitPromise = new WeakMap(), _TrellisService_stopPromise = new WeakMap(), _TrellisService_instances = new WeakSet(), _TrellisService_createBoundHealth = function _TrellisService_createBoundHealth(deps) {
|
|
1430
1466
|
const health = this.health;
|
|
1431
1467
|
return {
|
|
1432
1468
|
serviceName: health.serviceName,
|
package/script/server.js
CHANGED
|
@@ -618,18 +618,18 @@ class TrellisServiceRuntime extends trellis_js_1.Trellis {
|
|
|
618
618
|
}
|
|
619
619
|
async stop() {
|
|
620
620
|
__classPrivateFieldSet(this, _TrellisServiceRuntime_stopPromise, __classPrivateFieldGet(this, _TrellisServiceRuntime_stopPromise, "f") ?? (async () => {
|
|
621
|
-
if (this.
|
|
621
|
+
if (this.nats.isClosed()) {
|
|
622
622
|
return;
|
|
623
623
|
}
|
|
624
624
|
try {
|
|
625
|
-
await this.
|
|
625
|
+
await this.nats.drain();
|
|
626
626
|
}
|
|
627
627
|
catch (cause) {
|
|
628
628
|
if (!(cause instanceof Error) ||
|
|
629
629
|
cause.name !== "DrainingConnectionError") {
|
|
630
630
|
throw cause;
|
|
631
631
|
}
|
|
632
|
-
await this.
|
|
632
|
+
await this.nats.closed().catch(() => undefined);
|
|
633
633
|
}
|
|
634
634
|
})(), "f");
|
|
635
635
|
await __classPrivateFieldGet(this, _TrellisServiceRuntime_stopPromise, "f");
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { NatsConnection } from "@nats-io/nats-core";
|
|
2
1
|
import { type AsyncResult, type BaseError } from "@qlever-llc/result";
|
|
3
2
|
import { type StaticDecode, Type } from "typebox";
|
|
4
3
|
import type { PreparedTrellisEvent, Trellis } from "../trellis.js";
|
|
@@ -151,8 +150,6 @@ export type KvOutboxRecord = StaticDecode<typeof KvOutboxRecordSchema>;
|
|
|
151
150
|
export declare class NatsKvOutboxRepository implements OutboxRepository {
|
|
152
151
|
readonly kv: OutboxKvStore;
|
|
153
152
|
constructor(kv: OutboxKvStore);
|
|
154
|
-
/** Opens or creates the KV bucket used for durable outbox records. */
|
|
155
|
-
static open(nats: NatsConnection, bucket?: string): Promise<NatsKvOutboxRepository>;
|
|
156
153
|
enqueue(event: PreparedTrellisEvent): Promise<OutboxMessage>;
|
|
157
154
|
claimDue(limit: number, now: Date): Promise<OutboxMessage[]>;
|
|
158
155
|
markDispatched(id: string, now: Date): Promise<void>;
|
|
@@ -165,9 +162,7 @@ export declare class NatsKvOutboxRepository implements OutboxRepository {
|
|
|
165
162
|
/** Durable NATS KV inbox repository for event-id duplicate suppression. */
|
|
166
163
|
export declare class NatsKvInboxRepository implements InboxRepository {
|
|
167
164
|
readonly kv: TypedKV<typeof KvInboxRecordSchema>;
|
|
168
|
-
|
|
169
|
-
/** Opens or creates the KV bucket used for durable inbox records. */
|
|
170
|
-
static open(nats: NatsConnection, bucket?: string): Promise<NatsKvInboxRepository>;
|
|
165
|
+
constructor(kv: TypedKV<typeof KvInboxRecordSchema>);
|
|
171
166
|
record(messageId: string, now?: Date): Promise<boolean>;
|
|
172
167
|
}
|
|
173
168
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox_inbox.d.ts","sourceRoot":"","sources":["../../src/service/outbox_inbox.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"outbox_inbox.d.ts","sourceRoot":"","sources":["../../src/service/outbox_inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,6 @@ exports.dispatchOutbox = dispatchOutbox;
|
|
|
20
20
|
exports.outboxMessageToPrepared = outboxMessageToPrepared;
|
|
21
21
|
const result_1 = require("@qlever-llc/result");
|
|
22
22
|
const typebox_1 = require("typebox");
|
|
23
|
-
const kv_js_1 = require("../kv.js");
|
|
24
23
|
const mod_js_1 = require("../telemetry/mod.js");
|
|
25
24
|
exports.defaultSqlOutboxTables = Object.freeze({
|
|
26
25
|
outbox: "trellis_outbox",
|
|
@@ -293,16 +292,6 @@ class NatsKvOutboxRepository {
|
|
|
293
292
|
value: kv
|
|
294
293
|
});
|
|
295
294
|
}
|
|
296
|
-
/** Opens or creates the KV bucket used for durable outbox records. */
|
|
297
|
-
static async open(nats, bucket = "trellis_outbox") {
|
|
298
|
-
const opened = await kv_js_1.TypedKV.open(nats, bucket, exports.KvOutboxRecordSchema, {
|
|
299
|
-
history: 1,
|
|
300
|
-
});
|
|
301
|
-
const value = opened.take();
|
|
302
|
-
if ((0, result_1.isErr)(value))
|
|
303
|
-
throw value.error;
|
|
304
|
-
return new NatsKvOutboxRepository(value);
|
|
305
|
-
}
|
|
306
295
|
async enqueue(event) {
|
|
307
296
|
const now = new Date().toISOString();
|
|
308
297
|
const record = {
|
|
@@ -412,16 +401,6 @@ class NatsKvInboxRepository {
|
|
|
412
401
|
value: kv
|
|
413
402
|
});
|
|
414
403
|
}
|
|
415
|
-
/** Opens or creates the KV bucket used for durable inbox records. */
|
|
416
|
-
static async open(nats, bucket = "trellis_inbox") {
|
|
417
|
-
const opened = await kv_js_1.TypedKV.open(nats, bucket, KvInboxRecordSchema, {
|
|
418
|
-
history: 1,
|
|
419
|
-
});
|
|
420
|
-
const value = opened.take();
|
|
421
|
-
if ((0, result_1.isErr)(value))
|
|
422
|
-
throw value.error;
|
|
423
|
-
return new NatsKvInboxRepository(value);
|
|
424
|
-
}
|
|
425
404
|
async record(messageId, now = new Date()) {
|
|
426
405
|
// Durable NATS KV dedupe is useful for event handlers without SQL state, but
|
|
427
406
|
// it is not transactional with unrelated DB side effects.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/telemetry/env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/telemetry/env.ts"],"names":[],"mappings":"AAiBA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYtD"}
|
package/script/telemetry/env.js
CHANGED
|
@@ -1,51 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.getEnv = getEnv;
|
|
37
|
-
const dntShim = __importStar(require("../_dnt.shims.js"));
|
|
38
4
|
// Shared telemetry code needs environment access without assuming Deno or Node.
|
|
39
5
|
function getEnv(key) {
|
|
40
|
-
const
|
|
41
|
-
|
|
6
|
+
const load = new Function("return globalThis");
|
|
7
|
+
const environmentGlobal = load();
|
|
8
|
+
if (environmentGlobal.Deno?.env?.get) {
|
|
42
9
|
try {
|
|
43
|
-
return
|
|
10
|
+
return environmentGlobal.Deno.env.get(key);
|
|
44
11
|
}
|
|
45
12
|
catch {
|
|
46
13
|
return undefined;
|
|
47
14
|
}
|
|
48
15
|
}
|
|
49
|
-
|
|
50
|
-
return processGlobal.process?.env?.[key];
|
|
16
|
+
return environmentGlobal.process?.env?.[key];
|
|
51
17
|
}
|
|
@@ -24,11 +24,4 @@ export type TrellisErrorMetricAttributes = {
|
|
|
24
24
|
export declare function getTrellisMeter(): Meter;
|
|
25
25
|
/** Records one Trellis error with only stable, low-cardinality attributes. */
|
|
26
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
27
|
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -1 +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
|
|
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"}
|