@cadenza.io/service 2.17.80 → 2.18.0
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 +420 -579
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +418 -579
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -220,6 +220,13 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
220
220
|
const metadata = context.getMetadata();
|
|
221
221
|
const dynamicQueryData = ctx.queryData ?? {};
|
|
222
222
|
delete ctx.queryData;
|
|
223
|
+
const nextQueryData = {
|
|
224
|
+
...this.queryData,
|
|
225
|
+
data: {
|
|
226
|
+
...ctx.data
|
|
227
|
+
},
|
|
228
|
+
...dynamicQueryData
|
|
229
|
+
};
|
|
223
230
|
const deputyContext = {
|
|
224
231
|
...ctx,
|
|
225
232
|
__localTaskName: this.name,
|
|
@@ -236,13 +243,13 @@ var DatabaseTask = class extends DeputyTask {
|
|
|
236
243
|
__blockRemoteExecution: metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,
|
|
237
244
|
__deputyTaskName: this.name
|
|
238
245
|
},
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
+
data: nextQueryData.data ?? ctx.data,
|
|
247
|
+
batch: nextQueryData.batch ?? ctx.batch,
|
|
248
|
+
transaction: nextQueryData.transaction ?? ctx.transaction,
|
|
249
|
+
onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
|
|
250
|
+
filter: nextQueryData.filter ?? ctx.filter,
|
|
251
|
+
fields: nextQueryData.fields ?? ctx.fields,
|
|
252
|
+
queryData: nextQueryData
|
|
246
253
|
};
|
|
247
254
|
return this.taskFunction(deputyContext, emit, inquire, progressCallback);
|
|
248
255
|
}
|
|
@@ -676,6 +683,7 @@ function hasSignificantRuntimeStatusChange(previous, next) {
|
|
|
676
683
|
// src/registry/ServiceRegistry.ts
|
|
677
684
|
var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
|
|
678
685
|
var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data";
|
|
686
|
+
var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
|
|
679
687
|
var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
|
|
680
688
|
var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
|
|
681
689
|
var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
@@ -763,18 +771,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
|
|
|
763
771
|
}
|
|
764
772
|
return result;
|
|
765
773
|
}
|
|
766
|
-
function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
|
|
767
|
-
return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
|
|
768
|
-
}
|
|
769
|
-
function summarizeTransportDescriptors(transports) {
|
|
770
|
-
return transports.map((transport) => ({
|
|
771
|
-
uuid: transport.uuid,
|
|
772
|
-
serviceInstanceId: transport.serviceInstanceId,
|
|
773
|
-
role: transport.role,
|
|
774
|
-
origin: transport.origin,
|
|
775
|
-
protocols: transport.protocols
|
|
776
|
-
}));
|
|
777
|
-
}
|
|
778
774
|
function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
|
|
779
775
|
const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
|
|
780
776
|
tableName,
|
|
@@ -791,6 +787,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
|
|
|
791
787
|
const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
|
|
792
788
|
const delegationContext = ensureDelegationContextMetadata({
|
|
793
789
|
...ctx,
|
|
790
|
+
data: nextQueryData.data !== void 0 ? nextQueryData.data : ctx.data,
|
|
791
|
+
batch: nextQueryData.batch !== void 0 ? nextQueryData.batch : ctx.batch,
|
|
792
|
+
onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
|
|
793
|
+
transaction: nextQueryData.transaction !== void 0 ? nextQueryData.transaction : ctx.transaction,
|
|
794
794
|
queryData: nextQueryData
|
|
795
795
|
});
|
|
796
796
|
delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
|
|
@@ -914,6 +914,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
914
914
|
this.deputies = /* @__PURE__ */ new Map();
|
|
915
915
|
this.remoteSignals = /* @__PURE__ */ new Map();
|
|
916
916
|
this.remoteIntents = /* @__PURE__ */ new Map();
|
|
917
|
+
this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
|
|
917
918
|
this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
|
|
918
919
|
this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
|
|
919
920
|
this.dependeesByService = /* @__PURE__ */ new Map();
|
|
@@ -1165,21 +1166,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1165
1166
|
trackedInstance.acceptingWork = snapshot.acceptingWork;
|
|
1166
1167
|
trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
1167
1168
|
}
|
|
1168
|
-
if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
|
|
1169
|
-
console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
|
|
1170
|
-
localServiceName: this.serviceName,
|
|
1171
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1172
|
-
targetServiceName: serviceName,
|
|
1173
|
-
targetServiceInstanceId: uuid8,
|
|
1174
|
-
existingInstance: !!existing,
|
|
1175
|
-
deleted,
|
|
1176
|
-
remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
|
|
1177
|
-
hasDeputies: this.deputies.has(serviceName),
|
|
1178
|
-
hasRemoteIntents: this.remoteIntents.has(serviceName),
|
|
1179
|
-
hasRemoteSignals: this.remoteSignals.has(serviceName),
|
|
1180
|
-
transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
|
|
1181
|
-
});
|
|
1182
|
-
}
|
|
1183
1169
|
if (!serviceInstance.isBootstrapPlaceholder) {
|
|
1184
1170
|
this.reconcileBootstrapPlaceholderInstance(serviceName, uuid8, emit);
|
|
1185
1171
|
}
|
|
@@ -1192,7 +1178,8 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1192
1178
|
if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
|
|
1193
1179
|
const connected = this.ensureDependeeClientForInstance(
|
|
1194
1180
|
trackedInstance,
|
|
1195
|
-
emit
|
|
1181
|
+
emit,
|
|
1182
|
+
ctx
|
|
1196
1183
|
);
|
|
1197
1184
|
if (!connected) {
|
|
1198
1185
|
emit("meta.service_registry.routeable_transport_missing", {
|
|
@@ -1235,27 +1222,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1235
1222
|
break;
|
|
1236
1223
|
}
|
|
1237
1224
|
}
|
|
1238
|
-
if (shouldTraceIotDbRegistryPath(
|
|
1239
|
-
this.serviceName,
|
|
1240
|
-
ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
|
|
1241
|
-
)) {
|
|
1242
|
-
console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
|
|
1243
|
-
localServiceName: this.serviceName,
|
|
1244
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1245
|
-
transport: {
|
|
1246
|
-
uuid: transport.uuid,
|
|
1247
|
-
serviceInstanceId: transport.serviceInstanceId,
|
|
1248
|
-
role: transport.role,
|
|
1249
|
-
origin: transport.origin,
|
|
1250
|
-
protocols: transport.protocols,
|
|
1251
|
-
deleted: transport.deleted
|
|
1252
|
-
},
|
|
1253
|
-
ownerFound: !!ownerInstance,
|
|
1254
|
-
ownerServiceName: ownerInstance?.serviceName,
|
|
1255
|
-
ownerInstanceId: ownerInstance?.uuid,
|
|
1256
|
-
ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
|
|
1257
|
-
});
|
|
1258
|
-
}
|
|
1259
1225
|
if (!ownerInstance) {
|
|
1260
1226
|
return false;
|
|
1261
1227
|
}
|
|
@@ -1281,7 +1247,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1281
1247
|
if (!hasRemoteInterest) {
|
|
1282
1248
|
return true;
|
|
1283
1249
|
}
|
|
1284
|
-
this.ensureDependeeClientForInstance(ownerInstance, emit);
|
|
1250
|
+
this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
|
|
1285
1251
|
return true;
|
|
1286
1252
|
},
|
|
1287
1253
|
"Handles service transport updates independently from instance rows."
|
|
@@ -1311,29 +1277,12 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1311
1277
|
"Tracks remote dependency instances for runtime heartbeat monitoring."
|
|
1312
1278
|
).doOn("meta.service_registry.dependee_registered");
|
|
1313
1279
|
const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
|
|
1314
|
-
const getLocalTraceContext = () => ({
|
|
1315
|
-
localServiceName: this.serviceName,
|
|
1316
|
-
localServiceInstanceId: this.serviceInstanceId
|
|
1317
|
-
});
|
|
1318
1280
|
CadenzaService.createMetaTask("Split service instances", function* (ctx) {
|
|
1319
1281
|
const serviceInstances = normalizeServiceInstancesFromSync(ctx);
|
|
1320
1282
|
if (serviceInstances.length === 0) {
|
|
1321
1283
|
return;
|
|
1322
1284
|
}
|
|
1323
1285
|
for (const serviceInstance of serviceInstances) {
|
|
1324
|
-
const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
|
|
1325
|
-
if (shouldTraceIotDbRegistryPath(
|
|
1326
|
-
localServiceName,
|
|
1327
|
-
serviceInstance.serviceName
|
|
1328
|
-
)) {
|
|
1329
|
-
console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
|
|
1330
|
-
localServiceName,
|
|
1331
|
-
localServiceInstanceId,
|
|
1332
|
-
targetServiceName: serviceInstance.serviceName,
|
|
1333
|
-
targetServiceInstanceId: serviceInstance.uuid,
|
|
1334
|
-
transports: summarizeTransportDescriptors(serviceInstance.transports)
|
|
1335
|
-
});
|
|
1336
|
-
}
|
|
1337
1286
|
yield { serviceInstance };
|
|
1338
1287
|
}
|
|
1339
1288
|
}).doOn(
|
|
@@ -1379,6 +1328,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1379
1328
|
},
|
|
1380
1329
|
"Handles registration of remote signals"
|
|
1381
1330
|
).emits("meta.service_registry.registered_global_signals").doOn("global.meta.cadenza_db.gathered_sync_data");
|
|
1331
|
+
this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
|
|
1332
|
+
"Reconcile gathered sync signal transmissions",
|
|
1333
|
+
(ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
|
|
1334
|
+
"Keeps gathered sync transmitters aligned with known remote service instances."
|
|
1335
|
+
).doOn(
|
|
1336
|
+
CADENZA_DB_GATHERED_SYNC_SIGNAL,
|
|
1337
|
+
META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,
|
|
1338
|
+
"meta.service_registry.service_discovered"
|
|
1339
|
+
);
|
|
1382
1340
|
this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
|
|
1383
1341
|
"Handle global intent registration",
|
|
1384
1342
|
(ctx, emit) => {
|
|
@@ -1388,34 +1346,20 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1388
1346
|
if (!a.deleted && b.deleted) return 1;
|
|
1389
1347
|
return 0;
|
|
1390
1348
|
});
|
|
1391
|
-
if (ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
|
|
1392
|
-
const relevantIntentNames = sorted.filter(
|
|
1393
|
-
(map) => map.intentName === META_SERVICE_REGISTRY_FULL_SYNC_INTENT || map.intentName === "Query service_instance" || map.intentName === "Query service_instance_transport"
|
|
1394
|
-
).map((map) => ({
|
|
1395
|
-
intentName: map.intentName,
|
|
1396
|
-
serviceName: map.serviceName,
|
|
1397
|
-
taskName: map.taskName,
|
|
1398
|
-
taskVersion: map.taskVersion,
|
|
1399
|
-
deleted: !!map.deleted
|
|
1400
|
-
}));
|
|
1401
|
-
console.log("[CADENZA_SYNC_DEBUG] gathered_sync_intent_registration", {
|
|
1402
|
-
localServiceName: this.serviceName,
|
|
1403
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1404
|
-
signalName: ctx.__signalName,
|
|
1405
|
-
totalIntentMaps: sorted.length,
|
|
1406
|
-
relevantIntentNames
|
|
1407
|
-
});
|
|
1408
|
-
}
|
|
1409
1349
|
for (const map of sorted) {
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1350
|
+
try {
|
|
1351
|
+
if (map.deleted) {
|
|
1352
|
+
this.unregisterRemoteIntentDeputy(map);
|
|
1353
|
+
continue;
|
|
1354
|
+
}
|
|
1355
|
+
CadenzaService.inquiryBroker.addIntent({
|
|
1356
|
+
name: map.intentName
|
|
1357
|
+
});
|
|
1358
|
+
this.registerRemoteIntentDeputy(map);
|
|
1359
|
+
this.ensureDependeeClientsForService(map.serviceName, emit);
|
|
1360
|
+
} catch (error) {
|
|
1361
|
+
throw error;
|
|
1413
1362
|
}
|
|
1414
|
-
CadenzaService.inquiryBroker.addIntent({
|
|
1415
|
-
name: map.intentName
|
|
1416
|
-
});
|
|
1417
|
-
this.registerRemoteIntentDeputy(map);
|
|
1418
|
-
this.ensureDependeeClientsForService(map.serviceName, emit);
|
|
1419
1363
|
}
|
|
1420
1364
|
return true;
|
|
1421
1365
|
},
|
|
@@ -1567,7 +1511,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1567
1511
|
{
|
|
1568
1512
|
uuid: report.transportId,
|
|
1569
1513
|
serviceInstanceId: report.serviceInstanceId,
|
|
1570
|
-
role: this.getRoutingTransportRole(),
|
|
1514
|
+
role: report.transportRole ?? this.getRoutingTransportRole(),
|
|
1571
1515
|
origin: report.transportOrigin,
|
|
1572
1516
|
protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
|
|
1573
1517
|
securityProfile: null,
|
|
@@ -1609,21 +1553,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1609
1553
|
const serviceInstances = this.normalizeServiceInstancesFromSync(
|
|
1610
1554
|
inquiryResult
|
|
1611
1555
|
);
|
|
1612
|
-
if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
|
|
1613
|
-
const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
|
|
1614
|
-
uuid: instance.uuid,
|
|
1615
|
-
isActive: instance.isActive,
|
|
1616
|
-
isNonResponsive: instance.isNonResponsive,
|
|
1617
|
-
isBlocked: instance.isBlocked,
|
|
1618
|
-
transports: summarizeTransportDescriptors(instance.transports)
|
|
1619
|
-
}));
|
|
1620
|
-
console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
|
|
1621
|
-
localServiceName: this.serviceName,
|
|
1622
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1623
|
-
totalServiceInstances: serviceInstances.length,
|
|
1624
|
-
tracedInstances
|
|
1625
|
-
});
|
|
1626
|
-
}
|
|
1627
1556
|
return {
|
|
1628
1557
|
...ctx,
|
|
1629
1558
|
signalToTaskMaps,
|
|
@@ -1720,44 +1649,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1720
1649
|
let retries = __retries ?? 0;
|
|
1721
1650
|
let triedInstances = __triedInstances ?? [];
|
|
1722
1651
|
const preferredRole = this.getRoutingTransportRole();
|
|
1723
|
-
const allInstances = this.instances.get(__serviceName) ?? [];
|
|
1724
|
-
const candidateDiagnostics = shouldTraceIotDbRegistryPath(
|
|
1725
|
-
this.serviceName,
|
|
1726
|
-
__serviceName ?? void 0
|
|
1727
|
-
) ? allInstances.map((instance) => ({
|
|
1728
|
-
uuid: instance.uuid,
|
|
1729
|
-
isActive: instance.isActive,
|
|
1730
|
-
isNonResponsive: instance.isNonResponsive,
|
|
1731
|
-
isBlocked: instance.isBlocked,
|
|
1732
|
-
isFrontend: instance.isFrontend,
|
|
1733
|
-
transports: summarizeTransportDescriptors(instance.transports),
|
|
1734
|
-
selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
|
|
1735
|
-
instance,
|
|
1736
|
-
context,
|
|
1737
|
-
preferredRole
|
|
1738
|
-
) ? {
|
|
1739
|
-
uuid: this.selectTransportForInstance(
|
|
1740
|
-
instance,
|
|
1741
|
-
context,
|
|
1742
|
-
preferredRole
|
|
1743
|
-
).uuid,
|
|
1744
|
-
role: this.selectTransportForInstance(
|
|
1745
|
-
instance,
|
|
1746
|
-
context,
|
|
1747
|
-
preferredRole
|
|
1748
|
-
).role,
|
|
1749
|
-
origin: this.selectTransportForInstance(
|
|
1750
|
-
instance,
|
|
1751
|
-
context,
|
|
1752
|
-
preferredRole
|
|
1753
|
-
).origin,
|
|
1754
|
-
protocols: this.selectTransportForInstance(
|
|
1755
|
-
instance,
|
|
1756
|
-
context,
|
|
1757
|
-
preferredRole
|
|
1758
|
-
).protocols
|
|
1759
|
-
} : null
|
|
1760
|
-
})) : void 0;
|
|
1761
1652
|
const instances = this.instances.get(__serviceName)?.filter((instance) => {
|
|
1762
1653
|
if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
|
|
1763
1654
|
return false;
|
|
@@ -1790,20 +1681,6 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1790
1681
|
}
|
|
1791
1682
|
return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
|
|
1792
1683
|
});
|
|
1793
|
-
if (candidateDiagnostics) {
|
|
1794
|
-
console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
|
|
1795
|
-
localServiceName: this.serviceName,
|
|
1796
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
1797
|
-
targetServiceName: __serviceName,
|
|
1798
|
-
preferredRole,
|
|
1799
|
-
useSocket: this.useSocket,
|
|
1800
|
-
targetServiceInstanceId,
|
|
1801
|
-
retries,
|
|
1802
|
-
triedInstances,
|
|
1803
|
-
candidateDiagnostics,
|
|
1804
|
-
filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
|
|
1805
|
-
});
|
|
1806
|
-
}
|
|
1807
1684
|
if (!instances || instances.length === 0 || retries > this.retryCount) {
|
|
1808
1685
|
context.errored = true;
|
|
1809
1686
|
context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
|
|
@@ -2061,6 +1938,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2061
1938
|
serviceName: report.serviceName,
|
|
2062
1939
|
serviceInstanceId: report.serviceInstanceId,
|
|
2063
1940
|
transportId: report.transportId,
|
|
1941
|
+
transportRole: report.transportRole,
|
|
2064
1942
|
transportOrigin: report.transportOrigin,
|
|
2065
1943
|
transportProtocols: report.transportProtocols,
|
|
2066
1944
|
isFrontend: report.isFrontend,
|
|
@@ -2677,6 +2555,64 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2677
2555
|
(instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
|
|
2678
2556
|
);
|
|
2679
2557
|
}
|
|
2558
|
+
shouldReconcileGatheredSyncTransmissions() {
|
|
2559
|
+
return this.serviceName === "CadenzaDB";
|
|
2560
|
+
}
|
|
2561
|
+
collectGatheredSyncTransmissionRecipients(ctx) {
|
|
2562
|
+
const recipients = /* @__PURE__ */ new Set();
|
|
2563
|
+
const addRecipient = (serviceName) => {
|
|
2564
|
+
const normalizedServiceName = String(serviceName ?? "").trim();
|
|
2565
|
+
if (!normalizedServiceName || normalizedServiceName === this.serviceName) {
|
|
2566
|
+
return;
|
|
2567
|
+
}
|
|
2568
|
+
recipients.add(normalizedServiceName);
|
|
2569
|
+
};
|
|
2570
|
+
addRecipient(ctx.serviceName ?? ctx.__serviceName);
|
|
2571
|
+
for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {
|
|
2572
|
+
addRecipient(instance.serviceName);
|
|
2573
|
+
}
|
|
2574
|
+
for (const [serviceName, instances] of this.instances.entries()) {
|
|
2575
|
+
if (!instances?.length) {
|
|
2576
|
+
continue;
|
|
2577
|
+
}
|
|
2578
|
+
addRecipient(serviceName);
|
|
2579
|
+
}
|
|
2580
|
+
return recipients;
|
|
2581
|
+
}
|
|
2582
|
+
reconcileGatheredSyncTransmissions(ctx, emit) {
|
|
2583
|
+
if (!this.shouldReconcileGatheredSyncTransmissions()) {
|
|
2584
|
+
return false;
|
|
2585
|
+
}
|
|
2586
|
+
const desiredRecipients = this.collectGatheredSyncTransmissionRecipients(ctx);
|
|
2587
|
+
const createdRecipients = [];
|
|
2588
|
+
for (const serviceName of desiredRecipients) {
|
|
2589
|
+
if (this.gatheredSyncTransmissionServices.has(serviceName)) {
|
|
2590
|
+
continue;
|
|
2591
|
+
}
|
|
2592
|
+
CadenzaService.createSignalTransmissionTask(
|
|
2593
|
+
CADENZA_DB_GATHERED_SYNC_SIGNAL,
|
|
2594
|
+
serviceName
|
|
2595
|
+
);
|
|
2596
|
+
this.gatheredSyncTransmissionServices.add(serviceName);
|
|
2597
|
+
createdRecipients.push(serviceName);
|
|
2598
|
+
}
|
|
2599
|
+
for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {
|
|
2600
|
+
if (desiredRecipients.has(serviceName)) {
|
|
2601
|
+
continue;
|
|
2602
|
+
}
|
|
2603
|
+
CadenzaService.get(
|
|
2604
|
+
`Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`
|
|
2605
|
+
)?.destroy();
|
|
2606
|
+
this.gatheredSyncTransmissionServices.delete(serviceName);
|
|
2607
|
+
}
|
|
2608
|
+
if (createdRecipients.length > 0 && ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
|
|
2609
|
+
emit("meta.cadenza_db.sync_tick", {
|
|
2610
|
+
__syncing: true,
|
|
2611
|
+
__reason: "gathered_sync_transmissions_reconciled"
|
|
2612
|
+
});
|
|
2613
|
+
}
|
|
2614
|
+
return createdRecipients.length > 0 || this.gatheredSyncTransmissionServices.size > 0;
|
|
2615
|
+
}
|
|
2680
2616
|
registerRemoteIntentDeputy(map) {
|
|
2681
2617
|
if (!this.serviceName || map.serviceName === this.serviceName) {
|
|
2682
2618
|
return;
|
|
@@ -2919,38 +2855,18 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2919
2855
|
}
|
|
2920
2856
|
return communicationTypes;
|
|
2921
2857
|
}
|
|
2922
|
-
ensureDependeeClientForInstance(instance, emit) {
|
|
2858
|
+
ensureDependeeClientForInstance(instance, emit, ctx) {
|
|
2923
2859
|
if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
|
|
2924
2860
|
return false;
|
|
2925
2861
|
}
|
|
2926
2862
|
if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
|
|
2927
2863
|
return false;
|
|
2928
2864
|
}
|
|
2929
|
-
const transport = this.
|
|
2865
|
+
const transport = this.selectTransportForInstance(
|
|
2930
2866
|
instance,
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
|
|
2935
|
-
localServiceName: this.serviceName,
|
|
2936
|
-
localServiceInstanceId: this.serviceInstanceId,
|
|
2937
|
-
targetServiceName: instance.serviceName,
|
|
2938
|
-
targetServiceInstanceId: instance.uuid,
|
|
2939
|
-
useSocket: this.useSocket,
|
|
2940
|
-
routeableRole: this.getRoutingTransportRole(),
|
|
2941
|
-
hasDeputies: this.deputies.has(instance.serviceName),
|
|
2942
|
-
hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
|
|
2943
|
-
hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
|
|
2944
|
-
clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
|
|
2945
|
-
transports: summarizeTransportDescriptors(instance.transports),
|
|
2946
|
-
selectedTransport: transport ? {
|
|
2947
|
-
uuid: transport.uuid,
|
|
2948
|
-
role: transport.role,
|
|
2949
|
-
origin: transport.origin,
|
|
2950
|
-
protocols: transport.protocols
|
|
2951
|
-
} : null
|
|
2952
|
-
});
|
|
2953
|
-
}
|
|
2867
|
+
ctx ?? {},
|
|
2868
|
+
this.getRoutingTransportRole()
|
|
2869
|
+
);
|
|
2954
2870
|
if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
|
|
2955
2871
|
return false;
|
|
2956
2872
|
}
|
|
@@ -2967,9 +2883,9 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
2967
2883
|
this.markTransportClientCreated(instance, transport.uuid);
|
|
2968
2884
|
return true;
|
|
2969
2885
|
}
|
|
2970
|
-
ensureDependeeClientsForService(serviceName, emit) {
|
|
2886
|
+
ensureDependeeClientsForService(serviceName, emit, ctx) {
|
|
2971
2887
|
for (const instance of this.instances.get(serviceName) ?? []) {
|
|
2972
|
-
this.ensureDependeeClientForInstance(instance, emit);
|
|
2888
|
+
this.ensureDependeeClientForInstance(instance, emit, ctx);
|
|
2973
2889
|
}
|
|
2974
2890
|
}
|
|
2975
2891
|
hasTransportClientCreated(instance, transportId) {
|
|
@@ -3028,6 +2944,10 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3028
2944
|
if (!instances?.length) {
|
|
3029
2945
|
return;
|
|
3030
2946
|
}
|
|
2947
|
+
const resolvedInstance = instances.find(
|
|
2948
|
+
(instance) => instance.uuid === resolvedInstanceId
|
|
2949
|
+
);
|
|
2950
|
+
const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
|
|
3031
2951
|
const placeholders = instances.filter(
|
|
3032
2952
|
(instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
|
|
3033
2953
|
);
|
|
@@ -3039,7 +2959,33 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3039
2959
|
const requiredForReadiness = this.readinessDependeeByInstance.has(
|
|
3040
2960
|
placeholder.uuid
|
|
3041
2961
|
);
|
|
2962
|
+
const preservedTransportIds = /* @__PURE__ */ new Set();
|
|
2963
|
+
if (resolvedInstance && frontendRoutingRole) {
|
|
2964
|
+
const resolvedHasFrontendRoute = resolvedInstance.transports.some(
|
|
2965
|
+
(transport) => transport.role === frontendRoutingRole && !transport.deleted
|
|
2966
|
+
);
|
|
2967
|
+
if (!resolvedHasFrontendRoute) {
|
|
2968
|
+
const transportsToPreserve = placeholder.transports.filter(
|
|
2969
|
+
(transport) => transport.role === frontendRoutingRole && !transport.deleted
|
|
2970
|
+
);
|
|
2971
|
+
for (const transport of transportsToPreserve) {
|
|
2972
|
+
if (resolvedInstance.transports.some(
|
|
2973
|
+
(existingTransport) => existingTransport.role === transport.role && existingTransport.origin === transport.origin
|
|
2974
|
+
)) {
|
|
2975
|
+
continue;
|
|
2976
|
+
}
|
|
2977
|
+
resolvedInstance.transports.push({
|
|
2978
|
+
...transport,
|
|
2979
|
+
serviceInstanceId: resolvedInstanceId
|
|
2980
|
+
});
|
|
2981
|
+
preservedTransportIds.add(transport.uuid);
|
|
2982
|
+
}
|
|
2983
|
+
}
|
|
2984
|
+
}
|
|
3042
2985
|
for (const transport of placeholder.transports) {
|
|
2986
|
+
if (preservedTransportIds.has(transport.uuid)) {
|
|
2987
|
+
continue;
|
|
2988
|
+
}
|
|
3043
2989
|
const transportKey = buildTransportClientKey(transport);
|
|
3044
2990
|
emit(`meta.socket_shutdown_requested:${transportKey}`, {});
|
|
3045
2991
|
emit(`meta.fetch.destroy_requested:${transportKey}`, {});
|
|
@@ -3160,6 +3106,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3160
3106
|
return null;
|
|
3161
3107
|
}
|
|
3162
3108
|
const transportId = ctx.transportId ?? ctx.serviceTransportId ?? ctx.serviceTransport?.uuid ?? void 0;
|
|
3109
|
+
const transportRole = ctx.transportRole ?? ctx.transport_role ?? ctx.serviceTransport?.role ?? void 0;
|
|
3163
3110
|
const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
|
|
3164
3111
|
const transportProtocols = Array.isArray(
|
|
3165
3112
|
ctx.transportProtocols ?? ctx.serviceTransport?.protocols
|
|
@@ -3185,6 +3132,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3185
3132
|
serviceName,
|
|
3186
3133
|
serviceInstanceId,
|
|
3187
3134
|
transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
|
|
3135
|
+
transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
|
|
3188
3136
|
transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
|
|
3189
3137
|
transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
|
|
3190
3138
|
isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
|
|
@@ -3207,13 +3155,16 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3207
3155
|
const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
|
|
3208
3156
|
const existingTransport = this.getTransportById(instance, report.transportId);
|
|
3209
3157
|
if (existingTransport) {
|
|
3158
|
+
if (report.transportRole) {
|
|
3159
|
+
existingTransport.role = report.transportRole;
|
|
3160
|
+
}
|
|
3210
3161
|
existingTransport.origin = report.transportOrigin;
|
|
3211
3162
|
existingTransport.protocols = protocols;
|
|
3212
3163
|
} else {
|
|
3213
3164
|
instance.transports.push({
|
|
3214
3165
|
uuid: report.transportId,
|
|
3215
3166
|
serviceInstanceId: report.serviceInstanceId,
|
|
3216
|
-
role: this.getRoutingTransportRole(),
|
|
3167
|
+
role: report.transportRole ?? this.getRoutingTransportRole(),
|
|
3217
3168
|
origin: report.transportOrigin,
|
|
3218
3169
|
protocols,
|
|
3219
3170
|
securityProfile: null,
|
|
@@ -3259,24 +3210,18 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3259
3210
|
localInstance.isBlocked
|
|
3260
3211
|
);
|
|
3261
3212
|
const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
3213
|
+
const transport = this.getRouteableTransport(
|
|
3214
|
+
localInstance,
|
|
3215
|
+
this.useSocket ? "socket" : "rest",
|
|
3216
|
+
"internal"
|
|
3217
|
+
);
|
|
3262
3218
|
const report = {
|
|
3263
3219
|
serviceName: this.serviceName,
|
|
3264
3220
|
serviceInstanceId: this.serviceInstanceId,
|
|
3265
|
-
transportId:
|
|
3266
|
-
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
)?.uuid ?? void 0,
|
|
3270
|
-
transportOrigin: this.getRouteableTransport(
|
|
3271
|
-
localInstance,
|
|
3272
|
-
this.useSocket ? "socket" : "rest",
|
|
3273
|
-
"internal"
|
|
3274
|
-
)?.origin ?? void 0,
|
|
3275
|
-
transportProtocols: this.getRouteableTransport(
|
|
3276
|
-
localInstance,
|
|
3277
|
-
this.useSocket ? "socket" : "rest",
|
|
3278
|
-
"internal"
|
|
3279
|
-
)?.protocols ?? void 0,
|
|
3221
|
+
transportId: transport?.uuid ?? void 0,
|
|
3222
|
+
transportRole: transport?.role ?? void 0,
|
|
3223
|
+
transportOrigin: transport?.origin ?? void 0,
|
|
3224
|
+
transportProtocols: transport?.protocols ?? void 0,
|
|
3280
3225
|
isFrontend: localInstance.isFrontend,
|
|
3281
3226
|
reportedAt,
|
|
3282
3227
|
state: snapshot.state,
|
|
@@ -3640,6 +3585,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
3640
3585
|
this.deputies.clear();
|
|
3641
3586
|
this.remoteSignals.clear();
|
|
3642
3587
|
this.remoteIntents.clear();
|
|
3588
|
+
this.gatheredSyncTransmissionServices.clear();
|
|
3643
3589
|
this.remoteIntentDeputiesByKey.clear();
|
|
3644
3590
|
this.remoteIntentDeputiesByTask.clear();
|
|
3645
3591
|
this.dependeesByService.clear();
|
|
@@ -3998,19 +3944,6 @@ var RestController = class _RestController {
|
|
|
3998
3944
|
let ctx2;
|
|
3999
3945
|
try {
|
|
4000
3946
|
ctx2 = req.body;
|
|
4001
|
-
if (ctx2?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
4002
|
-
console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_rest", {
|
|
4003
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
4004
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
4005
|
-
signalName: ctx2.__signalName,
|
|
4006
|
-
intentToTaskMaps: Array.isArray(ctx2.intentToTaskMaps) ? ctx2.intentToTaskMaps.length : 0,
|
|
4007
|
-
signalToTaskMaps: Array.isArray(ctx2.signalToTaskMaps) ? ctx2.signalToTaskMaps.length : 0,
|
|
4008
|
-
serviceInstances: Array.isArray(ctx2.serviceInstances) ? ctx2.serviceInstances.length : 0,
|
|
4009
|
-
serviceInstanceTransports: Array.isArray(
|
|
4010
|
-
ctx2.serviceInstanceTransports
|
|
4011
|
-
) ? ctx2.serviceInstanceTransports.length : 0
|
|
4012
|
-
});
|
|
4013
|
-
}
|
|
4014
3947
|
if (!CadenzaService.signalBroker.listObservedSignals().includes(ctx2.__signalName)) {
|
|
4015
3948
|
res.send({
|
|
4016
3949
|
...ctx2,
|
|
@@ -4395,21 +4328,6 @@ var RestController = class _RestController {
|
|
|
4395
4328
|
if (ctx2.__signalName === void 0) {
|
|
4396
4329
|
return;
|
|
4397
4330
|
}
|
|
4398
|
-
if (ctx2.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
4399
|
-
console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_rest", {
|
|
4400
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
4401
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
4402
|
-
targetServiceName: serviceName,
|
|
4403
|
-
targetUrl: URL2,
|
|
4404
|
-
signalName: ctx2.__signalName,
|
|
4405
|
-
intentToTaskMaps: Array.isArray(ctx2.intentToTaskMaps) ? ctx2.intentToTaskMaps.length : 0,
|
|
4406
|
-
signalToTaskMaps: Array.isArray(ctx2.signalToTaskMaps) ? ctx2.signalToTaskMaps.length : 0,
|
|
4407
|
-
serviceInstances: Array.isArray(ctx2.serviceInstances) ? ctx2.serviceInstances.length : 0,
|
|
4408
|
-
serviceInstanceTransports: Array.isArray(
|
|
4409
|
-
ctx2.serviceInstanceTransports
|
|
4410
|
-
) ? ctx2.serviceInstanceTransports.length : 0
|
|
4411
|
-
});
|
|
4412
|
-
}
|
|
4413
4331
|
fetchDiagnostics.signalTransmissions++;
|
|
4414
4332
|
fetchDiagnostics.updatedAt = Date.now();
|
|
4415
4333
|
let response;
|
|
@@ -5419,10 +5337,14 @@ var SocketController = class _SocketController {
|
|
|
5419
5337
|
const communicationTypes = this.normalizeCommunicationTypes(
|
|
5420
5338
|
input.communicationTypes
|
|
5421
5339
|
);
|
|
5340
|
+
const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
|
|
5422
5341
|
const serviceName = String(input.serviceName ?? "");
|
|
5423
5342
|
const serviceTransportId = String(input.serviceTransportId ?? "");
|
|
5424
5343
|
const serviceOrigin = String(input.serviceOrigin ?? "");
|
|
5425
5344
|
const parsedOrigin = parseTransportOrigin(serviceOrigin);
|
|
5345
|
+
if (!transportProtocols.includes("socket")) {
|
|
5346
|
+
return false;
|
|
5347
|
+
}
|
|
5426
5348
|
if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
|
|
5427
5349
|
CadenzaService.log(
|
|
5428
5350
|
"Socket client setup skipped due to missing transport origin",
|
|
@@ -5448,7 +5370,7 @@ var SocketController = class _SocketController {
|
|
|
5448
5370
|
serviceName,
|
|
5449
5371
|
serviceTransportId,
|
|
5450
5372
|
serviceOrigin,
|
|
5451
|
-
transportProtocols
|
|
5373
|
+
transportProtocols,
|
|
5452
5374
|
url
|
|
5453
5375
|
});
|
|
5454
5376
|
};
|
|
@@ -5469,7 +5391,7 @@ var SocketController = class _SocketController {
|
|
|
5469
5391
|
serviceName,
|
|
5470
5392
|
serviceTransportId,
|
|
5471
5393
|
serviceOrigin,
|
|
5472
|
-
transportProtocols
|
|
5394
|
+
transportProtocols,
|
|
5473
5395
|
url,
|
|
5474
5396
|
destroyed: false,
|
|
5475
5397
|
updatedAt: Date.now()
|
|
@@ -5710,19 +5632,6 @@ var SocketController = class _SocketController {
|
|
|
5710
5632
|
});
|
|
5711
5633
|
});
|
|
5712
5634
|
socket.on("signal", (signalCtx, callback) => {
|
|
5713
|
-
if (signalCtx?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
5714
|
-
console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_socket", {
|
|
5715
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
5716
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
5717
|
-
signalName: signalCtx.__signalName,
|
|
5718
|
-
intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
|
|
5719
|
-
signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
|
|
5720
|
-
serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
|
|
5721
|
-
serviceInstanceTransports: Array.isArray(
|
|
5722
|
-
signalCtx.serviceInstanceTransports
|
|
5723
|
-
) ? signalCtx.serviceInstanceTransports.length : 0
|
|
5724
|
-
});
|
|
5725
|
-
}
|
|
5726
5635
|
if (CadenzaService.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {
|
|
5727
5636
|
if (isSocketAckCallback(callback)) {
|
|
5728
5637
|
callback({
|
|
@@ -6021,21 +5930,6 @@ var SocketController = class _SocketController {
|
|
|
6021
5930
|
if (signalCtx.__signalName === void 0) {
|
|
6022
5931
|
return;
|
|
6023
5932
|
}
|
|
6024
|
-
if (signalCtx.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
6025
|
-
console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_socket", {
|
|
6026
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
6027
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
6028
|
-
targetServiceName: serviceName,
|
|
6029
|
-
targetUrl: url,
|
|
6030
|
-
signalName: signalCtx.__signalName,
|
|
6031
|
-
intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
|
|
6032
|
-
signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
|
|
6033
|
-
serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
|
|
6034
|
-
serviceInstanceTransports: Array.isArray(
|
|
6035
|
-
signalCtx.serviceInstanceTransports
|
|
6036
|
-
) ? signalCtx.serviceInstanceTransports.length : 0
|
|
6037
|
-
});
|
|
6038
|
-
}
|
|
6039
5933
|
delete signalCtx.__broadcast;
|
|
6040
5934
|
const response = await runtimeHandle.emitWhenReady?.("signal", signalCtx, 5e3) ?? {
|
|
6041
5935
|
errored: true,
|
|
@@ -6076,7 +5970,7 @@ var SocketController = class _SocketController {
|
|
|
6076
5970
|
communicationTypes,
|
|
6077
5971
|
serviceTransportId,
|
|
6078
5972
|
serviceOrigin,
|
|
6079
|
-
transportProtocols
|
|
5973
|
+
transportProtocols,
|
|
6080
5974
|
handshakeData: {
|
|
6081
5975
|
instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
6082
5976
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
@@ -6436,6 +6330,209 @@ var SignalController = class _SignalController {
|
|
|
6436
6330
|
}
|
|
6437
6331
|
};
|
|
6438
6332
|
|
|
6333
|
+
// src/runtime/RuntimeValidationController.ts
|
|
6334
|
+
var RUNTIME_VALIDATION_INTENTS = {
|
|
6335
|
+
getPolicy: "meta-runtime-validation-policy-get",
|
|
6336
|
+
setPolicy: "meta-runtime-validation-policy-set",
|
|
6337
|
+
replacePolicy: "meta-runtime-validation-policy-replace",
|
|
6338
|
+
clearPolicy: "meta-runtime-validation-policy-clear",
|
|
6339
|
+
listScopes: "meta-runtime-validation-scope-list",
|
|
6340
|
+
upsertScope: "meta-runtime-validation-scope-upsert",
|
|
6341
|
+
removeScope: "meta-runtime-validation-scope-remove",
|
|
6342
|
+
clearScopes: "meta-runtime-validation-scope-clear"
|
|
6343
|
+
};
|
|
6344
|
+
var RUNTIME_VALIDATION_SIGNALS = {
|
|
6345
|
+
setPolicyRequested: "meta.runtime_validation.policy_set_requested",
|
|
6346
|
+
replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
|
|
6347
|
+
clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
|
|
6348
|
+
upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
|
|
6349
|
+
removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
|
|
6350
|
+
clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
|
|
6351
|
+
policyUpdated: "meta.runtime_validation.policy_updated",
|
|
6352
|
+
policyCleared: "meta.runtime_validation.policy_cleared",
|
|
6353
|
+
scopeUpserted: "meta.runtime_validation.scope_upserted",
|
|
6354
|
+
scopeRemoved: "meta.runtime_validation.scope_removed",
|
|
6355
|
+
scopesCleared: "meta.runtime_validation.scopes_cleared"
|
|
6356
|
+
};
|
|
6357
|
+
function normalizePolicyContext(ctx) {
|
|
6358
|
+
const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
|
|
6359
|
+
const policy = {};
|
|
6360
|
+
for (const key of [
|
|
6361
|
+
"metaInput",
|
|
6362
|
+
"metaOutput",
|
|
6363
|
+
"businessInput",
|
|
6364
|
+
"businessOutput",
|
|
6365
|
+
"warnOnMissingMetaInputSchema",
|
|
6366
|
+
"warnOnMissingMetaOutputSchema",
|
|
6367
|
+
"warnOnMissingBusinessInputSchema",
|
|
6368
|
+
"warnOnMissingBusinessOutputSchema"
|
|
6369
|
+
]) {
|
|
6370
|
+
if (source[key] !== void 0) {
|
|
6371
|
+
policy[key] = source[key];
|
|
6372
|
+
}
|
|
6373
|
+
}
|
|
6374
|
+
return policy;
|
|
6375
|
+
}
|
|
6376
|
+
function normalizeScopeContext(ctx) {
|
|
6377
|
+
const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
|
|
6378
|
+
return {
|
|
6379
|
+
id: source.id,
|
|
6380
|
+
active: source.active,
|
|
6381
|
+
startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
|
|
6382
|
+
startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
|
|
6383
|
+
policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
|
|
6384
|
+
};
|
|
6385
|
+
}
|
|
6386
|
+
var RuntimeValidationController = class _RuntimeValidationController {
|
|
6387
|
+
static get instance() {
|
|
6388
|
+
if (!this._instance) {
|
|
6389
|
+
this._instance = new _RuntimeValidationController();
|
|
6390
|
+
}
|
|
6391
|
+
return this._instance;
|
|
6392
|
+
}
|
|
6393
|
+
constructor() {
|
|
6394
|
+
CadenzaService.defineIntent({
|
|
6395
|
+
name: RUNTIME_VALIDATION_INTENTS.getPolicy,
|
|
6396
|
+
description: "Get the active runtime validation policy.",
|
|
6397
|
+
input: { type: "object" },
|
|
6398
|
+
output: { type: "object" }
|
|
6399
|
+
});
|
|
6400
|
+
CadenzaService.defineIntent({
|
|
6401
|
+
name: RUNTIME_VALIDATION_INTENTS.setPolicy,
|
|
6402
|
+
description: "Merge fields into the active runtime validation policy.",
|
|
6403
|
+
input: { type: "object" },
|
|
6404
|
+
output: { type: "object" }
|
|
6405
|
+
});
|
|
6406
|
+
CadenzaService.defineIntent({
|
|
6407
|
+
name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
|
|
6408
|
+
description: "Replace the active runtime validation policy.",
|
|
6409
|
+
input: { type: "object" },
|
|
6410
|
+
output: { type: "object" }
|
|
6411
|
+
});
|
|
6412
|
+
CadenzaService.defineIntent({
|
|
6413
|
+
name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
|
|
6414
|
+
description: "Clear the active runtime validation policy.",
|
|
6415
|
+
input: { type: "object" },
|
|
6416
|
+
output: { type: "object" }
|
|
6417
|
+
});
|
|
6418
|
+
CadenzaService.defineIntent({
|
|
6419
|
+
name: RUNTIME_VALIDATION_INTENTS.listScopes,
|
|
6420
|
+
description: "List active runtime validation scopes.",
|
|
6421
|
+
input: { type: "object" },
|
|
6422
|
+
output: { type: "object" }
|
|
6423
|
+
});
|
|
6424
|
+
CadenzaService.defineIntent({
|
|
6425
|
+
name: RUNTIME_VALIDATION_INTENTS.upsertScope,
|
|
6426
|
+
description: "Create or update a runtime validation scope for targeted subflow validation.",
|
|
6427
|
+
input: { type: "object" },
|
|
6428
|
+
output: { type: "object" }
|
|
6429
|
+
});
|
|
6430
|
+
CadenzaService.defineIntent({
|
|
6431
|
+
name: RUNTIME_VALIDATION_INTENTS.removeScope,
|
|
6432
|
+
description: "Remove a runtime validation scope by id.",
|
|
6433
|
+
input: { type: "object" },
|
|
6434
|
+
output: { type: "object" }
|
|
6435
|
+
});
|
|
6436
|
+
CadenzaService.defineIntent({
|
|
6437
|
+
name: RUNTIME_VALIDATION_INTENTS.clearScopes,
|
|
6438
|
+
description: "Clear all runtime validation scopes.",
|
|
6439
|
+
input: { type: "object" },
|
|
6440
|
+
output: { type: "object" }
|
|
6441
|
+
});
|
|
6442
|
+
CadenzaService.createMetaTask("Get runtime validation policy", () => {
|
|
6443
|
+
return {
|
|
6444
|
+
policy: CadenzaService.getRuntimeValidationPolicy()
|
|
6445
|
+
};
|
|
6446
|
+
}).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
|
|
6447
|
+
CadenzaService.createMetaTask(
|
|
6448
|
+
"Set runtime validation policy",
|
|
6449
|
+
(ctx, emit) => {
|
|
6450
|
+
const policy = normalizePolicyContext(ctx);
|
|
6451
|
+
const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
|
|
6452
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
|
|
6453
|
+
policy: nextPolicy
|
|
6454
|
+
});
|
|
6455
|
+
return {
|
|
6456
|
+
policy: nextPolicy
|
|
6457
|
+
};
|
|
6458
|
+
},
|
|
6459
|
+
"Merges runtime validation policy fields at runtime."
|
|
6460
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
|
|
6461
|
+
CadenzaService.createMetaTask(
|
|
6462
|
+
"Replace runtime validation policy",
|
|
6463
|
+
(ctx, emit) => {
|
|
6464
|
+
const policy = normalizePolicyContext(ctx);
|
|
6465
|
+
const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
|
|
6466
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
|
|
6467
|
+
policy: nextPolicy
|
|
6468
|
+
});
|
|
6469
|
+
return {
|
|
6470
|
+
policy: nextPolicy
|
|
6471
|
+
};
|
|
6472
|
+
},
|
|
6473
|
+
"Replaces runtime validation policy fields at runtime."
|
|
6474
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
|
|
6475
|
+
CadenzaService.createMetaTask(
|
|
6476
|
+
"Clear runtime validation policy",
|
|
6477
|
+
(_ctx, emit) => {
|
|
6478
|
+
CadenzaService.clearRuntimeValidationPolicy();
|
|
6479
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
|
|
6480
|
+
return {
|
|
6481
|
+
policy: CadenzaService.getRuntimeValidationPolicy()
|
|
6482
|
+
};
|
|
6483
|
+
},
|
|
6484
|
+
"Clears the runtime validation policy."
|
|
6485
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
|
|
6486
|
+
CadenzaService.createMetaTask("List runtime validation scopes", () => {
|
|
6487
|
+
return {
|
|
6488
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6489
|
+
};
|
|
6490
|
+
}).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
|
|
6491
|
+
CadenzaService.createMetaTask(
|
|
6492
|
+
"Upsert runtime validation scope",
|
|
6493
|
+
(ctx, emit) => {
|
|
6494
|
+
const scope = normalizeScopeContext(ctx);
|
|
6495
|
+
const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
|
|
6496
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
|
|
6497
|
+
scope: nextScope
|
|
6498
|
+
});
|
|
6499
|
+
return {
|
|
6500
|
+
scope: nextScope
|
|
6501
|
+
};
|
|
6502
|
+
},
|
|
6503
|
+
"Upserts a runtime validation scope for targeted debugging."
|
|
6504
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
|
|
6505
|
+
CadenzaService.createMetaTask(
|
|
6506
|
+
"Remove runtime validation scope",
|
|
6507
|
+
(ctx, emit) => {
|
|
6508
|
+
if (!ctx.id) {
|
|
6509
|
+
throw new Error("Runtime validation scope id is required");
|
|
6510
|
+
}
|
|
6511
|
+
CadenzaService.removeRuntimeValidationScope(ctx.id);
|
|
6512
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
|
|
6513
|
+
id: ctx.id
|
|
6514
|
+
});
|
|
6515
|
+
return {
|
|
6516
|
+
id: ctx.id,
|
|
6517
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6518
|
+
};
|
|
6519
|
+
},
|
|
6520
|
+
"Removes a runtime validation scope."
|
|
6521
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
|
|
6522
|
+
CadenzaService.createMetaTask(
|
|
6523
|
+
"Clear runtime validation scopes",
|
|
6524
|
+
(_ctx, emit) => {
|
|
6525
|
+
CadenzaService.clearRuntimeValidationScopes();
|
|
6526
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
|
|
6527
|
+
return {
|
|
6528
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6529
|
+
};
|
|
6530
|
+
},
|
|
6531
|
+
"Clears all runtime validation scopes."
|
|
6532
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
|
|
6533
|
+
}
|
|
6534
|
+
};
|
|
6535
|
+
|
|
6439
6536
|
// src/graph/controllers/registerActorSessionPersistence.ts
|
|
6440
6537
|
import { META_ACTOR_SESSION_STATE_PERSIST_INTENT } from "@cadenza.io/core";
|
|
6441
6538
|
function registerActorSessionPersistenceTasks() {
|
|
@@ -9149,7 +9246,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
|
|
|
9149
9246
|
}
|
|
9150
9247
|
function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
|
|
9151
9248
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
9152
|
-
const debugTable = shouldDebugSyncTable(tableName);
|
|
9153
9249
|
if (!localInsertTask && !isCadenzaDBReady) {
|
|
9154
9250
|
return void 0;
|
|
9155
9251
|
}
|
|
@@ -9162,16 +9258,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
9162
9258
|
register: false,
|
|
9163
9259
|
isHidden: true
|
|
9164
9260
|
});
|
|
9165
|
-
if (debugTable) {
|
|
9166
|
-
logSyncDebug("insert_task_resolved", {
|
|
9167
|
-
tableName,
|
|
9168
|
-
localInsertTaskName: localInsertTask?.name ?? null,
|
|
9169
|
-
remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
|
|
9170
|
-
targetTaskName: targetTask.name,
|
|
9171
|
-
queryData,
|
|
9172
|
-
options
|
|
9173
|
-
});
|
|
9174
|
-
}
|
|
9175
9261
|
const prepareExecutionTask = CadenzaService.createMetaTask(
|
|
9176
9262
|
`Prepare graph sync insert for ${tableName}`,
|
|
9177
9263
|
(ctx) => {
|
|
@@ -9182,12 +9268,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
9182
9268
|
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) {
|
|
9183
9269
|
console.warn(
|
|
9184
9270
|
"[CADENZA_SYNC_EMPTY_INSERT]",
|
|
9185
|
-
|
|
9271
|
+
{
|
|
9186
9272
|
tableName,
|
|
9187
9273
|
queryData: originalQueryData,
|
|
9188
9274
|
ctx,
|
|
9189
9275
|
joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
|
|
9190
|
-
}
|
|
9276
|
+
}
|
|
9191
9277
|
);
|
|
9192
9278
|
}
|
|
9193
9279
|
return buildSyncExecutionEnvelope(
|
|
@@ -9201,37 +9287,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
9201
9287
|
isHidden: true
|
|
9202
9288
|
}
|
|
9203
9289
|
);
|
|
9204
|
-
if (debugTable) {
|
|
9205
|
-
prepareExecutionTask.then(
|
|
9206
|
-
CadenzaService.createMetaTask(
|
|
9207
|
-
`Log prepared graph sync insert execution for ${tableName}`,
|
|
9208
|
-
(ctx) => {
|
|
9209
|
-
if (tableName === "task") {
|
|
9210
|
-
if (!shouldDebugTaskSyncPayload(ctx)) {
|
|
9211
|
-
return ctx;
|
|
9212
|
-
}
|
|
9213
|
-
logSyncDebug("insert_prepare", {
|
|
9214
|
-
tableName,
|
|
9215
|
-
targetTaskName: targetTask.name,
|
|
9216
|
-
payload: buildTaskSyncDebugPayload(ctx)
|
|
9217
|
-
});
|
|
9218
|
-
return ctx;
|
|
9219
|
-
}
|
|
9220
|
-
logSyncDebug("insert_prepare", {
|
|
9221
|
-
tableName,
|
|
9222
|
-
targetTaskName: targetTask.name,
|
|
9223
|
-
ctx
|
|
9224
|
-
});
|
|
9225
|
-
return ctx;
|
|
9226
|
-
},
|
|
9227
|
-
`Logs prepared ${tableName} sync insert payloads.`,
|
|
9228
|
-
{
|
|
9229
|
-
register: false,
|
|
9230
|
-
isHidden: true
|
|
9231
|
-
}
|
|
9232
|
-
)
|
|
9233
|
-
);
|
|
9234
|
-
}
|
|
9235
9290
|
const finalizeExecutionTask = CadenzaService.createMetaTask(
|
|
9236
9291
|
`Finalize graph sync insert for ${tableName}`,
|
|
9237
9292
|
(ctx) => {
|
|
@@ -9242,25 +9297,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
9242
9297
|
...ctx,
|
|
9243
9298
|
queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
|
|
9244
9299
|
};
|
|
9245
|
-
if (debugTable) {
|
|
9246
|
-
if (tableName === "task") {
|
|
9247
|
-
if (shouldDebugTaskSyncPayload(normalizedContext)) {
|
|
9248
|
-
logSyncDebug("insert_finalize", {
|
|
9249
|
-
tableName,
|
|
9250
|
-
targetTaskName: targetTask.name,
|
|
9251
|
-
success: didSyncInsertSucceed(normalizedContext),
|
|
9252
|
-
payload: buildTaskSyncDebugPayload(normalizedContext)
|
|
9253
|
-
});
|
|
9254
|
-
}
|
|
9255
|
-
} else {
|
|
9256
|
-
logSyncDebug("insert_finalize", {
|
|
9257
|
-
tableName,
|
|
9258
|
-
targetTaskName: targetTask.name,
|
|
9259
|
-
success: didSyncInsertSucceed(normalizedContext),
|
|
9260
|
-
ctx: normalizedContext
|
|
9261
|
-
});
|
|
9262
|
-
}
|
|
9263
|
-
}
|
|
9264
9300
|
return normalizedContext;
|
|
9265
9301
|
},
|
|
9266
9302
|
`Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
|
|
@@ -9295,139 +9331,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
|
|
|
9295
9331
|
intent_registry: "intentRegistrys"
|
|
9296
9332
|
};
|
|
9297
9333
|
var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
|
|
9298
|
-
var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
|
|
9299
|
-
var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
|
|
9300
|
-
var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
|
|
9301
|
-
var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
9302
|
-
"Query service_instance",
|
|
9303
|
-
"Query service_instance_transport",
|
|
9304
|
-
"Query intent_to_task_map",
|
|
9305
|
-
"Query signal_to_task_map",
|
|
9306
|
-
"Prepare for signal sync",
|
|
9307
|
-
"Compile sync data and broadcast",
|
|
9308
|
-
"Forward service instance sync",
|
|
9309
|
-
"Forward service transport sync",
|
|
9310
|
-
"Forward intent to task map sync",
|
|
9311
|
-
"Forward signal to task map sync",
|
|
9312
|
-
"Normalize telemetry ingest payload",
|
|
9313
|
-
"Get telemetry session state",
|
|
9314
|
-
"Normalize anomaly detect input",
|
|
9315
|
-
"Read anomaly runtime session",
|
|
9316
|
-
"Normalize prediction compute input",
|
|
9317
|
-
"Normalize telemetry insert queryData"
|
|
9318
|
-
]);
|
|
9319
|
-
var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
|
|
9320
|
-
var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
|
|
9321
|
-
"meta-service-registry-full-sync",
|
|
9322
|
-
"runner-traffic-runtime-get",
|
|
9323
|
-
"iot-telemetry-ingest",
|
|
9324
|
-
"iot-telemetry-session-get",
|
|
9325
|
-
"iot-anomaly-detect",
|
|
9326
|
-
"iot-anomaly-runtime-get",
|
|
9327
|
-
"iot-prediction-compute",
|
|
9328
|
-
"iot-db-telemetry-insert",
|
|
9329
|
-
"query-pg-cadenza-db-postgres-actor-service_instance",
|
|
9330
|
-
"query-pg-cadenza-db-postgres-actor-service_instance_transport",
|
|
9331
|
-
"query-pg-cadenza-db-postgres-actor-intent_to_task_map",
|
|
9332
|
-
"query-pg-cadenza-db-postgres-actor-signal_to_task_map"
|
|
9333
|
-
]);
|
|
9334
|
-
function shouldDebugSyncTable(tableName) {
|
|
9335
|
-
return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
|
|
9336
|
-
}
|
|
9337
|
-
function shouldDebugSyncTaskName(taskName) {
|
|
9338
|
-
return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
|
|
9339
|
-
}
|
|
9340
|
-
function shouldDebugSyncRoutineName(routineName) {
|
|
9341
|
-
return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
|
|
9342
|
-
}
|
|
9343
|
-
function shouldDebugSyncIntentName(intentName) {
|
|
9344
|
-
return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
|
|
9345
|
-
}
|
|
9346
|
-
function summarizeSyncDebugValue(value, depth = 0) {
|
|
9347
|
-
if (value === null || value === void 0) {
|
|
9348
|
-
return value;
|
|
9349
|
-
}
|
|
9350
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
9351
|
-
return value;
|
|
9352
|
-
}
|
|
9353
|
-
if (value instanceof Set) {
|
|
9354
|
-
return {
|
|
9355
|
-
__type: "Set",
|
|
9356
|
-
size: value.size,
|
|
9357
|
-
values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
|
|
9358
|
-
};
|
|
9359
|
-
}
|
|
9360
|
-
if (value instanceof Map) {
|
|
9361
|
-
return {
|
|
9362
|
-
__type: "Map",
|
|
9363
|
-
size: value.size
|
|
9364
|
-
};
|
|
9365
|
-
}
|
|
9366
|
-
if (Array.isArray(value)) {
|
|
9367
|
-
return {
|
|
9368
|
-
__type: "Array",
|
|
9369
|
-
length: value.length,
|
|
9370
|
-
items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
|
|
9371
|
-
};
|
|
9372
|
-
}
|
|
9373
|
-
if (typeof value === "object") {
|
|
9374
|
-
if (depth >= 2) {
|
|
9375
|
-
return "[object]";
|
|
9376
|
-
}
|
|
9377
|
-
const output = {};
|
|
9378
|
-
const entries = Object.entries(value).filter(
|
|
9379
|
-
([key]) => ![
|
|
9380
|
-
"functionString",
|
|
9381
|
-
"tagIdGetter",
|
|
9382
|
-
"__functionString",
|
|
9383
|
-
"__getTagCallback",
|
|
9384
|
-
"joinedContexts",
|
|
9385
|
-
"task",
|
|
9386
|
-
"taskInstance",
|
|
9387
|
-
"tasks"
|
|
9388
|
-
].includes(key)
|
|
9389
|
-
).slice(0, 12);
|
|
9390
|
-
for (const [key, nestedValue] of entries) {
|
|
9391
|
-
output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
|
|
9392
|
-
}
|
|
9393
|
-
return output;
|
|
9394
|
-
}
|
|
9395
|
-
return String(value);
|
|
9396
|
-
}
|
|
9397
|
-
function logSyncDebug(event, payload) {
|
|
9398
|
-
console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
|
|
9399
|
-
}
|
|
9400
|
-
function buildTaskSyncDebugPayload(ctx) {
|
|
9401
|
-
const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
|
|
9402
|
-
const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
|
|
9403
|
-
const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
|
|
9404
|
-
const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
|
|
9405
|
-
const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
|
|
9406
|
-
const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
|
|
9407
|
-
const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
|
|
9408
|
-
const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
|
|
9409
|
-
return {
|
|
9410
|
-
taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
|
|
9411
|
-
serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
|
|
9412
|
-
functionStringLength: functionString?.length ?? null,
|
|
9413
|
-
tagIdGetterLength: tagIdGetter?.length ?? null,
|
|
9414
|
-
isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
|
|
9415
|
-
isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
|
|
9416
|
-
isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
|
|
9417
|
-
signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
|
|
9418
|
-
signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
|
|
9419
|
-
intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
|
|
9420
|
-
intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
|
|
9421
|
-
rowCount: ctx.rowCount ?? null,
|
|
9422
|
-
errored: ctx.errored ?? false,
|
|
9423
|
-
success: ctx.__success ?? null,
|
|
9424
|
-
error: ctx.__error ?? null
|
|
9425
|
-
};
|
|
9426
|
-
}
|
|
9427
|
-
function shouldDebugTaskSyncPayload(ctx) {
|
|
9428
|
-
const payload = buildTaskSyncDebugPayload(ctx);
|
|
9429
|
-
return shouldDebugSyncTaskName(payload.taskName);
|
|
9430
|
-
}
|
|
9431
9334
|
function resolveSyncQueryRows(ctx, tableName) {
|
|
9432
9335
|
const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
|
|
9433
9336
|
const rows = ctx?.[resultKey];
|
|
@@ -9874,16 +9777,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
9874
9777
|
if (!nextTask?.registered) {
|
|
9875
9778
|
continue;
|
|
9876
9779
|
}
|
|
9877
|
-
if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
|
|
9878
|
-
logSyncDebug("task_to_routine_split", {
|
|
9879
|
-
routineName: routine.name,
|
|
9880
|
-
routineVersion: routine.version,
|
|
9881
|
-
taskName: nextTask.name,
|
|
9882
|
-
taskVersion: nextTask.version,
|
|
9883
|
-
serviceName: serviceName2,
|
|
9884
|
-
registered: nextTask.registered
|
|
9885
|
-
});
|
|
9886
|
-
}
|
|
9887
9780
|
yield {
|
|
9888
9781
|
__syncing: ctx.__syncing,
|
|
9889
9782
|
data: {
|
|
@@ -10029,20 +9922,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10029
9922
|
if (task.registered) continue;
|
|
10030
9923
|
const { __functionString, __getTagCallback } = task.export();
|
|
10031
9924
|
this.tasksSynced = false;
|
|
10032
|
-
if (shouldDebugSyncTaskName(task.name)) {
|
|
10033
|
-
logSyncDebug("task_registration_split", {
|
|
10034
|
-
taskName: task.name,
|
|
10035
|
-
taskVersion: task.version,
|
|
10036
|
-
serviceName: serviceName2,
|
|
10037
|
-
register: task.register,
|
|
10038
|
-
registered: task.registered,
|
|
10039
|
-
hidden: task.hidden,
|
|
10040
|
-
exportFunctionLength: __functionString?.length ?? null,
|
|
10041
|
-
exportTagGetterLength: __getTagCallback?.length ?? null,
|
|
10042
|
-
observedSignals: Array.from(task.observedSignals),
|
|
10043
|
-
handledIntents: Array.from(task.handlesIntents)
|
|
10044
|
-
});
|
|
10045
|
-
}
|
|
10046
9925
|
yield {
|
|
10047
9926
|
__syncing: ctx.__syncing,
|
|
10048
9927
|
data: {
|
|
@@ -10097,13 +9976,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10097
9976
|
const registerTaskTask = CadenzaService.createMetaTask(
|
|
10098
9977
|
"Record registration",
|
|
10099
9978
|
(ctx, emit) => {
|
|
10100
|
-
if (shouldDebugSyncTaskName(ctx.__taskName)) {
|
|
10101
|
-
logSyncDebug("task_registration_result", {
|
|
10102
|
-
taskName: ctx.__taskName,
|
|
10103
|
-
success: didSyncInsertSucceed(ctx),
|
|
10104
|
-
ctx
|
|
10105
|
-
});
|
|
10106
|
-
}
|
|
10107
9979
|
if (!didSyncInsertSucceed(ctx)) {
|
|
10108
9980
|
return;
|
|
10109
9981
|
}
|
|
@@ -10129,16 +10001,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10129
10001
|
"Prepare created task for immediate sync",
|
|
10130
10002
|
(ctx) => {
|
|
10131
10003
|
const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
|
|
10132
|
-
if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
|
|
10133
|
-
logSyncDebug("task_created_for_immediate_sync", {
|
|
10134
|
-
incomingTaskName: ctx?.data?.name ?? null,
|
|
10135
|
-
resolvedTaskName: task?.name ?? null,
|
|
10136
|
-
exists: Boolean(task),
|
|
10137
|
-
hidden: task?.hidden ?? null,
|
|
10138
|
-
register: task?.register ?? null,
|
|
10139
|
-
registered: task?.registered ?? null
|
|
10140
|
-
});
|
|
10141
|
-
}
|
|
10142
10004
|
if (!task || task.hidden || !task.register || task.registered) {
|
|
10143
10005
|
return false;
|
|
10144
10006
|
}
|
|
@@ -10325,17 +10187,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10325
10187
|
if (!isGlobal) {
|
|
10326
10188
|
continue;
|
|
10327
10189
|
}
|
|
10328
|
-
if (shouldDebugSyncTaskName(task.name)) {
|
|
10329
|
-
logSyncDebug("signal_to_task_map_split", {
|
|
10330
|
-
taskName: task.name,
|
|
10331
|
-
signalName: _signal,
|
|
10332
|
-
rawSignal: signal,
|
|
10333
|
-
serviceName: serviceName2,
|
|
10334
|
-
observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
|
|
10335
|
-
_signal
|
|
10336
|
-
)?.registered
|
|
10337
|
-
});
|
|
10338
|
-
}
|
|
10339
10190
|
yield {
|
|
10340
10191
|
__syncing: ctx.__syncing,
|
|
10341
10192
|
data: {
|
|
@@ -10446,21 +10297,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10446
10297
|
}
|
|
10447
10298
|
task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
|
|
10448
10299
|
task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
|
|
10449
|
-
const shouldDebugTask = shouldDebugSyncTaskName(task.name);
|
|
10450
|
-
if (shouldDebugTask) {
|
|
10451
|
-
logSyncDebug("intent_map_task_state", {
|
|
10452
|
-
taskName: task.name,
|
|
10453
|
-
taskVersion: task.version,
|
|
10454
|
-
serviceName: serviceName2,
|
|
10455
|
-
registered: task.registered,
|
|
10456
|
-
register: task.register,
|
|
10457
|
-
hidden: task.hidden,
|
|
10458
|
-
handledIntents: Array.from(task.handlesIntents),
|
|
10459
|
-
registeredIntents: Array.from(task.__registeredIntents),
|
|
10460
|
-
tasksSynced: this.tasksSynced,
|
|
10461
|
-
intentsSynced: this.intentsSynced
|
|
10462
|
-
});
|
|
10463
|
-
}
|
|
10464
10300
|
let emittedCount = 0;
|
|
10465
10301
|
for (const intent of task.handlesIntents) {
|
|
10466
10302
|
if (task.__registeredIntents.has(intent)) continue;
|
|
@@ -10486,15 +10322,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10486
10322
|
if (!intentDefinition) {
|
|
10487
10323
|
continue;
|
|
10488
10324
|
}
|
|
10489
|
-
if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
|
|
10490
|
-
logSyncDebug("intent_to_task_map_split", {
|
|
10491
|
-
taskName: task.name,
|
|
10492
|
-
taskVersion: task.version,
|
|
10493
|
-
intentName: intent,
|
|
10494
|
-
serviceName: serviceName2,
|
|
10495
|
-
intentDefinition
|
|
10496
|
-
});
|
|
10497
|
-
}
|
|
10498
10325
|
yield {
|
|
10499
10326
|
__syncing: ctx.__syncing,
|
|
10500
10327
|
data: {
|
|
@@ -10515,15 +10342,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10515
10342
|
};
|
|
10516
10343
|
emittedCount += 1;
|
|
10517
10344
|
}
|
|
10518
|
-
if (shouldDebugTask && emittedCount === 0) {
|
|
10519
|
-
logSyncDebug("intent_map_task_noop", {
|
|
10520
|
-
taskName: task.name,
|
|
10521
|
-
taskVersion: task.version,
|
|
10522
|
-
serviceName: serviceName2,
|
|
10523
|
-
handledIntents: Array.from(task.handlesIntents),
|
|
10524
|
-
registeredIntents: Array.from(task.__registeredIntents)
|
|
10525
|
-
});
|
|
10526
|
-
}
|
|
10527
10345
|
return emittedCount > 0;
|
|
10528
10346
|
}.bind(this)
|
|
10529
10347
|
);
|
|
@@ -10533,13 +10351,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10533
10351
|
if (!ctx.__intentDefinition || !ctx.__intentMapData) {
|
|
10534
10352
|
return false;
|
|
10535
10353
|
}
|
|
10536
|
-
if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
|
|
10537
|
-
logSyncDebug("intent_definition_prepare", {
|
|
10538
|
-
taskName: ctx.__taskName,
|
|
10539
|
-
intentName: ctx.__intent,
|
|
10540
|
-
intentDefinition: ctx.__intentDefinition
|
|
10541
|
-
});
|
|
10542
|
-
}
|
|
10543
10354
|
return {
|
|
10544
10355
|
...ctx,
|
|
10545
10356
|
data: ctx.__intentDefinition
|
|
@@ -10552,13 +10363,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
10552
10363
|
if (!ctx.__intentMapData) {
|
|
10553
10364
|
return false;
|
|
10554
10365
|
}
|
|
10555
|
-
if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
|
|
10556
|
-
logSyncDebug("intent_map_payload_restore", {
|
|
10557
|
-
taskName: ctx.__taskName,
|
|
10558
|
-
intentName: ctx.__intent,
|
|
10559
|
-
intentMapData: ctx.__intentMapData
|
|
10560
|
-
});
|
|
10561
|
-
}
|
|
10562
10366
|
return {
|
|
10563
10367
|
...ctx,
|
|
10564
10368
|
data: ctx.__intentMapData
|
|
@@ -11380,6 +11184,13 @@ var CadenzaService = class {
|
|
|
11380
11184
|
if (this.isBootstrapped) return;
|
|
11381
11185
|
this.isBootstrapped = true;
|
|
11382
11186
|
Cadenza.bootstrap();
|
|
11187
|
+
Cadenza.setRuntimeInquiryDelegate(
|
|
11188
|
+
(inquiry, context, options) => this.inquire(
|
|
11189
|
+
inquiry,
|
|
11190
|
+
context,
|
|
11191
|
+
options ?? {}
|
|
11192
|
+
)
|
|
11193
|
+
);
|
|
11383
11194
|
this.signalBroker = Cadenza.signalBroker;
|
|
11384
11195
|
this.inquiryBroker = Cadenza.inquiryBroker;
|
|
11385
11196
|
this.runner = Cadenza.runner;
|
|
@@ -11388,7 +11199,7 @@ var CadenzaService = class {
|
|
|
11388
11199
|
this.serviceRegistry = ServiceRegistry.instance;
|
|
11389
11200
|
RestController.instance;
|
|
11390
11201
|
SocketController.instance;
|
|
11391
|
-
|
|
11202
|
+
RuntimeValidationController.instance;
|
|
11392
11203
|
}
|
|
11393
11204
|
static ensureTransportControllers(isFrontend) {
|
|
11394
11205
|
if (!isFrontend) {
|
|
@@ -11527,6 +11338,38 @@ var CadenzaService = class {
|
|
|
11527
11338
|
this.inquiryBroker?.addIntent(intent);
|
|
11528
11339
|
return intent;
|
|
11529
11340
|
}
|
|
11341
|
+
static getRuntimeValidationPolicy() {
|
|
11342
|
+
this.bootstrap();
|
|
11343
|
+
return Cadenza.getRuntimeValidationPolicy();
|
|
11344
|
+
}
|
|
11345
|
+
static setRuntimeValidationPolicy(policy = {}) {
|
|
11346
|
+
this.bootstrap();
|
|
11347
|
+
return Cadenza.setRuntimeValidationPolicy(policy);
|
|
11348
|
+
}
|
|
11349
|
+
static replaceRuntimeValidationPolicy(policy = {}) {
|
|
11350
|
+
this.bootstrap();
|
|
11351
|
+
return Cadenza.replaceRuntimeValidationPolicy(policy);
|
|
11352
|
+
}
|
|
11353
|
+
static clearRuntimeValidationPolicy() {
|
|
11354
|
+
this.bootstrap();
|
|
11355
|
+
Cadenza.clearRuntimeValidationPolicy();
|
|
11356
|
+
}
|
|
11357
|
+
static getRuntimeValidationScopes() {
|
|
11358
|
+
this.bootstrap();
|
|
11359
|
+
return Cadenza.getRuntimeValidationScopes();
|
|
11360
|
+
}
|
|
11361
|
+
static upsertRuntimeValidationScope(scope) {
|
|
11362
|
+
this.bootstrap();
|
|
11363
|
+
return Cadenza.upsertRuntimeValidationScope(scope);
|
|
11364
|
+
}
|
|
11365
|
+
static removeRuntimeValidationScope(id) {
|
|
11366
|
+
this.bootstrap();
|
|
11367
|
+
Cadenza.removeRuntimeValidationScope(id);
|
|
11368
|
+
}
|
|
11369
|
+
static clearRuntimeValidationScopes() {
|
|
11370
|
+
this.bootstrap();
|
|
11371
|
+
Cadenza.clearRuntimeValidationScopes();
|
|
11372
|
+
}
|
|
11530
11373
|
static getInquiryResponderDescriptor(task) {
|
|
11531
11374
|
return this.serviceRegistry.getInquiryResponderDescriptor(task);
|
|
11532
11375
|
}
|
|
@@ -12287,7 +12130,6 @@ var CadenzaService = class {
|
|
|
12287
12130
|
}
|
|
12288
12131
|
});
|
|
12289
12132
|
});
|
|
12290
|
-
console.log("Creating service...");
|
|
12291
12133
|
const initContext = {
|
|
12292
12134
|
data: {
|
|
12293
12135
|
name: serviceName,
|
|
@@ -12320,18 +12162,13 @@ var CadenzaService = class {
|
|
|
12320
12162
|
}).doOn("meta.fetch.handshake_complete");
|
|
12321
12163
|
} else {
|
|
12322
12164
|
this.emit("meta.create_service_requested", initContext);
|
|
12323
|
-
this.createMetaTask("Create signal transmission for sync", (ctx) => {
|
|
12324
|
-
|
|
12325
|
-
|
|
12326
|
-
|
|
12327
|
-
|
|
12328
|
-
|
|
12329
|
-
|
|
12330
|
-
});
|
|
12331
|
-
}
|
|
12332
|
-
this.createSignalTransmissionTask(
|
|
12333
|
-
"global.meta.cadenza_db.gathered_sync_data",
|
|
12334
|
-
ctx.serviceName
|
|
12165
|
+
this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
|
|
12166
|
+
emit(
|
|
12167
|
+
"meta.service_registry.gathered_sync_transmission_reconcile_requested",
|
|
12168
|
+
{
|
|
12169
|
+
serviceName: ctx.serviceName,
|
|
12170
|
+
__reason: "handshake"
|
|
12171
|
+
}
|
|
12335
12172
|
);
|
|
12336
12173
|
}).doOn("meta.rest.handshake", "meta.socket.handshake");
|
|
12337
12174
|
}
|
|
@@ -13326,6 +13163,8 @@ export {
|
|
|
13326
13163
|
EphemeralTask2 as EphemeralTask,
|
|
13327
13164
|
GraphMetadataController,
|
|
13328
13165
|
GraphRoutine2 as GraphRoutine,
|
|
13166
|
+
RUNTIME_VALIDATION_INTENTS,
|
|
13167
|
+
RUNTIME_VALIDATION_SIGNALS,
|
|
13329
13168
|
RestController,
|
|
13330
13169
|
ServiceRegistry,
|
|
13331
13170
|
SignalController,
|