@push-rpc/next 2.0.22 → 2.0.24
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 +2 -6
- package/dist/client/HttpClient.js +5 -3
- package/dist/client/HttpClient.js.map +1 -1
- package/dist/server/RpcServerImpl.js +3 -1
- package/dist/server/RpcServerImpl.js.map +1 -1
- package/dist/server/http.js +2 -3
- package/dist/server/http.js.map +1 -1
- package/package.json +1 -1
- package/src/client/HttpClient.ts +8 -5
- package/src/server/RpcServerImpl.ts +4 -2
- package/src/server/http.ts +6 -4
- package/tests/calls.ts +109 -4
- package/tests/misc.ts +2 -2
package/README.md
CHANGED
|
@@ -20,12 +20,6 @@ Extra:
|
|
|
20
20
|
- Throttling for subscriptions.
|
|
21
21
|
- Broken WS connection detection & auto-reconnecting.
|
|
22
22
|
|
|
23
|
-
## History note!
|
|
24
|
-
|
|
25
|
-
Initially this project supported WS-only communication akin to OCPP-J protocol for EV charging stations.
|
|
26
|
-
Since that, library for OCPP-J was extracted to a separate project and this project was reworked to focus on generic
|
|
27
|
-
client/server communication.
|
|
28
|
-
|
|
29
23
|
## Getting Started
|
|
30
24
|
|
|
31
25
|
```
|
|
@@ -154,6 +148,8 @@ There are the types of messages that can be sent from client to server:
|
|
|
154
148
|
`X-Rpc-Client-Id` header is used to identify caller clients. In can be used for session tracking. Client ID is
|
|
155
149
|
available at server side in the context.
|
|
156
150
|
|
|
151
|
+
In addition, GET method can be used to make a call without arguments.
|
|
152
|
+
|
|
157
153
|
2. **Subscribe** - a request to subscribe to a remote function updates. Implemented as HTTP PUT request. URL contains
|
|
158
154
|
the remote function name. Body contains JSON-encoded list of arguments. Response is JSON-encoded result of the
|
|
159
155
|
function.
|
|
@@ -36,13 +36,14 @@ class HttpClient {
|
|
|
36
36
|
signal,
|
|
37
37
|
});
|
|
38
38
|
finished();
|
|
39
|
-
|
|
39
|
+
const hasError = response.headers.has("x-error");
|
|
40
|
+
if (!hasError && response.status == 204) {
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
42
43
|
const contentType = response.headers.get("content-type");
|
|
43
44
|
const text = await response.text();
|
|
44
45
|
const res = contentType && contentType.includes("application/json") ? (0, json_js_1.safeParseJson)(text) : text;
|
|
45
|
-
if (response.status < 200 || response.status >= 300) {
|
|
46
|
+
if (hasError || response.status < 200 || response.status >= 300) {
|
|
46
47
|
const error = new Error(response.headers.get("x-error") ?? undefined);
|
|
47
48
|
Object.assign(error, { code: response.status });
|
|
48
49
|
if (typeof res == "object") {
|
|
@@ -55,8 +56,9 @@ class HttpClient {
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
catch (e) {
|
|
59
|
+
e.remoteUrl = itemUrl;
|
|
58
60
|
if (e.message == "Error" || !e.message) {
|
|
59
|
-
e.message
|
|
61
|
+
delete e.message;
|
|
60
62
|
}
|
|
61
63
|
if (e.message == "fetch failed" && e.cause) {
|
|
62
64
|
e = e.cause;
|
|
@@ -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,EAChB,UAAiD;QAFjD,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAuC;
|
|
1
|
+
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,7 +50,9 @@ class RpcServerImpl {
|
|
|
50
50
|
return await this.invokeLocalFunction(connectionContext, itemName, item, parameters, rpc_js_1.InvocationType.Call);
|
|
51
51
|
}
|
|
52
52
|
catch (e) {
|
|
53
|
-
|
|
53
|
+
if (e.code != 200) {
|
|
54
|
+
logger_js_1.log.error(`Cannot call item ${itemName}.`, e);
|
|
55
|
+
}
|
|
54
56
|
throw e;
|
|
55
57
|
}
|
|
56
58
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mEAA0D;AAC1D,gDAAuB;AAEvB,uCAA0C;AAC1C,sCAQkB;AAClB,4CAAgC;AAChC,0DAAsD;AACtD,yCAA6D;AAC7D,8CAA6D;AAE7D,MAAa,aAAa;IACxB,YACmB,QAAW,EACX,OAAkC;QADlC,aAAQ,GAAR,QAAQ,CAAG;QACX,YAAO,GAAP,OAAO,CAA2B;QA4FpC,uBAAkB,GAAG,IAAI,0CAAkB,EAAE,CAAA;QACtD,sBAAiB,GAA6B,IAAI,CAAA;QAGlD,SAAI,GAAG,KAAK,EAClB,iBAAuC,EACvC,QAAgB,EAChB,UAAqB,EACH,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,iBAAQ,CAAC,kBAAS,CAAC,QAAQ,EAAE,QAAQ,QAAQ,YAAY,CAAC,CAAA;YACtE,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,mBAAmB,CACnC,iBAAiB,EACjB,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,uBAAc,CAAC,IAAI,CACpB,CAAA;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"RpcServerImpl.js","sourceRoot":"","sources":["../../src/server/RpcServerImpl.ts"],"names":[],"mappings":"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"}
|
package/dist/server/http.js
CHANGED
|
@@ -19,6 +19,7 @@ async function serveHttpRequest(req, res, path, hooks, createConnectionContext)
|
|
|
19
19
|
}
|
|
20
20
|
let result;
|
|
21
21
|
switch (req.method) {
|
|
22
|
+
case "GET":
|
|
22
23
|
case "POST":
|
|
23
24
|
result = await hooks.call(ctx, itemName, body);
|
|
24
25
|
break;
|
|
@@ -51,9 +52,7 @@ async function serveHttpRequest(req, res, path, hooks, createConnectionContext)
|
|
|
51
52
|
catch (e) {
|
|
52
53
|
if (e.code && typeof e.code == "number" && e.code >= 100 && e.code < 600) {
|
|
53
54
|
res.statusCode = e.code;
|
|
54
|
-
|
|
55
|
-
res.setHeader("X-Error", e["message"]);
|
|
56
|
-
}
|
|
55
|
+
res.setHeader("X-Error", e["message"] ?? "");
|
|
57
56
|
const { code, message, stack, ...rest } = e;
|
|
58
57
|
if (Object.keys(rest).length > 0) {
|
|
59
58
|
res.setHeader("Content-Type", "application/json");
|
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;AAChC,kDAAoD;AAE7C,KAAK,UAAU,gBAAgB,CACpC,GAAoB,EACpB,GAAmB,EACnB,IAAY,EACZ,KAAsB,EACtB,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client/HttpClient.ts
CHANGED
|
@@ -6,8 +6,7 @@ export class HttpClient {
|
|
|
6
6
|
private url: string,
|
|
7
7
|
private clientId: string,
|
|
8
8
|
private getHeaders: () => Promise<Record<string, string>>,
|
|
9
|
-
) {
|
|
10
|
-
}
|
|
9
|
+
) {}
|
|
11
10
|
|
|
12
11
|
async call(itemName: string, params: unknown[], callTimeout: number): Promise<unknown> {
|
|
13
12
|
return this.httpRequest("POST", itemName, params, callTimeout, await this.getHeaders())
|
|
@@ -50,7 +49,9 @@ export class HttpClient {
|
|
|
50
49
|
|
|
51
50
|
finished()
|
|
52
51
|
|
|
53
|
-
|
|
52
|
+
const hasError = response.headers.has("x-error")
|
|
53
|
+
|
|
54
|
+
if (!hasError && response.status == 204) {
|
|
54
55
|
return
|
|
55
56
|
}
|
|
56
57
|
|
|
@@ -61,7 +62,7 @@ export class HttpClient {
|
|
|
61
62
|
const res =
|
|
62
63
|
contentType && contentType.includes("application/json") ? safeParseJson(text) : text
|
|
63
64
|
|
|
64
|
-
if (response.status < 200 || response.status >= 300) {
|
|
65
|
+
if (hasError || response.status < 200 || response.status >= 300) {
|
|
65
66
|
const error = new Error(response.headers.get("x-error") ?? undefined)
|
|
66
67
|
|
|
67
68
|
Object.assign(error, {code: response.status})
|
|
@@ -75,8 +76,10 @@ export class HttpClient {
|
|
|
75
76
|
return res
|
|
76
77
|
}
|
|
77
78
|
} catch (e: any) {
|
|
79
|
+
e.remoteUrl = itemUrl
|
|
80
|
+
|
|
78
81
|
if (e.message == "Error" || !e.message) {
|
|
79
|
-
e.message
|
|
82
|
+
delete e.message
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
if (e.message == "fetch failed" && e.cause) {
|
|
@@ -135,8 +135,10 @@ export class RpcServerImpl<S extends Services<S>, C extends RpcContext> implemen
|
|
|
135
135
|
parameters,
|
|
136
136
|
InvocationType.Call,
|
|
137
137
|
)
|
|
138
|
-
} catch (e) {
|
|
139
|
-
|
|
138
|
+
} catch (e: any) {
|
|
139
|
+
if (e.code != 200) {
|
|
140
|
+
log.error(`Cannot call item ${itemName}.`, e)
|
|
141
|
+
}
|
|
140
142
|
throw e
|
|
141
143
|
}
|
|
142
144
|
}
|
package/src/server/http.ts
CHANGED
|
@@ -10,7 +10,10 @@ export async function serveHttpRequest(
|
|
|
10
10
|
res: ServerResponse,
|
|
11
11
|
path: string,
|
|
12
12
|
hooks: HttpServerHooks,
|
|
13
|
-
createConnectionContext: (
|
|
13
|
+
createConnectionContext: (
|
|
14
|
+
req: IncomingMessage,
|
|
15
|
+
res: ServerResponse,
|
|
16
|
+
) => Promise<RpcConnectionContext>,
|
|
14
17
|
) {
|
|
15
18
|
// if port is in options - response 404 on other URLs
|
|
16
19
|
// oherwise just handle request
|
|
@@ -31,6 +34,7 @@ export async function serveHttpRequest(
|
|
|
31
34
|
|
|
32
35
|
let result: unknown
|
|
33
36
|
switch (req.method) {
|
|
37
|
+
case "GET":
|
|
34
38
|
case "POST":
|
|
35
39
|
result = await hooks.call(ctx, itemName, body)
|
|
36
40
|
break
|
|
@@ -66,9 +70,7 @@ export async function serveHttpRequest(
|
|
|
66
70
|
if (e.code && typeof e.code == "number" && e.code >= 100 && e.code < 600) {
|
|
67
71
|
res.statusCode = e.code
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
res.setHeader("X-Error", e["message"])
|
|
71
|
-
}
|
|
73
|
+
res.setHeader("X-Error", e["message"] ?? "")
|
|
72
74
|
const {code, message, stack, ...rest} = e
|
|
73
75
|
if (Object.keys(rest).length > 0) {
|
|
74
76
|
res.setHeader("Content-Type", "application/json")
|
package/tests/calls.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {assert} from "chai"
|
|
2
|
-
import {createTestClient, startTestServer} from "./testUtils.js"
|
|
3
|
-
import {CallOptions, RpcErrors} from "../src/index.js"
|
|
2
|
+
import {createTestClient, startTestServer, TEST_PORT} from "./testUtils.js"
|
|
3
|
+
import {CallOptions, RpcError, RpcErrors} from "../src/index.js"
|
|
4
4
|
import {adelay} from "../src/utils/promises.js"
|
|
5
5
|
|
|
6
6
|
describe("calls", () => {
|
|
@@ -29,7 +29,7 @@ describe("calls", () => {
|
|
|
29
29
|
assert.deepEqual(r, resp)
|
|
30
30
|
})
|
|
31
31
|
|
|
32
|
-
it("error", async () => {
|
|
32
|
+
it("error transferred", async () => {
|
|
33
33
|
const message = "bla"
|
|
34
34
|
|
|
35
35
|
const services = await startTestServer({
|
|
@@ -46,11 +46,98 @@ describe("calls", () => {
|
|
|
46
46
|
await client.test.getSomething()
|
|
47
47
|
assert.fail()
|
|
48
48
|
} catch (e: any) {
|
|
49
|
-
console.log(e)
|
|
50
49
|
assert.equal(e.message, message)
|
|
51
50
|
}
|
|
52
51
|
})
|
|
53
52
|
|
|
53
|
+
it("error with extra fields and status", async () => {
|
|
54
|
+
const services = await startTestServer({
|
|
55
|
+
test: {
|
|
56
|
+
async getSomething() {
|
|
57
|
+
const error: any = new RpcError(401, "Forbidden")
|
|
58
|
+
error["extra"] = "yes"
|
|
59
|
+
throw error
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
const client = await createTestClient<typeof services>()
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
await client.test.getSomething()
|
|
68
|
+
assert.fail()
|
|
69
|
+
} catch (e: any) {
|
|
70
|
+
assert.equal(e.message, "Forbidden")
|
|
71
|
+
assert.equal(e.code, 401)
|
|
72
|
+
assert.equal(e.extra, "yes")
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// validate HTTP status
|
|
76
|
+
const response = await fetch(`http://127.0.0.1:${TEST_PORT}/rpc/test/getSomething`, {
|
|
77
|
+
method: "POST",
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
assert.equal(response.status, 401)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it("error with 200 status", async () => {
|
|
84
|
+
const services = await startTestServer({
|
|
85
|
+
test: {
|
|
86
|
+
async getSomething() {
|
|
87
|
+
// also, should not be logged
|
|
88
|
+
throw new RpcError(200, "Wrong!")
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
const client = await createTestClient<typeof services>()
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
await client.test.getSomething()
|
|
97
|
+
assert.fail("Expecting to fail")
|
|
98
|
+
} catch (e: any) {
|
|
99
|
+
assert.equal(e.message, "Wrong!")
|
|
100
|
+
assert.equal(e.code, 200)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// validate HTTP status
|
|
104
|
+
const response = await fetch(`http://127.0.0.1:${TEST_PORT}/rpc/test/getSomething`, {
|
|
105
|
+
method: "POST",
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
assert.equal(response.status, 200)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it("error with 200 status and empty message", async () => {
|
|
112
|
+
const services = await startTestServer({
|
|
113
|
+
test: {
|
|
114
|
+
async getSomething() {
|
|
115
|
+
const error: any = new RpcError(200)
|
|
116
|
+
error["extra"] = "yes"
|
|
117
|
+
throw error
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
const client = await createTestClient<typeof services>()
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
await client.test.getSomething()
|
|
126
|
+
assert.fail()
|
|
127
|
+
} catch (e: any) {
|
|
128
|
+
assert.isNotOk(e.message)
|
|
129
|
+
assert.equal(e.code, 200)
|
|
130
|
+
assert.equal(e.extra, "yes")
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// validate HTTP status
|
|
134
|
+
const response = await fetch(`http://127.0.0.1:${TEST_PORT}/rpc/test/getSomething`, {
|
|
135
|
+
method: "POST",
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
assert.equal(response.status, 200)
|
|
139
|
+
})
|
|
140
|
+
|
|
54
141
|
it("timeout", async () => {
|
|
55
142
|
const callTimeout = 200
|
|
56
143
|
|
|
@@ -169,6 +256,24 @@ describe("calls", () => {
|
|
|
169
256
|
const r = await client.obj.hello()
|
|
170
257
|
assert.equal("yes", r)
|
|
171
258
|
})
|
|
259
|
+
|
|
260
|
+
it("GET to call with no params", async () => {
|
|
261
|
+
let gotParams: unknown[]
|
|
262
|
+
|
|
263
|
+
await startTestServer({
|
|
264
|
+
obj: {
|
|
265
|
+
async hello(...params) {
|
|
266
|
+
gotParams = params
|
|
267
|
+
return "yes"
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
const r = await fetch(`http://127.0.0.1:${TEST_PORT}/rpc/obj/hello`)
|
|
273
|
+
|
|
274
|
+
assert.equal(gotParams!.length, 1) // context only
|
|
275
|
+
assert.equal(await r.text(), "yes")
|
|
276
|
+
})
|
|
172
277
|
})
|
|
173
278
|
|
|
174
279
|
abstract class A {
|
package/tests/misc.ts
CHANGED
|
@@ -217,14 +217,14 @@ describe("Misc", () => {
|
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
async createConnectionContext(
|
|
220
|
-
req: IncomingMessage
|
|
220
|
+
req: IncomingMessage,
|
|
221
221
|
): Promise<RpcConnectionContext & {userName: string}> {
|
|
222
222
|
return {
|
|
223
223
|
clientId: "test",
|
|
224
224
|
userName: req.headers["x-user-name"] as string,
|
|
225
225
|
}
|
|
226
226
|
},
|
|
227
|
-
}
|
|
227
|
+
},
|
|
228
228
|
)
|
|
229
229
|
|
|
230
230
|
const remote = await createTestClient<typeof services>({
|