@cadenza.io/service 1.9.55 → 1.10.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.js +75 -63
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +75 -63
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -142,9 +142,11 @@ var DeputyTask = class extends import_core.Task {
|
|
|
142
142
|
return new Promise((resolve, reject) => {
|
|
143
143
|
if (context.__metadata.__blockRemoteExecution) {
|
|
144
144
|
reject(new Error("Blocked remote execution"));
|
|
145
|
+
return;
|
|
145
146
|
}
|
|
146
147
|
if (context.__metadata.__skipRemoteExecution) {
|
|
147
148
|
resolve(true);
|
|
149
|
+
return;
|
|
148
150
|
}
|
|
149
151
|
const processId = (0, import_uuid.v4)();
|
|
150
152
|
context.__metadata.__deputyExecId = processId;
|
|
@@ -336,16 +338,16 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
336
338
|
"Handle Instance Update",
|
|
337
339
|
(ctx, emit) => {
|
|
338
340
|
var _a2;
|
|
339
|
-
const {
|
|
340
|
-
const { id, serviceName, address, port, exposed } =
|
|
341
|
+
const { service_instance } = ctx;
|
|
342
|
+
const { id, serviceName, address, port, exposed } = service_instance;
|
|
341
343
|
if (!this.instances.has(serviceName))
|
|
342
344
|
this.instances.set(serviceName, []);
|
|
343
345
|
const instances = this.instances.get(serviceName);
|
|
344
346
|
const existing = instances.find((i) => i.id === id);
|
|
345
347
|
if (existing) {
|
|
346
|
-
Object.assign(existing,
|
|
348
|
+
Object.assign(existing, service_instance);
|
|
347
349
|
} else {
|
|
348
|
-
if (this.deputies.has(serviceName) || this.remoteSignals.has(serviceName) || this.remoteSignals.has("*")) {
|
|
350
|
+
if (this.deputies.has(serviceName) || this.remoteSignals.has(serviceName) || this.remoteSignals.has("*") && this.serviceName !== serviceName) {
|
|
349
351
|
const communicationTypes = Array.from(
|
|
350
352
|
new Set(
|
|
351
353
|
(_a2 = this.deputies.get(serviceName).map((d) => d.communicationType)) != null ? _a2 : []
|
|
@@ -362,7 +364,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
362
364
|
protocol: exposed ? "https" : "http",
|
|
363
365
|
communicationTypes
|
|
364
366
|
});
|
|
365
|
-
|
|
367
|
+
service_instance.clientCreated = true;
|
|
366
368
|
for (const instance of this.instances.get(serviceName)) {
|
|
367
369
|
if (instance.clientCreated) continue;
|
|
368
370
|
instance.clientCreated = true;
|
|
@@ -376,7 +378,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
376
378
|
});
|
|
377
379
|
}
|
|
378
380
|
}
|
|
379
|
-
instances.push(
|
|
381
|
+
instances.push(service_instance);
|
|
380
382
|
}
|
|
381
383
|
return true;
|
|
382
384
|
},
|
|
@@ -422,7 +424,10 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
422
424
|
}, ctx);
|
|
423
425
|
},
|
|
424
426
|
"Gets remote signals"
|
|
425
|
-
).doOn(
|
|
427
|
+
).doOn(
|
|
428
|
+
"meta.register_remote_signals_requested",
|
|
429
|
+
"meta.fetch.handshake_complete"
|
|
430
|
+
);
|
|
426
431
|
this.handleSocketStatusUpdateTask = CadenzaService.createMetaTask(
|
|
427
432
|
"Handle Socket Status Update",
|
|
428
433
|
(ctx) => {
|
|
@@ -456,10 +461,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
456
461
|
"health",
|
|
457
462
|
"exposed"
|
|
458
463
|
]
|
|
459
|
-
}).doOn(
|
|
460
|
-
"meta.service_registry_sync_requested",
|
|
461
|
-
"meta.service_registry.instance_inserted"
|
|
462
|
-
).then(
|
|
464
|
+
}).doOn("meta.service_registry_sync_requested").then(
|
|
463
465
|
CadenzaService.createMetaTask("Split service instances", function* (ctx) {
|
|
464
466
|
const { serviceInstances } = ctx;
|
|
465
467
|
if (!serviceInstances) return;
|
|
@@ -467,6 +469,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
467
469
|
yield { serviceInstance };
|
|
468
470
|
}
|
|
469
471
|
}).then(this.handleInstanceUpdateTask)
|
|
472
|
+
// .emits("meta.process_signal_queue_requested"), // TODO Has to happen after the endpoints has been created...
|
|
470
473
|
);
|
|
471
474
|
this.updateInstanceId = CadenzaService.createMetaTask(
|
|
472
475
|
"Update instance id",
|
|
@@ -761,10 +764,7 @@ var ServiceRegistry = class _ServiceRegistry {
|
|
|
761
764
|
return true;
|
|
762
765
|
},
|
|
763
766
|
"Sets service instance id after insertion"
|
|
764
|
-
).emits(
|
|
765
|
-
"meta.service_registry.instance_inserted",
|
|
766
|
-
"meta.process_signal_queue_requested"
|
|
767
|
-
)
|
|
767
|
+
).emits("meta.service_registry.instance_inserted")
|
|
768
768
|
);
|
|
769
769
|
CadenzaService.createMetaTask(
|
|
770
770
|
"Handle service creation",
|
|
@@ -1344,53 +1344,58 @@ var SocketController = class _SocketController {
|
|
|
1344
1344
|
if (!ctx.__useSocket) {
|
|
1345
1345
|
return;
|
|
1346
1346
|
}
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
limiter
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1347
|
+
console.log("SocketServer: Setting up", ctx);
|
|
1348
|
+
try {
|
|
1349
|
+
const server = new import_socket.Server((_a2 = ctx.__httpsServer) != null ? _a2 : ctx.__httpServer);
|
|
1350
|
+
ctx.__socketServer = server;
|
|
1351
|
+
const profile = (_b2 = ctx.__securityProfile) != null ? _b2 : "medium";
|
|
1352
|
+
server.use((socket, next) => {
|
|
1353
|
+
var _a3;
|
|
1354
|
+
const origin = socket.handshake.headers.origin;
|
|
1355
|
+
const allowedOrigins = ["*"];
|
|
1356
|
+
const networkType = (_a3 = ctx.__networkType) != null ? _a3 : "internal";
|
|
1357
|
+
let effectiveOrigin = origin || "unknown";
|
|
1358
|
+
if (networkType === "internal") effectiveOrigin = "internal";
|
|
1359
|
+
if (profile !== "low" && !allowedOrigins.includes(effectiveOrigin) && !allowedOrigins.includes("*")) {
|
|
1360
|
+
return next(new Error("Unauthorized origin"));
|
|
1361
|
+
}
|
|
1362
|
+
const limiterOptions = {
|
|
1363
|
+
low: { points: Infinity, duration: 300 },
|
|
1364
|
+
medium: { points: 100, duration: 300 },
|
|
1365
|
+
high: { points: 50, duration: 60, blockDuration: 300 }
|
|
1366
|
+
};
|
|
1367
|
+
const limiter = new import_rate_limiter_flexible2.RateLimiterMemory(limiterOptions[profile]);
|
|
1368
|
+
socket.use((packet, next2) => {
|
|
1369
|
+
limiter.consume(socket.handshake.address).then(() => next2()).catch((rej) => {
|
|
1370
|
+
if (rej.msBeforeNext > 0) {
|
|
1371
|
+
socket.emit("error", {
|
|
1372
|
+
message: "Rate limit exceeded",
|
|
1373
|
+
retryAfter: rej.msBeforeNext / 1e3
|
|
1374
|
+
});
|
|
1375
|
+
} else {
|
|
1376
|
+
socket.disconnect(true);
|
|
1377
|
+
}
|
|
1378
|
+
});
|
|
1376
1379
|
});
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1380
|
+
socket.use((packet, next2) => {
|
|
1381
|
+
if (profile !== "low") {
|
|
1382
|
+
const sanitize = (data) => {
|
|
1383
|
+
if (typeof data === "string") return (0, import_xss.default)(data);
|
|
1384
|
+
if (typeof data === "object") {
|
|
1385
|
+
for (const key in data) {
|
|
1386
|
+
data[key] = sanitize(data[key]);
|
|
1387
|
+
}
|
|
1385
1388
|
}
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1389
|
+
return data;
|
|
1390
|
+
};
|
|
1391
|
+
packet[1] = sanitize(packet[1]);
|
|
1392
|
+
}
|
|
1393
|
+
next2();
|
|
1394
|
+
});
|
|
1392
1395
|
});
|
|
1393
|
-
})
|
|
1396
|
+
} catch (err) {
|
|
1397
|
+
console.error("Socket setup error:", err);
|
|
1398
|
+
}
|
|
1394
1399
|
}).then(
|
|
1395
1400
|
CadenzaService.createMetaTask(
|
|
1396
1401
|
"Start SocketServer",
|
|
@@ -1548,6 +1553,7 @@ var SocketController = class _SocketController {
|
|
|
1548
1553
|
if (ctx2.__remoteRoutineName === void 0) {
|
|
1549
1554
|
return;
|
|
1550
1555
|
}
|
|
1556
|
+
console.log("Socket Delegate:", ctx2);
|
|
1551
1557
|
let resultContext;
|
|
1552
1558
|
try {
|
|
1553
1559
|
resultContext = yield socket.timeout((_a2 = ctx2.__timeout) != null ? _a2 : 0).emitWithAck("delegation", ctx2);
|
|
@@ -1558,6 +1564,7 @@ var SocketController = class _SocketController {
|
|
|
1558
1564
|
__spreadValues(__spreadValues({}, resultContext), metadata)
|
|
1559
1565
|
);
|
|
1560
1566
|
} catch (e) {
|
|
1567
|
+
console.log("socket error:", e);
|
|
1561
1568
|
resultContext = __spreadValues(__spreadValues({
|
|
1562
1569
|
__error: `Timeout error: ${e}`,
|
|
1563
1570
|
errored: true
|
|
@@ -1647,6 +1654,9 @@ var SignalController = class _SignalController {
|
|
|
1647
1654
|
const firstChar = __signalName.charAt(0);
|
|
1648
1655
|
if (firstChar === firstChar.toUpperCase() && firstChar !== firstChar.toLowerCase() || firstChar === "*") {
|
|
1649
1656
|
const serviceName = __signalName.split(".")[0];
|
|
1657
|
+
if (CadenzaService.serviceRegistry.serviceName === serviceName) {
|
|
1658
|
+
return false;
|
|
1659
|
+
}
|
|
1650
1660
|
ctx.__listenerServiceName = CadenzaService.serviceRegistry.serviceName;
|
|
1651
1661
|
ctx.__emitterSignalName = __signalName.split(".").slice(1).join(".");
|
|
1652
1662
|
ctx.__signalName = "meta.signal_controller.foreign_signal_registered";
|
|
@@ -3628,8 +3638,8 @@ var CadenzaService = class {
|
|
|
3628
3638
|
if ((_g = options.cadenzaDB) == null ? void 0 : _g.connect) {
|
|
3629
3639
|
import_core3.default.broker.emit("meta.initializing_service", {
|
|
3630
3640
|
// Seed the CadenzaDB
|
|
3631
|
-
|
|
3632
|
-
|
|
3641
|
+
service_instance: {
|
|
3642
|
+
uuid: "cadenza-db",
|
|
3633
3643
|
serviceName: "CadenzaDB",
|
|
3634
3644
|
address: (_h = options.cadenzaDB) == null ? void 0 : _h.address,
|
|
3635
3645
|
port: (_i = options.cadenzaDB) == null ? void 0 : _i.port,
|
|
@@ -3646,8 +3656,8 @@ var CadenzaService = class {
|
|
|
3646
3656
|
(_j = options.relatedServices) == null ? void 0 : _j.forEach((service) => {
|
|
3647
3657
|
var _a3;
|
|
3648
3658
|
import_core3.default.broker.emit("meta.initializing_service", {
|
|
3649
|
-
|
|
3650
|
-
|
|
3659
|
+
service_instance: {
|
|
3660
|
+
uuid: service[0],
|
|
3651
3661
|
serviceName: service[1],
|
|
3652
3662
|
address: service[2].split(":")[0],
|
|
3653
3663
|
port: (_a3 = service[2].split(":")[1]) != null ? _a3 : 3e3,
|
|
@@ -3691,6 +3701,8 @@ var CadenzaService = class {
|
|
|
3691
3701
|
(ctx, emit) => {
|
|
3692
3702
|
SignalController.instance;
|
|
3693
3703
|
GraphMetadataController.instance;
|
|
3704
|
+
emit("meta.service_registry_sync_requested", {});
|
|
3705
|
+
emit("meta.register_remote_signals_requested", { serviceName });
|
|
3694
3706
|
emit("meta.register_all_routines", {});
|
|
3695
3707
|
emit("meta.register_all_tasks", {});
|
|
3696
3708
|
emit("meta.register_all_signals", {});
|