@cds.id/podoru-sdk 1.1.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.
Files changed (154) hide show
  1. package/README.md +155 -0
  2. package/dist/cjs/client/PodoruClient.js +153 -0
  3. package/dist/cjs/client/PodoruClient.js.map +1 -0
  4. package/dist/cjs/client/WebSocketClient.js +193 -0
  5. package/dist/cjs/client/WebSocketClient.js.map +1 -0
  6. package/dist/cjs/client/index.js +8 -0
  7. package/dist/cjs/client/index.js.map +1 -0
  8. package/dist/cjs/errors/index.js +78 -0
  9. package/dist/cjs/errors/index.js.map +1 -0
  10. package/dist/cjs/index.js +33 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/transaction/Signer.js +82 -0
  13. package/dist/cjs/transaction/Signer.js.map +1 -0
  14. package/dist/cjs/transaction/TransactionBuilder.js +127 -0
  15. package/dist/cjs/transaction/TransactionBuilder.js.map +1 -0
  16. package/dist/cjs/transaction/index.js +9 -0
  17. package/dist/cjs/transaction/index.js.map +1 -0
  18. package/dist/cjs/types/api.js +3 -0
  19. package/dist/cjs/types/api.js.map +1 -0
  20. package/dist/cjs/types/chain.js +3 -0
  21. package/dist/cjs/types/chain.js.map +1 -0
  22. package/dist/cjs/types/events.js +3 -0
  23. package/dist/cjs/types/events.js.map +1 -0
  24. package/dist/cjs/types/index.js +3 -0
  25. package/dist/cjs/types/index.js.map +1 -0
  26. package/dist/cjs/types/node.js +3 -0
  27. package/dist/cjs/types/node.js.map +1 -0
  28. package/dist/cjs/types/state.js +3 -0
  29. package/dist/cjs/types/state.js.map +1 -0
  30. package/dist/cjs/types/transaction.js +3 -0
  31. package/dist/cjs/types/transaction.js.map +1 -0
  32. package/dist/cjs/utils/address.js +36 -0
  33. package/dist/cjs/utils/address.js.map +1 -0
  34. package/dist/cjs/utils/encoding.js +49 -0
  35. package/dist/cjs/utils/encoding.js.map +1 -0
  36. package/dist/cjs/utils/hash.js +28 -0
  37. package/dist/cjs/utils/hash.js.map +1 -0
  38. package/dist/cjs/utils/index.js +17 -0
  39. package/dist/cjs/utils/index.js.map +1 -0
  40. package/dist/esm/client/PodoruClient.d.ts +79 -0
  41. package/dist/esm/client/PodoruClient.d.ts.map +1 -0
  42. package/dist/esm/client/PodoruClient.js +149 -0
  43. package/dist/esm/client/PodoruClient.js.map +1 -0
  44. package/dist/esm/client/WebSocketClient.d.ts +89 -0
  45. package/dist/esm/client/WebSocketClient.d.ts.map +1 -0
  46. package/dist/esm/client/WebSocketClient.js +189 -0
  47. package/dist/esm/client/WebSocketClient.js.map +1 -0
  48. package/dist/esm/client/index.d.ts +5 -0
  49. package/dist/esm/client/index.d.ts.map +1 -0
  50. package/dist/esm/client/index.js +3 -0
  51. package/dist/esm/client/index.js.map +1 -0
  52. package/dist/esm/errors/index.d.ts +41 -0
  53. package/dist/esm/errors/index.d.ts.map +1 -0
  54. package/dist/esm/errors/index.js +69 -0
  55. package/dist/esm/errors/index.js.map +1 -0
  56. package/dist/esm/index.d.ts +8 -0
  57. package/dist/esm/index.d.ts.map +1 -0
  58. package/dist/esm/index.js +9 -0
  59. package/dist/esm/index.js.map +1 -0
  60. package/dist/esm/transaction/Signer.d.ts +48 -0
  61. package/dist/esm/transaction/Signer.d.ts.map +1 -0
  62. package/dist/esm/transaction/Signer.js +77 -0
  63. package/dist/esm/transaction/Signer.js.map +1 -0
  64. package/dist/esm/transaction/TransactionBuilder.d.ts +44 -0
  65. package/dist/esm/transaction/TransactionBuilder.d.ts.map +1 -0
  66. package/dist/esm/transaction/TransactionBuilder.js +123 -0
  67. package/dist/esm/transaction/TransactionBuilder.js.map +1 -0
  68. package/dist/esm/transaction/index.d.ts +4 -0
  69. package/dist/esm/transaction/index.d.ts.map +1 -0
  70. package/dist/esm/transaction/index.js +3 -0
  71. package/dist/esm/transaction/index.js.map +1 -0
  72. package/dist/esm/types/api.d.ts +16 -0
  73. package/dist/esm/types/api.d.ts.map +1 -0
  74. package/dist/esm/types/api.js +2 -0
  75. package/dist/esm/types/api.js.map +1 -0
  76. package/dist/esm/types/chain.d.ts +32 -0
  77. package/dist/esm/types/chain.d.ts.map +1 -0
  78. package/dist/esm/types/chain.js +2 -0
  79. package/dist/esm/types/chain.js.map +1 -0
  80. package/dist/esm/types/events.d.ts +58 -0
  81. package/dist/esm/types/events.d.ts.map +1 -0
  82. package/dist/esm/types/events.js +2 -0
  83. package/dist/esm/types/events.js.map +1 -0
  84. package/dist/esm/types/index.d.ts +7 -0
  85. package/dist/esm/types/index.d.ts.map +1 -0
  86. package/dist/esm/types/index.js +2 -0
  87. package/dist/esm/types/index.js.map +1 -0
  88. package/dist/esm/types/node.d.ts +32 -0
  89. package/dist/esm/types/node.d.ts.map +1 -0
  90. package/dist/esm/types/node.js +2 -0
  91. package/dist/esm/types/node.js.map +1 -0
  92. package/dist/esm/types/state.d.ts +23 -0
  93. package/dist/esm/types/state.d.ts.map +1 -0
  94. package/dist/esm/types/state.js +2 -0
  95. package/dist/esm/types/state.js.map +1 -0
  96. package/dist/esm/types/transaction.d.ts +39 -0
  97. package/dist/esm/types/transaction.d.ts.map +1 -0
  98. package/dist/esm/types/transaction.js +2 -0
  99. package/dist/esm/types/transaction.js.map +1 -0
  100. package/dist/esm/utils/address.d.ts +14 -0
  101. package/dist/esm/utils/address.d.ts.map +1 -0
  102. package/dist/esm/utils/address.js +31 -0
  103. package/dist/esm/utils/address.js.map +1 -0
  104. package/dist/esm/utils/encoding.d.ts +21 -0
  105. package/dist/esm/utils/encoding.d.ts.map +1 -0
  106. package/dist/esm/utils/encoding.js +42 -0
  107. package/dist/esm/utils/encoding.js.map +1 -0
  108. package/dist/esm/utils/hash.d.ts +9 -0
  109. package/dist/esm/utils/hash.d.ts.map +1 -0
  110. package/dist/esm/utils/hash.js +24 -0
  111. package/dist/esm/utils/hash.js.map +1 -0
  112. package/dist/esm/utils/index.d.ts +4 -0
  113. package/dist/esm/utils/index.d.ts.map +1 -0
  114. package/dist/esm/utils/index.js +4 -0
  115. package/dist/esm/utils/index.js.map +1 -0
  116. package/dist/types/client/PodoruClient.d.ts +79 -0
  117. package/dist/types/client/PodoruClient.d.ts.map +1 -0
  118. package/dist/types/client/WebSocketClient.d.ts +89 -0
  119. package/dist/types/client/WebSocketClient.d.ts.map +1 -0
  120. package/dist/types/client/index.d.ts +5 -0
  121. package/dist/types/client/index.d.ts.map +1 -0
  122. package/dist/types/errors/index.d.ts +41 -0
  123. package/dist/types/errors/index.d.ts.map +1 -0
  124. package/dist/types/index.d.ts +8 -0
  125. package/dist/types/index.d.ts.map +1 -0
  126. package/dist/types/transaction/Signer.d.ts +48 -0
  127. package/dist/types/transaction/Signer.d.ts.map +1 -0
  128. package/dist/types/transaction/TransactionBuilder.d.ts +44 -0
  129. package/dist/types/transaction/TransactionBuilder.d.ts.map +1 -0
  130. package/dist/types/transaction/index.d.ts +4 -0
  131. package/dist/types/transaction/index.d.ts.map +1 -0
  132. package/dist/types/types/api.d.ts +16 -0
  133. package/dist/types/types/api.d.ts.map +1 -0
  134. package/dist/types/types/chain.d.ts +32 -0
  135. package/dist/types/types/chain.d.ts.map +1 -0
  136. package/dist/types/types/events.d.ts +58 -0
  137. package/dist/types/types/events.d.ts.map +1 -0
  138. package/dist/types/types/index.d.ts +7 -0
  139. package/dist/types/types/index.d.ts.map +1 -0
  140. package/dist/types/types/node.d.ts +32 -0
  141. package/dist/types/types/node.d.ts.map +1 -0
  142. package/dist/types/types/state.d.ts +23 -0
  143. package/dist/types/types/state.d.ts.map +1 -0
  144. package/dist/types/types/transaction.d.ts +39 -0
  145. package/dist/types/types/transaction.d.ts.map +1 -0
  146. package/dist/types/utils/address.d.ts +14 -0
  147. package/dist/types/utils/address.d.ts.map +1 -0
  148. package/dist/types/utils/encoding.d.ts +21 -0
  149. package/dist/types/utils/encoding.d.ts.map +1 -0
  150. package/dist/types/utils/hash.d.ts +9 -0
  151. package/dist/types/utils/hash.d.ts.map +1 -0
  152. package/dist/types/utils/index.d.ts +4 -0
  153. package/dist/types/utils/index.d.ts.map +1 -0
  154. package/package.json +69 -0
@@ -0,0 +1,149 @@
1
+ import { ApiError } from '../errors/index.js';
2
+ /**
3
+ * REST API client for Podoru Chain
4
+ */
5
+ export class PodoruClient {
6
+ baseUrl;
7
+ timeout;
8
+ headers;
9
+ constructor(config) {
10
+ this.baseUrl = config.baseUrl.replace(/\/$/, ''); // Remove trailing slash
11
+ this.timeout = config.timeout ?? 30000;
12
+ this.headers = config.headers ?? {};
13
+ }
14
+ /**
15
+ * Internal fetch helper with error handling
16
+ */
17
+ async fetch(path, options) {
18
+ const controller = new AbortController();
19
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
20
+ try {
21
+ const response = await fetch(`${this.baseUrl}${path}`, {
22
+ ...options,
23
+ signal: controller.signal,
24
+ headers: {
25
+ 'Content-Type': 'application/json',
26
+ ...this.headers,
27
+ ...options?.headers,
28
+ },
29
+ });
30
+ clearTimeout(timeoutId);
31
+ if (!response.ok) {
32
+ const errorText = await response.text();
33
+ throw new ApiError(`API Error: ${response.status} - ${errorText}`, response.status);
34
+ }
35
+ const json = (await response.json());
36
+ // Unwrap the {success: true, data: ...} response format
37
+ if (json.success === false) {
38
+ throw new ApiError(json.error || 'Unknown error', 400, json);
39
+ }
40
+ if (json.success && json.data !== undefined) {
41
+ return json.data;
42
+ }
43
+ return json;
44
+ }
45
+ catch (error) {
46
+ clearTimeout(timeoutId);
47
+ if (error instanceof ApiError) {
48
+ throw error;
49
+ }
50
+ if (error instanceof Error && error.name === 'AbortError') {
51
+ throw new ApiError('Request timeout', 408);
52
+ }
53
+ throw new ApiError(`Network error: ${error instanceof Error ? error.message : 'unknown'}`, 0);
54
+ }
55
+ }
56
+ // ===== Chain Endpoints =====
57
+ /**
58
+ * Get blockchain information
59
+ */
60
+ async getChainInfo() {
61
+ return this.fetch('/api/v1/chain/info');
62
+ }
63
+ /**
64
+ * Get block by hash
65
+ */
66
+ async getBlockByHash(hash) {
67
+ return this.fetch(`/api/v1/block/${hash}`);
68
+ }
69
+ /**
70
+ * Get block by height
71
+ */
72
+ async getBlockByHeight(height) {
73
+ return this.fetch(`/api/v1/block/height/${height}`);
74
+ }
75
+ /**
76
+ * Get the latest block
77
+ */
78
+ async getLatestBlock() {
79
+ return this.fetch('/api/v1/block/latest');
80
+ }
81
+ // ===== Transaction Endpoints =====
82
+ /**
83
+ * Get transaction by hash
84
+ */
85
+ async getTransaction(hash) {
86
+ return this.fetch(`/api/v1/transaction/${hash}`);
87
+ }
88
+ /**
89
+ * Submit a signed transaction
90
+ */
91
+ async submitTransaction(tx) {
92
+ return this.fetch('/api/v1/transaction', {
93
+ method: 'POST',
94
+ body: JSON.stringify({ transaction: tx }),
95
+ });
96
+ }
97
+ // ===== State Endpoints =====
98
+ /**
99
+ * Get a single state value
100
+ */
101
+ async getState(key) {
102
+ return this.fetch(`/api/v1/state/${encodeURIComponent(key)}`);
103
+ }
104
+ /**
105
+ * Get multiple state values in a batch
106
+ */
107
+ async batchGetState(keys) {
108
+ return this.fetch('/api/v1/state/batch', {
109
+ method: 'POST',
110
+ body: JSON.stringify({ keys }),
111
+ });
112
+ }
113
+ /**
114
+ * Query state by key prefix
115
+ */
116
+ async queryByPrefix(prefix, limit) {
117
+ return this.fetch('/api/v1/state/query/prefix', {
118
+ method: 'POST',
119
+ body: JSON.stringify({ prefix, limit: limit ?? 100 }),
120
+ });
121
+ }
122
+ // ===== Node Endpoints =====
123
+ /**
124
+ * Get node information
125
+ */
126
+ async getNodeInfo() {
127
+ return this.fetch('/api/v1/node/info');
128
+ }
129
+ /**
130
+ * Get connected peers
131
+ */
132
+ async getPeers() {
133
+ return this.fetch('/api/v1/node/peers');
134
+ }
135
+ /**
136
+ * Health check
137
+ */
138
+ async getHealth() {
139
+ return this.fetch('/api/v1/node/health');
140
+ }
141
+ // ===== Mempool Endpoints =====
142
+ /**
143
+ * Get mempool information and pending transactions
144
+ */
145
+ async getMempool() {
146
+ return this.fetch('/api/v1/mempool');
147
+ }
148
+ }
149
+ //# sourceMappingURL=PodoruClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodoruClient.js","sourceRoot":"","sources":["../../../src/client/PodoruClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { EventType, WebSocketEvent, BlockEvent, TransactionEvent, ChainUpdateEvent, MempoolUpdateEvent, EventDataMap } from '../types/events.js';
2
+ /**
3
+ * WebSocket close event (cross-platform)
4
+ */
5
+ export interface WsCloseEvent {
6
+ code: number;
7
+ reason: string;
8
+ wasClean: boolean;
9
+ }
10
+ /**
11
+ * Configuration for WebSocketClient
12
+ */
13
+ export interface WebSocketClientConfig {
14
+ url: string;
15
+ reconnectInterval?: number;
16
+ maxReconnectAttempts?: number;
17
+ }
18
+ type EventCallback<T> = (event: T) => void;
19
+ /**
20
+ * WebSocket client for real-time Podoru Chain events
21
+ */
22
+ export declare class WebSocketClient {
23
+ private url;
24
+ private reconnectInterval;
25
+ private maxReconnectAttempts;
26
+ private ws;
27
+ private reconnectAttempts;
28
+ private subscriptions;
29
+ private listeners;
30
+ private shouldReconnect;
31
+ constructor(config: WebSocketClientConfig);
32
+ /**
33
+ * Check if connected
34
+ */
35
+ get isConnected(): boolean;
36
+ /**
37
+ * Connect to the WebSocket server
38
+ */
39
+ connect(): Promise<void>;
40
+ /**
41
+ * Disconnect from the WebSocket server
42
+ */
43
+ disconnect(): void;
44
+ /**
45
+ * Subscribe to event types
46
+ */
47
+ subscribe(events: EventType[]): void;
48
+ /**
49
+ * Unsubscribe from event types
50
+ */
51
+ unsubscribe(events: EventType[]): void;
52
+ private sendSubscription;
53
+ private sendUnsubscription;
54
+ /**
55
+ * Register event listener
56
+ */
57
+ on<K extends EventType>(event: K, callback: EventCallback<WebSocketEvent<EventDataMap[K]>>): () => void;
58
+ /**
59
+ * Listen for new block events
60
+ */
61
+ onBlock(callback: (event: BlockEvent) => void): () => void;
62
+ /**
63
+ * Listen for new transaction events
64
+ */
65
+ onTransaction(callback: (event: TransactionEvent) => void): () => void;
66
+ /**
67
+ * Listen for chain update events
68
+ */
69
+ onChainUpdate(callback: (event: ChainUpdateEvent) => void): () => void;
70
+ /**
71
+ * Listen for mempool update events
72
+ */
73
+ onMempoolUpdate(callback: (event: MempoolUpdateEvent) => void): () => void;
74
+ /**
75
+ * Listen for connection events
76
+ */
77
+ onConnect(callback: () => void): () => void;
78
+ /**
79
+ * Listen for disconnect events
80
+ */
81
+ onDisconnect(callback: (event: WsCloseEvent) => void): () => void;
82
+ /**
83
+ * Listen for error events
84
+ */
85
+ onError(callback: (error: Error) => void): () => void;
86
+ private emit;
87
+ }
88
+ export {};
89
+ //# sourceMappingURL=WebSocketClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketClient.d.ts","sourceRoot":"","sources":["../../../src/client/WebSocketClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAG5B;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAE3C;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAuD;IACxE,OAAO,CAAC,eAAe,CAAQ;gBAEnB,MAAM,EAAE,qBAAqB;IAMzC;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CxB;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI;IAOpC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI;IAOtC,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,SAAS,EACpB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GACvD,MAAM,IAAI;IAYb;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI;IAI1D;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IAItE;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IAItE;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,IAAI;IAI1E;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAU3C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI;IAUjE;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI;IAUrD,OAAO,CAAC,IAAI;CAMb"}
@@ -0,0 +1,189 @@
1
+ import { WebSocketError } from '../errors/index.js';
2
+ /**
3
+ * WebSocket client for real-time Podoru Chain events
4
+ */
5
+ export class WebSocketClient {
6
+ url;
7
+ reconnectInterval;
8
+ maxReconnectAttempts;
9
+ ws = null;
10
+ reconnectAttempts = 0;
11
+ subscriptions = new Set();
12
+ listeners = new Map();
13
+ shouldReconnect = true;
14
+ constructor(config) {
15
+ this.url = config.url;
16
+ this.reconnectInterval = config.reconnectInterval ?? 3000;
17
+ this.maxReconnectAttempts = config.maxReconnectAttempts ?? Infinity;
18
+ }
19
+ /**
20
+ * Check if connected
21
+ */
22
+ get isConnected() {
23
+ return this.ws?.readyState === WebSocket.OPEN;
24
+ }
25
+ /**
26
+ * Connect to the WebSocket server
27
+ */
28
+ connect() {
29
+ return new Promise((resolve, reject) => {
30
+ if (this.ws?.readyState === WebSocket.OPEN) {
31
+ resolve();
32
+ return;
33
+ }
34
+ try {
35
+ this.ws = new WebSocket(this.url);
36
+ this.ws.onopen = () => {
37
+ this.reconnectAttempts = 0;
38
+ // Resubscribe to events after reconnection
39
+ if (this.subscriptions.size > 0) {
40
+ this.sendSubscription(Array.from(this.subscriptions));
41
+ }
42
+ this.emit('connect', undefined);
43
+ resolve();
44
+ };
45
+ this.ws.onmessage = (event) => {
46
+ try {
47
+ const data = JSON.parse(event.data);
48
+ this.emit(data.type, data);
49
+ }
50
+ catch {
51
+ // Ignore parse errors
52
+ }
53
+ };
54
+ this.ws.onerror = () => {
55
+ const error = new WebSocketError('WebSocket error');
56
+ this.emit('error', error);
57
+ };
58
+ this.ws.onclose = (event) => {
59
+ this.emit('disconnect', event);
60
+ if (this.shouldReconnect && this.reconnectAttempts < this.maxReconnectAttempts) {
61
+ this.reconnectAttempts++;
62
+ setTimeout(() => this.connect(), this.reconnectInterval);
63
+ }
64
+ };
65
+ }
66
+ catch (error) {
67
+ reject(new WebSocketError(`Failed to connect: ${error instanceof Error ? error.message : 'unknown'}`));
68
+ }
69
+ });
70
+ }
71
+ /**
72
+ * Disconnect from the WebSocket server
73
+ */
74
+ disconnect() {
75
+ this.shouldReconnect = false;
76
+ if (this.ws) {
77
+ this.ws.close();
78
+ this.ws = null;
79
+ }
80
+ }
81
+ /**
82
+ * Subscribe to event types
83
+ */
84
+ subscribe(events) {
85
+ events.forEach((event) => this.subscriptions.add(event));
86
+ if (this.isConnected) {
87
+ this.sendSubscription(events);
88
+ }
89
+ }
90
+ /**
91
+ * Unsubscribe from event types
92
+ */
93
+ unsubscribe(events) {
94
+ events.forEach((event) => this.subscriptions.delete(event));
95
+ if (this.isConnected) {
96
+ this.sendUnsubscription(events);
97
+ }
98
+ }
99
+ sendSubscription(events) {
100
+ if (this.ws && this.isConnected) {
101
+ this.ws.send(JSON.stringify({ action: 'subscribe', events }));
102
+ }
103
+ }
104
+ sendUnsubscription(events) {
105
+ if (this.ws && this.isConnected) {
106
+ this.ws.send(JSON.stringify({ action: 'unsubscribe', events }));
107
+ }
108
+ }
109
+ /**
110
+ * Register event listener
111
+ */
112
+ on(event, callback) {
113
+ if (!this.listeners.has(event)) {
114
+ this.listeners.set(event, new Set());
115
+ }
116
+ this.listeners.get(event).add(callback);
117
+ // Return unsubscribe function
118
+ return () => {
119
+ this.listeners.get(event)?.delete(callback);
120
+ };
121
+ }
122
+ /**
123
+ * Listen for new block events
124
+ */
125
+ onBlock(callback) {
126
+ return this.on('new_block', (event) => callback(event.data));
127
+ }
128
+ /**
129
+ * Listen for new transaction events
130
+ */
131
+ onTransaction(callback) {
132
+ return this.on('new_transaction', (event) => callback(event.data));
133
+ }
134
+ /**
135
+ * Listen for chain update events
136
+ */
137
+ onChainUpdate(callback) {
138
+ return this.on('chain_update', (event) => callback(event.data));
139
+ }
140
+ /**
141
+ * Listen for mempool update events
142
+ */
143
+ onMempoolUpdate(callback) {
144
+ return this.on('mempool_update', (event) => callback(event.data));
145
+ }
146
+ /**
147
+ * Listen for connection events
148
+ */
149
+ onConnect(callback) {
150
+ if (!this.listeners.has('connect')) {
151
+ this.listeners.set('connect', new Set());
152
+ }
153
+ this.listeners.get('connect').add(callback);
154
+ return () => {
155
+ this.listeners.get('connect')?.delete(callback);
156
+ };
157
+ }
158
+ /**
159
+ * Listen for disconnect events
160
+ */
161
+ onDisconnect(callback) {
162
+ if (!this.listeners.has('disconnect')) {
163
+ this.listeners.set('disconnect', new Set());
164
+ }
165
+ this.listeners.get('disconnect').add(callback);
166
+ return () => {
167
+ this.listeners.get('disconnect')?.delete(callback);
168
+ };
169
+ }
170
+ /**
171
+ * Listen for error events
172
+ */
173
+ onError(callback) {
174
+ if (!this.listeners.has('error')) {
175
+ this.listeners.set('error', new Set());
176
+ }
177
+ this.listeners.get('error').add(callback);
178
+ return () => {
179
+ this.listeners.get('error')?.delete(callback);
180
+ };
181
+ }
182
+ emit(event, data) {
183
+ const callbacks = this.listeners.get(event);
184
+ if (callbacks) {
185
+ callbacks.forEach((callback) => callback(data));
186
+ }
187
+ }
188
+ }
189
+ //# sourceMappingURL=WebSocketClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketClient.js","sourceRoot":"","sources":["../../../src/client/WebSocketClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { PodoruClient } from './PodoruClient.js';
2
+ export type { PodoruClientConfig } from './PodoruClient.js';
3
+ export { WebSocketClient } from './WebSocketClient.js';
4
+ export type { WebSocketClientConfig, WsCloseEvent } from './WebSocketClient.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { PodoruClient } from './PodoruClient.js';
2
+ export { WebSocketClient } from './WebSocketClient.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Base error class for Podoru SDK
3
+ */
4
+ export declare class PodoruError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ /**
8
+ * Error from API requests
9
+ */
10
+ export declare class ApiError extends PodoruError {
11
+ readonly statusCode: number;
12
+ readonly response?: unknown;
13
+ constructor(message: string, statusCode: number, response?: unknown);
14
+ }
15
+ /**
16
+ * Error during transaction processing
17
+ */
18
+ export declare class TransactionError extends PodoruError {
19
+ readonly transactionHash?: string;
20
+ constructor(message: string, transactionHash?: string);
21
+ }
22
+ /**
23
+ * Error during transaction signing
24
+ */
25
+ export declare class SigningError extends PodoruError {
26
+ constructor(message: string);
27
+ }
28
+ /**
29
+ * Validation error for invalid inputs
30
+ */
31
+ export declare class ValidationError extends PodoruError {
32
+ constructor(message: string);
33
+ }
34
+ /**
35
+ * WebSocket connection error
36
+ */
37
+ export declare class WebSocketError extends PodoruError {
38
+ readonly code?: number;
39
+ constructor(message: string, code?: number);
40
+ }
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,WAAW;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;CAOpE;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM;CAMtD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,WAAW;gBAC/B,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAM3C"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Base error class for Podoru SDK
3
+ */
4
+ export class PodoruError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = 'PodoruError';
8
+ Object.setPrototypeOf(this, PodoruError.prototype);
9
+ }
10
+ }
11
+ /**
12
+ * Error from API requests
13
+ */
14
+ export class ApiError extends PodoruError {
15
+ statusCode;
16
+ response;
17
+ constructor(message, statusCode, response) {
18
+ super(message);
19
+ this.name = 'ApiError';
20
+ this.statusCode = statusCode;
21
+ this.response = response;
22
+ Object.setPrototypeOf(this, ApiError.prototype);
23
+ }
24
+ }
25
+ /**
26
+ * Error during transaction processing
27
+ */
28
+ export class TransactionError extends PodoruError {
29
+ transactionHash;
30
+ constructor(message, transactionHash) {
31
+ super(message);
32
+ this.name = 'TransactionError';
33
+ this.transactionHash = transactionHash;
34
+ Object.setPrototypeOf(this, TransactionError.prototype);
35
+ }
36
+ }
37
+ /**
38
+ * Error during transaction signing
39
+ */
40
+ export class SigningError extends PodoruError {
41
+ constructor(message) {
42
+ super(message);
43
+ this.name = 'SigningError';
44
+ Object.setPrototypeOf(this, SigningError.prototype);
45
+ }
46
+ }
47
+ /**
48
+ * Validation error for invalid inputs
49
+ */
50
+ export class ValidationError extends PodoruError {
51
+ constructor(message) {
52
+ super(message);
53
+ this.name = 'ValidationError';
54
+ Object.setPrototypeOf(this, ValidationError.prototype);
55
+ }
56
+ }
57
+ /**
58
+ * WebSocket connection error
59
+ */
60
+ export class WebSocketError extends PodoruError {
61
+ code;
62
+ constructor(message, code) {
63
+ super(message);
64
+ this.name = 'WebSocketError';
65
+ this.code = code;
66
+ Object.setPrototypeOf(this, WebSocketError.prototype);
67
+ }
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,WAAW;IAC9B,UAAU,CAAS;IACnB,QAAQ,CAAW;IAE5B,YAAY,OAAe,EAAE,UAAkB,EAAE,QAAkB;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IACtC,eAAe,CAAU;IAElC,YAAY,OAAe,EAAE,eAAwB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IACpC,IAAI,CAAU;IAEvB,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export { PodoruClient, WebSocketClient } from './client/index.js';
2
+ export type { PodoruClientConfig, WebSocketClientConfig } from './client/index.js';
3
+ export { TransactionBuilder, WalletSigner, serializeSignature } from './transaction/index.js';
4
+ export type { Signer, SignatureResult } from './transaction/index.js';
5
+ export { PodoruError, ApiError, TransactionError, SigningError, ValidationError, WebSocketError, } from './errors/index.js';
6
+ export { base64Encode, base64Decode, base64DecodeBytes, hexToBytes, bytesToHex, sha256, sha256Hex, isValidAddress, normalizeAddress, addressEquals, } from './utils/index.js';
7
+ export type { ApiResponse, SubmitTransactionResponse, ChainInfo, BlockHeader, Block, OperationType, Operation, TransactionData, Transaction, UnsignedTransaction, StateEntry, PrefixQueryResult, StateValueResponse, NodeInfo, Peer, MempoolInfo, HealthResponse, EventType, BlockEvent, TransactionEvent, ChainUpdateEvent, MempoolUpdateEvent, WebSocketEvent, EventDataMap, } from './types/index.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGtE,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,MAAM,EACN,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAEV,WAAW,EACX,yBAAyB,EAEzB,SAAS,EACT,WAAW,EACX,KAAK,EAEL,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,EACX,mBAAmB,EAEnB,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAElB,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,cAAc,EAEd,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Client exports
2
+ export { PodoruClient, WebSocketClient } from './client/index.js';
3
+ // Transaction exports
4
+ export { TransactionBuilder, WalletSigner, serializeSignature } from './transaction/index.js';
5
+ // Error exports
6
+ export { PodoruError, ApiError, TransactionError, SigningError, ValidationError, WebSocketError, } from './errors/index.js';
7
+ // Utility exports
8
+ export { base64Encode, base64Decode, base64DecodeBytes, hexToBytes, bytesToHex, sha256, sha256Hex, isValidAddress, normalizeAddress, addressEquals, } from './utils/index.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGlE,sBAAsB;AACtB,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG9F,gBAAgB;AAChB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,MAAM,EACN,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Signature result with r, s, v components
3
+ */
4
+ export interface SignatureResult {
5
+ r: string;
6
+ s: string;
7
+ v: number;
8
+ }
9
+ /**
10
+ * Interface for transaction signers
11
+ */
12
+ export interface Signer {
13
+ readonly address: string;
14
+ sign(hash: Uint8Array): Promise<SignatureResult>;
15
+ }
16
+ /**
17
+ * Wallet-based signer using ethers.js
18
+ */
19
+ export declare class WalletSigner implements Signer {
20
+ private wallet;
21
+ constructor(privateKey: string);
22
+ /**
23
+ * Create a signer from a mnemonic phrase
24
+ */
25
+ static fromMnemonic(mnemonic: string, path?: string): WalletSigner;
26
+ /**
27
+ * Create a random signer (for testing)
28
+ */
29
+ static createRandom(): WalletSigner;
30
+ /**
31
+ * Get the signer's address
32
+ */
33
+ get address(): string;
34
+ /**
35
+ * Get the private key (use with caution)
36
+ */
37
+ get privateKey(): string;
38
+ /**
39
+ * Sign a hash and return the signature components
40
+ */
41
+ sign(hash: Uint8Array): Promise<SignatureResult>;
42
+ }
43
+ /**
44
+ * Serialize signature to 65-byte array (r + s + v)
45
+ * v is normalized to 0 or 1 (not 27/28)
46
+ */
47
+ export declare function serializeSignature(sig: SignatureResult): number[];
48
+ //# sourceMappingURL=Signer.d.ts.map