@push-rpc/next 2.0.10 → 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.
Files changed (85) hide show
  1. package/README.md +216 -22
  2. package/example/client.ts +1 -1
  3. package/example/server.ts +2 -2
  4. package/package-lock.json +1291 -0
  5. package/package.json +1 -1
  6. package/src/client/HttpClient.ts +1 -20
  7. package/src/client/RpcClientImpl.ts +18 -6
  8. package/src/client/WebSocketConnection.ts +8 -27
  9. package/src/client/index.ts +2 -0
  10. package/src/index.ts +1 -0
  11. package/src/rpc.ts +1 -0
  12. package/src/server/RpcServerImpl.ts +12 -8
  13. package/src/server/index.ts +2 -0
  14. package/src/utils/middleware.ts +7 -2
  15. package/tests/connection.ts +2 -87
  16. package/tests/middleware.ts +129 -1
  17. package/tests/testUtils.ts +25 -0
  18. package/dist/client/HttpClient.d.ts +0 -13
  19. package/dist/client/HttpClient.js +0 -98
  20. package/dist/client/HttpClient.js.map +0 -1
  21. package/dist/client/RemoteSubscriptions.d.ts +0 -18
  22. package/dist/client/RemoteSubscriptions.js +0 -120
  23. package/dist/client/RemoteSubscriptions.js.map +0 -1
  24. package/dist/client/RpcClientImpl.d.ts +0 -23
  25. package/dist/client/RpcClientImpl.js +0 -117
  26. package/dist/client/RpcClientImpl.js.map +0 -1
  27. package/dist/client/WebSocketConnection.d.ts +0 -38
  28. package/dist/client/WebSocketConnection.js +0 -180
  29. package/dist/client/WebSocketConnection.js.map +0 -1
  30. package/dist/client/index.d.ts +0 -28
  31. package/dist/client/index.js +0 -38
  32. package/dist/client/index.js.map +0 -1
  33. package/dist/client/remote.d.ts +0 -14
  34. package/dist/client/remote.js +0 -66
  35. package/dist/client/remote.js.map +0 -1
  36. package/dist/index.d.ts +0 -12
  37. package/dist/index.js.map +0 -1
  38. package/dist/logger.d.ts +0 -8
  39. package/dist/logger.js +0 -9
  40. package/dist/logger.js.map +0 -1
  41. package/dist/rpc.d.ts +0 -36
  42. package/dist/rpc.js +0 -32
  43. package/dist/rpc.js.map +0 -1
  44. package/dist/server/ConnectionsServer.d.ts +0 -13
  45. package/dist/server/ConnectionsServer.js +0 -72
  46. package/dist/server/ConnectionsServer.js.map +0 -1
  47. package/dist/server/LocalSubscriptions.d.ts +0 -12
  48. package/dist/server/LocalSubscriptions.js +0 -113
  49. package/dist/server/LocalSubscriptions.js.map +0 -1
  50. package/dist/server/RpcServerImpl.d.ts +0 -24
  51. package/dist/server/RpcServerImpl.js +0 -195
  52. package/dist/server/RpcServerImpl.js.map +0 -1
  53. package/dist/server/http.d.ts +0 -9
  54. package/dist/server/http.js +0 -89
  55. package/dist/server/http.js.map +0 -1
  56. package/dist/server/index.d.ts +0 -30
  57. package/dist/server/index.js +0 -33
  58. package/dist/server/index.js.map +0 -1
  59. package/dist/server/local.d.ts +0 -15
  60. package/dist/server/local.js +0 -46
  61. package/dist/server/local.js.map +0 -1
  62. package/dist/utils/cookies.d.ts +0 -7
  63. package/dist/utils/cookies.js +0 -31
  64. package/dist/utils/cookies.js.map +0 -1
  65. package/dist/utils/env.d.ts +0 -6
  66. package/dist/utils/env.js +0 -22
  67. package/dist/utils/env.js.map +0 -1
  68. package/dist/utils/json.d.ts +0 -2
  69. package/dist/utils/json.js +0 -34
  70. package/dist/utils/json.js.map +0 -1
  71. package/dist/utils/middleware.d.ts +0 -2
  72. package/dist/utils/middleware.js +0 -31
  73. package/dist/utils/middleware.js.map +0 -1
  74. package/dist/utils/promises.d.ts +0 -5
  75. package/dist/utils/promises.js +0 -29
  76. package/dist/utils/promises.js.map +0 -1
  77. package/dist/utils/server.d.ts +0 -5
  78. package/dist/utils/server.js +0 -48
  79. package/dist/utils/server.js.map +0 -1
  80. package/dist/utils/throttle.d.ts +0 -4
  81. package/dist/utils/throttle.js +0 -40
  82. package/dist/utils/throttle.js.map +0 -1
  83. package/dist/utils/types.d.ts +0 -1
  84. package/dist/utils/types.js +0 -3
  85. package/dist/utils/types.js.map +0 -1
@@ -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,23 +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
- private readonly cookies;
12
- isConnected(): boolean;
13
- close(): Promise<void>;
14
- _allSubscriptions(): [itemName: string, parameters: unknown[], consumers: (d: unknown) => void][];
15
- _webSocket(): WebSocket | null;
16
- createRemote(): ServicesWithSubscriptions<S>;
17
- connect(): Promise<void>;
18
- private call;
19
- private subscribe;
20
- private unsubscribe;
21
- private resubscribe;
22
- private invoke;
23
- }
@@ -1,117 +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
- const cookies_js_1 = require("../utils/cookies.js");
12
- class RpcClientImpl {
13
- constructor(url, options) {
14
- this.options = options;
15
- this.clientId = (0, nanoid_1.nanoid)();
16
- this.cookies = new cookies_js_1.ClientCookies();
17
- this.call = (itemName, parameters, callOptions) => {
18
- return this.invoke(itemName, rpc_js_1.InvocationType.Call, (...parameters) => this.httpClient.call(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
19
- };
20
- this.subscribe = async (itemName, parameters, consumer, callOptions) => {
21
- const cached = this.remoteSubscriptions.getCached(itemName, parameters);
22
- if (cached !== undefined) {
23
- consumer(cached);
24
- }
25
- // Needs to be awaited b/c resubscribe will make a 2nd request then.
26
- // Also, server needs the connection to be established before making a subscription
27
- await this.connection.connect();
28
- try {
29
- this.remoteSubscriptions.addSubscription(itemName, parameters, consumer);
30
- this.remoteSubscriptions.pause(itemName, parameters);
31
- const data = await this.invoke(itemName, rpc_js_1.InvocationType.Subscribe, (...parameters) => this.httpClient.subscribe(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
32
- this.remoteSubscriptions.unpause(itemName, parameters);
33
- this.remoteSubscriptions.consume(itemName, parameters, data);
34
- this.remoteSubscriptions.flushQueue(itemName, parameters);
35
- }
36
- catch (e) {
37
- this.remoteSubscriptions.unpause(itemName, parameters);
38
- this.remoteSubscriptions.emptyQueue(itemName, parameters);
39
- await this.unsubscribe(itemName, parameters, consumer);
40
- throw e;
41
- }
42
- };
43
- this.unsubscribe = async (itemName, parameters, consumer, callOptions) => {
44
- const noSubscriptionsLeft = this.remoteSubscriptions.unsubscribe(itemName, parameters, consumer);
45
- if (noSubscriptionsLeft) {
46
- await this.invoke(itemName, rpc_js_1.InvocationType.Unsubscribe, (...parameters) => this.httpClient.unsubscribe(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
47
- }
48
- };
49
- this.resubscribe = () => {
50
- for (const [itemName, params, consumers] of this.remoteSubscriptions.getAllSubscriptions()) {
51
- this.httpClient
52
- .subscribe(itemName, params, this.options.callTimeout)
53
- .then((data) => {
54
- this.remoteSubscriptions.consume(itemName, params, data);
55
- })
56
- .catch((e) => {
57
- for (const consumer of consumers) {
58
- this.remoteSubscriptions.unsubscribe(itemName, params, consumer);
59
- }
60
- });
61
- }
62
- };
63
- this.httpClient = new HttpClient_js_1.HttpClient(url, this.clientId, options.getHeaders, this.cookies);
64
- this.remoteSubscriptions = new RemoteSubscriptions_js_1.RemoteSubscriptions();
65
- this.connection = new WebSocketConnection_js_1.WebSocketConnection(options.getSubscriptionsUrl(url), this.clientId, this.cookies, {
66
- subscriptions: options.subscriptions,
67
- errorDelayMaxDuration: options.errorDelayMaxDuration,
68
- reconnectDelay: options.reconnectDelay,
69
- pingInterval: options.pingInterval,
70
- }, (itemName, parameters, data) => {
71
- this.remoteSubscriptions.consume(itemName, parameters, data);
72
- }, () => {
73
- this.resubscribe();
74
- options.onConnected();
75
- }, () => {
76
- options.onDisconnected();
77
- });
78
- }
79
- isConnected() {
80
- return this.connection.isConnected();
81
- }
82
- close() {
83
- return this.connection.close();
84
- }
85
- _allSubscriptions() {
86
- const result = [];
87
- for (const [itemName, parameters, consumers,] of this.remoteSubscriptions.getAllSubscriptions()) {
88
- for (const consumer of consumers) {
89
- result.push([itemName, parameters, consumer]);
90
- }
91
- }
92
- return result;
93
- }
94
- _webSocket() {
95
- return this.connection._webSocket();
96
- }
97
- createRemote() {
98
- return (0, remote_js_1.createRemote)({
99
- call: this.call,
100
- subscribe: this.subscribe,
101
- unsubscribe: this.unsubscribe,
102
- });
103
- }
104
- async connect() {
105
- await this.connection.connect();
106
- }
107
- invoke(itemName, invocationType, next, parameters) {
108
- const ctx = {
109
- clientId: this.clientId,
110
- itemName,
111
- invocationType: invocationType,
112
- };
113
- return (0, middleware_js_1.withMiddlewares)(ctx, this.options.middleware, next, ...parameters);
114
- }
115
- }
116
- exports.RpcClientImpl = RpcClientImpl;
117
- //# 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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"}
@@ -1,38 +0,0 @@
1
- import { ClientCookies } from "../utils/cookies.js";
2
- export declare class WebSocketConnection {
3
- private readonly url;
4
- private readonly clientId;
5
- private readonly cookies;
6
- private readonly options;
7
- private readonly consume;
8
- private readonly onConnected;
9
- private readonly onDisconnected;
10
- constructor(url: string, clientId: string, cookies: ClientCookies, options: {
11
- subscriptions: boolean;
12
- reconnectDelay: number;
13
- errorDelayMaxDuration: number;
14
- pingInterval: number | null;
15
- }, consume: (itemName: string, parameters: unknown[], data: unknown) => void, onConnected: () => void, onDisconnected: () => void);
16
- private resolveClose;
17
- close(): Promise<void>;
18
- private waitConnectionPromise;
19
- /**
20
- * Connect to the server, on each disconnect try to disconnect.
21
- * Resolves at next successful connect. Reconnection loop continues even after resolution
22
- * Never rejects
23
- */
24
- connect(): Promise<void>;
25
- isConnected(): boolean;
26
- /**
27
- * Connect this to server
28
- *
29
- * Resolves on successful connection, rejects on connection error or connection timeout
30
- */
31
- private establishConnection;
32
- private socket;
33
- private disconnectedMark;
34
- private pingTimeout;
35
- private heartbeat;
36
- private receiveSocketMessage;
37
- _webSocket(): WebSocket | null;
38
- }
@@ -1,180 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebSocketConnection = void 0;
4
- const logger_js_1 = require("../logger.js");
5
- const json_js_1 = require("../utils/json.js");
6
- const promises_js_1 = require("../utils/promises.js");
7
- const env_js_1 = require("../utils/env.js");
8
- class WebSocketConnection {
9
- constructor(url, clientId, cookies, options, consume, onConnected, onDisconnected) {
10
- this.url = url;
11
- this.clientId = clientId;
12
- this.cookies = cookies;
13
- this.options = options;
14
- this.consume = consume;
15
- this.onConnected = onConnected;
16
- this.onDisconnected = onDisconnected;
17
- this.resolveClose = () => { };
18
- this.socket = null;
19
- this.disconnectedMark = false;
20
- this.pingTimeout = null;
21
- this.clientId = clientId;
22
- }
23
- async close() {
24
- this.disconnectedMark = true;
25
- if (this.socket) {
26
- this.socket.close();
27
- return new Promise((resolve, reject) => {
28
- this.resolveClose = resolve;
29
- });
30
- }
31
- }
32
- /**
33
- * Connect to the server, on each disconnect try to disconnect.
34
- * Resolves at next successful connect. Reconnection loop continues even after resolution
35
- * Never rejects
36
- */
37
- connect() {
38
- // no subscriptions support, no need to connect
39
- if (!this.options.subscriptions) {
40
- return Promise.resolve();
41
- }
42
- // already started connecting
43
- if (this.waitConnectionPromise)
44
- return this.waitConnectionPromise;
45
- // start connection process
46
- let resolveConnectionPromise;
47
- let errorDelay = 0;
48
- this.waitConnectionPromise = new Promise(async (resolve) => {
49
- resolveConnectionPromise = resolve;
50
- while (true) {
51
- // connect, and wait for ...
52
- await new Promise((resolve) => {
53
- const connectionPromise = this.establishConnection(() => {
54
- // 1. ...disconnected
55
- // recreate promise so new clients will wait for new connection
56
- this.waitConnectionPromise = new Promise((resolve) => (resolveConnectionPromise = resolve));
57
- resolve();
58
- });
59
- connectionPromise.then(() => {
60
- // first reconnect after successful connection is done without delay
61
- errorDelay = 0;
62
- resolveConnectionPromise();
63
- }, (e) => {
64
- logger_js_1.log.warn("Unable to connect WS", e);
65
- // 2. ... unable to establish connection
66
- resolve();
67
- });
68
- });
69
- // disconnected while connecting?
70
- if (this.disconnectedMark) {
71
- return;
72
- }
73
- await (0, promises_js_1.adelay)(this.options.reconnectDelay + errorDelay);
74
- // disconnected while waiting?
75
- if (this.disconnectedMark) {
76
- return;
77
- }
78
- errorDelay = Math.round(Math.random() * this.options.errorDelayMaxDuration);
79
- }
80
- });
81
- return this.waitConnectionPromise;
82
- }
83
- isConnected() {
84
- return this.socket !== null;
85
- }
86
- /**
87
- * Connect this to server
88
- *
89
- * Resolves on successful connection, rejects on connection error or connection timeout
90
- */
91
- async establishConnection(onDisconnected) {
92
- return new Promise(async (resolve, reject) => {
93
- try {
94
- let socket;
95
- if ([env_js_1.Environment.ReactNative, env_js_1.Environment.Node].includes(env_js_1.environment)) {
96
- // use RN WS or node-ws headers extensions to set cookie
97
- let options = undefined;
98
- const cookie = this.cookies.getCookieString();
99
- if (cookie) {
100
- options = {
101
- headers: {
102
- Cookie: cookie,
103
- },
104
- };
105
- }
106
- socket = new WebSocket(this.url, this.clientId, options);
107
- }
108
- else {
109
- // rely on browser cookie handling
110
- socket = new WebSocket(this.url, this.clientId);
111
- }
112
- let connected = false;
113
- socket.addEventListener("open", () => {
114
- this.socket = socket;
115
- connected = true;
116
- resolve();
117
- this.heartbeat();
118
- this.onConnected();
119
- });
120
- socket.addEventListener("ping", () => {
121
- this.heartbeat();
122
- });
123
- socket.addEventListener("close", () => {
124
- this.socket = null;
125
- if (connected) {
126
- onDisconnected();
127
- this.onDisconnected();
128
- }
129
- if (this.pingTimeout) {
130
- clearTimeout(this.pingTimeout);
131
- }
132
- this.resolveClose();
133
- });
134
- socket.addEventListener("error", (e) => {
135
- if (!connected) {
136
- reject(e);
137
- }
138
- try {
139
- socket.close();
140
- }
141
- catch (e) {
142
- // ignore
143
- }
144
- });
145
- socket.addEventListener("message", (message) => {
146
- this.receiveSocketMessage(message.data);
147
- });
148
- }
149
- catch (e) {
150
- reject(e);
151
- }
152
- });
153
- }
154
- heartbeat() {
155
- if (this.pingTimeout) {
156
- clearTimeout(this.pingTimeout);
157
- }
158
- if (this.options.pingInterval) {
159
- this.pingTimeout = setTimeout(() => {
160
- this.socket?.close();
161
- }, this.options.pingInterval * 1.5);
162
- }
163
- }
164
- async receiveSocketMessage(rawMessage) {
165
- try {
166
- const msg = rawMessage.toString();
167
- const [itemName, data, ...parameters] = (0, json_js_1.safeParseJson)(msg);
168
- this.consume(itemName, parameters, data);
169
- }
170
- catch (e) {
171
- logger_js_1.log.warn("Invalid message received", e);
172
- }
173
- }
174
- // test-only
175
- _webSocket() {
176
- return this.socket;
177
- }
178
- }
179
- exports.WebSocketConnection = WebSocketConnection;
180
- //# sourceMappingURL=WebSocketConnection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebSocketConnection.js","sourceRoot":"","sources":["../../src/client/WebSocketConnection.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import { RpcContext, Services } from "../rpc.js";
2
- import { ServicesWithSubscriptions } from "./remote.js";
3
- import { Middleware } from "../utils/middleware.js";
4
- export type RpcClient = {
5
- readonly clientId: string;
6
- connect(): Promise<void>;
7
- isConnected(): boolean;
8
- close(): Promise<void>;
9
- _allSubscriptions(): Array<any[]>;
10
- _webSocket(): WebSocket | null;
11
- };
12
- export type ConsumeServicesOptions = {
13
- callTimeout: number;
14
- reconnectDelay: number;
15
- errorDelayMaxDuration: number;
16
- pingInterval: number | null;
17
- subscriptions: boolean;
18
- middleware: Middleware<RpcContext>[];
19
- connectOnCreate: boolean;
20
- onConnected: () => void;
21
- onDisconnected: () => void;
22
- getHeaders: () => Promise<Record<string, string>>;
23
- getSubscriptionsUrl(url: string): string;
24
- };
25
- export declare function consumeServices<S extends Services<S>>(url: string, overrideOptions?: Partial<ConsumeServicesOptions>): Promise<{
26
- client: RpcClient;
27
- remote: ServicesWithSubscriptions<S>;
28
- }>;
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.consumeServices = void 0;
4
- const RpcClientImpl_js_1 = require("./RpcClientImpl.js");
5
- async function consumeServices(url, overrideOptions = {}) {
6
- if (url.endsWith("/")) {
7
- throw new Error("URL must not end with /");
8
- }
9
- const options = {
10
- ...defaultOptions,
11
- ...overrideOptions,
12
- };
13
- const client = new RpcClientImpl_js_1.RpcClientImpl(url, options);
14
- if (options.connectOnCreate) {
15
- await client.connect();
16
- }
17
- return {
18
- client,
19
- remote: client.createRemote(),
20
- };
21
- }
22
- exports.consumeServices = consumeServices;
23
- const defaultOptions = {
24
- callTimeout: 5 * 1000,
25
- reconnectDelay: 0,
26
- errorDelayMaxDuration: 15 * 1000,
27
- pingInterval: null, // if set, should be in-sync with server, ie 30 * 1000
28
- subscriptions: true,
29
- middleware: [],
30
- connectOnCreate: false,
31
- onConnected: () => { },
32
- onDisconnected: () => { },
33
- getHeaders: async () => ({}),
34
- getSubscriptionsUrl(url) {
35
- return url.replace(/^https(.*)/, "wss$1").replace(/^http(.*)/, "ws$1");
36
- },
37
- };
38
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;AAEA,yDAAgD;AA6BzC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,kBAAmD,EAAE;IAKrD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAG,cAAc;QACjB,GAAG,eAAe;KACnB,CAAA;IAED,MAAM,MAAM,GAAG,IAAI,gCAAa,CAAI,GAAG,EAAE,OAAO,CAAC,CAAA;IAEjD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IACxB,CAAC;IAED,OAAO;QACL,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE;KAC9B,CAAA;AACH,CAAC;AA1BD,0CA0BC;AAED,MAAM,cAAc,GAA2B;IAC7C,WAAW,EAAE,CAAC,GAAG,IAAI;IACrB,cAAc,EAAE,CAAC;IACjB,qBAAqB,EAAE,EAAE,GAAG,IAAI;IAChC,YAAY,EAAE,IAAI,EAAE,sDAAsD;IAC1E,aAAa,EAAE,IAAI;IACnB,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,KAAK;IACtB,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;IACrB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;IACxB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAE5B,mBAAmB,CAAC,GAAW;QAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACxE,CAAC;CACF,CAAA"}
@@ -1,14 +0,0 @@
1
- import { CallOptions, Consumer, RemoteFunction, Services } from "../rpc.js";
2
- export declare function createRemote<S extends Services<S>>(hooks: RemoteHooks, name?: string): ServicesWithSubscriptions<S>;
3
- export type RemoteHooks = {
4
- call(itemName: string, parameters: unknown[], callOptions?: CallOptions): Promise<unknown>;
5
- subscribe(itemName: string, parameters: unknown[], consumer: (d: unknown) => void, callOptions?: CallOptions): Promise<void>;
6
- unsubscribe(itemName: string, parameters: unknown[], consumer: (d: unknown) => void, callOptions?: CallOptions): Promise<void>;
7
- };
8
- export type AddParameters<TFunction extends (...args: any) => any, TParameters extends [...args: any]> = (...args: [...Parameters<TFunction>, ...TParameters]) => ReturnType<TFunction>;
9
- export type ServicesWithSubscriptions<T extends Services<T>> = {
10
- [K in keyof T]: T[K] extends RemoteFunction ? AddParameters<T[K], [CallOptions?]> & {
11
- subscribe(consumer: Consumer<T[K]>, ...parameters: [...Parameters<T[K]>, CallOptions?]): Promise<void>;
12
- unsubscribe(consumer: Consumer<T[K]>, ...parameters: [...Parameters<T[K]>, CallOptions?]): Promise<void>;
13
- } : T[K] extends object ? ServicesWithSubscriptions<T[K]> : never;
14
- };