@hazae41/jsonrpc 1.0.0 → 1.0.1

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 CHANGED
@@ -15,4 +15,66 @@ npm i @hazae41/jsonrpc
15
15
  - No external dependencies
16
16
  - Rust-like patterns
17
17
  - Uses `@hazae41/result`
18
- - Specification compliant
18
+ - Specification compliant
19
+
20
+ ## Usage
21
+
22
+ ### Request over HTTP
23
+
24
+ ```tsx
25
+ import { RpcCounter } from "@hazae41/jsonrpc"
26
+
27
+ /**
28
+ * Assign an incremental id to a request
29
+ */
30
+ const counter = new RpcCounter()
31
+ const request = counter.prepare({ method: "hello_world", params: ["hello"] })
32
+
33
+ /**
34
+ * JSON-stringify and send the request using your preferred transport
35
+ */
36
+ const body = JSON.stringify(request)
37
+ const headers = { "Content-Type": "application/json" }
38
+ const res = await fetch("https://example.com", { body })
39
+
40
+ /**
41
+ * JSON-parse the response and unwrap it
42
+ */
43
+ const response = RpcResponse.from<string>(await res.json()) // RpcOk<string> | RpcErr
44
+ const data = response.unwrap() // string
45
+ console.log(data) // "world"
46
+ ```
47
+
48
+ ### Handle requests
49
+
50
+ ```tsx
51
+ /**
52
+ * Handle JSON requests and returns a JSON response
53
+ */
54
+ function onMessage(message: string): string {
55
+ const request = JSON.parse(message) as RpcRequestInit<unknown>
56
+ const result = onRequest(request)
57
+ const response = RpcResponse.rewrap(request.id, result)
58
+ return JSON.stringify(response)
59
+ }
60
+
61
+ /**
62
+ * Route requests and returns a result
63
+ */
64
+ function onRequest(request: RpcRequestPreinit<unknown>): Result<unknown, Error> {
65
+ if (request.method === "hello_world")
66
+ return onHelloWorld(request)
67
+ return new Err(new RpcMethodNotFoundError())
68
+ }
69
+
70
+ /**
71
+ * Handle "hello_world" requests
72
+ */
73
+ function onHelloWorld(request: RpcRequestPreinit<unknown>): Result<string, RpcInvalidParamsError> {
74
+ const [hello] = (request as RpcRequestInit<[string]>).params
75
+
76
+ if (hello === "hello")
77
+ return new Ok("world")
78
+ return new Err(new RpcInvalidParamsError())
79
+ }
80
+ ```
@@ -15,6 +15,8 @@ exports.RpcResponse = void 0;
15
15
  result.ignore();
16
16
  if (result.isOk())
17
17
  return new ok.RpcOk(id, result.inner);
18
+ if (result.inner instanceof err.RpcError)
19
+ return new err.RpcErr(id, result.inner);
18
20
  if (result.inner instanceof Error)
19
21
  return new err.RpcErr(id, new err.RpcError(-32603, result.inner.message));
20
22
  return new err.RpcErr(id, new err.RpcError(-32603, "An unknown error occured"));
@@ -1 +1 @@
1
- {"version":3,"file":"response.cjs","sources":["../../../../src/mods/rpc/response.ts"],"sourcesContent":["import { RpcErr, RpcError } from \"./err.js\";\nimport { RpcOk } from \"./ok.js\";\nexport var RpcResponse;\n(function (RpcResponse) {\n function from(init) {\n if (\"error\" in init)\n return RpcErr.from(init);\n return RpcOk.from(init);\n }\n RpcResponse.from = from;\n function rewrap(id, result) {\n result.ignore();\n if (result.isOk())\n return new RpcOk(id, result.inner);\n if (result.inner instanceof Error)\n return new RpcErr(id, new RpcError(-32603, result.inner.message));\n return new RpcErr(id, new RpcError(-32603, \"An unknown error occured\"));\n }\n RpcResponse.rewrap = rewrap;\n})(RpcResponse || (RpcResponse = {}));\n//# sourceMappingURL=response.js.map"],"names":["RpcResponse","RpcErr","RpcOk","RpcError"],"mappings":";;;;;AAEWA,6BAAY;AACvB,CAAC,UAAU,WAAW,EAAE;AACxB,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,OAAO,IAAI,IAAI;AAC3B,YAAY,OAAOC,UAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,OAAOC,QAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,IAAI,SAAS,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;AACxB,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;AACzB,YAAY,OAAO,IAAIA,QAAK,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,IAAI,MAAM,CAAC,KAAK,YAAY,KAAK;AACzC,YAAY,OAAO,IAAID,UAAM,CAAC,EAAE,EAAE,IAAIE,YAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,QAAQ,OAAO,IAAIF,UAAM,CAAC,EAAE,EAAE,IAAIE,YAAQ,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,CAAC,EAAEH,mBAAW,KAAKA,mBAAW,GAAG,EAAE,CAAC,CAAC;;"}
1
+ {"version":3,"file":"response.cjs","sources":["../../../../src/mods/rpc/response.ts"],"sourcesContent":["import { RpcErr, RpcError } from \"./err.js\";\nimport { RpcOk } from \"./ok.js\";\nexport var RpcResponse;\n(function (RpcResponse) {\n function from(init) {\n if (\"error\" in init)\n return RpcErr.from(init);\n return RpcOk.from(init);\n }\n RpcResponse.from = from;\n function rewrap(id, result) {\n result.ignore();\n if (result.isOk())\n return new RpcOk(id, result.inner);\n if (result.inner instanceof RpcError)\n return new RpcErr(id, result.inner);\n if (result.inner instanceof Error)\n return new RpcErr(id, new RpcError(-32603, result.inner.message));\n return new RpcErr(id, new RpcError(-32603, \"An unknown error occured\"));\n }\n RpcResponse.rewrap = rewrap;\n})(RpcResponse || (RpcResponse = {}));\n//# sourceMappingURL=response.js.map"],"names":["RpcResponse","RpcErr","RpcOk","RpcError"],"mappings":";;;;;AAEWA,6BAAY;AACvB,CAAC,UAAU,WAAW,EAAE;AACxB,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,OAAO,IAAI,IAAI;AAC3B,YAAY,OAAOC,UAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,OAAOC,QAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,IAAI,SAAS,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;AACxB,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;AACzB,YAAY,OAAO,IAAIA,QAAK,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,IAAI,MAAM,CAAC,KAAK,YAAYC,YAAQ;AAC5C,YAAY,OAAO,IAAIF,UAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,IAAI,MAAM,CAAC,KAAK,YAAY,KAAK;AACzC,YAAY,OAAO,IAAIA,UAAM,CAAC,EAAE,EAAE,IAAIE,YAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,QAAQ,OAAO,IAAIF,UAAM,CAAC,EAAE,EAAE,IAAIE,YAAQ,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,CAAC,EAAEH,mBAAW,KAAKA,mBAAW,GAAG,EAAE,CAAC,CAAC;;"}
@@ -13,6 +13,8 @@ var RpcResponse;
13
13
  result.ignore();
14
14
  if (result.isOk())
15
15
  return new RpcOk(id, result.inner);
16
+ if (result.inner instanceof RpcError)
17
+ return new RpcErr(id, result.inner);
16
18
  if (result.inner instanceof Error)
17
19
  return new RpcErr(id, new RpcError(-32603, result.inner.message));
18
20
  return new RpcErr(id, new RpcError(-32603, "An unknown error occured"));
@@ -1 +1 @@
1
- {"version":3,"file":"response.mjs","sources":["../../../../src/mods/rpc/response.ts"],"sourcesContent":["import { RpcErr, RpcError } from \"./err.js\";\nimport { RpcOk } from \"./ok.js\";\nexport var RpcResponse;\n(function (RpcResponse) {\n function from(init) {\n if (\"error\" in init)\n return RpcErr.from(init);\n return RpcOk.from(init);\n }\n RpcResponse.from = from;\n function rewrap(id, result) {\n result.ignore();\n if (result.isOk())\n return new RpcOk(id, result.inner);\n if (result.inner instanceof Error)\n return new RpcErr(id, new RpcError(-32603, result.inner.message));\n return new RpcErr(id, new RpcError(-32603, \"An unknown error occured\"));\n }\n RpcResponse.rewrap = rewrap;\n})(RpcResponse || (RpcResponse = {}));\n//# sourceMappingURL=response.js.map"],"names":[],"mappings":";;;AAEU,IAAC,YAAY;AACvB,CAAC,UAAU,WAAW,EAAE;AACxB,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,OAAO,IAAI,IAAI;AAC3B,YAAY,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,IAAI,SAAS,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;AACxB,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;AACzB,YAAY,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,IAAI,MAAM,CAAC,KAAK,YAAY,KAAK;AACzC,YAAY,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,QAAQ,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,CAAC,EAAE,WAAW,KAAK,WAAW,GAAG,EAAE,CAAC,CAAC;;;;"}
1
+ {"version":3,"file":"response.mjs","sources":["../../../../src/mods/rpc/response.ts"],"sourcesContent":["import { RpcErr, RpcError } from \"./err.js\";\nimport { RpcOk } from \"./ok.js\";\nexport var RpcResponse;\n(function (RpcResponse) {\n function from(init) {\n if (\"error\" in init)\n return RpcErr.from(init);\n return RpcOk.from(init);\n }\n RpcResponse.from = from;\n function rewrap(id, result) {\n result.ignore();\n if (result.isOk())\n return new RpcOk(id, result.inner);\n if (result.inner instanceof RpcError)\n return new RpcErr(id, result.inner);\n if (result.inner instanceof Error)\n return new RpcErr(id, new RpcError(-32603, result.inner.message));\n return new RpcErr(id, new RpcError(-32603, \"An unknown error occured\"));\n }\n RpcResponse.rewrap = rewrap;\n})(RpcResponse || (RpcResponse = {}));\n//# sourceMappingURL=response.js.map"],"names":[],"mappings":";;;AAEU,IAAC,YAAY;AACvB,CAAC,UAAU,WAAW,EAAE;AACxB,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,OAAO,IAAI,IAAI;AAC3B,YAAY,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5B,IAAI,SAAS,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;AACxB,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;AACzB,YAAY,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,IAAI,MAAM,CAAC,KAAK,YAAY,QAAQ;AAC5C,YAAY,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,IAAI,MAAM,CAAC,KAAK,YAAY,KAAK;AACzC,YAAY,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,QAAQ,OAAO,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,QAAQ,CAAC,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAChF,KAAK;AACL,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,CAAC,EAAE,WAAW,KAAK,WAAW,GAAG,EAAE,CAAC,CAAC;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@hazae41/jsonrpc",
4
- "version": "1.0.0",
4
+ "version": "1.0.1",
5
5
  "description": "Rust-like JSON-RPC for TypeScript",
6
6
  "homepage": "https://github.com/hazae41/jsonrpc",
7
7
  "repository": "github:hazae41/jsonrpc",