@asyncswap/jsonrpc 0.4.5 → 0.4.7
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/CHANGELOG.md +12 -0
- package/README.md +8 -1
- package/dist/client.d.ts +4 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/server.d.ts +6 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js.map +1 -1
- package/example.ts +2 -2
- package/package.json +1 -1
- package/src/client.ts +20 -9
- package/src/server.ts +31 -11
- package/src/types/request.d.ts +9 -3
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -53,9 +53,16 @@ await client.notify('log', ['Hello world']);
|
|
|
53
53
|
|
|
54
54
|
#### Methods
|
|
55
55
|
|
|
56
|
-
- `register(method: string, handler: Handler<
|
|
56
|
+
- `register<Result>(method: string, handler: Handler<Result>)` - Register a method handler
|
|
57
57
|
- `handle(request: any)` - Process a JSON-RPC request
|
|
58
58
|
|
|
59
|
+
***Types***:
|
|
60
|
+
|
|
61
|
+
- `type Handler<Params, Result> = (params: Params) => Promise<Result>` - type of rpc function dispatched on the server.
|
|
62
|
+
- `type JsonRpcResponse<Result, ErrorCode> =
|
|
63
|
+
| JsonRpcSuccess<Result>
|
|
64
|
+
| JsonRpcError<ErrorCode>;` - JSON-RPC response type returns either a result or error.
|
|
65
|
+
|
|
59
66
|
#### Error Codes
|
|
60
67
|
|
|
61
68
|
```typescript
|
package/dist/client.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export declare class JsonRpcClient {
|
|
1
|
+
export declare class JsonRpcClient<MethodsSpec extends RpcSpecBase> {
|
|
2
2
|
private url;
|
|
3
3
|
private id;
|
|
4
4
|
constructor(url: string);
|
|
5
|
-
call<Result = unknown, E = unknown>(request: JsonRpcRequest | JsonRpcRequest[], headers?: Record<string, string>): Promise<Result | Result[] | E>;
|
|
6
|
-
buildRequest(method:
|
|
5
|
+
call<Method extends keyof MethodsSpec, Result = unknown, E = unknown>(request: JsonRpcRequest<Method, MethodsSpec[Method]["params"]> | JsonRpcRequest<Method, MethodsSpec[Method]["params"]>[], headers?: Record<string, string>): Promise<Result | Result[] | E>;
|
|
6
|
+
buildRequest<Method extends keyof MethodsSpec>(method: Method, params: MethodsSpec[Method]["params"]): JsonRpcRequest<Method, MethodsSpec[Method]["params"]>;
|
|
7
7
|
private request;
|
|
8
|
-
notify(method:
|
|
8
|
+
notify<Method extends keyof MethodsSpec>(method: Method, params?: MethodsSpec[Method]["params"]): Promise<void>;
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa,CAAC,WAAW,SAAS,WAAW;IAG7C,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,EAAE,CAAK;gBAEK,GAAG,EAAE,MAAM;IAEzB,IAAI,CAAC,MAAM,SAAS,MAAM,WAAW,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EACzE,OAAO,EACJ,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,GACrD,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAC1D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;IAgBjC,YAAY,CAAC,MAAM,SAAS,MAAM,WAAW,EAC5C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GACnC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;YAS1C,OAAO;IAoCf,MAAM,CAAC,MAAM,SAAS,MAAM,WAAW,EAC5C,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;CAavC"}
|
package/dist/client.js
CHANGED
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,OAAO,aAAa;IAGL;IAFZ,EAAE,GAAG,CAAC,CAAC;IAEf,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAI,CAAC;IAEpC,KAAK,CAAC,IAAI,CACT,OAE0D,EAC1D,OAAgC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC,KAAU,CAAC;QAC5B,CAAC;QACD,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,MAAgB,CAAC;QAClC,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,QAAoB,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,2CAA2C;YAC3C,OAAO,QAAQ,CAAC;QACjB,CAAC;IACF,CAAC;IAED,YAAY,CACX,MAAc,EACd,MAAqC;QAErC,OAAO;YACN,OAAO,EAAE,KAAK;YACd,MAAM;YACN,MAAM;YACN,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;SACb,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CACpB,GAE0D,EAC1D,aAAsC;QAItC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC;YACJ,MAAM,OAAO,GAA2B;gBACvC,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;aACxB,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACjC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;gBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;aACzB,CAAC,CAAC;YAEH,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAEa,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACN,IAAI,EAAE,gBAAgB,CAAC,cAAc;oBACrC,OAAO,EAAE,mBAAmB,GAAG,EAAE;iBACjC;gBACD,EAAE,EAAE,IAAI;aACR,CAAC;QACH,CAAC;IACF,CAAC;IAED,KAAK,CAAC,MAAM,CACX,MAAc,EACd,MAAsC;QAEtC,MAAM,OAAO,GAA0D;YACtE,OAAO,EAAE,KAAK;YACd,MAAM;YACN,MAAM;SACN,CAAC;QACF,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC7B,CAAC,CAAC;IACJ,CAAC;CACD"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { JsonRpcErrorCode } from "./error";
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
type RpcParams = readonly unknown[] | undefined;
|
|
3
|
+
export type Handler<Params extends RpcParams, Result> = (params: Params) => Promise<Result>;
|
|
4
|
+
export declare class JsonRpcServer<MethodsSpec extends RpcSpecBase> {
|
|
4
5
|
private methods;
|
|
5
|
-
register(method:
|
|
6
|
-
handle<Result>(raw: unknown): Promise<JsonRpcResponse<Result, JsonRpcErrorCode | number> | JsonRpcResponse<Result, JsonRpcErrorCode | number>[] | null>;
|
|
6
|
+
register<Method extends keyof MethodsSpec, Params extends MethodsSpec[Method]["params"], Result>(method: Method, handler: Handler<Params, Result>): void;
|
|
7
|
+
handle<Method extends keyof MethodsSpec, Params extends MethodsSpec[Method]["params"], Result>(raw: unknown): Promise<JsonRpcResponse<Result, JsonRpcErrorCode | number> | JsonRpcResponse<Result, JsonRpcErrorCode | number>[] | null>;
|
|
7
8
|
private error;
|
|
8
9
|
}
|
|
10
|
+
export {};
|
|
9
11
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,SAAS,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;AAEhD,MAAM,MAAM,OAAO,CAAC,MAAM,SAAS,SAAS,EAAE,MAAM,IAAI,CACvD,MAAM,EAAE,MAAM,KACV,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,qBAAa,aAAa,CAAC,WAAW,SAAS,WAAW;IACzD,OAAO,CAAC,OAAO,CAGX;IAEJ,QAAQ,CACP,MAAM,SAAS,MAAM,WAAW,EAChC,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAC5C,MAAM,EACL,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IAI5C,MAAM,CACX,MAAM,SAAS,MAAM,WAAW,EAChC,MAAM,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAC5C,MAAM,EAEN,GAAG,EAAE,OAAO,GACV,OAAO,CACP,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,GAClD,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,EAAE,GACpD,IAAI,CACN;IAsED,OAAO,CAAC,KAAK;CAgBb"}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/example.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { JsonRpcServer } from "./src";
|
|
|
2
2
|
|
|
3
3
|
const server = new JsonRpcServer();
|
|
4
4
|
|
|
5
|
-
server.register("add", ([a, b]: [number, number]) => a + b);
|
|
6
|
-
server.register("ping", () => "pong");
|
|
5
|
+
server.register("add", async ([a, b]: [number, number]) => a + b);
|
|
6
|
+
server.register("ping", async () => "pong");
|
|
7
7
|
|
|
8
8
|
Bun.serve({
|
|
9
9
|
port: 4444,
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { JsonRpcErrorCode } from "./error";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
export class JsonRpcClient<MethodsSpec extends RpcSpecBase> {
|
|
3
4
|
private id = 0;
|
|
4
5
|
|
|
5
6
|
constructor(private url: string) { }
|
|
6
7
|
|
|
7
|
-
async call<Result = unknown, E = unknown>(
|
|
8
|
-
request:
|
|
8
|
+
async call<Method extends keyof MethodsSpec, Result = unknown, E = unknown>(
|
|
9
|
+
request:
|
|
10
|
+
| JsonRpcRequest<Method, MethodsSpec[Method]["params"]>
|
|
11
|
+
| JsonRpcRequest<Method, MethodsSpec[Method]["params"]>[],
|
|
9
12
|
headers?: Record<string, string>,
|
|
10
13
|
): Promise<Result | Result[] | E> {
|
|
11
14
|
const response = await this.request(request, headers);
|
|
@@ -23,17 +26,22 @@ export class JsonRpcClient {
|
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
buildRequest
|
|
29
|
+
buildRequest<Method extends keyof MethodsSpec>(
|
|
30
|
+
method: Method,
|
|
31
|
+
params: MethodsSpec[Method]["params"],
|
|
32
|
+
): JsonRpcRequest<Method, MethodsSpec[Method]["params"]> {
|
|
27
33
|
return {
|
|
28
|
-
jsonrpc: "2.0"
|
|
34
|
+
jsonrpc: "2.0",
|
|
29
35
|
method,
|
|
30
36
|
params,
|
|
31
37
|
id: ++this.id,
|
|
32
38
|
};
|
|
33
39
|
}
|
|
34
40
|
|
|
35
|
-
private async request(
|
|
36
|
-
req:
|
|
41
|
+
private async request<Method extends keyof MethodsSpec>(
|
|
42
|
+
req:
|
|
43
|
+
| JsonRpcRequest<Method, MethodsSpec[Method]["params"]>
|
|
44
|
+
| JsonRpcRequest<Method, MethodsSpec[Method]["params"]>[],
|
|
37
45
|
customHeaders?: Record<string, string>,
|
|
38
46
|
): Promise<
|
|
39
47
|
JsonRpcResponse<unknown, number> | JsonRpcResponse<unknown, number>[]
|
|
@@ -66,8 +74,11 @@ export class JsonRpcClient {
|
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
|
|
69
|
-
async notify
|
|
70
|
-
|
|
77
|
+
async notify<Method extends keyof MethodsSpec>(
|
|
78
|
+
method: Method,
|
|
79
|
+
params?: MethodsSpec[Method]["params"],
|
|
80
|
+
) {
|
|
81
|
+
const request: JsonRpcRequest<Method, MethodsSpec[Method]["params"]> = {
|
|
71
82
|
jsonrpc: "2.0",
|
|
72
83
|
method,
|
|
73
84
|
params,
|
package/src/server.ts
CHANGED
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
import { JsonRpcErrorCode } from "./error";
|
|
2
|
-
export type Handler<Result> = (params: any) => any | Promise<Result>;
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
private methods = new Map<string, Handler<any>>();
|
|
3
|
+
type RpcParams = readonly unknown[] | undefined;
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export type Handler<Params extends RpcParams, Result> = (
|
|
6
|
+
params: Params,
|
|
7
|
+
) => Promise<Result>;
|
|
8
|
+
|
|
9
|
+
export class JsonRpcServer<MethodsSpec extends RpcSpecBase> {
|
|
10
|
+
private methods = new Map<
|
|
11
|
+
keyof MethodsSpec,
|
|
12
|
+
Handler<MethodsSpec[keyof MethodsSpec]["params"], any>
|
|
13
|
+
>();
|
|
14
|
+
|
|
15
|
+
register<
|
|
16
|
+
Method extends keyof MethodsSpec,
|
|
17
|
+
Params extends MethodsSpec[Method]["params"],
|
|
18
|
+
Result,
|
|
19
|
+
>(method: Method, handler: Handler<Params, Result>) {
|
|
20
|
+
this.methods.set(method, handler as any);
|
|
9
21
|
}
|
|
10
22
|
|
|
11
|
-
async handle<
|
|
23
|
+
async handle<
|
|
24
|
+
Method extends keyof MethodsSpec,
|
|
25
|
+
Params extends MethodsSpec[Method]["params"],
|
|
26
|
+
Result,
|
|
27
|
+
>(
|
|
12
28
|
raw: unknown,
|
|
13
29
|
): Promise<
|
|
14
30
|
| JsonRpcResponse<Result, JsonRpcErrorCode | number>
|
|
@@ -33,7 +49,7 @@ export class JsonRpcServer {
|
|
|
33
49
|
}
|
|
34
50
|
|
|
35
51
|
// handle single response
|
|
36
|
-
const req = raw as Partial<JsonRpcRequest
|
|
52
|
+
const req = raw as Partial<JsonRpcRequest<Method, Params>>;
|
|
37
53
|
|
|
38
54
|
if (
|
|
39
55
|
typeof req !== "object" ||
|
|
@@ -55,7 +71,7 @@ export class JsonRpcServer {
|
|
|
55
71
|
? (req as any).id
|
|
56
72
|
: null;
|
|
57
73
|
|
|
58
|
-
const handler = this.methods.get(req.method);
|
|
74
|
+
const handler = this.methods.get(req.method as Method);
|
|
59
75
|
if (!handler) {
|
|
60
76
|
return id === null
|
|
61
77
|
? null
|
|
@@ -67,7 +83,7 @@ export class JsonRpcServer {
|
|
|
67
83
|
}
|
|
68
84
|
|
|
69
85
|
try {
|
|
70
|
-
const result = await handler(req.params);
|
|
86
|
+
const result = await handler(req.params as Params);
|
|
71
87
|
if (req.id === undefined) return null; // notification
|
|
72
88
|
return {
|
|
73
89
|
jsonrpc: "2.0",
|
|
@@ -84,8 +100,12 @@ export class JsonRpcServer {
|
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
102
|
|
|
87
|
-
private error<
|
|
88
|
-
|
|
103
|
+
private error<
|
|
104
|
+
Method extends keyof MethodsSpec,
|
|
105
|
+
Params extends MethodsSpec[Method]["params"],
|
|
106
|
+
Result,
|
|
107
|
+
>(
|
|
108
|
+
id: JsonRpcRequest<Method, Params>["id"],
|
|
89
109
|
code: JsonRpcErrorCode | number,
|
|
90
110
|
message: string,
|
|
91
111
|
data?: unknown,
|
package/src/types/request.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
declare global {
|
|
2
|
-
export
|
|
2
|
+
export type RpcMethodSpec = {
|
|
3
|
+
params: readonly unknown[];
|
|
4
|
+
result: unknown;
|
|
5
|
+
};
|
|
6
|
+
export type RpcSpecBase = Record<Method, RpcMethodSpec>;
|
|
7
|
+
|
|
8
|
+
export interface JsonRpcRequest<Method, Params extends readonly unknown[]> {
|
|
3
9
|
jsonrpc: "2.0";
|
|
4
|
-
method:
|
|
5
|
-
params?:
|
|
10
|
+
method: Method;
|
|
11
|
+
params?: Params;
|
|
6
12
|
id?: JsonRpcId;
|
|
7
13
|
}
|
|
8
14
|
}
|