@msaki/jsonrpc 0.1.2 → 0.2.0

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/dist/client.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { JsonRpcRequest, JsonRpcResponse } from "./types";
2
1
  export declare class JsonRpcClient {
3
2
  private send;
4
3
  private id;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,aAAa;IAItB,OAAO,CAAC,IAAI;IAHd,OAAO,CAAC,EAAE,CAAI;gBAGJ,IAAI,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAGrF,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAcnH,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE;CAQ3D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAW9D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa;IAIxB,OAAO,CAAC,IAAI;IAHb,OAAO,CAAC,EAAE,CAAK;gBAGN,IAAI,EAAE,CACb,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,KACxB,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAGzC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EACxD,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IActB,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE;CAQ1D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAW9D"}
package/dist/client.js CHANGED
@@ -21,7 +21,7 @@ export class JsonRpcClient {
21
21
  const request = {
22
22
  jsonrpc: "2.0",
23
23
  method,
24
- params
24
+ params,
25
25
  };
26
26
  return this.send(request);
27
27
  }
@@ -31,7 +31,7 @@ export function initializeRpcClient(url) {
31
31
  const res = await fetch(url, {
32
32
  method: "POST",
33
33
  headers: { "Content-Type": "application/json" },
34
- body: JSON.stringify(req)
34
+ body: JSON.stringify(req),
35
35
  });
36
36
  return (await res.json());
37
37
  });
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAId;IAHF,EAAE,GAAG,CAAC,CAAA;IAEd,YACU,IAAiF;QAAjF,SAAI,GAAJ,IAAI,CAA6E;IACxF,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAiD,MAAc,EAAE,MAAkB;QAC3F,MAAM,OAAO,GAA2B;YACtC,OAAO,EAAE,KAAK;YACd,MAAM;YACN,MAAM;YACN,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;SACd,CAAA;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC,KAAU,CAAA;QAC5B,CAAC;QACD,OAAO,QAAQ,CAAC,MAAgB,CAAA;IAClC,CAAC;IAED,MAAM,CAAkB,MAAc,EAAE,MAAkB;QACxD,MAAM,OAAO,GAA2B;YACtC,OAAO,EAAE,KAAK;YACd,MAAM;YACN,MAAM;SACP,CAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,GAA4B,EAAE,EAAE;QACtE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SAC1B,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqC,CAAA;IAC/D,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAa;IAIhB;IAHD,EAAE,GAAG,CAAC,CAAC;IAEf,YACS,IAEsC;QAFtC,SAAI,GAAJ,IAAI,CAEkC;IAC3C,CAAC;IAEL,KAAK,CAAC,IAAI,CACT,MAAc,EACd,MAAkB;QAElB,MAAM,OAAO,GAA2B;YACvC,OAAO,EAAE,KAAK;YACd,MAAM;YACN,MAAM;YACN,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;SACb,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC,KAAU,CAAC;QAC5B,CAAC;QACD,OAAO,QAAQ,CAAC,MAAgB,CAAC;IAClC,CAAC;IAED,MAAM,CAAkB,MAAc,EAAE,MAAkB;QACzD,MAAM,OAAO,GAA2B;YACvC,OAAO,EAAE,KAAK;YACd,MAAM;YACN,MAAM;SACN,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;CACD;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC9C,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,GAA4B,EAAE,EAAE;QACvE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SACzB,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AACf,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from "./types";
2
- export * from "./server";
3
1
  export * from "./client";
2
+ export * from "./server";
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,3 @@
1
- export * from "./types";
2
- export * from "./server";
3
1
  export * from "./client";
2
+ export * from "./server";
4
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { JsonRpcResponse } from "./types";
2
1
  export declare enum JsonRpcErrorCodes {
3
2
  INVALID_REQUEST = -32600,
4
3
  METHOD_NOT_FOUND = -32601,
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAE/D,oBAAY,iBAAiB;IAC3B,eAAe,SAAS;IACxB,gBAAgB,SAAS;IACzB,cAAc,SAAS;IACvB,cAAc,SAAS;IACvB,WAAW,SAAS;IACpB,eAAe,SAAS;CACzB;AACD,MAAM,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEpE,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IAEjD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;IAIxC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAClC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IAuD9H,OAAO,CAAC,KAAK;CAYd"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB;IAC5B,eAAe,SAAS;IACxB,gBAAgB,SAAS;IACzB,cAAc,SAAS;IACvB,cAAc,SAAS;IACvB,WAAW,SAAS;IACpB,eAAe,SAAS;CACxB;AACD,MAAM,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAErE,qBAAa,aAAa;IACzB,OAAO,CAAC,OAAO,CAAmC;IAElD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;IAIxC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EACnC,GAAG,EAAE,OAAO,GACV,OAAO,CACP,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAAC,GACnD,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAAC,EAAE,GACrD,IAAI,CACN;IAsED,OAAO,CAAC,KAAK;CAYb"}
package/dist/server.js CHANGED
@@ -18,12 +18,12 @@ export class JsonRpcServer {
18
18
  if (raw.length === 0) {
19
19
  return this.error(null, JsonRpcErrorCodes.INVALID_REQUEST, "Invalid request");
20
20
  }
21
- const responses = await Promise.all(raw.map(item => this.handle(item)));
21
+ const responses = await Promise.all(raw.map((item) => this.handle(item)));
22
22
  const filtered = responses.filter((r) => r !== null);
23
23
  return filtered.length > 0 ? filtered : null;
24
24
  }
25
25
  // handle single response
26
- let req = raw;
26
+ const req = raw;
27
27
  if (typeof req !== "object" ||
28
28
  req === null ||
29
29
  req.jsonrpc !== "2.0" ||
@@ -32,10 +32,14 @@ export class JsonRpcServer {
32
32
  }
33
33
  const id = typeof req?.id === "string" ||
34
34
  typeof req?.id === "number" ||
35
- req?.id === null ? req.id : null;
35
+ req?.id === null
36
+ ? req.id
37
+ : null;
36
38
  const handler = this.methods.get(req.method);
37
39
  if (!handler) {
38
- return id === null ? null : this.error(req.id, JsonRpcErrorCodes.METHOD_NOT_FOUND, "Method not found");
40
+ return id === null
41
+ ? null
42
+ : this.error(req.id, JsonRpcErrorCodes.METHOD_NOT_FOUND, "Method not found");
39
43
  }
40
44
  try {
41
45
  const result = await handler(req.params);
@@ -44,7 +48,7 @@ export class JsonRpcServer {
44
48
  return {
45
49
  jsonrpc: "2.0",
46
50
  result,
47
- id: req.id
51
+ id: req.id,
48
52
  };
49
53
  }
50
54
  catch (err) {
@@ -55,7 +59,7 @@ export class JsonRpcServer {
55
59
  return {
56
60
  jsonrpc: "2.0",
57
61
  error: { code, message, data },
58
- id: id ?? null
62
+ id: id ?? null,
59
63
  };
60
64
  }
61
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IAC5B,oFAAwB,CAAA;IACxB,sFAAyB,CAAA;IACzB,kFAAuB,CAAA;IACvB,kFAAuB,CAAA;IACvB,4EAAoB,CAAA;IACpB,oFAAwB,CAAA;AACzB,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,QAO5B;AAGD,MAAM,OAAO,aAAa;IACjB,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAElD,QAAQ,CAAC,MAAc,EAAE,OAAqB;QAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CACX,GAAY;QAMZ,eAAe;QACf,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,KAAK,CAChB,IAAI,EACJ,iBAAiB,CAAC,eAAe,EACjC,iBAAiB,CACjB,CAAC;YACH,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAChC,CAAC,CAAC,EAA4D,EAAE,CAC/D,CAAC,KAAK,IAAI,CACX,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QAED,yBAAyB;QACzB,MAAM,GAAG,GAAG,GAAsC,CAAC;QAEnD,IACC,OAAO,GAAG,KAAK,QAAQ;YACvB,GAAG,KAAK,IAAI;YACZ,GAAG,CAAC,OAAO,KAAK,KAAK;YACrB,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAC7B,CAAC;YACF,OAAO,IAAI,CAAC,KAAK,CAChB,IAAI,EACJ,iBAAiB,CAAC,eAAe,EACjC,iBAAiB,CACjB,CAAC;QACH,CAAC;QAED,MAAM,EAAE,GACP,OAAQ,GAAW,EAAE,EAAE,KAAK,QAAQ;YACnC,OAAQ,GAAW,EAAE,EAAE,KAAK,QAAQ;YACnC,GAAW,EAAE,EAAE,KAAK,IAAI;YACzB,CAAC,CAAE,GAAW,CAAC,EAAE;YACjB,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,IAAI;gBACjB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,CAAC,KAAK,CACX,GAAG,CAAC,EAAE,EACN,iBAAiB,CAAC,gBAAgB,EAClC,kBAAkB,CAClB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,CAAC,eAAe;YACtD,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,EAAE,EAAE,GAAG,CAAC,EAAE;aACV,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,KAAK,CAChB,GAAG,CAAC,EAAE,IAAI,IAAI,EACd,iBAAiB,CAAC,cAAc,EAChC,gBAAgB,EAChB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACxC,CAAC;QACH,CAAC;IACF,CAAC;IAEO,KAAK,CACZ,EAAgC,EAChC,IAAgC,EAChC,OAAe,EACf,IAAc;QAEd,OAAO;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YAC9B,EAAE,EAAE,EAAE,IAAI,IAAI;SACd,CAAC;IACH,CAAC;CACD"}
package/package.json CHANGED
@@ -1,33 +1,34 @@
1
1
  {
2
- "name": "@msaki/jsonrpc",
3
- "author": "Meek Msaki",
4
- "version": "0.1.2",
5
- "license": "MIT",
6
- "main": "dist/index.js",
7
- "module": "dist/index.mjs",
8
- "types": "dist/index.d.ts",
9
- "files": [
10
- "dist",
11
- "src"
12
- ],
13
- "repository": {
14
- "type": "git",
15
- "url": "git+https://github.com/mmsaki/libs.git",
16
- "directory": "packages/jsonrpc"
17
- },
18
- "publishConfig": {
19
- "access": "public",
20
- "directory": "dist"
21
- },
22
- "scripts": {
23
- "build": "tsc -p tsconfig.json",
24
- "publish": "bun run build && bun publish --access public",
25
- "lint": "tsc"
26
- },
27
- "devDependencies": {
28
- "@types/bun": "latest"
29
- },
30
- "peerDependencies": {
31
- "typescript": "^5"
32
- }
2
+ "name": "@msaki/jsonrpc",
3
+ "author": "Meek Msaki",
4
+ "version": "0.2.0",
5
+ "license": "MIT",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.mjs",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "src"
12
+ ],
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/mmsaki/libs.git",
16
+ "directory": "packages/jsonrpc"
17
+ },
18
+ "publishConfig": {
19
+ "access": "public",
20
+ "directory": "dist"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc -p tsconfig.json",
24
+ "publish": "bun run build && bun publish --access public",
25
+ "format": "bun biome format --write"
26
+ },
27
+ "devDependencies": {
28
+ "@biomejs/biome": "2.3.11",
29
+ "@types/bun": "latest"
30
+ },
31
+ "peerDependencies": {
32
+ "typescript": "^5"
33
+ }
33
34
  }
package/src/client.ts CHANGED
@@ -1,45 +1,48 @@
1
- import type { JsonRpcRequest, JsonRpcResponse } from "./types";
2
-
3
1
  export class JsonRpcClient {
4
- private id = 0
2
+ private id = 0;
5
3
 
6
- constructor(
7
- private send: (req: JsonRpcRequest<unknown>) => Promise<JsonRpcResponse<unknown, number>>
8
- ) {}
4
+ constructor(
5
+ private send: (
6
+ req: JsonRpcRequest<unknown>,
7
+ ) => Promise<JsonRpcResponse<unknown, number>>,
8
+ ) { }
9
9
 
10
- async call<Method = string, Result = unknown, E = unknown>(method: Method, params?: unknown[]): Promise<Result | E> {
11
- const request: JsonRpcRequest<Method> = {
12
- jsonrpc: "2.0",
13
- method,
14
- params,
15
- id: ++this.id,
16
- }
17
- const response = await this.send(request);
18
- if ("error" in response) {
19
- return response.error as E
20
- }
21
- return response.result as Result
22
- }
10
+ async call<Method = string, Result = unknown, E = unknown>(
11
+ method: Method,
12
+ params?: unknown[],
13
+ ): Promise<Result | E> {
14
+ const request: JsonRpcRequest<Method> = {
15
+ jsonrpc: "2.0",
16
+ method,
17
+ params,
18
+ id: ++this.id,
19
+ };
20
+ const response = await this.send(request);
21
+ if ("error" in response) {
22
+ return response.error as E;
23
+ }
24
+ return response.result as Result;
25
+ }
23
26
 
24
- notify<Method = string>(method: Method, params?: unknown[]) {
25
- const request: JsonRpcRequest<Method> = {
26
- jsonrpc: "2.0",
27
- method,
28
- params
29
- }
30
- return this.send(request)
31
- }
27
+ notify<Method = string>(method: Method, params?: unknown[]) {
28
+ const request: JsonRpcRequest<Method> = {
29
+ jsonrpc: "2.0",
30
+ method,
31
+ params,
32
+ };
33
+ return this.send(request);
34
+ }
32
35
  }
33
36
 
34
37
  export function initializeRpcClient(url: string): JsonRpcClient {
35
- const client = new JsonRpcClient(async (req: JsonRpcRequest<unknown>) => {
36
- const res = await fetch(url, {
37
- method: "POST",
38
- headers: { "Content-Type": "application/json" },
39
- body: JSON.stringify(req)
40
- });
38
+ const client = new JsonRpcClient(async (req: JsonRpcRequest<unknown>) => {
39
+ const res = await fetch(url, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json" },
42
+ body: JSON.stringify(req),
43
+ });
41
44
 
42
- return (await res.json()) as JsonRpcResponse<unknown, number>
43
- });
44
- return client;
45
+ return (await res.json()) as JsonRpcResponse<unknown, number>;
46
+ });
47
+ return client;
45
48
  }
package/src/index.ts CHANGED
@@ -1,3 +1,2 @@
1
- export * from "./types"
2
- export * from "./server";
3
1
  export * from "./client";
2
+ export * from "./server";
package/src/server.ts CHANGED
@@ -1,89 +1,106 @@
1
- import type { JsonRpcResponse, JsonRpcRequest } from "./types";
2
-
3
1
  export enum JsonRpcErrorCodes {
4
- INVALID_REQUEST = -32600,
5
- METHOD_NOT_FOUND = -32601,
6
- INVALID_PARAMS = -32602,
7
- INTERNAL_ERROR = -32603,
8
- PARSE_ERROR = -32700,
9
- REQUEST_ABORTED = -32800,
2
+ INVALID_REQUEST = -32600,
3
+ METHOD_NOT_FOUND = -32601,
4
+ INVALID_PARAMS = -32602,
5
+ INTERNAL_ERROR = -32603,
6
+ PARSE_ERROR = -32700,
7
+ REQUEST_ABORTED = -32800,
10
8
  }
11
- export type Handler<Result> = (params: any) => any | Promise<Result>
9
+ export type Handler<Result> = (params: any) => any | Promise<Result>;
12
10
 
13
11
  export class JsonRpcServer {
14
- private methods = new Map<string, Handler<any>>()
12
+ private methods = new Map<string, Handler<any>>();
15
13
 
16
- register(method: string, handler: Handler<any>) {
17
- this.methods.set(method, handler)
18
- }
14
+ register(method: string, handler: Handler<any>) {
15
+ this.methods.set(method, handler);
16
+ }
19
17
 
20
- async handle<Result, Method = string>(
21
- raw: unknown,
22
- ): Promise<JsonRpcResponse<Result, JsonRpcErrorCodes | number> | JsonRpcResponse<Result, JsonRpcErrorCodes | number>[] | null> {
23
- // handle batch
24
- if (Array.isArray(raw)) {
25
- if (raw.length === 0) {
26
- return this.error(null, JsonRpcErrorCodes.INVALID_REQUEST, "Invalid request")
27
- }
28
- const responses = await Promise.all(
29
- raw.map(item => this.handle(item))
30
- )
31
- const filtered = responses.filter(
32
- (r): r is JsonRpcResponse<Result, JsonRpcErrorCodes | number> => r !== null
33
- )
34
- return filtered.length > 0 ? filtered : null
35
- }
18
+ async handle<Result, Method = string>(
19
+ raw: unknown,
20
+ ): Promise<
21
+ | JsonRpcResponse<Result, JsonRpcErrorCodes | number>
22
+ | JsonRpcResponse<Result, JsonRpcErrorCodes | number>[]
23
+ | null
24
+ > {
25
+ // handle batch
26
+ if (Array.isArray(raw)) {
27
+ if (raw.length === 0) {
28
+ return this.error(
29
+ null,
30
+ JsonRpcErrorCodes.INVALID_REQUEST,
31
+ "Invalid request",
32
+ );
33
+ }
34
+ const responses = await Promise.all(raw.map((item) => this.handle(item)));
35
+ const filtered = responses.filter(
36
+ (r): r is JsonRpcResponse<Result, JsonRpcErrorCodes | number> =>
37
+ r !== null,
38
+ );
39
+ return filtered.length > 0 ? filtered : null;
40
+ }
36
41
 
37
- // handle single response
38
- let req = raw as Partial<JsonRpcRequest<Method>>
42
+ // handle single response
43
+ const req = raw as Partial<JsonRpcRequest<Method>>;
39
44
 
40
- if (
41
- typeof req !== "object" ||
42
- req === null ||
43
- req.jsonrpc !== "2.0" ||
44
- typeof req.method !== "string"
45
- ) {
46
- return this.error(null, JsonRpcErrorCodes.INVALID_REQUEST, "Invalid request")
47
- }
45
+ if (
46
+ typeof req !== "object" ||
47
+ req === null ||
48
+ req.jsonrpc !== "2.0" ||
49
+ typeof req.method !== "string"
50
+ ) {
51
+ return this.error(
52
+ null,
53
+ JsonRpcErrorCodes.INVALID_REQUEST,
54
+ "Invalid request",
55
+ );
56
+ }
48
57
 
49
- const id =
50
- typeof (req as any)?.id === "string" ||
51
- typeof (req as any)?.id === "number" ||
52
- (req as any)?.id === null ? (req as any).id : null
58
+ const id =
59
+ typeof (req as any)?.id === "string" ||
60
+ typeof (req as any)?.id === "number" ||
61
+ (req as any)?.id === null
62
+ ? (req as any).id
63
+ : null;
53
64
 
54
- const handler = this.methods.get(req.method)
55
- if (!handler) {
56
- return id === null ? null : this.error(req.id, JsonRpcErrorCodes.METHOD_NOT_FOUND, "Method not found")
57
- }
65
+ const handler = this.methods.get(req.method);
66
+ if (!handler) {
67
+ return id === null
68
+ ? null
69
+ : this.error(
70
+ req.id,
71
+ JsonRpcErrorCodes.METHOD_NOT_FOUND,
72
+ "Method not found",
73
+ );
74
+ }
58
75
 
59
- try {
60
- const result = await handler(req.params)
61
- if (req.id === undefined) return null // notification
62
- return {
63
- jsonrpc: "2.0",
64
- result,
65
- id: req.id
66
- }
67
- } catch (err) {
68
- return this.error(
69
- req.id ?? null,
70
- JsonRpcErrorCodes.INTERNAL_ERROR,
71
- "Internal error",
72
- err instanceof Error ? err.message : err
73
- )
74
- }
75
- }
76
+ try {
77
+ const result = await handler(req.params);
78
+ if (req.id === undefined) return null; // notification
79
+ return {
80
+ jsonrpc: "2.0",
81
+ result,
82
+ id: req.id,
83
+ };
84
+ } catch (err) {
85
+ return this.error(
86
+ req.id ?? null,
87
+ JsonRpcErrorCodes.INTERNAL_ERROR,
88
+ "Internal error",
89
+ err instanceof Error ? err.message : err,
90
+ );
91
+ }
92
+ }
76
93
 
77
- private error<Result, Method = string>(
78
- id: JsonRpcRequest<Method>["id"],
79
- code: JsonRpcErrorCodes | number,
80
- message: string,
81
- data?: unknown
82
- ): JsonRpcResponse<Result, JsonRpcErrorCodes | number> {
83
- return {
84
- jsonrpc: "2.0",
85
- error: { code, message, data },
86
- id: id ?? null
87
- }
88
- }
94
+ private error<Result, Method = string>(
95
+ id: JsonRpcRequest<Method>["id"],
96
+ code: JsonRpcErrorCodes | number,
97
+ message: string,
98
+ data?: unknown,
99
+ ): JsonRpcResponse<Result, JsonRpcErrorCodes | number> {
100
+ return {
101
+ jsonrpc: "2.0",
102
+ error: { code, message, data },
103
+ id: id ?? null,
104
+ };
105
+ }
89
106
  }
@@ -0,0 +1,5 @@
1
+ declare global {
2
+ export type JsonRpcId = string | number | null;
3
+ }
4
+
5
+ export { };
@@ -0,0 +1,10 @@
1
+ declare global {
2
+ export interface JsonRpcRequest<Method> {
3
+ jsonrpc: "2.0";
4
+ method: Method;
5
+ params?: unknown[];
6
+ id?: JsonRpcId;
7
+ }
8
+ }
9
+
10
+ export { };
@@ -0,0 +1,24 @@
1
+ declare global {
2
+ export interface JsonRpcSuccess<Result> {
3
+ jsonrpc: "2.0";
4
+ result: Result;
5
+ id: JsonRpcId;
6
+ }
7
+
8
+ export interface JsonRpcError<ErrorCode> {
9
+ jsonrpc: "2.0";
10
+ error: JsonRpcErrorObject<ErrorCode>;
11
+ id: JsonRpcId;
12
+ }
13
+
14
+ export interface JsonRpcErrorObject<ErrorCode> {
15
+ code: ErrorCode;
16
+ message: string;
17
+ data?: unknown;
18
+ }
19
+ export type JsonRpcResponse<Result, ErrorCode> =
20
+ | JsonRpcSuccess<Result>
21
+ | JsonRpcError<ErrorCode>;
22
+ }
23
+
24
+ export { };
package/dist/types.d.ts DELETED
@@ -1,24 +0,0 @@
1
- export type JsonRpcId = string | number | null;
2
- export interface JsonRpcRequest<Method> {
3
- jsonrpc: "2.0";
4
- method: Method;
5
- params?: unknown[];
6
- id?: JsonRpcId;
7
- }
8
- export interface JsonRpcSuccess<Result> {
9
- jsonrpc: "2.0";
10
- result: Result;
11
- id: JsonRpcId;
12
- }
13
- export interface JsonRpcErrorObject<ErrorCode> {
14
- code: ErrorCode;
15
- message: string;
16
- data?: unknown;
17
- }
18
- export interface JsonRpcError<ErrorCode> {
19
- jsonrpc: "2.0";
20
- error: JsonRpcErrorObject<ErrorCode>;
21
- id: JsonRpcId;
22
- }
23
- export type JsonRpcResponse<Result, ErrorCode> = JsonRpcSuccess<Result> | JsonRpcError<ErrorCode>;
24
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAE9C,MAAM,WAAW,cAAc,CAAC,MAAM;IACpC,OAAO,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,EAAE,CAAC,EAAE,SAAS,CAAA;CACf;AAED,MAAM,WAAW,cAAc,CAAC,MAAM;IACpC,OAAO,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,SAAS,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB,CAAC,SAAS;IAC3C,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,YAAY,CAAC,SAAS;IACrC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACpC,EAAE,EAAE,SAAS,CAAA;CACd;AAED,MAAM,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA"}
package/dist/types.js DELETED
@@ -1 +0,0 @@
1
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/src/types.ts DELETED
@@ -1,28 +0,0 @@
1
- export type JsonRpcId = string | number | null
2
-
3
- export interface JsonRpcRequest<Method> {
4
- jsonrpc: "2.0"
5
- method: Method
6
- params?: unknown[]
7
- id?: JsonRpcId
8
- }
9
-
10
- export interface JsonRpcSuccess<Result> {
11
- jsonrpc: "2.0"
12
- result: Result
13
- id: JsonRpcId
14
- }
15
-
16
- export interface JsonRpcErrorObject<ErrorCode> {
17
- code: ErrorCode
18
- message: string
19
- data?: unknown
20
- }
21
-
22
- export interface JsonRpcError<ErrorCode> {
23
- jsonrpc: "2.0"
24
- error: JsonRpcErrorObject<ErrorCode>
25
- id: JsonRpcId
26
- }
27
-
28
- export type JsonRpcResponse<Result, ErrorCode> = JsonRpcSuccess<Result> | JsonRpcError<ErrorCode>