@@ -8,92 +8,55 @@ A strictly typed json-rpc(2.0) implementation, zero dependency, minimal abstract
8
8
9
9
> Specification < https://www.jsonrpc.org/specification >
10
10
11
- ``` ts
12
- const methodSet = {
13
- upper : (str : string ) => str .toUpperCase (),
14
- lower : (str : string ) => str .toLowerCase (),
15
- plus : ([a , b ]: [number , number ]) => a + b ,
16
- minus : ([a , b ]: [number , number ]) => a - b ,
17
- }
18
-
19
- // initialize all methods with the constructor
20
- const server = new JSONRPCServer (methodSet )
21
-
22
- // or add methods manually
23
- const server = new JSONRPCServer <typeof methodSet >()
24
- server .setMethod (' upper' , methodSet .upper )
25
- server .setMethod (' lower' , methodSet .lower )
26
- server .setMethod (' plus' , methodSet .plus )
27
- server .setMethod (' minus' , methodSet .minus )
28
-
29
- // (optional) provide a generic parameter to enable ts check
30
- const client = new JSONRPCClient <typeof methodSet >((json ) =>
31
- server .process (json )
32
- )
33
-
34
- // request, Notification and batch are always async
35
- assertEquals (await client .request (' upper' , ' hello' ), ' HELLO' )
36
-
37
- assertEquals (
38
- await client .batch (
39
- client .createRequest (' upper' , ' nihao' ),
40
- // Notification does not have response, even when response errors
41
- client .createNotification (' upper' ),
42
- client .createRequest (' upper' , ' shijie' ),
43
- client .createRequest (' plus' , [1 , 1 ]),
44
- ),
45
- [
46
- {
47
- status: ' fulfilled' ,
48
- value: ' NIHAO' ,
49
- },
50
- {
51
- status: ' fulfilled' ,
52
- value: ' SHIJIE' ,
53
- },
54
- {
55
- status: ' fulfilled' ,
56
- value: 2 ,
57
- },
58
- ],
59
- )
60
- ```
61
-
62
11
Example to use the client
63
12
64
13
``` ts
65
- const client = new JSONRPCClient (( json ) =>
14
+ const requestForResponse = ( json : string ) =>
66
15
fetch (' http://localhost:6800/jsonrpc' , {
67
16
method: ' POST' ,
68
17
body: json ,
69
18
}).then ((res ) => res .text ())
70
- )
71
19
72
- const aria2cMethods = await client .request (' system.listMethods' )
20
+ const client = new JSONRPCClient <{
21
+ ' aria2.addUri' : (
22
+ urls : string [],
23
+ options ? : object ,
24
+ position ? : number ,
25
+ ) => string
26
+ ' aria2.remove' : (gid : string ) => string
27
+ ' system.listMethods' : () => string []
28
+ }>(requestForResponse )
29
+
30
+ const resultGid: string = await client .request (' aria2.addUri' , [
31
+ [' https://example.net/index.html' ],
32
+ {},
33
+ 0 ,
34
+ ])
73
35
```
74
36
75
37
Example to use the server
76
38
77
39
``` ts
78
- const server = new JSONRPCServer ()
40
+ const server = new JSONRPCServer ({
41
+ upper : (str : string ) => str .toUpperCase (),
42
+ lower : (str : string ) => str .toLowerCase (),
43
+ plus : ([a , b ]: [number , number ]) => a + b ,
44
+ minus : ([a , b ]: [number , number ]) => a - b ,
45
+ })
79
46
47
+ // or:
80
48
server .setMethod (' trim' , (str : string ) => str .trim ())
81
49
server .setMethod (' trimStart' , (str : string ) => str .trimStart ())
82
50
server .setMethod (' trimEnd' , (str : string ) => str .trimEnd ())
83
51
84
52
const httpServer = Deno .serve (
85
53
async (request ) => {
86
- const url = new URL (request .url )
87
- if (url .pathname === ' /jsonrpc' ) {
88
- return new Response (
89
- // server.process() accept string and returns Promise<string>
90
- await server .process (await request .text ()),
91
- {
92
- headers: { ' content-type' : ' application/json' },
93
- },
94
- )
95
- }
96
- return new Response (' 404' , { status: 404 })
54
+ // server.handleRequest() accept string and returns Promise<string>
55
+ const jsonString = await server .handleRequest (await request .text ())
56
+
57
+ return new Response (jsonString , {
58
+ headers: { ' content-type' : ' application/json' },
59
+ })
97
60
},
98
61
)
99
62
```
0 commit comments