@push-rpc/next 2.0.1 → 2.0.3
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 -1
- package/dist/client/HttpClient.d.ts +2 -1
- package/dist/client/HttpClient.js +8 -6
- package/dist/client/HttpClient.js.map +1 -1
- package/dist/client/RpcClientImpl.js +7 -2
- package/dist/client/RpcClientImpl.js.map +1 -1
- package/dist/client/WebSocketConnection.d.ts +2 -1
- package/dist/client/WebSocketConnection.js +3 -1
- package/dist/client/WebSocketConnection.js.map +1 -1
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.js +3 -0
- package/dist/client/index.js.map +1 -1
- package/dist/server/http.js +5 -3
- package/dist/server/http.js.map +1 -1
- package/dist/utils/server.d.ts +5 -0
- package/dist/utils/server.js +48 -0
- package/dist/utils/server.js.map +1 -0
- package/package.json +1 -1
- package/src/client/HttpClient.ts +9 -6
- package/src/client/RpcClientImpl.ts +8 -2
- package/src/client/WebSocketConnection.ts +3 -1
- package/src/client/index.ts +6 -0
- package/src/server/http.ts +6 -3
- package/src/utils/server.ts +29 -0
- package/tests/connection.ts +28 -0
- package/tests/misc.ts +36 -1
package/README.md
CHANGED
|
@@ -28,4 +28,8 @@ triggers.
|
|
|
28
28
|
## Issues / TBDs
|
|
29
29
|
|
|
30
30
|
- [important] Importing index.js from the root of the package will import node's http package. Not good for clients.
|
|
31
|
-
- Browser sockets don't have 'ping' event. Need to find a different way to detect connection loss.
|
|
31
|
+
- Browser sockets don't have 'ping' event. Need to find a different way to detect connection loss.
|
|
32
|
+
|
|
33
|
+
## Features
|
|
34
|
+
|
|
35
|
+
- Supports compressed HTTP requests.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare class HttpClient {
|
|
2
2
|
private url;
|
|
3
3
|
private clientId;
|
|
4
|
-
|
|
4
|
+
private getHeaders;
|
|
5
|
+
constructor(url: string, clientId: string, getHeaders: () => Promise<Record<string, string>>);
|
|
5
6
|
call(itemName: string, params: unknown[], callTimeout: number): Promise<unknown>;
|
|
6
7
|
subscribe(itemName: string, params: unknown[], callTimeout: number): Promise<unknown>;
|
|
7
8
|
unsubscribe(itemName: string, params: unknown[], callTimeout: number): Promise<void>;
|
|
@@ -4,29 +4,31 @@ exports.HttpClient = void 0;
|
|
|
4
4
|
const rpc_js_1 = require("../rpc.js");
|
|
5
5
|
const json_js_1 = require("../utils/json.js");
|
|
6
6
|
class HttpClient {
|
|
7
|
-
constructor(url, clientId) {
|
|
7
|
+
constructor(url, clientId, getHeaders) {
|
|
8
8
|
this.url = url;
|
|
9
9
|
this.clientId = clientId;
|
|
10
|
+
this.getHeaders = getHeaders;
|
|
10
11
|
}
|
|
11
|
-
call(itemName, params, callTimeout) {
|
|
12
|
-
return this.httpRequest("POST", itemName, params, callTimeout);
|
|
12
|
+
async call(itemName, params, callTimeout) {
|
|
13
|
+
return this.httpRequest("POST", itemName, params, callTimeout, await this.getHeaders());
|
|
13
14
|
}
|
|
14
15
|
async subscribe(itemName, params, callTimeout) {
|
|
15
|
-
return this.httpRequest("PUT", itemName, params, callTimeout);
|
|
16
|
+
return this.httpRequest("PUT", itemName, params, callTimeout, await this.getHeaders());
|
|
16
17
|
}
|
|
17
18
|
async unsubscribe(itemName, params, callTimeout) {
|
|
18
|
-
await this.httpRequest("PATCH", itemName, params, callTimeout);
|
|
19
|
+
await this.httpRequest("PATCH", itemName, params, callTimeout, await this.getHeaders());
|
|
19
20
|
}
|
|
20
21
|
getItemUrl(itemName) {
|
|
21
22
|
return `${this.url}/${itemName}`;
|
|
22
23
|
}
|
|
23
|
-
async httpRequest(method, itemName, params, callTimeout) {
|
|
24
|
+
async httpRequest(method, itemName, params, callTimeout, headers) {
|
|
24
25
|
try {
|
|
25
26
|
const response = await fetch(this.getItemUrl(itemName), {
|
|
26
27
|
method,
|
|
27
28
|
headers: {
|
|
28
29
|
"Content-Type": "application/json",
|
|
29
30
|
[rpc_js_1.CLIENT_ID_HEADER]: this.clientId,
|
|
31
|
+
...headers,
|
|
30
32
|
},
|
|
31
33
|
body: (0, json_js_1.safeStringify)(params),
|
|
32
34
|
signal: AbortSignal.timeout(callTimeout),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":";;;AAAA,sCAAqD;AACrD,8CAA6D;AAE7D,MAAa,UAAU;IACrB,YACU,GAAW,EACX,QAAgB;
|
|
1
|
+
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ class RpcClientImpl {
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
|
-
this.httpClient = new HttpClient_js_1.HttpClient(url, this.clientId);
|
|
47
|
+
this.httpClient = new HttpClient_js_1.HttpClient(url, this.clientId, options.getHeaders);
|
|
48
48
|
this.remoteSubscriptions = new RemoteSubscriptions_js_1.RemoteSubscriptions();
|
|
49
49
|
this.connection = new WebSocketConnection_js_1.WebSocketConnection(url, this.clientId, {
|
|
50
50
|
subscriptions: options.subscriptions,
|
|
@@ -53,7 +53,12 @@ class RpcClientImpl {
|
|
|
53
53
|
pingInterval: options.pingInterval,
|
|
54
54
|
}, (itemName, parameters, data) => {
|
|
55
55
|
this.remoteSubscriptions.consume(itemName, parameters, data);
|
|
56
|
-
},
|
|
56
|
+
}, () => {
|
|
57
|
+
this.resubscribe();
|
|
58
|
+
options.onConnected();
|
|
59
|
+
}, () => {
|
|
60
|
+
options.onDisconnected();
|
|
61
|
+
});
|
|
57
62
|
}
|
|
58
63
|
isConnected() {
|
|
59
64
|
return this.connection.isConnected();
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"RpcClientImpl.js","sourceRoot":"","sources":["../../src/client/RpcClientImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,13 @@ export declare class WebSocketConnection {
|
|
|
4
4
|
private readonly options;
|
|
5
5
|
private readonly consume;
|
|
6
6
|
private readonly onConnected;
|
|
7
|
+
private readonly onDisconnected;
|
|
7
8
|
constructor(url: string, clientId: string, options: {
|
|
8
9
|
subscriptions: boolean;
|
|
9
10
|
reconnectDelay: number;
|
|
10
11
|
errorDelayMaxDuration: number;
|
|
11
12
|
pingInterval: number | null;
|
|
12
|
-
}, consume: (itemName: string, parameters: unknown[], data: unknown) => void, onConnected: () => void);
|
|
13
|
+
}, consume: (itemName: string, parameters: unknown[], data: unknown) => void, onConnected: () => void, onDisconnected: () => void);
|
|
13
14
|
close(): Promise<void>;
|
|
14
15
|
/**
|
|
15
16
|
* Connect to the server, on each disconnect try to disconnect.
|
|
@@ -5,12 +5,13 @@ 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
7
|
class WebSocketConnection {
|
|
8
|
-
constructor(url, clientId, options, consume, onConnected) {
|
|
8
|
+
constructor(url, clientId, options, consume, onConnected, onDisconnected) {
|
|
9
9
|
this.url = url;
|
|
10
10
|
this.clientId = clientId;
|
|
11
11
|
this.options = options;
|
|
12
12
|
this.consume = consume;
|
|
13
13
|
this.onConnected = onConnected;
|
|
14
|
+
this.onDisconnected = onDisconnected;
|
|
14
15
|
this.socket = null;
|
|
15
16
|
this.disconnectedMark = true;
|
|
16
17
|
this.pingTimeout = null;
|
|
@@ -102,6 +103,7 @@ class WebSocketConnection {
|
|
|
102
103
|
this.socket = null;
|
|
103
104
|
if (connected) {
|
|
104
105
|
onDisconnected();
|
|
106
|
+
this.onDisconnected();
|
|
105
107
|
}
|
|
106
108
|
if (this.pingTimeout) {
|
|
107
109
|
clearTimeout(this.pingTimeout);
|
|
@@ -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,OAAyE,EACzE,WAAuB;
|
|
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
|
@@ -15,6 +15,9 @@ export type ConsumeServicesOptions = {
|
|
|
15
15
|
subscriptions: boolean;
|
|
16
16
|
middleware: Middleware<RpcContext>[];
|
|
17
17
|
connectOnCreate: boolean;
|
|
18
|
+
onConnected: () => void;
|
|
19
|
+
onDisconnected: () => void;
|
|
20
|
+
getHeaders: () => Promise<Record<string, string>>;
|
|
18
21
|
};
|
|
19
22
|
export declare function consumeServices<S extends Services<S>>(url: string, overrideOptions?: Partial<ConsumeServicesOptions>): Promise<{
|
|
20
23
|
client: RpcClient;
|
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;AAyBzC,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;CAC7B,CAAA"}
|
package/dist/server/http.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.serveHttpRequest = void 0;
|
|
4
4
|
const json_js_1 = require("../utils/json.js");
|
|
5
5
|
const logger_js_1 = require("../logger.js");
|
|
6
|
+
const server_js_1 = require("../utils/server.js");
|
|
6
7
|
async function serveHttpRequest(req, res, path, hooks, createConnectionContext) {
|
|
7
8
|
// if port is in options - response 404 on other URLs
|
|
8
9
|
// oherwise just handle request
|
|
@@ -71,15 +72,16 @@ async function serveHttpRequest(req, res, path, hooks, createConnectionContext)
|
|
|
71
72
|
}
|
|
72
73
|
exports.serveHttpRequest = serveHttpRequest;
|
|
73
74
|
function readBody(req) {
|
|
75
|
+
const decompressed = (0, server_js_1.decompressRequest)(req);
|
|
74
76
|
return new Promise((resolve, reject) => {
|
|
75
77
|
let body = "";
|
|
76
|
-
|
|
78
|
+
decompressed.on("data", (chunk) => {
|
|
77
79
|
body += chunk.toString();
|
|
78
80
|
});
|
|
79
|
-
|
|
81
|
+
decompressed.on("end", () => {
|
|
80
82
|
resolve(body);
|
|
81
83
|
});
|
|
82
|
-
|
|
84
|
+
decompressed.on("error", (error) => {
|
|
83
85
|
reject(error);
|
|
84
86
|
});
|
|
85
87
|
});
|
package/dist/server/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":";;;AAGA,8CAA6D;AAC7D,4CAAgC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":";;;AAGA,8CAA6D;AAC7D,4CAAgC;AAChC,kDAAoD;AAE7C,KAAK,UAAU,gBAAgB,CACpC,GAAoB,EACpB,GAAmB,EACnB,IAAY,EACZ,KAAsB,EACtB,uBAAgF;IAEhF,qDAAqD;IACrD,+BAA+B;IAE/B,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAA;YAE9C,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAE/C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAA;YACjF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,uBAAa,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YAE9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;YAED,IAAI,MAAe,CAAA;YACnB,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAK,MAAM;oBACT,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;oBAC9C,MAAK;gBACP,KAAK,KAAK;oBACR,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;oBACnD,MAAK;gBACP,KAAK,OAAO;oBACV,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;oBACrD,MAAK;gBACP;oBACE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;oBACpB,GAAG,CAAC,GAAG,EAAE,CAAA;oBACT,OAAM;YACV,CAAC;YAED,IAAI,OAAO,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,GAAG,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;YAED,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAA;gBAC3C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACjB,GAAG,CAAC,GAAG,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;YAED,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;YACjD,GAAG,CAAC,KAAK,CAAC,IAAA,uBAAa,EAAC,MAAM,CAAC,CAAC,CAAA;YAChC,GAAG,CAAC,GAAG,EAAE,CAAA;QACX,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACX,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAA;gBACvB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAA;gBAC7B,MAAM,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAC,GAAG,CAAC,CAAA;gBACzC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;oBACjD,GAAG,CAAC,KAAK,CAAC,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC,CAAA;gBAChC,CAAC;gBACD,GAAG,CAAC,GAAG,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;iBAAM,CAAC;gBACN,eAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;gBAEnC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAA;gBACpB,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,uBAAuB,CAAA;gBAC3D,GAAG,CAAC,GAAG,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AA9ED,4CA8EC;AAED,SAAS,QAAQ,CAAC,GAAyB;IACzC,MAAM,YAAY,GAAG,IAAA,6BAAiB,EAAC,GAAG,CAAC,CAAA;IAE3C,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC1B,CAAC,CAAC,CAAA;QACF,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;QACF,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.decompressRequest = void 0;
|
|
27
|
+
const zlib = __importStar(require("zlib"));
|
|
28
|
+
const stream_1 = require("stream");
|
|
29
|
+
function decompressRequest(request) {
|
|
30
|
+
const contentEncoding = (request.headers["content-encoding"] || "").toLowerCase();
|
|
31
|
+
if (!["gzip", "deflate", "br"].includes(contentEncoding)) {
|
|
32
|
+
return request;
|
|
33
|
+
}
|
|
34
|
+
const isBrotli = contentEncoding === "br";
|
|
35
|
+
const decompress = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip();
|
|
36
|
+
const stream = new stream_1.PassThrough();
|
|
37
|
+
decompress.on("error", (error) => {
|
|
38
|
+
// Ignore empty request
|
|
39
|
+
if (error.code === "Z_BUF_ERROR") {
|
|
40
|
+
stream.end();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
stream.emit("error", error);
|
|
44
|
+
});
|
|
45
|
+
return (0, stream_1.pipeline)(request, decompress, stream, () => { });
|
|
46
|
+
}
|
|
47
|
+
exports.decompressRequest = decompressRequest;
|
|
48
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/utils/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAA4B;AAC5B,mCAAmF;AAGnF,SAAgB,iBAAiB,CAAC,OAA6B;IAC7D,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAEjF,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACzD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,KAAK,IAAI,CAAA;IAEzC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAChF,MAAM,MAAM,GAAG,IAAI,oBAAiB,EAAE,CAAA;IAEtC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;QACpC,uBAAuB;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,CAAA;YACZ,OAAM;QACR,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,OAAO,IAAA,iBAAc,EAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAC9D,CAAC;AAvBD,8CAuBC"}
|
package/package.json
CHANGED
package/src/client/HttpClient.ts
CHANGED
|
@@ -4,19 +4,20 @@ import {safeParseJson, safeStringify} from "../utils/json.js"
|
|
|
4
4
|
export class HttpClient {
|
|
5
5
|
constructor(
|
|
6
6
|
private url: string,
|
|
7
|
-
private clientId: string
|
|
7
|
+
private clientId: string,
|
|
8
|
+
private getHeaders: () => Promise<Record<string, string>>
|
|
8
9
|
) {}
|
|
9
10
|
|
|
10
|
-
call(itemName: string, params: unknown[], callTimeout: number): Promise<unknown> {
|
|
11
|
-
return this.httpRequest("POST", itemName, params, callTimeout)
|
|
11
|
+
async call(itemName: string, params: unknown[], callTimeout: number): Promise<unknown> {
|
|
12
|
+
return this.httpRequest("POST", itemName, params, callTimeout, await this.getHeaders())
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
async subscribe(itemName: string, params: unknown[], callTimeout: number) {
|
|
15
|
-
return this.httpRequest("PUT", itemName, params, callTimeout)
|
|
16
|
+
return this.httpRequest("PUT", itemName, params, callTimeout, await this.getHeaders())
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
async unsubscribe(itemName: string, params: unknown[], callTimeout: number) {
|
|
19
|
-
await this.httpRequest("PATCH", itemName, params, callTimeout)
|
|
20
|
+
await this.httpRequest("PATCH", itemName, params, callTimeout, await this.getHeaders())
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
private getItemUrl(itemName: string): string {
|
|
@@ -27,7 +28,8 @@ export class HttpClient {
|
|
|
27
28
|
method: "POST" | "PUT" | "PATCH",
|
|
28
29
|
itemName: string,
|
|
29
30
|
params: unknown[],
|
|
30
|
-
callTimeout: number
|
|
31
|
+
callTimeout: number,
|
|
32
|
+
headers: Record<string, string>
|
|
31
33
|
): Promise<unknown> {
|
|
32
34
|
try {
|
|
33
35
|
const response = await fetch(this.getItemUrl(itemName), {
|
|
@@ -35,6 +37,7 @@ export class HttpClient {
|
|
|
35
37
|
headers: {
|
|
36
38
|
"Content-Type": "application/json",
|
|
37
39
|
[CLIENT_ID_HEADER]: this.clientId,
|
|
40
|
+
...headers,
|
|
38
41
|
},
|
|
39
42
|
body: safeStringify(params),
|
|
40
43
|
signal: AbortSignal.timeout(callTimeout),
|
|
@@ -12,7 +12,7 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
12
12
|
url: string,
|
|
13
13
|
private readonly options: ConsumeServicesOptions
|
|
14
14
|
) {
|
|
15
|
-
this.httpClient = new HttpClient(url, this.clientId)
|
|
15
|
+
this.httpClient = new HttpClient(url, this.clientId, options.getHeaders)
|
|
16
16
|
this.remoteSubscriptions = new RemoteSubscriptions()
|
|
17
17
|
|
|
18
18
|
this.connection = new WebSocketConnection(
|
|
@@ -27,7 +27,13 @@ export class RpcClientImpl<S extends Services<S>> implements RpcClient {
|
|
|
27
27
|
(itemName, parameters, data) => {
|
|
28
28
|
this.remoteSubscriptions.consume(itemName, parameters, data)
|
|
29
29
|
},
|
|
30
|
-
|
|
30
|
+
() => {
|
|
31
|
+
this.resubscribe()
|
|
32
|
+
options.onConnected()
|
|
33
|
+
},
|
|
34
|
+
() => {
|
|
35
|
+
options.onDisconnected()
|
|
36
|
+
}
|
|
31
37
|
)
|
|
32
38
|
}
|
|
33
39
|
|
|
@@ -13,7 +13,8 @@ export class WebSocketConnection {
|
|
|
13
13
|
pingInterval: number | null
|
|
14
14
|
},
|
|
15
15
|
private readonly consume: (itemName: string, parameters: unknown[], data: unknown) => void,
|
|
16
|
-
private readonly onConnected: () => void
|
|
16
|
+
private readonly onConnected: () => void,
|
|
17
|
+
private readonly onDisconnected: () => void
|
|
17
18
|
) {
|
|
18
19
|
this.url = url.replace(/^https(.*)/, "wss$1").replace(/^http(.*)/, "ws$1")
|
|
19
20
|
this.clientId = clientId
|
|
@@ -129,6 +130,7 @@ export class WebSocketConnection {
|
|
|
129
130
|
|
|
130
131
|
if (connected) {
|
|
131
132
|
onDisconnected()
|
|
133
|
+
this.onDisconnected()
|
|
132
134
|
}
|
|
133
135
|
|
|
134
136
|
if (this.pingTimeout) {
|
package/src/client/index.ts
CHANGED
|
@@ -20,6 +20,9 @@ export type ConsumeServicesOptions = {
|
|
|
20
20
|
subscriptions: boolean
|
|
21
21
|
middleware: Middleware<RpcContext>[]
|
|
22
22
|
connectOnCreate: boolean
|
|
23
|
+
onConnected: () => void
|
|
24
|
+
onDisconnected: () => void
|
|
25
|
+
getHeaders: () => Promise<Record<string, string>>
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
export async function consumeServices<S extends Services<S>>(
|
|
@@ -58,4 +61,7 @@ const defaultOptions: ConsumeServicesOptions = {
|
|
|
58
61
|
subscriptions: true,
|
|
59
62
|
middleware: [],
|
|
60
63
|
connectOnCreate: false,
|
|
64
|
+
onConnected: () => {},
|
|
65
|
+
onDisconnected: () => {},
|
|
66
|
+
getHeaders: async () => ({}),
|
|
61
67
|
}
|
package/src/server/http.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {IncomingMessage, ServerResponse} from "http"
|
|
|
3
3
|
import {RpcConnectionContext} from "../rpc.js"
|
|
4
4
|
import {safeParseJson, safeStringify} from "../utils/json.js"
|
|
5
5
|
import {log} from "../logger.js"
|
|
6
|
+
import {decompressRequest} from "../utils/server.js"
|
|
6
7
|
|
|
7
8
|
export async function serveHttpRequest(
|
|
8
9
|
req: IncomingMessage,
|
|
@@ -85,15 +86,17 @@ export async function serveHttpRequest(
|
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
function readBody(req: http.IncomingMessage) {
|
|
89
|
+
const decompressed = decompressRequest(req)
|
|
90
|
+
|
|
88
91
|
return new Promise<string>((resolve, reject) => {
|
|
89
92
|
let body = ""
|
|
90
|
-
|
|
93
|
+
decompressed.on("data", (chunk: Buffer) => {
|
|
91
94
|
body += chunk.toString()
|
|
92
95
|
})
|
|
93
|
-
|
|
96
|
+
decompressed.on("end", () => {
|
|
94
97
|
resolve(body)
|
|
95
98
|
})
|
|
96
|
-
|
|
99
|
+
decompressed.on("error", (error: any) => {
|
|
97
100
|
reject(error)
|
|
98
101
|
})
|
|
99
102
|
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as http from "http"
|
|
2
|
+
import * as zlib from "zlib"
|
|
3
|
+
import {PassThrough as PassThroughStream, pipeline as streamPipeline} from "stream"
|
|
4
|
+
import * as Stream from "stream"
|
|
5
|
+
|
|
6
|
+
export function decompressRequest(request: http.IncomingMessage): Stream {
|
|
7
|
+
const contentEncoding = (request.headers["content-encoding"] || "").toLowerCase()
|
|
8
|
+
|
|
9
|
+
if (!["gzip", "deflate", "br"].includes(contentEncoding)) {
|
|
10
|
+
return request
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const isBrotli = contentEncoding === "br"
|
|
14
|
+
|
|
15
|
+
const decompress = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip()
|
|
16
|
+
const stream = new PassThroughStream()
|
|
17
|
+
|
|
18
|
+
decompress.on("error", (error: any) => {
|
|
19
|
+
// Ignore empty request
|
|
20
|
+
if (error.code === "Z_BUF_ERROR") {
|
|
21
|
+
stream.end()
|
|
22
|
+
return
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
stream.emit("error", error)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
return streamPipeline(request, decompress, stream, () => {})
|
|
29
|
+
}
|
package/tests/connection.ts
CHANGED
|
@@ -104,4 +104,32 @@ describe("connection", () => {
|
|
|
104
104
|
|
|
105
105
|
assert.equal(testClient!.isConnected(), false)
|
|
106
106
|
})
|
|
107
|
+
|
|
108
|
+
it("calls listeners", async () => {
|
|
109
|
+
const services = await startTestServer({
|
|
110
|
+
item: async () => "1",
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
let connected = false
|
|
114
|
+
let disconnected = false
|
|
115
|
+
|
|
116
|
+
const remote = await createTestClient<typeof services>({
|
|
117
|
+
onConnected: () => {
|
|
118
|
+
connected = true
|
|
119
|
+
},
|
|
120
|
+
onDisconnected: () => {
|
|
121
|
+
disconnected = true
|
|
122
|
+
},
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
await remote.item.subscribe(() => {})
|
|
126
|
+
|
|
127
|
+
assert.equal(connected, true)
|
|
128
|
+
|
|
129
|
+
await testClient!.close()
|
|
130
|
+
|
|
131
|
+
await adelay(10)
|
|
132
|
+
|
|
133
|
+
assert.equal(disconnected, true)
|
|
134
|
+
})
|
|
107
135
|
})
|
package/tests/misc.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {assert} from "chai"
|
|
2
2
|
import {createTestClient, startTestServer, TEST_PORT} from "./testUtils.js"
|
|
3
|
-
import {RpcErrors} from "../src/index.js"
|
|
3
|
+
import {RpcConnectionContext, RpcErrors} from "../src/index.js"
|
|
4
|
+
import {IncomingMessage} from "http"
|
|
4
5
|
|
|
5
6
|
describe("Misc", () => {
|
|
6
7
|
it("Send array in parameter", async () => {
|
|
@@ -204,4 +205,38 @@ describe("Misc", () => {
|
|
|
204
205
|
|
|
205
206
|
assert.deepEqual(param, {param1: "yes1"})
|
|
206
207
|
})
|
|
208
|
+
|
|
209
|
+
it("pass headers to server", async () => {
|
|
210
|
+
let userName: string | undefined
|
|
211
|
+
|
|
212
|
+
const services = await startTestServer(
|
|
213
|
+
{
|
|
214
|
+
async hello1(ctx?) {
|
|
215
|
+
userName = ctx.userName
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
async createConnectionContext(
|
|
220
|
+
req: IncomingMessage
|
|
221
|
+
): Promise<RpcConnectionContext & {userName: string}> {
|
|
222
|
+
return {
|
|
223
|
+
clientId: "test",
|
|
224
|
+
userName: req.headers["x-user-name"] as string,
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
const remote = await createTestClient<typeof services>({
|
|
231
|
+
async getHeaders() {
|
|
232
|
+
return {
|
|
233
|
+
["X-User-Name"]: "testUser",
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
await remote.hello1()
|
|
239
|
+
|
|
240
|
+
assert.equal(userName, "testUser")
|
|
241
|
+
})
|
|
207
242
|
})
|