@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
package/README.md
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Podoru SDK
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for interacting with Podoru Chain.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @podoru/sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { PodoruClient, TransactionBuilder, WalletSigner } from '@podoru/sdk';
|
|
15
|
+
|
|
16
|
+
// Initialize client
|
|
17
|
+
const client = new PodoruClient({
|
|
18
|
+
baseUrl: 'http://localhost:8545'
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// Read chain info
|
|
22
|
+
const chainInfo = await client.getChainInfo();
|
|
23
|
+
console.log('Height:', chainInfo.height);
|
|
24
|
+
|
|
25
|
+
// Read state
|
|
26
|
+
const value = await client.getState('chain:name');
|
|
27
|
+
console.log('Chain name:', value);
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Submitting Transactions
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import { PodoruClient, TransactionBuilder, WalletSigner } from '@podoru/sdk';
|
|
34
|
+
|
|
35
|
+
const client = new PodoruClient({
|
|
36
|
+
baseUrl: 'http://localhost:8545'
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Create a signer from private key
|
|
40
|
+
const signer = new WalletSigner('0x...');
|
|
41
|
+
|
|
42
|
+
// Or create a random signer (for testing)
|
|
43
|
+
// const signer = WalletSigner.createRandom();
|
|
44
|
+
|
|
45
|
+
// Build and sign a transaction
|
|
46
|
+
const tx = await new TransactionBuilder(signer.address)
|
|
47
|
+
.set('user:alice:name', 'Alice')
|
|
48
|
+
.set('user:alice:email', 'alice@example.com')
|
|
49
|
+
.buildAndSign(signer);
|
|
50
|
+
|
|
51
|
+
// Submit the transaction
|
|
52
|
+
const result = await client.submitTransaction(tx);
|
|
53
|
+
console.log('Transaction hash:', result.transaction_hash);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Real-time Events
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
import { WebSocketClient } from '@podoru/sdk';
|
|
60
|
+
|
|
61
|
+
const ws = new WebSocketClient({
|
|
62
|
+
url: 'ws://localhost:8545/api/v1/ws'
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
await ws.connect();
|
|
66
|
+
ws.subscribe(['new_block', 'new_transaction']);
|
|
67
|
+
|
|
68
|
+
ws.onBlock((event) => {
|
|
69
|
+
console.log('New block:', event.height, event.hash);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
ws.onTransaction((event) => {
|
|
73
|
+
console.log('New transaction:', event.hash);
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## API Reference
|
|
78
|
+
|
|
79
|
+
### PodoruClient
|
|
80
|
+
|
|
81
|
+
REST API client for Podoru Chain.
|
|
82
|
+
|
|
83
|
+
#### Chain Methods
|
|
84
|
+
- `getChainInfo()` - Get blockchain metadata
|
|
85
|
+
- `getBlockByHash(hash)` - Get block by hash
|
|
86
|
+
- `getBlockByHeight(height)` - Get block by height
|
|
87
|
+
- `getLatestBlock()` - Get latest block
|
|
88
|
+
|
|
89
|
+
#### Transaction Methods
|
|
90
|
+
- `getTransaction(hash)` - Get transaction by hash
|
|
91
|
+
- `submitTransaction(tx)` - Submit a signed transaction
|
|
92
|
+
|
|
93
|
+
#### State Methods
|
|
94
|
+
- `getState(key)` - Get a single state value
|
|
95
|
+
- `batchGetState(keys)` - Get multiple state values
|
|
96
|
+
- `queryByPrefix(prefix, limit?)` - Query state by prefix
|
|
97
|
+
|
|
98
|
+
#### Node Methods
|
|
99
|
+
- `getNodeInfo()` - Get node information
|
|
100
|
+
- `getPeers()` - Get connected peers
|
|
101
|
+
- `getHealth()` - Health check
|
|
102
|
+
|
|
103
|
+
#### Mempool Methods
|
|
104
|
+
- `getMempool()` - Get pending transactions
|
|
105
|
+
|
|
106
|
+
### TransactionBuilder
|
|
107
|
+
|
|
108
|
+
Builder for creating transactions.
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
const tx = await new TransactionBuilder(address)
|
|
112
|
+
.set('key1', 'value1') // Add SET operation
|
|
113
|
+
.delete('key2') // Add DELETE operation
|
|
114
|
+
.withNonce(12345) // Custom nonce (optional)
|
|
115
|
+
.withTimestamp(timestamp) // Custom timestamp (optional)
|
|
116
|
+
.buildAndSign(signer); // Sign and build
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### WalletSigner
|
|
120
|
+
|
|
121
|
+
ECDSA signer using secp256k1 (Ethereum-compatible).
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// From private key
|
|
125
|
+
const signer = new WalletSigner('0x...');
|
|
126
|
+
|
|
127
|
+
// From mnemonic
|
|
128
|
+
const signer = WalletSigner.fromMnemonic('word1 word2 ...');
|
|
129
|
+
|
|
130
|
+
// Random (for testing)
|
|
131
|
+
const signer = WalletSigner.createRandom();
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### WebSocketClient
|
|
135
|
+
|
|
136
|
+
Real-time event subscription client.
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
const ws = new WebSocketClient({ url: 'ws://localhost:8545/api/v1/ws' });
|
|
140
|
+
|
|
141
|
+
await ws.connect();
|
|
142
|
+
ws.subscribe(['new_block', 'new_transaction']);
|
|
143
|
+
|
|
144
|
+
ws.onBlock(callback);
|
|
145
|
+
ws.onTransaction(callback);
|
|
146
|
+
ws.onChainUpdate(callback);
|
|
147
|
+
ws.onMempoolUpdate(callback);
|
|
148
|
+
ws.onConnect(callback);
|
|
149
|
+
ws.onDisconnect(callback);
|
|
150
|
+
ws.onError(callback);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## License
|
|
154
|
+
|
|
155
|
+
MIT
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PodoruClient = void 0;
|
|
4
|
+
const index_js_1 = require("../errors/index.js");
|
|
5
|
+
/**
|
|
6
|
+
* REST API client for Podoru Chain
|
|
7
|
+
*/
|
|
8
|
+
class PodoruClient {
|
|
9
|
+
baseUrl;
|
|
10
|
+
timeout;
|
|
11
|
+
headers;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.baseUrl = config.baseUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
14
|
+
this.timeout = config.timeout ?? 30000;
|
|
15
|
+
this.headers = config.headers ?? {};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Internal fetch helper with error handling
|
|
19
|
+
*/
|
|
20
|
+
async fetch(path, options) {
|
|
21
|
+
const controller = new AbortController();
|
|
22
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
23
|
+
try {
|
|
24
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
25
|
+
...options,
|
|
26
|
+
signal: controller.signal,
|
|
27
|
+
headers: {
|
|
28
|
+
'Content-Type': 'application/json',
|
|
29
|
+
...this.headers,
|
|
30
|
+
...options?.headers,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
clearTimeout(timeoutId);
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
const errorText = await response.text();
|
|
36
|
+
throw new index_js_1.ApiError(`API Error: ${response.status} - ${errorText}`, response.status);
|
|
37
|
+
}
|
|
38
|
+
const json = (await response.json());
|
|
39
|
+
// Unwrap the {success: true, data: ...} response format
|
|
40
|
+
if (json.success === false) {
|
|
41
|
+
throw new index_js_1.ApiError(json.error || 'Unknown error', 400, json);
|
|
42
|
+
}
|
|
43
|
+
if (json.success && json.data !== undefined) {
|
|
44
|
+
return json.data;
|
|
45
|
+
}
|
|
46
|
+
return json;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
clearTimeout(timeoutId);
|
|
50
|
+
if (error instanceof index_js_1.ApiError) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
54
|
+
throw new index_js_1.ApiError('Request timeout', 408);
|
|
55
|
+
}
|
|
56
|
+
throw new index_js_1.ApiError(`Network error: ${error instanceof Error ? error.message : 'unknown'}`, 0);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ===== Chain Endpoints =====
|
|
60
|
+
/**
|
|
61
|
+
* Get blockchain information
|
|
62
|
+
*/
|
|
63
|
+
async getChainInfo() {
|
|
64
|
+
return this.fetch('/api/v1/chain/info');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get block by hash
|
|
68
|
+
*/
|
|
69
|
+
async getBlockByHash(hash) {
|
|
70
|
+
return this.fetch(`/api/v1/block/${hash}`);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get block by height
|
|
74
|
+
*/
|
|
75
|
+
async getBlockByHeight(height) {
|
|
76
|
+
return this.fetch(`/api/v1/block/height/${height}`);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get the latest block
|
|
80
|
+
*/
|
|
81
|
+
async getLatestBlock() {
|
|
82
|
+
return this.fetch('/api/v1/block/latest');
|
|
83
|
+
}
|
|
84
|
+
// ===== Transaction Endpoints =====
|
|
85
|
+
/**
|
|
86
|
+
* Get transaction by hash
|
|
87
|
+
*/
|
|
88
|
+
async getTransaction(hash) {
|
|
89
|
+
return this.fetch(`/api/v1/transaction/${hash}`);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Submit a signed transaction
|
|
93
|
+
*/
|
|
94
|
+
async submitTransaction(tx) {
|
|
95
|
+
return this.fetch('/api/v1/transaction', {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
body: JSON.stringify({ transaction: tx }),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// ===== State Endpoints =====
|
|
101
|
+
/**
|
|
102
|
+
* Get a single state value
|
|
103
|
+
*/
|
|
104
|
+
async getState(key) {
|
|
105
|
+
return this.fetch(`/api/v1/state/${encodeURIComponent(key)}`);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get multiple state values in a batch
|
|
109
|
+
*/
|
|
110
|
+
async batchGetState(keys) {
|
|
111
|
+
return this.fetch('/api/v1/state/batch', {
|
|
112
|
+
method: 'POST',
|
|
113
|
+
body: JSON.stringify({ keys }),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Query state by key prefix
|
|
118
|
+
*/
|
|
119
|
+
async queryByPrefix(prefix, limit) {
|
|
120
|
+
return this.fetch('/api/v1/state/query/prefix', {
|
|
121
|
+
method: 'POST',
|
|
122
|
+
body: JSON.stringify({ prefix, limit: limit ?? 100 }),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// ===== Node Endpoints =====
|
|
126
|
+
/**
|
|
127
|
+
* Get node information
|
|
128
|
+
*/
|
|
129
|
+
async getNodeInfo() {
|
|
130
|
+
return this.fetch('/api/v1/node/info');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get connected peers
|
|
134
|
+
*/
|
|
135
|
+
async getPeers() {
|
|
136
|
+
return this.fetch('/api/v1/node/peers');
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Health check
|
|
140
|
+
*/
|
|
141
|
+
async getHealth() {
|
|
142
|
+
return this.fetch('/api/v1/node/health');
|
|
143
|
+
}
|
|
144
|
+
// ===== Mempool Endpoints =====
|
|
145
|
+
/**
|
|
146
|
+
* Get mempool information and pending transactions
|
|
147
|
+
*/
|
|
148
|
+
async getMempool() {
|
|
149
|
+
return this.fetch('/api/v1/mempool');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.PodoruClient = PodoruClient;
|
|
153
|
+
//# 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,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketClient = void 0;
|
|
4
|
+
const index_js_1 = require("../errors/index.js");
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket client for real-time Podoru Chain events
|
|
7
|
+
*/
|
|
8
|
+
class WebSocketClient {
|
|
9
|
+
url;
|
|
10
|
+
reconnectInterval;
|
|
11
|
+
maxReconnectAttempts;
|
|
12
|
+
ws = null;
|
|
13
|
+
reconnectAttempts = 0;
|
|
14
|
+
subscriptions = new Set();
|
|
15
|
+
listeners = new Map();
|
|
16
|
+
shouldReconnect = true;
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.url = config.url;
|
|
19
|
+
this.reconnectInterval = config.reconnectInterval ?? 3000;
|
|
20
|
+
this.maxReconnectAttempts = config.maxReconnectAttempts ?? Infinity;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if connected
|
|
24
|
+
*/
|
|
25
|
+
get isConnected() {
|
|
26
|
+
return this.ws?.readyState === WebSocket.OPEN;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Connect to the WebSocket server
|
|
30
|
+
*/
|
|
31
|
+
connect() {
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
34
|
+
resolve();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
this.ws = new WebSocket(this.url);
|
|
39
|
+
this.ws.onopen = () => {
|
|
40
|
+
this.reconnectAttempts = 0;
|
|
41
|
+
// Resubscribe to events after reconnection
|
|
42
|
+
if (this.subscriptions.size > 0) {
|
|
43
|
+
this.sendSubscription(Array.from(this.subscriptions));
|
|
44
|
+
}
|
|
45
|
+
this.emit('connect', undefined);
|
|
46
|
+
resolve();
|
|
47
|
+
};
|
|
48
|
+
this.ws.onmessage = (event) => {
|
|
49
|
+
try {
|
|
50
|
+
const data = JSON.parse(event.data);
|
|
51
|
+
this.emit(data.type, data);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Ignore parse errors
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
this.ws.onerror = () => {
|
|
58
|
+
const error = new index_js_1.WebSocketError('WebSocket error');
|
|
59
|
+
this.emit('error', error);
|
|
60
|
+
};
|
|
61
|
+
this.ws.onclose = (event) => {
|
|
62
|
+
this.emit('disconnect', event);
|
|
63
|
+
if (this.shouldReconnect && this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
64
|
+
this.reconnectAttempts++;
|
|
65
|
+
setTimeout(() => this.connect(), this.reconnectInterval);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
reject(new index_js_1.WebSocketError(`Failed to connect: ${error instanceof Error ? error.message : 'unknown'}`));
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Disconnect from the WebSocket server
|
|
76
|
+
*/
|
|
77
|
+
disconnect() {
|
|
78
|
+
this.shouldReconnect = false;
|
|
79
|
+
if (this.ws) {
|
|
80
|
+
this.ws.close();
|
|
81
|
+
this.ws = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Subscribe to event types
|
|
86
|
+
*/
|
|
87
|
+
subscribe(events) {
|
|
88
|
+
events.forEach((event) => this.subscriptions.add(event));
|
|
89
|
+
if (this.isConnected) {
|
|
90
|
+
this.sendSubscription(events);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Unsubscribe from event types
|
|
95
|
+
*/
|
|
96
|
+
unsubscribe(events) {
|
|
97
|
+
events.forEach((event) => this.subscriptions.delete(event));
|
|
98
|
+
if (this.isConnected) {
|
|
99
|
+
this.sendUnsubscription(events);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
sendSubscription(events) {
|
|
103
|
+
if (this.ws && this.isConnected) {
|
|
104
|
+
this.ws.send(JSON.stringify({ action: 'subscribe', events }));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
sendUnsubscription(events) {
|
|
108
|
+
if (this.ws && this.isConnected) {
|
|
109
|
+
this.ws.send(JSON.stringify({ action: 'unsubscribe', events }));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Register event listener
|
|
114
|
+
*/
|
|
115
|
+
on(event, callback) {
|
|
116
|
+
if (!this.listeners.has(event)) {
|
|
117
|
+
this.listeners.set(event, new Set());
|
|
118
|
+
}
|
|
119
|
+
this.listeners.get(event).add(callback);
|
|
120
|
+
// Return unsubscribe function
|
|
121
|
+
return () => {
|
|
122
|
+
this.listeners.get(event)?.delete(callback);
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Listen for new block events
|
|
127
|
+
*/
|
|
128
|
+
onBlock(callback) {
|
|
129
|
+
return this.on('new_block', (event) => callback(event.data));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Listen for new transaction events
|
|
133
|
+
*/
|
|
134
|
+
onTransaction(callback) {
|
|
135
|
+
return this.on('new_transaction', (event) => callback(event.data));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Listen for chain update events
|
|
139
|
+
*/
|
|
140
|
+
onChainUpdate(callback) {
|
|
141
|
+
return this.on('chain_update', (event) => callback(event.data));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Listen for mempool update events
|
|
145
|
+
*/
|
|
146
|
+
onMempoolUpdate(callback) {
|
|
147
|
+
return this.on('mempool_update', (event) => callback(event.data));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Listen for connection events
|
|
151
|
+
*/
|
|
152
|
+
onConnect(callback) {
|
|
153
|
+
if (!this.listeners.has('connect')) {
|
|
154
|
+
this.listeners.set('connect', new Set());
|
|
155
|
+
}
|
|
156
|
+
this.listeners.get('connect').add(callback);
|
|
157
|
+
return () => {
|
|
158
|
+
this.listeners.get('connect')?.delete(callback);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Listen for disconnect events
|
|
163
|
+
*/
|
|
164
|
+
onDisconnect(callback) {
|
|
165
|
+
if (!this.listeners.has('disconnect')) {
|
|
166
|
+
this.listeners.set('disconnect', new Set());
|
|
167
|
+
}
|
|
168
|
+
this.listeners.get('disconnect').add(callback);
|
|
169
|
+
return () => {
|
|
170
|
+
this.listeners.get('disconnect')?.delete(callback);
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Listen for error events
|
|
175
|
+
*/
|
|
176
|
+
onError(callback) {
|
|
177
|
+
if (!this.listeners.has('error')) {
|
|
178
|
+
this.listeners.set('error', new Set());
|
|
179
|
+
}
|
|
180
|
+
this.listeners.get('error').add(callback);
|
|
181
|
+
return () => {
|
|
182
|
+
this.listeners.get('error')?.delete(callback);
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
emit(event, data) {
|
|
186
|
+
const callbacks = this.listeners.get(event);
|
|
187
|
+
if (callbacks) {
|
|
188
|
+
callbacks.forEach((callback) => callback(data));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.WebSocketClient = WebSocketClient;
|
|
193
|
+
//# 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,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketClient = exports.PodoruClient = void 0;
|
|
4
|
+
var PodoruClient_js_1 = require("./PodoruClient.js");
|
|
5
|
+
Object.defineProperty(exports, "PodoruClient", { enumerable: true, get: function () { return PodoruClient_js_1.PodoruClient; } });
|
|
6
|
+
var WebSocketClient_js_1 = require("./WebSocketClient.js");
|
|
7
|
+
Object.defineProperty(exports, "WebSocketClient", { enumerable: true, get: function () { return WebSocketClient_js_1.WebSocketClient; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":";;;AAAA,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AAGrB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketError = exports.ValidationError = exports.SigningError = exports.TransactionError = exports.ApiError = exports.PodoruError = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base error class for Podoru SDK
|
|
6
|
+
*/
|
|
7
|
+
class PodoruError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'PodoruError';
|
|
11
|
+
Object.setPrototypeOf(this, PodoruError.prototype);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.PodoruError = PodoruError;
|
|
15
|
+
/**
|
|
16
|
+
* Error from API requests
|
|
17
|
+
*/
|
|
18
|
+
class ApiError extends PodoruError {
|
|
19
|
+
statusCode;
|
|
20
|
+
response;
|
|
21
|
+
constructor(message, statusCode, response) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'ApiError';
|
|
24
|
+
this.statusCode = statusCode;
|
|
25
|
+
this.response = response;
|
|
26
|
+
Object.setPrototypeOf(this, ApiError.prototype);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.ApiError = ApiError;
|
|
30
|
+
/**
|
|
31
|
+
* Error during transaction processing
|
|
32
|
+
*/
|
|
33
|
+
class TransactionError extends PodoruError {
|
|
34
|
+
transactionHash;
|
|
35
|
+
constructor(message, transactionHash) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = 'TransactionError';
|
|
38
|
+
this.transactionHash = transactionHash;
|
|
39
|
+
Object.setPrototypeOf(this, TransactionError.prototype);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.TransactionError = TransactionError;
|
|
43
|
+
/**
|
|
44
|
+
* Error during transaction signing
|
|
45
|
+
*/
|
|
46
|
+
class SigningError extends PodoruError {
|
|
47
|
+
constructor(message) {
|
|
48
|
+
super(message);
|
|
49
|
+
this.name = 'SigningError';
|
|
50
|
+
Object.setPrototypeOf(this, SigningError.prototype);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.SigningError = SigningError;
|
|
54
|
+
/**
|
|
55
|
+
* Validation error for invalid inputs
|
|
56
|
+
*/
|
|
57
|
+
class ValidationError extends PodoruError {
|
|
58
|
+
constructor(message) {
|
|
59
|
+
super(message);
|
|
60
|
+
this.name = 'ValidationError';
|
|
61
|
+
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.ValidationError = ValidationError;
|
|
65
|
+
/**
|
|
66
|
+
* WebSocket connection error
|
|
67
|
+
*/
|
|
68
|
+
class WebSocketError extends PodoruError {
|
|
69
|
+
code;
|
|
70
|
+
constructor(message, code) {
|
|
71
|
+
super(message);
|
|
72
|
+
this.name = 'WebSocketError';
|
|
73
|
+
this.code = code;
|
|
74
|
+
Object.setPrototypeOf(this, WebSocketError.prototype);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.WebSocketError = WebSocketError;
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,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;AAND,kCAMC;AAED;;GAEG;AACH,MAAa,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;AAXD,4BAWC;AAED;;GAEG;AACH,MAAa,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;AATD,4CASC;AAED;;GAEG;AACH,MAAa,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;AAND,oCAMC;AAED;;GAEG;AACH,MAAa,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;AAND,0CAMC;AAED;;GAEG;AACH,MAAa,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;AATD,wCASC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addressEquals = exports.normalizeAddress = exports.isValidAddress = exports.sha256Hex = exports.sha256 = exports.bytesToHex = exports.hexToBytes = exports.base64DecodeBytes = exports.base64Decode = exports.base64Encode = exports.WebSocketError = exports.ValidationError = exports.SigningError = exports.TransactionError = exports.ApiError = exports.PodoruError = exports.serializeSignature = exports.WalletSigner = exports.TransactionBuilder = exports.WebSocketClient = exports.PodoruClient = void 0;
|
|
4
|
+
// Client exports
|
|
5
|
+
var index_js_1 = require("./client/index.js");
|
|
6
|
+
Object.defineProperty(exports, "PodoruClient", { enumerable: true, get: function () { return index_js_1.PodoruClient; } });
|
|
7
|
+
Object.defineProperty(exports, "WebSocketClient", { enumerable: true, get: function () { return index_js_1.WebSocketClient; } });
|
|
8
|
+
// Transaction exports
|
|
9
|
+
var index_js_2 = require("./transaction/index.js");
|
|
10
|
+
Object.defineProperty(exports, "TransactionBuilder", { enumerable: true, get: function () { return index_js_2.TransactionBuilder; } });
|
|
11
|
+
Object.defineProperty(exports, "WalletSigner", { enumerable: true, get: function () { return index_js_2.WalletSigner; } });
|
|
12
|
+
Object.defineProperty(exports, "serializeSignature", { enumerable: true, get: function () { return index_js_2.serializeSignature; } });
|
|
13
|
+
// Error exports
|
|
14
|
+
var index_js_3 = require("./errors/index.js");
|
|
15
|
+
Object.defineProperty(exports, "PodoruError", { enumerable: true, get: function () { return index_js_3.PodoruError; } });
|
|
16
|
+
Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return index_js_3.ApiError; } });
|
|
17
|
+
Object.defineProperty(exports, "TransactionError", { enumerable: true, get: function () { return index_js_3.TransactionError; } });
|
|
18
|
+
Object.defineProperty(exports, "SigningError", { enumerable: true, get: function () { return index_js_3.SigningError; } });
|
|
19
|
+
Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return index_js_3.ValidationError; } });
|
|
20
|
+
Object.defineProperty(exports, "WebSocketError", { enumerable: true, get: function () { return index_js_3.WebSocketError; } });
|
|
21
|
+
// Utility exports
|
|
22
|
+
var index_js_4 = require("./utils/index.js");
|
|
23
|
+
Object.defineProperty(exports, "base64Encode", { enumerable: true, get: function () { return index_js_4.base64Encode; } });
|
|
24
|
+
Object.defineProperty(exports, "base64Decode", { enumerable: true, get: function () { return index_js_4.base64Decode; } });
|
|
25
|
+
Object.defineProperty(exports, "base64DecodeBytes", { enumerable: true, get: function () { return index_js_4.base64DecodeBytes; } });
|
|
26
|
+
Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return index_js_4.hexToBytes; } });
|
|
27
|
+
Object.defineProperty(exports, "bytesToHex", { enumerable: true, get: function () { return index_js_4.bytesToHex; } });
|
|
28
|
+
Object.defineProperty(exports, "sha256", { enumerable: true, get: function () { return index_js_4.sha256; } });
|
|
29
|
+
Object.defineProperty(exports, "sha256Hex", { enumerable: true, get: function () { return index_js_4.sha256Hex; } });
|
|
30
|
+
Object.defineProperty(exports, "isValidAddress", { enumerable: true, get: function () { return index_js_4.isValidAddress; } });
|
|
31
|
+
Object.defineProperty(exports, "normalizeAddress", { enumerable: true, get: function () { return index_js_4.normalizeAddress; } });
|
|
32
|
+
Object.defineProperty(exports, "addressEquals", { enumerable: true, get: function () { return index_js_4.addressEquals; } });
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,iBAAiB;AACjB,8CAAkE;AAAzD,wGAAA,YAAY,OAAA;AAAE,2GAAA,eAAe,OAAA;AAGtC,sBAAsB;AACtB,mDAA8F;AAArF,8GAAA,kBAAkB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAG7D,gBAAgB;AAChB,8CAO2B;AANzB,uGAAA,WAAW,OAAA;AACX,oGAAA,QAAQ,OAAA;AACR,4GAAA,gBAAgB,OAAA;AAChB,wGAAA,YAAY,OAAA;AACZ,2GAAA,eAAe,OAAA;AACf,0GAAA,cAAc,OAAA;AAGhB,kBAAkB;AAClB,6CAW0B;AAVxB,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,6GAAA,iBAAiB,OAAA;AACjB,sGAAA,UAAU,OAAA;AACV,sGAAA,UAAU,OAAA;AACV,kGAAA,MAAM,OAAA;AACN,qGAAA,SAAS,OAAA;AACT,0GAAA,cAAc,OAAA;AACd,4GAAA,gBAAgB,OAAA;AAChB,yGAAA,aAAa,OAAA"}
|