@cadenza.io/service 2.17.8 → 2.17.10
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 +196 -32
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +196 -32
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +284 -71
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +284 -71
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -382,16 +382,16 @@ function normalizeServiceTransportConfig(value) {
|
|
|
382
382
|
}
|
|
383
383
|
function normalizeServiceTransportDescriptor(value) {
|
|
384
384
|
const raw = value ?? {};
|
|
385
|
-
const
|
|
385
|
+
const uuid6 = normalizeString(raw.uuid);
|
|
386
386
|
const serviceInstanceId = normalizeString(
|
|
387
387
|
raw.serviceInstanceId ?? raw.service_instance_id
|
|
388
388
|
);
|
|
389
389
|
const config = normalizeServiceTransportConfig(raw);
|
|
390
|
-
if (!
|
|
390
|
+
if (!uuid6 || !serviceInstanceId || !config) {
|
|
391
391
|
return null;
|
|
392
392
|
}
|
|
393
393
|
return {
|
|
394
|
-
uuid:
|
|
394
|
+
uuid: uuid6,
|
|
395
395
|
serviceInstanceId,
|
|
396
396
|
role: config.role,
|
|
397
397
|
origin: config.origin,
|
|
@@ -453,14 +453,14 @@ function normalizeTransportArray(value, serviceInstanceId) {
|
|
|
453
453
|
}
|
|
454
454
|
function normalizeServiceInstanceDescriptor(value) {
|
|
455
455
|
const raw = value ?? {};
|
|
456
|
-
const
|
|
456
|
+
const uuid6 = normalizeString2(raw.uuid);
|
|
457
457
|
const serviceName = normalizeString2(raw.serviceName ?? raw.service_name);
|
|
458
|
-
if (!
|
|
458
|
+
if (!uuid6 || !serviceName) {
|
|
459
459
|
return null;
|
|
460
460
|
}
|
|
461
|
-
const transports = normalizeTransportArray(raw.transports,
|
|
461
|
+
const transports = normalizeTransportArray(raw.transports, uuid6);
|
|
462
462
|
return {
|
|
463
|
-
uuid:
|
|
463
|
+
uuid: uuid6,
|
|
464
464
|
serviceName,
|
|
465
465
|
numberOfRunningGraphs: Math.max(
|
|
466
466
|
0,
|
|
@@ -903,15 +903,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
903
903
|
if (!serviceInstance) {
|
|
904
904
|
return false;
|
|
905
905
|
}
|
|
906
|
-
const
|
|
906
|
+
const uuid6 = serviceInstance.uuid;
|
|
907
907
|
const serviceName = serviceInstance.serviceName;
|
|
908
908
|
const deleted = Boolean(
|
|
909
909
|
ctx.deleted ?? ctx.serviceInstance?.deleted ?? ctx.data?.deleted
|
|
910
910
|
);
|
|
911
|
-
if (
|
|
911
|
+
if (uuid6 === this.serviceInstanceId) return;
|
|
912
912
|
if (deleted) {
|
|
913
|
-
const existingInstance = this.instances.get(serviceName)?.find((instance) => instance.uuid ===
|
|
914
|
-
const indexToDelete = this.instances.get(serviceName)?.findIndex((i) => i.uuid ===
|
|
913
|
+
const existingInstance = this.instances.get(serviceName)?.find((instance) => instance.uuid === uuid6);
|
|
914
|
+
const indexToDelete = this.instances.get(serviceName)?.findIndex((i) => i.uuid === uuid6) ?? -1;
|
|
915
915
|
if (indexToDelete >= 0 && existingInstance) {
|
|
916
916
|
this.instances.get(serviceName)?.splice(indexToDelete, 1);
|
|
917
917
|
for (const transport of existingInstance.transports) {
|
|
@@ -923,13 +923,13 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
923
923
|
if (this.instances.get(serviceName)?.length === 0) {
|
|
924
924
|
this.instances.delete(serviceName);
|
|
925
925
|
}
|
|
926
|
-
this.unregisterDependee(
|
|
926
|
+
this.unregisterDependee(uuid6, serviceName);
|
|
927
927
|
return;
|
|
928
928
|
}
|
|
929
929
|
if (!this.instances.has(serviceName))
|
|
930
930
|
this.instances.set(serviceName, []);
|
|
931
931
|
const instances = this.instances.get(serviceName);
|
|
932
|
-
const existing = instances.find((i) => i.uuid ===
|
|
932
|
+
const existing = instances.find((i) => i.uuid === uuid6);
|
|
933
933
|
if (existing) {
|
|
934
934
|
Object.assign(existing, {
|
|
935
935
|
...serviceInstance,
|
|
@@ -939,7 +939,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
939
939
|
} else {
|
|
940
940
|
instances.push(serviceInstance);
|
|
941
941
|
}
|
|
942
|
-
const trackedInstance = existing ?? instances.find((instance) => instance.uuid ===
|
|
942
|
+
const trackedInstance = existing ?? instances.find((instance) => instance.uuid === uuid6);
|
|
943
943
|
if (trackedInstance) {
|
|
944
944
|
const snapshot = this.resolveRuntimeStatusSnapshot(
|
|
945
945
|
trackedInstance.numberOfRunningGraphs ?? 0,
|
|
@@ -952,7 +952,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
952
952
|
trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
953
953
|
}
|
|
954
954
|
if (!serviceInstance.isBootstrapPlaceholder) {
|
|
955
|
-
this.reconcileBootstrapPlaceholderInstance(serviceName,
|
|
955
|
+
this.reconcileBootstrapPlaceholderInstance(serviceName, uuid6, emit);
|
|
956
956
|
}
|
|
957
957
|
if (this.serviceName === serviceName) {
|
|
958
958
|
return false;
|
|
@@ -978,7 +978,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
978
978
|
if (!clientCreated) {
|
|
979
979
|
emit("meta.service_registry.dependee_registered", {
|
|
980
980
|
serviceName,
|
|
981
|
-
serviceInstanceId:
|
|
981
|
+
serviceInstanceId: uuid6,
|
|
982
982
|
serviceTransportId: trackedTransport.uuid,
|
|
983
983
|
serviceOrigin: trackedTransport.origin,
|
|
984
984
|
transportProtocols: trackedTransport.protocols,
|
|
@@ -992,7 +992,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
992
992
|
} else {
|
|
993
993
|
emit("meta.service_registry.routeable_transport_missing", {
|
|
994
994
|
serviceName,
|
|
995
|
-
serviceInstanceId:
|
|
995
|
+
serviceInstanceId: uuid6,
|
|
996
996
|
requiredRole: this.getRoutingTransportRole(),
|
|
997
997
|
isFrontend: this.isFrontend
|
|
998
998
|
});
|
|
@@ -3233,6 +3233,7 @@ import http from "http";
|
|
|
3233
3233
|
import fs from "fs";
|
|
3234
3234
|
import https from "https";
|
|
3235
3235
|
import fetch from "node-fetch";
|
|
3236
|
+
import { v4 as uuid3 } from "uuid";
|
|
3236
3237
|
var RestController = class _RestController {
|
|
3237
3238
|
/**
|
|
3238
3239
|
* Constructor for initializing the REST server and related configurations.
|
|
@@ -3594,7 +3595,7 @@ var RestController = class _RestController {
|
|
|
3594
3595
|
const internalOrigin = httpOrigin ?? httpsOrigin;
|
|
3595
3596
|
if (internalOrigin) {
|
|
3596
3597
|
transportData.unshift({
|
|
3597
|
-
uuid:
|
|
3598
|
+
uuid: uuid3(),
|
|
3598
3599
|
service_instance_id: ctx.__serviceInstanceId,
|
|
3599
3600
|
role: "internal",
|
|
3600
3601
|
origin: internalOrigin,
|
|
@@ -5778,6 +5779,13 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
5778
5779
|
};
|
|
5779
5780
|
}).doOn("meta.task.layer_index_changed", "meta.task.destroyed").emits("global.meta.graph_metadata.task_updated");
|
|
5780
5781
|
CadenzaService.createMetaTask("Handle task relationship creation", (ctx) => {
|
|
5782
|
+
const taskName = ctx.data?.taskName ?? ctx.data?.task_name;
|
|
5783
|
+
const predecessorTaskName = ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;
|
|
5784
|
+
const task = taskName ? CadenzaService.get(taskName) : void 0;
|
|
5785
|
+
const predecessorTask = predecessorTaskName ? CadenzaService.get(predecessorTaskName) : void 0;
|
|
5786
|
+
if (!task?.registered || !predecessorTask?.registered) {
|
|
5787
|
+
return false;
|
|
5788
|
+
}
|
|
5781
5789
|
return {
|
|
5782
5790
|
data: {
|
|
5783
5791
|
...ctx.data,
|
|
@@ -6054,6 +6062,13 @@ function defaultOperationIntentDescription(operation, tableName) {
|
|
|
6054
6062
|
function isExplicitSqlLiteral(value) {
|
|
6055
6063
|
return /^'.*'::[a-z_][a-z0-9_]*(\[\])?$/i.test(value.trim());
|
|
6056
6064
|
}
|
|
6065
|
+
function extractExplicitJsonLiteral(value) {
|
|
6066
|
+
const match = /^'(.*)'::jsonb$/i.exec(value.trim());
|
|
6067
|
+
if (!match) {
|
|
6068
|
+
return null;
|
|
6069
|
+
}
|
|
6070
|
+
return match[1].replace(/''/g, "'");
|
|
6071
|
+
}
|
|
6057
6072
|
function isExplicitSqlExpression(value) {
|
|
6058
6073
|
const trimmed = value.trim();
|
|
6059
6074
|
if (!trimmed) {
|
|
@@ -6112,6 +6127,24 @@ function serializeInitialDataValueForSql(value, field) {
|
|
|
6112
6127
|
}
|
|
6113
6128
|
return `'${stringValue.replace(/'/g, "''")}'`;
|
|
6114
6129
|
}
|
|
6130
|
+
function serializeFieldValueForQuery(value, field) {
|
|
6131
|
+
if (value === void 0 || value === null || field?.type !== "jsonb") {
|
|
6132
|
+
return value;
|
|
6133
|
+
}
|
|
6134
|
+
if (typeof value === "string") {
|
|
6135
|
+
const explicitJsonLiteral = extractExplicitJsonLiteral(value);
|
|
6136
|
+
if (explicitJsonLiteral !== null) {
|
|
6137
|
+
return explicitJsonLiteral;
|
|
6138
|
+
}
|
|
6139
|
+
try {
|
|
6140
|
+
JSON.parse(value);
|
|
6141
|
+
return value;
|
|
6142
|
+
} catch {
|
|
6143
|
+
return JSON.stringify(value);
|
|
6144
|
+
}
|
|
6145
|
+
}
|
|
6146
|
+
return JSON.stringify(value);
|
|
6147
|
+
}
|
|
6115
6148
|
function readCustomIntentConfig(customIntent) {
|
|
6116
6149
|
if (typeof customIntent === "string") {
|
|
6117
6150
|
return {
|
|
@@ -6793,18 +6826,28 @@ var DatabaseController = class _DatabaseController {
|
|
|
6793
6826
|
throw new Error("No rows available for insert after resolving data");
|
|
6794
6827
|
}
|
|
6795
6828
|
const keys = Object.keys(rows[0]);
|
|
6829
|
+
const tableFields = registration.schema.tables[tableName]?.fields ?? {};
|
|
6796
6830
|
const sqlPrefix = `INSERT INTO ${tableName} (${keys.map((key) => snakeCase(key)).join(", ")}) VALUES `;
|
|
6797
6831
|
const params = [];
|
|
6798
6832
|
const placeholders = rows.map((row) => {
|
|
6799
6833
|
const tuple = keys.map((key) => {
|
|
6800
|
-
params.push(
|
|
6834
|
+
params.push(
|
|
6835
|
+
serializeFieldValueForQuery(
|
|
6836
|
+
row[key],
|
|
6837
|
+
this.getFieldDefinitionForKey(tableFields, key)
|
|
6838
|
+
)
|
|
6839
|
+
);
|
|
6801
6840
|
return `$${params.length}`;
|
|
6802
6841
|
}).join(", ");
|
|
6803
6842
|
return `(${tuple})`;
|
|
6804
6843
|
}).join(", ");
|
|
6805
6844
|
let onConflictSql = "";
|
|
6806
6845
|
if (onConflict) {
|
|
6807
|
-
onConflictSql = this.buildOnConflictClause(
|
|
6846
|
+
onConflictSql = this.buildOnConflictClause(
|
|
6847
|
+
onConflict,
|
|
6848
|
+
params,
|
|
6849
|
+
tableFields
|
|
6850
|
+
);
|
|
6808
6851
|
}
|
|
6809
6852
|
const sql = `${sqlPrefix}${placeholders}${onConflictSql} RETURNING ${fields.length ? fields.map(snakeCase).join(", ") : "*"}`;
|
|
6810
6853
|
const result = await this.withTimeout(
|
|
@@ -6852,27 +6895,26 @@ var DatabaseController = class _DatabaseController {
|
|
|
6852
6895
|
data,
|
|
6853
6896
|
tableName
|
|
6854
6897
|
);
|
|
6855
|
-
const
|
|
6856
|
-
|
|
6857
|
-
const setClause = Object.keys(resolvedData).map((key
|
|
6898
|
+
const tableFields = registration.schema.tables[tableName]?.fields ?? {};
|
|
6899
|
+
const params = [];
|
|
6900
|
+
const setClause = Object.keys(resolvedData).map((key) => {
|
|
6858
6901
|
const value = resolvedData[key];
|
|
6859
|
-
const offsetIndex = index - offset;
|
|
6860
6902
|
if (value?.__effect === "increment") {
|
|
6861
|
-
params.splice(offsetIndex, 1);
|
|
6862
|
-
offset += 1;
|
|
6863
6903
|
return `${snakeCase(key)} = ${snakeCase(key)} + 1`;
|
|
6864
6904
|
}
|
|
6865
6905
|
if (value?.__effect === "decrement") {
|
|
6866
|
-
params.splice(offsetIndex, 1);
|
|
6867
|
-
offset += 1;
|
|
6868
6906
|
return `${snakeCase(key)} = ${snakeCase(key)} - 1`;
|
|
6869
6907
|
}
|
|
6870
6908
|
if (value?.__effect === "set") {
|
|
6871
|
-
params.splice(offsetIndex, 1);
|
|
6872
|
-
offset += 1;
|
|
6873
6909
|
return `${snakeCase(key)} = ${value.__value}`;
|
|
6874
6910
|
}
|
|
6875
|
-
|
|
6911
|
+
params.push(
|
|
6912
|
+
serializeFieldValueForQuery(
|
|
6913
|
+
value,
|
|
6914
|
+
this.getFieldDefinitionForKey(tableFields, key)
|
|
6915
|
+
)
|
|
6916
|
+
);
|
|
6917
|
+
return `${snakeCase(key)} = $${params.length}`;
|
|
6876
6918
|
}).join(", ");
|
|
6877
6919
|
const whereClause = this.buildWhereClause(filter, params);
|
|
6878
6920
|
const sql = `UPDATE ${tableName} SET ${setClause} ${whereClause} RETURNING *`;
|
|
@@ -6961,7 +7003,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
6961
7003
|
retryDelayFactor: Number.isFinite(durableState.safetyPolicy?.retryDelayFactor) ? Math.max(1, Number(durableState.safetyPolicy?.retryDelayFactor)) : 1
|
|
6962
7004
|
};
|
|
6963
7005
|
}
|
|
6964
|
-
buildOnConflictClause(onConflict, params) {
|
|
7006
|
+
buildOnConflictClause(onConflict, params, tableFields) {
|
|
6965
7007
|
const { target, action } = onConflict;
|
|
6966
7008
|
let sql = ` ON CONFLICT (${target.map(snakeCase).join(", ")})`;
|
|
6967
7009
|
if (action.do === "update") {
|
|
@@ -6972,7 +7014,12 @@ var DatabaseController = class _DatabaseController {
|
|
|
6972
7014
|
if (typeof value === "string" && value === "excluded") {
|
|
6973
7015
|
return `${snakeCase(field)} = excluded.${snakeCase(field)}`;
|
|
6974
7016
|
}
|
|
6975
|
-
params.push(
|
|
7017
|
+
params.push(
|
|
7018
|
+
serializeFieldValueForQuery(
|
|
7019
|
+
value,
|
|
7020
|
+
this.getFieldDefinitionForKey(tableFields, field)
|
|
7021
|
+
)
|
|
7022
|
+
);
|
|
6976
7023
|
return `${snakeCase(field)} = $${params.length}`;
|
|
6977
7024
|
});
|
|
6978
7025
|
sql += ` DO UPDATE SET ${assignments.join(", ")}`;
|
|
@@ -6984,6 +7031,9 @@ var DatabaseController = class _DatabaseController {
|
|
|
6984
7031
|
sql += " DO NOTHING";
|
|
6985
7032
|
return sql;
|
|
6986
7033
|
}
|
|
7034
|
+
getFieldDefinitionForKey(fields, key) {
|
|
7035
|
+
return fields[key] ?? fields[snakeCase(key)];
|
|
7036
|
+
}
|
|
6987
7037
|
/**
|
|
6988
7038
|
* Validates database schema structure and content.
|
|
6989
7039
|
*/
|
|
@@ -7605,7 +7655,13 @@ var DatabaseController = class _DatabaseController {
|
|
|
7605
7655
|
);
|
|
7606
7656
|
const row = ensurePlainObject(resolvedData, "sub-operation insert data");
|
|
7607
7657
|
const keys = Object.keys(row);
|
|
7608
|
-
const
|
|
7658
|
+
const tableFields = registration.schema.tables[operation.table]?.fields ?? {};
|
|
7659
|
+
const params = keys.map(
|
|
7660
|
+
(key) => serializeFieldValueForQuery(
|
|
7661
|
+
row[key],
|
|
7662
|
+
this.getFieldDefinitionForKey(tableFields, key)
|
|
7663
|
+
)
|
|
7664
|
+
);
|
|
7609
7665
|
const sql2 = `INSERT INTO ${operation.table} (${keys.map((key) => snakeCase(key)).join(", ")}) VALUES (${params.map((_, index) => `$${index + 1}`).join(", ")}) ON CONFLICT DO NOTHING RETURNING ${operation.return ?? "*"}`;
|
|
7610
7666
|
const result2 = await this.withTimeout(
|
|
7611
7667
|
() => client.query(sql2, params),
|
|
@@ -7955,7 +8011,7 @@ function tableFieldTypeToSchemaType(type) {
|
|
|
7955
8011
|
}
|
|
7956
8012
|
|
|
7957
8013
|
// src/Cadenza.ts
|
|
7958
|
-
import { v4 as
|
|
8014
|
+
import { v4 as uuid4 } from "uuid";
|
|
7959
8015
|
|
|
7960
8016
|
// src/graph/controllers/GraphSyncController.ts
|
|
7961
8017
|
var ACTOR_TASK_METADATA = /* @__PURE__ */ Symbol.for("@cadenza.io/core/actor-task-meta");
|
|
@@ -8017,10 +8073,29 @@ function buildActorRegistrationData(actor) {
|
|
|
8017
8073
|
version: 1
|
|
8018
8074
|
};
|
|
8019
8075
|
}
|
|
8076
|
+
function resolveSyncServiceName(task) {
|
|
8077
|
+
const taskServiceName = typeof task?.serviceName === "string" ? task.serviceName.trim() : "";
|
|
8078
|
+
const registryServiceName = typeof CadenzaService.serviceRegistry.serviceName === "string" ? CadenzaService.serviceRegistry.serviceName.trim() : "";
|
|
8079
|
+
return taskServiceName || registryServiceName || void 0;
|
|
8080
|
+
}
|
|
8081
|
+
function buildIntentRegistryData(intent) {
|
|
8082
|
+
const name = String(intent?.name ?? "").trim();
|
|
8083
|
+
if (!name) {
|
|
8084
|
+
return null;
|
|
8085
|
+
}
|
|
8086
|
+
return {
|
|
8087
|
+
name,
|
|
8088
|
+
description: typeof intent?.description === "string" ? intent.description : "",
|
|
8089
|
+
input: intent?.input && typeof intent.input === "object" ? intent.input : { type: "object" },
|
|
8090
|
+
output: intent?.output && typeof intent.output === "object" ? intent.output : { type: "object" },
|
|
8091
|
+
isMeta: isMetaIntentName(name)
|
|
8092
|
+
};
|
|
8093
|
+
}
|
|
8020
8094
|
var GraphSyncController = class _GraphSyncController {
|
|
8021
8095
|
constructor() {
|
|
8022
8096
|
this.registeredActors = /* @__PURE__ */ new Set();
|
|
8023
8097
|
this.registeredActorTaskMaps = /* @__PURE__ */ new Set();
|
|
8098
|
+
this.registeredIntentDefinitions = /* @__PURE__ */ new Set();
|
|
8024
8099
|
this.isCadenzaDBReady = false;
|
|
8025
8100
|
}
|
|
8026
8101
|
static get instance() {
|
|
@@ -8028,11 +8103,27 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8028
8103
|
return this._instance;
|
|
8029
8104
|
}
|
|
8030
8105
|
init() {
|
|
8106
|
+
const insertIntentRegistryTask = this.isCadenzaDBReady ? CadenzaService.createCadenzaDBInsertTask(
|
|
8107
|
+
"intent_registry",
|
|
8108
|
+
{
|
|
8109
|
+
onConflict: {
|
|
8110
|
+
target: ["name"],
|
|
8111
|
+
action: {
|
|
8112
|
+
do: "nothing"
|
|
8113
|
+
}
|
|
8114
|
+
}
|
|
8115
|
+
},
|
|
8116
|
+
{ concurrency: 30 }
|
|
8117
|
+
) : CadenzaService.get("dbInsertIntentRegistry");
|
|
8031
8118
|
this.splitRoutinesTask = CadenzaService.createMetaTask(
|
|
8032
8119
|
"Split routines for registration",
|
|
8033
8120
|
async function* (ctx, emit) {
|
|
8034
8121
|
const { routines } = ctx;
|
|
8035
8122
|
if (!routines) return;
|
|
8123
|
+
const serviceName = resolveSyncServiceName();
|
|
8124
|
+
if (!serviceName) {
|
|
8125
|
+
return;
|
|
8126
|
+
}
|
|
8036
8127
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8037
8128
|
delayMs: 2e3
|
|
8038
8129
|
});
|
|
@@ -8043,7 +8134,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8043
8134
|
name: routine.name,
|
|
8044
8135
|
version: routine.version,
|
|
8045
8136
|
description: routine.description,
|
|
8046
|
-
serviceName
|
|
8137
|
+
serviceName,
|
|
8047
8138
|
isMeta: routine.isMeta
|
|
8048
8139
|
},
|
|
8049
8140
|
__routineName: routine.name
|
|
@@ -8085,6 +8176,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8085
8176
|
function* (ctx) {
|
|
8086
8177
|
const { routines } = ctx;
|
|
8087
8178
|
if (!routines) return;
|
|
8179
|
+
const serviceName = resolveSyncServiceName();
|
|
8180
|
+
if (!serviceName) {
|
|
8181
|
+
return;
|
|
8182
|
+
}
|
|
8088
8183
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8089
8184
|
delayMs: 3e3
|
|
8090
8185
|
});
|
|
@@ -8104,7 +8199,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8104
8199
|
taskVersion: nextTask.version,
|
|
8105
8200
|
routineName: routine.name,
|
|
8106
8201
|
routineVersion: routine.version,
|
|
8107
|
-
serviceName
|
|
8202
|
+
serviceName
|
|
8108
8203
|
},
|
|
8109
8204
|
__routineName: routine.name,
|
|
8110
8205
|
__taskName: nextTask.name
|
|
@@ -8207,6 +8302,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8207
8302
|
delayMs: 3e3
|
|
8208
8303
|
});
|
|
8209
8304
|
const tasks = ctx.tasks;
|
|
8305
|
+
const serviceName = resolveSyncServiceName();
|
|
8306
|
+
if (!serviceName) {
|
|
8307
|
+
return;
|
|
8308
|
+
}
|
|
8210
8309
|
for (const task of tasks) {
|
|
8211
8310
|
if (task.registered) continue;
|
|
8212
8311
|
const { __functionString, __getTagCallback } = task.export();
|
|
@@ -8236,7 +8335,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8236
8335
|
retryDelay: task.retryDelay,
|
|
8237
8336
|
retryDelayMax: task.retryDelayMax,
|
|
8238
8337
|
retryDelayFactor: task.retryDelayFactor,
|
|
8239
|
-
service_name:
|
|
8338
|
+
service_name: serviceName,
|
|
8240
8339
|
signals: {
|
|
8241
8340
|
emits: Array.from(task.emitsSignals),
|
|
8242
8341
|
signalsToEmitAfter: Array.from(task.signalsToEmitAfter),
|
|
@@ -8284,11 +8383,15 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8284
8383
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8285
8384
|
delayMs: 3e3
|
|
8286
8385
|
});
|
|
8386
|
+
const serviceName = resolveSyncServiceName();
|
|
8387
|
+
if (!serviceName) {
|
|
8388
|
+
return;
|
|
8389
|
+
}
|
|
8287
8390
|
const actors = ctx.actors ?? [];
|
|
8288
8391
|
for (const actor of actors) {
|
|
8289
8392
|
const data = {
|
|
8290
8393
|
...buildActorRegistrationData(actor),
|
|
8291
|
-
service_name:
|
|
8394
|
+
service_name: serviceName
|
|
8292
8395
|
};
|
|
8293
8396
|
if (!data.name) {
|
|
8294
8397
|
continue;
|
|
@@ -8344,7 +8447,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8344
8447
|
if (!metadata?.actorName) {
|
|
8345
8448
|
return;
|
|
8346
8449
|
}
|
|
8347
|
-
const
|
|
8450
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8451
|
+
if (!serviceName) {
|
|
8452
|
+
return;
|
|
8453
|
+
}
|
|
8454
|
+
const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName}`;
|
|
8348
8455
|
if (this.registeredActorTaskMaps.has(registrationKey)) {
|
|
8349
8456
|
return;
|
|
8350
8457
|
}
|
|
@@ -8354,7 +8461,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8354
8461
|
actor_version: 1,
|
|
8355
8462
|
task_name: task.name,
|
|
8356
8463
|
task_version: task.version,
|
|
8357
|
-
service_name:
|
|
8464
|
+
service_name: serviceName,
|
|
8358
8465
|
mode: metadata.mode,
|
|
8359
8466
|
description: task.description ?? metadata.actorDescription ?? "",
|
|
8360
8467
|
is_meta: metadata.actorKind === "meta" || task.isMeta === true
|
|
@@ -8409,6 +8516,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8409
8516
|
function* (ctx) {
|
|
8410
8517
|
const task = ctx.task;
|
|
8411
8518
|
if (task.hidden || !task.register) return;
|
|
8519
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8520
|
+
if (!serviceName) {
|
|
8521
|
+
return;
|
|
8522
|
+
}
|
|
8412
8523
|
for (const signal of task.observedSignals) {
|
|
8413
8524
|
const _signal = signal.split(":")[0];
|
|
8414
8525
|
if (task.registeredSignals.has(signal)) continue;
|
|
@@ -8419,7 +8530,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8419
8530
|
isGlobal,
|
|
8420
8531
|
taskName: task.name,
|
|
8421
8532
|
taskVersion: task.version,
|
|
8422
|
-
serviceName
|
|
8533
|
+
serviceName
|
|
8423
8534
|
},
|
|
8424
8535
|
__taskName: task.name,
|
|
8425
8536
|
__signal: signal
|
|
@@ -8445,6 +8556,46 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8445
8556
|
{ concurrency: 30 }
|
|
8446
8557
|
) : CadenzaService.get("dbInsertSignalToTaskMap"))?.then(registerSignalTask)
|
|
8447
8558
|
);
|
|
8559
|
+
this.splitIntentsTask = CadenzaService.createMetaTask(
|
|
8560
|
+
"Split intents for registration",
|
|
8561
|
+
function* (ctx) {
|
|
8562
|
+
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8563
|
+
delayMs: 3e3
|
|
8564
|
+
});
|
|
8565
|
+
const intents = Array.isArray(ctx.intents) ? ctx.intents : Array.from(CadenzaService.inquiryBroker.intents.values());
|
|
8566
|
+
for (const intent of intents) {
|
|
8567
|
+
const intentData = buildIntentRegistryData(intent);
|
|
8568
|
+
if (!intentData) {
|
|
8569
|
+
continue;
|
|
8570
|
+
}
|
|
8571
|
+
if (this.registeredIntentDefinitions.has(intentData.name)) {
|
|
8572
|
+
continue;
|
|
8573
|
+
}
|
|
8574
|
+
yield {
|
|
8575
|
+
data: intentData,
|
|
8576
|
+
__intentName: intentData.name
|
|
8577
|
+
};
|
|
8578
|
+
}
|
|
8579
|
+
}.bind(this)
|
|
8580
|
+
).then(
|
|
8581
|
+
insertIntentRegistryTask?.then(
|
|
8582
|
+
CadenzaService.createMetaTask("Record intent definition registration", (ctx) => {
|
|
8583
|
+
if (!ctx.__syncing) {
|
|
8584
|
+
return;
|
|
8585
|
+
}
|
|
8586
|
+
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8587
|
+
delayMs: 3e3
|
|
8588
|
+
});
|
|
8589
|
+
this.registeredIntentDefinitions.add(ctx.__intentName);
|
|
8590
|
+
return true;
|
|
8591
|
+
}).then(
|
|
8592
|
+
CadenzaService.createUniqueMetaTask(
|
|
8593
|
+
"Gather intent registration",
|
|
8594
|
+
() => true
|
|
8595
|
+
).emits("meta.sync_controller.synced_intents")
|
|
8596
|
+
)
|
|
8597
|
+
)
|
|
8598
|
+
);
|
|
8448
8599
|
const registerIntentTask = CadenzaService.createMetaTask(
|
|
8449
8600
|
"Record intent registration",
|
|
8450
8601
|
(ctx) => {
|
|
@@ -8464,6 +8615,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8464
8615
|
function* (ctx) {
|
|
8465
8616
|
const task = ctx.task;
|
|
8466
8617
|
if (task.hidden || !task.register) return;
|
|
8618
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8619
|
+
if (!serviceName) {
|
|
8620
|
+
return;
|
|
8621
|
+
}
|
|
8467
8622
|
task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
|
|
8468
8623
|
task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
|
|
8469
8624
|
for (const intent of task.handlesIntents) {
|
|
@@ -8483,36 +8638,75 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8483
8638
|
}
|
|
8484
8639
|
continue;
|
|
8485
8640
|
}
|
|
8641
|
+
const intentDefinition = buildIntentRegistryData(CadenzaService.inquiryBroker.intents.get(intent)) ?? buildIntentRegistryData({ name: intent });
|
|
8642
|
+
if (!intentDefinition) {
|
|
8643
|
+
continue;
|
|
8644
|
+
}
|
|
8486
8645
|
yield {
|
|
8487
8646
|
data: {
|
|
8488
8647
|
intentName: intent,
|
|
8489
8648
|
taskName: task.name,
|
|
8490
8649
|
taskVersion: task.version,
|
|
8491
|
-
serviceName
|
|
8650
|
+
serviceName
|
|
8492
8651
|
},
|
|
8493
8652
|
__taskName: task.name,
|
|
8494
|
-
__intent: intent
|
|
8653
|
+
__intent: intent,
|
|
8654
|
+
__intentDefinition: intentDefinition,
|
|
8655
|
+
__intentMapData: {
|
|
8656
|
+
intentName: intent,
|
|
8657
|
+
taskName: task.name,
|
|
8658
|
+
taskVersion: task.version,
|
|
8659
|
+
serviceName
|
|
8660
|
+
}
|
|
8495
8661
|
};
|
|
8496
8662
|
}
|
|
8497
8663
|
}
|
|
8498
8664
|
).then(
|
|
8499
|
-
|
|
8500
|
-
"
|
|
8501
|
-
{
|
|
8502
|
-
|
|
8503
|
-
|
|
8504
|
-
"intent_name",
|
|
8505
|
-
"task_name",
|
|
8506
|
-
"task_version",
|
|
8507
|
-
"service_name"
|
|
8508
|
-
],
|
|
8509
|
-
action: {
|
|
8510
|
-
do: "nothing"
|
|
8511
|
-
}
|
|
8665
|
+
CadenzaService.createMetaTask(
|
|
8666
|
+
"Prepare intent definition for intent-to-task map",
|
|
8667
|
+
(ctx) => {
|
|
8668
|
+
if (!ctx.__intentDefinition || !ctx.__intentMapData) {
|
|
8669
|
+
return false;
|
|
8512
8670
|
}
|
|
8513
|
-
|
|
8514
|
-
|
|
8515
|
-
|
|
8671
|
+
return {
|
|
8672
|
+
...ctx,
|
|
8673
|
+
data: ctx.__intentDefinition
|
|
8674
|
+
};
|
|
8675
|
+
}
|
|
8676
|
+
).then(
|
|
8677
|
+
insertIntentRegistryTask?.then(
|
|
8678
|
+
CadenzaService.createMetaTask(
|
|
8679
|
+
"Restore intent-to-task map payload",
|
|
8680
|
+
(ctx) => {
|
|
8681
|
+
if (!ctx.__intentMapData) {
|
|
8682
|
+
return false;
|
|
8683
|
+
}
|
|
8684
|
+
return {
|
|
8685
|
+
...ctx,
|
|
8686
|
+
data: ctx.__intentMapData
|
|
8687
|
+
};
|
|
8688
|
+
}
|
|
8689
|
+
).then(
|
|
8690
|
+
(this.isCadenzaDBReady ? CadenzaService.createCadenzaDBInsertTask(
|
|
8691
|
+
"intent_to_task_map",
|
|
8692
|
+
{
|
|
8693
|
+
onConflict: {
|
|
8694
|
+
target: [
|
|
8695
|
+
"intent_name",
|
|
8696
|
+
"task_name",
|
|
8697
|
+
"task_version",
|
|
8698
|
+
"service_name"
|
|
8699
|
+
],
|
|
8700
|
+
action: {
|
|
8701
|
+
do: "nothing"
|
|
8702
|
+
}
|
|
8703
|
+
}
|
|
8704
|
+
},
|
|
8705
|
+
{ concurrency: 30 }
|
|
8706
|
+
) : CadenzaService.get("dbInsertIntentToTaskMap"))?.then(registerIntentTask)
|
|
8707
|
+
)
|
|
8708
|
+
)
|
|
8709
|
+
)
|
|
8516
8710
|
);
|
|
8517
8711
|
this.registerTaskMapTask = CadenzaService.createMetaTask(
|
|
8518
8712
|
"Register task map to DB",
|
|
@@ -8522,18 +8716,26 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8522
8716
|
delayMs: 3e3
|
|
8523
8717
|
});
|
|
8524
8718
|
if (task.hidden || !task.register) return;
|
|
8719
|
+
const predecessorServiceName = resolveSyncServiceName(task);
|
|
8720
|
+
if (!predecessorServiceName) {
|
|
8721
|
+
return;
|
|
8722
|
+
}
|
|
8525
8723
|
for (const t of task.nextTasks) {
|
|
8526
8724
|
if (task.taskMapRegistration.has(t.name) || t.hidden || !t.register) {
|
|
8527
8725
|
continue;
|
|
8528
8726
|
}
|
|
8727
|
+
const serviceName = resolveSyncServiceName(t);
|
|
8728
|
+
if (!serviceName) {
|
|
8729
|
+
continue;
|
|
8730
|
+
}
|
|
8529
8731
|
yield {
|
|
8530
8732
|
data: {
|
|
8531
8733
|
taskName: t.name,
|
|
8532
8734
|
taskVersion: t.version,
|
|
8533
8735
|
predecessorTaskName: task.name,
|
|
8534
8736
|
predecessorTaskVersion: task.version,
|
|
8535
|
-
serviceName
|
|
8536
|
-
predecessorServiceName
|
|
8737
|
+
serviceName,
|
|
8738
|
+
predecessorServiceName
|
|
8537
8739
|
},
|
|
8538
8740
|
__taskName: task.name,
|
|
8539
8741
|
__nextTaskName: t.name
|
|
@@ -8580,14 +8782,19 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8580
8782
|
if (task.hidden || !task.register) return;
|
|
8581
8783
|
if (task.isDeputy && !task.signalName) {
|
|
8582
8784
|
if (task.registeredDeputyMap) return;
|
|
8785
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8786
|
+
const predecessorServiceName = resolveSyncServiceName();
|
|
8787
|
+
if (!serviceName || !predecessorServiceName) {
|
|
8788
|
+
return;
|
|
8789
|
+
}
|
|
8583
8790
|
return {
|
|
8584
8791
|
data: {
|
|
8585
8792
|
task_name: task.remoteRoutineName,
|
|
8586
8793
|
task_version: 1,
|
|
8587
|
-
service_name:
|
|
8794
|
+
service_name: serviceName,
|
|
8588
8795
|
predecessor_task_name: task.name,
|
|
8589
8796
|
predecessor_task_version: task.version,
|
|
8590
|
-
predecessor_service_name:
|
|
8797
|
+
predecessor_service_name: predecessorServiceName
|
|
8591
8798
|
},
|
|
8592
8799
|
__taskName: task.name
|
|
8593
8800
|
};
|
|
@@ -8632,6 +8839,12 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8632
8839
|
"meta.service_registry.initial_sync_complete"
|
|
8633
8840
|
).then(this.splitSignalsTask);
|
|
8634
8841
|
CadenzaService.registry.getAllTasks.clone().doOn("meta.sync_controller.synced_signals").then(this.splitTasksForRegistration);
|
|
8842
|
+
CadenzaService.createMetaTask("Get all intents", (ctx) => {
|
|
8843
|
+
return {
|
|
8844
|
+
...ctx,
|
|
8845
|
+
intents: Array.from(CadenzaService.inquiryBroker.intents.values())
|
|
8846
|
+
};
|
|
8847
|
+
}).doOn("meta.sync_controller.synced_tasks").then(this.splitIntentsTask);
|
|
8635
8848
|
CadenzaService.registry.getAllRoutines.clone().doOn("meta.sync_controller.synced_tasks").then(this.splitRoutinesTask);
|
|
8636
8849
|
CadenzaService.createMetaTask("Get all actors", (ctx) => {
|
|
8637
8850
|
return {
|
|
@@ -8642,9 +8855,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8642
8855
|
CadenzaService.registry.doForEachTask.clone().doOn("meta.sync_controller.synced_tasks").then(
|
|
8643
8856
|
this.registerTaskMapTask,
|
|
8644
8857
|
this.registerSignalToTaskMapTask,
|
|
8645
|
-
this.registerIntentToTaskMapTask,
|
|
8646
8858
|
this.registerDeputyRelationshipTask
|
|
8647
8859
|
);
|
|
8860
|
+
CadenzaService.registry.doForEachTask.clone().doOn("meta.sync_controller.synced_tasks", "meta.sync_controller.synced_intents").then(this.registerIntentToTaskMapTask);
|
|
8648
8861
|
CadenzaService.registry.doForEachTask.clone().doOn("meta.sync_controller.synced_tasks", "meta.sync_controller.synced_actors").then(this.registerActorTaskMapTask);
|
|
8649
8862
|
CadenzaService.registry.getAllRoutines.clone().doOn("meta.sync_controller.synced_routines").then(this.splitTasksInRoutines);
|
|
8650
8863
|
CadenzaService.createMetaTask("Finish sync", (ctx, emit) => {
|
|
@@ -8904,9 +9117,9 @@ var CadenzaService = class {
|
|
|
8904
9117
|
static normalizeDeclaredTransports(transports, serviceId) {
|
|
8905
9118
|
return (transports ?? []).map((transport) => normalizeServiceTransportConfig(transport)).filter(
|
|
8906
9119
|
(transport) => !!transport
|
|
8907
|
-
).map((transport
|
|
9120
|
+
).map((transport) => ({
|
|
8908
9121
|
...transport,
|
|
8909
|
-
uuid:
|
|
9122
|
+
uuid: uuid4()
|
|
8910
9123
|
}));
|
|
8911
9124
|
}
|
|
8912
9125
|
static createBootstrapTransport(serviceInstanceId, role, endpoint) {
|
|
@@ -9150,7 +9363,7 @@ var CadenzaService = class {
|
|
|
9150
9363
|
}
|
|
9151
9364
|
for (const responder of responders) {
|
|
9152
9365
|
const { task, descriptor } = responder;
|
|
9153
|
-
const inquiryId =
|
|
9366
|
+
const inquiryId = uuid4();
|
|
9154
9367
|
startTimeByTask.set(task, Date.now());
|
|
9155
9368
|
const resolverTask = this.createEphemeralMetaTask(
|
|
9156
9369
|
`Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,
|
|
@@ -9639,7 +9852,7 @@ var CadenzaService = class {
|
|
|
9639
9852
|
this.bootstrap();
|
|
9640
9853
|
this.validateName(serviceName);
|
|
9641
9854
|
this.validateServiceName(serviceName);
|
|
9642
|
-
const serviceId = options.customServiceId ??
|
|
9855
|
+
const serviceId = options.customServiceId ?? uuid4();
|
|
9643
9856
|
this.serviceRegistry.serviceName = serviceName;
|
|
9644
9857
|
this.serviceRegistry.serviceInstanceId = serviceId;
|
|
9645
9858
|
this.setHydrationResults(options.hydration);
|
|
@@ -10470,7 +10683,7 @@ import {
|
|
|
10470
10683
|
} from "@cadenza.io/core";
|
|
10471
10684
|
|
|
10472
10685
|
// src/ssr/createSSRInquiryBridge.ts
|
|
10473
|
-
import { v4 as
|
|
10686
|
+
import { v4 as uuid5 } from "uuid";
|
|
10474
10687
|
function ensureFetch() {
|
|
10475
10688
|
if (typeof globalThis.fetch !== "function") {
|
|
10476
10689
|
throw new Error("SSR inquiry bridge requires global fetch support.");
|
|
@@ -10546,7 +10759,7 @@ function createSSRInquiryBridge(options = {}) {
|
|
|
10546
10759
|
__remoteRoutineName: remoteRoutineName,
|
|
10547
10760
|
__metadata: {
|
|
10548
10761
|
...context.__metadata ?? {},
|
|
10549
|
-
__deputyExecId:
|
|
10762
|
+
__deputyExecId: uuid5()
|
|
10550
10763
|
}
|
|
10551
10764
|
}),
|
|
10552
10765
|
signal
|