@one-source/api-mcp 5.3.0 → 5.3.1

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
@@ -1,6 +1,6 @@
1
1
  # onesource-api-mcp
2
2
 
3
- MCP server for OneSource blockchain data. 26 named tools for balances, NFTs, transactions, events, and live chain queries via API key or x402 micropayments.
3
+ MCP server for OneSource blockchain data. 27 named tools for balances, NFTs, transactions, events, and live chain queries via API key or x402 micropayments.
4
4
 
5
5
  ```
6
6
  npx onesource-api-mcp
@@ -23,7 +23,7 @@ claude mcp add onesource-api -- npx onesource-api-mcp
23
23
  }
24
24
  ```
25
25
 
26
- ## Tools (26)
26
+ ## Tools (27)
27
27
 
28
28
 
29
29
  ### Live Chain Data (12 tools)
@@ -62,11 +62,12 @@ claude mcp add onesource-api -- npx onesource-api-mcp
62
62
  | `1s_storage_read` | Read storage slot |
63
63
  | `1s_tx_receipt` | Transaction receipt |
64
64
 
65
- ### Session (1 tool)
65
+ ### Payments (2 tools)
66
66
 
67
67
  | Tool | Description |
68
68
  |------|-------------|
69
69
  | `1s_payment_mode` | View or switch the x402 payment scheme (`exact` per-call vs `batch` payment channel) |
70
+ | `1s_refund` | Refund unused `batch` channel balance back to your wallet on demand |
70
71
 
71
72
 
72
73
  ## Networks
@@ -117,6 +118,8 @@ X402_PRIVATE_KEY=your-private-key-hex npx onesource-api-mcp
117
118
 
118
119
  Payments default to the **exact** scheme (one USDC payment per call). For a burst of calls you can switch to **batch** settlement — a payment channel that funds many off-chain calls from a single on-chain deposit, settled with one claim — by calling the `1s_payment_mode` tool with `{ "mode": "batch" }`, or by setting `X402_PAYMENT_MODE=batch`. Both modes use the same wallet.
119
120
 
121
+ In batch mode the first paid call deposits `price × X402_DEPOSIT_MULTIPLIER` (default 10) up front, so a session typically over-funds the channel. Reclaim the unused balance whenever you're done with the `1s_refund` tool; idle channels are also auto-refunded by the receiver after a few hours. The deposit residual is always recoverable.
122
+
120
123
  ### No auth
121
124
 
122
125
  Without either variable, tools work for free endpoints. Paid endpoints return 402 errors with a descriptive message.
@@ -132,8 +135,8 @@ Without either variable, tools work for free endpoints. Paid endpoints return 40
132
135
  | `X402_PAYMENT_MODE` | `exact` | Initial x402 scheme: `exact` (per-call) or `batch` (payment channel). Switch in-session with the `1s_payment_mode` tool. |
133
136
  | `X402_RPC_URL` | Base default | Base RPC endpoint used to submit channel deposits in batch mode |
134
137
  | `X402_CHANNEL_DIR` | — | Directory to persist batch channel state across restarts. Unset = in-memory (channel lost on restart). |
135
- | `X402_DEPOSIT_MULTIPLIER` | `5` | Batch mode: deposit = price × this multiplier, funding that many calls per channel |
136
- | `X402_CHANNEL_SALT` | zero | Batch mode: 32-byte hex salt to derive a distinct channel id |
138
+ | `X402_DEPOSIT_MULTIPLIER` | `10` | Batch mode: deposit = price × this multiplier, funding that many calls per channel. Unused balance is reclaimable via `1s_refund`. |
139
+ | `X402_CHANNEL_SALT` | zero | Batch mode: 32-byte hex salt to derive the starting channel id. The client auto-rotates to the next salt when a channel is exhausted or refunded. |
137
140
 
138
141
 
139
142
  ## License
package/README.npm.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # onesource-api-mcp
2
2
 
3
- MCP server for OneSource blockchain data. 26 named tools for balances, NFTs, transactions, events, and live chain queries via API key or x402 micropayments.
3
+ MCP server for OneSource blockchain data. 27 named tools for balances, NFTs, transactions, events, and live chain queries via API key or x402 micropayments.
4
4
 
5
5
  ```
6
6
  npx onesource-api-mcp
@@ -23,7 +23,7 @@ claude mcp add onesource-api -- npx onesource-api-mcp
23
23
  }
24
24
  ```
25
25
 
26
- ## Tools (26)
26
+ ## Tools (27)
27
27
 
28
28
 
29
29
  ### Live Chain Data (12 tools)
@@ -62,11 +62,12 @@ claude mcp add onesource-api -- npx onesource-api-mcp
62
62
  | `1s_storage_read` | Read storage slot |
63
63
  | `1s_tx_receipt` | Transaction receipt |
64
64
 
65
- ### Session (1 tool)
65
+ ### Payments (2 tools)
66
66
 
67
67
  | Tool | Description |
68
68
  |------|-------------|
69
69
  | `1s_payment_mode` | View or switch the x402 payment scheme (`exact` per-call vs `batch` payment channel) |
70
+ | `1s_refund` | Refund unused `batch` channel balance back to your wallet on demand |
70
71
 
71
72
 
72
73
  ## Networks
@@ -117,6 +118,8 @@ X402_PRIVATE_KEY=your-private-key-hex npx onesource-api-mcp
117
118
 
118
119
  Payments default to the **exact** scheme (one USDC payment per call). For a burst of calls you can switch to **batch** settlement — a payment channel that funds many off-chain calls from a single on-chain deposit, settled with one claim — by calling the `1s_payment_mode` tool with `{ "mode": "batch" }`, or by setting `X402_PAYMENT_MODE=batch`. Both modes use the same wallet.
119
120
 
121
+ In batch mode the first paid call deposits `price × X402_DEPOSIT_MULTIPLIER` (default 10) up front, so a session typically over-funds the channel. Reclaim the unused balance whenever you're done with the `1s_refund` tool; idle channels are also auto-refunded by the receiver after a few hours. The deposit residual is always recoverable.
122
+
120
123
  ### No auth
121
124
 
122
125
  Without either variable, tools work for free endpoints. Paid endpoints return 402 errors with a descriptive message.
@@ -132,8 +135,8 @@ Without either variable, tools work for free endpoints. Paid endpoints return 40
132
135
  | `X402_PAYMENT_MODE` | `exact` | Initial x402 scheme: `exact` (per-call) or `batch` (payment channel). Switch in-session with the `1s_payment_mode` tool. |
133
136
  | `X402_RPC_URL` | Base default | Base RPC endpoint used to submit channel deposits in batch mode |
134
137
  | `X402_CHANNEL_DIR` | — | Directory to persist batch channel state across restarts. Unset = in-memory (channel lost on restart). |
135
- | `X402_DEPOSIT_MULTIPLIER` | `5` | Batch mode: deposit = price × this multiplier, funding that many calls per channel |
136
- | `X402_CHANNEL_SALT` | zero | Batch mode: 32-byte hex salt to derive a distinct channel id |
138
+ | `X402_DEPOSIT_MULTIPLIER` | `10` | Batch mode: deposit = price × this multiplier, funding that many calls per channel. Unused balance is reclaimable via `1s_refund`. |
139
+ | `X402_CHANNEL_SALT` | zero | Batch mode: 32-byte hex salt to derive the starting channel id. The client auto-rotates to the next salt when a channel is exhausted or refunded. |
137
140
 
138
141
 
139
142
  ## License
package/README.repo.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # onesource-api-mcp
2
2
 
3
- MCP server for OneSource blockchain data. 26 named tools for balances, NFTs, transactions, events, and live chain queries via API key or x402 micropayments.
3
+ MCP server for OneSource blockchain data. 27 named tools for balances, NFTs, transactions, events, and live chain queries via API key or x402 micropayments.
4
4
 
5
5
  ```
6
6
  npx onesource-api-mcp
@@ -23,7 +23,7 @@ claude mcp add onesource-api -- npx onesource-api-mcp
23
23
  }
24
24
  ```
25
25
 
26
- ## Tools (26)
26
+ ## Tools (27)
27
27
 
28
28
 
29
29
  ### Live Chain Data (12 tools)
@@ -62,11 +62,12 @@ claude mcp add onesource-api -- npx onesource-api-mcp
62
62
  | `1s_storage_read` | Read storage slot |
63
63
  | `1s_tx_receipt` | Transaction receipt |
64
64
 
65
- ### Session (1 tool)
65
+ ### Payments (2 tools)
66
66
 
67
67
  | Tool | Description |
68
68
  |------|-------------|
69
69
  | `1s_payment_mode` | View or switch the x402 payment scheme (`exact` per-call vs `batch` payment channel) |
70
+ | `1s_refund` | Refund unused `batch` channel balance back to your wallet on demand |
70
71
 
71
72
 
72
73
  ## Networks
@@ -117,6 +118,8 @@ X402_PRIVATE_KEY=your-private-key-hex npx onesource-api-mcp
117
118
 
118
119
  Payments default to the **exact** scheme (one USDC payment per call). For a burst of calls you can switch to **batch** settlement — a payment channel that funds many off-chain calls from a single on-chain deposit, settled with one claim — by calling the `1s_payment_mode` tool with `{ "mode": "batch" }`, or by setting `X402_PAYMENT_MODE=batch`. Both modes use the same wallet.
119
120
 
121
+ In batch mode the first paid call deposits `price × X402_DEPOSIT_MULTIPLIER` (default 10) up front, so a session typically over-funds the channel. Reclaim the unused balance whenever you're done with the `1s_refund` tool; idle channels are also auto-refunded by the receiver after a few hours. The deposit residual is always recoverable.
122
+
120
123
  ### No auth
121
124
 
122
125
  Without either variable, tools work for free endpoints. Paid endpoints return 402 errors with a descriptive message.
@@ -132,8 +135,8 @@ Without either variable, tools work for free endpoints. Paid endpoints return 40
132
135
  | `X402_PAYMENT_MODE` | `exact` | Initial x402 scheme: `exact` (per-call) or `batch` (payment channel). Switch in-session with the `1s_payment_mode` tool. |
133
136
  | `X402_RPC_URL` | Base default | Base RPC endpoint used to submit channel deposits in batch mode |
134
137
  | `X402_CHANNEL_DIR` | — | Directory to persist batch channel state across restarts. Unset = in-memory (channel lost on restart). |
135
- | `X402_DEPOSIT_MULTIPLIER` | `5` | Batch mode: deposit = price × this multiplier, funding that many calls per channel |
136
- | `X402_CHANNEL_SALT` | zero | Batch mode: 32-byte hex salt to derive a distinct channel id |
138
+ | `X402_DEPOSIT_MULTIPLIER` | `10` | Batch mode: deposit = price × this multiplier, funding that many calls per channel. Unused balance is reclaimable via `1s_refund`. |
139
+ | `X402_CHANNEL_SALT` | zero | Batch mode: 32-byte hex salt to derive the starting channel id. The client auto-rotates to the next salt when a channel is exhausted or refunded. |
137
140
  | `ONESOURCE_ANALYTICS` | `true` | Set `false` to disable all analytics |
138
141
  | `ONESOURCE_ANALYTICS_URL` | `https://1s-analytics.vercel.app` | Dashboard endpoint for event ingestion (baked in by default) |
139
142
  | `X402_ANALYTICS_KEY` | `onesource-api-mcp` | Bearer token for the analytics dashboard (baked in by default) |
@@ -1 +1 @@
1
- {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../src/x402.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAc5C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,cAAc,EAAE,OAAO,CAAC;CACzB;AA0BD,wBAAgB,SAAS,IAAI,eAAe,CA6D3C;AAED,8BAA8B;AAC9B,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAK7D;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAmBD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAWD;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CA0ChE"}
1
+ {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../src/x402.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;AAkB5C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,cAAc,EAAE,OAAO,CAAC;CACzB;AAiCD,wBAAgB,SAAS,IAAI,eAAe,CAkF3C;AA4BD,8BAA8B;AAC9B,wBAAgB,cAAc,IAAI,WAAW,CAE5C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAK7D;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAuBD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAWD;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CAgDhE"}
package/dist/x402.js CHANGED
@@ -24,19 +24,22 @@ import { toClientEvmSigner } from '@x402/evm';
24
24
  import { BatchSettlementEvmScheme } from '@x402/evm/batch-settlement/client';
25
25
  import { FileClientChannelStorage } from '@x402/evm/batch-settlement/client/file-storage';
26
26
  import { privateKeyToAccount } from 'viem/accounts';
27
- import { createPublicClient, http } from 'viem';
27
+ import { createPublicClient, http, numberToHex } from 'viem';
28
28
  import { base } from 'viem/chains';
29
29
  const ZERO_SALT = `0x${'0'.repeat(64)}`;
30
30
  // Each channel's first paid call deposits depositMultiplier × the call price,
31
- // funding that many calls before a top-up deposit is needed. Top-ups are the
32
- // fragile path a top-up deposit that the facilitator fails to land onchain
33
- // leaves the channel with a voucher that exceeds real escrow (the 2026-06-05
34
- // incident: multiplier 5 free 6th call + bricked channel). The gateway now
35
- // gates on confirmed onchain escrow, but a larger first deposit keeps typical
36
- // sessions on the single-deposit path entirely. 20 funds 20 calls per deposit
37
- // (e.g. 0.10 USDC at $0.005/call) and is fully recoverable via cooperative
38
- // refund. Override with X402_DEPOSIT_MULTIPLIER (SDK minimum is 3).
39
- const DEFAULT_DEPOSIT_MULTIPLIER = 20;
31
+ // funding that many calls before a top-up is needed. We keep modest headroom
32
+ // (10 calls per deposit; e.g. 0.05 USDC at $0.005/call) rather than a large
33
+ // upfront lockup: top-ups are now safe the gateway gates on confirmed onchain
34
+ // escrow (after the 2026-06-05 multiplier-5 free-call incident) and the client
35
+ // rotates the channel salt past dead/refunded channels and any unspent
36
+ // balance is reclaimable via 1s_refund or the gateway's idle auto-refund.
37
+ // Override with X402_DEPOSIT_MULTIPLIER (SDK minimum is 3).
38
+ const DEFAULT_DEPOSIT_MULTIPLIER = 10;
39
+ // How many times one batch request will bump the channel salt to skip a dead
40
+ // channel before giving up (and letting the caller fall back to exact). Each
41
+ // bump is a fresh channelId; the failed verify that triggers it isn't charged.
42
+ const MAX_SALT_BUMPS = 8;
40
43
  let _applied = false;
41
44
  let _cachedResult;
42
45
  // Runtime-mutable mode state. `setupX402` seeds it from X402_PAYMENT_MODE; the
@@ -48,6 +51,13 @@ let _batchAvailable = false;
48
51
  // The batch-settlement client scheme, retained at module scope so the
49
52
  // `1s_refund` tool can call its cooperative-refund flow after setup.
50
53
  let _batchScheme;
54
+ // Batch fetch + the machinery to rebuild it under a new channel salt. The salt
55
+ // is rotated when the current channel is dead (exhausted/refunded), so a refund
56
+ // doesn't permanently strand the wallet's batch path on one channelId.
57
+ let _batchFetch;
58
+ let _buildBatch;
59
+ let _baseSalt = ZERO_SALT;
60
+ let _saltOffset = 0n;
51
61
  function initialMode() {
52
62
  return process.env.X402_PAYMENT_MODE?.trim().toLowerCase() === 'batch'
53
63
  ? 'batch'
@@ -76,7 +86,9 @@ export function setupX402() {
76
86
  // Built eagerly but lazily funded: no on-chain deposit happens until the
77
87
  // first paid request is made while in batch mode. If construction fails
78
88
  // (e.g. RPC misconfig), fall back to exact-only rather than crashing the MCP.
79
- let batchFetch;
89
+ //
90
+ // _buildBatch (re)constructs the scheme for a given salt so the dispatcher can
91
+ // rotate to a fresh channelId when the current channel is dead — see bumpSalt.
80
92
  try {
81
93
  const publicClient = createPublicClient({
82
94
  chain: base,
@@ -84,35 +96,84 @@ export function setupX402() {
84
96
  });
85
97
  const batchSigner = toClientEvmSigner(account, publicClient);
86
98
  const channelDir = process.env.X402_CHANNEL_DIR?.trim() || undefined;
87
- const salt = process.env.X402_CHANNEL_SALT?.trim() || ZERO_SALT;
88
- const batchScheme = new BatchSettlementEvmScheme(batchSigner, {
89
- depositPolicy: { depositMultiplier: depositMultiplier() },
90
- salt,
91
- ...(channelDir ? { storage: new FileClientChannelStorage({ directory: channelDir }) } : {}),
92
- });
93
- const batchClient = new x402Client();
94
- batchClient.register('eip155:*', batchScheme);
95
- batchFetch = wrapFetchWithPayment(fetch, batchClient);
99
+ _baseSalt = process.env.X402_CHANNEL_SALT?.trim() || ZERO_SALT;
100
+ _saltOffset = 0n;
101
+ _buildBatch = (salt) => {
102
+ const batchScheme = new BatchSettlementEvmScheme(batchSigner, {
103
+ depositPolicy: { depositMultiplier: depositMultiplier() },
104
+ salt,
105
+ ...(channelDir ? { storage: new FileClientChannelStorage({ directory: channelDir }) } : {}),
106
+ });
107
+ const batchClient = new x402Client();
108
+ batchClient.register('eip155:*', batchScheme);
109
+ _batchScheme = batchScheme;
110
+ _batchFetch = wrapFetchWithPayment(fetch, batchClient);
111
+ };
112
+ // Initial build uses the base salt verbatim (no numberToHex) — offset 0.
113
+ _buildBatch(_baseSalt);
96
114
  _batchAvailable = true;
97
- _batchScheme = batchScheme;
98
115
  }
99
116
  catch (err) {
100
117
  _batchAvailable = false;
118
+ _batchFetch = undefined;
119
+ _buildBatch = undefined;
101
120
  console.error(`[onesource-api] warning: batch payment scheme unavailable (${err instanceof Error ? err.message : String(err)}); falling back to exact-only`);
102
121
  }
103
122
  _enabled = true;
104
123
  _address = account.address;
105
124
  _mode = initialMode();
106
125
  // If batch was requested but is unavailable, stay on exact.
107
- if (_mode === 'batch' && !batchFetch)
126
+ if (_mode === 'batch' && !_batchFetch)
108
127
  _mode = 'exact';
109
128
  // Dispatcher: route each request through the active scheme. Reads `_mode`
110
- // live so in-session switches via setPaymentMode take effect immediately.
111
- const dispatchFetch = (input, init) => (_mode === 'batch' && batchFetch ? batchFetch : exactFetch)(input, init);
129
+ // and `_batchFetch` live so in-session mode switches and salt rotations take
130
+ // effect immediately. In batch mode, a "channel exhausted/refunded" 402 means
131
+ // the deterministic channelId is dead; rotate the salt to a fresh channel and
132
+ // retry, bounded by MAX_SALT_BUMPS, so a prior refund can't strand batch.
133
+ const dispatchFetch = async (input, init) => {
134
+ if (!(_mode === 'batch' && _batchFetch))
135
+ return exactFetch(input, init);
136
+ let resp = await _batchFetch(input, init);
137
+ let bumps = 0;
138
+ while (_mode === 'batch' && bumps < MAX_SALT_BUMPS && (await isDeadChannel402(resp))) {
139
+ if (!bumpSalt())
140
+ break;
141
+ bumps += 1;
142
+ resp = await _batchFetch(input, init);
143
+ }
144
+ return resp;
145
+ };
112
146
  _applied = true;
113
147
  _cachedResult = { enabled: true, address: account.address, fetch: dispatchFetch };
114
148
  return _cachedResult;
115
149
  }
150
+ // isDeadChannel402 reports whether a response is a "this channel can't be
151
+ // reused" rejection — the deterministic channelId is exhausted or was refunded,
152
+ // so the voucher's cumulative can't be backed. Detected from the gateway's 402
153
+ // body reason (cumulative_exceeds_balance / cumulative_below_claimed). Cloning
154
+ // leaves the original body readable for the caller when we don't retry.
155
+ async function isDeadChannel402(resp) {
156
+ if (!resp || resp.status !== 402)
157
+ return false;
158
+ try {
159
+ const text = await resp.clone().text();
160
+ return /cumulative_exceeds_balance|cumulative_below_claimed/.test(text);
161
+ }
162
+ catch {
163
+ return false;
164
+ }
165
+ }
166
+ // bumpSalt advances the channel salt by one and rebuilds the batch scheme/fetch,
167
+ // so the next request opens a fresh channelId instead of the dead one. Returns
168
+ // false when batch isn't built (nothing to rebuild).
169
+ function bumpSalt() {
170
+ if (!_buildBatch)
171
+ return false;
172
+ _saltOffset += 1n;
173
+ const next = numberToHex(BigInt(_baseSalt) + _saltOffset, { size: 32 });
174
+ _buildBatch(next);
175
+ return true;
176
+ }
116
177
  /** Current payment scheme. */
117
178
  export function getPaymentMode() {
118
179
  return _mode;
@@ -142,6 +203,10 @@ export function resetX402() {
142
203
  _mode = 'exact';
143
204
  _batchAvailable = false;
144
205
  _batchScheme = undefined;
206
+ _batchFetch = undefined;
207
+ _buildBatch = undefined;
208
+ _baseSalt = ZERO_SALT;
209
+ _saltOffset = 0n;
145
210
  }
146
211
  // A batch-eligible (/api/chain/*) endpoint the refund flow probes for the
147
212
  // channel's payment requirements (receiver, asset, receiverAuthorizer) — it's
@@ -182,6 +247,9 @@ export async function refundBatchChannel() {
182
247
  const tx = settle?.transaction;
183
248
  const balance = settle?.extra?.channelState?.balance;
184
249
  const remaining = typeof balance === 'string' ? ` Remaining channel balance: ${atomicToUsdc(balance)} USDC.` : '';
250
+ // The refunded channel is now closed; advance the salt so the next batch
251
+ // burst opens a fresh channelId rather than re-deriving the dead one.
252
+ bumpSalt();
185
253
  return {
186
254
  ok: true,
187
255
  transaction: tx,
@@ -190,20 +258,23 @@ export async function refundBatchChannel() {
190
258
  };
191
259
  }
192
260
  catch (err) {
193
- const msg = err instanceof Error ? err.message : String(err);
194
- if (/no remaining balance/i.test(msg)) {
261
+ const raw = err instanceof Error ? err.message : String(err);
262
+ const lower = raw.toLowerCase();
263
+ if (lower.includes('no remaining balance') || lower.includes('amount_too_low')) {
195
264
  return {
196
265
  ok: false,
197
266
  message: 'Nothing to refund — the channel has no unused balance (everything deposited has been spent or already refunded).',
198
267
  };
199
268
  }
200
- if (/existing channel record/i.test(msg)) {
269
+ if (lower.includes('existing channel record')) {
201
270
  return {
202
271
  ok: false,
203
272
  message: 'No payment channel found for this wallet. Open one by making a call in batch mode first (1s_payment_mode → batch).',
204
273
  };
205
274
  }
206
- return { ok: false, message: `Refund failed: ${msg}` };
275
+ // Collapse the SDK's own "Refund failed:" prefix(es) so we don't double it.
276
+ const clean = raw.replace(/^(refund failed:\s*)+/i, '');
277
+ return { ok: false, message: `Refund failed: ${clean}` };
207
278
  }
208
279
  }
209
280
  //# sourceMappingURL=x402.js.map
package/dist/x402.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"x402.js","sourceRoot":"","sources":["../src/x402.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAInC,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAW,CAAC;AACjD,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,oEAAoE;AACpE,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAmBtC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAI,aAA0C,CAAC;AAE/C,+EAA+E;AAC/E,8CAA8C;AAC9C,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAI,QAA4B,CAAC;AACjC,IAAI,KAAK,GAAgB,OAAO,CAAC;AACjC,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,sEAAsE;AACtE,qEAAqE;AACrE,IAAI,YAAkD,CAAC;AAEvD,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO;QACpE,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvC,IAAI,QAAQ,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAEpD,uFAAuF;IACvF,MAAM,UAAU,GAAkB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QACvD,CAAC,CAAE,MAAwB;QAC3B,CAAC,CAAE,KAAK,MAAM,EAAoB,CAAC;IAErC,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEhD,0CAA0C;IAC1C,MAAM,WAAW,GAAG,IAAI,UAAU,EAAE,CAAC;IACrC,sBAAsB,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAE5D,yCAAyC;IACzC,yEAAyE;IACzE,wEAAwE;IACxE,8EAA8E;IAC9E,IAAI,UAA+C,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,kBAAkB,CAAC;YACtC,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;SAC1C,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QACrE,MAAM,IAAI,GAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAoB,IAAI,SAAS,CAAC;QACnF,MAAM,WAAW,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAE;YAC5D,aAAa,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,EAAE;YACzD,IAAI;YACJ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,wBAAwB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5F,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,UAAU,EAAE,CAAC;QACrC,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9C,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtD,eAAe,GAAG,IAAI,CAAC;QACvB,YAAY,GAAG,WAAW,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,GAAG,KAAK,CAAC;QACxB,OAAO,CAAC,KAAK,CACX,8DAA8D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAC9I,CAAC;IACJ,CAAC;IAED,QAAQ,GAAG,IAAI,CAAC;IAChB,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3B,KAAK,GAAG,WAAW,EAAE,CAAC;IACtB,4DAA4D;IAC5D,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,UAAU;QAAE,KAAK,GAAG,OAAO,CAAC;IAEtD,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,aAAa,GAA4B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAC7D,CAAC,KAAK,KAAK,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE3E,QAAQ,GAAG,IAAI,CAAC;IAChB,aAAa,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAClF,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,cAAc;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IACvD,KAAK,GAAG,IAAI,CAAC;IACb,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAChG,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,SAAS;IACvB,QAAQ,GAAG,KAAK,CAAC;IACjB,aAAa,GAAG,SAAS,CAAC;IAC1B,QAAQ,GAAG,KAAK,CAAC;IACjB,QAAQ,GAAG,SAAS,CAAC;IACrB,KAAK,GAAG,OAAO,CAAC;IAChB,eAAe,GAAG,KAAK,CAAC;IACxB,YAAY,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED,0EAA0E;AAC1E,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAUpD,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;QACvC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,oEAAoE,EAAE,CAAC;IACtG,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,wFAAwF,EAAE,CAAC;IAC1H,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,6BAA6B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,IAAI,GAAG,iBAAiB,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAEtC,CAAC;QACd,MAAM,EAAE,GAAG,MAAM,EAAE,WAAW,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC;QACrD,MAAM,SAAS,GACb,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,+BAA+B,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,OAAO;YACL,EAAE,EAAE,IAAI;YACR,WAAW,EAAE,EAAE;YACf,OAAO,EACL,mBAAmB,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG;gBAC1D,8CAA8C,QAAQ,IAAI,aAAa,WAAW;SACrF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EACL,kHAAkH;aACrH,CAAC;QACJ,CAAC;QACD,IAAI,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EACL,oHAAoH;aACvH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,GAAG,EAAE,EAAE,CAAC;IACzD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"x402.js","sourceRoot":"","sources":["../src/x402.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@one-source/api-mcp",
3
- "version": "5.3.0",
3
+ "version": "5.3.1",
4
4
  "type": "module",
5
5
  "description": "MCP server for OneSource blockchain data — 27 named tools for balances, NFTs, transactions, events, live chain queries, and x402 payment-mode + refund control via x402",
6
6
  "bin": {