@simplysm/service-client 13.0.69 → 13.0.71
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/README.md +28 -620
- package/dist/features/event-client.d.ts.map +1 -1
- package/dist/features/event-client.js +6 -3
- package/dist/features/event-client.js.map +1 -1
- package/dist/features/orm/orm-client-connector.js +1 -1
- package/dist/features/orm/orm-client-connector.js.map +1 -1
- package/dist/features/orm/orm-client-db-context-executor.js +7 -7
- package/dist/features/orm/orm-client-db-context-executor.js.map +1 -1
- package/dist/protocol/client-protocol-wrapper.js +2 -2
- package/dist/service-client.js +6 -6
- package/dist/service-client.js.map +1 -1
- package/dist/transport/service-transport.d.ts.map +1 -1
- package/dist/transport/service-transport.js +3 -1
- package/dist/transport/service-transport.js.map +1 -1
- package/dist/transport/socket-provider.js +6 -6
- package/dist/transport/socket-provider.js.map +1 -1
- package/dist/types/connection-config.d.ts +1 -1
- package/dist/types/connection-config.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/features/event-client.ts +12 -8
- package/src/features/file-client.ts +3 -3
- package/src/features/orm/orm-client-connector.ts +1 -1
- package/src/features/orm/orm-client-db-context-executor.ts +7 -7
- package/src/protocol/client-protocol-wrapper.ts +16 -16
- package/src/service-client.ts +12 -12
- package/src/transport/service-transport.ts +18 -15
- package/src/transport/socket-provider.ts +35 -35
- package/src/types/connection-config.ts +1 -1
- package/src/workers/client-protocol.worker.ts +9 -9
|
@@ -21,8 +21,11 @@ function createEventClient(transport) {
|
|
|
21
21
|
return key;
|
|
22
22
|
}
|
|
23
23
|
async function removeListener(key) {
|
|
24
|
-
await transport.send({ name: "evt:remove", body: { key } });
|
|
25
24
|
listenerMap.delete(key);
|
|
25
|
+
try {
|
|
26
|
+
await transport.send({ name: "evt:remove", body: { key } });
|
|
27
|
+
} catch {
|
|
28
|
+
}
|
|
26
29
|
}
|
|
27
30
|
async function emitToServer(eventDef, infoSelector, data) {
|
|
28
31
|
const eventName = eventDef.eventName;
|
|
@@ -46,7 +49,7 @@ function createEventClient(transport) {
|
|
|
46
49
|
body: { key, name: value.eventName, info: value.info }
|
|
47
50
|
});
|
|
48
51
|
} catch (err) {
|
|
49
|
-
logger.error("
|
|
52
|
+
logger.error("Failed to recover event listener", { err, eventName: value.eventName });
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
55
|
}
|
|
@@ -57,7 +60,7 @@ function createEventClient(transport) {
|
|
|
57
60
|
try {
|
|
58
61
|
await entry.cb(data);
|
|
59
62
|
} catch (err) {
|
|
60
|
-
logger.error("
|
|
63
|
+
logger.error("Event handler error", { err, eventName: entry.eventName });
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/features/event-client.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,YAAY;AAGrB,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,4BAA4B;AAiBpD,SAAS,kBAAkB,WAA0C;AAC1E,QAAM,cAAc,oBAAI,IAGtB;AAEF,YAAU,GAAG,SAAS,OAAO,EAAE,MAAM,KAAK,MAAM;AAC9C,UAAM,aAAa,MAAM,IAAI;AAAA,EAC/B,CAAC;AAED,iBAAe,YACb,UACA,MACA,IACiB;AACjB,UAAM,MAAM,KAAK,IAAI,EAAE,SAAS;AAChC,UAAM,YAAY,SAAS;AAG3B,UAAM,UAAU,KAAK;AAAA,MACnB,MAAM;AAAA,MACN,MAAM,EAAE,KAAK,MAAM,WAAW,KAAK;AAAA,IACrC,CAAC;AAGD,gBAAY,IAAI,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAEA,iBAAe,eAAe,KAA4B;AACxD,
|
|
4
|
+
"mappings": "AAAA,SAAS,YAAY;AAGrB,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,4BAA4B;AAiBpD,SAAS,kBAAkB,WAA0C;AAC1E,QAAM,cAAc,oBAAI,IAGtB;AAEF,YAAU,GAAG,SAAS,OAAO,EAAE,MAAM,KAAK,MAAM;AAC9C,UAAM,aAAa,MAAM,IAAI;AAAA,EAC/B,CAAC;AAED,iBAAe,YACb,UACA,MACA,IACiB;AACjB,UAAM,MAAM,KAAK,IAAI,EAAE,SAAS;AAChC,UAAM,YAAY,SAAS;AAG3B,UAAM,UAAU,KAAK;AAAA,MACnB,MAAM;AAAA,MACN,MAAM,EAAE,KAAK,MAAM,WAAW,KAAK;AAAA,IACrC,CAAC;AAGD,gBAAY,IAAI,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAEA,iBAAe,eAAe,KAA4B;AACxD,gBAAY,OAAO,GAAG;AACtB,QAAI;AACF,YAAM,UAAU,KAAK,EAAE,MAAM,cAAc,MAAM,EAAE,IAAI,EAAE,CAAC;AAAA,IAC5D,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,iBAAe,aACb,UACA,cACA,MACe;AACf,UAAM,YAAY,SAAS;AAG3B,UAAM,gBAAiB,MAAM,UAAU,KAAK;AAAA,MAC1C,MAAM;AAAA,MACN,MAAM,EAAE,MAAM,UAAU;AAAA,IAC1B,CAAC;AAED,UAAM,aAAa,cAChB,OAAO,CAAC,SAAS,aAAa,KAAK,IAAI,CAAC,EACxC,IAAI,CAAC,SAAS,KAAK,GAAG;AAEzB,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,UAAU,KAAK;AAAA,QACnB,MAAM;AAAA,QACN,MAAM,EAAE,MAAM,YAAY,KAAK;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,EACF;AAGA,iBAAe,gBAA+B;AAC5C,eAAW,CAAC,KAAK,KAAK,KAAK,YAAY,QAAQ,GAAG;AAChD,UAAI;AACF,cAAM,UAAU,KAAK;AAAA,UACnB,MAAM;AAAA,UACN,MAAM,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QACvD,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,eAAO,MAAM,oCAAoC,EAAE,KAAK,WAAW,MAAM,UAAU,CAAC;AAAA,MACtF;AAAA,IACF;AAAA,EACF;AAGA,iBAAe,aAAa,MAAgB,MAA8B;AACxE,eAAW,OAAO,MAAM;AACtB,YAAM,QAAQ,YAAY,IAAI,GAAG;AACjC,UAAI,SAAS,MAAM;AACjB,YAAI;AACF,gBAAM,MAAM,GAAG,IAAI;AAAA,QACrB,SAAS,KAAK;AACZ,iBAAO,MAAM,uBAAuB,EAAE,KAAK,WAAW,MAAM,UAAU,CAAC;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -21,7 +21,7 @@ function createOrmClientConnector(serviceClient) {
|
|
|
21
21
|
return await callback(db);
|
|
22
22
|
} catch (err) {
|
|
23
23
|
if (err instanceof Error && (err.message.includes("a parent row: a foreign key constraint") || err.message.includes("conflicted with the REFERENCE"))) {
|
|
24
|
-
throw new Error("
|
|
24
|
+
throw new Error("Warning! Operation rejected due to related operations. Please check subsequent operations.", { cause: err });
|
|
25
25
|
}
|
|
26
26
|
throw err;
|
|
27
27
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/orm/orm-client-connector.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,kCAAkC;AAE3C,SAAS,uBAAkE;AAcpE,SAAS,yBAAyB,eAAkD;AACzF,iBAAe,oBACb,QACkC;AAnBtC;AAoBI,UAAM,WAAW,IAAI,2BAA2B,eAAe,OAAO,OAAO;AAC7E,UAAM,OAAO,MAAM,SAAS,QAAQ;AACpC,UAAM,aAAW,YAAO,iBAAP,mBAAqB,aAAY,KAAK;AACvD,QAAI,YAAY,QAAQ,aAAa,IAAI;AACvC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,WAAO,gBAAgB,OAAO,cAAc,UAAU;AAAA,MACpD;AAAA,MACA,UAAQ,YAAO,iBAAP,mBAAqB,WAAU,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAEA,iBAAe,QACb,QACA,UACY;AACZ,UAAM,KAAK,MAAM,oBAAoB,MAAM;AAC3C,WAAO,GAAG,QAAQ,YAAY;AAC5B,UAAI;AACF,eAAO,MAAM,SAAS,EAAE;AAAA,MAC1B,SAAS,KAAK;AACZ,YACE,eAAe,UACd,IAAI,QAAQ,SAAS,wCAAwC,KAC5D,IAAI,QAAQ,SAAS,+BAA+B,IACtD;AACA,gBAAM,IAAI,MAAM,
|
|
4
|
+
"mappings": "AAAA,SAAS,kCAAkC;AAE3C,SAAS,uBAAkE;AAcpE,SAAS,yBAAyB,eAAkD;AACzF,iBAAe,oBACb,QACkC;AAnBtC;AAoBI,UAAM,WAAW,IAAI,2BAA2B,eAAe,OAAO,OAAO;AAC7E,UAAM,OAAO,MAAM,SAAS,QAAQ;AACpC,UAAM,aAAW,YAAO,iBAAP,mBAAqB,aAAY,KAAK;AACvD,QAAI,YAAY,QAAQ,aAAa,IAAI;AACvC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AACA,WAAO,gBAAgB,OAAO,cAAc,UAAU;AAAA,MACpD;AAAA,MACA,UAAQ,YAAO,iBAAP,mBAAqB,WAAU,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAEA,iBAAe,QACb,QACA,UACY;AACZ,UAAM,KAAK,MAAM,oBAAoB,MAAM;AAC3C,WAAO,GAAG,QAAQ,YAAY;AAC5B,UAAI;AACF,eAAO,MAAM,SAAS,EAAE;AAAA,MAC1B,SAAS,KAAK;AACZ,YACE,eAAe,UACd,IAAI,QAAQ,SAAS,wCAAwC,KAC5D,IAAI,QAAQ,SAAS,+BAA+B,IACtD;AACA,gBAAM,IAAI,MAAM,8FAA8F,EAAE,OAAO,IAAI,CAAC;AAAA,QAC9H;AAEA,cAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,iBAAe,0BACb,QACA,UACY;AACZ,UAAM,KAAK,MAAM,oBAAoB,MAAM;AAC3C,WAAO,GAAG,0BAA0B,YAAY,SAAS,EAAE,CAAC;AAAA,EAC9D;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -14,43 +14,43 @@ class OrmClientDbContextExecutor {
|
|
|
14
14
|
}
|
|
15
15
|
async beginTransaction(isolationLevel) {
|
|
16
16
|
if (this._connId === void 0) {
|
|
17
|
-
throw new Error("
|
|
17
|
+
throw new Error("Not connected to the database.");
|
|
18
18
|
}
|
|
19
19
|
await this._ormService.beginTransaction(this._connId, isolationLevel);
|
|
20
20
|
}
|
|
21
21
|
async commitTransaction() {
|
|
22
22
|
if (this._connId === void 0) {
|
|
23
|
-
throw new Error("
|
|
23
|
+
throw new Error("Not connected to the database.");
|
|
24
24
|
}
|
|
25
25
|
await this._ormService.commitTransaction(this._connId);
|
|
26
26
|
}
|
|
27
27
|
async rollbackTransaction() {
|
|
28
28
|
if (this._connId === void 0) {
|
|
29
|
-
throw new Error("
|
|
29
|
+
throw new Error("Not connected to the database.");
|
|
30
30
|
}
|
|
31
31
|
await this._ormService.rollbackTransaction(this._connId);
|
|
32
32
|
}
|
|
33
33
|
async close() {
|
|
34
34
|
if (this._connId === void 0) {
|
|
35
|
-
throw new Error("
|
|
35
|
+
throw new Error("Not connected to the database.");
|
|
36
36
|
}
|
|
37
37
|
await this._ormService.close(this._connId);
|
|
38
38
|
}
|
|
39
39
|
async executeDefs(defs, options) {
|
|
40
40
|
if (this._connId === void 0) {
|
|
41
|
-
throw new Error("
|
|
41
|
+
throw new Error("Not connected to the database.");
|
|
42
42
|
}
|
|
43
43
|
return await this._ormService.executeDefs(this._connId, defs, options);
|
|
44
44
|
}
|
|
45
45
|
async executeParametrized(query, params) {
|
|
46
46
|
if (this._connId === void 0) {
|
|
47
|
-
throw new Error("
|
|
47
|
+
throw new Error("Not connected to the database.");
|
|
48
48
|
}
|
|
49
49
|
return this._ormService.executeParametrized(this._connId, query, params);
|
|
50
50
|
}
|
|
51
51
|
async bulkInsert(tableName, columnDefs, records) {
|
|
52
52
|
if (this._connId === void 0) {
|
|
53
|
-
throw new Error("
|
|
53
|
+
throw new Error("Not connected to the database.");
|
|
54
54
|
}
|
|
55
55
|
return this._ormService.bulkInsert(this._connId, tableName, columnDefs, records);
|
|
56
56
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/features/orm/orm-client-db-context-executor.ts"],
|
|
4
|
-
"mappings": "AAWO,MAAM,2BAAwD;AAAA,EAInE,YACmB,SACA,MACjB;AAFiB;AACA;AAEjB,SAAK,cAAc,QAAQ,WAAuB,KAAK;AAAA,EACzD;AAAA,EARQ;AAAA,EACS;AAAA,EASjB,MAAM,UAIH;AACD,WAAO,KAAK,YAAY,QAAQ,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEA,MAAM,UAAyB;AAC7B,SAAK,UAAU,MAAM,KAAK,YAAY,QAAQ,KAAK,IAAI;AAAA,EACzD;AAAA,EAEA,MAAM,iBAAiB,gBAAgD;AACrE,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,
|
|
4
|
+
"mappings": "AAWO,MAAM,2BAAwD;AAAA,EAInE,YACmB,SACA,MACjB;AAFiB;AACA;AAEjB,SAAK,cAAc,QAAQ,WAAuB,KAAK;AAAA,EACzD;AAAA,EARQ;AAAA,EACS;AAAA,EASjB,MAAM,UAIH;AACD,WAAO,KAAK,YAAY,QAAQ,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEA,MAAM,UAAyB;AAC7B,SAAK,UAAU,MAAM,KAAK,YAAY,QAAQ,KAAK,IAAI;AAAA,EACzD;AAAA,EAEA,MAAM,iBAAiB,gBAAgD;AACrE,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,UAAM,KAAK,YAAY,iBAAiB,KAAK,SAAS,cAAc;AAAA,EACtE;AAAA,EAEA,MAAM,oBAAmC;AACvC,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,UAAM,KAAK,YAAY,kBAAkB,KAAK,OAAO;AAAA,EACvD;AAAA,EAEA,MAAM,sBAAqC;AACzC,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,UAAM,KAAK,YAAY,oBAAoB,KAAK,OAAO;AAAA,EACzD;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,UAAM,KAAK,YAAY,MAAM,KAAK,OAAO;AAAA,EAC3C;AAAA,EAEA,MAAM,YACJ,MACA,SACgB;AAChB,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,WAAQ,MAAM,KAAK,YAAY,YAAY,KAAK,SAAS,MAAM,OAAO;AAAA,EACxE;AAAA,EAEA,MAAM,oBAAoB,OAAe,QAA0C;AACjF,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,WAAO,KAAK,YAAY,oBAAoB,KAAK,SAAS,OAAO,MAAM;AAAA,EACzE;AAAA,EAEA,MAAM,WACJ,WACA,YACA,SACe;AACf,QAAI,KAAK,YAAY,QAAW;AAC9B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,WAAO,KAAK,YAAY,WAAW,KAAK,SAAS,WAAW,YAAY,OAAO;AAAA,EACjF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -2,9 +2,9 @@ import { LazyGcMap, transferableDecode, Uuid } from "@simplysm/core-common";
|
|
|
2
2
|
let worker;
|
|
3
3
|
const workerResolvers = new LazyGcMap({
|
|
4
4
|
gcInterval: 5 * 1e3,
|
|
5
|
-
//
|
|
5
|
+
// Check for expired entries every 5s
|
|
6
6
|
expireTime: 60 * 1e3,
|
|
7
|
-
//
|
|
7
|
+
// Expire after 60s (timeout)
|
|
8
8
|
onExpire: (key, item) => {
|
|
9
9
|
item.reject(new Error(`Worker task timed out (uuid: ${key})`));
|
|
10
10
|
}
|
package/dist/service-client.js
CHANGED
|
@@ -29,7 +29,7 @@ class ServiceClient extends EventEmitter {
|
|
|
29
29
|
}
|
|
30
30
|
await this._eventClient.reRegisterAll();
|
|
31
31
|
} catch (err) {
|
|
32
|
-
logger.error("
|
|
32
|
+
logger.error("Failed to recover event listeners", err);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
});
|
|
@@ -37,13 +37,13 @@ class ServiceClient extends EventEmitter {
|
|
|
37
37
|
this.emit("reload", changedFiles);
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
//
|
|
40
|
+
// Modules
|
|
41
41
|
_socket;
|
|
42
42
|
_transport;
|
|
43
43
|
_eventClient;
|
|
44
44
|
_fileClient;
|
|
45
45
|
_authToken;
|
|
46
|
-
//
|
|
46
|
+
// State accessors
|
|
47
47
|
get connected() {
|
|
48
48
|
return this._socket.connected;
|
|
49
49
|
}
|
|
@@ -51,7 +51,7 @@ class ServiceClient extends EventEmitter {
|
|
|
51
51
|
const hostProtocol = this.options.ssl ? "https" : "http";
|
|
52
52
|
return `${hostProtocol}://${this.options.host}:${this.options.port}`;
|
|
53
53
|
}
|
|
54
|
-
//
|
|
54
|
+
// Proxy creation method for type safety
|
|
55
55
|
getService(serviceName) {
|
|
56
56
|
return new Proxy({}, {
|
|
57
57
|
get: (_target, prop) => {
|
|
@@ -93,7 +93,7 @@ class ServiceClient extends EventEmitter {
|
|
|
93
93
|
this._authToken = token;
|
|
94
94
|
}
|
|
95
95
|
async addEventListener(eventDef, info, cb) {
|
|
96
|
-
if (!this.connected) throw new Error("
|
|
96
|
+
if (!this.connected) throw new Error("Not connected to the server.");
|
|
97
97
|
return this._eventClient.addListener(eventDef, info, cb);
|
|
98
98
|
}
|
|
99
99
|
async removeEventListener(key) {
|
|
@@ -105,7 +105,7 @@ class ServiceClient extends EventEmitter {
|
|
|
105
105
|
async uploadFile(files) {
|
|
106
106
|
if (this._authToken == null) {
|
|
107
107
|
throw new Error(
|
|
108
|
-
"
|
|
108
|
+
"No authentication token found. Call auth() to authenticate before uploading files."
|
|
109
109
|
);
|
|
110
110
|
}
|
|
111
111
|
return this._fileClient.upload(files, this._authToken);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/service-client.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,aAAa;AACpB,SAAS,oBAAoB;AAE7B,SAAS,6BAA6B;AAItC,SAAS,8BAAqD;AAC9D,SAAS,4BAAiD;AAC1D,SAAS,yBAA2C;AACpD,SAAS,wBAAyC;AAClD,SAAS,mCAAmC;AAE5C,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAStD,MAAM,sBAAsB,aAAkC;AAAA,EAkBnE,YACkB,MACA,SAChB;AACA,UAAM;AAHU;AACA;AAIhB,UAAM,aAAa,QAAQ,MAAM,QAAQ;AACzC,UAAM,QAAQ,GAAG,UAAU,MAAM,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAG7D,SAAK,UAAU,qBAAqB,OAAO,KAAK,MAAM,KAAK,QAAQ,qBAAqB,EAAE;AAC1F,UAAM,WAAW,sBAAsB;AACvC,UAAM,kBAAkB,4BAA4B,QAAQ;AAC5D,SAAK,aAAa,uBAAuB,KAAK,SAAS,eAAe;AACtE,SAAK,eAAe,kBAAkB,KAAK,UAAU;AACrD,SAAK,cAAc,iBAAiB,KAAK,SAAS,KAAK,IAAI;AAG3D,SAAK,QAAQ,GAAG,SAAS,OAAO,UAAU;AACxC,WAAK,KAAK,SAAS,KAAK;AAGxB,UAAI,UAAU,aAAa;AACzB,YAAI;AACF,cAAI,KAAK,cAAc,MAAM;AAC3B,kBAAM,KAAK,KAAK,KAAK,UAAU;AAAA,UACjC;AACA,gBAAM,KAAK,aAAa,cAAc;AAAA,QACxC,SAAS,KAAK;AACZ,iBAAO,MAAM,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-transport.d.ts","sourceRoot":"","sources":["..\\..\\src\\transport\\service-transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EAChD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,GAAG,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EACjD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,gBAAgB,
|
|
1
|
+
{"version":3,"file":"service-transport.d.ts","sourceRoot":"","sources":["..\\..\\src\\transport\\service-transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EAChD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,GAAG,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EACjD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,gBAAgB,CAmJlB"}
|
|
@@ -15,6 +15,8 @@ function createServiceTransport(socket, protocol) {
|
|
|
15
15
|
const responsePromise = new Promise((resolve, reject) => {
|
|
16
16
|
pendingRequests.set(uuid, { resolve, reject, progress });
|
|
17
17
|
});
|
|
18
|
+
responsePromise.catch(() => {
|
|
19
|
+
});
|
|
18
20
|
try {
|
|
19
21
|
const { chunks, totalSize } = await protocol.encode(uuid, message);
|
|
20
22
|
if (chunks.length > 1) {
|
|
@@ -79,7 +81,7 @@ function createServiceTransport(socket, protocol) {
|
|
|
79
81
|
const body = decoded.message.body;
|
|
80
82
|
emitter.emit("event", { keys: body.keys, data: body.data });
|
|
81
83
|
} else {
|
|
82
|
-
throw new Error("
|
|
84
|
+
throw new Error("Invalid message received from server.");
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
87
|
} catch (err) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/transport/service-transport.ts"],
|
|
4
|
-
"mappings": "AACA,SAAS,cAAc,YAAY;AA2B5B,SAAS,uBACd,QACA,UACkB;AAClB,QAAM,UAAU,IAAI,aAAqC;AAEzD,QAAM,kBAAkB,oBAAI,IAO1B;AAGF,QAAM,4BAA4B,oBAAI,IAAoB;AAE1D,SAAO,GAAG,WAAW,SAAS;AAG9B,SAAO,GAAG,SAAS,CAAC,UAAU;AAC5B,QAAI,UAAU,YAAY,UAAU,gBAAgB;AAClD,wBAAkB,wBAAwB;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,iBAAe,KAAK,SAA+B,UAA8C;AAvDnG;AAwDI,UAAM,OAAO,KAAK,IAAI,EAAE,SAAS;AAGjC,UAAM,kBAAkB,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvD,sBAAgB,IAAI,MAAM,EAAE,SAAS,QAAQ,SAAS,CAAC;AAAA,IACzD,CAAC;AAGD,QAAI;AACF,YAAM,EAAE,QAAQ,UAAU,IAAI,MAAM,SAAS,OAAO,MAAM,OAAO;AAGjE,UAAI,OAAO,SAAS,GAAG;AACrB,mDAAU,YAAV,kCAAoB;AAAA,UAClB;AAAA,UACA;AAAA,UACA,eAAe;AAAA,QACjB;AAAA,MACF;AAGA,iBAAW,SAAS,QAAQ;AAC1B,cAAM,OAAO,KAAK,KAAK;AAAA,MACzB;AAAA,IACF,SAAS,KAAK;AAEZ,4BAAgB,IAAI,IAAI,MAAxB,mBAA2B,OAAO;AAClC,sBAAgB,OAAO,IAAI;AAC3B,YAAM;AAAA,IACR;AAGA,WAAO;AAAA,EACT;AAEA,iBAAe,UAAU,KAA2B;
|
|
4
|
+
"mappings": "AACA,SAAS,cAAc,YAAY;AA2B5B,SAAS,uBACd,QACA,UACkB;AAClB,QAAM,UAAU,IAAI,aAAqC;AAEzD,QAAM,kBAAkB,oBAAI,IAO1B;AAGF,QAAM,4BAA4B,oBAAI,IAAoB;AAE1D,SAAO,GAAG,WAAW,SAAS;AAG9B,SAAO,GAAG,SAAS,CAAC,UAAU;AAC5B,QAAI,UAAU,YAAY,UAAU,gBAAgB;AAClD,wBAAkB,wBAAwB;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,iBAAe,KAAK,SAA+B,UAA8C;AAvDnG;AAwDI,UAAM,OAAO,KAAK,IAAI,EAAE,SAAS;AAGjC,UAAM,kBAAkB,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvD,sBAAgB,IAAI,MAAM,EAAE,SAAS,QAAQ,SAAS,CAAC;AAAA,IACzD,CAAC;AAGD,oBAAgB,MAAM,MAAM;AAAA,IAAC,CAAC;AAG9B,QAAI;AACF,YAAM,EAAE,QAAQ,UAAU,IAAI,MAAM,SAAS,OAAO,MAAM,OAAO;AAGjE,UAAI,OAAO,SAAS,GAAG;AACrB,mDAAU,YAAV,kCAAoB;AAAA,UAClB;AAAA,UACA;AAAA,UACA,eAAe;AAAA,QACjB;AAAA,MACF;AAGA,iBAAW,SAAS,QAAQ;AAC1B,cAAM,OAAO,KAAK,KAAK;AAAA,MACzB;AAAA,IACF,SAAS,KAAK;AAEZ,4BAAgB,IAAI,IAAI,MAAxB,mBAA2B,OAAO;AAClC,sBAAgB,OAAO,IAAI;AAC3B,YAAM;AAAA,IACR;AAGA,WAAO;AAAA,EACT;AAEA,iBAAe,UAAU,KAA2B;AA9FtD;AA+FI,UAAM,UAAU,MAAM,SAAS,OAAO,GAAG;AAEzC,UAAM,eAAe,gBAAgB,IAAI,QAAQ,IAAI;AAErD,QAAI;AACF,UAAI,QAAQ,SAAS,YAAY;AAE/B,kCAA0B,IAAI,QAAQ,MAAM,QAAQ,SAAS;AAE7D,iEAAc,aAAd,mBAAwB,aAAxB,4BAAmC;AAAA,UACjC,MAAM,QAAQ;AAAA,UACd,WAAW,QAAQ;AAAA,UACnB,eAAe,QAAQ;AAAA,QACzB;AAAA,MACF,OAAO;AACL,YAAI,QAAQ,QAAQ,SAAS,YAAY;AACvC,gBAAM,OAAO,QAAQ,QAAQ;AAC7B,mEAAc,aAAd,mBAAwB,YAAxB,4BAAkC;AAAA,YAChC,MAAM,QAAQ;AAAA,YACd,WAAW,KAAK;AAAA,YAChB,eAAe,KAAK;AAAA,UACtB;AAAA,QACF,WAAW,QAAQ,QAAQ,SAAS,YAAY;AAE9C,gBAAM,YAAY,0BAA0B,IAAI,QAAQ,IAAI;AAC5D,cAAI,aAAa,MAAM;AACrB,sCAA0B,OAAO,QAAQ,IAAI;AAC7C,qEAAc,aAAd,mBAAwB,aAAxB,4BAAmC;AAAA,cACjC,MAAM,QAAQ;AAAA,cACd;AAAA,cACA,eAAe;AAAA,YACjB;AAAA,UACF;AAGA,0BAAgB,OAAO,QAAQ,IAAI;AAEnC,uDAAc,QAAQ,QAAQ,QAAQ;AAAA,QACxC,WAAW,QAAQ,QAAQ,SAAS,SAAS;AAE3C,oCAA0B,OAAO,QAAQ,IAAI;AAG7C,0BAAgB,OAAO,QAAQ,IAAI;AAEnC,uDAAc,OAAO,QAAQ,QAAQ,QAAQ,IAAI;AAAA,QACnD,WAAW,QAAQ,QAAQ,SAAS,UAAU;AAC5C,gBAAM,OAAO,QAAQ,QAAQ;AAC7B,cAAI,OAAO,eAAe,KAAK,YAAY;AACzC,oBAAQ,KAAK,UAAU,KAAK,cAAc;AAAA,UAC5C;AAAA,QACF,WAAW,QAAQ,QAAQ,SAAS,UAAU;AAC5C,gBAAM,OAAO,QAAQ,QAAQ;AAC7B,kBAAQ,KAAK,SAAS,EAAE,MAAM,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC;AAAA,QAC5D,OAAO;AACL,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,mDAAc,OAAO,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAAA,IACzE;AAAA,EACF;AAGA,WAAS,kBAAkB,QAAsB;AAC/C,eAAW,gBAAgB,gBAAgB,OAAO,GAAG;AACnD,mBAAa,OAAO,IAAI,MAAM,qBAAqB,MAAM,EAAE,CAAC;AAAA,IAC9D;AACA,oBAAgB,MAAM;AACtB,8BAA0B,MAAM;AAAA,EAClC;AAEA,WAAS,QAAQ,MAA0C;AACzD,QAAI,MAAM,IAAI,MAAM,KAAK,OAAO;AAChC,UAAM,OAAO,OAAO,KAAK,IAAI;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAI,QAAQ,GAAG,KAAK,OAAO;AAAA,IAC3B,KAAK,QAAQ,IAAI,KAAK,OAAO;AAAA,IAC7B;AAAA,EACF;AACF;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -42,11 +42,11 @@ function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
|
42
42
|
try {
|
|
43
43
|
await waitUntil(() => isConnected(), void 0, 50);
|
|
44
44
|
} catch {
|
|
45
|
-
throw new Error("
|
|
45
|
+
throw new Error("Not connected to the server. Please check your internet connection.");
|
|
46
46
|
}
|
|
47
47
|
const currentWs = ws;
|
|
48
48
|
if (currentWs == null) {
|
|
49
|
-
throw new Error("WebSocket
|
|
49
|
+
throw new Error("WebSocket is not connected.");
|
|
50
50
|
}
|
|
51
51
|
currentWs.send(data);
|
|
52
52
|
}
|
|
@@ -74,7 +74,7 @@ function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
|
74
74
|
});
|
|
75
75
|
const currentWs = ws;
|
|
76
76
|
if (currentWs == null) {
|
|
77
|
-
throw new Error("WebSocket
|
|
77
|
+
throw new Error("WebSocket initialization failed");
|
|
78
78
|
}
|
|
79
79
|
currentWs.onmessage = (event) => {
|
|
80
80
|
lastHeartbeatTime = Date.now();
|
|
@@ -94,7 +94,7 @@ function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
|
94
94
|
while (reconnectCount < maxReconnectCount) {
|
|
95
95
|
reconnectCount++;
|
|
96
96
|
emitter.emit("state", "reconnecting");
|
|
97
|
-
logger.warn("WebSocket
|
|
97
|
+
logger.warn("WebSocket disconnected. Attempting reconnect...", {
|
|
98
98
|
reconnectCount,
|
|
99
99
|
maxReconnectCount
|
|
100
100
|
});
|
|
@@ -104,12 +104,12 @@ function createSocketProvider(url, clientName, maxReconnectCount) {
|
|
|
104
104
|
startHeartbeat();
|
|
105
105
|
reconnectCount = 0;
|
|
106
106
|
emitter.emit("state", "connected");
|
|
107
|
-
logger.info("WebSocket
|
|
107
|
+
logger.info("WebSocket reconnected successfully");
|
|
108
108
|
return;
|
|
109
109
|
} catch {
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
logger.error("
|
|
112
|
+
logger.error("Reconnect retry limit exceeded. Giving up.");
|
|
113
113
|
emitter.emit("state", "closed");
|
|
114
114
|
}
|
|
115
115
|
function startHeartbeat() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/transport/socket-provider.ts"],
|
|
4
|
-
"mappings": "AACA,SAAS,cAAc,MAAM,WAAW,gBAAgB;AACxD,OAAO,aAAa;AAEpB,MAAM,SAAS,QAAQ,QAAQ,+BAA+B;AAuBvD,SAAS,qBACd,KACA,YACA,mBACgB;AAEhB,QAAM,oBAAoB;AAC1B,QAAM,qBAAqB;AAC3B,QAAM,kBAAkB;AAGxB,QAAM,cAAc,IAAI,WAAW,CAAC,CAAI,CAAC;AAGzC,MAAI;AACJ,MAAI,gBAAgB;AACpB,MAAI,iBAAiB;AACrB,MAAI;AACJ,MAAI,oBAAoB,KAAK,IAAI;AAEjC,QAAM,UAAU,IAAI,aAAmC;AAEvD,WAAS,cAAuB;AAC9B,YAAO,yBAAI,gBAAe,UAAU;AAAA,EACtC;AAEA,iBAAe,UAAyB;AACtC,QAAI,YAAY,EAAG;AACnB,oBAAgB;AAEhB,QAAI;AACF,YAAM,aAAa;AACnB,qBAAe;AACf,uBAAiB;AACjB,cAAQ,KAAK,SAAS,WAAW;AAAA,IACnC,SAAS,KAAK;AAEZ,YAAM;AAAA,IACR;AAAA,EACF;AAEA,iBAAe,QAAuB;AACpC,oBAAgB;AAChB,kBAAc;AACd,UAAM,YAAY;AAClB,QAAI,aAAa,MAAM;AACrB,gBAAU,MAAM;AAEhB,YAAM,UAAU,MAAM,UAAU,eAAe,UAAU,QAAQ,KAAK,EAAE,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC1F;AACA,YAAQ,KAAK,SAAS,QAAQ;AAAA,EAChC;AAEA,iBAAe,KAAK,MAA4B;AAC9C,QAAI;AACF,YAAM,UAAU,MAAM,YAAY,GAAG,QAAW,EAAE;AAAA,IACpD,QAAQ;AACN,YAAM,IAAI,MAAM,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -2,7 +2,7 @@ export interface ServiceConnectionConfig {
|
|
|
2
2
|
port: number;
|
|
3
3
|
host: string;
|
|
4
4
|
ssl?: boolean;
|
|
5
|
-
/** 0
|
|
5
|
+
/** Set to 0 to disable reconnect; disconnects immediately */
|
|
6
6
|
maxReconnectCount?: number;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=connection-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-config.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\connection-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd
|
|
1
|
+
{"version":3,"file":"connection-config.d.ts","sourceRoot":"","sources":["..\\..\\src\\types\\connection-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/service-client",
|
|
3
|
-
"version": "13.0.
|
|
4
|
-
"description": "
|
|
5
|
-
"author": "
|
|
3
|
+
"version": "13.0.71",
|
|
4
|
+
"description": "Simplysm package - Service module (client)",
|
|
5
|
+
"author": "simplysm",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"consola": "^3.4.2",
|
|
22
|
-
"@simplysm/core-common": "13.0.
|
|
23
|
-
"@simplysm/orm-common": "13.0.
|
|
24
|
-
"@simplysm/service-common": "13.0.
|
|
22
|
+
"@simplysm/core-common": "13.0.71",
|
|
23
|
+
"@simplysm/orm-common": "13.0.71",
|
|
24
|
+
"@simplysm/service-common": "13.0.71"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/ws": "^8.18.1",
|
|
@@ -38,13 +38,13 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
38
38
|
const key = Uuid.new().toString();
|
|
39
39
|
const eventName = eventDef.eventName;
|
|
40
40
|
|
|
41
|
-
//
|
|
41
|
+
// Send registration request to server
|
|
42
42
|
await transport.send({
|
|
43
43
|
name: "evt:add",
|
|
44
44
|
body: { key, name: eventName, info },
|
|
45
45
|
});
|
|
46
46
|
|
|
47
|
-
//
|
|
47
|
+
// Store in local map (for recovery on reconnect)
|
|
48
48
|
listenerMap.set(key, {
|
|
49
49
|
eventName,
|
|
50
50
|
info,
|
|
@@ -55,8 +55,12 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
async function removeListener(key: string): Promise<void> {
|
|
58
|
-
await transport.send({ name: "evt:remove", body: { key } });
|
|
59
58
|
listenerMap.delete(key);
|
|
59
|
+
try {
|
|
60
|
+
await transport.send({ name: "evt:remove", body: { key } });
|
|
61
|
+
} catch {
|
|
62
|
+
// Server auto-cleans event listeners on disconnect; safe to ignore
|
|
63
|
+
}
|
|
60
64
|
}
|
|
61
65
|
|
|
62
66
|
async function emitToServer<TInfo, TData>(
|
|
@@ -66,7 +70,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
66
70
|
): Promise<void> {
|
|
67
71
|
const eventName = eventDef.eventName;
|
|
68
72
|
|
|
69
|
-
//
|
|
73
|
+
// Send 'gets' request to server to obtain targets
|
|
70
74
|
const listenerInfos = (await transport.send({
|
|
71
75
|
name: "evt:gets",
|
|
72
76
|
body: { name: eventName },
|
|
@@ -84,7 +88,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
84
88
|
}
|
|
85
89
|
}
|
|
86
90
|
|
|
87
|
-
//
|
|
91
|
+
// Called on reconnect
|
|
88
92
|
async function reRegisterAll(): Promise<void> {
|
|
89
93
|
for (const [key, value] of listenerMap.entries()) {
|
|
90
94
|
try {
|
|
@@ -93,12 +97,12 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
93
97
|
body: { key, name: value.eventName, info: value.info },
|
|
94
98
|
});
|
|
95
99
|
} catch (err) {
|
|
96
|
-
logger.error("
|
|
100
|
+
logger.error("Failed to recover event listener", { err, eventName: value.eventName });
|
|
97
101
|
}
|
|
98
102
|
}
|
|
99
103
|
}
|
|
100
104
|
|
|
101
|
-
//
|
|
105
|
+
// Dispatch server events to local listeners
|
|
102
106
|
async function executeByKey(keys: string[], data: unknown): Promise<void> {
|
|
103
107
|
for (const key of keys) {
|
|
104
108
|
const entry = listenerMap.get(key);
|
|
@@ -106,7 +110,7 @@ export function createEventClient(transport: ServiceTransport): EventClient {
|
|
|
106
110
|
try {
|
|
107
111
|
await entry.cb(data);
|
|
108
112
|
} catch (err) {
|
|
109
|
-
logger.error("
|
|
113
|
+
logger.error("Event handler error", { err, eventName: entry.eventName });
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
116
|
}
|
|
@@ -11,7 +11,7 @@ export interface FileClient {
|
|
|
11
11
|
|
|
12
12
|
export function createFileClient(hostUrl: string, clientName: string): FileClient {
|
|
13
13
|
async function download(relPath: string): Promise<Bytes> {
|
|
14
|
-
// URL
|
|
14
|
+
// Build URL
|
|
15
15
|
const url = `${hostUrl}${relPath.startsWith("/") ? "" : "/"}${relPath}`;
|
|
16
16
|
|
|
17
17
|
const res = await fetch(url);
|
|
@@ -32,11 +32,11 @@ export function createFileClient(hostUrl: string, clientName: string): FileClien
|
|
|
32
32
|
|
|
33
33
|
for (const file of fileList) {
|
|
34
34
|
if ("data" in file) {
|
|
35
|
-
//
|
|
35
|
+
// Custom object ({ name, data })
|
|
36
36
|
const blob = file.data instanceof Blob ? file.data : new Blob([file.data]);
|
|
37
37
|
formData.append("files", blob, file.name);
|
|
38
38
|
} else {
|
|
39
|
-
//
|
|
39
|
+
// Browser File object
|
|
40
40
|
formData.append("files", file, file.name);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -44,7 +44,7 @@ export function createOrmClientConnector(serviceClient: ServiceClient): OrmClien
|
|
|
44
44
|
(err.message.includes("a parent row: a foreign key constraint") ||
|
|
45
45
|
err.message.includes("conflicted with the REFERENCE"))
|
|
46
46
|
) {
|
|
47
|
-
throw new Error("
|
|
47
|
+
throw new Error("Warning! Operation rejected due to related operations. Please check subsequent operations.", { cause: err });
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
throw err;
|
|
@@ -34,7 +34,7 @@ export class OrmClientDbContextExecutor implements DbContextExecutor {
|
|
|
34
34
|
|
|
35
35
|
async beginTransaction(isolationLevel?: IsolationLevel): Promise<void> {
|
|
36
36
|
if (this._connId === undefined) {
|
|
37
|
-
throw new Error("
|
|
37
|
+
throw new Error("Not connected to the database.");
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
await this._ormService.beginTransaction(this._connId, isolationLevel);
|
|
@@ -42,7 +42,7 @@ export class OrmClientDbContextExecutor implements DbContextExecutor {
|
|
|
42
42
|
|
|
43
43
|
async commitTransaction(): Promise<void> {
|
|
44
44
|
if (this._connId === undefined) {
|
|
45
|
-
throw new Error("
|
|
45
|
+
throw new Error("Not connected to the database.");
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
await this._ormService.commitTransaction(this._connId);
|
|
@@ -50,7 +50,7 @@ export class OrmClientDbContextExecutor implements DbContextExecutor {
|
|
|
50
50
|
|
|
51
51
|
async rollbackTransaction(): Promise<void> {
|
|
52
52
|
if (this._connId === undefined) {
|
|
53
|
-
throw new Error("
|
|
53
|
+
throw new Error("Not connected to the database.");
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
await this._ormService.rollbackTransaction(this._connId);
|
|
@@ -58,7 +58,7 @@ export class OrmClientDbContextExecutor implements DbContextExecutor {
|
|
|
58
58
|
|
|
59
59
|
async close(): Promise<void> {
|
|
60
60
|
if (this._connId === undefined) {
|
|
61
|
-
throw new Error("
|
|
61
|
+
throw new Error("Not connected to the database.");
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
await this._ormService.close(this._connId);
|
|
@@ -69,7 +69,7 @@ export class OrmClientDbContextExecutor implements DbContextExecutor {
|
|
|
69
69
|
options?: (ResultMeta | undefined)[],
|
|
70
70
|
): Promise<T[][]> {
|
|
71
71
|
if (this._connId === undefined) {
|
|
72
|
-
throw new Error("
|
|
72
|
+
throw new Error("Not connected to the database.");
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
return (await this._ormService.executeDefs(this._connId, defs, options)) as T[][];
|
|
@@ -77,7 +77,7 @@ export class OrmClientDbContextExecutor implements DbContextExecutor {
|
|
|
77
77
|
|
|
78
78
|
async executeParametrized(query: string, params?: unknown[]): Promise<unknown[][]> {
|
|
79
79
|
if (this._connId === undefined) {
|
|
80
|
-
throw new Error("
|
|
80
|
+
throw new Error("Not connected to the database.");
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
return this._ormService.executeParametrized(this._connId, query, params);
|
|
@@ -89,7 +89,7 @@ export class OrmClientDbContextExecutor implements DbContextExecutor {
|
|
|
89
89
|
records: Record<string, unknown>[],
|
|
90
90
|
): Promise<void> {
|
|
91
91
|
if (this._connId === undefined) {
|
|
92
|
-
throw new Error("
|
|
92
|
+
throw new Error("Not connected to the database.");
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
return this._ormService.bulkInsert(this._connId, tableName, columnDefs, records);
|