@cadenza.io/service 1.8.4 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -154,11 +154,14 @@ declare class ServiceRegistry {
154
154
  static get instance(): ServiceRegistry;
155
155
  private instances;
156
156
  private deputies;
157
+ private remoteSignals;
157
158
  serviceName: string | null;
158
159
  serviceInstanceId: string | null;
159
160
  useSocket: boolean;
160
161
  retryCount: number;
161
162
  handleInstanceUpdateTask: Task;
163
+ handleRemoteSignalRegistrationTask: Task;
164
+ getRemoteSignalsTask: Task;
162
165
  handleSocketStatusUpdateTask: Task;
163
166
  fullSyncTask: Task;
164
167
  getAllInstances: Task;
package/dist/index.d.ts CHANGED
@@ -154,11 +154,14 @@ declare class ServiceRegistry {
154
154
  static get instance(): ServiceRegistry;
155
155
  private instances;
156
156
  private deputies;
157
+ private remoteSignals;
157
158
  serviceName: string | null;
158
159
  serviceInstanceId: string | null;
159
160
  useSocket: boolean;
160
161
  retryCount: number;
161
162
  handleInstanceUpdateTask: Task;
163
+ handleRemoteSignalRegistrationTask: Task;
164
+ getRemoteSignalsTask: Task;
162
165
  handleSocketStatusUpdateTask: Task;
163
166
  fullSyncTask: Task;
164
167
  getAllInstances: Task;
package/dist/index.js CHANGED
@@ -327,6 +327,7 @@ var ServiceRegistry = class _ServiceRegistry {
327
327
  constructor() {
328
328
  this.instances = /* @__PURE__ */ new Map();
329
329
  this.deputies = /* @__PURE__ */ new Map();
330
+ this.remoteSignals = /* @__PURE__ */ new Map();
330
331
  this.serviceName = null;
331
332
  this.serviceInstanceId = null;
332
333
  this.useSocket = false;
@@ -344,12 +345,15 @@ var ServiceRegistry = class _ServiceRegistry {
344
345
  if (existing) {
345
346
  Object.assign(existing, serviceInstance);
346
347
  } else {
347
- if (this.deputies.has(serviceName)) {
348
+ if (this.deputies.has(serviceName) || this.remoteSignals.has(serviceName)) {
348
349
  const communicationTypes = Array.from(
349
350
  new Set(
350
351
  (_a2 = this.deputies.get(serviceName).map((d) => d.communicationType)) != null ? _a2 : []
351
352
  )
352
353
  );
354
+ if (!communicationTypes.includes("signal") && this.remoteSignals.has(serviceName)) {
355
+ communicationTypes.push("signal");
356
+ }
353
357
  emit("meta.service_registry.dependee_registered", {
354
358
  serviceName,
355
359
  serviceInstanceId: id,
@@ -382,6 +386,43 @@ var ServiceRegistry = class _ServiceRegistry {
382
386
  "CadenzaDB.meta.service_instance.inserted",
383
387
  "CadenzaDB.meta.service_instance.updated"
384
388
  );
389
+ this.handleRemoteSignalRegistrationTask = CadenzaService.createMetaTask(
390
+ "Handle Remote Signal Registration",
391
+ (ctx) => {
392
+ const { __remoteServiceName, __emitterSignalName } = ctx;
393
+ let remoteSignals = this.remoteSignals.get(__remoteServiceName);
394
+ if (!remoteSignals) {
395
+ this.remoteSignals.set(__remoteServiceName, []);
396
+ remoteSignals = this.remoteSignals.get(__remoteServiceName);
397
+ }
398
+ if (remoteSignals && remoteSignals.findIndex(
399
+ (s) => s.__emitterSignalName === __emitterSignalName
400
+ ) === -1) {
401
+ remoteSignals.push({
402
+ __listenerServiceName: ctx.__listenerServiceName,
403
+ __emitterSignalName,
404
+ __signalName: ctx.__signalName,
405
+ __remoteServiceName
406
+ });
407
+ return true;
408
+ }
409
+ return false;
410
+ },
411
+ "Handles registration of remote signals"
412
+ );
413
+ this.getRemoteSignalsTask = CadenzaService.createMetaTask(
414
+ "Get remote signals",
415
+ (ctx) => {
416
+ var _a2, _b2;
417
+ const { serviceName } = ctx;
418
+ let remoteSignals = (_a2 = this.remoteSignals.get(serviceName)) != null ? _a2 : [];
419
+ remoteSignals = remoteSignals.concat((_b2 = this.remoteSignals.get("*")) != null ? _b2 : []);
420
+ return __spreadValues({
421
+ __remoteSignals: remoteSignals
422
+ }, ctx);
423
+ },
424
+ "Gets remote signals"
425
+ ).doOn("meta.fetch.handshake_complete");
385
426
  this.handleSocketStatusUpdateTask = CadenzaService.createMetaTask(
386
427
  "Handle Socket Status Update",
387
428
  (ctx) => {
@@ -1111,7 +1152,7 @@ var RestController = class _RestController {
1111
1152
  var _a2;
1112
1153
  const response = yield (0, import_node_fetch.default)(`${URL}/handshake`, {
1113
1154
  method: "POST",
1114
- body: JSON.stringify(ctx2)
1155
+ body: JSON.stringify(ctx2.handshakeData)
1115
1156
  });
1116
1157
  const result = yield response.json();
1117
1158
  if (result.__status === "error" || result.status !== 200) {
@@ -1125,11 +1166,14 @@ var RestController = class _RestController {
1125
1166
  );
1126
1167
  for (const communicationType of ctx2.communicationTypes) {
1127
1168
  emit2("meta.fetch.service_communication_established", {
1128
- serviceInstanceId: ctx2.serviceInstanceId,
1129
- serviceInstanceClientId: CadenzaService.serviceRegistry.serviceInstanceId,
1130
- communicationType
1169
+ data: {
1170
+ serviceInstanceId: ctx2.serviceInstanceId,
1171
+ serviceInstanceClientId: CadenzaService.serviceRegistry.serviceInstanceId,
1172
+ communicationType
1173
+ }
1131
1174
  });
1132
1175
  }
1176
+ return true;
1133
1177
  }),
1134
1178
  "Sends handshake request",
1135
1179
  {
@@ -1214,10 +1258,24 @@ var RestController = class _RestController {
1214
1258
  }),
1215
1259
  "Requests status"
1216
1260
  ).doOn("meta.fetch.status_check_requested").emits("meta.fetch.status_checked").emitsOnFail("meta.fetch.status_check_failed");
1217
- emit(`meta.fetch.handshake_requested:${serviceInstanceId}`, __spreadValues({}, ctx));
1218
1261
  return true;
1219
1262
  },
1220
1263
  "Manages REST client requests as fallback"
1264
+ ).then(
1265
+ CadenzaService.createMetaTask(
1266
+ "Prepare handshake",
1267
+ (ctx, emit) => {
1268
+ const { serviceInstanceId, serviceName } = ctx;
1269
+ emit(`meta.fetch.handshake_requested:${serviceInstanceId}`, {
1270
+ serviceInstanceId,
1271
+ serviceName,
1272
+ handshakeData: {
1273
+ // JWT token...
1274
+ }
1275
+ });
1276
+ },
1277
+ "Prepares handshake"
1278
+ )
1221
1279
  ).doOn("meta.service_registry.dependee_registered").emitsOnFail("meta.fetch.connect_failed");
1222
1280
  }
1223
1281
  };
@@ -1511,7 +1569,6 @@ var SignalController = class _SignalController {
1511
1569
  "Handle Signal Registration",
1512
1570
  (ctx, emit) => {
1513
1571
  const { __signalName } = ctx;
1514
- const firstChar = __signalName.charAt(0);
1515
1572
  const parts = __signalName.split(".");
1516
1573
  const domain = parts[0] === "meta" ? parts[1] : parts[0];
1517
1574
  const action = parts[parts.length - 1];
@@ -1524,24 +1581,55 @@ var SignalController = class _SignalController {
1524
1581
  service_name: CadenzaService.serviceRegistry.serviceName
1525
1582
  }
1526
1583
  });
1527
- if (firstChar === firstChar.toUpperCase() && firstChar !== firstChar.toLowerCase() || firstChar === "*") {
1528
- const serviceName = __signalName.split(".")[0];
1529
- ctx.__listenerServiceName = CadenzaService.serviceRegistry.serviceName;
1530
- ctx.__emitterSignalName = __signalName.split(".").slice(1).join(".");
1531
- ctx.__signalName = "meta.signal_controller.foreign_signal_registered";
1532
- if (serviceName === "*") {
1533
- emit("meta.signal_controller.wildcard_signal_registered", ctx);
1584
+ return ctx;
1585
+ },
1586
+ "Handles signal registration from a service instance"
1587
+ ).then(
1588
+ CadenzaService.createMetaTask(
1589
+ "Handle foreign signal registration",
1590
+ (ctx, emit) => {
1591
+ const { __signalName } = ctx;
1592
+ const firstChar = __signalName.charAt(0);
1593
+ if (firstChar === firstChar.toUpperCase() && firstChar !== firstChar.toLowerCase() || firstChar === "*") {
1594
+ const serviceName = __signalName.split(".")[0];
1595
+ ctx.__listenerServiceName = CadenzaService.serviceRegistry.serviceName;
1596
+ ctx.__emitterSignalName = __signalName.split(".").slice(1).join(".");
1597
+ ctx.__signalName = "meta.signal_controller.foreign_signal_registered";
1598
+ ctx.__remoteServiceName = serviceName;
1599
+ if (serviceName === "*") {
1600
+ emit("meta.signal_controller.wildcard_signal_registered", ctx);
1601
+ } else {
1602
+ emit(
1603
+ `meta.signal_controller.remote_signal_registered:${serviceName}`,
1604
+ ctx
1605
+ );
1606
+ }
1607
+ return ctx;
1608
+ }
1609
+ }
1610
+ ).then(CadenzaService.serviceRegistry.handleRemoteSignalRegistrationTask)
1611
+ ).doOn("meta.signal_broker.added");
1612
+ CadenzaService.createMetaTask(
1613
+ "Forward signal observations to remote service",
1614
+ (ctx, emit) => {
1615
+ const { __remoteSignals } = ctx;
1616
+ for (const remoteSignal of __remoteSignals) {
1617
+ if (remoteSignal.__remoteServiceName === "*") {
1618
+ emit(
1619
+ "meta.signal_controller.wildcard_signal_registered",
1620
+ remoteSignal
1621
+ );
1534
1622
  } else {
1535
1623
  emit(
1536
- `meta.signal_controller.remote_signal_registered:${serviceName}`,
1537
- ctx
1624
+ `meta.signal_controller.remote_signal_registered:${remoteSignal.__remoteServiceName}`,
1625
+ remoteSignal
1538
1626
  );
1539
1627
  }
1540
1628
  }
1541
- return ctx;
1629
+ return true;
1542
1630
  },
1543
- "Handles signal registration from a service instance"
1544
- ).doOn("meta.signal_broker.added");
1631
+ "Forwards signal observations to remote service"
1632
+ ).doAfter(CadenzaService.serviceRegistry.getRemoteSignalsTask);
1545
1633
  CadenzaService.createMetaTask("Handle foreign signal registration", (ctx) => {
1546
1634
  const { __emitterSignalName, __listenerServiceName } = ctx;
1547
1635
  CadenzaService.createSignalTransmissionTask(
@@ -2995,6 +3083,11 @@ var DatabaseController = class _DatabaseController {
2995
3083
  delete context.sort;
2996
3084
  delete context.limit;
2997
3085
  delete context.offset;
3086
+ console.log(
3087
+ "EXECUTED",
3088
+ `db${op.charAt(0).toUpperCase() + op.slice(1)}${tableName.charAt(0).toUpperCase() + tableName.slice(1)}`,
3089
+ context
3090
+ );
2998
3091
  return context;
2999
3092
  }),
3000
3093
  `Auto-generated ${op} task for ${tableName}`,