@totemsdk/chain-provider 0.1.4 → 0.1.6

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 CHANGED
@@ -32,7 +32,7 @@ interface ChainStateProvider {
32
32
  | Class | Connects to |
33
33
  |-------|------------|
34
34
  | `HostedProvider` | Axia / MEG hosted API (requires project credentials) |
35
- | `PureMinimaRpcProvider` | A local or self-hosted PureMinima node directly |
35
+ | `MinimaRpcProvider` | A local or self-hosted Totem/Minima node directly |
36
36
  | `LookupClientProvider` | A personal lookup node over Hyperswarm DHT (via `@totemsdk/lookup-client`) |
37
37
  | `CompositeProvider` | Fans out across multiple providers with fallback logic |
38
38
 
@@ -58,9 +58,9 @@ const coins = await provider.getCoins({ address: 'Mx...' });
58
58
  ### Self-hosted node
59
59
 
60
60
  ```typescript
61
- import { PureMinimaRpcProvider } from '@totemsdk/chain-provider';
61
+ import { MinimaRpcProvider } from '@totemsdk/chain-provider';
62
62
 
63
- const provider = new PureMinimaRpcProvider({
63
+ const provider = new MinimaRpcProvider({
64
64
  nodeUrl: 'http://localhost:9005',
65
65
  });
66
66
  ```
@@ -130,7 +130,7 @@ const provider = new LookupClientProvider(mockClient);
130
130
 
131
131
  ## See also
132
132
 
133
- - [`@totemsdk/pureminima-rpc`](https://www.npmjs.com/package/@totemsdk/pureminima-rpc) — the RPC client used by `PureMinimaRpcProvider`
133
+ - [`@totemsdk/minima-rpc`](https://www.npmjs.com/package/@totemsdk/minima-rpc) — the RPC client used by `MinimaRpcProvider`
134
134
  - [`@totemsdk/lookup-client`](https://www.npmjs.com/package/@totemsdk/lookup-client) — connect to a personal lookup node over Hyperswarm DHT
135
135
  - [`@totemsdk/node`](https://www.npmjs.com/package/@totemsdk/node) — Node.js `MinimaProvider`
136
136
  - [`@totemsdk/omnia`](https://www.npmjs.com/package/@totemsdk/omnia) — uses `ChainStateProvider` for coin queries
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export type { ChainStateProvider, CoinsQuery, Coin, MMRProof, ChainTip, TokenInfo, TokenSearchQuery, BroadcastResult, } from './types.js';
2
2
  export { HostedProvider } from './providers/hosted.js';
3
3
  export type { HostedProviderConfig } from './providers/hosted.js';
4
- export { PureMinimaRpcProvider } from './providers/pureminima.js';
4
+ export { MinimaRpcProvider } from './providers/minima-rpc.js';
5
5
  export { LookupClientProvider } from './providers/lookup-client.js';
6
6
  export type { LookupClientLike } from './providers/lookup-client.js';
7
7
  export { CompositeProvider } from './providers/composite.js';
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CompositeProvider = exports.LookupClientProvider = exports.PureMinimaRpcProvider = exports.HostedProvider = void 0;
3
+ exports.CompositeProvider = exports.LookupClientProvider = exports.MinimaRpcProvider = exports.HostedProvider = void 0;
4
4
  var hosted_js_1 = require("./providers/hosted.js");
5
5
  Object.defineProperty(exports, "HostedProvider", { enumerable: true, get: function () { return hosted_js_1.HostedProvider; } });
6
- var pureminima_js_1 = require("./providers/pureminima.js");
7
- Object.defineProperty(exports, "PureMinimaRpcProvider", { enumerable: true, get: function () { return pureminima_js_1.PureMinimaRpcProvider; } });
6
+ var minima_rpc_js_1 = require("./providers/minima-rpc.js");
7
+ Object.defineProperty(exports, "MinimaRpcProvider", { enumerable: true, get: function () { return minima_rpc_js_1.MinimaRpcProvider; } });
8
8
  var lookup_client_js_1 = require("./providers/lookup-client.js");
9
9
  Object.defineProperty(exports, "LookupClientProvider", { enumerable: true, get: function () { return lookup_client_js_1.LookupClientProvider; } });
10
10
  var composite_js_1 = require("./providers/composite.js");
@@ -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 coins = await this.rpc(`coins coinid:${coinId}`);
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 data = await this.rpc(`coinproof coinid:${coinId}`);
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 data = await this.rpc(`tokens tokenid:${tokenId}`);
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}`);
@@ -1,11 +1,11 @@
1
1
  /**
2
- * PureMinimaRpcProvider — thin wrapper over @totemsdk/pureminima-rpc.
2
+ * MinimaRpcProvider — thin wrapper over @totemsdk/minima-rpc.
3
3
  */
4
- import type { PureMinimaClient } from '@totemsdk/pureminima-rpc';
4
+ import type { MinimaRpcClient } from '@totemsdk/minima-rpc';
5
5
  import type { ChainStateProvider, CoinsQuery, Coin, MMRProof, ChainTip, TokenInfo, TokenSearchQuery, BroadcastResult } from '../types.js';
6
- export declare class PureMinimaRpcProvider implements ChainStateProvider {
6
+ export declare class MinimaRpcProvider implements ChainStateProvider {
7
7
  private readonly client;
8
- constructor(client: PureMinimaClient);
8
+ constructor(client: MinimaRpcClient);
9
9
  getCoins(query: CoinsQuery): Promise<Coin[]>;
10
10
  getCoin(coinId: string): Promise<Coin | null>;
11
11
  getProof(coinId: string): Promise<MMRProof>;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  /**
3
- * PureMinimaRpcProvider — thin wrapper over @totemsdk/pureminima-rpc.
3
+ * MinimaRpcProvider — thin wrapper over @totemsdk/minima-rpc.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PureMinimaRpcProvider = void 0;
7
- class PureMinimaRpcProvider {
6
+ exports.MinimaRpcProvider = void 0;
7
+ class MinimaRpcProvider {
8
8
  constructor(client) {
9
9
  this.client = client;
10
10
  }
@@ -73,7 +73,7 @@ class PureMinimaRpcProvider {
73
73
  return {
74
74
  success: true,
75
75
  txpowid: result?.txpowid,
76
- message: 'broadcast via PureMinima txnminepost',
76
+ message: 'broadcast via MinimaRpc txnminepost',
77
77
  };
78
78
  }
79
79
  catch (e) {
@@ -81,4 +81,4 @@ class PureMinimaRpcProvider {
81
81
  }
82
82
  }
83
83
  }
84
- exports.PureMinimaRpcProvider = PureMinimaRpcProvider;
84
+ exports.MinimaRpcProvider = MinimaRpcProvider;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@totemsdk/chain-provider",
3
- "version": "0.1.4",
4
- "description": "Unified ChainStateProvider interface for Totem SDK — Hosted, PureMinima, Composite",
3
+ "version": "0.1.6",
4
+ "description": "Unified ChainStateProvider interface for Totem SDK — Hosted, Minima RPC, Composite",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -17,16 +17,15 @@
17
17
  "LICENSE"
18
18
  ],
19
19
  "dependencies": {
20
- "@totemsdk/core": "1.1.0",
21
- "@totemsdk/pureminima-rpc": "0.1.3"
20
+ "@totemsdk/core": "^1.2.8",
21
+ "@totemsdk/minima-rpc": "^0.1.4"
22
22
  },
23
23
  "devDependencies": {
24
- "@noble/hashes": "^2.2.0",
25
- "@types/jest": "^29.0.0",
24
+ "@types/jest": "^30.0.0",
26
25
  "@types/node": "^20.0.0",
27
- "jest": "^29.0.0",
26
+ "jest": "^30.4.2",
28
27
  "ts-jest": "^29.0.0",
29
- "typescript": "^5.0.0"
28
+ "typescript": "^7.0.2"
30
29
  },
31
30
  "engines": {
32
31
  "node": ">=18.0.0"
@@ -36,14 +35,14 @@
36
35
  },
37
36
  "license": "MIT",
38
37
  "author": "Totem SDK",
39
- "homepage": "https://totemsdk.com",
38
+ "homepage": "https://totem.ing",
40
39
  "bugs": {
41
- "url": "https://github.com/MrGheek/axia-totem/issues"
40
+ "url": "https://github.com/totem-sdk/totem-sdk/issues"
42
41
  },
43
42
  "repository": {
44
43
  "type": "git",
45
- "url": "git+https://github.com/MrGheek/axia-totem.git",
46
- "directory": "packages/totem-sdk/packages/chain-provider"
44
+ "url": "git+https://github.com/totem-sdk/totem-sdk.git",
45
+ "directory": "packages/chain-provider"
47
46
  },
48
47
  "keywords": [
49
48
  "totem",
@@ -52,7 +51,6 @@
52
51
  "blockchain",
53
52
  "quantum-resistant",
54
53
  "wots",
55
- "kissvm",
56
54
  "utxo",
57
55
  "chain-provider",
58
56
  "rpc",
@@ -63,6 +61,6 @@
63
61
  "scripts": {
64
62
  "build": "tsc",
65
63
  "clean": "rm -rf dist",
66
- "test": "jest --passWithNoTests"
64
+ "test": "jest"
67
65
  }
68
66
  }
@@ -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
- }
@@ -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;