@push-rpc/next 2.0.20 → 2.0.22
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/client/RemoteSubscriptions.d.ts +0 -1
- package/dist/client/RemoteSubscriptions.js +3 -10
- package/dist/client/RemoteSubscriptions.js.map +1 -1
- package/dist/client/RpcClientImpl.js +7 -13
- package/dist/client/RpcClientImpl.js.map +1 -1
- package/dist/client/WebSocketConnection.d.ts +1 -0
- package/dist/client/WebSocketConnection.js +9 -1
- package/dist/client/WebSocketConnection.js.map +1 -1
- package/dist/server/ConnectionsServer.d.ts +1 -0
- package/dist/server/ConnectionsServer.js +4 -0
- package/dist/server/ConnectionsServer.js.map +1 -1
- package/dist/server/RpcServerImpl.js +3 -1
- package/dist/server/RpcServerImpl.js.map +1 -1
- package/package.json +1 -1
- package/src/client/RemoteSubscriptions.ts +3 -11
- package/src/client/RpcClientImpl.ts +9 -14
- package/src/client/WebSocketConnection.ts +14 -4
- package/src/server/ConnectionsServer.ts +6 -0
- package/src/server/LocalSubscriptions.ts +4 -4
- package/src/server/RpcServerImpl.ts +4 -2
- package/tests/context.ts +22 -34
- package/tests/subscriptions.ts +65 -19
- package/tests/testUtils.ts +2 -2
|
@@ -25,7 +25,6 @@ class RemoteSubscriptions {
|
|
|
25
25
|
itemSubscriptions.byParameters.set(parametersKey, parameterSubscriptions);
|
|
26
26
|
parameterSubscriptions.consumers.push({
|
|
27
27
|
consumer,
|
|
28
|
-
completed: false,
|
|
29
28
|
});
|
|
30
29
|
}
|
|
31
30
|
pause(itemName, parameters) {
|
|
@@ -49,9 +48,7 @@ class RemoteSubscriptions {
|
|
|
49
48
|
this.cache.put(itemName, parameters, data);
|
|
50
49
|
filterSubscriptions.cached = data;
|
|
51
50
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
52
|
-
|
|
53
|
-
consumer.consumer(data);
|
|
54
|
-
}
|
|
51
|
+
consumer.consumer(data);
|
|
55
52
|
});
|
|
56
53
|
});
|
|
57
54
|
filterSubscriptions.queue = [];
|
|
@@ -100,9 +97,7 @@ class RemoteSubscriptions {
|
|
|
100
97
|
this.cache.put(itemName, parameters, data);
|
|
101
98
|
filterSubscriptions.cached = data;
|
|
102
99
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
103
|
-
|
|
104
|
-
consumer.consumer(data);
|
|
105
|
-
}
|
|
100
|
+
consumer.consumer(data);
|
|
106
101
|
});
|
|
107
102
|
}
|
|
108
103
|
}
|
|
@@ -114,9 +109,7 @@ class RemoteSubscriptions {
|
|
|
114
109
|
const result = [];
|
|
115
110
|
for (const [itemName, itemSubscriptions] of this.byItem) {
|
|
116
111
|
for (const [, parameterSubscriptions] of itemSubscriptions.byParameters) {
|
|
117
|
-
const consumers = parameterSubscriptions.consumers
|
|
118
|
-
.filter((c) => c.completed)
|
|
119
|
-
.map((c) => c.consumer);
|
|
112
|
+
const consumers = parameterSubscriptions.consumers.map((c) => c.consumer);
|
|
120
113
|
if (consumers.length) {
|
|
121
114
|
result.push([itemName, parameterSubscriptions.parameters, consumers]);
|
|
122
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSubscriptions.js","sourceRoot":"","sources":["../../src/client/RemoteSubscriptions.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAI9C,MAAa,mBAAmB;IAC9B,YAAoB,KAAyB;QAAzB,UAAK,GAAL,KAAK,CAAoB;
|
|
1
|
+
{"version":3,"file":"RemoteSubscriptions.js","sourceRoot":"","sources":["../../src/client/RemoteSubscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,12 +28,6 @@ class RpcClientImpl {
|
|
|
28
28
|
try {
|
|
29
29
|
this.remoteSubscriptions.pause(itemName, parameters);
|
|
30
30
|
const data = await this.invoke(itemName, rpc_js_1.InvocationType.Subscribe, (...parameters) => this.httpClient.subscribe(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
|
|
31
|
-
// check if still subscribed
|
|
32
|
-
const sub = this.remoteSubscriptions.getConsumerSubscription(itemName, parameters, consumer);
|
|
33
|
-
if (sub) {
|
|
34
|
-
// mark as completed - will resubscribe on reconnects
|
|
35
|
-
sub.completed = true;
|
|
36
|
-
}
|
|
37
31
|
this.remoteSubscriptions.unpause(itemName, parameters);
|
|
38
32
|
this.remoteSubscriptions.consume(itemName, parameters, data);
|
|
39
33
|
this.remoteSubscriptions.flushQueue(itemName, parameters);
|
|
@@ -41,7 +35,10 @@ class RpcClientImpl {
|
|
|
41
35
|
catch (e) {
|
|
42
36
|
this.remoteSubscriptions.unpause(itemName, parameters);
|
|
43
37
|
this.remoteSubscriptions.emptyQueue(itemName, parameters);
|
|
44
|
-
|
|
38
|
+
// Do not unsubscribe on errors to improve UX
|
|
39
|
+
// If we unsubscribe on errors, this will break UX during internet connection issues.
|
|
40
|
+
// IE when offline, subscribe will fail. With unsubscribe, subscriptions are not stored, and later on WS connection
|
|
41
|
+
// client won't be resubscribed.
|
|
45
42
|
throw e;
|
|
46
43
|
}
|
|
47
44
|
};
|
|
@@ -52,17 +49,14 @@ class RpcClientImpl {
|
|
|
52
49
|
}
|
|
53
50
|
};
|
|
54
51
|
this.resubscribe = () => {
|
|
55
|
-
for (const [itemName, params
|
|
52
|
+
for (const [itemName, params] of this.remoteSubscriptions.getAllSubscriptions()) {
|
|
56
53
|
this.httpClient
|
|
57
54
|
.subscribe(itemName, params, this.options.callTimeout)
|
|
58
55
|
.then((data) => {
|
|
59
56
|
this.remoteSubscriptions.consume(itemName, params, data);
|
|
60
57
|
})
|
|
61
|
-
.catch((
|
|
62
|
-
//
|
|
63
|
-
for (const consumer of consumers) {
|
|
64
|
-
this.remoteSubscriptions.unsubscribe(itemName, params, consumer);
|
|
65
|
-
}
|
|
58
|
+
.catch(() => {
|
|
59
|
+
// Do not unsubscribe on error to improve UX, see comment in RpcClientImpl.subscribe
|
|
66
60
|
});
|
|
67
61
|
}
|
|
68
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcClientImpl.js","sourceRoot":"","sources":["../../src/client/RpcClientImpl.ts"],"names":[],"mappings":";;;AAAA,sCAA2E;AAC3E,mDAA0C;AAC1C,qEAA4D;AAC5D,qEAA4D;AAC5D,mCAA6B;AAC7B,2CAAmE;AAEnE,0DAAsD;AAEtD,MAAa,aAAa;IACxB,YACE,GAAW,EACM,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;QA0ClC,aAAQ,GAAG,IAAA,eAAM,GAAE,CAAA;QA8C3B,SAAI,GAAG,CACb,QAAgB,EAChB,UAAqB,EACrB,WAAyB,EACP,EAAE;YACpB,OAAO,IAAI,CAAC,MAAM,CAChB,QAAQ,EACR,uBAAc,CAAC,IAAI,EACnB,CAAC,GAAG,UAAU,EAAE,EAAE,CAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,QAAQ,EACR,UAAU,EACV,WAAW,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CACjD,EACH,UAAU,CACX,CAAA;QACH,CAAC,CAAA;QAEO,cAAS,GAAG,KAAK,EACvB,QAAgB,EAChB,UAAqB,EACrB,QAA8B,EAC9B,WAAyB,EACV,EAAE;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;YAEvE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,QAAQ,CAAC,MAAM,CAAC,CAAA;YAClB,CAAC;YAED,uGAAuG;YACvG,mGAAmG;YACnG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;YAExE,mCAAmC;YACnC,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAA;YAE9B,IAAI,CAAC;gBACH,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;gBAEpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAC5B,QAAQ,EACR,uBAAc,CAAC,SAAS,EACxB,CAAC,GAAG,UAAU,EAAE,EAAE,CAChB,IAAI,CAAC,UAAU,CAAC,SAAS,CACvB,QAAQ,EACR,UAAU,EACV,WAAW,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CACjD,EACH,UAAU,CACX,CAAA;gBAED,
|
|
1
|
+
{"version":3,"file":"RpcClientImpl.js","sourceRoot":"","sources":["../../src/client/RpcClientImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WebSocketConnection = void 0;
|
|
3
|
+
exports.setTestWebSocketConnectionDelay = exports.WebSocketConnection = void 0;
|
|
4
4
|
const logger_js_1 = require("../logger.js");
|
|
5
5
|
const json_js_1 = require("../utils/json.js");
|
|
6
6
|
const promises_js_1 = require("../utils/promises.js");
|
|
@@ -89,6 +89,9 @@ class WebSocketConnection {
|
|
|
89
89
|
async establishConnection(onDisconnected) {
|
|
90
90
|
return new Promise(async (resolve, reject) => {
|
|
91
91
|
try {
|
|
92
|
+
if (testWebSocketConnectionDelay) {
|
|
93
|
+
await (0, promises_js_1.adelay)(testWebSocketConnectionDelay);
|
|
94
|
+
}
|
|
92
95
|
const socket = new WebSocket(this.url, this.clientId);
|
|
93
96
|
let connected = false;
|
|
94
97
|
socket.addEventListener("open", () => {
|
|
@@ -158,4 +161,9 @@ class WebSocketConnection {
|
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
163
|
exports.WebSocketConnection = WebSocketConnection;
|
|
164
|
+
let testWebSocketConnectionDelay = 0;
|
|
165
|
+
function setTestWebSocketConnectionDelay(ms) {
|
|
166
|
+
testWebSocketConnectionDelay = ms;
|
|
167
|
+
}
|
|
168
|
+
exports.setTestWebSocketConnectionDelay = setTestWebSocketConnectionDelay;
|
|
161
169
|
//# sourceMappingURL=WebSocketConnection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketConnection.js","sourceRoot":"","sources":["../../src/client/WebSocketConnection.ts"],"names":[],"mappings":";;;AAAA,4CAAgC;AAChC,8CAA8C;AAC9C,sDAA2C;AAE3C,MAAa,mBAAmB;IAC9B,YACmB,GAAW,EACX,QAAgB,EAChB,OAKhB,EACgB,OAII,EACJ,WAAuB,EACvB,cAA0B;QAd1B,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAQ;QAChB,YAAO,GAAP,OAAO,CAKvB;QACgB,YAAO,GAAP,OAAO,CAIH;QACJ,gBAAW,GAAX,WAAW,CAAY;QACvB,mBAAc,GAAd,cAAc,CAAY;QAKrC,iBAAY,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"WebSocketConnection.js","sourceRoot":"","sources":["../../src/client/WebSocketConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import http from "http";
|
|
|
3
3
|
export declare class ConnectionsServer {
|
|
4
4
|
constructor(server: http.Server, options: ConnectionsServerOptions, connectionClosed: (clientId: string) => void, closeSocketsWithDifferentPath: boolean);
|
|
5
5
|
publish(clientId: string, itemName: string, parameters: unknown[], data: unknown): void;
|
|
6
|
+
isClientSubscribed(clientId: string): boolean;
|
|
6
7
|
private wss;
|
|
7
8
|
private clientSockets;
|
|
8
9
|
close(): Promise<void>;
|
|
@@ -57,8 +57,12 @@ class ConnectionsServer {
|
|
|
57
57
|
ws.send((0, json_js_1.safeStringify)(message));
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
isClientSubscribed(clientId) {
|
|
61
|
+
return this.clientSockets.has(clientId);
|
|
62
|
+
}
|
|
60
63
|
async close() {
|
|
61
64
|
return new Promise((resolve, reject) => {
|
|
65
|
+
this.clientSockets.forEach((c) => c.terminate());
|
|
62
66
|
this.wss.close((err) => {
|
|
63
67
|
if (err)
|
|
64
68
|
reject(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionsServer.js","sourceRoot":"","sources":["../../src/server/ConnectionsServer.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAC9C,2BAA6C;AAE7C,4CAAgC;AAEhC,MAAa,iBAAiB;IAC5B,YACE,MAAmB,EACnB,OAAiC,EACjC,gBAA4C,EAC5C,6BAAsC;
|
|
1
|
+
{"version":3,"file":"ConnectionsServer.js","sourceRoot":"","sources":["../../src/server/ConnectionsServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,7 +76,9 @@ class RpcServerImpl {
|
|
|
76
76
|
logger_js_1.log.error("Cannot get data for subscription", e);
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
|
-
this.
|
|
79
|
+
if (this.connectionsServer?.isClientSubscribed(connectionContext.clientId)) {
|
|
80
|
+
this.localSubscriptions.subscribe(connectionContext.clientId, itemName, parameters, update);
|
|
81
|
+
}
|
|
80
82
|
const lastData = await this.invokeLocalFunction(connectionContext, itemName, item, parameters, rpc_js_1.InvocationType.Subscribe);
|
|
81
83
|
lastDataJson = (0, json_js_1.safeStringify)(lastData);
|
|
82
84
|
return lastData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mEAA0D;AAC1D,gDAAuB;AAEvB,uCAA0C;AAC1C,sCAQkB;AAClB,4CAAgC;AAChC,0DAAsD;AACtD,yCAA6D;AAC7D,8CAA6D;AAE7D,MAAa,aAAa;IACxB,YACmB,QAAW,EACX,OAAkC;QADlC,aAAQ,GAAR,QAAQ,CAAG;QACX,YAAO,GAAP,OAAO,CAA2B;QA4FpC,uBAAkB,GAAG,IAAI,0CAAkB,EAAE,CAAA;QACtD,sBAAiB,GAA6B,IAAI,CAAA;QAGlD,SAAI,GAAG,KAAK,EAClB,iBAAuC,EACvC,QAAgB,EAChB,UAAqB,EACH,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,iBAAQ,CAAC,kBAAS,CAAC,QAAQ,EAAE,QAAQ,QAAQ,YAAY,CAAC,CAAA;YACtE,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,mBAAmB,CACnC,iBAAiB,EACjB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,uBAAc,CAAC,IAAI,CACpB,CAAA;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,eAAG,CAAC,KAAK,CAAC,oBAAoB,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAA;gBAC7C,MAAM,CAAC,CAAA;YACT,CAAC;QACH,CAAC,CAAA;QAEO,cAAS,GAAG,KAAK,EACvB,iBAAuC,EACvC,QAAgB,EAChB,UAAqB,EACrB,EAAE;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,iBAAQ,CAAC,kBAAS,CAAC,QAAQ,EAAE,QAAQ,QAAQ,YAAY,CAAC,CAAA;YACtE,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,YAAY,GAAW,EAAE,CAAA;gBAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAsB,EAAE,EAAE;oBAC1F,IAAI,CAAC;wBACH,MAAM,OAAO,GACX,YAAY,KAAK,SAAS;4BACxB,CAAC,CAAC,YAAY;4BACd,CAAC,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAC5B,iBAAiB,EACjB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,uBAAc,CAAC,OAAO,CACvB,CAAA;wBAEP,MAAM,WAAW,GAAG,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAA;wBAE1C,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;4BAChC,YAAY,GAAG,WAAW,CAAA;4BAC1B,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAC7B,iBAAiB,CAAC,QAAQ,EAC1B,QAAQ,EACR,UAAU,EACV,OAAO,CACR,CAAA;wBACH,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,eAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAA;oBAClD,CAAC;gBACH,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,7 +29,6 @@ export class RemoteSubscriptions {
|
|
|
29
29
|
itemSubscriptions.byParameters.set(parametersKey, parameterSubscriptions)
|
|
30
30
|
parameterSubscriptions.consumers.push({
|
|
31
31
|
consumer,
|
|
32
|
-
completed: false,
|
|
33
32
|
})
|
|
34
33
|
}
|
|
35
34
|
|
|
@@ -55,9 +54,7 @@ export class RemoteSubscriptions {
|
|
|
55
54
|
if (this.cache) this.cache.put(itemName, parameters, data)
|
|
56
55
|
filterSubscriptions.cached = data
|
|
57
56
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
58
|
-
|
|
59
|
-
consumer.consumer(data)
|
|
60
|
-
}
|
|
57
|
+
consumer.consumer(data)
|
|
61
58
|
})
|
|
62
59
|
})
|
|
63
60
|
|
|
@@ -117,9 +114,7 @@ export class RemoteSubscriptions {
|
|
|
117
114
|
if (this.cache) this.cache.put(itemName, parameters, data)
|
|
118
115
|
filterSubscriptions.cached = data
|
|
119
116
|
filterSubscriptions.consumers.forEach((consumer) => {
|
|
120
|
-
|
|
121
|
-
consumer.consumer(data)
|
|
122
|
-
}
|
|
117
|
+
consumer.consumer(data)
|
|
123
118
|
})
|
|
124
119
|
}
|
|
125
120
|
}
|
|
@@ -140,9 +135,7 @@ export class RemoteSubscriptions {
|
|
|
140
135
|
|
|
141
136
|
for (const [itemName, itemSubscriptions] of this.byItem) {
|
|
142
137
|
for (const [, parameterSubscriptions] of itemSubscriptions.byParameters) {
|
|
143
|
-
const consumers = parameterSubscriptions.consumers
|
|
144
|
-
.filter((c) => c.completed)
|
|
145
|
-
.map((c) => c.consumer)
|
|
138
|
+
const consumers = parameterSubscriptions.consumers.map((c) => c.consumer)
|
|
146
139
|
|
|
147
140
|
if (consumers.length) {
|
|
148
141
|
result.push([itemName, parameterSubscriptions.parameters, consumers])
|
|
@@ -186,7 +179,6 @@ type ParametersSubscription = {
|
|
|
186
179
|
|
|
187
180
|
type ConsumerSubscription = {
|
|
188
181
|
consumer: (d: unknown) => void
|
|
189
|
-
completed: boolean
|
|
190
182
|
}
|
|
191
183
|
|
|
192
184
|
function getParametersKey(parameters: unknown[]) {
|
|
@@ -150,13 +150,6 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
150
150
|
parameters,
|
|
151
151
|
)
|
|
152
152
|
|
|
153
|
-
// check if still subscribed
|
|
154
|
-
const sub = this.remoteSubscriptions.getConsumerSubscription(itemName, parameters, consumer)
|
|
155
|
-
if (sub) {
|
|
156
|
-
// mark as completed - will resubscribe on reconnects
|
|
157
|
-
sub.completed = true
|
|
158
|
-
}
|
|
159
|
-
|
|
160
153
|
this.remoteSubscriptions.unpause(itemName, parameters)
|
|
161
154
|
|
|
162
155
|
this.remoteSubscriptions.consume(itemName, parameters, data)
|
|
@@ -164,7 +157,12 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
164
157
|
} catch (e) {
|
|
165
158
|
this.remoteSubscriptions.unpause(itemName, parameters)
|
|
166
159
|
this.remoteSubscriptions.emptyQueue(itemName, parameters)
|
|
167
|
-
|
|
160
|
+
|
|
161
|
+
// Do not unsubscribe on errors to improve UX
|
|
162
|
+
// If we unsubscribe on errors, this will break UX during internet connection issues.
|
|
163
|
+
// IE when offline, subscribe will fail. With unsubscribe, subscriptions are not stored, and later on WS connection
|
|
164
|
+
// client won't be resubscribed.
|
|
165
|
+
|
|
168
166
|
throw e
|
|
169
167
|
}
|
|
170
168
|
}
|
|
@@ -193,17 +191,14 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
193
191
|
}
|
|
194
192
|
|
|
195
193
|
private resubscribe = () => {
|
|
196
|
-
for (const [itemName, params
|
|
194
|
+
for (const [itemName, params] of this.remoteSubscriptions.getAllSubscriptions()) {
|
|
197
195
|
this.httpClient
|
|
198
196
|
.subscribe(itemName, params, this.options.callTimeout)
|
|
199
197
|
.then((data) => {
|
|
200
198
|
this.remoteSubscriptions.consume(itemName, params, data)
|
|
201
199
|
})
|
|
202
|
-
.catch((
|
|
203
|
-
//
|
|
204
|
-
for (const consumer of consumers) {
|
|
205
|
-
this.remoteSubscriptions.unsubscribe(itemName, params, consumer)
|
|
206
|
-
}
|
|
200
|
+
.catch(() => {
|
|
201
|
+
// Do not unsubscribe on error to improve UX, see comment in RpcClientImpl.subscribe
|
|
207
202
|
})
|
|
208
203
|
}
|
|
209
204
|
}
|
|
@@ -15,10 +15,10 @@ export class WebSocketConnection {
|
|
|
15
15
|
private readonly consume: (
|
|
16
16
|
itemName: string,
|
|
17
17
|
parameters: unknown[],
|
|
18
|
-
data: unknown
|
|
18
|
+
data: unknown,
|
|
19
19
|
) => Promise<unknown>,
|
|
20
20
|
private readonly onConnected: () => void,
|
|
21
|
-
private readonly onDisconnected: () => void
|
|
21
|
+
private readonly onDisconnected: () => void,
|
|
22
22
|
) {
|
|
23
23
|
this.clientId = clientId
|
|
24
24
|
}
|
|
@@ -69,7 +69,7 @@ export class WebSocketConnection {
|
|
|
69
69
|
|
|
70
70
|
// recreate promise so new clients will wait for new connection
|
|
71
71
|
this.waitConnectionPromise = new Promise(
|
|
72
|
-
(resolve) => (resolveConnectionPromise = resolve)
|
|
72
|
+
(resolve) => (resolveConnectionPromise = resolve),
|
|
73
73
|
)
|
|
74
74
|
|
|
75
75
|
resolve()
|
|
@@ -87,7 +87,7 @@ export class WebSocketConnection {
|
|
|
87
87
|
|
|
88
88
|
// 2. ... unable to establish connection
|
|
89
89
|
resolve()
|
|
90
|
-
}
|
|
90
|
+
},
|
|
91
91
|
)
|
|
92
92
|
})
|
|
93
93
|
|
|
@@ -122,6 +122,10 @@ export class WebSocketConnection {
|
|
|
122
122
|
private async establishConnection(onDisconnected: () => void): Promise<void> {
|
|
123
123
|
return new Promise(async (resolve, reject) => {
|
|
124
124
|
try {
|
|
125
|
+
if (testWebSocketConnectionDelay) {
|
|
126
|
+
await adelay(testWebSocketConnectionDelay)
|
|
127
|
+
}
|
|
128
|
+
|
|
125
129
|
const socket = new WebSocket(this.url, this.clientId)
|
|
126
130
|
|
|
127
131
|
let connected = false
|
|
@@ -209,3 +213,9 @@ export class WebSocketConnection {
|
|
|
209
213
|
return this.socket
|
|
210
214
|
}
|
|
211
215
|
}
|
|
216
|
+
|
|
217
|
+
let testWebSocketConnectionDelay = 0
|
|
218
|
+
|
|
219
|
+
export function setTestWebSocketConnectionDelay(ms: number) {
|
|
220
|
+
testWebSocketConnectionDelay = ms
|
|
221
|
+
}
|
|
@@ -72,11 +72,17 @@ export class ConnectionsServer {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
isClientSubscribed(clientId: string): boolean {
|
|
76
|
+
return this.clientSockets.has(clientId)
|
|
77
|
+
}
|
|
78
|
+
|
|
75
79
|
private wss: WebSocketServer
|
|
76
80
|
private clientSockets = new Map<string, WebSocket & {alive: boolean}>()
|
|
77
81
|
|
|
78
82
|
async close() {
|
|
79
83
|
return new Promise<void>((resolve, reject) => {
|
|
84
|
+
this.clientSockets.forEach((c) => c.terminate())
|
|
85
|
+
|
|
80
86
|
this.wss.close((err) => {
|
|
81
87
|
if (err) reject(err)
|
|
82
88
|
else resolve()
|
|
@@ -7,7 +7,7 @@ export class LocalSubscriptions {
|
|
|
7
7
|
clientId: string,
|
|
8
8
|
itemName: string,
|
|
9
9
|
parameters: unknown[],
|
|
10
|
-
update: (suppliedData?: unknown) => void
|
|
10
|
+
update: (suppliedData?: unknown) => void,
|
|
11
11
|
) {
|
|
12
12
|
const itemSubscriptions = this.byItem.get(itemName) || {byFilter: new Map()}
|
|
13
13
|
this.byItem.set(itemName, itemSubscriptions)
|
|
@@ -35,7 +35,7 @@ export class LocalSubscriptions {
|
|
|
35
35
|
if (!subscriptions) return
|
|
36
36
|
|
|
37
37
|
subscriptions.subscribedClients = subscriptions.subscribedClients.filter(
|
|
38
|
-
(subscription) => subscription.clientId != clientId
|
|
38
|
+
(subscription) => subscription.clientId != clientId,
|
|
39
39
|
)
|
|
40
40
|
|
|
41
41
|
if (!subscriptions.subscribedClients.length) {
|
|
@@ -51,7 +51,7 @@ export class LocalSubscriptions {
|
|
|
51
51
|
for (const [itemName, itemSubscriptions] of this.byItem.entries()) {
|
|
52
52
|
for (const [filterKey, subscriptions] of itemSubscriptions.byFilter.entries()) {
|
|
53
53
|
subscriptions.subscribedClients = subscriptions.subscribedClients.filter(
|
|
54
|
-
(subscription) => subscription.clientId != clientId
|
|
54
|
+
(subscription) => subscription.clientId != clientId,
|
|
55
55
|
)
|
|
56
56
|
|
|
57
57
|
if (!subscriptions.subscribedClients.length) {
|
|
@@ -129,7 +129,7 @@ type SubscribedClient = {
|
|
|
129
129
|
|
|
130
130
|
function filterContains(
|
|
131
131
|
triggerFilter: Record<string, unknown>,
|
|
132
|
-
subscriptionFilter: Record<string, unknown
|
|
132
|
+
subscriptionFilter: Record<string, unknown>,
|
|
133
133
|
): boolean {
|
|
134
134
|
if (subscriptionFilter == null) return true // subscribe to all data
|
|
135
135
|
if (triggerFilter == null) return true // all data modified
|
|
@@ -184,7 +184,9 @@ export class RpcServerImpl<S extends Services<S>, C extends RpcContext> implemen
|
|
|
184
184
|
}
|
|
185
185
|
})
|
|
186
186
|
|
|
187
|
-
this.
|
|
187
|
+
if (this.connectionsServer?.isClientSubscribed(connectionContext.clientId)) {
|
|
188
|
+
this.localSubscriptions.subscribe(connectionContext.clientId, itemName, parameters, update)
|
|
189
|
+
}
|
|
188
190
|
|
|
189
191
|
const lastData = await this.invokeLocalFunction(
|
|
190
192
|
connectionContext,
|
|
@@ -257,7 +259,7 @@ export class RpcServerImpl<S extends Services<S>, C extends RpcContext> implemen
|
|
|
257
259
|
const invokeItem = (...params: unknown[]) => {
|
|
258
260
|
return item.function.call(item.container, ...params, ctx)
|
|
259
261
|
}
|
|
260
|
-
|
|
262
|
+
|
|
261
263
|
return withMiddlewares<C>(ctx, this.options.middleware, invokeItem, ...parametersCopy)
|
|
262
264
|
}
|
|
263
265
|
}
|
package/tests/context.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {createTestClient, startTestServer} from "./testUtils.js"
|
|
1
|
+
import {createTestClient, startTestServer, testClient, testServer} from "./testUtils.js"
|
|
2
2
|
import {assert} from "chai"
|
|
3
3
|
import {adelay} from "../src/utils/promises.js"
|
|
4
4
|
import {RpcContext} from "../src/index.js"
|
|
@@ -41,7 +41,7 @@ describe("context", () => {
|
|
|
41
41
|
async createConnectionContext() {
|
|
42
42
|
return {clientId: "test", newKey: "bla"}
|
|
43
43
|
},
|
|
44
|
-
}
|
|
44
|
+
},
|
|
45
45
|
)
|
|
46
46
|
|
|
47
47
|
const client = await createTestClient<typeof services>()
|
|
@@ -75,30 +75,25 @@ describe("context", () => {
|
|
|
75
75
|
it("available in trigger", async () => {
|
|
76
76
|
let ctx = null
|
|
77
77
|
|
|
78
|
-
const services = await startTestServer(
|
|
79
|
-
{
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
ctx = passedCtx
|
|
83
|
-
},
|
|
78
|
+
const services = await startTestServer({
|
|
79
|
+
test: {
|
|
80
|
+
async call(passedCtx?: any) {
|
|
81
|
+
ctx = passedCtx
|
|
84
82
|
},
|
|
85
83
|
},
|
|
86
|
-
|
|
87
|
-
async createConnectionContext() {
|
|
88
|
-
return {clientId: "test"}
|
|
89
|
-
},
|
|
90
|
-
}
|
|
91
|
-
)
|
|
84
|
+
})
|
|
92
85
|
|
|
93
|
-
const client = await createTestClient<typeof services>(
|
|
86
|
+
const client = await createTestClient<typeof services>({
|
|
87
|
+
connectOnCreate: true,
|
|
88
|
+
})
|
|
94
89
|
|
|
95
90
|
await client.test.call.subscribe(() => {})
|
|
96
|
-
assert.equal(ctx!.clientId,
|
|
91
|
+
assert.equal(ctx!.clientId, testClient?.clientId)
|
|
97
92
|
|
|
98
93
|
ctx = null
|
|
99
94
|
services.test.call.trigger()
|
|
100
95
|
await adelay(20)
|
|
101
|
-
assert.equal(ctx!.clientId,
|
|
96
|
+
assert.equal(ctx!.clientId, testClient?.clientId)
|
|
102
97
|
assert.equal(ctx!.invocationType, InvocationType.Trigger)
|
|
103
98
|
})
|
|
104
99
|
|
|
@@ -107,26 +102,19 @@ describe("context", () => {
|
|
|
107
102
|
|
|
108
103
|
let count = 0
|
|
109
104
|
|
|
110
|
-
const services = await startTestServer(
|
|
111
|
-
{
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
ctx = passedCtx
|
|
105
|
+
const services = await startTestServer({
|
|
106
|
+
test: {
|
|
107
|
+
async call(passedCtx?: any) {
|
|
108
|
+
ctx = passedCtx
|
|
115
109
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
110
|
+
if (!count) {
|
|
111
|
+
ctx.modified = true
|
|
112
|
+
}
|
|
119
113
|
|
|
120
|
-
|
|
121
|
-
},
|
|
114
|
+
count++
|
|
122
115
|
},
|
|
123
116
|
},
|
|
124
|
-
|
|
125
|
-
async createConnectionContext() {
|
|
126
|
-
return {clientId: "test"}
|
|
127
|
-
},
|
|
128
|
-
}
|
|
129
|
-
)
|
|
117
|
+
})
|
|
130
118
|
|
|
131
119
|
const client = await createTestClient<typeof services>()
|
|
132
120
|
|
|
@@ -160,7 +148,7 @@ describe("context", () => {
|
|
|
160
148
|
return next(ctx)
|
|
161
149
|
},
|
|
162
150
|
],
|
|
163
|
-
}
|
|
151
|
+
},
|
|
164
152
|
)
|
|
165
153
|
|
|
166
154
|
const client = await createTestClient<typeof services>()
|
package/tests/subscriptions.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import {assert} from "chai"
|
|
2
2
|
import {createTestClient, startTestServer, testClient, testServer} from "./testUtils.js"
|
|
3
3
|
import {adelay} from "../src/utils/promises.js"
|
|
4
|
-
import {CallOptions,
|
|
5
|
-
import {
|
|
6
|
-
import {CLIENT_ID_HEADER} from "../src/rpc.js"
|
|
7
|
-
import WebSocket from "ws"
|
|
4
|
+
import {CallOptions, RpcErrors} from "../src/index.js"
|
|
5
|
+
import {setTestWebSocketConnectionDelay} from "../src/client/WebSocketConnection.js"
|
|
8
6
|
|
|
9
7
|
describe("Subscriptions", () => {
|
|
10
8
|
it("subscribe delivers data", async () => {
|
|
@@ -517,9 +515,6 @@ describe("Subscriptions", () => {
|
|
|
517
515
|
} catch (e: any) {
|
|
518
516
|
assert.equal(e.code, RpcErrors.Timeout)
|
|
519
517
|
}
|
|
520
|
-
|
|
521
|
-
assert.equal(testClient!._allSubscriptions().length, 0)
|
|
522
|
-
assert.equal(testServer!._allSubscriptions().length, 0)
|
|
523
518
|
}).timeout(5000)
|
|
524
519
|
|
|
525
520
|
it("missing update in case of concurrent subscribe/trigger", async () => {
|
|
@@ -706,22 +701,73 @@ describe("Subscriptions", () => {
|
|
|
706
701
|
|
|
707
702
|
cancelWebsocketConnectionDelay()
|
|
708
703
|
})
|
|
709
|
-
})
|
|
710
704
|
|
|
711
|
-
|
|
705
|
+
it("disconnect during subscribe", async () => {
|
|
706
|
+
const item = {r: "1"}
|
|
712
707
|
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
708
|
+
const services = await startTestServer({
|
|
709
|
+
test: {
|
|
710
|
+
item: async () => item,
|
|
711
|
+
},
|
|
712
|
+
})
|
|
713
|
+
|
|
714
|
+
const consume1 = await createTestClient<typeof services>({
|
|
715
|
+
connectOnCreate: true,
|
|
716
|
+
})
|
|
717
|
+
|
|
718
|
+
let received = null
|
|
719
|
+
|
|
720
|
+
// disconnect WS
|
|
721
|
+
testClient!._webSocket()!.close()
|
|
722
|
+
|
|
723
|
+
await consume1.test.item.subscribe((item) => {
|
|
724
|
+
received = item
|
|
725
|
+
})
|
|
726
|
+
|
|
727
|
+
assert.deepEqual(received, item)
|
|
728
|
+
|
|
729
|
+
item.r = "2"
|
|
730
|
+
services.test.item.trigger()
|
|
731
|
+
await adelay(100)
|
|
732
|
+
|
|
733
|
+
// still getting the update b/c on WS reconnect client will resubscribe
|
|
734
|
+
assert.deepEqual(received, item)
|
|
735
|
+
})
|
|
736
|
+
|
|
737
|
+
it("do not add subscriptions without connection", async () => {
|
|
738
|
+
const item = {r: "1"}
|
|
739
|
+
|
|
740
|
+
delayWebsocketConnection(100)
|
|
741
|
+
|
|
742
|
+
const services = await startTestServer({
|
|
743
|
+
test: {
|
|
744
|
+
item: async () => {
|
|
745
|
+
return item
|
|
746
|
+
},
|
|
720
747
|
},
|
|
721
|
-
|
|
722
|
-
|
|
748
|
+
})
|
|
749
|
+
|
|
750
|
+
const remote = await createTestClient<typeof services>()
|
|
751
|
+
|
|
752
|
+
let receivedItem
|
|
753
|
+
await remote.test.item.subscribe((item) => {
|
|
754
|
+
receivedItem = item
|
|
755
|
+
})
|
|
756
|
+
|
|
757
|
+
assert.deepEqual(receivedItem, item)
|
|
758
|
+
|
|
759
|
+
const length = testServer!._allSubscriptions().length
|
|
760
|
+
|
|
761
|
+
assert.equal(length, 0)
|
|
762
|
+
|
|
763
|
+
cancelWebsocketConnectionDelay()
|
|
764
|
+
})
|
|
765
|
+
})
|
|
766
|
+
|
|
767
|
+
function delayWebsocketConnection(ms: number) {
|
|
768
|
+
setTestWebSocketConnectionDelay(ms)
|
|
723
769
|
}
|
|
724
770
|
|
|
725
771
|
function cancelWebsocketConnectionDelay() {
|
|
726
|
-
|
|
772
|
+
setTestWebSocketConnectionDelay(0)
|
|
727
773
|
}
|
package/tests/testUtils.ts
CHANGED
|
@@ -20,7 +20,7 @@ export let testServer: RpcServer | null = null
|
|
|
20
20
|
|
|
21
21
|
export async function startTestServer<S extends Services<S>, C extends RpcContext>(
|
|
22
22
|
local: S,
|
|
23
|
-
options: Partial<PublishServicesOptions<C>> = {}
|
|
23
|
+
options: Partial<PublishServicesOptions<C>> = {},
|
|
24
24
|
): Promise<ServicesWithTriggers<S>> {
|
|
25
25
|
const r = await publishServices<S, C>(local, {
|
|
26
26
|
port: TEST_PORT,
|
|
@@ -34,7 +34,7 @@ export async function startTestServer<S extends Services<S>, C extends RpcContex
|
|
|
34
34
|
export let testClient: RpcClient | null = null
|
|
35
35
|
|
|
36
36
|
export async function createTestClient<S extends Services<S>>(
|
|
37
|
-
options?: Partial<ConsumeServicesOptions
|
|
37
|
+
options?: Partial<ConsumeServicesOptions>,
|
|
38
38
|
): Promise<ServicesWithSubscriptions<S>> {
|
|
39
39
|
if (!options) options = {}
|
|
40
40
|
if (!options.middleware) options.middleware = []
|