@push-rpc/next 2.0.10 → 2.0.11
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 +5 -5
- package/dist/client/HttpClient.d.ts +1 -3
- package/dist/client/HttpClient.js +1 -15
- package/dist/client/HttpClient.js.map +1 -1
- package/dist/client/RpcClientImpl.d.ts +0 -1
- package/dist/client/RpcClientImpl.js +9 -5
- package/dist/client/RpcClientImpl.js.map +1 -1
- package/dist/client/WebSocketConnection.d.ts +1 -3
- package/dist/client/WebSocketConnection.js +2 -21
- package/dist/client/WebSocketConnection.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.js +1 -0
- package/dist/rpc.js.map +1 -1
- package/dist/server/RpcServerImpl.js +10 -5
- package/dist/server/RpcServerImpl.js.map +1 -1
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/HttpClient.ts +1 -20
- package/src/client/RpcClientImpl.ts +9 -5
- package/src/client/WebSocketConnection.ts +1 -24
- package/src/client/index.ts +2 -0
- package/src/index.ts +1 -0
- package/src/rpc.ts +1 -0
- package/src/server/RpcServerImpl.ts +12 -8
- package/src/server/index.ts +2 -0
- package/tests/connection.ts +2 -87
- package/tests/middleware.ts +31 -0
- package/tests/testUtils.ts +25 -0
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ contain only JSON data, to allow copying. Context can be modified in middlewares
|
|
|
20
20
|
JSON-only.
|
|
21
21
|
|
|
22
22
|
**Middlewares**. Middlewares are used to intercept client and server requests. Both calls and subscriptions can be
|
|
23
|
-
intercepted
|
|
23
|
+
intercepted. Middlewares can be attached on both client and server side. Middlewares receive context as the last
|
|
24
24
|
arguments in the invocation. Middleware can modify context.
|
|
25
25
|
|
|
26
26
|
**Throttling**. Used to limit number of notifications from the remote functions. With throttling enabled, not all
|
|
@@ -42,7 +42,7 @@ triggers.
|
|
|
42
42
|
- Supports compressed HTTP requests.
|
|
43
43
|
- Server runs on Node.JS, client runs in the Node.JS/Browser/ReactNative. For RN some extra setup is required (
|
|
44
44
|
document). Bun/Deno should also work, but not officially supported.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
|
|
46
|
+
# Limitations
|
|
47
|
+
|
|
48
|
+
- Cookies are not been sent during HTTP & WS requests.
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { ClientCookies } from "../utils/cookies.js";
|
|
2
1
|
export declare class HttpClient {
|
|
3
2
|
private url;
|
|
4
3
|
private clientId;
|
|
5
4
|
private getHeaders;
|
|
6
|
-
|
|
7
|
-
constructor(url: string, clientId: string, getHeaders: () => Promise<Record<string, string>>, cookies: ClientCookies);
|
|
5
|
+
constructor(url: string, clientId: string, getHeaders: () => Promise<Record<string, string>>);
|
|
8
6
|
call(itemName: string, params: unknown[], callTimeout: number): Promise<unknown>;
|
|
9
7
|
subscribe(itemName: string, params: unknown[], callTimeout: number): Promise<unknown>;
|
|
10
8
|
unsubscribe(itemName: string, params: unknown[], callTimeout: number): Promise<void>;
|
|
@@ -3,13 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.HttpClient = void 0;
|
|
4
4
|
const rpc_js_1 = require("../rpc.js");
|
|
5
5
|
const json_js_1 = require("../utils/json.js");
|
|
6
|
-
const env_js_1 = require("../utils/env.js");
|
|
7
6
|
class HttpClient {
|
|
8
|
-
constructor(url, clientId, getHeaders
|
|
7
|
+
constructor(url, clientId, getHeaders) {
|
|
9
8
|
this.url = url;
|
|
10
9
|
this.clientId = clientId;
|
|
11
10
|
this.getHeaders = getHeaders;
|
|
12
|
-
this.cookies = cookies;
|
|
13
11
|
}
|
|
14
12
|
async call(itemName, params, callTimeout) {
|
|
15
13
|
return this.httpRequest("POST", itemName, params, callTimeout, await this.getHeaders());
|
|
@@ -27,12 +25,6 @@ class HttpClient {
|
|
|
27
25
|
const itemUrl = this.getItemUrl(itemName);
|
|
28
26
|
try {
|
|
29
27
|
const { signal, finished } = timeoutSignal(callTimeout);
|
|
30
|
-
if (env_js_1.environment != env_js_1.Environment.Browser) {
|
|
31
|
-
const cookie = this.cookies.getCookieString();
|
|
32
|
-
if (cookie) {
|
|
33
|
-
headers["Cookie"] = cookie;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
28
|
const response = await fetch(itemUrl, {
|
|
37
29
|
method,
|
|
38
30
|
headers: {
|
|
@@ -44,12 +36,6 @@ class HttpClient {
|
|
|
44
36
|
signal,
|
|
45
37
|
});
|
|
46
38
|
finished();
|
|
47
|
-
if (env_js_1.environment != env_js_1.Environment.Browser) {
|
|
48
|
-
const cookie = response.headers.get("set-cookie");
|
|
49
|
-
if (cookie) {
|
|
50
|
-
this.cookies.updateCookies(cookie.split(","));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
39
|
if (response.status == 204) {
|
|
54
40
|
return;
|
|
55
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":";;;AAAA,sCAAqD;AACrD,8CAA6D;AAE7D,
|
|
1
|
+
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@ export declare class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
8
8
|
private readonly httpClient;
|
|
9
9
|
private readonly remoteSubscriptions;
|
|
10
10
|
private readonly connection;
|
|
11
|
-
private readonly cookies;
|
|
12
11
|
isConnected(): boolean;
|
|
13
12
|
close(): Promise<void>;
|
|
14
13
|
_allSubscriptions(): [itemName: string, parameters: unknown[], consumers: (d: unknown) => void][];
|
|
@@ -8,12 +8,10 @@ const WebSocketConnection_js_1 = require("./WebSocketConnection.js");
|
|
|
8
8
|
const nanoid_1 = require("nanoid");
|
|
9
9
|
const remote_js_1 = require("./remote.js");
|
|
10
10
|
const middleware_js_1 = require("../utils/middleware.js");
|
|
11
|
-
const cookies_js_1 = require("../utils/cookies.js");
|
|
12
11
|
class RpcClientImpl {
|
|
13
12
|
constructor(url, options) {
|
|
14
13
|
this.options = options;
|
|
15
14
|
this.clientId = (0, nanoid_1.nanoid)();
|
|
16
|
-
this.cookies = new cookies_js_1.ClientCookies();
|
|
17
15
|
this.call = (itemName, parameters, callOptions) => {
|
|
18
16
|
return this.invoke(itemName, rpc_js_1.InvocationType.Call, (...parameters) => this.httpClient.call(itemName, parameters, callOptions?.timeout ?? this.options.callTimeout), parameters);
|
|
19
17
|
};
|
|
@@ -60,15 +58,21 @@ class RpcClientImpl {
|
|
|
60
58
|
});
|
|
61
59
|
}
|
|
62
60
|
};
|
|
63
|
-
this.httpClient = new HttpClient_js_1.HttpClient(url, this.clientId, options.getHeaders
|
|
61
|
+
this.httpClient = new HttpClient_js_1.HttpClient(url, this.clientId, options.getHeaders);
|
|
64
62
|
this.remoteSubscriptions = new RemoteSubscriptions_js_1.RemoteSubscriptions();
|
|
65
|
-
this.connection = new WebSocketConnection_js_1.WebSocketConnection(options.getSubscriptionsUrl(url), this.clientId,
|
|
63
|
+
this.connection = new WebSocketConnection_js_1.WebSocketConnection(options.getSubscriptionsUrl(url), this.clientId, {
|
|
66
64
|
subscriptions: options.subscriptions,
|
|
67
65
|
errorDelayMaxDuration: options.errorDelayMaxDuration,
|
|
68
66
|
reconnectDelay: options.reconnectDelay,
|
|
69
67
|
pingInterval: options.pingInterval,
|
|
70
68
|
}, (itemName, parameters, data) => {
|
|
71
|
-
|
|
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);
|
|
72
76
|
}, () => {
|
|
73
77
|
this.resubscribe();
|
|
74
78
|
options.onConnected();
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"RpcClientImpl.js","sourceRoot":"","sources":["../../src/client/RpcClientImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { ClientCookies } from "../utils/cookies.js";
|
|
2
1
|
export declare class WebSocketConnection {
|
|
3
2
|
private readonly url;
|
|
4
3
|
private readonly clientId;
|
|
5
|
-
private readonly cookies;
|
|
6
4
|
private readonly options;
|
|
7
5
|
private readonly consume;
|
|
8
6
|
private readonly onConnected;
|
|
9
7
|
private readonly onDisconnected;
|
|
10
|
-
constructor(url: string, clientId: string,
|
|
8
|
+
constructor(url: string, clientId: string, options: {
|
|
11
9
|
subscriptions: boolean;
|
|
12
10
|
reconnectDelay: number;
|
|
13
11
|
errorDelayMaxDuration: number;
|
|
@@ -4,12 +4,10 @@ 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");
|
|
7
|
-
const env_js_1 = require("../utils/env.js");
|
|
8
7
|
class WebSocketConnection {
|
|
9
|
-
constructor(url, clientId,
|
|
8
|
+
constructor(url, clientId, options, consume, onConnected, onDisconnected) {
|
|
10
9
|
this.url = url;
|
|
11
10
|
this.clientId = clientId;
|
|
12
|
-
this.cookies = cookies;
|
|
13
11
|
this.options = options;
|
|
14
12
|
this.consume = consume;
|
|
15
13
|
this.onConnected = onConnected;
|
|
@@ -91,24 +89,7 @@ class WebSocketConnection {
|
|
|
91
89
|
async establishConnection(onDisconnected) {
|
|
92
90
|
return new Promise(async (resolve, reject) => {
|
|
93
91
|
try {
|
|
94
|
-
|
|
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
|
-
}
|
|
92
|
+
const socket = new WebSocket(this.url, this.clientId);
|
|
112
93
|
let connected = false;
|
|
113
94
|
socket.addEventListener("open", () => {
|
|
114
95
|
this.socket = socket;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketConnection.js","sourceRoot":"","sources":["../../src/client/WebSocketConnection.ts"],"names":[],"mappings":";;;AAAA,4CAAgC;AAChC,8CAA8C;AAC9C,sDAA2C;
|
|
1
|
+
{"version":3,"file":"WebSocketConnection.js","sourceRoot":"","sources":["../../src/client/WebSocketConnection.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export type ConsumeServicesOptions = {
|
|
|
16
16
|
pingInterval: number | null;
|
|
17
17
|
subscriptions: boolean;
|
|
18
18
|
middleware: Middleware<RpcContext>[];
|
|
19
|
+
updatesMiddleware: Middleware<RpcContext>[];
|
|
19
20
|
connectOnCreate: boolean;
|
|
20
21
|
onConnected: () => void;
|
|
21
22
|
onDisconnected: () => void;
|
package/dist/client/index.js
CHANGED
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;AAEA,yDAAgD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;AAEA,yDAAgD;AA8BzC,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,iBAAiB,EAAE,EAAE;IACrB,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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { RpcError, RpcErrors, CallOptions } from "./rpc.js";
|
|
|
3
3
|
export type { Middleware } from "./utils/middleware.js";
|
|
4
4
|
export { withMiddlewares } from "./utils/middleware.js";
|
|
5
5
|
export type { RpcServer, PublishServicesOptions } from "./server/index.js";
|
|
6
|
+
export type { HttpServerHooks } from "./server/http.js";
|
|
6
7
|
export { publishServices } from "./server/index.js";
|
|
7
8
|
export type { ServicesWithTriggers } from "./server/local.js";
|
|
8
9
|
export type { RpcClient, ConsumeServicesOptions } from "./client/index.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,mCAAyD;AAAjD,kGAAA,QAAQ,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,qGAAA,WAAW,OAAA;AAGxC,uDAAqD;AAA7C,gHAAA,eAAe,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,mCAAyD;AAAjD,kGAAA,QAAQ,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,qGAAA,WAAW,OAAA;AAGxC,uDAAqD;AAA7C,gHAAA,eAAe,OAAA;AAIvB,8CAAiD;AAAzC,2GAAA,eAAe,OAAA;AAKvB,8CAAiD;AAAzC,2GAAA,eAAe,OAAA;AAIvB,yCAA0C;AAAlC,gGAAA,GAAG,OAAA;AAAE,sGAAA,SAAS,OAAA;AACtB,2CAA4D;AAApD,wGAAA,aAAa,OAAA;AAAE,wGAAA,aAAa,OAAA"}
|
package/dist/rpc.d.ts
CHANGED
package/dist/rpc.js
CHANGED
|
@@ -27,6 +27,7 @@ var InvocationType;
|
|
|
27
27
|
InvocationType["Call"] = "Call";
|
|
28
28
|
InvocationType["Subscribe"] = "Subscribe";
|
|
29
29
|
InvocationType["Unsubscribe"] = "Unsubscribe";
|
|
30
|
+
InvocationType["Update"] = "Update";
|
|
30
31
|
InvocationType["Trigger"] = "Trigger";
|
|
31
32
|
})(InvocationType || (exports.InvocationType = InvocationType = {}));
|
|
32
33
|
//# sourceMappingURL=rpc.js.map
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":";;;AASA,MAAa,QAAS,SAAQ,KAAK;IACjC,YACkB,IAAY,EAC5B,OAAgB;QAEhB,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAQ;IAI9B,CAAC;CACF;AAPD,4BAOC;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,mDAAc,CAAA;IACd,iDAAa,CAAA;AACf,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,MAAa,WAAW;IACtB,YAAY,OAA0B;QAKtB,SAAI,GAAG,WAAW,CAAC,IAAI,CAAA,CAAC,sDAAsD;QAJ5F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAChC,CAAC;;AAHH,kCASC;AADe,gBAAI,GAAG,aAAa,AAAhB,CAAgB;AAGvB,QAAA,gBAAgB,GAAG,iBAAiB,CAAA;AAWjD,IAAY,
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":";;;AASA,MAAa,QAAS,SAAQ,KAAK;IACjC,YACkB,IAAY,EAC5B,OAAgB;QAEhB,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAQ;IAI9B,CAAC;CACF;AAPD,4BAOC;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,mDAAc,CAAA;IACd,iDAAa,CAAA;AACf,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,MAAa,WAAW;IACtB,YAAY,OAA0B;QAKtB,SAAI,GAAG,WAAW,CAAC,IAAI,CAAA,CAAC,sDAAsD;QAJ5F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAChC,CAAC;;AAHH,kCASC;AADe,gBAAI,GAAG,aAAa,AAAhB,CAAgB;AAGvB,QAAA,gBAAgB,GAAG,iBAAiB,CAAA;AAWjD,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,yCAAuB,CAAA;IACvB,6CAA2B,CAAA;IAC3B,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;AACrB,CAAC,EANW,cAAc,8BAAd,cAAc,QAMzB"}
|
|
@@ -112,11 +112,16 @@ class RpcServerImpl {
|
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
|
-
this.httpServer.addListener("request", (req, res) =>
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
this.httpServer.addListener("request", (req, res) => {
|
|
116
|
+
const hooks = {
|
|
117
|
+
call: this.call,
|
|
118
|
+
subscribe: this.subscribe,
|
|
119
|
+
unsubscribe: this.unsubscribe,
|
|
120
|
+
};
|
|
121
|
+
(0, http_js_1.serveHttpRequest)(req, res, options.path, options.createServerHooks ? options.createServerHooks(hooks, req) : hooks, options.createConnectionContext).catch((e) => {
|
|
122
|
+
logger_js_1.log.warn("Unhandled error serving HTTP request", e);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
120
125
|
}
|
|
121
126
|
async createConnectionsServer() {
|
|
122
127
|
const { ConnectionsServer } = await Promise.resolve().then(() => __importStar(require("./ConnectionsServer.js")));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mEAA0D;AAC1D,gDAAuB;AAEvB,sDAAiD;AACjD,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;
|
|
1
|
+
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { RpcConnectionContext, RpcContext, Services } from "../rpc.js";
|
|
|
3
3
|
import { ServicesWithTriggers } from "./local.js";
|
|
4
4
|
import { Middleware } from "../utils/middleware.js";
|
|
5
5
|
import http, { IncomingMessage } from "http";
|
|
6
|
+
import { HttpServerHooks } from "./http";
|
|
6
7
|
export declare function publishServices<S extends Services<S>, C extends RpcContext>(services: S, overrideOptions: Partial<PublishServicesOptions<C>> & ({
|
|
7
8
|
port: number;
|
|
8
9
|
} | {
|
|
@@ -23,6 +24,7 @@ export type PublishServicesOptions<C extends RpcContext> = {
|
|
|
23
24
|
pingInterval: number;
|
|
24
25
|
subscriptions: boolean;
|
|
25
26
|
createConnectionContext(req: IncomingMessage): Promise<RpcConnectionContext>;
|
|
27
|
+
createServerHooks?(hooks: HttpServerHooks, req: IncomingMessage): HttpServerHooks;
|
|
26
28
|
} & ({
|
|
27
29
|
server: http.Server;
|
|
28
30
|
} | {
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsF;AAGtF,yDAAgD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsF;AAGtF,yDAAgD;AAIzC,KAAK,UAAU,eAAe,CACnC,QAAW,EACX,eAA8F;IAM9F,MAAM,OAAO,GAAG;QACd,GAAG,cAAc;QACjB,GAAG,eAAe;KACnB,CAAA;IAED,MAAM,SAAS,GAAG,IAAI,gCAAa,CAAO,QAAQ,EAAE,OAAO,CAAC,CAAA;IAE5D,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IAEvB,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,0BAA0B,EAAE;QAChD,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,SAAS,CAAC,UAAU;KACjC,CAAA;AACH,CAAC;AAtBD,0CAsBC;AA0BD,MAAM,cAAc,GAAqD;IACvE,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,EAAE;IACd,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,gCAAgC;IACzD,aAAa,EAAE,IAAI;IAEnB,KAAK,CAAC,uBAAuB,CAAC,GAAoB;QAChD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,yBAAgB,CAAC,CAAA;QAE5C,OAAO;YACL,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM;SACjE,CAAA;IACH,CAAC;CACF,CAAA"}
|
package/package.json
CHANGED
package/src/client/HttpClient.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import {CLIENT_ID_HEADER, RpcErrors} from "../rpc.js"
|
|
2
2
|
import {safeParseJson, safeStringify} from "../utils/json.js"
|
|
3
|
-
import {ClientCookies} from "../utils/cookies.js"
|
|
4
|
-
import {environment, Environment} from "../utils/env.js"
|
|
5
3
|
|
|
6
4
|
export class HttpClient {
|
|
7
5
|
constructor(
|
|
8
6
|
private url: string,
|
|
9
7
|
private clientId: string,
|
|
10
|
-
private getHeaders: () => Promise<Record<string, string
|
|
11
|
-
private cookies: ClientCookies
|
|
8
|
+
private getHeaders: () => Promise<Record<string, string>>
|
|
12
9
|
) {}
|
|
13
10
|
|
|
14
11
|
async call(itemName: string, params: unknown[], callTimeout: number): Promise<unknown> {
|
|
@@ -39,14 +36,6 @@ export class HttpClient {
|
|
|
39
36
|
try {
|
|
40
37
|
const {signal, finished} = timeoutSignal(callTimeout)
|
|
41
38
|
|
|
42
|
-
if (environment != Environment.Browser) {
|
|
43
|
-
const cookie = this.cookies.getCookieString()
|
|
44
|
-
|
|
45
|
-
if (cookie) {
|
|
46
|
-
headers["Cookie"] = cookie
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
39
|
const response = await fetch(itemUrl, {
|
|
51
40
|
method,
|
|
52
41
|
headers: {
|
|
@@ -60,14 +49,6 @@ export class HttpClient {
|
|
|
60
49
|
|
|
61
50
|
finished()
|
|
62
51
|
|
|
63
|
-
if (environment != Environment.Browser) {
|
|
64
|
-
const cookie = response.headers.get("set-cookie")
|
|
65
|
-
|
|
66
|
-
if (cookie) {
|
|
67
|
-
this.cookies.updateCookies(cookie.split(","))
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
52
|
if (response.status == 204) {
|
|
72
53
|
return
|
|
73
54
|
}
|
|
@@ -6,20 +6,18 @@ import {nanoid} from "nanoid"
|
|
|
6
6
|
import {createRemote, ServicesWithSubscriptions} from "./remote.js"
|
|
7
7
|
import {ConsumeServicesOptions, RpcClient} from "./index.js"
|
|
8
8
|
import {withMiddlewares} from "../utils/middleware.js"
|
|
9
|
-
import {ClientCookies} from "../utils/cookies.js"
|
|
10
9
|
|
|
11
10
|
export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
12
11
|
constructor(
|
|
13
12
|
url: string,
|
|
14
13
|
private readonly options: ConsumeServicesOptions
|
|
15
14
|
) {
|
|
16
|
-
this.httpClient = new HttpClient(url, this.clientId, options.getHeaders
|
|
15
|
+
this.httpClient = new HttpClient(url, this.clientId, options.getHeaders)
|
|
17
16
|
this.remoteSubscriptions = new RemoteSubscriptions()
|
|
18
17
|
|
|
19
18
|
this.connection = new WebSocketConnection(
|
|
20
19
|
options.getSubscriptionsUrl(url),
|
|
21
20
|
this.clientId,
|
|
22
|
-
this.cookies,
|
|
23
21
|
{
|
|
24
22
|
subscriptions: options.subscriptions,
|
|
25
23
|
errorDelayMaxDuration: options.errorDelayMaxDuration,
|
|
@@ -27,7 +25,14 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
27
25
|
pingInterval: options.pingInterval,
|
|
28
26
|
},
|
|
29
27
|
(itemName, parameters, data) => {
|
|
30
|
-
|
|
28
|
+
const ctx: RpcContext = {
|
|
29
|
+
clientId: this.clientId,
|
|
30
|
+
itemName,
|
|
31
|
+
invocationType: InvocationType.Update,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const next = async (p = data) => this.remoteSubscriptions.consume(itemName, parameters, p)
|
|
35
|
+
return withMiddlewares(ctx, this.options.updatesMiddleware, next, data)
|
|
31
36
|
},
|
|
32
37
|
() => {
|
|
33
38
|
this.resubscribe()
|
|
@@ -43,7 +48,6 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
43
48
|
private readonly httpClient: HttpClient
|
|
44
49
|
private readonly remoteSubscriptions: RemoteSubscriptions
|
|
45
50
|
private readonly connection: WebSocketConnection
|
|
46
|
-
private readonly cookies: ClientCookies = new ClientCookies()
|
|
47
51
|
|
|
48
52
|
isConnected() {
|
|
49
53
|
return this.connection.isConnected()
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import {log} from "../logger.js"
|
|
2
2
|
import {safeParseJson} from "../utils/json.js"
|
|
3
3
|
import {adelay} from "../utils/promises.js"
|
|
4
|
-
import {environment, Environment} from "../utils/env.js"
|
|
5
|
-
import {ClientCookies} from "../utils/cookies.js"
|
|
6
|
-
import type {IncomingMessage} from "http"
|
|
7
4
|
|
|
8
5
|
export class WebSocketConnection {
|
|
9
6
|
constructor(
|
|
10
7
|
private readonly url: string,
|
|
11
8
|
private readonly clientId: string,
|
|
12
|
-
private readonly cookies: ClientCookies,
|
|
13
9
|
private readonly options: {
|
|
14
10
|
subscriptions: boolean
|
|
15
11
|
reconnectDelay: number
|
|
@@ -122,26 +118,7 @@ export class WebSocketConnection {
|
|
|
122
118
|
private async establishConnection(onDisconnected: () => void): Promise<void> {
|
|
123
119
|
return new Promise(async (resolve, reject) => {
|
|
124
120
|
try {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if ([Environment.ReactNative, Environment.Node].includes(environment)) {
|
|
128
|
-
// use RN WS or node-ws headers extensions to set cookie
|
|
129
|
-
let options = undefined
|
|
130
|
-
|
|
131
|
-
const cookie = this.cookies.getCookieString()
|
|
132
|
-
if (cookie) {
|
|
133
|
-
options = {
|
|
134
|
-
headers: {
|
|
135
|
-
Cookie: cookie,
|
|
136
|
-
},
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
socket = new (WebSocket as any)(this.url, this.clientId, options)
|
|
141
|
-
} else {
|
|
142
|
-
// rely on browser cookie handling
|
|
143
|
-
socket = new WebSocket(this.url, this.clientId)
|
|
144
|
-
}
|
|
121
|
+
const socket = new WebSocket(this.url, this.clientId)
|
|
145
122
|
|
|
146
123
|
let connected = false
|
|
147
124
|
|
package/src/client/index.ts
CHANGED
|
@@ -22,6 +22,7 @@ export type ConsumeServicesOptions = {
|
|
|
22
22
|
pingInterval: number | null
|
|
23
23
|
subscriptions: boolean
|
|
24
24
|
middleware: Middleware<RpcContext>[]
|
|
25
|
+
updatesMiddleware: Middleware<RpcContext>[]
|
|
25
26
|
connectOnCreate: boolean
|
|
26
27
|
onConnected: () => void
|
|
27
28
|
onDisconnected: () => void
|
|
@@ -64,6 +65,7 @@ const defaultOptions: ConsumeServicesOptions = {
|
|
|
64
65
|
pingInterval: null, // if set, should be in-sync with server, ie 30 * 1000
|
|
65
66
|
subscriptions: true,
|
|
66
67
|
middleware: [],
|
|
68
|
+
updatesMiddleware: [],
|
|
67
69
|
connectOnCreate: false,
|
|
68
70
|
onConnected: () => {},
|
|
69
71
|
onDisconnected: () => {},
|
package/src/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type {Middleware} from "./utils/middleware.js"
|
|
|
5
5
|
export {withMiddlewares} from "./utils/middleware.js"
|
|
6
6
|
|
|
7
7
|
export type {RpcServer, PublishServicesOptions} from "./server/index.js"
|
|
8
|
+
export type {HttpServerHooks} from "./server/http.js"
|
|
8
9
|
export {publishServices} from "./server/index.js"
|
|
9
10
|
|
|
10
11
|
export type {ServicesWithTriggers} from "./server/local.js"
|
package/src/rpc.ts
CHANGED
|
@@ -38,19 +38,23 @@ export class RpcServerImpl<S extends Services<S>, C extends RpcContext> implemen
|
|
|
38
38
|
})
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
this.httpServer.addListener("request", (req, res) =>
|
|
41
|
+
this.httpServer.addListener("request", (req, res) => {
|
|
42
|
+
const hooks = {
|
|
43
|
+
call: this.call,
|
|
44
|
+
subscribe: this.subscribe,
|
|
45
|
+
unsubscribe: this.unsubscribe,
|
|
46
|
+
}
|
|
47
|
+
|
|
42
48
|
serveHttpRequest(
|
|
43
49
|
req,
|
|
44
50
|
res,
|
|
45
51
|
options.path,
|
|
46
|
-
|
|
47
|
-
call: this.call,
|
|
48
|
-
subscribe: this.subscribe,
|
|
49
|
-
unsubscribe: this.unsubscribe,
|
|
50
|
-
},
|
|
52
|
+
options.createServerHooks ? options.createServerHooks(hooks, req) : hooks,
|
|
51
53
|
options.createConnectionContext
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
+
).catch((e) => {
|
|
55
|
+
log.warn("Unhandled error serving HTTP request", e)
|
|
56
|
+
})
|
|
57
|
+
})
|
|
54
58
|
}
|
|
55
59
|
|
|
56
60
|
private async createConnectionsServer() {
|
package/src/server/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {ServicesWithTriggers} from "./local.js"
|
|
|
3
3
|
import {Middleware} from "../utils/middleware.js"
|
|
4
4
|
import {RpcServerImpl} from "./RpcServerImpl.js"
|
|
5
5
|
import http, {IncomingMessage} from "http"
|
|
6
|
+
import {HttpServerHooks} from "./http"
|
|
6
7
|
|
|
7
8
|
export async function publishServices<S extends Services<S>, C extends RpcContext>(
|
|
8
9
|
services: S,
|
|
@@ -41,6 +42,7 @@ export type PublishServicesOptions<C extends RpcContext> = {
|
|
|
41
42
|
pingInterval: number
|
|
42
43
|
subscriptions: boolean
|
|
43
44
|
createConnectionContext(req: IncomingMessage): Promise<RpcConnectionContext>
|
|
45
|
+
createServerHooks?(hooks: HttpServerHooks, req: IncomingMessage): HttpServerHooks
|
|
44
46
|
} & (
|
|
45
47
|
| {
|
|
46
48
|
server: http.Server
|
package/tests/connection.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import {assert} from "chai"
|
|
2
|
-
import {createTestClient, startTestServer,
|
|
3
|
-
import WebSocket
|
|
2
|
+
import {createTestClient, startTestServer, testClient, testServer} from "./testUtils.js"
|
|
3
|
+
import WebSocket from "ws"
|
|
4
4
|
import {adelay} from "../src/utils/promises.js"
|
|
5
|
-
import http, {IncomingMessage} from "http"
|
|
6
|
-
import {parseCookies} from "../src/utils/cookies.js"
|
|
7
5
|
|
|
8
6
|
describe("connection", () => {
|
|
9
7
|
it("server close connection on ping timeout", async () => {
|
|
@@ -134,87 +132,4 @@ describe("connection", () => {
|
|
|
134
132
|
|
|
135
133
|
assert.equal(disconnected, true)
|
|
136
134
|
})
|
|
137
|
-
|
|
138
|
-
describe("cookies", () => {
|
|
139
|
-
it("handle cookies in subseq requests", async () => {
|
|
140
|
-
let call = 0
|
|
141
|
-
|
|
142
|
-
let sentClientCookies: Record<string, string> = {}
|
|
143
|
-
|
|
144
|
-
const httpServer = http.createServer((req, res) => {
|
|
145
|
-
const headers: Record<string, string> = {"Content-Type": "text/plain"}
|
|
146
|
-
|
|
147
|
-
if (!call++) {
|
|
148
|
-
headers["Set-Cookie"] = `name=value; path=/; secure; samesite=none; httponly`
|
|
149
|
-
} else {
|
|
150
|
-
sentClientCookies = parseCookies(req.headers.cookie || "")
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
res.writeHead(200, headers)
|
|
154
|
-
|
|
155
|
-
res.end("ok")
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
let resolveStarted = () => {}
|
|
159
|
-
const started = new Promise<void>((r) => (resolveStarted = r))
|
|
160
|
-
httpServer.listen(TEST_PORT, () => resolveStarted())
|
|
161
|
-
await started
|
|
162
|
-
|
|
163
|
-
const client = await createTestClient<{call(): Promise<string>}>()
|
|
164
|
-
|
|
165
|
-
await client.call()
|
|
166
|
-
await client.call()
|
|
167
|
-
|
|
168
|
-
assert.equal(Object.keys(sentClientCookies).length, 1)
|
|
169
|
-
assert.equal(sentClientCookies["name"], "value")
|
|
170
|
-
|
|
171
|
-
let resolveStopped = () => {}
|
|
172
|
-
const stopped = new Promise<void>((r) => (resolveStopped = r))
|
|
173
|
-
httpServer.closeAllConnections()
|
|
174
|
-
httpServer.close(() => resolveStopped())
|
|
175
|
-
await stopped
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
it("set cookie in http, use in ws", async () => {
|
|
179
|
-
const httpServer = http.createServer((req, res) => {
|
|
180
|
-
const headers: Record<string, string> = {
|
|
181
|
-
"Content-Type": "text/plain",
|
|
182
|
-
"Set-Cookie": "name=value; path=/; secure; samesite=none; httponly",
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
res.writeHead(200, headers)
|
|
186
|
-
|
|
187
|
-
res.end("ok")
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
const wss = new WebSocketServer({server: httpServer})
|
|
191
|
-
|
|
192
|
-
let sentClientCookies: Record<string, string> = {}
|
|
193
|
-
wss.on("connection", (ws: unknown, req: IncomingMessage) => {
|
|
194
|
-
sentClientCookies = parseCookies(req.headers.cookie || "")
|
|
195
|
-
})
|
|
196
|
-
|
|
197
|
-
let resolveStarted = () => {}
|
|
198
|
-
const started = new Promise<void>((r) => (resolveStarted = r))
|
|
199
|
-
httpServer.listen(TEST_PORT, () => resolveStarted())
|
|
200
|
-
await started
|
|
201
|
-
|
|
202
|
-
const client = await createTestClient<{call(): Promise<string>}>()
|
|
203
|
-
await client.call()
|
|
204
|
-
|
|
205
|
-
await client.call.subscribe(() => {})
|
|
206
|
-
|
|
207
|
-
assert.equal(Object.keys(sentClientCookies).length, 1)
|
|
208
|
-
assert.equal(sentClientCookies["name"], "value")
|
|
209
|
-
|
|
210
|
-
await testClient!.close()
|
|
211
|
-
|
|
212
|
-
let resolveStopped = () => {}
|
|
213
|
-
const stopped = new Promise<void>((r) => (resolveStopped = r))
|
|
214
|
-
httpServer.closeIdleConnections()
|
|
215
|
-
httpServer.closeAllConnections()
|
|
216
|
-
httpServer.close(() => resolveStopped())
|
|
217
|
-
await stopped
|
|
218
|
-
})
|
|
219
|
-
})
|
|
220
135
|
})
|
package/tests/middleware.ts
CHANGED
|
@@ -109,4 +109,35 @@ describe("middleware", () => {
|
|
|
109
109
|
assert.equal(e.message, "msg")
|
|
110
110
|
}
|
|
111
111
|
})
|
|
112
|
+
|
|
113
|
+
it("updates middlewares", async () => {
|
|
114
|
+
let count = 1
|
|
115
|
+
|
|
116
|
+
const services = await startTestServer({
|
|
117
|
+
async remote() {
|
|
118
|
+
return count++
|
|
119
|
+
},
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
const client = await createTestClient<typeof services>({
|
|
123
|
+
updatesMiddleware: [
|
|
124
|
+
(ctx, next, r) => {
|
|
125
|
+
assert.ok(ctx.itemName)
|
|
126
|
+
|
|
127
|
+
return next((r as number) + 1)
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
let response
|
|
133
|
+
await client.remote.subscribe((r) => {
|
|
134
|
+
response = r
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
services.remote.trigger()
|
|
138
|
+
|
|
139
|
+
await adelay(20)
|
|
140
|
+
|
|
141
|
+
assert.equal(response, 3)
|
|
142
|
+
})
|
|
112
143
|
})
|
package/tests/testUtils.ts
CHANGED
|
@@ -36,6 +36,12 @@ export let testClient: RpcClient | null = null
|
|
|
36
36
|
export async function createTestClient<S extends Services<S>>(
|
|
37
37
|
options?: Partial<ConsumeServicesOptions>
|
|
38
38
|
): Promise<ServicesWithSubscriptions<S>> {
|
|
39
|
+
if (!options) options = {}
|
|
40
|
+
if (!options.middleware) options.middleware = []
|
|
41
|
+
options.middleware = [logMiddleware, ...options.middleware]
|
|
42
|
+
if (!options.updatesMiddleware) options.updatesMiddleware = []
|
|
43
|
+
options.updatesMiddleware = [logUpdatesMiddleware, ...options.updatesMiddleware]
|
|
44
|
+
|
|
39
45
|
const r = await consumeServices<S>(`http://127.0.0.1:${TEST_PORT}/rpc`, options)
|
|
40
46
|
testClient = r.client
|
|
41
47
|
return r.remote
|
|
@@ -53,3 +59,22 @@ afterEach(async function () {
|
|
|
53
59
|
testServer = null
|
|
54
60
|
}
|
|
55
61
|
})
|
|
62
|
+
|
|
63
|
+
async function logMiddleware(ctx: RpcContext, next: any, ...params: any) {
|
|
64
|
+
try {
|
|
65
|
+
console.log(`OUT:${ctx.invocationType} '${ctx.itemName}'`, ...params)
|
|
66
|
+
|
|
67
|
+
const r = await next()
|
|
68
|
+
|
|
69
|
+
console.log(`IN:${ctx.invocationType} '${ctx.itemName}'`, r)
|
|
70
|
+
return r
|
|
71
|
+
} catch (e) {
|
|
72
|
+
console.log(`ERR:${ctx.invocationType} '${ctx.itemName}'`, e)
|
|
73
|
+
throw e
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function logUpdatesMiddleware(ctx: RpcContext, next: any, res: any) {
|
|
78
|
+
console.log(`IN:${ctx.invocationType} '${ctx.itemName}'`, res)
|
|
79
|
+
return next()
|
|
80
|
+
}
|