@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.js
CHANGED
|
@@ -433,16 +433,16 @@ function normalizeServiceTransportConfig(value) {
|
|
|
433
433
|
}
|
|
434
434
|
function normalizeServiceTransportDescriptor(value) {
|
|
435
435
|
const raw = value ?? {};
|
|
436
|
-
const
|
|
436
|
+
const uuid6 = normalizeString(raw.uuid);
|
|
437
437
|
const serviceInstanceId = normalizeString(
|
|
438
438
|
raw.serviceInstanceId ?? raw.service_instance_id
|
|
439
439
|
);
|
|
440
440
|
const config = normalizeServiceTransportConfig(raw);
|
|
441
|
-
if (!
|
|
441
|
+
if (!uuid6 || !serviceInstanceId || !config) {
|
|
442
442
|
return null;
|
|
443
443
|
}
|
|
444
444
|
return {
|
|
445
|
-
uuid:
|
|
445
|
+
uuid: uuid6,
|
|
446
446
|
serviceInstanceId,
|
|
447
447
|
role: config.role,
|
|
448
448
|
origin: config.origin,
|
|
@@ -504,14 +504,14 @@ function normalizeTransportArray(value, serviceInstanceId) {
|
|
|
504
504
|
}
|
|
505
505
|
function normalizeServiceInstanceDescriptor(value) {
|
|
506
506
|
const raw = value ?? {};
|
|
507
|
-
const
|
|
507
|
+
const uuid6 = normalizeString2(raw.uuid);
|
|
508
508
|
const serviceName = normalizeString2(raw.serviceName ?? raw.service_name);
|
|
509
|
-
if (!
|
|
509
|
+
if (!uuid6 || !serviceName) {
|
|
510
510
|
return null;
|
|
511
511
|
}
|
|
512
|
-
const transports = normalizeTransportArray(raw.transports,
|
|
512
|
+
const transports = normalizeTransportArray(raw.transports, uuid6);
|
|
513
513
|
return {
|
|
514
|
-
uuid:
|
|
514
|
+
uuid: uuid6,
|
|
515
515
|
serviceName,
|
|
516
516
|
numberOfRunningGraphs: Math.max(
|
|
517
517
|
0,
|
|
@@ -954,15 +954,15 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
954
954
|
if (!serviceInstance) {
|
|
955
955
|
return false;
|
|
956
956
|
}
|
|
957
|
-
const
|
|
957
|
+
const uuid6 = serviceInstance.uuid;
|
|
958
958
|
const serviceName = serviceInstance.serviceName;
|
|
959
959
|
const deleted = Boolean(
|
|
960
960
|
ctx.deleted ?? ctx.serviceInstance?.deleted ?? ctx.data?.deleted
|
|
961
961
|
);
|
|
962
|
-
if (
|
|
962
|
+
if (uuid6 === this.serviceInstanceId) return;
|
|
963
963
|
if (deleted) {
|
|
964
|
-
const existingInstance = this.instances.get(serviceName)?.find((instance) => instance.uuid ===
|
|
965
|
-
const indexToDelete = this.instances.get(serviceName)?.findIndex((i) => i.uuid ===
|
|
964
|
+
const existingInstance = this.instances.get(serviceName)?.find((instance) => instance.uuid === uuid6);
|
|
965
|
+
const indexToDelete = this.instances.get(serviceName)?.findIndex((i) => i.uuid === uuid6) ?? -1;
|
|
966
966
|
if (indexToDelete >= 0 && existingInstance) {
|
|
967
967
|
this.instances.get(serviceName)?.splice(indexToDelete, 1);
|
|
968
968
|
for (const transport of existingInstance.transports) {
|
|
@@ -974,13 +974,13 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
974
974
|
if (this.instances.get(serviceName)?.length === 0) {
|
|
975
975
|
this.instances.delete(serviceName);
|
|
976
976
|
}
|
|
977
|
-
this.unregisterDependee(
|
|
977
|
+
this.unregisterDependee(uuid6, serviceName);
|
|
978
978
|
return;
|
|
979
979
|
}
|
|
980
980
|
if (!this.instances.has(serviceName))
|
|
981
981
|
this.instances.set(serviceName, []);
|
|
982
982
|
const instances = this.instances.get(serviceName);
|
|
983
|
-
const existing = instances.find((i) => i.uuid ===
|
|
983
|
+
const existing = instances.find((i) => i.uuid === uuid6);
|
|
984
984
|
if (existing) {
|
|
985
985
|
Object.assign(existing, {
|
|
986
986
|
...serviceInstance,
|
|
@@ -990,7 +990,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
990
990
|
} else {
|
|
991
991
|
instances.push(serviceInstance);
|
|
992
992
|
}
|
|
993
|
-
const trackedInstance = existing ?? instances.find((instance) => instance.uuid ===
|
|
993
|
+
const trackedInstance = existing ?? instances.find((instance) => instance.uuid === uuid6);
|
|
994
994
|
if (trackedInstance) {
|
|
995
995
|
const snapshot = this.resolveRuntimeStatusSnapshot(
|
|
996
996
|
trackedInstance.numberOfRunningGraphs ?? 0,
|
|
@@ -1003,7 +1003,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1003
1003
|
trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
1004
1004
|
}
|
|
1005
1005
|
if (!serviceInstance.isBootstrapPlaceholder) {
|
|
1006
|
-
this.reconcileBootstrapPlaceholderInstance(serviceName,
|
|
1006
|
+
this.reconcileBootstrapPlaceholderInstance(serviceName, uuid6, emit);
|
|
1007
1007
|
}
|
|
1008
1008
|
if (this.serviceName === serviceName) {
|
|
1009
1009
|
return false;
|
|
@@ -1029,7 +1029,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1029
1029
|
if (!clientCreated) {
|
|
1030
1030
|
emit("meta.service_registry.dependee_registered", {
|
|
1031
1031
|
serviceName,
|
|
1032
|
-
serviceInstanceId:
|
|
1032
|
+
serviceInstanceId: uuid6,
|
|
1033
1033
|
serviceTransportId: trackedTransport.uuid,
|
|
1034
1034
|
serviceOrigin: trackedTransport.origin,
|
|
1035
1035
|
transportProtocols: trackedTransport.protocols,
|
|
@@ -1043,7 +1043,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
1043
1043
|
} else {
|
|
1044
1044
|
emit("meta.service_registry.routeable_transport_missing", {
|
|
1045
1045
|
serviceName,
|
|
1046
|
-
serviceInstanceId:
|
|
1046
|
+
serviceInstanceId: uuid6,
|
|
1047
1047
|
requiredRole: this.getRoutingTransportRole(),
|
|
1048
1048
|
isFrontend: this.isFrontend
|
|
1049
1049
|
});
|
|
@@ -3284,6 +3284,7 @@ var import_node_http = __toESM(require("http"));
|
|
|
3284
3284
|
var import_node_fs = __toESM(require("fs"));
|
|
3285
3285
|
var import_node_https = __toESM(require("https"));
|
|
3286
3286
|
var import_node_fetch = __toESM(require("node-fetch"));
|
|
3287
|
+
var import_uuid3 = require("uuid");
|
|
3287
3288
|
var RestController = class _RestController {
|
|
3288
3289
|
/**
|
|
3289
3290
|
* Constructor for initializing the REST server and related configurations.
|
|
@@ -3645,7 +3646,7 @@ var RestController = class _RestController {
|
|
|
3645
3646
|
const internalOrigin = httpOrigin ?? httpsOrigin;
|
|
3646
3647
|
if (internalOrigin) {
|
|
3647
3648
|
transportData.unshift({
|
|
3648
|
-
uuid:
|
|
3649
|
+
uuid: (0, import_uuid3.v4)(),
|
|
3649
3650
|
service_instance_id: ctx.__serviceInstanceId,
|
|
3650
3651
|
role: "internal",
|
|
3651
3652
|
origin: internalOrigin,
|
|
@@ -5829,6 +5830,13 @@ var GraphMetadataController = class _GraphMetadataController {
|
|
|
5829
5830
|
};
|
|
5830
5831
|
}).doOn("meta.task.layer_index_changed", "meta.task.destroyed").emits("global.meta.graph_metadata.task_updated");
|
|
5831
5832
|
CadenzaService.createMetaTask("Handle task relationship creation", (ctx) => {
|
|
5833
|
+
const taskName = ctx.data?.taskName ?? ctx.data?.task_name;
|
|
5834
|
+
const predecessorTaskName = ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;
|
|
5835
|
+
const task = taskName ? CadenzaService.get(taskName) : void 0;
|
|
5836
|
+
const predecessorTask = predecessorTaskName ? CadenzaService.get(predecessorTaskName) : void 0;
|
|
5837
|
+
if (!task?.registered || !predecessorTask?.registered) {
|
|
5838
|
+
return false;
|
|
5839
|
+
}
|
|
5832
5840
|
return {
|
|
5833
5841
|
data: {
|
|
5834
5842
|
...ctx.data,
|
|
@@ -6105,6 +6113,13 @@ function defaultOperationIntentDescription(operation, tableName) {
|
|
|
6105
6113
|
function isExplicitSqlLiteral(value) {
|
|
6106
6114
|
return /^'.*'::[a-z_][a-z0-9_]*(\[\])?$/i.test(value.trim());
|
|
6107
6115
|
}
|
|
6116
|
+
function extractExplicitJsonLiteral(value) {
|
|
6117
|
+
const match = /^'(.*)'::jsonb$/i.exec(value.trim());
|
|
6118
|
+
if (!match) {
|
|
6119
|
+
return null;
|
|
6120
|
+
}
|
|
6121
|
+
return match[1].replace(/''/g, "'");
|
|
6122
|
+
}
|
|
6108
6123
|
function isExplicitSqlExpression(value) {
|
|
6109
6124
|
const trimmed = value.trim();
|
|
6110
6125
|
if (!trimmed) {
|
|
@@ -6163,6 +6178,24 @@ function serializeInitialDataValueForSql(value, field) {
|
|
|
6163
6178
|
}
|
|
6164
6179
|
return `'${stringValue.replace(/'/g, "''")}'`;
|
|
6165
6180
|
}
|
|
6181
|
+
function serializeFieldValueForQuery(value, field) {
|
|
6182
|
+
if (value === void 0 || value === null || field?.type !== "jsonb") {
|
|
6183
|
+
return value;
|
|
6184
|
+
}
|
|
6185
|
+
if (typeof value === "string") {
|
|
6186
|
+
const explicitJsonLiteral = extractExplicitJsonLiteral(value);
|
|
6187
|
+
if (explicitJsonLiteral !== null) {
|
|
6188
|
+
return explicitJsonLiteral;
|
|
6189
|
+
}
|
|
6190
|
+
try {
|
|
6191
|
+
JSON.parse(value);
|
|
6192
|
+
return value;
|
|
6193
|
+
} catch {
|
|
6194
|
+
return JSON.stringify(value);
|
|
6195
|
+
}
|
|
6196
|
+
}
|
|
6197
|
+
return JSON.stringify(value);
|
|
6198
|
+
}
|
|
6166
6199
|
function readCustomIntentConfig(customIntent) {
|
|
6167
6200
|
if (typeof customIntent === "string") {
|
|
6168
6201
|
return {
|
|
@@ -6844,18 +6877,28 @@ var DatabaseController = class _DatabaseController {
|
|
|
6844
6877
|
throw new Error("No rows available for insert after resolving data");
|
|
6845
6878
|
}
|
|
6846
6879
|
const keys = Object.keys(rows[0]);
|
|
6880
|
+
const tableFields = registration.schema.tables[tableName]?.fields ?? {};
|
|
6847
6881
|
const sqlPrefix = `INSERT INTO ${tableName} (${keys.map((key) => (0, import_lodash_es.snakeCase)(key)).join(", ")}) VALUES `;
|
|
6848
6882
|
const params = [];
|
|
6849
6883
|
const placeholders = rows.map((row) => {
|
|
6850
6884
|
const tuple = keys.map((key) => {
|
|
6851
|
-
params.push(
|
|
6885
|
+
params.push(
|
|
6886
|
+
serializeFieldValueForQuery(
|
|
6887
|
+
row[key],
|
|
6888
|
+
this.getFieldDefinitionForKey(tableFields, key)
|
|
6889
|
+
)
|
|
6890
|
+
);
|
|
6852
6891
|
return `$${params.length}`;
|
|
6853
6892
|
}).join(", ");
|
|
6854
6893
|
return `(${tuple})`;
|
|
6855
6894
|
}).join(", ");
|
|
6856
6895
|
let onConflictSql = "";
|
|
6857
6896
|
if (onConflict) {
|
|
6858
|
-
onConflictSql = this.buildOnConflictClause(
|
|
6897
|
+
onConflictSql = this.buildOnConflictClause(
|
|
6898
|
+
onConflict,
|
|
6899
|
+
params,
|
|
6900
|
+
tableFields
|
|
6901
|
+
);
|
|
6859
6902
|
}
|
|
6860
6903
|
const sql = `${sqlPrefix}${placeholders}${onConflictSql} RETURNING ${fields.length ? fields.map(import_lodash_es.snakeCase).join(", ") : "*"}`;
|
|
6861
6904
|
const result = await this.withTimeout(
|
|
@@ -6903,27 +6946,26 @@ var DatabaseController = class _DatabaseController {
|
|
|
6903
6946
|
data,
|
|
6904
6947
|
tableName
|
|
6905
6948
|
);
|
|
6906
|
-
const
|
|
6907
|
-
|
|
6908
|
-
const setClause = Object.keys(resolvedData).map((key
|
|
6949
|
+
const tableFields = registration.schema.tables[tableName]?.fields ?? {};
|
|
6950
|
+
const params = [];
|
|
6951
|
+
const setClause = Object.keys(resolvedData).map((key) => {
|
|
6909
6952
|
const value = resolvedData[key];
|
|
6910
|
-
const offsetIndex = index - offset;
|
|
6911
6953
|
if (value?.__effect === "increment") {
|
|
6912
|
-
params.splice(offsetIndex, 1);
|
|
6913
|
-
offset += 1;
|
|
6914
6954
|
return `${(0, import_lodash_es.snakeCase)(key)} = ${(0, import_lodash_es.snakeCase)(key)} + 1`;
|
|
6915
6955
|
}
|
|
6916
6956
|
if (value?.__effect === "decrement") {
|
|
6917
|
-
params.splice(offsetIndex, 1);
|
|
6918
|
-
offset += 1;
|
|
6919
6957
|
return `${(0, import_lodash_es.snakeCase)(key)} = ${(0, import_lodash_es.snakeCase)(key)} - 1`;
|
|
6920
6958
|
}
|
|
6921
6959
|
if (value?.__effect === "set") {
|
|
6922
|
-
params.splice(offsetIndex, 1);
|
|
6923
|
-
offset += 1;
|
|
6924
6960
|
return `${(0, import_lodash_es.snakeCase)(key)} = ${value.__value}`;
|
|
6925
6961
|
}
|
|
6926
|
-
|
|
6962
|
+
params.push(
|
|
6963
|
+
serializeFieldValueForQuery(
|
|
6964
|
+
value,
|
|
6965
|
+
this.getFieldDefinitionForKey(tableFields, key)
|
|
6966
|
+
)
|
|
6967
|
+
);
|
|
6968
|
+
return `${(0, import_lodash_es.snakeCase)(key)} = $${params.length}`;
|
|
6927
6969
|
}).join(", ");
|
|
6928
6970
|
const whereClause = this.buildWhereClause(filter, params);
|
|
6929
6971
|
const sql = `UPDATE ${tableName} SET ${setClause} ${whereClause} RETURNING *`;
|
|
@@ -7012,7 +7054,7 @@ var DatabaseController = class _DatabaseController {
|
|
|
7012
7054
|
retryDelayFactor: Number.isFinite(durableState.safetyPolicy?.retryDelayFactor) ? Math.max(1, Number(durableState.safetyPolicy?.retryDelayFactor)) : 1
|
|
7013
7055
|
};
|
|
7014
7056
|
}
|
|
7015
|
-
buildOnConflictClause(onConflict, params) {
|
|
7057
|
+
buildOnConflictClause(onConflict, params, tableFields) {
|
|
7016
7058
|
const { target, action } = onConflict;
|
|
7017
7059
|
let sql = ` ON CONFLICT (${target.map(import_lodash_es.snakeCase).join(", ")})`;
|
|
7018
7060
|
if (action.do === "update") {
|
|
@@ -7023,7 +7065,12 @@ var DatabaseController = class _DatabaseController {
|
|
|
7023
7065
|
if (typeof value === "string" && value === "excluded") {
|
|
7024
7066
|
return `${(0, import_lodash_es.snakeCase)(field)} = excluded.${(0, import_lodash_es.snakeCase)(field)}`;
|
|
7025
7067
|
}
|
|
7026
|
-
params.push(
|
|
7068
|
+
params.push(
|
|
7069
|
+
serializeFieldValueForQuery(
|
|
7070
|
+
value,
|
|
7071
|
+
this.getFieldDefinitionForKey(tableFields, field)
|
|
7072
|
+
)
|
|
7073
|
+
);
|
|
7027
7074
|
return `${(0, import_lodash_es.snakeCase)(field)} = $${params.length}`;
|
|
7028
7075
|
});
|
|
7029
7076
|
sql += ` DO UPDATE SET ${assignments.join(", ")}`;
|
|
@@ -7035,6 +7082,9 @@ var DatabaseController = class _DatabaseController {
|
|
|
7035
7082
|
sql += " DO NOTHING";
|
|
7036
7083
|
return sql;
|
|
7037
7084
|
}
|
|
7085
|
+
getFieldDefinitionForKey(fields, key) {
|
|
7086
|
+
return fields[key] ?? fields[(0, import_lodash_es.snakeCase)(key)];
|
|
7087
|
+
}
|
|
7038
7088
|
/**
|
|
7039
7089
|
* Validates database schema structure and content.
|
|
7040
7090
|
*/
|
|
@@ -7656,7 +7706,13 @@ var DatabaseController = class _DatabaseController {
|
|
|
7656
7706
|
);
|
|
7657
7707
|
const row = ensurePlainObject(resolvedData, "sub-operation insert data");
|
|
7658
7708
|
const keys = Object.keys(row);
|
|
7659
|
-
const
|
|
7709
|
+
const tableFields = registration.schema.tables[operation.table]?.fields ?? {};
|
|
7710
|
+
const params = keys.map(
|
|
7711
|
+
(key) => serializeFieldValueForQuery(
|
|
7712
|
+
row[key],
|
|
7713
|
+
this.getFieldDefinitionForKey(tableFields, key)
|
|
7714
|
+
)
|
|
7715
|
+
);
|
|
7660
7716
|
const sql2 = `INSERT INTO ${operation.table} (${keys.map((key) => (0, import_lodash_es.snakeCase)(key)).join(", ")}) VALUES (${params.map((_, index) => `$${index + 1}`).join(", ")}) ON CONFLICT DO NOTHING RETURNING ${operation.return ?? "*"}`;
|
|
7661
7717
|
const result2 = await this.withTimeout(
|
|
7662
7718
|
() => client.query(sql2, params),
|
|
@@ -8006,7 +8062,7 @@ function tableFieldTypeToSchemaType(type) {
|
|
|
8006
8062
|
}
|
|
8007
8063
|
|
|
8008
8064
|
// src/Cadenza.ts
|
|
8009
|
-
var
|
|
8065
|
+
var import_uuid4 = require("uuid");
|
|
8010
8066
|
|
|
8011
8067
|
// src/graph/controllers/GraphSyncController.ts
|
|
8012
8068
|
var ACTOR_TASK_METADATA = /* @__PURE__ */ Symbol.for("@cadenza.io/core/actor-task-meta");
|
|
@@ -8068,10 +8124,29 @@ function buildActorRegistrationData(actor) {
|
|
|
8068
8124
|
version: 1
|
|
8069
8125
|
};
|
|
8070
8126
|
}
|
|
8127
|
+
function resolveSyncServiceName(task) {
|
|
8128
|
+
const taskServiceName = typeof task?.serviceName === "string" ? task.serviceName.trim() : "";
|
|
8129
|
+
const registryServiceName = typeof CadenzaService.serviceRegistry.serviceName === "string" ? CadenzaService.serviceRegistry.serviceName.trim() : "";
|
|
8130
|
+
return taskServiceName || registryServiceName || void 0;
|
|
8131
|
+
}
|
|
8132
|
+
function buildIntentRegistryData(intent) {
|
|
8133
|
+
const name = String(intent?.name ?? "").trim();
|
|
8134
|
+
if (!name) {
|
|
8135
|
+
return null;
|
|
8136
|
+
}
|
|
8137
|
+
return {
|
|
8138
|
+
name,
|
|
8139
|
+
description: typeof intent?.description === "string" ? intent.description : "",
|
|
8140
|
+
input: intent?.input && typeof intent.input === "object" ? intent.input : { type: "object" },
|
|
8141
|
+
output: intent?.output && typeof intent.output === "object" ? intent.output : { type: "object" },
|
|
8142
|
+
isMeta: isMetaIntentName(name)
|
|
8143
|
+
};
|
|
8144
|
+
}
|
|
8071
8145
|
var GraphSyncController = class _GraphSyncController {
|
|
8072
8146
|
constructor() {
|
|
8073
8147
|
this.registeredActors = /* @__PURE__ */ new Set();
|
|
8074
8148
|
this.registeredActorTaskMaps = /* @__PURE__ */ new Set();
|
|
8149
|
+
this.registeredIntentDefinitions = /* @__PURE__ */ new Set();
|
|
8075
8150
|
this.isCadenzaDBReady = false;
|
|
8076
8151
|
}
|
|
8077
8152
|
static get instance() {
|
|
@@ -8079,11 +8154,27 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8079
8154
|
return this._instance;
|
|
8080
8155
|
}
|
|
8081
8156
|
init() {
|
|
8157
|
+
const insertIntentRegistryTask = this.isCadenzaDBReady ? CadenzaService.createCadenzaDBInsertTask(
|
|
8158
|
+
"intent_registry",
|
|
8159
|
+
{
|
|
8160
|
+
onConflict: {
|
|
8161
|
+
target: ["name"],
|
|
8162
|
+
action: {
|
|
8163
|
+
do: "nothing"
|
|
8164
|
+
}
|
|
8165
|
+
}
|
|
8166
|
+
},
|
|
8167
|
+
{ concurrency: 30 }
|
|
8168
|
+
) : CadenzaService.get("dbInsertIntentRegistry");
|
|
8082
8169
|
this.splitRoutinesTask = CadenzaService.createMetaTask(
|
|
8083
8170
|
"Split routines for registration",
|
|
8084
8171
|
async function* (ctx, emit) {
|
|
8085
8172
|
const { routines } = ctx;
|
|
8086
8173
|
if (!routines) return;
|
|
8174
|
+
const serviceName = resolveSyncServiceName();
|
|
8175
|
+
if (!serviceName) {
|
|
8176
|
+
return;
|
|
8177
|
+
}
|
|
8087
8178
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8088
8179
|
delayMs: 2e3
|
|
8089
8180
|
});
|
|
@@ -8094,7 +8185,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8094
8185
|
name: routine.name,
|
|
8095
8186
|
version: routine.version,
|
|
8096
8187
|
description: routine.description,
|
|
8097
|
-
serviceName
|
|
8188
|
+
serviceName,
|
|
8098
8189
|
isMeta: routine.isMeta
|
|
8099
8190
|
},
|
|
8100
8191
|
__routineName: routine.name
|
|
@@ -8136,6 +8227,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8136
8227
|
function* (ctx) {
|
|
8137
8228
|
const { routines } = ctx;
|
|
8138
8229
|
if (!routines) return;
|
|
8230
|
+
const serviceName = resolveSyncServiceName();
|
|
8231
|
+
if (!serviceName) {
|
|
8232
|
+
return;
|
|
8233
|
+
}
|
|
8139
8234
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8140
8235
|
delayMs: 3e3
|
|
8141
8236
|
});
|
|
@@ -8155,7 +8250,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8155
8250
|
taskVersion: nextTask.version,
|
|
8156
8251
|
routineName: routine.name,
|
|
8157
8252
|
routineVersion: routine.version,
|
|
8158
|
-
serviceName
|
|
8253
|
+
serviceName
|
|
8159
8254
|
},
|
|
8160
8255
|
__routineName: routine.name,
|
|
8161
8256
|
__taskName: nextTask.name
|
|
@@ -8258,6 +8353,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8258
8353
|
delayMs: 3e3
|
|
8259
8354
|
});
|
|
8260
8355
|
const tasks = ctx.tasks;
|
|
8356
|
+
const serviceName = resolveSyncServiceName();
|
|
8357
|
+
if (!serviceName) {
|
|
8358
|
+
return;
|
|
8359
|
+
}
|
|
8261
8360
|
for (const task of tasks) {
|
|
8262
8361
|
if (task.registered) continue;
|
|
8263
8362
|
const { __functionString, __getTagCallback } = task.export();
|
|
@@ -8287,7 +8386,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8287
8386
|
retryDelay: task.retryDelay,
|
|
8288
8387
|
retryDelayMax: task.retryDelayMax,
|
|
8289
8388
|
retryDelayFactor: task.retryDelayFactor,
|
|
8290
|
-
service_name:
|
|
8389
|
+
service_name: serviceName,
|
|
8291
8390
|
signals: {
|
|
8292
8391
|
emits: Array.from(task.emitsSignals),
|
|
8293
8392
|
signalsToEmitAfter: Array.from(task.signalsToEmitAfter),
|
|
@@ -8335,11 +8434,15 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8335
8434
|
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8336
8435
|
delayMs: 3e3
|
|
8337
8436
|
});
|
|
8437
|
+
const serviceName = resolveSyncServiceName();
|
|
8438
|
+
if (!serviceName) {
|
|
8439
|
+
return;
|
|
8440
|
+
}
|
|
8338
8441
|
const actors = ctx.actors ?? [];
|
|
8339
8442
|
for (const actor of actors) {
|
|
8340
8443
|
const data = {
|
|
8341
8444
|
...buildActorRegistrationData(actor),
|
|
8342
|
-
service_name:
|
|
8445
|
+
service_name: serviceName
|
|
8343
8446
|
};
|
|
8344
8447
|
if (!data.name) {
|
|
8345
8448
|
continue;
|
|
@@ -8395,7 +8498,11 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8395
8498
|
if (!metadata?.actorName) {
|
|
8396
8499
|
return;
|
|
8397
8500
|
}
|
|
8398
|
-
const
|
|
8501
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8502
|
+
if (!serviceName) {
|
|
8503
|
+
return;
|
|
8504
|
+
}
|
|
8505
|
+
const registrationKey = `${metadata.actorName}|${task.name}|${task.version}|${serviceName}`;
|
|
8399
8506
|
if (this.registeredActorTaskMaps.has(registrationKey)) {
|
|
8400
8507
|
return;
|
|
8401
8508
|
}
|
|
@@ -8405,7 +8512,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8405
8512
|
actor_version: 1,
|
|
8406
8513
|
task_name: task.name,
|
|
8407
8514
|
task_version: task.version,
|
|
8408
|
-
service_name:
|
|
8515
|
+
service_name: serviceName,
|
|
8409
8516
|
mode: metadata.mode,
|
|
8410
8517
|
description: task.description ?? metadata.actorDescription ?? "",
|
|
8411
8518
|
is_meta: metadata.actorKind === "meta" || task.isMeta === true
|
|
@@ -8460,6 +8567,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8460
8567
|
function* (ctx) {
|
|
8461
8568
|
const task = ctx.task;
|
|
8462
8569
|
if (task.hidden || !task.register) return;
|
|
8570
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8571
|
+
if (!serviceName) {
|
|
8572
|
+
return;
|
|
8573
|
+
}
|
|
8463
8574
|
for (const signal of task.observedSignals) {
|
|
8464
8575
|
const _signal = signal.split(":")[0];
|
|
8465
8576
|
if (task.registeredSignals.has(signal)) continue;
|
|
@@ -8470,7 +8581,7 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8470
8581
|
isGlobal,
|
|
8471
8582
|
taskName: task.name,
|
|
8472
8583
|
taskVersion: task.version,
|
|
8473
|
-
serviceName
|
|
8584
|
+
serviceName
|
|
8474
8585
|
},
|
|
8475
8586
|
__taskName: task.name,
|
|
8476
8587
|
__signal: signal
|
|
@@ -8496,6 +8607,46 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8496
8607
|
{ concurrency: 30 }
|
|
8497
8608
|
) : CadenzaService.get("dbInsertSignalToTaskMap"))?.then(registerSignalTask)
|
|
8498
8609
|
);
|
|
8610
|
+
this.splitIntentsTask = CadenzaService.createMetaTask(
|
|
8611
|
+
"Split intents for registration",
|
|
8612
|
+
function* (ctx) {
|
|
8613
|
+
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8614
|
+
delayMs: 3e3
|
|
8615
|
+
});
|
|
8616
|
+
const intents = Array.isArray(ctx.intents) ? ctx.intents : Array.from(CadenzaService.inquiryBroker.intents.values());
|
|
8617
|
+
for (const intent of intents) {
|
|
8618
|
+
const intentData = buildIntentRegistryData(intent);
|
|
8619
|
+
if (!intentData) {
|
|
8620
|
+
continue;
|
|
8621
|
+
}
|
|
8622
|
+
if (this.registeredIntentDefinitions.has(intentData.name)) {
|
|
8623
|
+
continue;
|
|
8624
|
+
}
|
|
8625
|
+
yield {
|
|
8626
|
+
data: intentData,
|
|
8627
|
+
__intentName: intentData.name
|
|
8628
|
+
};
|
|
8629
|
+
}
|
|
8630
|
+
}.bind(this)
|
|
8631
|
+
).then(
|
|
8632
|
+
insertIntentRegistryTask?.then(
|
|
8633
|
+
CadenzaService.createMetaTask("Record intent definition registration", (ctx) => {
|
|
8634
|
+
if (!ctx.__syncing) {
|
|
8635
|
+
return;
|
|
8636
|
+
}
|
|
8637
|
+
CadenzaService.debounce("meta.sync_controller.synced_resource", {
|
|
8638
|
+
delayMs: 3e3
|
|
8639
|
+
});
|
|
8640
|
+
this.registeredIntentDefinitions.add(ctx.__intentName);
|
|
8641
|
+
return true;
|
|
8642
|
+
}).then(
|
|
8643
|
+
CadenzaService.createUniqueMetaTask(
|
|
8644
|
+
"Gather intent registration",
|
|
8645
|
+
() => true
|
|
8646
|
+
).emits("meta.sync_controller.synced_intents")
|
|
8647
|
+
)
|
|
8648
|
+
)
|
|
8649
|
+
);
|
|
8499
8650
|
const registerIntentTask = CadenzaService.createMetaTask(
|
|
8500
8651
|
"Record intent registration",
|
|
8501
8652
|
(ctx) => {
|
|
@@ -8515,6 +8666,10 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8515
8666
|
function* (ctx) {
|
|
8516
8667
|
const task = ctx.task;
|
|
8517
8668
|
if (task.hidden || !task.register) return;
|
|
8669
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8670
|
+
if (!serviceName) {
|
|
8671
|
+
return;
|
|
8672
|
+
}
|
|
8518
8673
|
task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
|
|
8519
8674
|
task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
|
|
8520
8675
|
for (const intent of task.handlesIntents) {
|
|
@@ -8534,36 +8689,75 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8534
8689
|
}
|
|
8535
8690
|
continue;
|
|
8536
8691
|
}
|
|
8692
|
+
const intentDefinition = buildIntentRegistryData(CadenzaService.inquiryBroker.intents.get(intent)) ?? buildIntentRegistryData({ name: intent });
|
|
8693
|
+
if (!intentDefinition) {
|
|
8694
|
+
continue;
|
|
8695
|
+
}
|
|
8537
8696
|
yield {
|
|
8538
8697
|
data: {
|
|
8539
8698
|
intentName: intent,
|
|
8540
8699
|
taskName: task.name,
|
|
8541
8700
|
taskVersion: task.version,
|
|
8542
|
-
serviceName
|
|
8701
|
+
serviceName
|
|
8543
8702
|
},
|
|
8544
8703
|
__taskName: task.name,
|
|
8545
|
-
__intent: intent
|
|
8704
|
+
__intent: intent,
|
|
8705
|
+
__intentDefinition: intentDefinition,
|
|
8706
|
+
__intentMapData: {
|
|
8707
|
+
intentName: intent,
|
|
8708
|
+
taskName: task.name,
|
|
8709
|
+
taskVersion: task.version,
|
|
8710
|
+
serviceName
|
|
8711
|
+
}
|
|
8546
8712
|
};
|
|
8547
8713
|
}
|
|
8548
8714
|
}
|
|
8549
8715
|
).then(
|
|
8550
|
-
|
|
8551
|
-
"
|
|
8552
|
-
{
|
|
8553
|
-
|
|
8554
|
-
|
|
8555
|
-
"intent_name",
|
|
8556
|
-
"task_name",
|
|
8557
|
-
"task_version",
|
|
8558
|
-
"service_name"
|
|
8559
|
-
],
|
|
8560
|
-
action: {
|
|
8561
|
-
do: "nothing"
|
|
8562
|
-
}
|
|
8716
|
+
CadenzaService.createMetaTask(
|
|
8717
|
+
"Prepare intent definition for intent-to-task map",
|
|
8718
|
+
(ctx) => {
|
|
8719
|
+
if (!ctx.__intentDefinition || !ctx.__intentMapData) {
|
|
8720
|
+
return false;
|
|
8563
8721
|
}
|
|
8564
|
-
|
|
8565
|
-
|
|
8566
|
-
|
|
8722
|
+
return {
|
|
8723
|
+
...ctx,
|
|
8724
|
+
data: ctx.__intentDefinition
|
|
8725
|
+
};
|
|
8726
|
+
}
|
|
8727
|
+
).then(
|
|
8728
|
+
insertIntentRegistryTask?.then(
|
|
8729
|
+
CadenzaService.createMetaTask(
|
|
8730
|
+
"Restore intent-to-task map payload",
|
|
8731
|
+
(ctx) => {
|
|
8732
|
+
if (!ctx.__intentMapData) {
|
|
8733
|
+
return false;
|
|
8734
|
+
}
|
|
8735
|
+
return {
|
|
8736
|
+
...ctx,
|
|
8737
|
+
data: ctx.__intentMapData
|
|
8738
|
+
};
|
|
8739
|
+
}
|
|
8740
|
+
).then(
|
|
8741
|
+
(this.isCadenzaDBReady ? CadenzaService.createCadenzaDBInsertTask(
|
|
8742
|
+
"intent_to_task_map",
|
|
8743
|
+
{
|
|
8744
|
+
onConflict: {
|
|
8745
|
+
target: [
|
|
8746
|
+
"intent_name",
|
|
8747
|
+
"task_name",
|
|
8748
|
+
"task_version",
|
|
8749
|
+
"service_name"
|
|
8750
|
+
],
|
|
8751
|
+
action: {
|
|
8752
|
+
do: "nothing"
|
|
8753
|
+
}
|
|
8754
|
+
}
|
|
8755
|
+
},
|
|
8756
|
+
{ concurrency: 30 }
|
|
8757
|
+
) : CadenzaService.get("dbInsertIntentToTaskMap"))?.then(registerIntentTask)
|
|
8758
|
+
)
|
|
8759
|
+
)
|
|
8760
|
+
)
|
|
8567
8761
|
);
|
|
8568
8762
|
this.registerTaskMapTask = CadenzaService.createMetaTask(
|
|
8569
8763
|
"Register task map to DB",
|
|
@@ -8573,18 +8767,26 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8573
8767
|
delayMs: 3e3
|
|
8574
8768
|
});
|
|
8575
8769
|
if (task.hidden || !task.register) return;
|
|
8770
|
+
const predecessorServiceName = resolveSyncServiceName(task);
|
|
8771
|
+
if (!predecessorServiceName) {
|
|
8772
|
+
return;
|
|
8773
|
+
}
|
|
8576
8774
|
for (const t of task.nextTasks) {
|
|
8577
8775
|
if (task.taskMapRegistration.has(t.name) || t.hidden || !t.register) {
|
|
8578
8776
|
continue;
|
|
8579
8777
|
}
|
|
8778
|
+
const serviceName = resolveSyncServiceName(t);
|
|
8779
|
+
if (!serviceName) {
|
|
8780
|
+
continue;
|
|
8781
|
+
}
|
|
8580
8782
|
yield {
|
|
8581
8783
|
data: {
|
|
8582
8784
|
taskName: t.name,
|
|
8583
8785
|
taskVersion: t.version,
|
|
8584
8786
|
predecessorTaskName: task.name,
|
|
8585
8787
|
predecessorTaskVersion: task.version,
|
|
8586
|
-
serviceName
|
|
8587
|
-
predecessorServiceName
|
|
8788
|
+
serviceName,
|
|
8789
|
+
predecessorServiceName
|
|
8588
8790
|
},
|
|
8589
8791
|
__taskName: task.name,
|
|
8590
8792
|
__nextTaskName: t.name
|
|
@@ -8631,14 +8833,19 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8631
8833
|
if (task.hidden || !task.register) return;
|
|
8632
8834
|
if (task.isDeputy && !task.signalName) {
|
|
8633
8835
|
if (task.registeredDeputyMap) return;
|
|
8836
|
+
const serviceName = resolveSyncServiceName(task);
|
|
8837
|
+
const predecessorServiceName = resolveSyncServiceName();
|
|
8838
|
+
if (!serviceName || !predecessorServiceName) {
|
|
8839
|
+
return;
|
|
8840
|
+
}
|
|
8634
8841
|
return {
|
|
8635
8842
|
data: {
|
|
8636
8843
|
task_name: task.remoteRoutineName,
|
|
8637
8844
|
task_version: 1,
|
|
8638
|
-
service_name:
|
|
8845
|
+
service_name: serviceName,
|
|
8639
8846
|
predecessor_task_name: task.name,
|
|
8640
8847
|
predecessor_task_version: task.version,
|
|
8641
|
-
predecessor_service_name:
|
|
8848
|
+
predecessor_service_name: predecessorServiceName
|
|
8642
8849
|
},
|
|
8643
8850
|
__taskName: task.name
|
|
8644
8851
|
};
|
|
@@ -8683,6 +8890,12 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8683
8890
|
"meta.service_registry.initial_sync_complete"
|
|
8684
8891
|
).then(this.splitSignalsTask);
|
|
8685
8892
|
CadenzaService.registry.getAllTasks.clone().doOn("meta.sync_controller.synced_signals").then(this.splitTasksForRegistration);
|
|
8893
|
+
CadenzaService.createMetaTask("Get all intents", (ctx) => {
|
|
8894
|
+
return {
|
|
8895
|
+
...ctx,
|
|
8896
|
+
intents: Array.from(CadenzaService.inquiryBroker.intents.values())
|
|
8897
|
+
};
|
|
8898
|
+
}).doOn("meta.sync_controller.synced_tasks").then(this.splitIntentsTask);
|
|
8686
8899
|
CadenzaService.registry.getAllRoutines.clone().doOn("meta.sync_controller.synced_tasks").then(this.splitRoutinesTask);
|
|
8687
8900
|
CadenzaService.createMetaTask("Get all actors", (ctx) => {
|
|
8688
8901
|
return {
|
|
@@ -8693,9 +8906,9 @@ var GraphSyncController = class _GraphSyncController {
|
|
|
8693
8906
|
CadenzaService.registry.doForEachTask.clone().doOn("meta.sync_controller.synced_tasks").then(
|
|
8694
8907
|
this.registerTaskMapTask,
|
|
8695
8908
|
this.registerSignalToTaskMapTask,
|
|
8696
|
-
this.registerIntentToTaskMapTask,
|
|
8697
8909
|
this.registerDeputyRelationshipTask
|
|
8698
8910
|
);
|
|
8911
|
+
CadenzaService.registry.doForEachTask.clone().doOn("meta.sync_controller.synced_tasks", "meta.sync_controller.synced_intents").then(this.registerIntentToTaskMapTask);
|
|
8699
8912
|
CadenzaService.registry.doForEachTask.clone().doOn("meta.sync_controller.synced_tasks", "meta.sync_controller.synced_actors").then(this.registerActorTaskMapTask);
|
|
8700
8913
|
CadenzaService.registry.getAllRoutines.clone().doOn("meta.sync_controller.synced_routines").then(this.splitTasksInRoutines);
|
|
8701
8914
|
CadenzaService.createMetaTask("Finish sync", (ctx, emit) => {
|
|
@@ -8955,9 +9168,9 @@ var CadenzaService = class {
|
|
|
8955
9168
|
static normalizeDeclaredTransports(transports, serviceId) {
|
|
8956
9169
|
return (transports ?? []).map((transport) => normalizeServiceTransportConfig(transport)).filter(
|
|
8957
9170
|
(transport) => !!transport
|
|
8958
|
-
).map((transport
|
|
9171
|
+
).map((transport) => ({
|
|
8959
9172
|
...transport,
|
|
8960
|
-
uuid:
|
|
9173
|
+
uuid: (0, import_uuid4.v4)()
|
|
8961
9174
|
}));
|
|
8962
9175
|
}
|
|
8963
9176
|
static createBootstrapTransport(serviceInstanceId, role, endpoint) {
|
|
@@ -9201,7 +9414,7 @@ var CadenzaService = class {
|
|
|
9201
9414
|
}
|
|
9202
9415
|
for (const responder of responders) {
|
|
9203
9416
|
const { task, descriptor } = responder;
|
|
9204
|
-
const inquiryId = (0,
|
|
9417
|
+
const inquiryId = (0, import_uuid4.v4)();
|
|
9205
9418
|
startTimeByTask.set(task, Date.now());
|
|
9206
9419
|
const resolverTask = this.createEphemeralMetaTask(
|
|
9207
9420
|
`Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,
|
|
@@ -9690,7 +9903,7 @@ var CadenzaService = class {
|
|
|
9690
9903
|
this.bootstrap();
|
|
9691
9904
|
this.validateName(serviceName);
|
|
9692
9905
|
this.validateServiceName(serviceName);
|
|
9693
|
-
const serviceId = options.customServiceId ?? (0,
|
|
9906
|
+
const serviceId = options.customServiceId ?? (0, import_uuid4.v4)();
|
|
9694
9907
|
this.serviceRegistry.serviceName = serviceName;
|
|
9695
9908
|
this.serviceRegistry.serviceInstanceId = serviceId;
|
|
9696
9909
|
this.setHydrationResults(options.hydration);
|
|
@@ -10515,7 +10728,7 @@ CadenzaService.frontendSyncScheduled = false;
|
|
|
10515
10728
|
var import_core5 = require("@cadenza.io/core");
|
|
10516
10729
|
|
|
10517
10730
|
// src/ssr/createSSRInquiryBridge.ts
|
|
10518
|
-
var
|
|
10731
|
+
var import_uuid5 = require("uuid");
|
|
10519
10732
|
function ensureFetch() {
|
|
10520
10733
|
if (typeof globalThis.fetch !== "function") {
|
|
10521
10734
|
throw new Error("SSR inquiry bridge requires global fetch support.");
|
|
@@ -10591,7 +10804,7 @@ function createSSRInquiryBridge(options = {}) {
|
|
|
10591
10804
|
__remoteRoutineName: remoteRoutineName,
|
|
10592
10805
|
__metadata: {
|
|
10593
10806
|
...context.__metadata ?? {},
|
|
10594
|
-
__deputyExecId: (0,
|
|
10807
|
+
__deputyExecId: (0, import_uuid5.v4)()
|
|
10595
10808
|
}
|
|
10596
10809
|
}),
|
|
10597
10810
|
signal
|