@totemsdk/chain-provider 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/providers/hosted.js +22 -3
- package/package.json +17 -17
- package/dist/providers/lookup.d.ts +0 -20
- package/dist/providers/lookup.js +0 -45
package/dist/providers/hosted.js
CHANGED
|
@@ -12,9 +12,25 @@
|
|
|
12
12
|
*/
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.HostedProvider = void 0;
|
|
15
|
+
function sanitizeRpcParam(value, name) {
|
|
16
|
+
if (value.length > 1024) {
|
|
17
|
+
throw new Error(`RPC parameter ${name} exceeds maximum length (1024)`);
|
|
18
|
+
}
|
|
19
|
+
if (/[\x00-\x1f\x7f]/.test(value)) {
|
|
20
|
+
throw new Error(`RPC parameter ${name} contains control characters`);
|
|
21
|
+
}
|
|
22
|
+
const trimmed = value.trim();
|
|
23
|
+
if (trimmed.length === 0) {
|
|
24
|
+
throw new Error(`RPC parameter ${name} is empty after trimming`);
|
|
25
|
+
}
|
|
26
|
+
return trimmed;
|
|
27
|
+
}
|
|
15
28
|
class HostedProvider {
|
|
16
29
|
constructor(config) {
|
|
17
30
|
this.baseUrl = config.baseUrl.replace(/\/$/, '');
|
|
31
|
+
if (!this.baseUrl.startsWith('https://')) {
|
|
32
|
+
throw new Error('HostedProvider requires HTTPS — credentials sent via x-api-key header');
|
|
33
|
+
}
|
|
18
34
|
this.apiKey = config.apiKey;
|
|
19
35
|
this.timeoutMs = config.timeoutMs ?? 30000;
|
|
20
36
|
}
|
|
@@ -105,7 +121,8 @@ class HostedProvider {
|
|
|
105
121
|
}
|
|
106
122
|
async getCoin(coinId) {
|
|
107
123
|
try {
|
|
108
|
-
const
|
|
124
|
+
const clean = sanitizeRpcParam(coinId, 'coinId');
|
|
125
|
+
const coins = await this.rpc(`coins coinid:${clean}`);
|
|
109
126
|
const u = Array.isArray(coins) ? coins[0] : null;
|
|
110
127
|
if (!u)
|
|
111
128
|
return null;
|
|
@@ -131,7 +148,8 @@ class HostedProvider {
|
|
|
131
148
|
* Get MMR proof for a coin via Minima `coinproof` RPC command.
|
|
132
149
|
*/
|
|
133
150
|
async getProof(coinId) {
|
|
134
|
-
const
|
|
151
|
+
const clean = sanitizeRpcParam(coinId, 'coinId');
|
|
152
|
+
const data = await this.rpc(`coinproof coinid:${clean}`);
|
|
135
153
|
return { coinid: coinId, data };
|
|
136
154
|
}
|
|
137
155
|
/**
|
|
@@ -150,7 +168,8 @@ class HostedProvider {
|
|
|
150
168
|
* Get token info via Minima `tokens tokenid:X` RPC command.
|
|
151
169
|
*/
|
|
152
170
|
async getToken(tokenId) {
|
|
153
|
-
const
|
|
171
|
+
const clean = sanitizeRpcParam(tokenId, 'tokenId');
|
|
172
|
+
const data = await this.rpc(`tokens tokenid:${clean}`);
|
|
154
173
|
const t = Array.isArray(data) ? data[0] : data;
|
|
155
174
|
if (!t)
|
|
156
175
|
throw new Error(`Token not found: ${tokenId}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@totemsdk/chain-provider",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Unified ChainStateProvider interface for Totem SDK — Hosted, PureMinima, Composite",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,22 +11,27 @@
|
|
|
11
11
|
"import": "./dist/index.js"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"prepare": "tsc",
|
|
17
|
+
"clean": "rm -rf dist",
|
|
18
|
+
"test": "jest --passWithNoTests"
|
|
19
|
+
},
|
|
14
20
|
"files": [
|
|
15
21
|
"dist",
|
|
16
22
|
"README.md",
|
|
17
23
|
"LICENSE"
|
|
18
24
|
],
|
|
19
25
|
"dependencies": {
|
|
20
|
-
"@totemsdk/core": "1.1.0",
|
|
21
|
-
"@totemsdk/pureminima-rpc": "0.1.3"
|
|
26
|
+
"@totemsdk/core": "^1.1.0",
|
|
27
|
+
"@totemsdk/pureminima-rpc": "^0.1.3"
|
|
22
28
|
},
|
|
23
29
|
"devDependencies": {
|
|
24
|
-
"@
|
|
25
|
-
"@types/jest": "^29.0.0",
|
|
30
|
+
"@types/jest": "^30.0.0",
|
|
26
31
|
"@types/node": "^20.0.0",
|
|
27
|
-
"jest": "^
|
|
32
|
+
"jest": "^30.4.2",
|
|
28
33
|
"ts-jest": "^29.0.0",
|
|
29
|
-
"typescript": "^
|
|
34
|
+
"typescript": "^7.0.2"
|
|
30
35
|
},
|
|
31
36
|
"engines": {
|
|
32
37
|
"node": ">=18.0.0"
|
|
@@ -36,13 +41,13 @@
|
|
|
36
41
|
},
|
|
37
42
|
"license": "MIT",
|
|
38
43
|
"author": "Totem SDK",
|
|
39
|
-
"homepage": "https://
|
|
44
|
+
"homepage": "https://totem.ing",
|
|
40
45
|
"bugs": {
|
|
41
|
-
"url": "https://github.com/
|
|
46
|
+
"url": "https://github.com/totem-sdk/totem-sdk/issues"
|
|
42
47
|
},
|
|
43
48
|
"repository": {
|
|
44
49
|
"type": "git",
|
|
45
|
-
"url": "git+https://github.com/
|
|
50
|
+
"url": "git+https://github.com/totem-sdk/totem-sdk.git",
|
|
46
51
|
"directory": "packages/totem-sdk/packages/chain-provider"
|
|
47
52
|
},
|
|
48
53
|
"keywords": [
|
|
@@ -59,10 +64,5 @@
|
|
|
59
64
|
"provider",
|
|
60
65
|
"chain-data",
|
|
61
66
|
"strategy-pattern"
|
|
62
|
-
]
|
|
63
|
-
|
|
64
|
-
"build": "tsc",
|
|
65
|
-
"clean": "rm -rf dist",
|
|
66
|
-
"test": "jest --passWithNoTests"
|
|
67
|
-
}
|
|
68
|
-
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LookupNodeProvider — stub.
|
|
3
|
-
*
|
|
4
|
-
* Full implementation lives in @totemsdk/lookup-client which replaces this
|
|
5
|
-
* stub once the lookup node package is available.
|
|
6
|
-
*/
|
|
7
|
-
import type { ChainStateProvider, CoinsQuery, Coin, MMRProof, ChainTip, TokenInfo, TokenSearchQuery, BroadcastResult } from '../types.js';
|
|
8
|
-
export declare class LookupNodeNotImplementedError extends Error {
|
|
9
|
-
constructor();
|
|
10
|
-
}
|
|
11
|
-
export declare class LookupNodeProvider implements ChainStateProvider {
|
|
12
|
-
getCoins(_query: CoinsQuery): Promise<Coin[]>;
|
|
13
|
-
getCoin(_coinId: string): Promise<Coin | null>;
|
|
14
|
-
getProof(_coinId: string): Promise<MMRProof>;
|
|
15
|
-
getTip(): Promise<ChainTip>;
|
|
16
|
-
getToken(_tokenId: string): Promise<TokenInfo>;
|
|
17
|
-
searchTokens(_query: TokenSearchQuery): Promise<TokenInfo[]>;
|
|
18
|
-
getTokensByCreator(_address: string): Promise<TokenInfo[]>;
|
|
19
|
-
broadcastTxPoW(_txpowHex: string): Promise<BroadcastResult>;
|
|
20
|
-
}
|
package/dist/providers/lookup.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* LookupNodeProvider — stub.
|
|
4
|
-
*
|
|
5
|
-
* Full implementation lives in @totemsdk/lookup-client which replaces this
|
|
6
|
-
* stub once the lookup node package is available.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.LookupNodeProvider = exports.LookupNodeNotImplementedError = void 0;
|
|
10
|
-
class LookupNodeNotImplementedError extends Error {
|
|
11
|
-
constructor() {
|
|
12
|
-
super('LookupNodeProvider is not yet implemented. ' +
|
|
13
|
-
'Install @totemsdk/lookup-client and use LookupClientProvider instead. ' +
|
|
14
|
-
'See https://github.com/Totem/totem-sdk for setup instructions.');
|
|
15
|
-
this.name = 'LookupNodeNotImplementedError';
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.LookupNodeNotImplementedError = LookupNodeNotImplementedError;
|
|
19
|
-
class LookupNodeProvider {
|
|
20
|
-
getCoins(_query) {
|
|
21
|
-
throw new LookupNodeNotImplementedError();
|
|
22
|
-
}
|
|
23
|
-
getCoin(_coinId) {
|
|
24
|
-
throw new LookupNodeNotImplementedError();
|
|
25
|
-
}
|
|
26
|
-
getProof(_coinId) {
|
|
27
|
-
throw new LookupNodeNotImplementedError();
|
|
28
|
-
}
|
|
29
|
-
getTip() {
|
|
30
|
-
throw new LookupNodeNotImplementedError();
|
|
31
|
-
}
|
|
32
|
-
getToken(_tokenId) {
|
|
33
|
-
throw new LookupNodeNotImplementedError();
|
|
34
|
-
}
|
|
35
|
-
searchTokens(_query) {
|
|
36
|
-
throw new LookupNodeNotImplementedError();
|
|
37
|
-
}
|
|
38
|
-
getTokensByCreator(_address) {
|
|
39
|
-
throw new LookupNodeNotImplementedError();
|
|
40
|
-
}
|
|
41
|
-
broadcastTxPoW(_txpowHex) {
|
|
42
|
-
throw new LookupNodeNotImplementedError();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.LookupNodeProvider = LookupNodeProvider;
|