@cadenza.io/service 2.17.80 → 2.18.1
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/dist/browser/index.js +418 -551
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +418 -551
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.d.mts +40 -3
- package/dist/index.d.ts +40 -3
- package/dist/index.js +426 -582
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +424 -582
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/browser/index.js
CHANGED
|
@@ -38,6 +38,8 @@ __export(index_exports, {
|
|
|
38
38
|
EphemeralTask: () => import_core6.EphemeralTask,
|
|
39
39
|
GraphMetadataController: () => GraphMetadataController,
|
|
40
40
|
GraphRoutine: () => import_core6.GraphRoutine,
|
|
41
|
+
RUNTIME_VALIDATION_INTENTS: () => RUNTIME_VALIDATION_INTENTS,
|
|
42
|
+
RUNTIME_VALIDATION_SIGNALS: () => RUNTIME_VALIDATION_SIGNALS,
|
|
41
43
|
RestController: () => RestController,
|
|
42
44
|
ServiceRegistry: () => ServiceRegistry,
|
|
43
45
|
SignalController: () => SignalController,
|
|
@@ -271,6 +273,13 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
271
273
|
const metadata = context.getMetadata();
|
|
272
274
|
const dynamicQueryData = ctx.queryData ?? {};
|
|
273
275
|
delete ctx.queryData;
|
|
276
|
+
const nextQueryData = {
|
|
277
|
+
...this.queryData,
|
|
278
|
+
data: {
|
|
279
|
+
...ctx.data
|
|
280
|
+
},
|
|
281
|
+
...dynamicQueryData
|
|
282
|
+
};
|
|
274
283
|
const deputyContext = {
|
|
275
284
|
...ctx,
|
|
276
285
|
__localTaskName: this.name,
|
|
@@ -287,13 +296,13 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
287
296
|
__blockRemoteExecution: metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,
|
|
288
297
|
__deputyTaskName: this.name
|
|
289
298
|
},
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
299
|
+
data: nextQueryData.data ?? ctx.data,
|
|
300
|
+
batch: nextQueryData.batch ?? ctx.batch,
|
|
301
|
+
transaction: nextQueryData.transaction ?? ctx.transaction,
|
|
302
|
+
onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
|
|
303
|
+
filter: nextQueryData.filter ?? ctx.filter,
|
|
304
|
+
fields: nextQueryData.fields ?? ctx.fields,
|
|
305
|
+
queryData: nextQueryData
|
|
297
306
|
};
|
|
298
307
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
299
308
|
}
|
|
@@ -727,6 +736,7 @@ function hasSignificantRuntimeStatusChange(previous, next) {
|
|
|
727
736
|
// src/registry/ServiceRegistry.ts
|
|
728
737
|
var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
|
|
729
738
|
var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data";
|
|
739
|
+
var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
|
|
730
740
|
var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
|
|
731
741
|
var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
|
|
732
742
|
var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
@@ -814,18 +824,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
|
|
|
814
824
|
}
|
|
815
825
|
return result;
|
|
816
826
|
}
|
|
817
|
-
function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
|
|
818
|
-
return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
|
|
819
|
-
}
|
|
820
|
-
function summarizeTransportDescriptors(transports) {
|
|
821
|
-
return transports.map((transport) => ({
|
|
822
|
-
uuid: transport.uuid,
|
|
823
|
-
serviceInstanceId: transport.serviceInstanceId,
|
|
824
|
-
role: transport.role,
|
|
825
|
-
origin: transport.origin,
|
|
826
|
-
protocols: transport.protocols
|
|
827
|
-
}));
|
|
828
|
-
}
|
|
829
827
|
function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
|
|
830
828
|
const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
|
|
831
829
|
tableName,
|
|
@@ -842,6 +840,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
842
840
|
const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
|
|
843
841
|
const delegationContext = ensureDelegationContextMetadata({
|
|
844
842
|
...ctx,
|
|
843
|
+
data: nextQueryData.data !== void 0 ? nextQueryData.data : ctx.data,
|
|
844
|
+
batch: nextQueryData.batch !== void 0 ? nextQueryData.batch : ctx.batch,
|
|
845
|
+
onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
|
|
846
|
+
transaction: nextQueryData.transaction !== void 0 ? nextQueryData.transaction : ctx.transaction,
|
|
845
847
|
queryData: nextQueryData
|
|
846
848
|
});
|
|
847
849
|
delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
|
|
@@ -965,6 +967,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
965
967
|
this.deputies = /* @__PURE__ */ new Map();
|
|
966
968
|
this.remoteSignals = /* @__PURE__ */ new Map();
|
|
967
969
|
this.remoteIntents = /* @__PURE__ */ new Map();
|
|
970
|
+
this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
|
|
968
971
|
this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
|
|
969
972
|
this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
|
|
970
973
|
this.dependeesByService = /* @__PURE__ */ new Map();
|
|
@@ -1216,21 +1219,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1216
1219
|
trackedInstance.acceptingWork = snapshot.acceptingWork;
|
|
1217
1220
|
trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
1218
1221
|
}
|
|
1219
|
-
if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
|
|
1220
|
-
console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
|
|
1221
|
-
localServiceName: this.serviceName,
|
|
1222
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1223
|
-
targetServiceName: serviceName,
|
|
1224
|
-
targetServiceInstanceId: uuid7,
|
|
1225
|
-
existingInstance: !!existing,
|
|
1226
|
-
deleted,
|
|
1227
|
-
remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
|
|
1228
|
-
hasDeputies: this.deputies.has(serviceName),
|
|
1229
|
-
hasRemoteIntents: this.remoteIntents.has(serviceName),
|
|
1230
|
-
hasRemoteSignals: this.remoteSignals.has(serviceName),
|
|
1231
|
-
transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
|
|
1232
|
-
});
|
|
1233
|
-
}
|
|
1234
1222
|
if (!serviceInstance.isBootstrapPlaceholder) {
|
|
1235
1223
|
this.reconcileBootstrapPlaceholderInstance(serviceName, uuid7, emit);
|
|
1236
1224
|
}
|
|
@@ -1243,7 +1231,8 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1243
1231
|
if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
|
|
1244
1232
|
const connected = this.ensureDependeeClientForInstance(
|
|
1245
1233
|
trackedInstance,
|
|
1246
|
-
emit
|
|
1234
|
+
emit,
|
|
1235
|
+
ctx
|
|
1247
1236
|
);
|
|
1248
1237
|
if (!connected) {
|
|
1249
1238
|
emit("meta.service_registry.routeable_transport_missing", {
|
|
@@ -1286,27 +1275,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1286
1275
|
break;
|
|
1287
1276
|
}
|
|
1288
1277
|
}
|
|
1289
|
-
if (shouldTraceIotDbRegistryPath(
|
|
1290
|
-
this.serviceName,
|
|
1291
|
-
ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
|
|
1292
|
-
)) {
|
|
1293
|
-
console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
|
|
1294
|
-
localServiceName: this.serviceName,
|
|
1295
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1296
|
-
transport: {
|
|
1297
|
-
uuid: transport.uuid,
|
|
1298
|
-
serviceInstanceId: transport.serviceInstanceId,
|
|
1299
|
-
role: transport.role,
|
|
1300
|
-
origin: transport.origin,
|
|
1301
|
-
protocols: transport.protocols,
|
|
1302
|
-
deleted: transport.deleted
|
|
1303
|
-
},
|
|
1304
|
-
ownerFound: !!ownerInstance,
|
|
1305
|
-
ownerServiceName: ownerInstance?.serviceName,
|
|
1306
|
-
ownerInstanceId: ownerInstance?.uuid,
|
|
1307
|
-
ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
|
|
1308
|
-
});
|
|
1309
|
-
}
|
|
1310
1278
|
if (!ownerInstance) {
|
|
1311
1279
|
return false;
|
|
1312
1280
|
}
|
|
@@ -1332,7 +1300,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1332
1300
|
if (!hasRemoteInterest) {
|
|
1333
1301
|
return true;
|
|
1334
1302
|
}
|
|
1335
|
-
this.ensureDependeeClientForInstance(ownerInstance, emit);
|
|
1303
|
+
this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
|
|
1336
1304
|
return true;
|
|
1337
1305
|
},
|
|
1338
1306
|
"Handles service transport updates independently from instance rows."
|
|
@@ -1362,29 +1330,12 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1362
1330
|
"Tracks remote dependency instances for runtime heartbeat monitoring."
|
|
1363
1331
|
).doOn("meta.service_registry.dependee_registered");
|
|
1364
1332
|
const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
|
|
1365
|
-
const getLocalTraceContext = () => ({
|
|
1366
|
-
localServiceName: this.serviceName,
|
|
1367
|
-
localServiceInstanceId: this.serviceInstanceId
|
|
1368
|
-
});
|
|
1369
1333
|
CadenzaService.createMetaTask("Split service instances", function* (ctx) {
|
|
1370
1334
|
const serviceInstances = normalizeServiceInstancesFromSync(ctx);
|
|
1371
1335
|
if (serviceInstances.length === 0) {
|
|
1372
1336
|
return;
|
|
1373
1337
|
}
|
|
1374
1338
|
for (const serviceInstance of serviceInstances) {
|
|
1375
|
-
const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
|
|
1376
|
-
if (shouldTraceIotDbRegistryPath(
|
|
1377
|
-
localServiceName,
|
|
1378
|
-
serviceInstance.serviceName
|
|
1379
|
-
)) {
|
|
1380
|
-
console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
|
|
1381
|
-
localServiceName,
|
|
1382
|
-
localServiceInstanceId,
|
|
1383
|
-
targetServiceName: serviceInstance.serviceName,
|
|
1384
|
-
targetServiceInstanceId: serviceInstance.uuid,
|
|
1385
|
-
transports: summarizeTransportDescriptors(serviceInstance.transports)
|
|
1386
|
-
});
|
|
1387
|
-
}
|
|
1388
1339
|
yield { serviceInstance };
|
|
1389
1340
|
}
|
|
1390
1341
|
}).doOn(
|
|
@@ -1430,6 +1381,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1430
1381
|
},
|
|
1431
1382
|
"Handles registration of remote signals"
|
|
1432
1383
|
).emits("meta.service_registry.registered_global_signals").doOn("global.meta.cadenza_db.gathered_sync_data");
|
|
1384
|
+
this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
|
|
1385
|
+
"Reconcile gathered sync signal transmissions",
|
|
1386
|
+
(ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
|
|
1387
|
+
"Keeps gathered sync transmitters aligned with known remote service instances."
|
|
1388
|
+
).doOn(
|
|
1389
|
+
CADENZA_DB_GATHERED_SYNC_SIGNAL,
|
|
1390
|
+
META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,
|
|
1391
|
+
"meta.service_registry.service_discovered"
|
|
1392
|
+
);
|
|
1433
1393
|
this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
|
|
1434
1394
|
"Handle global intent registration",
|
|
1435
1395
|
(ctx, emit) => {
|
|
@@ -1439,34 +1399,20 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1439
1399
|
if (!a.deleted && b.deleted) return 1;
|
|
1440
1400
|
return 0;
|
|
1441
1401
|
});
|
|
1442
|
-
if (ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
|
|
1443
|
-
const relevantIntentNames = sorted.filter(
|
|
1444
|
-
(map) => map.intentName === META_SERVICE_REGISTRY_FULL_SYNC_INTENT || map.intentName === "Query service_instance" || map.intentName === "Query service_instance_transport"
|
|
1445
|
-
).map((map) => ({
|
|
1446
|
-
intentName: map.intentName,
|
|
1447
|
-
serviceName: map.serviceName,
|
|
1448
|
-
taskName: map.taskName,
|
|
1449
|
-
taskVersion: map.taskVersion,
|
|
1450
|
-
deleted: !!map.deleted
|
|
1451
|
-
}));
|
|
1452
|
-
console.log("[CADENZA_SYNC_DEBUG] gathered_sync_intent_registration", {
|
|
1453
|
-
localServiceName: this.serviceName,
|
|
1454
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1455
|
-
signalName: ctx.__signalName,
|
|
1456
|
-
totalIntentMaps: sorted.length,
|
|
1457
|
-
relevantIntentNames
|
|
1458
|
-
});
|
|
1459
|
-
}
|
|
1460
1402
|
for (const map of sorted) {
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1403
|
+
try {
|
|
1404
|
+
if (map.deleted) {
|
|
1405
|
+
this.unregisterRemoteIntentDeputy(map);
|
|
1406
|
+
continue;
|
|
1407
|
+
}
|
|
1408
|
+
CadenzaService.inquiryBroker.addIntent({
|
|
1409
|
+
name: map.intentName
|
|
1410
|
+
});
|
|
1411
|
+
this.registerRemoteIntentDeputy(map);
|
|
1412
|
+
this.ensureDependeeClientsForService(map.serviceName, emit);
|
|
1413
|
+
} catch (error) {
|
|
1414
|
+
throw error;
|
|
1464
1415
|
}
|
|
1465
|
-
CadenzaService.inquiryBroker.addIntent({
|
|
1466
|
-
name: map.intentName
|
|
1467
|
-
});
|
|
1468
|
-
this.registerRemoteIntentDeputy(map);
|
|
1469
|
-
this.ensureDependeeClientsForService(map.serviceName, emit);
|
|
1470
1416
|
}
|
|
1471
1417
|
return true;
|
|
1472
1418
|
},
|
|
@@ -1618,7 +1564,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1618
1564
|
{
|
|
1619
1565
|
uuid: report.transportId,
|
|
1620
1566
|
serviceInstanceId: report.serviceInstanceId,
|
|
1621
|
-
role: this.getRoutingTransportRole(),
|
|
1567
|
+
role: report.transportRole ?? this.getRoutingTransportRole(),
|
|
1622
1568
|
origin: report.transportOrigin,
|
|
1623
1569
|
protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
|
|
1624
1570
|
securityProfile: null,
|
|
@@ -1660,21 +1606,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1660
1606
|
const serviceInstances = this.normalizeServiceInstancesFromSync(
|
|
1661
1607
|
inquiryResult
|
|
1662
1608
|
);
|
|
1663
|
-
if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
|
|
1664
|
-
const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
|
|
1665
|
-
uuid: instance.uuid,
|
|
1666
|
-
isActive: instance.isActive,
|
|
1667
|
-
isNonResponsive: instance.isNonResponsive,
|
|
1668
|
-
isBlocked: instance.isBlocked,
|
|
1669
|
-
transports: summarizeTransportDescriptors(instance.transports)
|
|
1670
|
-
}));
|
|
1671
|
-
console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
|
|
1672
|
-
localServiceName: this.serviceName,
|
|
1673
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1674
|
-
totalServiceInstances: serviceInstances.length,
|
|
1675
|
-
tracedInstances
|
|
1676
|
-
});
|
|
1677
|
-
}
|
|
1678
1609
|
return {
|
|
1679
1610
|
...ctx,
|
|
1680
1611
|
signalToTaskMaps,
|
|
@@ -1771,44 +1702,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1771
1702
|
let retries = __retries ?? 0;
|
|
1772
1703
|
let triedInstances = __triedInstances ?? [];
|
|
1773
1704
|
const preferredRole = this.getRoutingTransportRole();
|
|
1774
|
-
const allInstances = this.instances.get(__serviceName) ?? [];
|
|
1775
|
-
const candidateDiagnostics = shouldTraceIotDbRegistryPath(
|
|
1776
|
-
this.serviceName,
|
|
1777
|
-
__serviceName ?? void 0
|
|
1778
|
-
) ? allInstances.map((instance) => ({
|
|
1779
|
-
uuid: instance.uuid,
|
|
1780
|
-
isActive: instance.isActive,
|
|
1781
|
-
isNonResponsive: instance.isNonResponsive,
|
|
1782
|
-
isBlocked: instance.isBlocked,
|
|
1783
|
-
isFrontend: instance.isFrontend,
|
|
1784
|
-
transports: summarizeTransportDescriptors(instance.transports),
|
|
1785
|
-
selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
|
|
1786
|
-
instance,
|
|
1787
|
-
context,
|
|
1788
|
-
preferredRole
|
|
1789
|
-
) ? {
|
|
1790
|
-
uuid: this.selectTransportForInstance(
|
|
1791
|
-
instance,
|
|
1792
|
-
context,
|
|
1793
|
-
preferredRole
|
|
1794
|
-
).uuid,
|
|
1795
|
-
role: this.selectTransportForInstance(
|
|
1796
|
-
instance,
|
|
1797
|
-
context,
|
|
1798
|
-
preferredRole
|
|
1799
|
-
).role,
|
|
1800
|
-
origin: this.selectTransportForInstance(
|
|
1801
|
-
instance,
|
|
1802
|
-
context,
|
|
1803
|
-
preferredRole
|
|
1804
|
-
).origin,
|
|
1805
|
-
protocols: this.selectTransportForInstance(
|
|
1806
|
-
instance,
|
|
1807
|
-
context,
|
|
1808
|
-
preferredRole
|
|
1809
|
-
).protocols
|
|
1810
|
-
} : null
|
|
1811
|
-
})) : void 0;
|
|
1812
1705
|
const instances = this.instances.get(__serviceName)?.filter((instance) => {
|
|
1813
1706
|
if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
|
|
1814
1707
|
return false;
|
|
@@ -1841,20 +1734,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1841
1734
|
}
|
|
1842
1735
|
return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
|
|
1843
1736
|
});
|
|
1844
|
-
if (candidateDiagnostics) {
|
|
1845
|
-
console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
|
|
1846
|
-
localServiceName: this.serviceName,
|
|
1847
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1848
|
-
targetServiceName: __serviceName,
|
|
1849
|
-
preferredRole,
|
|
1850
|
-
useSocket: this.useSocket,
|
|
1851
|
-
targetServiceInstanceId,
|
|
1852
|
-
retries,
|
|
1853
|
-
triedInstances,
|
|
1854
|
-
candidateDiagnostics,
|
|
1855
|
-
filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
|
|
1856
|
-
});
|
|
1857
|
-
}
|
|
1858
1737
|
if (!instances || instances.length === 0 || retries > this.retryCount) {
|
|
1859
1738
|
context.errored = true;
|
|
1860
1739
|
context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
|
|
@@ -2112,6 +1991,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2112
1991
|
serviceName: report.serviceName,
|
|
2113
1992
|
serviceInstanceId: report.serviceInstanceId,
|
|
2114
1993
|
transportId: report.transportId,
|
|
1994
|
+
transportRole: report.transportRole,
|
|
2115
1995
|
transportOrigin: report.transportOrigin,
|
|
2116
1996
|
transportProtocols: report.transportProtocols,
|
|
2117
1997
|
isFrontend: report.isFrontend,
|
|
@@ -2728,6 +2608,64 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2728
2608
|
(instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
|
|
2729
2609
|
);
|
|
2730
2610
|
}
|
|
2611
|
+
shouldReconcileGatheredSyncTransmissions() {
|
|
2612
|
+
return this.serviceName === "CadenzaDB";
|
|
2613
|
+
}
|
|
2614
|
+
collectGatheredSyncTransmissionRecipients(ctx) {
|
|
2615
|
+
const recipients = /* @__PURE__ */ new Set();
|
|
2616
|
+
const addRecipient = (serviceName) => {
|
|
2617
|
+
const normalizedServiceName = String(serviceName ?? "").trim();
|
|
2618
|
+
if (!normalizedServiceName || normalizedServiceName === this.serviceName) {
|
|
2619
|
+
return;
|
|
2620
|
+
}
|
|
2621
|
+
recipients.add(normalizedServiceName);
|
|
2622
|
+
};
|
|
2623
|
+
addRecipient(ctx.serviceName ?? ctx.__serviceName);
|
|
2624
|
+
for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {
|
|
2625
|
+
addRecipient(instance.serviceName);
|
|
2626
|
+
}
|
|
2627
|
+
for (const [serviceName, instances] of this.instances.entries()) {
|
|
2628
|
+
if (!instances?.length) {
|
|
2629
|
+
continue;
|
|
2630
|
+
}
|
|
2631
|
+
addRecipient(serviceName);
|
|
2632
|
+
}
|
|
2633
|
+
return recipients;
|
|
2634
|
+
}
|
|
2635
|
+
reconcileGatheredSyncTransmissions(ctx, emit) {
|
|
2636
|
+
if (!this.shouldReconcileGatheredSyncTransmissions()) {
|
|
2637
|
+
return false;
|
|
2638
|
+
}
|
|
2639
|
+
const desiredRecipients = this.collectGatheredSyncTransmissionRecipients(ctx);
|
|
2640
|
+
const createdRecipients = [];
|
|
2641
|
+
for (const serviceName of desiredRecipients) {
|
|
2642
|
+
if (this.gatheredSyncTransmissionServices.has(serviceName)) {
|
|
2643
|
+
continue;
|
|
2644
|
+
}
|
|
2645
|
+
CadenzaService.createSignalTransmissionTask(
|
|
2646
|
+
CADENZA_DB_GATHERED_SYNC_SIGNAL,
|
|
2647
|
+
serviceName
|
|
2648
|
+
);
|
|
2649
|
+
this.gatheredSyncTransmissionServices.add(serviceName);
|
|
2650
|
+
createdRecipients.push(serviceName);
|
|
2651
|
+
}
|
|
2652
|
+
for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {
|
|
2653
|
+
if (desiredRecipients.has(serviceName)) {
|
|
2654
|
+
continue;
|
|
2655
|
+
}
|
|
2656
|
+
CadenzaService.get(
|
|
2657
|
+
`Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`
|
|
2658
|
+
)?.destroy();
|
|
2659
|
+
this.gatheredSyncTransmissionServices.delete(serviceName);
|
|
2660
|
+
}
|
|
2661
|
+
if (createdRecipients.length > 0 && ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
|
|
2662
|
+
emit("meta.cadenza_db.sync_tick", {
|
|
2663
|
+
__syncing: true,
|
|
2664
|
+
__reason: "gathered_sync_transmissions_reconciled"
|
|
2665
|
+
});
|
|
2666
|
+
}
|
|
2667
|
+
return createdRecipients.length > 0 || this.gatheredSyncTransmissionServices.size > 0;
|
|
2668
|
+
}
|
|
2731
2669
|
registerRemoteIntentDeputy(map) {
|
|
2732
2670
|
if (!this.serviceName || map.serviceName === this.serviceName) {
|
|
2733
2671
|
return;
|
|
@@ -2970,38 +2908,18 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2970
2908
|
}
|
|
2971
2909
|
return communicationTypes;
|
|
2972
2910
|
}
|
|
2973
|
-
ensureDependeeClientForInstance(instance, emit) {
|
|
2911
|
+
ensureDependeeClientForInstance(instance, emit, ctx) {
|
|
2974
2912
|
if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
|
|
2975
2913
|
return false;
|
|
2976
2914
|
}
|
|
2977
2915
|
if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
|
|
2978
2916
|
return false;
|
|
2979
2917
|
}
|
|
2980
|
-
const transport = this.
|
|
2918
|
+
const transport = this.selectTransportForInstance(
|
|
2981
2919
|
instance,
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
|
|
2986
|
-
localServiceName: this.serviceName,
|
|
2987
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
2988
|
-
targetServiceName: instance.serviceName,
|
|
2989
|
-
targetServiceInstanceId: instance.uuid,
|
|
2990
|
-
useSocket: this.useSocket,
|
|
2991
|
-
routeableRole: this.getRoutingTransportRole(),
|
|
2992
|
-
hasDeputies: this.deputies.has(instance.serviceName),
|
|
2993
|
-
hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
|
|
2994
|
-
hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
|
|
2995
|
-
clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
|
|
2996
|
-
transports: summarizeTransportDescriptors(instance.transports),
|
|
2997
|
-
selectedTransport: transport ? {
|
|
2998
|
-
uuid: transport.uuid,
|
|
2999
|
-
role: transport.role,
|
|
3000
|
-
origin: transport.origin,
|
|
3001
|
-
protocols: transport.protocols
|
|
3002
|
-
} : null
|
|
3003
|
-
});
|
|
3004
|
-
}
|
|
2920
|
+
ctx ?? {},
|
|
2921
|
+
this.getRoutingTransportRole()
|
|
2922
|
+
);
|
|
3005
2923
|
if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
|
|
3006
2924
|
return false;
|
|
3007
2925
|
}
|
|
@@ -3018,9 +2936,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3018
2936
|
this.markTransportClientCreated(instance, transport.uuid);
|
|
3019
2937
|
return true;
|
|
3020
2938
|
}
|
|
3021
|
-
ensureDependeeClientsForService(serviceName, emit) {
|
|
2939
|
+
ensureDependeeClientsForService(serviceName, emit, ctx) {
|
|
3022
2940
|
for (const instance of this.instances.get(serviceName) ?? []) {
|
|
3023
|
-
this.ensureDependeeClientForInstance(instance, emit);
|
|
2941
|
+
this.ensureDependeeClientForInstance(instance, emit, ctx);
|
|
3024
2942
|
}
|
|
3025
2943
|
}
|
|
3026
2944
|
hasTransportClientCreated(instance, transportId) {
|
|
@@ -3079,6 +2997,10 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3079
2997
|
if (!instances?.length) {
|
|
3080
2998
|
return;
|
|
3081
2999
|
}
|
|
3000
|
+
const resolvedInstance = instances.find(
|
|
3001
|
+
(instance) => instance.uuid === resolvedInstanceId
|
|
3002
|
+
);
|
|
3003
|
+
const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
|
|
3082
3004
|
const placeholders = instances.filter(
|
|
3083
3005
|
(instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
|
|
3084
3006
|
);
|
|
@@ -3090,7 +3012,33 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3090
3012
|
const requiredForReadiness = this.readinessDependeeByInstance.has(
|
|
3091
3013
|
placeholder.uuid
|
|
3092
3014
|
);
|
|
3015
|
+
const preservedTransportIds = /* @__PURE__ */ new Set();
|
|
3016
|
+
if (resolvedInstance && frontendRoutingRole) {
|
|
3017
|
+
const resolvedHasFrontendRoute = resolvedInstance.transports.some(
|
|
3018
|
+
(transport) => transport.role === frontendRoutingRole && !transport.deleted
|
|
3019
|
+
);
|
|
3020
|
+
if (!resolvedHasFrontendRoute) {
|
|
3021
|
+
const transportsToPreserve = placeholder.transports.filter(
|
|
3022
|
+
(transport) => transport.role === frontendRoutingRole && !transport.deleted
|
|
3023
|
+
);
|
|
3024
|
+
for (const transport of transportsToPreserve) {
|
|
3025
|
+
if (resolvedInstance.transports.some(
|
|
3026
|
+
(existingTransport) => existingTransport.role === transport.role && existingTransport.origin === transport.origin
|
|
3027
|
+
)) {
|
|
3028
|
+
continue;
|
|
3029
|
+
}
|
|
3030
|
+
resolvedInstance.transports.push({
|
|
3031
|
+
...transport,
|
|
3032
|
+
serviceInstanceId: resolvedInstanceId
|
|
3033
|
+
});
|
|
3034
|
+
preservedTransportIds.add(transport.uuid);
|
|
3035
|
+
}
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
3093
3038
|
for (const transport of placeholder.transports) {
|
|
3039
|
+
if (preservedTransportIds.has(transport.uuid)) {
|
|
3040
|
+
continue;
|
|
3041
|
+
}
|
|
3094
3042
|
const transportKey = buildTransportClientKey(transport);
|
|
3095
3043
|
emit(`meta.socket_shutdown_requested:${transportKey}`, {});
|
|
3096
3044
|
emit(`meta.fetch.destroy_requested:${transportKey}`, {});
|
|
@@ -3211,6 +3159,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3211
3159
|
return null;
|
|
3212
3160
|
}
|
|
3213
3161
|
const transportId = ctx.transportId ?? ctx.serviceTransportId ?? ctx.serviceTransport?.uuid ?? void 0;
|
|
3162
|
+
const transportRole = ctx.transportRole ?? ctx.transport_role ?? ctx.serviceTransport?.role ?? void 0;
|
|
3214
3163
|
const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
|
|
3215
3164
|
const transportProtocols = Array.isArray(
|
|
3216
3165
|
ctx.transportProtocols ?? ctx.serviceTransport?.protocols
|
|
@@ -3236,6 +3185,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3236
3185
|
serviceName,
|
|
3237
3186
|
serviceInstanceId,
|
|
3238
3187
|
transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
|
|
3188
|
+
transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
|
|
3239
3189
|
transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
|
|
3240
3190
|
transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
|
|
3241
3191
|
isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
|
|
@@ -3258,13 +3208,16 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3258
3208
|
const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
|
|
3259
3209
|
const existingTransport = this.getTransportById(instance, report.transportId);
|
|
3260
3210
|
if (existingTransport) {
|
|
3211
|
+
if (report.transportRole) {
|
|
3212
|
+
existingTransport.role = report.transportRole;
|
|
3213
|
+
}
|
|
3261
3214
|
existingTransport.origin = report.transportOrigin;
|
|
3262
3215
|
existingTransport.protocols = protocols;
|
|
3263
3216
|
} else {
|
|
3264
3217
|
instance.transports.push({
|
|
3265
3218
|
uuid: report.transportId,
|
|
3266
3219
|
serviceInstanceId: report.serviceInstanceId,
|
|
3267
|
-
role: this.getRoutingTransportRole(),
|
|
3220
|
+
role: report.transportRole ?? this.getRoutingTransportRole(),
|
|
3268
3221
|
origin: report.transportOrigin,
|
|
3269
3222
|
protocols,
|
|
3270
3223
|
securityProfile: null,
|
|
@@ -3310,24 +3263,18 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3310
3263
|
localInstance.isBlocked
|
|
3311
3264
|
);
|
|
3312
3265
|
const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
3266
|
+
const transport = this.getRouteableTransport(
|
|
3267
|
+
localInstance,
|
|
3268
|
+
this.useSocket ? "socket" : "rest",
|
|
3269
|
+
"internal"
|
|
3270
|
+
);
|
|
3313
3271
|
const report = {
|
|
3314
3272
|
serviceName: this.serviceName,
|
|
3315
3273
|
serviceInstanceId: this.serviceInstanceId,
|
|
3316
|
-
transportId:
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
|
|
3320
|
-
)?.uuid ?? void 0,
|
|
3321
|
-
transportOrigin: this.getRouteableTransport(
|
|
3322
|
-
localInstance,
|
|
3323
|
-
this.useSocket ? "socket" : "rest",
|
|
3324
|
-
"internal"
|
|
3325
|
-
)?.origin ?? void 0,
|
|
3326
|
-
transportProtocols: this.getRouteableTransport(
|
|
3327
|
-
localInstance,
|
|
3328
|
-
this.useSocket ? "socket" : "rest",
|
|
3329
|
-
"internal"
|
|
3330
|
-
)?.protocols ?? void 0,
|
|
3274
|
+
transportId: transport?.uuid ?? void 0,
|
|
3275
|
+
transportRole: transport?.role ?? void 0,
|
|
3276
|
+
transportOrigin: transport?.origin ?? void 0,
|
|
3277
|
+
transportProtocols: transport?.protocols ?? void 0,
|
|
3331
3278
|
isFrontend: localInstance.isFrontend,
|
|
3332
3279
|
reportedAt,
|
|
3333
3280
|
state: snapshot.state,
|
|
@@ -3691,6 +3638,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3691
3638
|
this.deputies.clear();
|
|
3692
3639
|
this.remoteSignals.clear();
|
|
3693
3640
|
this.remoteIntents.clear();
|
|
3641
|
+
this.gatheredSyncTransmissionServices.clear();
|
|
3694
3642
|
this.remoteIntentDeputiesByKey.clear();
|
|
3695
3643
|
this.remoteIntentDeputiesByTask.clear();
|
|
3696
3644
|
this.dependeesByService.clear();
|
|
@@ -4942,10 +4890,14 @@ var SocketController = class _SocketController {
|
|
|
4942
4890
|
const communicationTypes = this.normalizeCommunicationTypes(
|
|
4943
4891
|
input.communicationTypes
|
|
4944
4892
|
);
|
|
4893
|
+
const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
|
|
4945
4894
|
const serviceName = String(input.serviceName ?? "");
|
|
4946
4895
|
const serviceTransportId = String(input.serviceTransportId ?? "");
|
|
4947
4896
|
const serviceOrigin = String(input.serviceOrigin ?? "");
|
|
4948
4897
|
const parsedOrigin = parseTransportOrigin(serviceOrigin);
|
|
4898
|
+
if (!transportProtocols.includes("socket")) {
|
|
4899
|
+
return false;
|
|
4900
|
+
}
|
|
4949
4901
|
if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
|
|
4950
4902
|
CadenzaService.log(
|
|
4951
4903
|
"Socket client setup skipped due to missing transport origin",
|
|
@@ -4971,7 +4923,7 @@ var SocketController = class _SocketController {
|
|
|
4971
4923
|
serviceName,
|
|
4972
4924
|
serviceTransportId,
|
|
4973
4925
|
serviceOrigin,
|
|
4974
|
-
transportProtocols
|
|
4926
|
+
transportProtocols,
|
|
4975
4927
|
url
|
|
4976
4928
|
});
|
|
4977
4929
|
};
|
|
@@ -4992,7 +4944,7 @@ var SocketController = class _SocketController {
|
|
|
4992
4944
|
serviceName,
|
|
4993
4945
|
serviceTransportId,
|
|
4994
4946
|
serviceOrigin,
|
|
4995
|
-
transportProtocols
|
|
4947
|
+
transportProtocols,
|
|
4996
4948
|
url,
|
|
4997
4949
|
destroyed: false,
|
|
4998
4950
|
updatedAt: Date.now()
|
|
@@ -5233,19 +5185,6 @@ var SocketController = class _SocketController {
|
|
|
5233
5185
|
});
|
|
5234
5186
|
});
|
|
5235
5187
|
socket.on("signal", (signalCtx, callback) => {
|
|
5236
|
-
if (signalCtx?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
5237
|
-
console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_socket", {
|
|
5238
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
5239
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
5240
|
-
signalName: signalCtx.__signalName,
|
|
5241
|
-
intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
|
|
5242
|
-
signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
|
|
5243
|
-
serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
|
|
5244
|
-
serviceInstanceTransports: Array.isArray(
|
|
5245
|
-
signalCtx.serviceInstanceTransports
|
|
5246
|
-
) ? signalCtx.serviceInstanceTransports.length : 0
|
|
5247
|
-
});
|
|
5248
|
-
}
|
|
5249
5188
|
if (CadenzaService.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {
|
|
5250
5189
|
if (isSocketAckCallback(callback)) {
|
|
5251
5190
|
callback({
|
|
@@ -5544,21 +5483,6 @@ var SocketController = class _SocketController {
|
|
|
5544
5483
|
if (signalCtx.__signalName === void 0) {
|
|
5545
5484
|
return;
|
|
5546
5485
|
}
|
|
5547
|
-
if (signalCtx.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
5548
|
-
console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_socket", {
|
|
5549
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
5550
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
5551
|
-
targetServiceName: serviceName,
|
|
5552
|
-
targetUrl: url,
|
|
5553
|
-
signalName: signalCtx.__signalName,
|
|
5554
|
-
intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
|
|
5555
|
-
signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
|
|
5556
|
-
serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
|
|
5557
|
-
serviceInstanceTransports: Array.isArray(
|
|
5558
|
-
signalCtx.serviceInstanceTransports
|
|
5559
|
-
) ? signalCtx.serviceInstanceTransports.length : 0
|
|
5560
|
-
});
|
|
5561
|
-
}
|
|
5562
5486
|
delete signalCtx.__broadcast;
|
|
5563
5487
|
const response = await runtimeHandle.emitWhenReady?.("signal", signalCtx, 5e3) ?? {
|
|
5564
5488
|
errored: true,
|
|
@@ -5599,7 +5523,7 @@ var SocketController = class _SocketController {
|
|
|
5599
5523
|
communicationTypes,
|
|
5600
5524
|
serviceTransportId,
|
|
5601
5525
|
serviceOrigin,
|
|
5602
|
-
transportProtocols
|
|
5526
|
+
transportProtocols,
|
|
5603
5527
|
handshakeData: {
|
|
5604
5528
|
instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
5605
5529
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
@@ -5959,6 +5883,209 @@ var SignalController = class _SignalController {
|
|
|
5959
5883
|
}
|
|
5960
5884
|
};
|
|
5961
5885
|
|
|
5886
|
+
// src/runtime/RuntimeValidationController.ts
|
|
5887
|
+
var RUNTIME_VALIDATION_INTENTS = {
|
|
5888
|
+
getPolicy: "meta-runtime-validation-policy-get",
|
|
5889
|
+
setPolicy: "meta-runtime-validation-policy-set",
|
|
5890
|
+
replacePolicy: "meta-runtime-validation-policy-replace",
|
|
5891
|
+
clearPolicy: "meta-runtime-validation-policy-clear",
|
|
5892
|
+
listScopes: "meta-runtime-validation-scope-list",
|
|
5893
|
+
upsertScope: "meta-runtime-validation-scope-upsert",
|
|
5894
|
+
removeScope: "meta-runtime-validation-scope-remove",
|
|
5895
|
+
clearScopes: "meta-runtime-validation-scope-clear"
|
|
5896
|
+
};
|
|
5897
|
+
var RUNTIME_VALIDATION_SIGNALS = {
|
|
5898
|
+
setPolicyRequested: "meta.runtime_validation.policy_set_requested",
|
|
5899
|
+
replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
|
|
5900
|
+
clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
|
|
5901
|
+
upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
|
|
5902
|
+
removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
|
|
5903
|
+
clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
|
|
5904
|
+
policyUpdated: "meta.runtime_validation.policy_updated",
|
|
5905
|
+
policyCleared: "meta.runtime_validation.policy_cleared",
|
|
5906
|
+
scopeUpserted: "meta.runtime_validation.scope_upserted",
|
|
5907
|
+
scopeRemoved: "meta.runtime_validation.scope_removed",
|
|
5908
|
+
scopesCleared: "meta.runtime_validation.scopes_cleared"
|
|
5909
|
+
};
|
|
5910
|
+
function normalizePolicyContext(ctx) {
|
|
5911
|
+
const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
|
|
5912
|
+
const policy = {};
|
|
5913
|
+
for (const key of [
|
|
5914
|
+
"metaInput",
|
|
5915
|
+
"metaOutput",
|
|
5916
|
+
"businessInput",
|
|
5917
|
+
"businessOutput",
|
|
5918
|
+
"warnOnMissingMetaInputSchema",
|
|
5919
|
+
"warnOnMissingMetaOutputSchema",
|
|
5920
|
+
"warnOnMissingBusinessInputSchema",
|
|
5921
|
+
"warnOnMissingBusinessOutputSchema"
|
|
5922
|
+
]) {
|
|
5923
|
+
if (source[key] !== void 0) {
|
|
5924
|
+
policy[key] = source[key];
|
|
5925
|
+
}
|
|
5926
|
+
}
|
|
5927
|
+
return policy;
|
|
5928
|
+
}
|
|
5929
|
+
function normalizeScopeContext(ctx) {
|
|
5930
|
+
const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
|
|
5931
|
+
return {
|
|
5932
|
+
id: source.id,
|
|
5933
|
+
active: source.active,
|
|
5934
|
+
startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
|
|
5935
|
+
startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
|
|
5936
|
+
policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
|
|
5937
|
+
};
|
|
5938
|
+
}
|
|
5939
|
+
var RuntimeValidationController = class _RuntimeValidationController {
|
|
5940
|
+
static get instance() {
|
|
5941
|
+
if (!this._instance) {
|
|
5942
|
+
this._instance = new _RuntimeValidationController();
|
|
5943
|
+
}
|
|
5944
|
+
return this._instance;
|
|
5945
|
+
}
|
|
5946
|
+
constructor() {
|
|
5947
|
+
CadenzaService.defineIntent({
|
|
5948
|
+
name: RUNTIME_VALIDATION_INTENTS.getPolicy,
|
|
5949
|
+
description: "Get the active runtime validation policy.",
|
|
5950
|
+
input: { type: "object" },
|
|
5951
|
+
output: { type: "object" }
|
|
5952
|
+
});
|
|
5953
|
+
CadenzaService.defineIntent({
|
|
5954
|
+
name: RUNTIME_VALIDATION_INTENTS.setPolicy,
|
|
5955
|
+
description: "Merge fields into the active runtime validation policy.",
|
|
5956
|
+
input: { type: "object" },
|
|
5957
|
+
output: { type: "object" }
|
|
5958
|
+
});
|
|
5959
|
+
CadenzaService.defineIntent({
|
|
5960
|
+
name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
|
|
5961
|
+
description: "Replace the active runtime validation policy.",
|
|
5962
|
+
input: { type: "object" },
|
|
5963
|
+
output: { type: "object" }
|
|
5964
|
+
});
|
|
5965
|
+
CadenzaService.defineIntent({
|
|
5966
|
+
name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
|
|
5967
|
+
description: "Clear the active runtime validation policy.",
|
|
5968
|
+
input: { type: "object" },
|
|
5969
|
+
output: { type: "object" }
|
|
5970
|
+
});
|
|
5971
|
+
CadenzaService.defineIntent({
|
|
5972
|
+
name: RUNTIME_VALIDATION_INTENTS.listScopes,
|
|
5973
|
+
description: "List active runtime validation scopes.",
|
|
5974
|
+
input: { type: "object" },
|
|
5975
|
+
output: { type: "object" }
|
|
5976
|
+
});
|
|
5977
|
+
CadenzaService.defineIntent({
|
|
5978
|
+
name: RUNTIME_VALIDATION_INTENTS.upsertScope,
|
|
5979
|
+
description: "Create or update a runtime validation scope for targeted subflow validation.",
|
|
5980
|
+
input: { type: "object" },
|
|
5981
|
+
output: { type: "object" }
|
|
5982
|
+
});
|
|
5983
|
+
CadenzaService.defineIntent({
|
|
5984
|
+
name: RUNTIME_VALIDATION_INTENTS.removeScope,
|
|
5985
|
+
description: "Remove a runtime validation scope by id.",
|
|
5986
|
+
input: { type: "object" },
|
|
5987
|
+
output: { type: "object" }
|
|
5988
|
+
});
|
|
5989
|
+
CadenzaService.defineIntent({
|
|
5990
|
+
name: RUNTIME_VALIDATION_INTENTS.clearScopes,
|
|
5991
|
+
description: "Clear all runtime validation scopes.",
|
|
5992
|
+
input: { type: "object" },
|
|
5993
|
+
output: { type: "object" }
|
|
5994
|
+
});
|
|
5995
|
+
CadenzaService.createMetaTask("Get runtime validation policy", () => {
|
|
5996
|
+
return {
|
|
5997
|
+
policy: CadenzaService.getRuntimeValidationPolicy()
|
|
5998
|
+
};
|
|
5999
|
+
}).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
|
|
6000
|
+
CadenzaService.createMetaTask(
|
|
6001
|
+
"Set runtime validation policy",
|
|
6002
|
+
(ctx, emit) => {
|
|
6003
|
+
const policy = normalizePolicyContext(ctx);
|
|
6004
|
+
const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
|
|
6005
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
|
|
6006
|
+
policy: nextPolicy
|
|
6007
|
+
});
|
|
6008
|
+
return {
|
|
6009
|
+
policy: nextPolicy
|
|
6010
|
+
};
|
|
6011
|
+
},
|
|
6012
|
+
"Merges runtime validation policy fields at runtime."
|
|
6013
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
|
|
6014
|
+
CadenzaService.createMetaTask(
|
|
6015
|
+
"Replace runtime validation policy",
|
|
6016
|
+
(ctx, emit) => {
|
|
6017
|
+
const policy = normalizePolicyContext(ctx);
|
|
6018
|
+
const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
|
|
6019
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
|
|
6020
|
+
policy: nextPolicy
|
|
6021
|
+
});
|
|
6022
|
+
return {
|
|
6023
|
+
policy: nextPolicy
|
|
6024
|
+
};
|
|
6025
|
+
},
|
|
6026
|
+
"Replaces runtime validation policy fields at runtime."
|
|
6027
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
|
|
6028
|
+
CadenzaService.createMetaTask(
|
|
6029
|
+
"Clear runtime validation policy",
|
|
6030
|
+
(_ctx, emit) => {
|
|
6031
|
+
CadenzaService.clearRuntimeValidationPolicy();
|
|
6032
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
|
|
6033
|
+
return {
|
|
6034
|
+
policy: CadenzaService.getRuntimeValidationPolicy()
|
|
6035
|
+
};
|
|
6036
|
+
},
|
|
6037
|
+
"Clears the runtime validation policy."
|
|
6038
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
|
|
6039
|
+
CadenzaService.createMetaTask("List runtime validation scopes", () => {
|
|
6040
|
+
return {
|
|
6041
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6042
|
+
};
|
|
6043
|
+
}).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
|
|
6044
|
+
CadenzaService.createMetaTask(
|
|
6045
|
+
"Upsert runtime validation scope",
|
|
6046
|
+
(ctx, emit) => {
|
|
6047
|
+
const scope = normalizeScopeContext(ctx);
|
|
6048
|
+
const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
|
|
6049
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
|
|
6050
|
+
scope: nextScope
|
|
6051
|
+
});
|
|
6052
|
+
return {
|
|
6053
|
+
scope: nextScope
|
|
6054
|
+
};
|
|
6055
|
+
},
|
|
6056
|
+
"Upserts a runtime validation scope for targeted debugging."
|
|
6057
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
|
|
6058
|
+
CadenzaService.createMetaTask(
|
|
6059
|
+
"Remove runtime validation scope",
|
|
6060
|
+
(ctx, emit) => {
|
|
6061
|
+
if (!ctx.id) {
|
|
6062
|
+
throw new Error("Runtime validation scope id is required");
|
|
6063
|
+
}
|
|
6064
|
+
CadenzaService.removeRuntimeValidationScope(ctx.id);
|
|
6065
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
|
|
6066
|
+
id: ctx.id
|
|
6067
|
+
});
|
|
6068
|
+
return {
|
|
6069
|
+
id: ctx.id,
|
|
6070
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6071
|
+
};
|
|
6072
|
+
},
|
|
6073
|
+
"Removes a runtime validation scope."
|
|
6074
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
|
|
6075
|
+
CadenzaService.createMetaTask(
|
|
6076
|
+
"Clear runtime validation scopes",
|
|
6077
|
+
(_ctx, emit) => {
|
|
6078
|
+
CadenzaService.clearRuntimeValidationScopes();
|
|
6079
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
|
|
6080
|
+
return {
|
|
6081
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6082
|
+
};
|
|
6083
|
+
},
|
|
6084
|
+
"Clears all runtime validation scopes."
|
|
6085
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
|
|
6086
|
+
}
|
|
6087
|
+
};
|
|
6088
|
+
|
|
5962
6089
|
// src/graph/controllers/registerActorSessionPersistence.ts
|
|
5963
6090
|
var import_core3 = require("@cadenza.io/core");
|
|
5964
6091
|
function registerActorSessionPersistenceTasks() {
|
|
@@ -6573,7 +6700,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
|
|
|
6573
6700
|
}
|
|
6574
6701
|
function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
|
|
6575
6702
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
6576
|
-
const debugTable = shouldDebugSyncTable(tableName);
|
|
6577
6703
|
if (!localInsertTask && !isCadenzaDBReady) {
|
|
6578
6704
|
return void 0;
|
|
6579
6705
|
}
|
|
@@ -6586,16 +6712,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6586
6712
|
register: false,
|
|
6587
6713
|
isHidden: true
|
|
6588
6714
|
});
|
|
6589
|
-
if (debugTable) {
|
|
6590
|
-
logSyncDebug("insert_task_resolved", {
|
|
6591
|
-
tableName,
|
|
6592
|
-
localInsertTaskName: localInsertTask?.name ?? null,
|
|
6593
|
-
remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
|
|
6594
|
-
targetTaskName: targetTask.name,
|
|
6595
|
-
queryData,
|
|
6596
|
-
options
|
|
6597
|
-
});
|
|
6598
|
-
}
|
|
6599
6715
|
const prepareExecutionTask = CadenzaService.createMetaTask(
|
|
6600
6716
|
`Prepare graph sync insert for ${tableName}`,
|
|
6601
6717
|
(ctx) => {
|
|
@@ -6606,12 +6722,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6606
6722
|
if ((tableName === "signal_registry" || tableName === "directional_task_graph_map") && originalQueryData.data && typeof originalQueryData.data === "object" && !Array.isArray(originalQueryData.data) && Object.keys(originalQueryData.data).length === 0) {
|
|
6607
6723
|
console.warn(
|
|
6608
6724
|
"[CADENZA_SYNC_EMPTY_INSERT]",
|
|
6609
|
-
|
|
6725
|
+
{
|
|
6610
6726
|
tableName,
|
|
6611
6727
|
queryData: originalQueryData,
|
|
6612
6728
|
ctx,
|
|
6613
6729
|
joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
|
|
6614
|
-
}
|
|
6730
|
+
}
|
|
6615
6731
|
);
|
|
6616
6732
|
}
|
|
6617
6733
|
return buildSyncExecutionEnvelope(
|
|
@@ -6625,37 +6741,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6625
6741
|
isHidden: true
|
|
6626
6742
|
}
|
|
6627
6743
|
);
|
|
6628
|
-
if (debugTable) {
|
|
6629
|
-
prepareExecutionTask.then(
|
|
6630
|
-
CadenzaService.createMetaTask(
|
|
6631
|
-
`Log prepared graph sync insert execution for ${tableName}`,
|
|
6632
|
-
(ctx) => {
|
|
6633
|
-
if (tableName === "task") {
|
|
6634
|
-
if (!shouldDebugTaskSyncPayload(ctx)) {
|
|
6635
|
-
return ctx;
|
|
6636
|
-
}
|
|
6637
|
-
logSyncDebug("insert_prepare", {
|
|
6638
|
-
tableName,
|
|
6639
|
-
targetTaskName: targetTask.name,
|
|
6640
|
-
payload: buildTaskSyncDebugPayload(ctx)
|
|
6641
|
-
});
|
|
6642
|
-
return ctx;
|
|
6643
|
-
}
|
|
6644
|
-
logSyncDebug("insert_prepare", {
|
|
6645
|
-
tableName,
|
|
6646
|
-
targetTaskName: targetTask.name,
|
|
6647
|
-
ctx
|
|
6648
|
-
});
|
|
6649
|
-
return ctx;
|
|
6650
|
-
},
|
|
6651
|
-
`Logs prepared ${tableName} sync insert payloads.`,
|
|
6652
|
-
{
|
|
6653
|
-
register: false,
|
|
6654
|
-
isHidden: true
|
|
6655
|
-
}
|
|
6656
|
-
)
|
|
6657
|
-
);
|
|
6658
|
-
}
|
|
6659
6744
|
const finalizeExecutionTask = CadenzaService.createMetaTask(
|
|
6660
6745
|
`Finalize graph sync insert for ${tableName}`,
|
|
6661
6746
|
(ctx) => {
|
|
@@ -6666,25 +6751,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6666
6751
|
...ctx,
|
|
6667
6752
|
queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
|
|
6668
6753
|
};
|
|
6669
|
-
if (debugTable) {
|
|
6670
|
-
if (tableName === "task") {
|
|
6671
|
-
if (shouldDebugTaskSyncPayload(normalizedContext)) {
|
|
6672
|
-
logSyncDebug("insert_finalize", {
|
|
6673
|
-
tableName,
|
|
6674
|
-
targetTaskName: targetTask.name,
|
|
6675
|
-
success: didSyncInsertSucceed(normalizedContext),
|
|
6676
|
-
payload: buildTaskSyncDebugPayload(normalizedContext)
|
|
6677
|
-
});
|
|
6678
|
-
}
|
|
6679
|
-
} else {
|
|
6680
|
-
logSyncDebug("insert_finalize", {
|
|
6681
|
-
tableName,
|
|
6682
|
-
targetTaskName: targetTask.name,
|
|
6683
|
-
success: didSyncInsertSucceed(normalizedContext),
|
|
6684
|
-
ctx: normalizedContext
|
|
6685
|
-
});
|
|
6686
|
-
}
|
|
6687
|
-
}
|
|
6688
6754
|
return normalizedContext;
|
|
6689
6755
|
},
|
|
6690
6756
|
`Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
|
|
@@ -6719,139 +6785,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
|
|
|
6719
6785
|
intent_registry: "intentRegistrys"
|
|
6720
6786
|
};
|
|
6721
6787
|
var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
|
|
6722
|
-
var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
|
|
6723
|
-
var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
|
|
6724
|
-
var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
|
|
6725
|
-
var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
6726
|
-
"Query service_instance",
|
|
6727
|
-
"Query service_instance_transport",
|
|
6728
|
-
"Query intent_to_task_map",
|
|
6729
|
-
"Query signal_to_task_map",
|
|
6730
|
-
"Prepare for signal sync",
|
|
6731
|
-
"Compile sync data and broadcast",
|
|
6732
|
-
"Forward service instance sync",
|
|
6733
|
-
"Forward service transport sync",
|
|
6734
|
-
"Forward intent to task map sync",
|
|
6735
|
-
"Forward signal to task map sync",
|
|
6736
|
-
"Normalize telemetry ingest payload",
|
|
6737
|
-
"Get telemetry session state",
|
|
6738
|
-
"Normalize anomaly detect input",
|
|
6739
|
-
"Read anomaly runtime session",
|
|
6740
|
-
"Normalize prediction compute input",
|
|
6741
|
-
"Normalize telemetry insert queryData"
|
|
6742
|
-
]);
|
|
6743
|
-
var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
|
|
6744
|
-
var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
|
|
6745
|
-
"meta-service-registry-full-sync",
|
|
6746
|
-
"runner-traffic-runtime-get",
|
|
6747
|
-
"iot-telemetry-ingest",
|
|
6748
|
-
"iot-telemetry-session-get",
|
|
6749
|
-
"iot-anomaly-detect",
|
|
6750
|
-
"iot-anomaly-runtime-get",
|
|
6751
|
-
"iot-prediction-compute",
|
|
6752
|
-
"iot-db-telemetry-insert",
|
|
6753
|
-
"query-pg-cadenza-db-postgres-actor-service_instance",
|
|
6754
|
-
"query-pg-cadenza-db-postgres-actor-service_instance_transport",
|
|
6755
|
-
"query-pg-cadenza-db-postgres-actor-intent_to_task_map",
|
|
6756
|
-
"query-pg-cadenza-db-postgres-actor-signal_to_task_map"
|
|
6757
|
-
]);
|
|
6758
|
-
function shouldDebugSyncTable(tableName) {
|
|
6759
|
-
return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
|
|
6760
|
-
}
|
|
6761
|
-
function shouldDebugSyncTaskName(taskName) {
|
|
6762
|
-
return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
|
|
6763
|
-
}
|
|
6764
|
-
function shouldDebugSyncRoutineName(routineName) {
|
|
6765
|
-
return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
|
|
6766
|
-
}
|
|
6767
|
-
function shouldDebugSyncIntentName(intentName) {
|
|
6768
|
-
return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
|
|
6769
|
-
}
|
|
6770
|
-
function summarizeSyncDebugValue(value, depth = 0) {
|
|
6771
|
-
if (value === null || value === void 0) {
|
|
6772
|
-
return value;
|
|
6773
|
-
}
|
|
6774
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
6775
|
-
return value;
|
|
6776
|
-
}
|
|
6777
|
-
if (value instanceof Set) {
|
|
6778
|
-
return {
|
|
6779
|
-
__type: "Set",
|
|
6780
|
-
size: value.size,
|
|
6781
|
-
values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
|
|
6782
|
-
};
|
|
6783
|
-
}
|
|
6784
|
-
if (value instanceof Map) {
|
|
6785
|
-
return {
|
|
6786
|
-
__type: "Map",
|
|
6787
|
-
size: value.size
|
|
6788
|
-
};
|
|
6789
|
-
}
|
|
6790
|
-
if (Array.isArray(value)) {
|
|
6791
|
-
return {
|
|
6792
|
-
__type: "Array",
|
|
6793
|
-
length: value.length,
|
|
6794
|
-
items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
|
|
6795
|
-
};
|
|
6796
|
-
}
|
|
6797
|
-
if (typeof value === "object") {
|
|
6798
|
-
if (depth >= 2) {
|
|
6799
|
-
return "[object]";
|
|
6800
|
-
}
|
|
6801
|
-
const output = {};
|
|
6802
|
-
const entries = Object.entries(value).filter(
|
|
6803
|
-
([key]) => ![
|
|
6804
|
-
"functionString",
|
|
6805
|
-
"tagIdGetter",
|
|
6806
|
-
"__functionString",
|
|
6807
|
-
"__getTagCallback",
|
|
6808
|
-
"joinedContexts",
|
|
6809
|
-
"task",
|
|
6810
|
-
"taskInstance",
|
|
6811
|
-
"tasks"
|
|
6812
|
-
].includes(key)
|
|
6813
|
-
).slice(0, 12);
|
|
6814
|
-
for (const [key, nestedValue] of entries) {
|
|
6815
|
-
output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
|
|
6816
|
-
}
|
|
6817
|
-
return output;
|
|
6818
|
-
}
|
|
6819
|
-
return String(value);
|
|
6820
|
-
}
|
|
6821
|
-
function logSyncDebug(event, payload) {
|
|
6822
|
-
console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
|
|
6823
|
-
}
|
|
6824
|
-
function buildTaskSyncDebugPayload(ctx) {
|
|
6825
|
-
const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
|
|
6826
|
-
const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
|
|
6827
|
-
const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
|
|
6828
|
-
const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
|
|
6829
|
-
const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
|
|
6830
|
-
const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
|
|
6831
|
-
const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
|
|
6832
|
-
const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
|
|
6833
|
-
return {
|
|
6834
|
-
taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
|
|
6835
|
-
serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
|
|
6836
|
-
functionStringLength: functionString?.length ?? null,
|
|
6837
|
-
tagIdGetterLength: tagIdGetter?.length ?? null,
|
|
6838
|
-
isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
|
|
6839
|
-
isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
|
|
6840
|
-
isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
|
|
6841
|
-
signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
|
|
6842
|
-
signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
|
|
6843
|
-
intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
|
|
6844
|
-
intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
|
|
6845
|
-
rowCount: ctx.rowCount ?? null,
|
|
6846
|
-
errored: ctx.errored ?? false,
|
|
6847
|
-
success: ctx.__success ?? null,
|
|
6848
|
-
error: ctx.__error ?? null
|
|
6849
|
-
};
|
|
6850
|
-
}
|
|
6851
|
-
function shouldDebugTaskSyncPayload(ctx) {
|
|
6852
|
-
const payload = buildTaskSyncDebugPayload(ctx);
|
|
6853
|
-
return shouldDebugSyncTaskName(payload.taskName);
|
|
6854
|
-
}
|
|
6855
6788
|
function resolveSyncQueryRows(ctx, tableName) {
|
|
6856
6789
|
const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
|
|
6857
6790
|
const rows = ctx?.[resultKey];
|
|
@@ -7298,16 +7231,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7298
7231
|
if (!nextTask?.registered) {
|
|
7299
7232
|
continue;
|
|
7300
7233
|
}
|
|
7301
|
-
if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
|
|
7302
|
-
logSyncDebug("task_to_routine_split", {
|
|
7303
|
-
routineName: routine.name,
|
|
7304
|
-
routineVersion: routine.version,
|
|
7305
|
-
taskName: nextTask.name,
|
|
7306
|
-
taskVersion: nextTask.version,
|
|
7307
|
-
serviceName: serviceName2,
|
|
7308
|
-
registered: nextTask.registered
|
|
7309
|
-
});
|
|
7310
|
-
}
|
|
7311
7234
|
yield {
|
|
7312
7235
|
__syncing: ctx.__syncing,
|
|
7313
7236
|
data: {
|
|
@@ -7453,20 +7376,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7453
7376
|
if (task.registered) continue;
|
|
7454
7377
|
const { __functionString, __getTagCallback } = task.export();
|
|
7455
7378
|
this.tasksSynced = false;
|
|
7456
|
-
if (shouldDebugSyncTaskName(task.name)) {
|
|
7457
|
-
logSyncDebug("task_registration_split", {
|
|
7458
|
-
taskName: task.name,
|
|
7459
|
-
taskVersion: task.version,
|
|
7460
|
-
serviceName: serviceName2,
|
|
7461
|
-
register: task.register,
|
|
7462
|
-
registered: task.registered,
|
|
7463
|
-
hidden: task.hidden,
|
|
7464
|
-
exportFunctionLength: __functionString?.length ?? null,
|
|
7465
|
-
exportTagGetterLength: __getTagCallback?.length ?? null,
|
|
7466
|
-
observedSignals: Array.from(task.observedSignals),
|
|
7467
|
-
handledIntents: Array.from(task.handlesIntents)
|
|
7468
|
-
});
|
|
7469
|
-
}
|
|
7470
7379
|
yield {
|
|
7471
7380
|
__syncing: ctx.__syncing,
|
|
7472
7381
|
data: {
|
|
@@ -7521,13 +7430,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7521
7430
|
const registerTaskTask = CadenzaService.createMetaTask(
|
|
7522
7431
|
"Record registration",
|
|
7523
7432
|
(ctx, emit) => {
|
|
7524
|
-
if (shouldDebugSyncTaskName(ctx.__taskName)) {
|
|
7525
|
-
logSyncDebug("task_registration_result", {
|
|
7526
|
-
taskName: ctx.__taskName,
|
|
7527
|
-
success: didSyncInsertSucceed(ctx),
|
|
7528
|
-
ctx
|
|
7529
|
-
});
|
|
7530
|
-
}
|
|
7531
7433
|
if (!didSyncInsertSucceed(ctx)) {
|
|
7532
7434
|
return;
|
|
7533
7435
|
}
|
|
@@ -7553,16 +7455,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7553
7455
|
"Prepare created task for immediate sync",
|
|
7554
7456
|
(ctx) => {
|
|
7555
7457
|
const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
|
|
7556
|
-
if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
|
|
7557
|
-
logSyncDebug("task_created_for_immediate_sync", {
|
|
7558
|
-
incomingTaskName: ctx?.data?.name ?? null,
|
|
7559
|
-
resolvedTaskName: task?.name ?? null,
|
|
7560
|
-
exists: Boolean(task),
|
|
7561
|
-
hidden: task?.hidden ?? null,
|
|
7562
|
-
register: task?.register ?? null,
|
|
7563
|
-
registered: task?.registered ?? null
|
|
7564
|
-
});
|
|
7565
|
-
}
|
|
7566
7458
|
if (!task || task.hidden || !task.register || task.registered) {
|
|
7567
7459
|
return false;
|
|
7568
7460
|
}
|
|
@@ -7749,17 +7641,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7749
7641
|
if (!isGlobal) {
|
|
7750
7642
|
continue;
|
|
7751
7643
|
}
|
|
7752
|
-
if (shouldDebugSyncTaskName(task.name)) {
|
|
7753
|
-
logSyncDebug("signal_to_task_map_split", {
|
|
7754
|
-
taskName: task.name,
|
|
7755
|
-
signalName: _signal,
|
|
7756
|
-
rawSignal: signal,
|
|
7757
|
-
serviceName: serviceName2,
|
|
7758
|
-
observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
|
|
7759
|
-
_signal
|
|
7760
|
-
)?.registered
|
|
7761
|
-
});
|
|
7762
|
-
}
|
|
7763
7644
|
yield {
|
|
7764
7645
|
__syncing: ctx.__syncing,
|
|
7765
7646
|
data: {
|
|
@@ -7870,21 +7751,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7870
7751
|
}
|
|
7871
7752
|
task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
|
|
7872
7753
|
task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
|
|
7873
|
-
const shouldDebugTask = shouldDebugSyncTaskName(task.name);
|
|
7874
|
-
if (shouldDebugTask) {
|
|
7875
|
-
logSyncDebug("intent_map_task_state", {
|
|
7876
|
-
taskName: task.name,
|
|
7877
|
-
taskVersion: task.version,
|
|
7878
|
-
serviceName: serviceName2,
|
|
7879
|
-
registered: task.registered,
|
|
7880
|
-
register: task.register,
|
|
7881
|
-
hidden: task.hidden,
|
|
7882
|
-
handledIntents: Array.from(task.handlesIntents),
|
|
7883
|
-
registeredIntents: Array.from(task.__registeredIntents),
|
|
7884
|
-
tasksSynced: this.tasksSynced,
|
|
7885
|
-
intentsSynced: this.intentsSynced
|
|
7886
|
-
});
|
|
7887
|
-
}
|
|
7888
7754
|
let emittedCount = 0;
|
|
7889
7755
|
for (const intent of task.handlesIntents) {
|
|
7890
7756
|
if (task.__registeredIntents.has(intent)) continue;
|
|
@@ -7910,15 +7776,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7910
7776
|
if (!intentDefinition) {
|
|
7911
7777
|
continue;
|
|
7912
7778
|
}
|
|
7913
|
-
if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
|
|
7914
|
-
logSyncDebug("intent_to_task_map_split", {
|
|
7915
|
-
taskName: task.name,
|
|
7916
|
-
taskVersion: task.version,
|
|
7917
|
-
intentName: intent,
|
|
7918
|
-
serviceName: serviceName2,
|
|
7919
|
-
intentDefinition
|
|
7920
|
-
});
|
|
7921
|
-
}
|
|
7922
7779
|
yield {
|
|
7923
7780
|
__syncing: ctx.__syncing,
|
|
7924
7781
|
data: {
|
|
@@ -7939,15 +7796,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7939
7796
|
};
|
|
7940
7797
|
emittedCount += 1;
|
|
7941
7798
|
}
|
|
7942
|
-
if (shouldDebugTask && emittedCount === 0) {
|
|
7943
|
-
logSyncDebug("intent_map_task_noop", {
|
|
7944
|
-
taskName: task.name,
|
|
7945
|
-
taskVersion: task.version,
|
|
7946
|
-
serviceName: serviceName2,
|
|
7947
|
-
handledIntents: Array.from(task.handlesIntents),
|
|
7948
|
-
registeredIntents: Array.from(task.__registeredIntents)
|
|
7949
|
-
});
|
|
7950
|
-
}
|
|
7951
7799
|
return emittedCount > 0;
|
|
7952
7800
|
}.bind(this)
|
|
7953
7801
|
);
|
|
@@ -7957,13 +7805,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7957
7805
|
if (!ctx.__intentDefinition || !ctx.__intentMapData) {
|
|
7958
7806
|
return false;
|
|
7959
7807
|
}
|
|
7960
|
-
if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
|
|
7961
|
-
logSyncDebug("intent_definition_prepare", {
|
|
7962
|
-
taskName: ctx.__taskName,
|
|
7963
|
-
intentName: ctx.__intent,
|
|
7964
|
-
intentDefinition: ctx.__intentDefinition
|
|
7965
|
-
});
|
|
7966
|
-
}
|
|
7967
7808
|
return {
|
|
7968
7809
|
...ctx,
|
|
7969
7810
|
data: ctx.__intentDefinition
|
|
@@ -7976,13 +7817,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7976
7817
|
if (!ctx.__intentMapData) {
|
|
7977
7818
|
return false;
|
|
7978
7819
|
}
|
|
7979
|
-
if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
|
|
7980
|
-
logSyncDebug("intent_map_payload_restore", {
|
|
7981
|
-
taskName: ctx.__taskName,
|
|
7982
|
-
intentName: ctx.__intent,
|
|
7983
|
-
intentMapData: ctx.__intentMapData
|
|
7984
|
-
});
|
|
7985
|
-
}
|
|
7986
7820
|
return {
|
|
7987
7821
|
...ctx,
|
|
7988
7822
|
data: ctx.__intentMapData
|
|
@@ -8804,6 +8638,13 @@ var CadenzaService = class {
|
|
|
8804
8638
|
if (this.isBootstrapped) return;
|
|
8805
8639
|
this.isBootstrapped = true;
|
|
8806
8640
|
import_core5.default.bootstrap();
|
|
8641
|
+
import_core5.default.setRuntimeInquiryDelegate(
|
|
8642
|
+
(inquiry, context, options) => this.inquire(
|
|
8643
|
+
inquiry,
|
|
8644
|
+
context,
|
|
8645
|
+
options ?? {}
|
|
8646
|
+
)
|
|
8647
|
+
);
|
|
8807
8648
|
this.signalBroker = import_core5.default.signalBroker;
|
|
8808
8649
|
this.inquiryBroker = import_core5.default.inquiryBroker;
|
|
8809
8650
|
this.runner = import_core5.default.runner;
|
|
@@ -8812,7 +8653,7 @@ var CadenzaService = class {
|
|
|
8812
8653
|
this.serviceRegistry = ServiceRegistry.instance;
|
|
8813
8654
|
RestController.instance;
|
|
8814
8655
|
SocketController.instance;
|
|
8815
|
-
|
|
8656
|
+
RuntimeValidationController.instance;
|
|
8816
8657
|
}
|
|
8817
8658
|
static ensureTransportControllers(isFrontend) {
|
|
8818
8659
|
if (!isFrontend) {
|
|
@@ -8951,6 +8792,38 @@ var CadenzaService = class {
|
|
|
8951
8792
|
this.inquiryBroker?.addIntent(intent);
|
|
8952
8793
|
return intent;
|
|
8953
8794
|
}
|
|
8795
|
+
static getRuntimeValidationPolicy() {
|
|
8796
|
+
this.bootstrap();
|
|
8797
|
+
return import_core5.default.getRuntimeValidationPolicy();
|
|
8798
|
+
}
|
|
8799
|
+
static setRuntimeValidationPolicy(policy = {}) {
|
|
8800
|
+
this.bootstrap();
|
|
8801
|
+
return import_core5.default.setRuntimeValidationPolicy(policy);
|
|
8802
|
+
}
|
|
8803
|
+
static replaceRuntimeValidationPolicy(policy = {}) {
|
|
8804
|
+
this.bootstrap();
|
|
8805
|
+
return import_core5.default.replaceRuntimeValidationPolicy(policy);
|
|
8806
|
+
}
|
|
8807
|
+
static clearRuntimeValidationPolicy() {
|
|
8808
|
+
this.bootstrap();
|
|
8809
|
+
import_core5.default.clearRuntimeValidationPolicy();
|
|
8810
|
+
}
|
|
8811
|
+
static getRuntimeValidationScopes() {
|
|
8812
|
+
this.bootstrap();
|
|
8813
|
+
return import_core5.default.getRuntimeValidationScopes();
|
|
8814
|
+
}
|
|
8815
|
+
static upsertRuntimeValidationScope(scope) {
|
|
8816
|
+
this.bootstrap();
|
|
8817
|
+
return import_core5.default.upsertRuntimeValidationScope(scope);
|
|
8818
|
+
}
|
|
8819
|
+
static removeRuntimeValidationScope(id) {
|
|
8820
|
+
this.bootstrap();
|
|
8821
|
+
import_core5.default.removeRuntimeValidationScope(id);
|
|
8822
|
+
}
|
|
8823
|
+
static clearRuntimeValidationScopes() {
|
|
8824
|
+
this.bootstrap();
|
|
8825
|
+
import_core5.default.clearRuntimeValidationScopes();
|
|
8826
|
+
}
|
|
8954
8827
|
static getInquiryResponderDescriptor(task) {
|
|
8955
8828
|
return this.serviceRegistry.getInquiryResponderDescriptor(task);
|
|
8956
8829
|
}
|
|
@@ -9711,7 +9584,6 @@ var CadenzaService = class {
|
|
|
9711
9584
|
}
|
|
9712
9585
|
});
|
|
9713
9586
|
});
|
|
9714
|
-
console.log("Creating service...");
|
|
9715
9587
|
const initContext = {
|
|
9716
9588
|
data: {
|
|
9717
9589
|
name: serviceName,
|
|
@@ -9744,18 +9616,13 @@ var CadenzaService = class {
|
|
|
9744
9616
|
}).doOn("meta.fetch.handshake_complete");
|
|
9745
9617
|
} else {
|
|
9746
9618
|
this.emit("meta.create_service_requested", initContext);
|
|
9747
|
-
this.createMetaTask("Create signal transmission for sync", (ctx) => {
|
|
9748
|
-
|
|
9749
|
-
|
|
9750
|
-
|
|
9751
|
-
|
|
9752
|
-
|
|
9753
|
-
|
|
9754
|
-
});
|
|
9755
|
-
}
|
|
9756
|
-
this.createSignalTransmissionTask(
|
|
9757
|
-
"global.meta.cadenza_db.gathered_sync_data",
|
|
9758
|
-
ctx.serviceName
|
|
9619
|
+
this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
|
|
9620
|
+
emit(
|
|
9621
|
+
"meta.service_registry.gathered_sync_transmission_reconcile_requested",
|
|
9622
|
+
{
|
|
9623
|
+
serviceName: ctx.serviceName,
|
|
9624
|
+
__reason: "handshake"
|
|
9625
|
+
}
|
|
9759
9626
|
);
|
|
9760
9627
|
}).doOn("meta.rest.handshake", "meta.socket.handshake");
|
|
9761
9628
|
}
|