@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.
- package/README.md +155 -0
- package/dist/cjs/client/PodoruClient.js +153 -0
- package/dist/cjs/client/PodoruClient.js.map +1 -0
- package/dist/cjs/client/WebSocketClient.js +193 -0
- package/dist/cjs/client/WebSocketClient.js.map +1 -0
- package/dist/cjs/client/index.js +8 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/errors/index.js +78 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/index.js +33 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/transaction/Signer.js +82 -0
- package/dist/cjs/transaction/Signer.js.map +1 -0
- package/dist/cjs/transaction/TransactionBuilder.js +127 -0
- package/dist/cjs/transaction/TransactionBuilder.js.map +1 -0
- package/dist/cjs/transaction/index.js +9 -0
- package/dist/cjs/transaction/index.js.map +1 -0
- package/dist/cjs/types/api.js +3 -0
- package/dist/cjs/types/api.js.map +1 -0
- package/dist/cjs/types/chain.js +3 -0
- package/dist/cjs/types/chain.js.map +1 -0
- package/dist/cjs/types/events.js +3 -0
- package/dist/cjs/types/events.js.map +1 -0
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/node.js +3 -0
- package/dist/cjs/types/node.js.map +1 -0
- package/dist/cjs/types/state.js +3 -0
- package/dist/cjs/types/state.js.map +1 -0
- package/dist/cjs/types/transaction.js +3 -0
- package/dist/cjs/types/transaction.js.map +1 -0
- package/dist/cjs/utils/address.js +36 -0
- package/dist/cjs/utils/address.js.map +1 -0
- package/dist/cjs/utils/encoding.js +49 -0
- package/dist/cjs/utils/encoding.js.map +1 -0
- package/dist/cjs/utils/hash.js +28 -0
- package/dist/cjs/utils/hash.js.map +1 -0
- package/dist/cjs/utils/index.js +17 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/esm/client/PodoruClient.d.ts +79 -0
- package/dist/esm/client/PodoruClient.d.ts.map +1 -0
- package/dist/esm/client/PodoruClient.js +149 -0
- package/dist/esm/client/PodoruClient.js.map +1 -0
- package/dist/esm/client/WebSocketClient.d.ts +89 -0
- package/dist/esm/client/WebSocketClient.d.ts.map +1 -0
- package/dist/esm/client/WebSocketClient.js +189 -0
- package/dist/esm/client/WebSocketClient.js.map +1 -0
- package/dist/esm/client/index.d.ts +5 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js +3 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/errors/index.d.ts +41 -0
- package/dist/esm/errors/index.d.ts.map +1 -0
- package/dist/esm/errors/index.js +69 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/transaction/Signer.d.ts +48 -0
- package/dist/esm/transaction/Signer.d.ts.map +1 -0
- package/dist/esm/transaction/Signer.js +77 -0
- package/dist/esm/transaction/Signer.js.map +1 -0
- package/dist/esm/transaction/TransactionBuilder.d.ts +44 -0
- package/dist/esm/transaction/TransactionBuilder.d.ts.map +1 -0
- package/dist/esm/transaction/TransactionBuilder.js +123 -0
- package/dist/esm/transaction/TransactionBuilder.js.map +1 -0
- package/dist/esm/transaction/index.d.ts +4 -0
- package/dist/esm/transaction/index.d.ts.map +1 -0
- package/dist/esm/transaction/index.js +3 -0
- package/dist/esm/transaction/index.js.map +1 -0
- package/dist/esm/types/api.d.ts +16 -0
- package/dist/esm/types/api.d.ts.map +1 -0
- package/dist/esm/types/api.js +2 -0
- package/dist/esm/types/api.js.map +1 -0
- package/dist/esm/types/chain.d.ts +32 -0
- package/dist/esm/types/chain.d.ts.map +1 -0
- package/dist/esm/types/chain.js +2 -0
- package/dist/esm/types/chain.js.map +1 -0
- package/dist/esm/types/events.d.ts +58 -0
- package/dist/esm/types/events.d.ts.map +1 -0
- package/dist/esm/types/events.js +2 -0
- package/dist/esm/types/events.js.map +1 -0
- package/dist/esm/types/index.d.ts +7 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/node.d.ts +32 -0
- package/dist/esm/types/node.d.ts.map +1 -0
- package/dist/esm/types/node.js +2 -0
- package/dist/esm/types/node.js.map +1 -0
- package/dist/esm/types/state.d.ts +23 -0
- package/dist/esm/types/state.d.ts.map +1 -0
- package/dist/esm/types/state.js +2 -0
- package/dist/esm/types/state.js.map +1 -0
- package/dist/esm/types/transaction.d.ts +39 -0
- package/dist/esm/types/transaction.d.ts.map +1 -0
- package/dist/esm/types/transaction.js +2 -0
- package/dist/esm/types/transaction.js.map +1 -0
- package/dist/esm/utils/address.d.ts +14 -0
- package/dist/esm/utils/address.d.ts.map +1 -0
- package/dist/esm/utils/address.js +31 -0
- package/dist/esm/utils/address.js.map +1 -0
- package/dist/esm/utils/encoding.d.ts +21 -0
- package/dist/esm/utils/encoding.d.ts.map +1 -0
- package/dist/esm/utils/encoding.js +42 -0
- package/dist/esm/utils/encoding.js.map +1 -0
- package/dist/esm/utils/hash.d.ts +9 -0
- package/dist/esm/utils/hash.d.ts.map +1 -0
- package/dist/esm/utils/hash.js +24 -0
- package/dist/esm/utils/hash.js.map +1 -0
- package/dist/esm/utils/index.d.ts +4 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +4 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/types/client/PodoruClient.d.ts +79 -0
- package/dist/types/client/PodoruClient.d.ts.map +1 -0
- package/dist/types/client/WebSocketClient.d.ts +89 -0
- package/dist/types/client/WebSocketClient.d.ts.map +1 -0
- package/dist/types/client/index.d.ts +5 -0
- package/dist/types/client/index.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +41 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/transaction/Signer.d.ts +48 -0
- package/dist/types/transaction/Signer.d.ts.map +1 -0
- package/dist/types/transaction/TransactionBuilder.d.ts +44 -0
- package/dist/types/transaction/TransactionBuilder.d.ts.map +1 -0
- package/dist/types/transaction/index.d.ts +4 -0
- package/dist/types/transaction/index.d.ts.map +1 -0
- package/dist/types/types/api.d.ts +16 -0
- package/dist/types/types/api.d.ts.map +1 -0
- package/dist/types/types/chain.d.ts +32 -0
- package/dist/types/types/chain.d.ts.map +1 -0
- package/dist/types/types/events.d.ts +58 -0
- package/dist/types/types/events.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +7 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/node.d.ts +32 -0
- package/dist/types/types/node.d.ts.map +1 -0
- package/dist/types/types/state.d.ts +23 -0
- package/dist/types/types/state.d.ts.map +1 -0
- package/dist/types/types/transaction.d.ts +39 -0
- package/dist/types/types/transaction.d.ts.map +1 -0
- package/dist/types/utils/address.d.ts +14 -0
- package/dist/types/utils/address.d.ts.map +1 -0
- package/dist/types/utils/encoding.d.ts +21 -0
- package/dist/types/utils/encoding.d.ts.map +1 -0
- package/dist/types/utils/hash.d.ts +9 -0
- package/dist/types/utils/hash.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +4 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- 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 @@
|
|
|
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
|