@qlever-llc/trellis 0.10.13 → 0.10.15
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 +5 -10
- package/esm/contract_support/mod.d.ts.map +1 -1
- package/esm/contract_support/mod.js +41 -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/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 +14 -37
- package/esm/server/service.d.ts.map +1 -1
- package/esm/server/service.js +143 -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 +5 -10
- package/script/contract_support/mod.d.ts.map +1 -1
- package/script/contract_support/mod.js +43 -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/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 +14 -37
- package/script/server/service.d.ts.map +1 -1
- package/script/server/service.js +153 -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 +69 -45
- package/src/contract_support/protocol.ts +16 -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 +186 -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/esm/server/service.js
CHANGED
|
@@ -9,9 +9,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
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");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var
|
|
12
|
+
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;
|
|
13
13
|
import { headers as natsHeaders, jwtAuthenticator, } from "@nats-io/nats-core";
|
|
14
|
-
import { TypedKV
|
|
14
|
+
import { TypedKV } from "../kv.js";
|
|
15
|
+
import { TypedStore, } from "../store.js";
|
|
15
16
|
import { sdk as trellisAuth } from "../sdk/auth.js";
|
|
16
17
|
import { TrellisServiceRuntime, } from "../server.js";
|
|
17
18
|
import { createAuth, estimateMidpointClockOffsetMs, SentinelCredsSchema, } from "../auth.js";
|
|
@@ -393,22 +394,25 @@ async function fetchServiceBootstrapInfo(args) {
|
|
|
393
394
|
}
|
|
394
395
|
}
|
|
395
396
|
export class StoreHandle {
|
|
397
|
+
}
|
|
398
|
+
class InternalStoreHandle extends StoreHandle {
|
|
396
399
|
constructor(nc, binding, token) {
|
|
400
|
+
super();
|
|
397
401
|
Object.defineProperty(this, "binding", {
|
|
398
402
|
enumerable: true,
|
|
399
403
|
configurable: true,
|
|
400
404
|
writable: true,
|
|
401
405
|
value: void 0
|
|
402
406
|
});
|
|
403
|
-
|
|
407
|
+
_InternalStoreHandle_nc.set(this, void 0);
|
|
404
408
|
if (token !== storeHandleConstructorToken) {
|
|
405
409
|
throw new TypeError("StoreHandle instances are created by TrellisService");
|
|
406
410
|
}
|
|
407
|
-
__classPrivateFieldSet(this,
|
|
411
|
+
__classPrivateFieldSet(this, _InternalStoreHandle_nc, nc, "f");
|
|
408
412
|
this.binding = binding;
|
|
409
413
|
}
|
|
410
414
|
open() {
|
|
411
|
-
return TypedStore.open(__classPrivateFieldGet(this,
|
|
415
|
+
return TypedStore.open(__classPrivateFieldGet(this, _InternalStoreHandle_nc, "f"), this.binding.name, {
|
|
412
416
|
ttlMs: this.binding.ttlMs,
|
|
413
417
|
maxObjectBytes: this.binding.maxObjectBytes,
|
|
414
418
|
maxTotalBytes: this.binding.maxTotalBytes,
|
|
@@ -422,7 +426,7 @@ export class StoreHandle {
|
|
|
422
426
|
return this.open().andThen((store) => store.waitFor(key, options));
|
|
423
427
|
}
|
|
424
428
|
}
|
|
425
|
-
|
|
429
|
+
_InternalStoreHandle_nc = new WeakMap();
|
|
426
430
|
async function openServiceKvBindings(args) {
|
|
427
431
|
for (const alias of Object.keys(args.bindings)) {
|
|
428
432
|
if (!args.contractKv[alias]) {
|
|
@@ -458,6 +462,9 @@ function createServiceEventPublishFacade(outbound) {
|
|
|
458
462
|
}
|
|
459
463
|
return surface;
|
|
460
464
|
}
|
|
465
|
+
/**
|
|
466
|
+
* @internal Shared by Trellis-owned service bootstrap paths.
|
|
467
|
+
*/
|
|
461
468
|
export async function createConnectedService(args) {
|
|
462
469
|
const resolvedLog = resolveServiceLogger(args.server.log);
|
|
463
470
|
const connection = observeNatsTrellisConnection({
|
|
@@ -592,10 +599,25 @@ export async function createConnectedService(args) {
|
|
|
592
599
|
auth: args.auth,
|
|
593
600
|
stores: Object.fromEntries(Object.entries(args.bindings.store ?? {}).map(([alias, binding]) => [
|
|
594
601
|
alias,
|
|
595
|
-
new
|
|
602
|
+
new InternalStoreHandle(args.nc, binding, storeHandleConstructorToken),
|
|
596
603
|
])),
|
|
597
604
|
});
|
|
598
|
-
const service =
|
|
605
|
+
const service = Reflect.construct(TrellisService, [
|
|
606
|
+
args.name,
|
|
607
|
+
args.auth,
|
|
608
|
+
args.nc,
|
|
609
|
+
server,
|
|
610
|
+
outbound.event,
|
|
611
|
+
handlerTrellis,
|
|
612
|
+
kv,
|
|
613
|
+
args.contractJobs,
|
|
614
|
+
args.bindings,
|
|
615
|
+
operationTransfer,
|
|
616
|
+
health,
|
|
617
|
+
stopHealthPublishing,
|
|
618
|
+
connection,
|
|
619
|
+
trellisServiceConstructorToken,
|
|
620
|
+
]);
|
|
599
621
|
handlerResources = {
|
|
600
622
|
kv: service.kv,
|
|
601
623
|
store: service.store,
|
|
@@ -1134,6 +1156,98 @@ function createBoundJobsFacade(args) {
|
|
|
1134
1156
|
}
|
|
1135
1157
|
return boundJobs;
|
|
1136
1158
|
}
|
|
1159
|
+
/**
|
|
1160
|
+
* Connects a service with caller-supplied runtime dependencies for tests and
|
|
1161
|
+
* Trellis-owned internals. This helper is intentionally not re-exported from
|
|
1162
|
+
* public package subpaths.
|
|
1163
|
+
*
|
|
1164
|
+
* @internal
|
|
1165
|
+
*/
|
|
1166
|
+
export function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
1167
|
+
return AsyncResult.from((async () => {
|
|
1168
|
+
try {
|
|
1169
|
+
const runtimeDeps = {
|
|
1170
|
+
...(await loadDefaultServiceRuntimeDeps()),
|
|
1171
|
+
...deps,
|
|
1172
|
+
};
|
|
1173
|
+
if (automaticTelemetryEnabled(args.telemetry)) {
|
|
1174
|
+
runtimeDeps.initTelemetry?.(args.name);
|
|
1175
|
+
}
|
|
1176
|
+
const auth = await createAuth({ sessionKeySeed: args.sessionKeySeed });
|
|
1177
|
+
const bootstrapLog = resolveServiceLogger(args.server?.log);
|
|
1178
|
+
const bootstrap = await fetchServiceBootstrapInfo({
|
|
1179
|
+
trellisUrl: args.trellisUrl,
|
|
1180
|
+
serviceName: args.name,
|
|
1181
|
+
contractId: args.contract.CONTRACT_ID,
|
|
1182
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1183
|
+
contract: args.contract.CONTRACT,
|
|
1184
|
+
auth,
|
|
1185
|
+
log: bootstrapLog,
|
|
1186
|
+
});
|
|
1187
|
+
const { authenticator: authTokenAuthenticator, inboxPrefix } = await auth
|
|
1188
|
+
.natsConnectOptions({
|
|
1189
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1190
|
+
});
|
|
1191
|
+
let nc;
|
|
1192
|
+
try {
|
|
1193
|
+
nc = await runtimeDeps.connect({
|
|
1194
|
+
servers: selectRuntimeTransportServers(bootstrap.connectInfo.transports),
|
|
1195
|
+
maxReconnectAttempts: DEFAULT_RUNTIME_MAX_RECONNECT_ATTEMPTS,
|
|
1196
|
+
waitOnFirstConnect: DEFAULT_SERVICE_RUNTIME_WAIT_ON_FIRST_CONNECT,
|
|
1197
|
+
inboxPrefix,
|
|
1198
|
+
authenticator: [
|
|
1199
|
+
authTokenAuthenticator,
|
|
1200
|
+
jwtAuthenticator(bootstrap.connectInfo.transport.sentinel.jwt, new TextEncoder().encode(bootstrap.connectInfo.transport.sentinel.seed)),
|
|
1201
|
+
],
|
|
1202
|
+
});
|
|
1203
|
+
}
|
|
1204
|
+
catch (cause) {
|
|
1205
|
+
throw new TransportError({
|
|
1206
|
+
code: "trellis.runtime.connect_failed",
|
|
1207
|
+
message: "Trellis could not open the service runtime connection.",
|
|
1208
|
+
hint: "Retry the connection. If it keeps failing, check Trellis transport availability.",
|
|
1209
|
+
cause,
|
|
1210
|
+
context: {
|
|
1211
|
+
trellisUrl: args.trellisUrl,
|
|
1212
|
+
contractId: args.contract.CONTRACT_ID,
|
|
1213
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1214
|
+
},
|
|
1215
|
+
});
|
|
1216
|
+
}
|
|
1217
|
+
try {
|
|
1218
|
+
const server = args.contract.API.trellis
|
|
1219
|
+
? {
|
|
1220
|
+
...(args.server ?? {}),
|
|
1221
|
+
api: args.contract.API.owned,
|
|
1222
|
+
trellisApi: args.contract.API.trellis,
|
|
1223
|
+
}
|
|
1224
|
+
: {
|
|
1225
|
+
...(args.server ?? {}),
|
|
1226
|
+
api: args.contract.API.owned,
|
|
1227
|
+
};
|
|
1228
|
+
return Result.ok(await createConnectedService({
|
|
1229
|
+
name: args.name,
|
|
1230
|
+
auth,
|
|
1231
|
+
nc,
|
|
1232
|
+
contractId: args.contract.CONTRACT_ID,
|
|
1233
|
+
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1234
|
+
contractJobs: (args.contract[CONTRACT_JOBS_METADATA] ?? {}),
|
|
1235
|
+
contractKv: (args.contract[CONTRACT_KV_METADATA] ?? {}),
|
|
1236
|
+
contractEventConsumers: args.contract.CONTRACT.eventConsumers,
|
|
1237
|
+
server,
|
|
1238
|
+
bindings: bootstrap.binding.resources,
|
|
1239
|
+
}));
|
|
1240
|
+
}
|
|
1241
|
+
catch (cause) {
|
|
1242
|
+
await closeFailedServiceBootstrapConnection(nc);
|
|
1243
|
+
throw cause;
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
catch (cause) {
|
|
1247
|
+
return Result.err(cause instanceof TransportError ? cause : toUnexpectedError(cause));
|
|
1248
|
+
}
|
|
1249
|
+
})());
|
|
1250
|
+
}
|
|
1137
1251
|
export class TrellisService {
|
|
1138
1252
|
constructor(name, auth, nc, server, event, handlerTrellis, kv, contractJobs, bindings, operationTransfer, health, stopHealthPublishing, connection, token) {
|
|
1139
1253
|
_TrellisService_instances.add(this);
|
|
@@ -1149,13 +1263,8 @@ export class TrellisService {
|
|
|
1149
1263
|
writable: true,
|
|
1150
1264
|
value: void 0
|
|
1151
1265
|
});
|
|
1152
|
-
Object.defineProperty(this, "nc", {
|
|
1153
|
-
enumerable: true,
|
|
1154
|
-
configurable: true,
|
|
1155
|
-
writable: true,
|
|
1156
|
-
value: void 0
|
|
1157
|
-
});
|
|
1158
1266
|
_TrellisService_server.set(this, void 0);
|
|
1267
|
+
_TrellisService_nc.set(this, void 0);
|
|
1159
1268
|
_TrellisService_handlerTrellis.set(this, void 0);
|
|
1160
1269
|
/** Event lifecycle surface for service startup listeners and publishers. */
|
|
1161
1270
|
Object.defineProperty(this, "event", {
|
|
@@ -1212,7 +1321,7 @@ export class TrellisService {
|
|
|
1212
1321
|
const storeBindings = bindings.store ?? {};
|
|
1213
1322
|
this.name = name;
|
|
1214
1323
|
this.auth = auth;
|
|
1215
|
-
this
|
|
1324
|
+
__classPrivateFieldSet(this, _TrellisService_nc, nc, "f");
|
|
1216
1325
|
__classPrivateFieldSet(this, _TrellisService_server, server, "f");
|
|
1217
1326
|
Object.defineProperty(this, "server", {
|
|
1218
1327
|
value: server,
|
|
@@ -1221,7 +1330,10 @@ export class TrellisService {
|
|
|
1221
1330
|
__classPrivateFieldSet(this, _TrellisService_handlerTrellis, handlerTrellis, "f");
|
|
1222
1331
|
this.event = event;
|
|
1223
1332
|
this.kv = kv;
|
|
1224
|
-
this.store = Object.fromEntries(Object.entries(storeBindings).map(([alias, binding]) => [
|
|
1333
|
+
this.store = Object.fromEntries(Object.entries(storeBindings).map(([alias, binding]) => [
|
|
1334
|
+
alias,
|
|
1335
|
+
new InternalStoreHandle(nc, binding, storeHandleConstructorToken),
|
|
1336
|
+
]));
|
|
1225
1337
|
__classPrivateFieldSet(this, _TrellisService_operationTransfer, operationTransfer, "f");
|
|
1226
1338
|
const jobs = createJobsFacade({
|
|
1227
1339
|
serviceName: name,
|
|
@@ -1248,7 +1360,6 @@ export class TrellisService {
|
|
|
1248
1360
|
return {
|
|
1249
1361
|
name: this.name,
|
|
1250
1362
|
auth: this.auth,
|
|
1251
|
-
nc: this.nc,
|
|
1252
1363
|
event: __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createBoundEventFacade).call(this, deps),
|
|
1253
1364
|
kv: this.kv,
|
|
1254
1365
|
store: this.store,
|
|
@@ -1258,11 +1369,16 @@ export class TrellisService {
|
|
|
1258
1369
|
connection: this.connection,
|
|
1259
1370
|
createTransfer: (args) => this.createTransfer(args),
|
|
1260
1371
|
completeOperation: (operationId, output) => this.completeOperation(operationId, output),
|
|
1372
|
+
publishPrepared: (event) => this.publishPrepared(event),
|
|
1261
1373
|
wait: () => this.wait(),
|
|
1262
1374
|
stop: () => this.stop(),
|
|
1263
1375
|
with: (nextDeps) => this.with(nextDeps),
|
|
1264
1376
|
};
|
|
1265
1377
|
}
|
|
1378
|
+
/** Publishes a prepared event through the service runtime connection. */
|
|
1379
|
+
publishPrepared(event) {
|
|
1380
|
+
return __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f").publishPrepared(event);
|
|
1381
|
+
}
|
|
1266
1382
|
/**
|
|
1267
1383
|
* Creates a short-lived receive transfer grant for a caller session.
|
|
1268
1384
|
*/
|
|
@@ -1297,96 +1413,14 @@ export class TrellisService {
|
|
|
1297
1413
|
return Result.err(completed.error);
|
|
1298
1414
|
})());
|
|
1299
1415
|
}
|
|
1300
|
-
static connect(args
|
|
1301
|
-
return
|
|
1302
|
-
try {
|
|
1303
|
-
const runtimeDeps = {
|
|
1304
|
-
...(await loadDefaultServiceRuntimeDeps()),
|
|
1305
|
-
...deps,
|
|
1306
|
-
};
|
|
1307
|
-
if (automaticTelemetryEnabled(args.telemetry)) {
|
|
1308
|
-
runtimeDeps.initTelemetry?.(args.name);
|
|
1309
|
-
}
|
|
1310
|
-
const auth = await createAuth({ sessionKeySeed: args.sessionKeySeed });
|
|
1311
|
-
const bootstrapLog = resolveServiceLogger(args.server?.log);
|
|
1312
|
-
const bootstrap = await fetchServiceBootstrapInfo({
|
|
1313
|
-
trellisUrl: args.trellisUrl,
|
|
1314
|
-
serviceName: args.name,
|
|
1315
|
-
contractId: args.contract.CONTRACT_ID,
|
|
1316
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1317
|
-
contract: args.contract.CONTRACT,
|
|
1318
|
-
auth,
|
|
1319
|
-
log: bootstrapLog,
|
|
1320
|
-
});
|
|
1321
|
-
const { authenticator: authTokenAuthenticator, inboxPrefix } = await auth
|
|
1322
|
-
.natsConnectOptions({
|
|
1323
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1324
|
-
});
|
|
1325
|
-
let nc;
|
|
1326
|
-
try {
|
|
1327
|
-
nc = await runtimeDeps.connect({
|
|
1328
|
-
servers: selectRuntimeTransportServers(bootstrap.connectInfo.transports),
|
|
1329
|
-
maxReconnectAttempts: DEFAULT_RUNTIME_MAX_RECONNECT_ATTEMPTS,
|
|
1330
|
-
waitOnFirstConnect: DEFAULT_SERVICE_RUNTIME_WAIT_ON_FIRST_CONNECT,
|
|
1331
|
-
inboxPrefix,
|
|
1332
|
-
authenticator: [
|
|
1333
|
-
authTokenAuthenticator,
|
|
1334
|
-
jwtAuthenticator(bootstrap.connectInfo.transport.sentinel.jwt, new TextEncoder().encode(bootstrap.connectInfo.transport.sentinel.seed)),
|
|
1335
|
-
],
|
|
1336
|
-
});
|
|
1337
|
-
}
|
|
1338
|
-
catch (cause) {
|
|
1339
|
-
throw new TransportError({
|
|
1340
|
-
code: "trellis.runtime.connect_failed",
|
|
1341
|
-
message: "Trellis could not open the service runtime connection.",
|
|
1342
|
-
hint: "Retry the connection. If it keeps failing, check Trellis transport availability.",
|
|
1343
|
-
cause,
|
|
1344
|
-
context: {
|
|
1345
|
-
trellisUrl: args.trellisUrl,
|
|
1346
|
-
contractId: args.contract.CONTRACT_ID,
|
|
1347
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1348
|
-
},
|
|
1349
|
-
});
|
|
1350
|
-
}
|
|
1351
|
-
try {
|
|
1352
|
-
const server = args.contract.API.trellis
|
|
1353
|
-
? {
|
|
1354
|
-
...(args.server ?? {}),
|
|
1355
|
-
api: args.contract.API.owned,
|
|
1356
|
-
trellisApi: args.contract.API.trellis,
|
|
1357
|
-
}
|
|
1358
|
-
: {
|
|
1359
|
-
...(args.server ?? {}),
|
|
1360
|
-
api: args.contract.API.owned,
|
|
1361
|
-
};
|
|
1362
|
-
return Result.ok(await createConnectedService({
|
|
1363
|
-
name: args.name,
|
|
1364
|
-
auth,
|
|
1365
|
-
nc,
|
|
1366
|
-
contractId: args.contract.CONTRACT_ID,
|
|
1367
|
-
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1368
|
-
contractJobs: (args.contract[CONTRACT_JOBS_METADATA] ?? {}),
|
|
1369
|
-
contractKv: (args.contract[CONTRACT_KV_METADATA] ?? {}),
|
|
1370
|
-
contractEventConsumers: args.contract.CONTRACT.eventConsumers,
|
|
1371
|
-
server,
|
|
1372
|
-
bindings: bootstrap.binding.resources,
|
|
1373
|
-
}));
|
|
1374
|
-
}
|
|
1375
|
-
catch (cause) {
|
|
1376
|
-
await closeFailedServiceBootstrapConnection(nc);
|
|
1377
|
-
throw cause;
|
|
1378
|
-
}
|
|
1379
|
-
}
|
|
1380
|
-
catch (cause) {
|
|
1381
|
-
return Result.err(cause instanceof TransportError ? cause : toUnexpectedError(cause));
|
|
1382
|
-
}
|
|
1383
|
-
})());
|
|
1416
|
+
static connect(args) {
|
|
1417
|
+
return connectTrellisServiceWithRuntimeDeps(args, {});
|
|
1384
1418
|
}
|
|
1385
1419
|
async wait() {
|
|
1386
1420
|
__classPrivateFieldSet(this, _TrellisService_waitPromise, __classPrivateFieldGet(this, _TrellisService_waitPromise, "f") ?? (async () => {
|
|
1387
1421
|
try {
|
|
1388
1422
|
await __classPrivateFieldGet(this, _TrellisService_managedJobWorkers, "f").start().orThrow();
|
|
1389
|
-
const closed = await this.
|
|
1423
|
+
const closed = await __classPrivateFieldGet(this, _TrellisService_nc, "f").closed();
|
|
1390
1424
|
if (closed instanceof Error) {
|
|
1391
1425
|
throw closed;
|
|
1392
1426
|
}
|
|
@@ -1413,6 +1447,12 @@ export class TrellisService {
|
|
|
1413
1447
|
}
|
|
1414
1448
|
finally {
|
|
1415
1449
|
await __classPrivateFieldGet(this, _TrellisService_server, "f").stop();
|
|
1450
|
+
this.connection.setStatus({
|
|
1451
|
+
kind: this.connection.status.kind,
|
|
1452
|
+
phase: "closed",
|
|
1453
|
+
observedAt: new Date(),
|
|
1454
|
+
transport: { name: "nats" },
|
|
1455
|
+
});
|
|
1416
1456
|
}
|
|
1417
1457
|
}
|
|
1418
1458
|
}
|
|
@@ -1420,7 +1460,7 @@ export class TrellisService {
|
|
|
1420
1460
|
await __classPrivateFieldGet(this, _TrellisService_stopPromise, "f");
|
|
1421
1461
|
}
|
|
1422
1462
|
}
|
|
1423
|
-
_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) {
|
|
1463
|
+
_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) {
|
|
1424
1464
|
const health = this.health;
|
|
1425
1465
|
return {
|
|
1426
1466
|
serviceName: health.serviceName,
|
package/esm/server.js
CHANGED
|
@@ -615,18 +615,18 @@ export class TrellisServiceRuntime extends Trellis {
|
|
|
615
615
|
}
|
|
616
616
|
async stop() {
|
|
617
617
|
__classPrivateFieldSet(this, _TrellisServiceRuntime_stopPromise, __classPrivateFieldGet(this, _TrellisServiceRuntime_stopPromise, "f") ?? (async () => {
|
|
618
|
-
if (this.
|
|
618
|
+
if (this.nats.isClosed()) {
|
|
619
619
|
return;
|
|
620
620
|
}
|
|
621
621
|
try {
|
|
622
|
-
await this.
|
|
622
|
+
await this.nats.drain();
|
|
623
623
|
}
|
|
624
624
|
catch (cause) {
|
|
625
625
|
if (!(cause instanceof Error) ||
|
|
626
626
|
cause.name !== "DrainingConnectionError") {
|
|
627
627
|
throw cause;
|
|
628
628
|
}
|
|
629
|
-
await this.
|
|
629
|
+
await this.nats.closed().catch(() => undefined);
|
|
630
630
|
}
|
|
631
631
|
})(), "f");
|
|
632
632
|
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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"}
|
|
@@ -12,7 +12,6 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
12
12
|
var _MemoryOutboxRepository_messages, _MemoryInboxRepository_seen, _OutboxDispatcher_instances, _OutboxDispatcher_repository, _OutboxDispatcher_runtime, _OutboxDispatcher_options, _OutboxDispatcher_wakeTimer, _OutboxDispatcher_retryTimer, _OutboxDispatcher_idleTimer, _OutboxDispatcher_running, _OutboxDispatcher_pending, _OutboxDispatcher_retryDue, _OutboxDispatcher_stopped, _OutboxDispatcher_scheduleWakeup, _OutboxDispatcher_scheduleRetryWakeup, _OutboxDispatcher_scheduleIdleRetry, _OutboxDispatcher_run, _OutboxDispatcher_dispatchBatch, _OutboxDispatcher_retryDelayMs, _OutboxDispatcher_clearTimer;
|
|
13
13
|
import { isErr } from "@qlever-llc/result";
|
|
14
14
|
import { Type } from "typebox";
|
|
15
|
-
import { TypedKV } from "../kv.js";
|
|
16
15
|
import { recordTrellisError } from "../telemetry/mod.js";
|
|
17
16
|
export const defaultSqlOutboxTables = Object.freeze({
|
|
18
17
|
outbox: "trellis_outbox",
|
|
@@ -281,16 +280,6 @@ export class NatsKvOutboxRepository {
|
|
|
281
280
|
value: kv
|
|
282
281
|
});
|
|
283
282
|
}
|
|
284
|
-
/** Opens or creates the KV bucket used for durable outbox records. */
|
|
285
|
-
static async open(nats, bucket = "trellis_outbox") {
|
|
286
|
-
const opened = await TypedKV.open(nats, bucket, KvOutboxRecordSchema, {
|
|
287
|
-
history: 1,
|
|
288
|
-
});
|
|
289
|
-
const value = opened.take();
|
|
290
|
-
if (isErr(value))
|
|
291
|
-
throw value.error;
|
|
292
|
-
return new NatsKvOutboxRepository(value);
|
|
293
|
-
}
|
|
294
283
|
async enqueue(event) {
|
|
295
284
|
const now = new Date().toISOString();
|
|
296
285
|
const record = {
|
|
@@ -399,16 +388,6 @@ export class NatsKvInboxRepository {
|
|
|
399
388
|
value: kv
|
|
400
389
|
});
|
|
401
390
|
}
|
|
402
|
-
/** Opens or creates the KV bucket used for durable inbox records. */
|
|
403
|
-
static async open(nats, bucket = "trellis_inbox") {
|
|
404
|
-
const opened = await TypedKV.open(nats, bucket, KvInboxRecordSchema, {
|
|
405
|
-
history: 1,
|
|
406
|
-
});
|
|
407
|
-
const value = opened.take();
|
|
408
|
-
if (isErr(value))
|
|
409
|
-
throw value.error;
|
|
410
|
-
return new NatsKvInboxRepository(value);
|
|
411
|
-
}
|
|
412
391
|
async record(messageId, now = new Date()) {
|
|
413
392
|
// Durable NATS KV dedupe is useful for event handlers without SQL state, but
|
|
414
393
|
// 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/esm/telemetry/env.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import * as dntShim from "../_dnt.shims.js";
|
|
2
1
|
// Shared telemetry code needs environment access without assuming Deno or Node.
|
|
3
2
|
export function getEnv(key) {
|
|
4
|
-
const
|
|
5
|
-
|
|
3
|
+
const load = new Function("return globalThis");
|
|
4
|
+
const environmentGlobal = load();
|
|
5
|
+
if (environmentGlobal.Deno?.env?.get) {
|
|
6
6
|
try {
|
|
7
|
-
return
|
|
7
|
+
return environmentGlobal.Deno.env.get(key);
|
|
8
8
|
}
|
|
9
9
|
catch {
|
|
10
10
|
return undefined;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
return processGlobal.process?.env?.[key];
|
|
13
|
+
return environmentGlobal.process?.env?.[key];
|
|
15
14
|
}
|
|
@@ -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"}
|
package/esm/trellis.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type JetStreamClient } from "@nats-io/jetstream";
|
|
2
2
|
import { type Msg, type NatsConnection } from "@nats-io/nats-core";
|
|
3
3
|
import type { EventDesc, FeedDesc, InferSchemaType, TrellisAPI } from "./contracts.js";
|
|
4
|
-
import { CONTRACT_JOBS_METADATA, CONTRACT_KV_METADATA, CONTRACT_STATE_METADATA, type
|
|
4
|
+
import { CONTRACT_JOBS_METADATA, CONTRACT_KV_METADATA, CONTRACT_STATE_METADATA, type ContractJobsMetadata, type ContractKvMetadata } from "./contract_support/mod.js";
|
|
5
5
|
import type { StaticDecode } from "typebox";
|
|
6
6
|
import { AuthRequestsValidateResponseSchema, AuthRequestsValidateSchema } from "./auth/protocol.js";
|
|
7
7
|
import { AsyncResult, BaseError, type MaybeAsync, Result } from "@qlever-llc/result";
|
|
@@ -479,19 +479,6 @@ export type EventListenerContext = {
|
|
|
479
479
|
/** JetStream sequence number, when available. */
|
|
480
480
|
sequence?: number;
|
|
481
481
|
};
|
|
482
|
-
type RuntimeEventConsumers = {
|
|
483
|
-
metadata?: ContractEventConsumers;
|
|
484
|
-
bindings?: Record<string, EventConsumerResourceBinding>;
|
|
485
|
-
};
|
|
486
|
-
type TrellisInternalOpts<TA extends AnyTrellisAPI> = TrellisOpts<TA> & {
|
|
487
|
-
eventConsumers?: RuntimeEventConsumers;
|
|
488
|
-
};
|
|
489
|
-
/**
|
|
490
|
-
* Creates a Trellis runtime with bootstrap-resolved bindings.
|
|
491
|
-
*
|
|
492
|
-
* @internal
|
|
493
|
-
*/
|
|
494
|
-
export declare function createTrellisInternal<TA extends AnyTrellisAPI = TrellisAPI, TMode extends TrellisMode = "client", TState extends RuntimeStateStores = RuntimeStateStores>(name: string, nats: NatsConnection, auth: TrellisAuth, opts?: TrellisInternalOpts<TA>): Trellis<TA, TMode, TState>;
|
|
495
482
|
export type FeedSubscribeOpts = {
|
|
496
483
|
signal?: AbortSignal;
|
|
497
484
|
};
|
|
@@ -601,7 +588,6 @@ export type ClientTrellis<TA extends AnyTrellisAPI = TrellisAPI, TState extends
|
|
|
601
588
|
readonly api: TA;
|
|
602
589
|
readonly state: StateFacade<TState>;
|
|
603
590
|
readonly connection: TrellisConnection;
|
|
604
|
-
readonly natsConnection: NatsConnection;
|
|
605
591
|
readonly rpc: ActiveRpcFacade<TA>;
|
|
606
592
|
readonly event: ActiveEventFacade<TA>;
|
|
607
593
|
readonly feed: ActiveFeedFacade<TA>;
|
|
@@ -662,10 +648,6 @@ export declare class Trellis<TA extends AnyTrellisAPI = TrellisAPI, TMode extend
|
|
|
662
648
|
readonly api: TA;
|
|
663
649
|
constructor(name: string, // Must be unique for a service
|
|
664
650
|
nats: NatsConnection, auth: TrellisAuth, opts?: TrellisOpts<TA>);
|
|
665
|
-
/**
|
|
666
|
-
* Returns the underlying NATS connection.
|
|
667
|
-
*/
|
|
668
|
-
get natsConnection(): NatsConnection;
|
|
669
651
|
operationStoreHandle(): Promise<TypedKV<typeof DurableOperationRecordSchema>>;
|
|
670
652
|
loadOperationRecord(operationId: string): Promise<DurableOperationRecord | null>;
|
|
671
653
|
saveOperationRecord(runtime: RuntimeOperationRecord): Promise<void>;
|