@ckb-ccc/core 0.0.12 → 0.0.13-alpha.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +5 -2
  3. package/dist/ckb/transaction.d.ts.map +1 -1
  4. package/dist/ckb/transaction.js +17 -10
  5. package/dist/client/advanced.d.ts +1 -0
  6. package/dist/client/advanced.d.ts.map +1 -1
  7. package/dist/client/advanced.js +1 -0
  8. package/dist/client/client.d.ts.map +1 -1
  9. package/dist/client/client.js +8 -2
  10. package/dist/client/clientPublicMainnet.d.ts.map +1 -1
  11. package/dist/client/clientPublicMainnet.js +5 -2
  12. package/dist/client/clientPublicTestnet.d.ts.map +1 -1
  13. package/dist/client/clientPublicTestnet.js +5 -2
  14. package/dist/client/clientTypes.d.ts +6 -1
  15. package/dist/client/clientTypes.d.ts.map +1 -1
  16. package/dist/client/jsonRpc/index.d.ts +5 -4
  17. package/dist/client/jsonRpc/index.d.ts.map +1 -1
  18. package/dist/client/jsonRpc/index.js +5 -15
  19. package/dist/client/jsonRpc/transformers.d.ts +7 -2
  20. package/dist/client/jsonRpc/transformers.d.ts.map +1 -1
  21. package/dist/client/jsonRpc/transformers.js +7 -1
  22. package/dist/client/jsonRpc/types.d.ts +0 -6
  23. package/dist/client/jsonRpc/types.d.ts.map +1 -1
  24. package/dist/client/transports/advanced.d.ts +9 -0
  25. package/dist/client/transports/advanced.d.ts.map +1 -0
  26. package/dist/client/transports/advanced.js +11 -0
  27. package/dist/client/transports/http.d.ts +8 -0
  28. package/dist/client/transports/http.d.ts.map +1 -0
  29. package/dist/client/transports/http.js +20 -0
  30. package/dist/client/transports/transport.d.ts +10 -0
  31. package/dist/client/transports/transport.d.ts.map +1 -0
  32. package/dist/client/transports/transport.js +1 -0
  33. package/dist/client/transports/webSocket.d.ts +10 -0
  34. package/dist/client/transports/webSocket.d.ts.map +1 -0
  35. package/dist/client/transports/webSocket.js +61 -0
  36. package/dist.commonjs/ckb/transaction.d.ts.map +1 -1
  37. package/dist.commonjs/ckb/transaction.js +17 -10
  38. package/dist.commonjs/client/advanced.d.ts +1 -0
  39. package/dist.commonjs/client/advanced.d.ts.map +1 -1
  40. package/dist.commonjs/client/advanced.js +1 -0
  41. package/dist.commonjs/client/client.d.ts.map +1 -1
  42. package/dist.commonjs/client/client.js +8 -2
  43. package/dist.commonjs/client/clientPublicMainnet.d.ts.map +1 -1
  44. package/dist.commonjs/client/clientPublicMainnet.js +5 -2
  45. package/dist.commonjs/client/clientPublicTestnet.d.ts.map +1 -1
  46. package/dist.commonjs/client/clientPublicTestnet.js +5 -2
  47. package/dist.commonjs/client/clientTypes.d.ts +6 -1
  48. package/dist.commonjs/client/clientTypes.d.ts.map +1 -1
  49. package/dist.commonjs/client/jsonRpc/index.d.ts +5 -4
  50. package/dist.commonjs/client/jsonRpc/index.d.ts.map +1 -1
  51. package/dist.commonjs/client/jsonRpc/index.js +15 -28
  52. package/dist.commonjs/client/jsonRpc/transformers.d.ts +7 -2
  53. package/dist.commonjs/client/jsonRpc/transformers.d.ts.map +1 -1
  54. package/dist.commonjs/client/jsonRpc/transformers.js +35 -29
  55. package/dist.commonjs/client/jsonRpc/types.d.ts +0 -6
  56. package/dist.commonjs/client/jsonRpc/types.d.ts.map +1 -1
  57. package/dist.commonjs/client/transports/advanced.d.ts +9 -0
  58. package/dist.commonjs/client/transports/advanced.d.ts.map +1 -0
  59. package/dist.commonjs/client/transports/advanced.js +29 -0
  60. package/dist.commonjs/client/transports/http.d.ts +8 -0
  61. package/dist.commonjs/client/transports/http.d.ts.map +1 -0
  62. package/dist.commonjs/client/transports/http.js +24 -0
  63. package/dist.commonjs/client/transports/transport.d.ts +10 -0
  64. package/dist.commonjs/client/transports/transport.d.ts.map +1 -0
  65. package/dist.commonjs/client/transports/transport.js +2 -0
  66. package/dist.commonjs/client/transports/webSocket.d.ts +10 -0
  67. package/dist.commonjs/client/transports/webSocket.d.ts.map +1 -0
  68. package/dist.commonjs/client/transports/webSocket.js +65 -0
  69. package/package.json +1 -1
  70. package/src/ckb/transaction.ts +24 -16
  71. package/src/client/advanced.ts +1 -0
  72. package/src/client/client.ts +9 -2
  73. package/src/client/clientPublicMainnet.ts +8 -2
  74. package/src/client/clientPublicTestnet.ts +8 -2
  75. package/src/client/clientTypes.ts +6 -0
  76. package/src/client/jsonRpc/index.ts +13 -19
  77. package/src/client/jsonRpc/transformers.ts +16 -3
  78. package/src/client/jsonRpc/types.ts +0 -7
  79. package/src/client/transports/advanced.ts +14 -0
  80. package/src/client/transports/http.ts +26 -0
  81. package/src/client/transports/transport.ts +10 -0
  82. package/src/client/transports/webSocket.ts +81 -0
@@ -1,12 +1,5 @@
1
1
  import { Hex } from "../../hex/index.js";
2
2
 
3
- export type JsonRpcPayload = {
4
- id: number;
5
- jsonrpc: "2.0";
6
- method: string;
7
- params: unknown[] | Record<string, unknown>;
8
- };
9
-
10
3
  export type JsonRpcHashType = "type" | "data" | "data1" | "data2";
11
4
  export type JsonRpcDepType = "dep_group" | "code";
12
5
 
@@ -0,0 +1,14 @@
1
+ import { TransportHttp } from "./http.js";
2
+ import { TransportWebSocket } from "./webSocket.js";
3
+
4
+ export * from "./http.js";
5
+ export * from "./transport.js";
6
+ export * from "./webSocket.js";
7
+
8
+ export function transportFromUri(uri: string, config?: { timeout?: number }) {
9
+ if (uri.startsWith("wss://")) {
10
+ return new TransportWebSocket(uri, config?.timeout);
11
+ }
12
+
13
+ return new TransportHttp(uri, config?.timeout);
14
+ }
@@ -0,0 +1,26 @@
1
+ import { JsonRpcPayload, Transport } from "./transport.js";
2
+
3
+ export class TransportHttp implements Transport {
4
+ constructor(
5
+ private readonly url: string,
6
+ private readonly timeout = 30000,
7
+ ) {}
8
+
9
+ async request(payload: JsonRpcPayload) {
10
+ const aborter = new AbortController();
11
+ const abortTimer = setTimeout(() => aborter.abort(), this.timeout);
12
+
13
+ const raw = await (
14
+ await fetch(this.url, {
15
+ method: "POST",
16
+ headers: {
17
+ "content-type": "application/json",
18
+ },
19
+ body: JSON.stringify(payload),
20
+ signal: aborter.signal,
21
+ })
22
+ ).json();
23
+ clearTimeout(abortTimer);
24
+ return raw;
25
+ }
26
+ }
@@ -0,0 +1,10 @@
1
+ export type JsonRpcPayload = {
2
+ id: number;
3
+ jsonrpc: "2.0";
4
+ method: string;
5
+ params: unknown[] | Record<string, unknown>;
6
+ };
7
+
8
+ export interface Transport {
9
+ request(data: JsonRpcPayload): Promise<unknown>;
10
+ }
@@ -0,0 +1,81 @@
1
+ import { JsonRpcPayload, Transport } from "./transport.js";
2
+
3
+ export class TransportWebSocket implements Transport {
4
+ private ongoing: Map<
5
+ number,
6
+ [
7
+ (response: unknown) => unknown,
8
+ (error: unknown) => unknown,
9
+ ReturnType<typeof setTimeout>,
10
+ ]
11
+ > = new Map();
12
+ private socket?: Promise<WebSocket>;
13
+
14
+ constructor(
15
+ private readonly url: string,
16
+ private readonly timeout = 30000,
17
+ ) {}
18
+
19
+ async request(data: JsonRpcPayload) {
20
+ const socket = (() => {
21
+ if (this.socket) {
22
+ return this.socket;
23
+ }
24
+
25
+ const socket = new WebSocket(this.url);
26
+ const onMessage = ({ data }: { data: string }) => {
27
+ const res = JSON.parse(data);
28
+ if (typeof res !== "object" || res === null) {
29
+ throw new Error(`Unknown response ${data}`);
30
+ }
31
+
32
+ const req = this.ongoing.get(res.id);
33
+ if (!req) {
34
+ return;
35
+ }
36
+ clearTimeout(req[2]);
37
+ this.ongoing.delete(res.id);
38
+
39
+ req[0](res);
40
+ };
41
+ const onClose = (error?: unknown) => {
42
+ this.socket = undefined;
43
+ this.ongoing.forEach(([_, onError]) =>
44
+ onError(error ?? new Error("Connection closed")),
45
+ );
46
+ this.ongoing.clear();
47
+ };
48
+
49
+ socket.onclose = onClose;
50
+ socket.onerror = onClose;
51
+ socket.onmessage = onMessage;
52
+
53
+ this.socket = new Promise((resolve) => {
54
+ if (socket.readyState === socket.CONNECTING) {
55
+ socket.onopen = resolve;
56
+ } else {
57
+ resolve(undefined);
58
+ }
59
+ }).then(() => socket);
60
+ return this.socket;
61
+ })();
62
+
63
+ return new Promise((resolve, reject) => {
64
+ this.ongoing.set(data.id, [
65
+ resolve,
66
+ reject,
67
+ setTimeout(() => reject(new Error("Request timeout")), this.timeout),
68
+ ]);
69
+ socket.then((socket) => {
70
+ if (
71
+ socket.readyState === socket.CLOSED ||
72
+ socket.readyState === socket.CLOSING
73
+ ) {
74
+ reject(new Error("Connection closed"));
75
+ } else {
76
+ socket.send(JSON.stringify(data));
77
+ }
78
+ });
79
+ });
80
+ }
81
+ }