@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/browser/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: uuid7,
|
|
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, uuid7, 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();
|
|
@@ -4891,10 +4837,14 @@ var SocketController = class _SocketController {
|
|
|
4891
4837
|
const communicationTypes = this.normalizeCommunicationTypes(
|
|
4892
4838
|
input.communicationTypes
|
|
4893
4839
|
);
|
|
4840
|
+
const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
|
|
4894
4841
|
const serviceName = String(input.serviceName ?? "");
|
|
4895
4842
|
const serviceTransportId = String(input.serviceTransportId ?? "");
|
|
4896
4843
|
const serviceOrigin = String(input.serviceOrigin ?? "");
|
|
4897
4844
|
const parsedOrigin = parseTransportOrigin(serviceOrigin);
|
|
4845
|
+
if (!transportProtocols.includes("socket")) {
|
|
4846
|
+
return false;
|
|
4847
|
+
}
|
|
4898
4848
|
if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
|
|
4899
4849
|
CadenzaService.log(
|
|
4900
4850
|
"Socket client setup skipped due to missing transport origin",
|
|
@@ -4920,7 +4870,7 @@ var SocketController = class _SocketController {
|
|
|
4920
4870
|
serviceName,
|
|
4921
4871
|
serviceTransportId,
|
|
4922
4872
|
serviceOrigin,
|
|
4923
|
-
transportProtocols
|
|
4873
|
+
transportProtocols,
|
|
4924
4874
|
url
|
|
4925
4875
|
});
|
|
4926
4876
|
};
|
|
@@ -4941,7 +4891,7 @@ var SocketController = class _SocketController {
|
|
|
4941
4891
|
serviceName,
|
|
4942
4892
|
serviceTransportId,
|
|
4943
4893
|
serviceOrigin,
|
|
4944
|
-
transportProtocols
|
|
4894
|
+
transportProtocols,
|
|
4945
4895
|
url,
|
|
4946
4896
|
destroyed: false,
|
|
4947
4897
|
updatedAt: Date.now()
|
|
@@ -5182,19 +5132,6 @@ var SocketController = class _SocketController {
|
|
|
5182
5132
|
});
|
|
5183
5133
|
});
|
|
5184
5134
|
socket.on("signal", (signalCtx, callback) => {
|
|
5185
|
-
if (signalCtx?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
5186
|
-
console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_socket", {
|
|
5187
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
5188
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
5189
|
-
signalName: signalCtx.__signalName,
|
|
5190
|
-
intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
|
|
5191
|
-
signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
|
|
5192
|
-
serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
|
|
5193
|
-
serviceInstanceTransports: Array.isArray(
|
|
5194
|
-
signalCtx.serviceInstanceTransports
|
|
5195
|
-
) ? signalCtx.serviceInstanceTransports.length : 0
|
|
5196
|
-
});
|
|
5197
|
-
}
|
|
5198
5135
|
if (CadenzaService.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {
|
|
5199
5136
|
if (isSocketAckCallback(callback)) {
|
|
5200
5137
|
callback({
|
|
@@ -5493,21 +5430,6 @@ var SocketController = class _SocketController {
|
|
|
5493
5430
|
if (signalCtx.__signalName === void 0) {
|
|
5494
5431
|
return;
|
|
5495
5432
|
}
|
|
5496
|
-
if (signalCtx.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
|
|
5497
|
-
console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_socket", {
|
|
5498
|
-
localServiceName: CadenzaService.serviceRegistry.serviceName,
|
|
5499
|
-
localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
5500
|
-
targetServiceName: serviceName,
|
|
5501
|
-
targetUrl: url,
|
|
5502
|
-
signalName: signalCtx.__signalName,
|
|
5503
|
-
intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
|
|
5504
|
-
signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
|
|
5505
|
-
serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
|
|
5506
|
-
serviceInstanceTransports: Array.isArray(
|
|
5507
|
-
signalCtx.serviceInstanceTransports
|
|
5508
|
-
) ? signalCtx.serviceInstanceTransports.length : 0
|
|
5509
|
-
});
|
|
5510
|
-
}
|
|
5511
5433
|
delete signalCtx.__broadcast;
|
|
5512
5434
|
const response = await runtimeHandle.emitWhenReady?.("signal", signalCtx, 5e3) ?? {
|
|
5513
5435
|
errored: true,
|
|
@@ -5548,7 +5470,7 @@ var SocketController = class _SocketController {
|
|
|
5548
5470
|
communicationTypes,
|
|
5549
5471
|
serviceTransportId,
|
|
5550
5472
|
serviceOrigin,
|
|
5551
|
-
transportProtocols
|
|
5473
|
+
transportProtocols,
|
|
5552
5474
|
handshakeData: {
|
|
5553
5475
|
instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
|
|
5554
5476
|
serviceName: CadenzaService.serviceRegistry.serviceName
|
|
@@ -5908,6 +5830,209 @@ var SignalController = class _SignalController {
|
|
|
5908
5830
|
}
|
|
5909
5831
|
};
|
|
5910
5832
|
|
|
5833
|
+
// src/runtime/RuntimeValidationController.ts
|
|
5834
|
+
var RUNTIME_VALIDATION_INTENTS = {
|
|
5835
|
+
getPolicy: "meta-runtime-validation-policy-get",
|
|
5836
|
+
setPolicy: "meta-runtime-validation-policy-set",
|
|
5837
|
+
replacePolicy: "meta-runtime-validation-policy-replace",
|
|
5838
|
+
clearPolicy: "meta-runtime-validation-policy-clear",
|
|
5839
|
+
listScopes: "meta-runtime-validation-scope-list",
|
|
5840
|
+
upsertScope: "meta-runtime-validation-scope-upsert",
|
|
5841
|
+
removeScope: "meta-runtime-validation-scope-remove",
|
|
5842
|
+
clearScopes: "meta-runtime-validation-scope-clear"
|
|
5843
|
+
};
|
|
5844
|
+
var RUNTIME_VALIDATION_SIGNALS = {
|
|
5845
|
+
setPolicyRequested: "meta.runtime_validation.policy_set_requested",
|
|
5846
|
+
replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
|
|
5847
|
+
clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
|
|
5848
|
+
upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
|
|
5849
|
+
removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
|
|
5850
|
+
clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
|
|
5851
|
+
policyUpdated: "meta.runtime_validation.policy_updated",
|
|
5852
|
+
policyCleared: "meta.runtime_validation.policy_cleared",
|
|
5853
|
+
scopeUpserted: "meta.runtime_validation.scope_upserted",
|
|
5854
|
+
scopeRemoved: "meta.runtime_validation.scope_removed",
|
|
5855
|
+
scopesCleared: "meta.runtime_validation.scopes_cleared"
|
|
5856
|
+
};
|
|
5857
|
+
function normalizePolicyContext(ctx) {
|
|
5858
|
+
const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
|
|
5859
|
+
const policy = {};
|
|
5860
|
+
for (const key of [
|
|
5861
|
+
"metaInput",
|
|
5862
|
+
"metaOutput",
|
|
5863
|
+
"businessInput",
|
|
5864
|
+
"businessOutput",
|
|
5865
|
+
"warnOnMissingMetaInputSchema",
|
|
5866
|
+
"warnOnMissingMetaOutputSchema",
|
|
5867
|
+
"warnOnMissingBusinessInputSchema",
|
|
5868
|
+
"warnOnMissingBusinessOutputSchema"
|
|
5869
|
+
]) {
|
|
5870
|
+
if (source[key] !== void 0) {
|
|
5871
|
+
policy[key] = source[key];
|
|
5872
|
+
}
|
|
5873
|
+
}
|
|
5874
|
+
return policy;
|
|
5875
|
+
}
|
|
5876
|
+
function normalizeScopeContext(ctx) {
|
|
5877
|
+
const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
|
|
5878
|
+
return {
|
|
5879
|
+
id: source.id,
|
|
5880
|
+
active: source.active,
|
|
5881
|
+
startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
|
|
5882
|
+
startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
|
|
5883
|
+
policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
|
|
5884
|
+
};
|
|
5885
|
+
}
|
|
5886
|
+
var RuntimeValidationController = class _RuntimeValidationController {
|
|
5887
|
+
static get instance() {
|
|
5888
|
+
if (!this._instance) {
|
|
5889
|
+
this._instance = new _RuntimeValidationController();
|
|
5890
|
+
}
|
|
5891
|
+
return this._instance;
|
|
5892
|
+
}
|
|
5893
|
+
constructor() {
|
|
5894
|
+
CadenzaService.defineIntent({
|
|
5895
|
+
name: RUNTIME_VALIDATION_INTENTS.getPolicy,
|
|
5896
|
+
description: "Get the active runtime validation policy.",
|
|
5897
|
+
input: { type: "object" },
|
|
5898
|
+
output: { type: "object" }
|
|
5899
|
+
});
|
|
5900
|
+
CadenzaService.defineIntent({
|
|
5901
|
+
name: RUNTIME_VALIDATION_INTENTS.setPolicy,
|
|
5902
|
+
description: "Merge fields into the active runtime validation policy.",
|
|
5903
|
+
input: { type: "object" },
|
|
5904
|
+
output: { type: "object" }
|
|
5905
|
+
});
|
|
5906
|
+
CadenzaService.defineIntent({
|
|
5907
|
+
name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
|
|
5908
|
+
description: "Replace the active runtime validation policy.",
|
|
5909
|
+
input: { type: "object" },
|
|
5910
|
+
output: { type: "object" }
|
|
5911
|
+
});
|
|
5912
|
+
CadenzaService.defineIntent({
|
|
5913
|
+
name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
|
|
5914
|
+
description: "Clear the active runtime validation policy.",
|
|
5915
|
+
input: { type: "object" },
|
|
5916
|
+
output: { type: "object" }
|
|
5917
|
+
});
|
|
5918
|
+
CadenzaService.defineIntent({
|
|
5919
|
+
name: RUNTIME_VALIDATION_INTENTS.listScopes,
|
|
5920
|
+
description: "List active runtime validation scopes.",
|
|
5921
|
+
input: { type: "object" },
|
|
5922
|
+
output: { type: "object" }
|
|
5923
|
+
});
|
|
5924
|
+
CadenzaService.defineIntent({
|
|
5925
|
+
name: RUNTIME_VALIDATION_INTENTS.upsertScope,
|
|
5926
|
+
description: "Create or update a runtime validation scope for targeted subflow validation.",
|
|
5927
|
+
input: { type: "object" },
|
|
5928
|
+
output: { type: "object" }
|
|
5929
|
+
});
|
|
5930
|
+
CadenzaService.defineIntent({
|
|
5931
|
+
name: RUNTIME_VALIDATION_INTENTS.removeScope,
|
|
5932
|
+
description: "Remove a runtime validation scope by id.",
|
|
5933
|
+
input: { type: "object" },
|
|
5934
|
+
output: { type: "object" }
|
|
5935
|
+
});
|
|
5936
|
+
CadenzaService.defineIntent({
|
|
5937
|
+
name: RUNTIME_VALIDATION_INTENTS.clearScopes,
|
|
5938
|
+
description: "Clear all runtime validation scopes.",
|
|
5939
|
+
input: { type: "object" },
|
|
5940
|
+
output: { type: "object" }
|
|
5941
|
+
});
|
|
5942
|
+
CadenzaService.createMetaTask("Get runtime validation policy", () => {
|
|
5943
|
+
return {
|
|
5944
|
+
policy: CadenzaService.getRuntimeValidationPolicy()
|
|
5945
|
+
};
|
|
5946
|
+
}).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
|
|
5947
|
+
CadenzaService.createMetaTask(
|
|
5948
|
+
"Set runtime validation policy",
|
|
5949
|
+
(ctx, emit) => {
|
|
5950
|
+
const policy = normalizePolicyContext(ctx);
|
|
5951
|
+
const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
|
|
5952
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
|
|
5953
|
+
policy: nextPolicy
|
|
5954
|
+
});
|
|
5955
|
+
return {
|
|
5956
|
+
policy: nextPolicy
|
|
5957
|
+
};
|
|
5958
|
+
},
|
|
5959
|
+
"Merges runtime validation policy fields at runtime."
|
|
5960
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
|
|
5961
|
+
CadenzaService.createMetaTask(
|
|
5962
|
+
"Replace runtime validation policy",
|
|
5963
|
+
(ctx, emit) => {
|
|
5964
|
+
const policy = normalizePolicyContext(ctx);
|
|
5965
|
+
const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
|
|
5966
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
|
|
5967
|
+
policy: nextPolicy
|
|
5968
|
+
});
|
|
5969
|
+
return {
|
|
5970
|
+
policy: nextPolicy
|
|
5971
|
+
};
|
|
5972
|
+
},
|
|
5973
|
+
"Replaces runtime validation policy fields at runtime."
|
|
5974
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
|
|
5975
|
+
CadenzaService.createMetaTask(
|
|
5976
|
+
"Clear runtime validation policy",
|
|
5977
|
+
(_ctx, emit) => {
|
|
5978
|
+
CadenzaService.clearRuntimeValidationPolicy();
|
|
5979
|
+
emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
|
|
5980
|
+
return {
|
|
5981
|
+
policy: CadenzaService.getRuntimeValidationPolicy()
|
|
5982
|
+
};
|
|
5983
|
+
},
|
|
5984
|
+
"Clears the runtime validation policy."
|
|
5985
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
|
|
5986
|
+
CadenzaService.createMetaTask("List runtime validation scopes", () => {
|
|
5987
|
+
return {
|
|
5988
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
5989
|
+
};
|
|
5990
|
+
}).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
|
|
5991
|
+
CadenzaService.createMetaTask(
|
|
5992
|
+
"Upsert runtime validation scope",
|
|
5993
|
+
(ctx, emit) => {
|
|
5994
|
+
const scope = normalizeScopeContext(ctx);
|
|
5995
|
+
const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
|
|
5996
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
|
|
5997
|
+
scope: nextScope
|
|
5998
|
+
});
|
|
5999
|
+
return {
|
|
6000
|
+
scope: nextScope
|
|
6001
|
+
};
|
|
6002
|
+
},
|
|
6003
|
+
"Upserts a runtime validation scope for targeted debugging."
|
|
6004
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
|
|
6005
|
+
CadenzaService.createMetaTask(
|
|
6006
|
+
"Remove runtime validation scope",
|
|
6007
|
+
(ctx, emit) => {
|
|
6008
|
+
if (!ctx.id) {
|
|
6009
|
+
throw new Error("Runtime validation scope id is required");
|
|
6010
|
+
}
|
|
6011
|
+
CadenzaService.removeRuntimeValidationScope(ctx.id);
|
|
6012
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
|
|
6013
|
+
id: ctx.id
|
|
6014
|
+
});
|
|
6015
|
+
return {
|
|
6016
|
+
id: ctx.id,
|
|
6017
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6018
|
+
};
|
|
6019
|
+
},
|
|
6020
|
+
"Removes a runtime validation scope."
|
|
6021
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
|
|
6022
|
+
CadenzaService.createMetaTask(
|
|
6023
|
+
"Clear runtime validation scopes",
|
|
6024
|
+
(_ctx, emit) => {
|
|
6025
|
+
CadenzaService.clearRuntimeValidationScopes();
|
|
6026
|
+
emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
|
|
6027
|
+
return {
|
|
6028
|
+
scopes: CadenzaService.getRuntimeValidationScopes()
|
|
6029
|
+
};
|
|
6030
|
+
},
|
|
6031
|
+
"Clears all runtime validation scopes."
|
|
6032
|
+
).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
|
|
6033
|
+
}
|
|
6034
|
+
};
|
|
6035
|
+
|
|
5911
6036
|
// src/graph/controllers/registerActorSessionPersistence.ts
|
|
5912
6037
|
import { META_ACTOR_SESSION_STATE_PERSIST_INTENT } from "@cadenza.io/core";
|
|
5913
6038
|
function registerActorSessionPersistenceTasks() {
|
|
@@ -6524,7 +6649,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
|
|
|
6524
6649
|
}
|
|
6525
6650
|
function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
|
|
6526
6651
|
const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
|
|
6527
|
-
const debugTable = shouldDebugSyncTable(tableName);
|
|
6528
6652
|
if (!localInsertTask && !isCadenzaDBReady) {
|
|
6529
6653
|
return void 0;
|
|
6530
6654
|
}
|
|
@@ -6537,16 +6661,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6537
6661
|
register: false,
|
|
6538
6662
|
isHidden: true
|
|
6539
6663
|
});
|
|
6540
|
-
if (debugTable) {
|
|
6541
|
-
logSyncDebug("insert_task_resolved", {
|
|
6542
|
-
tableName,
|
|
6543
|
-
localInsertTaskName: localInsertTask?.name ?? null,
|
|
6544
|
-
remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
|
|
6545
|
-
targetTaskName: targetTask.name,
|
|
6546
|
-
queryData,
|
|
6547
|
-
options
|
|
6548
|
-
});
|
|
6549
|
-
}
|
|
6550
6664
|
const prepareExecutionTask = CadenzaService.createMetaTask(
|
|
6551
6665
|
`Prepare graph sync insert for ${tableName}`,
|
|
6552
6666
|
(ctx) => {
|
|
@@ -6557,12 +6671,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6557
6671
|
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) {
|
|
6558
6672
|
console.warn(
|
|
6559
6673
|
"[CADENZA_SYNC_EMPTY_INSERT]",
|
|
6560
|
-
|
|
6674
|
+
{
|
|
6561
6675
|
tableName,
|
|
6562
6676
|
queryData: originalQueryData,
|
|
6563
6677
|
ctx,
|
|
6564
6678
|
joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
|
|
6565
|
-
}
|
|
6679
|
+
}
|
|
6566
6680
|
);
|
|
6567
6681
|
}
|
|
6568
6682
|
return buildSyncExecutionEnvelope(
|
|
@@ -6576,37 +6690,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6576
6690
|
isHidden: true
|
|
6577
6691
|
}
|
|
6578
6692
|
);
|
|
6579
|
-
if (debugTable) {
|
|
6580
|
-
prepareExecutionTask.then(
|
|
6581
|
-
CadenzaService.createMetaTask(
|
|
6582
|
-
`Log prepared graph sync insert execution for ${tableName}`,
|
|
6583
|
-
(ctx) => {
|
|
6584
|
-
if (tableName === "task") {
|
|
6585
|
-
if (!shouldDebugTaskSyncPayload(ctx)) {
|
|
6586
|
-
return ctx;
|
|
6587
|
-
}
|
|
6588
|
-
logSyncDebug("insert_prepare", {
|
|
6589
|
-
tableName,
|
|
6590
|
-
targetTaskName: targetTask.name,
|
|
6591
|
-
payload: buildTaskSyncDebugPayload(ctx)
|
|
6592
|
-
});
|
|
6593
|
-
return ctx;
|
|
6594
|
-
}
|
|
6595
|
-
logSyncDebug("insert_prepare", {
|
|
6596
|
-
tableName,
|
|
6597
|
-
targetTaskName: targetTask.name,
|
|
6598
|
-
ctx
|
|
6599
|
-
});
|
|
6600
|
-
return ctx;
|
|
6601
|
-
},
|
|
6602
|
-
`Logs prepared ${tableName} sync insert payloads.`,
|
|
6603
|
-
{
|
|
6604
|
-
register: false,
|
|
6605
|
-
isHidden: true
|
|
6606
|
-
}
|
|
6607
|
-
)
|
|
6608
|
-
);
|
|
6609
|
-
}
|
|
6610
6693
|
const finalizeExecutionTask = CadenzaService.createMetaTask(
|
|
6611
6694
|
`Finalize graph sync insert for ${tableName}`,
|
|
6612
6695
|
(ctx) => {
|
|
@@ -6617,25 +6700,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
|
|
|
6617
6700
|
...ctx,
|
|
6618
6701
|
queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
|
|
6619
6702
|
};
|
|
6620
|
-
if (debugTable) {
|
|
6621
|
-
if (tableName === "task") {
|
|
6622
|
-
if (shouldDebugTaskSyncPayload(normalizedContext)) {
|
|
6623
|
-
logSyncDebug("insert_finalize", {
|
|
6624
|
-
tableName,
|
|
6625
|
-
targetTaskName: targetTask.name,
|
|
6626
|
-
success: didSyncInsertSucceed(normalizedContext),
|
|
6627
|
-
payload: buildTaskSyncDebugPayload(normalizedContext)
|
|
6628
|
-
});
|
|
6629
|
-
}
|
|
6630
|
-
} else {
|
|
6631
|
-
logSyncDebug("insert_finalize", {
|
|
6632
|
-
tableName,
|
|
6633
|
-
targetTaskName: targetTask.name,
|
|
6634
|
-
success: didSyncInsertSucceed(normalizedContext),
|
|
6635
|
-
ctx: normalizedContext
|
|
6636
|
-
});
|
|
6637
|
-
}
|
|
6638
|
-
}
|
|
6639
6703
|
return normalizedContext;
|
|
6640
6704
|
},
|
|
6641
6705
|
`Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
|
|
@@ -6670,139 +6734,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
|
|
|
6670
6734
|
intent_registry: "intentRegistrys"
|
|
6671
6735
|
};
|
|
6672
6736
|
var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
|
|
6673
|
-
var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
|
|
6674
|
-
var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
|
|
6675
|
-
var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
|
|
6676
|
-
var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
|
|
6677
|
-
"Query service_instance",
|
|
6678
|
-
"Query service_instance_transport",
|
|
6679
|
-
"Query intent_to_task_map",
|
|
6680
|
-
"Query signal_to_task_map",
|
|
6681
|
-
"Prepare for signal sync",
|
|
6682
|
-
"Compile sync data and broadcast",
|
|
6683
|
-
"Forward service instance sync",
|
|
6684
|
-
"Forward service transport sync",
|
|
6685
|
-
"Forward intent to task map sync",
|
|
6686
|
-
"Forward signal to task map sync",
|
|
6687
|
-
"Normalize telemetry ingest payload",
|
|
6688
|
-
"Get telemetry session state",
|
|
6689
|
-
"Normalize anomaly detect input",
|
|
6690
|
-
"Read anomaly runtime session",
|
|
6691
|
-
"Normalize prediction compute input",
|
|
6692
|
-
"Normalize telemetry insert queryData"
|
|
6693
|
-
]);
|
|
6694
|
-
var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
|
|
6695
|
-
var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
|
|
6696
|
-
"meta-service-registry-full-sync",
|
|
6697
|
-
"runner-traffic-runtime-get",
|
|
6698
|
-
"iot-telemetry-ingest",
|
|
6699
|
-
"iot-telemetry-session-get",
|
|
6700
|
-
"iot-anomaly-detect",
|
|
6701
|
-
"iot-anomaly-runtime-get",
|
|
6702
|
-
"iot-prediction-compute",
|
|
6703
|
-
"iot-db-telemetry-insert",
|
|
6704
|
-
"query-pg-cadenza-db-postgres-actor-service_instance",
|
|
6705
|
-
"query-pg-cadenza-db-postgres-actor-service_instance_transport",
|
|
6706
|
-
"query-pg-cadenza-db-postgres-actor-intent_to_task_map",
|
|
6707
|
-
"query-pg-cadenza-db-postgres-actor-signal_to_task_map"
|
|
6708
|
-
]);
|
|
6709
|
-
function shouldDebugSyncTable(tableName) {
|
|
6710
|
-
return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
|
|
6711
|
-
}
|
|
6712
|
-
function shouldDebugSyncTaskName(taskName) {
|
|
6713
|
-
return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
|
|
6714
|
-
}
|
|
6715
|
-
function shouldDebugSyncRoutineName(routineName) {
|
|
6716
|
-
return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
|
|
6717
|
-
}
|
|
6718
|
-
function shouldDebugSyncIntentName(intentName) {
|
|
6719
|
-
return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
|
|
6720
|
-
}
|
|
6721
|
-
function summarizeSyncDebugValue(value, depth = 0) {
|
|
6722
|
-
if (value === null || value === void 0) {
|
|
6723
|
-
return value;
|
|
6724
|
-
}
|
|
6725
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
6726
|
-
return value;
|
|
6727
|
-
}
|
|
6728
|
-
if (value instanceof Set) {
|
|
6729
|
-
return {
|
|
6730
|
-
__type: "Set",
|
|
6731
|
-
size: value.size,
|
|
6732
|
-
values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
|
|
6733
|
-
};
|
|
6734
|
-
}
|
|
6735
|
-
if (value instanceof Map) {
|
|
6736
|
-
return {
|
|
6737
|
-
__type: "Map",
|
|
6738
|
-
size: value.size
|
|
6739
|
-
};
|
|
6740
|
-
}
|
|
6741
|
-
if (Array.isArray(value)) {
|
|
6742
|
-
return {
|
|
6743
|
-
__type: "Array",
|
|
6744
|
-
length: value.length,
|
|
6745
|
-
items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
|
|
6746
|
-
};
|
|
6747
|
-
}
|
|
6748
|
-
if (typeof value === "object") {
|
|
6749
|
-
if (depth >= 2) {
|
|
6750
|
-
return "[object]";
|
|
6751
|
-
}
|
|
6752
|
-
const output = {};
|
|
6753
|
-
const entries = Object.entries(value).filter(
|
|
6754
|
-
([key]) => ![
|
|
6755
|
-
"functionString",
|
|
6756
|
-
"tagIdGetter",
|
|
6757
|
-
"__functionString",
|
|
6758
|
-
"__getTagCallback",
|
|
6759
|
-
"joinedContexts",
|
|
6760
|
-
"task",
|
|
6761
|
-
"taskInstance",
|
|
6762
|
-
"tasks"
|
|
6763
|
-
].includes(key)
|
|
6764
|
-
).slice(0, 12);
|
|
6765
|
-
for (const [key, nestedValue] of entries) {
|
|
6766
|
-
output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
|
|
6767
|
-
}
|
|
6768
|
-
return output;
|
|
6769
|
-
}
|
|
6770
|
-
return String(value);
|
|
6771
|
-
}
|
|
6772
|
-
function logSyncDebug(event, payload) {
|
|
6773
|
-
console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
|
|
6774
|
-
}
|
|
6775
|
-
function buildTaskSyncDebugPayload(ctx) {
|
|
6776
|
-
const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
|
|
6777
|
-
const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
|
|
6778
|
-
const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
|
|
6779
|
-
const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
|
|
6780
|
-
const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
|
|
6781
|
-
const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
|
|
6782
|
-
const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
|
|
6783
|
-
const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
|
|
6784
|
-
return {
|
|
6785
|
-
taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
|
|
6786
|
-
serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
|
|
6787
|
-
functionStringLength: functionString?.length ?? null,
|
|
6788
|
-
tagIdGetterLength: tagIdGetter?.length ?? null,
|
|
6789
|
-
isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
|
|
6790
|
-
isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
|
|
6791
|
-
isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
|
|
6792
|
-
signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
|
|
6793
|
-
signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
|
|
6794
|
-
intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
|
|
6795
|
-
intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
|
|
6796
|
-
rowCount: ctx.rowCount ?? null,
|
|
6797
|
-
errored: ctx.errored ?? false,
|
|
6798
|
-
success: ctx.__success ?? null,
|
|
6799
|
-
error: ctx.__error ?? null
|
|
6800
|
-
};
|
|
6801
|
-
}
|
|
6802
|
-
function shouldDebugTaskSyncPayload(ctx) {
|
|
6803
|
-
const payload = buildTaskSyncDebugPayload(ctx);
|
|
6804
|
-
return shouldDebugSyncTaskName(payload.taskName);
|
|
6805
|
-
}
|
|
6806
6737
|
function resolveSyncQueryRows(ctx, tableName) {
|
|
6807
6738
|
const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
|
|
6808
6739
|
const rows = ctx?.[resultKey];
|
|
@@ -7249,16 +7180,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7249
7180
|
if (!nextTask?.registered) {
|
|
7250
7181
|
continue;
|
|
7251
7182
|
}
|
|
7252
|
-
if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
|
|
7253
|
-
logSyncDebug("task_to_routine_split", {
|
|
7254
|
-
routineName: routine.name,
|
|
7255
|
-
routineVersion: routine.version,
|
|
7256
|
-
taskName: nextTask.name,
|
|
7257
|
-
taskVersion: nextTask.version,
|
|
7258
|
-
serviceName: serviceName2,
|
|
7259
|
-
registered: nextTask.registered
|
|
7260
|
-
});
|
|
7261
|
-
}
|
|
7262
7183
|
yield {
|
|
7263
7184
|
__syncing: ctx.__syncing,
|
|
7264
7185
|
data: {
|
|
@@ -7404,20 +7325,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7404
7325
|
if (task.registered) continue;
|
|
7405
7326
|
const { __functionString, __getTagCallback } = task.export();
|
|
7406
7327
|
this.tasksSynced = false;
|
|
7407
|
-
if (shouldDebugSyncTaskName(task.name)) {
|
|
7408
|
-
logSyncDebug("task_registration_split", {
|
|
7409
|
-
taskName: task.name,
|
|
7410
|
-
taskVersion: task.version,
|
|
7411
|
-
serviceName: serviceName2,
|
|
7412
|
-
register: task.register,
|
|
7413
|
-
registered: task.registered,
|
|
7414
|
-
hidden: task.hidden,
|
|
7415
|
-
exportFunctionLength: __functionString?.length ?? null,
|
|
7416
|
-
exportTagGetterLength: __getTagCallback?.length ?? null,
|
|
7417
|
-
observedSignals: Array.from(task.observedSignals),
|
|
7418
|
-
handledIntents: Array.from(task.handlesIntents)
|
|
7419
|
-
});
|
|
7420
|
-
}
|
|
7421
7328
|
yield {
|
|
7422
7329
|
__syncing: ctx.__syncing,
|
|
7423
7330
|
data: {
|
|
@@ -7472,13 +7379,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7472
7379
|
const registerTaskTask = CadenzaService.createMetaTask(
|
|
7473
7380
|
"Record registration",
|
|
7474
7381
|
(ctx, emit) => {
|
|
7475
|
-
if (shouldDebugSyncTaskName(ctx.__taskName)) {
|
|
7476
|
-
logSyncDebug("task_registration_result", {
|
|
7477
|
-
taskName: ctx.__taskName,
|
|
7478
|
-
success: didSyncInsertSucceed(ctx),
|
|
7479
|
-
ctx
|
|
7480
|
-
});
|
|
7481
|
-
}
|
|
7482
7382
|
if (!didSyncInsertSucceed(ctx)) {
|
|
7483
7383
|
return;
|
|
7484
7384
|
}
|
|
@@ -7504,16 +7404,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7504
7404
|
"Prepare created task for immediate sync",
|
|
7505
7405
|
(ctx) => {
|
|
7506
7406
|
const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
|
|
7507
|
-
if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
|
|
7508
|
-
logSyncDebug("task_created_for_immediate_sync", {
|
|
7509
|
-
incomingTaskName: ctx?.data?.name ?? null,
|
|
7510
|
-
resolvedTaskName: task?.name ?? null,
|
|
7511
|
-
exists: Boolean(task),
|
|
7512
|
-
hidden: task?.hidden ?? null,
|
|
7513
|
-
register: task?.register ?? null,
|
|
7514
|
-
registered: task?.registered ?? null
|
|
7515
|
-
});
|
|
7516
|
-
}
|
|
7517
7407
|
if (!task || task.hidden || !task.register || task.registered) {
|
|
7518
7408
|
return false;
|
|
7519
7409
|
}
|
|
@@ -7700,17 +7590,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7700
7590
|
if (!isGlobal) {
|
|
7701
7591
|
continue;
|
|
7702
7592
|
}
|
|
7703
|
-
if (shouldDebugSyncTaskName(task.name)) {
|
|
7704
|
-
logSyncDebug("signal_to_task_map_split", {
|
|
7705
|
-
taskName: task.name,
|
|
7706
|
-
signalName: _signal,
|
|
7707
|
-
rawSignal: signal,
|
|
7708
|
-
serviceName: serviceName2,
|
|
7709
|
-
observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
|
|
7710
|
-
_signal
|
|
7711
|
-
)?.registered
|
|
7712
|
-
});
|
|
7713
|
-
}
|
|
7714
7593
|
yield {
|
|
7715
7594
|
__syncing: ctx.__syncing,
|
|
7716
7595
|
data: {
|
|
@@ -7821,21 +7700,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7821
7700
|
}
|
|
7822
7701
|
task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
|
|
7823
7702
|
task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
|
|
7824
|
-
const shouldDebugTask = shouldDebugSyncTaskName(task.name);
|
|
7825
|
-
if (shouldDebugTask) {
|
|
7826
|
-
logSyncDebug("intent_map_task_state", {
|
|
7827
|
-
taskName: task.name,
|
|
7828
|
-
taskVersion: task.version,
|
|
7829
|
-
serviceName: serviceName2,
|
|
7830
|
-
registered: task.registered,
|
|
7831
|
-
register: task.register,
|
|
7832
|
-
hidden: task.hidden,
|
|
7833
|
-
handledIntents: Array.from(task.handlesIntents),
|
|
7834
|
-
registeredIntents: Array.from(task.__registeredIntents),
|
|
7835
|
-
tasksSynced: this.tasksSynced,
|
|
7836
|
-
intentsSynced: this.intentsSynced
|
|
7837
|
-
});
|
|
7838
|
-
}
|
|
7839
7703
|
let emittedCount = 0;
|
|
7840
7704
|
for (const intent of task.handlesIntents) {
|
|
7841
7705
|
if (task.__registeredIntents.has(intent)) continue;
|
|
@@ -7861,15 +7725,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7861
7725
|
if (!intentDefinition) {
|
|
7862
7726
|
continue;
|
|
7863
7727
|
}
|
|
7864
|
-
if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
|
|
7865
|
-
logSyncDebug("intent_to_task_map_split", {
|
|
7866
|
-
taskName: task.name,
|
|
7867
|
-
taskVersion: task.version,
|
|
7868
|
-
intentName: intent,
|
|
7869
|
-
serviceName: serviceName2,
|
|
7870
|
-
intentDefinition
|
|
7871
|
-
});
|
|
7872
|
-
}
|
|
7873
7728
|
yield {
|
|
7874
7729
|
__syncing: ctx.__syncing,
|
|
7875
7730
|
data: {
|
|
@@ -7890,15 +7745,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7890
7745
|
};
|
|
7891
7746
|
emittedCount += 1;
|
|
7892
7747
|
}
|
|
7893
|
-
if (shouldDebugTask && emittedCount === 0) {
|
|
7894
|
-
logSyncDebug("intent_map_task_noop", {
|
|
7895
|
-
taskName: task.name,
|
|
7896
|
-
taskVersion: task.version,
|
|
7897
|
-
serviceName: serviceName2,
|
|
7898
|
-
handledIntents: Array.from(task.handlesIntents),
|
|
7899
|
-
registeredIntents: Array.from(task.__registeredIntents)
|
|
7900
|
-
});
|
|
7901
|
-
}
|
|
7902
7748
|
return emittedCount > 0;
|
|
7903
7749
|
}.bind(this)
|
|
7904
7750
|
);
|
|
@@ -7908,13 +7754,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7908
7754
|
if (!ctx.__intentDefinition || !ctx.__intentMapData) {
|
|
7909
7755
|
return false;
|
|
7910
7756
|
}
|
|
7911
|
-
if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
|
|
7912
|
-
logSyncDebug("intent_definition_prepare", {
|
|
7913
|
-
taskName: ctx.__taskName,
|
|
7914
|
-
intentName: ctx.__intent,
|
|
7915
|
-
intentDefinition: ctx.__intentDefinition
|
|
7916
|
-
});
|
|
7917
|
-
}
|
|
7918
7757
|
return {
|
|
7919
7758
|
...ctx,
|
|
7920
7759
|
data: ctx.__intentDefinition
|
|
@@ -7927,13 +7766,6 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
7927
7766
|
if (!ctx.__intentMapData) {
|
|
7928
7767
|
return false;
|
|
7929
7768
|
}
|
|
7930
|
-
if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
|
|
7931
|
-
logSyncDebug("intent_map_payload_restore", {
|
|
7932
|
-
taskName: ctx.__taskName,
|
|
7933
|
-
intentName: ctx.__intent,
|
|
7934
|
-
intentMapData: ctx.__intentMapData
|
|
7935
|
-
});
|
|
7936
|
-
}
|
|
7937
7769
|
return {
|
|
7938
7770
|
...ctx,
|
|
7939
7771
|
data: ctx.__intentMapData
|
|
@@ -8755,6 +8587,13 @@ var CadenzaService = class {
|
|
|
8755
8587
|
if (this.isBootstrapped) return;
|
|
8756
8588
|
this.isBootstrapped = true;
|
|
8757
8589
|
Cadenza.bootstrap();
|
|
8590
|
+
Cadenza.setRuntimeInquiryDelegate(
|
|
8591
|
+
(inquiry, context, options) => this.inquire(
|
|
8592
|
+
inquiry,
|
|
8593
|
+
context,
|
|
8594
|
+
options ?? {}
|
|
8595
|
+
)
|
|
8596
|
+
);
|
|
8758
8597
|
this.signalBroker = Cadenza.signalBroker;
|
|
8759
8598
|
this.inquiryBroker = Cadenza.inquiryBroker;
|
|
8760
8599
|
this.runner = Cadenza.runner;
|
|
@@ -8763,7 +8602,7 @@ var CadenzaService = class {
|
|
|
8763
8602
|
this.serviceRegistry = ServiceRegistry.instance;
|
|
8764
8603
|
RestController.instance;
|
|
8765
8604
|
SocketController.instance;
|
|
8766
|
-
|
|
8605
|
+
RuntimeValidationController.instance;
|
|
8767
8606
|
}
|
|
8768
8607
|
static ensureTransportControllers(isFrontend) {
|
|
8769
8608
|
if (!isFrontend) {
|
|
@@ -8902,6 +8741,38 @@ var CadenzaService = class {
|
|
|
8902
8741
|
this.inquiryBroker?.addIntent(intent);
|
|
8903
8742
|
return intent;
|
|
8904
8743
|
}
|
|
8744
|
+
static getRuntimeValidationPolicy() {
|
|
8745
|
+
this.bootstrap();
|
|
8746
|
+
return Cadenza.getRuntimeValidationPolicy();
|
|
8747
|
+
}
|
|
8748
|
+
static setRuntimeValidationPolicy(policy = {}) {
|
|
8749
|
+
this.bootstrap();
|
|
8750
|
+
return Cadenza.setRuntimeValidationPolicy(policy);
|
|
8751
|
+
}
|
|
8752
|
+
static replaceRuntimeValidationPolicy(policy = {}) {
|
|
8753
|
+
this.bootstrap();
|
|
8754
|
+
return Cadenza.replaceRuntimeValidationPolicy(policy);
|
|
8755
|
+
}
|
|
8756
|
+
static clearRuntimeValidationPolicy() {
|
|
8757
|
+
this.bootstrap();
|
|
8758
|
+
Cadenza.clearRuntimeValidationPolicy();
|
|
8759
|
+
}
|
|
8760
|
+
static getRuntimeValidationScopes() {
|
|
8761
|
+
this.bootstrap();
|
|
8762
|
+
return Cadenza.getRuntimeValidationScopes();
|
|
8763
|
+
}
|
|
8764
|
+
static upsertRuntimeValidationScope(scope) {
|
|
8765
|
+
this.bootstrap();
|
|
8766
|
+
return Cadenza.upsertRuntimeValidationScope(scope);
|
|
8767
|
+
}
|
|
8768
|
+
static removeRuntimeValidationScope(id) {
|
|
8769
|
+
this.bootstrap();
|
|
8770
|
+
Cadenza.removeRuntimeValidationScope(id);
|
|
8771
|
+
}
|
|
8772
|
+
static clearRuntimeValidationScopes() {
|
|
8773
|
+
this.bootstrap();
|
|
8774
|
+
Cadenza.clearRuntimeValidationScopes();
|
|
8775
|
+
}
|
|
8905
8776
|
static getInquiryResponderDescriptor(task) {
|
|
8906
8777
|
return this.serviceRegistry.getInquiryResponderDescriptor(task);
|
|
8907
8778
|
}
|
|
@@ -9662,7 +9533,6 @@ var CadenzaService = class {
|
|
|
9662
9533
|
}
|
|
9663
9534
|
});
|
|
9664
9535
|
});
|
|
9665
|
-
console.log("Creating service...");
|
|
9666
9536
|
const initContext = {
|
|
9667
9537
|
data: {
|
|
9668
9538
|
name: serviceName,
|
|
@@ -9695,18 +9565,13 @@ var CadenzaService = class {
|
|
|
9695
9565
|
}).doOn("meta.fetch.handshake_complete");
|
|
9696
9566
|
} else {
|
|
9697
9567
|
this.emit("meta.create_service_requested", initContext);
|
|
9698
|
-
this.createMetaTask("Create signal transmission for sync", (ctx) => {
|
|
9699
|
-
|
|
9700
|
-
|
|
9701
|
-
|
|
9702
|
-
|
|
9703
|
-
|
|
9704
|
-
|
|
9705
|
-
});
|
|
9706
|
-
}
|
|
9707
|
-
this.createSignalTransmissionTask(
|
|
9708
|
-
"global.meta.cadenza_db.gathered_sync_data",
|
|
9709
|
-
ctx.serviceName
|
|
9568
|
+
this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
|
|
9569
|
+
emit(
|
|
9570
|
+
"meta.service_registry.gathered_sync_transmission_reconcile_requested",
|
|
9571
|
+
{
|
|
9572
|
+
serviceName: ctx.serviceName,
|
|
9573
|
+
__reason: "handshake"
|
|
9574
|
+
}
|
|
9710
9575
|
);
|
|
9711
9576
|
}).doOn("meta.rest.handshake", "meta.socket.handshake");
|
|
9712
9577
|
}
|
|
@@ -10701,6 +10566,8 @@ export {
|
|
|
10701
10566
|
EphemeralTask2 as EphemeralTask,
|
|
10702
10567
|
GraphMetadataController,
|
|
10703
10568
|
GraphRoutine2 as GraphRoutine,
|
|
10569
|
+
RUNTIME_VALIDATION_INTENTS,
|
|
10570
|
+
RUNTIME_VALIDATION_SIGNALS,
|
|
10704
10571
|
RestController,
|
|
10705
10572
|
ServiceRegistry,
|
|
10706
10573
|
SignalController,
|