@push-rpc/next 2.0.11 → 2.0.12
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 +214 -20
- package/example/client.ts +1 -1
- package/example/server.ts +2 -2
- package/package-lock.json +1291 -0
- package/package.json +1 -1
- package/src/client/RpcClientImpl.ts +11 -3
- package/src/client/WebSocketConnection.ts +7 -3
- package/src/client/index.ts +2 -2
- package/src/utils/middleware.ts +7 -2
- package/tests/middleware.ts +104 -7
- package/tests/testUtils.ts +2 -2
- package/dist/client/HttpClient.d.ts +0 -11
- package/dist/client/HttpClient.js +0 -84
- package/dist/client/HttpClient.js.map +0 -1
- package/dist/client/RemoteSubscriptions.d.ts +0 -18
- package/dist/client/RemoteSubscriptions.js +0 -120
- package/dist/client/RemoteSubscriptions.js.map +0 -1
- package/dist/client/RpcClientImpl.d.ts +0 -22
- package/dist/client/RpcClientImpl.js +0 -121
- package/dist/client/RpcClientImpl.js.map +0 -1
- package/dist/client/WebSocketConnection.d.ts +0 -36
- package/dist/client/WebSocketConnection.js +0 -161
- package/dist/client/WebSocketConnection.js.map +0 -1
- package/dist/client/index.d.ts +0 -29
- package/dist/client/index.js +0 -39
- package/dist/client/index.js.map +0 -1
- package/dist/client/remote.d.ts +0 -14
- package/dist/client/remote.js +0 -66
- package/dist/client/remote.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts +0 -8
- package/dist/logger.js +0 -9
- package/dist/logger.js.map +0 -1
- package/dist/rpc.d.ts +0 -37
- package/dist/rpc.js +0 -33
- package/dist/rpc.js.map +0 -1
- package/dist/server/ConnectionsServer.d.ts +0 -13
- package/dist/server/ConnectionsServer.js +0 -72
- package/dist/server/ConnectionsServer.js.map +0 -1
- package/dist/server/LocalSubscriptions.d.ts +0 -12
- package/dist/server/LocalSubscriptions.js +0 -113
- package/dist/server/LocalSubscriptions.js.map +0 -1
- package/dist/server/RpcServerImpl.d.ts +0 -24
- package/dist/server/RpcServerImpl.js +0 -200
- package/dist/server/RpcServerImpl.js.map +0 -1
- package/dist/server/http.d.ts +0 -9
- package/dist/server/http.js +0 -89
- package/dist/server/http.js.map +0 -1
- package/dist/server/index.d.ts +0 -32
- package/dist/server/index.js +0 -33
- package/dist/server/index.js.map +0 -1
- package/dist/server/local.d.ts +0 -15
- package/dist/server/local.js +0 -46
- package/dist/server/local.js.map +0 -1
- package/dist/utils/cookies.d.ts +0 -7
- package/dist/utils/cookies.js +0 -31
- package/dist/utils/cookies.js.map +0 -1
- package/dist/utils/env.d.ts +0 -6
- package/dist/utils/env.js +0 -22
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/json.d.ts +0 -2
- package/dist/utils/json.js +0 -34
- package/dist/utils/json.js.map +0 -1
- package/dist/utils/middleware.d.ts +0 -2
- package/dist/utils/middleware.js +0 -31
- package/dist/utils/middleware.js.map +0 -1
- package/dist/utils/promises.d.ts +0 -5
- package/dist/utils/promises.js +0 -29
- package/dist/utils/promises.js.map +0 -1
- package/dist/utils/server.d.ts +0 -5
- package/dist/utils/server.js +0 -48
- package/dist/utils/server.js.map +0 -1
- package/dist/utils/throttle.d.ts +0 -4
- package/dist/utils/throttle.js +0 -40
- package/dist/utils/throttle.js.map +0 -1
- package/dist/utils/types.d.ts +0 -1
- package/dist/utils/types.js +0 -3
- package/dist/utils/types.js.map +0 -1
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@ import {WebSocketConnection} from "./WebSocketConnection.js"
|
|
|
5
5
|
import {nanoid} from "nanoid"
|
|
6
6
|
import {createRemote, ServicesWithSubscriptions} from "./remote.js"
|
|
7
7
|
import {ConsumeServicesOptions, RpcClient} from "./index.js"
|
|
8
|
-
import {withMiddlewares} from "../utils/middleware.js"
|
|
8
|
+
import {Middleware, withMiddlewares} from "../utils/middleware.js"
|
|
9
9
|
|
|
10
10
|
export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
11
11
|
constructor(
|
|
@@ -31,8 +31,16 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
31
31
|
invocationType: InvocationType.Update,
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
const next = async (
|
|
35
|
-
|
|
34
|
+
const next = async (nextData = data, nextParameters = parameters) =>
|
|
35
|
+
this.remoteSubscriptions.consume(itemName, nextParameters, nextData)
|
|
36
|
+
|
|
37
|
+
return withMiddlewares(
|
|
38
|
+
ctx,
|
|
39
|
+
this.options.notificationsMiddleware,
|
|
40
|
+
next as any,
|
|
41
|
+
data,
|
|
42
|
+
parameters
|
|
43
|
+
)
|
|
36
44
|
},
|
|
37
45
|
() => {
|
|
38
46
|
this.resubscribe()
|
|
@@ -12,7 +12,11 @@ export class WebSocketConnection {
|
|
|
12
12
|
errorDelayMaxDuration: number
|
|
13
13
|
pingInterval: number | null
|
|
14
14
|
},
|
|
15
|
-
private readonly consume: (
|
|
15
|
+
private readonly consume: (
|
|
16
|
+
itemName: string,
|
|
17
|
+
parameters: unknown[],
|
|
18
|
+
data: unknown
|
|
19
|
+
) => Promise<unknown>,
|
|
16
20
|
private readonly onConnected: () => void,
|
|
17
21
|
private readonly onDisconnected: () => void
|
|
18
22
|
) {
|
|
@@ -194,9 +198,9 @@ export class WebSocketConnection {
|
|
|
194
198
|
|
|
195
199
|
const [itemName, data, ...parameters] = safeParseJson(msg)
|
|
196
200
|
|
|
197
|
-
this.consume(itemName, parameters, data)
|
|
201
|
+
await this.consume(itemName, parameters, data)
|
|
198
202
|
} catch (e) {
|
|
199
|
-
log.
|
|
203
|
+
log.error("Can't handle notification", e)
|
|
200
204
|
}
|
|
201
205
|
}
|
|
202
206
|
|
package/src/client/index.ts
CHANGED
|
@@ -22,7 +22,7 @@ export type ConsumeServicesOptions = {
|
|
|
22
22
|
pingInterval: number | null
|
|
23
23
|
subscriptions: boolean
|
|
24
24
|
middleware: Middleware<RpcContext>[]
|
|
25
|
-
|
|
25
|
+
notificationsMiddleware: Middleware<RpcContext>[]
|
|
26
26
|
connectOnCreate: boolean
|
|
27
27
|
onConnected: () => void
|
|
28
28
|
onDisconnected: () => void
|
|
@@ -65,7 +65,7 @@ const defaultOptions: ConsumeServicesOptions = {
|
|
|
65
65
|
pingInterval: null, // if set, should be in-sync with server, ie 30 * 1000
|
|
66
66
|
subscriptions: true,
|
|
67
67
|
middleware: [],
|
|
68
|
-
|
|
68
|
+
notificationsMiddleware: [],
|
|
69
69
|
connectOnCreate: false,
|
|
70
70
|
onConnected: () => {},
|
|
71
71
|
onDisconnected: () => {},
|
package/src/utils/middleware.ts
CHANGED
|
@@ -25,11 +25,16 @@ export function withMiddlewares<Context>(
|
|
|
25
25
|
index = i
|
|
26
26
|
|
|
27
27
|
try {
|
|
28
|
+
let result
|
|
29
|
+
|
|
28
30
|
if (i === middlewares.length) {
|
|
29
|
-
|
|
31
|
+
result = next(...p)
|
|
30
32
|
} else {
|
|
31
|
-
|
|
33
|
+
const dispatchNextMiddleware = dispatch.bind(null, i + 1)
|
|
34
|
+
result = middlewares[i](ctx, dispatchNextMiddleware, ...p)
|
|
32
35
|
}
|
|
36
|
+
|
|
37
|
+
return Promise.resolve(result)
|
|
33
38
|
} catch (err) {
|
|
34
39
|
return Promise.reject(err)
|
|
35
40
|
}
|
package/tests/middleware.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {assert} from "chai"
|
|
2
|
-
import {Middleware, withMiddlewares} from "../src/index.js"
|
|
2
|
+
import {Middleware, setLogger, withMiddlewares} from "../src/index.js"
|
|
3
3
|
import {createTestClient, startTestServer} from "./testUtils.js"
|
|
4
4
|
import {adelay} from "../src/utils/promises.js"
|
|
5
5
|
|
|
@@ -110,19 +110,20 @@ describe("middleware", () => {
|
|
|
110
110
|
}
|
|
111
111
|
})
|
|
112
112
|
|
|
113
|
-
it("
|
|
113
|
+
it("notifications middlewares", async () => {
|
|
114
114
|
let count = 1
|
|
115
115
|
|
|
116
116
|
const services = await startTestServer({
|
|
117
|
-
async remote() {
|
|
117
|
+
async remote(filter: {param: number}) {
|
|
118
118
|
return count++
|
|
119
119
|
},
|
|
120
120
|
})
|
|
121
121
|
|
|
122
122
|
const client = await createTestClient<typeof services>({
|
|
123
|
-
|
|
124
|
-
(ctx, next, r) => {
|
|
123
|
+
notificationsMiddleware: [
|
|
124
|
+
(ctx, next, r, params) => {
|
|
125
125
|
assert.ok(ctx.itemName)
|
|
126
|
+
assert.deepEqual(params, [{param: 1}])
|
|
126
127
|
|
|
127
128
|
return next((r as number) + 1)
|
|
128
129
|
},
|
|
@@ -130,14 +131,110 @@ describe("middleware", () => {
|
|
|
130
131
|
})
|
|
131
132
|
|
|
132
133
|
let response
|
|
134
|
+
await client.remote.subscribe(
|
|
135
|
+
(r) => {
|
|
136
|
+
response = r
|
|
137
|
+
},
|
|
138
|
+
{param: 1}
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
services.remote.trigger({param: 1})
|
|
142
|
+
|
|
143
|
+
await adelay(20)
|
|
144
|
+
|
|
145
|
+
assert.equal(response, 3)
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it("error in notificationsMiddleware logged", async () => {
|
|
149
|
+
let log = ""
|
|
150
|
+
|
|
151
|
+
setLogger({
|
|
152
|
+
error(s: unknown, ...params) {
|
|
153
|
+
log += s + "\n" + params
|
|
154
|
+
},
|
|
155
|
+
warn: console.warn,
|
|
156
|
+
debug: console.debug,
|
|
157
|
+
info: console.info,
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
let count = 1
|
|
161
|
+
let result = 0
|
|
162
|
+
|
|
163
|
+
const services = await startTestServer({
|
|
164
|
+
async remote() {
|
|
165
|
+
return count++
|
|
166
|
+
},
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
const client = await createTestClient<typeof services>({
|
|
170
|
+
notificationsMiddleware: [
|
|
171
|
+
() => {
|
|
172
|
+
throw new Error("Test error")
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
})
|
|
176
|
+
|
|
133
177
|
await client.remote.subscribe((r) => {
|
|
134
|
-
|
|
178
|
+
result = r
|
|
135
179
|
})
|
|
136
180
|
|
|
137
181
|
services.remote.trigger()
|
|
138
182
|
|
|
139
183
|
await adelay(20)
|
|
140
184
|
|
|
141
|
-
assert.equal(
|
|
185
|
+
assert.equal(result, 1)
|
|
186
|
+
|
|
187
|
+
assert.include(log, "Test error")
|
|
188
|
+
|
|
189
|
+
setLogger(console)
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
it("error in client request middleware propagated", async () => {
|
|
193
|
+
let count = 1
|
|
194
|
+
|
|
195
|
+
const services = await startTestServer({
|
|
196
|
+
async remote() {
|
|
197
|
+
return count++
|
|
198
|
+
},
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
const client = await createTestClient<typeof services>({
|
|
202
|
+
middleware: [
|
|
203
|
+
() => {
|
|
204
|
+
throw new Error("Error")
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
try {
|
|
210
|
+
await client.remote()
|
|
211
|
+
assert.fail("Expected to fail")
|
|
212
|
+
} catch (e) {}
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
it("error in server request middleware propagated", async () => {
|
|
216
|
+
let count = 1
|
|
217
|
+
|
|
218
|
+
const services = await startTestServer(
|
|
219
|
+
{
|
|
220
|
+
async remote() {
|
|
221
|
+
return count++
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
middleware: [
|
|
226
|
+
() => {
|
|
227
|
+
throw new Error("Error")
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
}
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
const client = await createTestClient<typeof services>({})
|
|
234
|
+
|
|
235
|
+
try {
|
|
236
|
+
await client.remote()
|
|
237
|
+
assert.fail("Expected to fail")
|
|
238
|
+
} catch (e) {}
|
|
142
239
|
})
|
|
143
240
|
})
|
package/tests/testUtils.ts
CHANGED
|
@@ -39,8 +39,8 @@ export async function createTestClient<S extends Services<S>>(
|
|
|
39
39
|
if (!options) options = {}
|
|
40
40
|
if (!options.middleware) options.middleware = []
|
|
41
41
|
options.middleware = [logMiddleware, ...options.middleware]
|
|
42
|
-
if (!options.
|
|
43
|
-
options.
|
|
42
|
+
if (!options.notificationsMiddleware) options.notificationsMiddleware = []
|
|
43
|
+
options.notificationsMiddleware = [logUpdatesMiddleware, ...options.notificationsMiddleware]
|
|
44
44
|
|
|
45
45
|
const r = await consumeServices<S>(`http://127.0.0.1:${TEST_PORT}/rpc`, options)
|
|
46
46
|
testClient = r.client
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare class HttpClient {
|
|
2
|
-
private url;
|
|
3
|
-
private clientId;
|
|
4
|
-
private getHeaders;
|
|
5
|
-
constructor(url: string, clientId: string, getHeaders: () => Promise<Record<string, string>>);
|
|
6
|
-
call(itemName: string, params: unknown[], callTimeout: number): Promise<unknown>;
|
|
7
|
-
subscribe(itemName: string, params: unknown[], callTimeout: number): Promise<unknown>;
|
|
8
|
-
unsubscribe(itemName: string, params: unknown[], callTimeout: number): Promise<void>;
|
|
9
|
-
private getItemUrl;
|
|
10
|
-
private httpRequest;
|
|
11
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HttpClient = void 0;
|
|
4
|
-
const rpc_js_1 = require("../rpc.js");
|
|
5
|
-
const json_js_1 = require("../utils/json.js");
|
|
6
|
-
class HttpClient {
|
|
7
|
-
constructor(url, clientId, getHeaders) {
|
|
8
|
-
this.url = url;
|
|
9
|
-
this.clientId = clientId;
|
|
10
|
-
this.getHeaders = getHeaders;
|
|
11
|
-
}
|
|
12
|
-
async call(itemName, params, callTimeout) {
|
|
13
|
-
return this.httpRequest("POST", itemName, params, callTimeout, await this.getHeaders());
|
|
14
|
-
}
|
|
15
|
-
async subscribe(itemName, params, callTimeout) {
|
|
16
|
-
return this.httpRequest("PUT", itemName, params, callTimeout, await this.getHeaders());
|
|
17
|
-
}
|
|
18
|
-
async unsubscribe(itemName, params, callTimeout) {
|
|
19
|
-
await this.httpRequest("PATCH", itemName, params, callTimeout, await this.getHeaders());
|
|
20
|
-
}
|
|
21
|
-
getItemUrl(itemName) {
|
|
22
|
-
return `${this.url}/${itemName}`;
|
|
23
|
-
}
|
|
24
|
-
async httpRequest(method, itemName, params, callTimeout, headers) {
|
|
25
|
-
const itemUrl = this.getItemUrl(itemName);
|
|
26
|
-
try {
|
|
27
|
-
const { signal, finished } = timeoutSignal(callTimeout);
|
|
28
|
-
const response = await fetch(itemUrl, {
|
|
29
|
-
method,
|
|
30
|
-
headers: {
|
|
31
|
-
"Content-Type": "application/json",
|
|
32
|
-
[rpc_js_1.CLIENT_ID_HEADER]: this.clientId,
|
|
33
|
-
...headers,
|
|
34
|
-
},
|
|
35
|
-
body: (0, json_js_1.safeStringify)(params),
|
|
36
|
-
signal,
|
|
37
|
-
});
|
|
38
|
-
finished();
|
|
39
|
-
if (response.status == 204) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const contentType = response.headers.get("content-type");
|
|
43
|
-
const text = await response.text();
|
|
44
|
-
const res = contentType && contentType.includes("application/json") ? (0, json_js_1.safeParseJson)(text) : text;
|
|
45
|
-
if (response.status < 200 || response.status >= 300) {
|
|
46
|
-
const error = new Error(response.statusText);
|
|
47
|
-
Object.assign(error, { code: response.status });
|
|
48
|
-
if (typeof res == "object") {
|
|
49
|
-
Object.assign(error, res);
|
|
50
|
-
}
|
|
51
|
-
throw error;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return res;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch (e) {
|
|
58
|
-
if (e.message == "Error" || !e.message) {
|
|
59
|
-
e.message = `Error ${e.code} while ${itemUrl}`;
|
|
60
|
-
}
|
|
61
|
-
if (e.message == "fetch failed" && e.cause) {
|
|
62
|
-
e = e.cause;
|
|
63
|
-
}
|
|
64
|
-
if (e.message?.toLowerCase()?.includes("timeout")) {
|
|
65
|
-
// NodeJS undici http client timeout
|
|
66
|
-
const error = new Error("Timeout");
|
|
67
|
-
Object.assign(error, { code: rpc_js_1.RpcErrors.Timeout });
|
|
68
|
-
throw error;
|
|
69
|
-
}
|
|
70
|
-
throw e;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
exports.HttpClient = HttpClient;
|
|
75
|
-
// AbortSignal.timeout polyfill for RN
|
|
76
|
-
function timeoutSignal(time) {
|
|
77
|
-
const controller = new AbortController();
|
|
78
|
-
const timeout = setTimeout(() => controller.abort(new Error("TimeoutError")), time);
|
|
79
|
-
return {
|
|
80
|
-
signal: controller.signal,
|
|
81
|
-
finished: () => clearTimeout(timeout),
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=HttpClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export declare class RemoteSubscriptions {
|
|
2
|
-
unsubscribe(itemName: string, parameters: unknown[], consumer: (d: unknown) => void): boolean;
|
|
3
|
-
addSubscription(itemName: string, parameters: unknown[], consumer: (d: unknown) => void): void;
|
|
4
|
-
pause(itemName: string, parameters: unknown[]): void;
|
|
5
|
-
unpause(itemName: string, parameters: unknown[]): void;
|
|
6
|
-
flushQueue(itemName: string, parameters: unknown[]): void;
|
|
7
|
-
emptyQueue(itemName: string, parameters: unknown[]): void;
|
|
8
|
-
private removeSubscription;
|
|
9
|
-
getCached(itemName: string, parameters: unknown[]): unknown | undefined;
|
|
10
|
-
consume(itemName: string, parameters: unknown[], data: unknown): void;
|
|
11
|
-
getAllSubscriptions(): Array<[
|
|
12
|
-
itemName: string,
|
|
13
|
-
parameters: unknown[],
|
|
14
|
-
consumers: Array<(d: unknown) => void>
|
|
15
|
-
]>;
|
|
16
|
-
private getFilterSubscriptions;
|
|
17
|
-
private byItem;
|
|
18
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RemoteSubscriptions = void 0;
|
|
4
|
-
const json_js_1 = require("../utils/json.js");
|
|
5
|
-
class RemoteSubscriptions {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.byItem = new Map();
|
|
8
|
-
}
|
|
9
|
-
unsubscribe(itemName, parameters, consumer) {
|
|
10
|
-
const parametersKey = getParametersKey(parameters);
|
|
11
|
-
return this.removeSubscription(itemName, parametersKey, consumer);
|
|
12
|
-
}
|
|
13
|
-
addSubscription(itemName, parameters, consumer) {
|
|
14
|
-
const itemSubscriptions = this.byItem.get(itemName) || { byParameters: new Map() };
|
|
15
|
-
this.byItem.set(itemName, itemSubscriptions);
|
|
16
|
-
const parametersKey = getParametersKey(parameters);
|
|
17
|
-
const parameterSubscriptions = itemSubscriptions.byParameters.get(parametersKey) || {
|
|
18
|
-
parameters,
|
|
19
|
-
cached: null,
|
|
20
|
-
consumers: [],
|
|
21
|
-
queue: [],
|
|
22
|
-
};
|
|
23
|
-
itemSubscriptions.byParameters.set(parametersKey, parameterSubscriptions);
|
|
24
|
-
parameterSubscriptions.consumers.push(consumer);
|
|
25
|
-
}
|
|
26
|
-
pause(itemName, parameters) {
|
|
27
|
-
const filterSubscriptions = this.getFilterSubscriptions(itemName, parameters);
|
|
28
|
-
if (!filterSubscriptions)
|
|
29
|
-
return;
|
|
30
|
-
filterSubscriptions.paused = true;
|
|
31
|
-
}
|
|
32
|
-
unpause(itemName, parameters) {
|
|
33
|
-
const filterSubscriptions = this.getFilterSubscriptions(itemName, parameters);
|
|
34
|
-
if (!filterSubscriptions)
|
|
35
|
-
return;
|
|
36
|
-
filterSubscriptions.paused = false;
|
|
37
|
-
}
|
|
38
|
-
flushQueue(itemName, parameters) {
|
|
39
|
-
const filterSubscriptions = this.getFilterSubscriptions(itemName, parameters);
|
|
40
|
-
if (!filterSubscriptions)
|
|
41
|
-
return;
|
|
42
|
-
filterSubscriptions.queue.forEach((data) => {
|
|
43
|
-
filterSubscriptions.cached = data;
|
|
44
|
-
filterSubscriptions.consumers.forEach((consumer) => {
|
|
45
|
-
consumer(data);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
filterSubscriptions.queue = [];
|
|
49
|
-
}
|
|
50
|
-
emptyQueue(itemName, parameters) {
|
|
51
|
-
const filterSubscriptions = this.getFilterSubscriptions(itemName, parameters);
|
|
52
|
-
if (!filterSubscriptions)
|
|
53
|
-
return;
|
|
54
|
-
filterSubscriptions.queue = [];
|
|
55
|
-
}
|
|
56
|
-
removeSubscription(itemName, parametersKey, consumer) {
|
|
57
|
-
const itemSubscriptions = this.byItem.get(itemName);
|
|
58
|
-
if (!itemSubscriptions)
|
|
59
|
-
return false;
|
|
60
|
-
const filterSubscriptions = itemSubscriptions.byParameters.get(parametersKey);
|
|
61
|
-
if (!filterSubscriptions)
|
|
62
|
-
return false;
|
|
63
|
-
const index = filterSubscriptions.consumers.indexOf(consumer);
|
|
64
|
-
if (index == -1)
|
|
65
|
-
return false;
|
|
66
|
-
filterSubscriptions.consumers.splice(index, 1);
|
|
67
|
-
if (!filterSubscriptions.consumers.length) {
|
|
68
|
-
itemSubscriptions.byParameters.delete(parametersKey);
|
|
69
|
-
if (itemSubscriptions.byParameters.size == 0) {
|
|
70
|
-
this.byItem.delete(itemName);
|
|
71
|
-
}
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
getCached(itemName, parameters) {
|
|
77
|
-
const filterSubscriptions = this.getFilterSubscriptions(itemName, parameters);
|
|
78
|
-
if (!filterSubscriptions)
|
|
79
|
-
return;
|
|
80
|
-
return filterSubscriptions.cached;
|
|
81
|
-
}
|
|
82
|
-
consume(itemName, parameters, data) {
|
|
83
|
-
const filterSubscriptions = this.getFilterSubscriptions(itemName, parameters);
|
|
84
|
-
if (!filterSubscriptions)
|
|
85
|
-
return;
|
|
86
|
-
if (filterSubscriptions.paused) {
|
|
87
|
-
filterSubscriptions.queue.push(data);
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
filterSubscriptions.cached = data;
|
|
91
|
-
filterSubscriptions.consumers.forEach((consumer) => {
|
|
92
|
-
consumer(data);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
getAllSubscriptions() {
|
|
97
|
-
const result = [];
|
|
98
|
-
for (const [itemName, itemSubscriptions] of this.byItem) {
|
|
99
|
-
for (const [, parameterSubscriptions] of itemSubscriptions.byParameters) {
|
|
100
|
-
result.push([itemName, parameterSubscriptions.parameters, parameterSubscriptions.consumers]);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return result;
|
|
104
|
-
}
|
|
105
|
-
getFilterSubscriptions(itemName, parameters) {
|
|
106
|
-
const parametersKey = getParametersKey(parameters);
|
|
107
|
-
const itemSubscriptions = this.byItem.get(itemName);
|
|
108
|
-
if (!itemSubscriptions)
|
|
109
|
-
return;
|
|
110
|
-
const filterSubscriptions = itemSubscriptions.byParameters.get(parametersKey);
|
|
111
|
-
if (!filterSubscriptions)
|
|
112
|
-
return;
|
|
113
|
-
return filterSubscriptions;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
exports.RemoteSubscriptions = RemoteSubscriptions;
|
|
117
|
-
function getParametersKey(parameters) {
|
|
118
|
-
return (0, json_js_1.safeStringify)(parameters);
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=RemoteSubscriptions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSubscriptions.js","sourceRoot":"","sources":["../../src/client/RemoteSubscriptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Services } from "../rpc.js";
|
|
2
|
-
import { ServicesWithSubscriptions } from "./remote.js";
|
|
3
|
-
import { ConsumeServicesOptions, RpcClient } from "./index.js";
|
|
4
|
-
export declare class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
5
|
-
private readonly options;
|
|
6
|
-
constructor(url: string, options: ConsumeServicesOptions);
|
|
7
|
-
readonly clientId: string;
|
|
8
|
-
private readonly httpClient;
|
|
9
|
-
private readonly remoteSubscriptions;
|
|
10
|
-
private readonly connection;
|
|
11
|
-
isConnected(): boolean;
|
|
12
|
-
close(): Promise<void>;
|
|
13
|
-
_allSubscriptions(): [itemName: string, parameters: unknown[], consumers: (d: unknown) => void][];
|
|
14
|
-
_webSocket(): WebSocket | null;
|
|
15
|
-
createRemote(): ServicesWithSubscriptions<S>;
|
|
16
|
-
connect(): Promise<void>;
|
|
17
|
-
private call;
|
|
18
|
-
private subscribe;
|
|
19
|
-
private unsubscribe;
|
|
20
|
-
private resubscribe;
|
|
21
|
-
private invoke;
|
|
22
|
-
}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RpcClientImpl = void 0;
|
|
4
|
-
const rpc_js_1 = require("../rpc.js");
|
|
5
|
-
const HttpClient_js_1 = require("./HttpClient.js");
|
|
6
|
-
const RemoteSubscriptions_js_1 = require("./RemoteSubscriptions.js");
|
|
7
|
-
const WebSocketConnection_js_1 = require("./WebSocketConnection.js");
|
|
8
|
-
const nanoid_1 = require("nanoid");
|
|
9
|
-
const remote_js_1 = require("./remote.js");
|
|
10
|
-
const middleware_js_1 = require("../utils/middleware.js");
|
|
11
|
-
class RpcClientImpl {
|
|
12
|
-
constructor(url, options) {
|
|
13
|
-
this.options = options;
|
|
14
|
-
this.clientId = (0, nanoid_1.nanoid)();
|
|
15
|
-
this.call = (itemName, parameters, callOptions) => {
|
|
16
|
-
return this.invoke(itemName, rpc_js_1.InvocationType.Call, (...parameters) => this.httpClient.call(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
|
|
17
|
-
};
|
|
18
|
-
this.subscribe = async (itemName, parameters, consumer, callOptions) => {
|
|
19
|
-
const cached = this.remoteSubscriptions.getCached(itemName, parameters);
|
|
20
|
-
if (cached !== undefined) {
|
|
21
|
-
consumer(cached);
|
|
22
|
-
}
|
|
23
|
-
// Needs to be awaited b/c resubscribe will make a 2nd request then.
|
|
24
|
-
// Also, server needs the connection to be established before making a subscription
|
|
25
|
-
await this.connection.connect();
|
|
26
|
-
try {
|
|
27
|
-
this.remoteSubscriptions.addSubscription(itemName, parameters, consumer);
|
|
28
|
-
this.remoteSubscriptions.pause(itemName, parameters);
|
|
29
|
-
const data = await this.invoke(itemName, rpc_js_1.InvocationType.Subscribe, (...parameters) => this.httpClient.subscribe(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
|
|
30
|
-
this.remoteSubscriptions.unpause(itemName, parameters);
|
|
31
|
-
this.remoteSubscriptions.consume(itemName, parameters, data);
|
|
32
|
-
this.remoteSubscriptions.flushQueue(itemName, parameters);
|
|
33
|
-
}
|
|
34
|
-
catch (e) {
|
|
35
|
-
this.remoteSubscriptions.unpause(itemName, parameters);
|
|
36
|
-
this.remoteSubscriptions.emptyQueue(itemName, parameters);
|
|
37
|
-
await this.unsubscribe(itemName, parameters, consumer);
|
|
38
|
-
throw e;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
this.unsubscribe = async (itemName, parameters, consumer, callOptions) => {
|
|
42
|
-
const noSubscriptionsLeft = this.remoteSubscriptions.unsubscribe(itemName, parameters, consumer);
|
|
43
|
-
if (noSubscriptionsLeft) {
|
|
44
|
-
await this.invoke(itemName, rpc_js_1.InvocationType.Unsubscribe, (...parameters) => this.httpClient.unsubscribe(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
this.resubscribe = () => {
|
|
48
|
-
for (const [itemName, params, consumers] of this.remoteSubscriptions.getAllSubscriptions()) {
|
|
49
|
-
this.httpClient
|
|
50
|
-
.subscribe(itemName, params, this.options.callTimeout)
|
|
51
|
-
.then((data) => {
|
|
52
|
-
this.remoteSubscriptions.consume(itemName, params, data);
|
|
53
|
-
})
|
|
54
|
-
.catch((e) => {
|
|
55
|
-
for (const consumer of consumers) {
|
|
56
|
-
this.remoteSubscriptions.unsubscribe(itemName, params, consumer);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
this.httpClient = new HttpClient_js_1.HttpClient(url, this.clientId, options.getHeaders);
|
|
62
|
-
this.remoteSubscriptions = new RemoteSubscriptions_js_1.RemoteSubscriptions();
|
|
63
|
-
this.connection = new WebSocketConnection_js_1.WebSocketConnection(options.getSubscriptionsUrl(url), this.clientId, {
|
|
64
|
-
subscriptions: options.subscriptions,
|
|
65
|
-
errorDelayMaxDuration: options.errorDelayMaxDuration,
|
|
66
|
-
reconnectDelay: options.reconnectDelay,
|
|
67
|
-
pingInterval: options.pingInterval,
|
|
68
|
-
}, (itemName, parameters, data) => {
|
|
69
|
-
const ctx = {
|
|
70
|
-
clientId: this.clientId,
|
|
71
|
-
itemName,
|
|
72
|
-
invocationType: rpc_js_1.InvocationType.Update,
|
|
73
|
-
};
|
|
74
|
-
const next = async (p = data) => this.remoteSubscriptions.consume(itemName, parameters, p);
|
|
75
|
-
return (0, middleware_js_1.withMiddlewares)(ctx, this.options.updatesMiddleware, next, data);
|
|
76
|
-
}, () => {
|
|
77
|
-
this.resubscribe();
|
|
78
|
-
options.onConnected();
|
|
79
|
-
}, () => {
|
|
80
|
-
options.onDisconnected();
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
isConnected() {
|
|
84
|
-
return this.connection.isConnected();
|
|
85
|
-
}
|
|
86
|
-
close() {
|
|
87
|
-
return this.connection.close();
|
|
88
|
-
}
|
|
89
|
-
_allSubscriptions() {
|
|
90
|
-
const result = [];
|
|
91
|
-
for (const [itemName, parameters, consumers,] of this.remoteSubscriptions.getAllSubscriptions()) {
|
|
92
|
-
for (const consumer of consumers) {
|
|
93
|
-
result.push([itemName, parameters, consumer]);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return result;
|
|
97
|
-
}
|
|
98
|
-
_webSocket() {
|
|
99
|
-
return this.connection._webSocket();
|
|
100
|
-
}
|
|
101
|
-
createRemote() {
|
|
102
|
-
return (0, remote_js_1.createRemote)({
|
|
103
|
-
call: this.call,
|
|
104
|
-
subscribe: this.subscribe,
|
|
105
|
-
unsubscribe: this.unsubscribe,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
async connect() {
|
|
109
|
-
await this.connection.connect();
|
|
110
|
-
}
|
|
111
|
-
invoke(itemName, invocationType, next, parameters) {
|
|
112
|
-
const ctx = {
|
|
113
|
-
clientId: this.clientId,
|
|
114
|
-
itemName,
|
|
115
|
-
invocationType: invocationType,
|
|
116
|
-
};
|
|
117
|
-
return (0, middleware_js_1.withMiddlewares)(ctx, this.options.middleware, next, ...parameters);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
exports.RpcClientImpl = RpcClientImpl;
|
|
121
|
-
//# sourceMappingURL=RpcClientImpl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RpcClientImpl.js","sourceRoot":"","sources":["../../src/client/RpcClientImpl.ts"],"names":[],"mappings":"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"}
|