@one-source/api-mcp 5.2.1 → 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) |
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 1s_refund — reclaim unused x402 batch-channel escrow back to the payer wallet.
3
+ */
4
+ import type { ToolDef } from '../../types.js';
5
+ export declare const tool: ToolDef;
6
+ //# sourceMappingURL=refund.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["../../../src/tools/chain/refund.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,eAAO,MAAM,IAAI,EAAE,OAuBlB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { getPaymentModeInfo, refundBatchChannel } from '../../x402.js';
2
+ export const tool = {
3
+ name: '1s_refund',
4
+ description: 'Refund unused balance from your x402 batch payment channel back to your wallet on Base. ' +
5
+ 'Batch mode deposits enough USDC up front to cover many calls (price × deposit multiplier); ' +
6
+ 'whatever you do not spend stays locked in the channel. ' +
7
+ 'Call this when you are done making batch calls to get the leftover escrow back right away, ' +
8
+ 'instead of waiting for the gateway\'s automatic idle refund. Refunds the full remaining balance. ' +
9
+ 'Only relevant when paying via x402 in batch mode (X402_PRIVATE_KEY set); with an API key, calls are covered by your plan and there is nothing to refund.',
10
+ category: 'chain',
11
+ schema: {},
12
+ handler: async () => {
13
+ const info = getPaymentModeInfo();
14
+ if (!info.enabled) {
15
+ return ('x402 payment is not active in this session, so there is no channel balance to refund. ' +
16
+ 'Refunds apply only when paying per-call via x402 (set X402_PRIVATE_KEY to a funded Base wallet). ' +
17
+ 'With an API key (ONESOURCE_API_KEY), calls are covered by your plan and no x402 payment is made.');
18
+ }
19
+ const res = await refundBatchChannel();
20
+ return res.message;
21
+ },
22
+ };
23
+ //# sourceMappingURL=refund.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refund.js","sourceRoot":"","sources":["../../../src/tools/chain/refund.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,CAAC,MAAM,IAAI,GAAY;IAC3B,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,0FAA0F;QAC1F,6FAA6F;QAC7F,yDAAyD;QACzD,6FAA6F;QAC7F,mGAAmG;QACnG,0JAA0J;IAC5J,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CACL,wFAAwF;gBACxF,mGAAmG;gBACnG,kGAAkG,CACnG,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAgC3C,eAAO,MAAM,QAAQ,EAAE,OAAO,EA8B7B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAiC3C,eAAO,MAAM,QAAQ,EAAE,OAAO,EA+B7B,CAAC"}
@@ -11,7 +11,7 @@ import { tool as nftMetadataLive } from './live/nft-metadata.js';
11
11
  import { tool as nftOwnerLive } from './live/nft-owner.js';
12
12
  import { tool as totalSupplyLive } from './live/total-supply.js';
13
13
  import { tool as txDetailsLive } from './live/tx-details.js';
14
- // --- Chain utilities (14 tools) ---
14
+ // --- Chain utilities (15 tools) ---
15
15
  import { tool as blockByNumber } from './chain/block-by-number.js';
16
16
  import { tool as blockNumber } from './chain/block-number.js';
17
17
  import { tool as chainId } from './chain/chain-id.js';
@@ -23,6 +23,7 @@ import { tool as nonce } from './chain/nonce.js';
23
23
  import { tool as paymentMode } from './chain/payment-mode.js';
24
24
  import { tool as pendingBlock } from './chain/pending-block.js';
25
25
  import { tool as proxyDetect } from './chain/proxy-detect.js';
26
+ import { tool as refund } from './chain/refund.js';
26
27
  import { tool as simulateCall } from './chain/simulate-call.js';
27
28
  import { tool as storageRead } from './chain/storage-read.js';
28
29
  import { tool as txReceipt } from './chain/tx-receipt.js';
@@ -52,6 +53,7 @@ export const allTools = [
52
53
  paymentMode,
53
54
  pendingBlock,
54
55
  proxyDetect,
56
+ refund,
55
57
  simulateCall,
56
58
  storageRead,
57
59
  txReceipt,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAMA,qCAAqC;AACrC,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7D,qCAAqC;AACrC,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,kBAAkB;IAClB,aAAa;IACb,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,UAAU;IACV,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,eAAe;IACf,aAAa;IAEb,kBAAkB;IAClB,aAAa;IACb,WAAW;IACX,OAAO;IACP,YAAY;IACZ,UAAU;IACV,WAAW;IACX,WAAW;IACX,KAAK;IACL,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,WAAW;IACX,SAAS;CACV,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAMA,qCAAqC;AACrC,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7D,qCAAqC;AACrC,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,kBAAkB;IAClB,aAAa;IACb,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,UAAU;IACV,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,eAAe;IACf,aAAa;IAEb,kBAAkB;IAClB,aAAa;IACb,WAAW;IACX,OAAO;IACP,YAAY;IACZ,UAAU;IACV,WAAW;IACX,WAAW;IACX,KAAK;IACL,WAAW;IACX,YAAY;IACZ,WAAW;IACX,MAAM;IACN,YAAY;IACZ,WAAW;IACX,SAAS;CACV,CAAC"}
package/dist/x402.d.ts CHANGED
@@ -24,4 +24,23 @@ export declare function getPaymentMode(): PaymentMode;
24
24
  export declare function setPaymentMode(mode: PaymentMode): PaymentMode;
25
25
  /** Snapshot of payment state for the 1s_payment_mode tool. */
26
26
  export declare function getPaymentModeInfo(): PaymentModeInfo;
27
+ export interface RefundResult {
28
+ ok: boolean;
29
+ /** Human-readable outcome, safe to surface directly to the user. */
30
+ message: string;
31
+ /** Refund transaction hash, when the receiver settled one. */
32
+ transaction?: string;
33
+ }
34
+ /**
35
+ * Cooperatively refund the unused balance of the current batch payment channel
36
+ * back to the payer wallet. Probes {@link REFUND_PROBE_PATH} for the channel
37
+ * requirements, then asks the receiver (via its receiverAuthorizer) to sign and
38
+ * submit the on-chain refund. Always a full refund of the remaining escrow.
39
+ *
40
+ * Returns a structured result rather than throwing, so the calling tool can
41
+ * surface a clear message for the common "nothing to refund" / "no channel"
42
+ * cases. Uses the unwrapped global fetch (the SDK attaches the refund payload
43
+ * itself; the payment-wrapping fetch would wrongly try to pay the 402 probe).
44
+ */
45
+ export declare function refundBatchChannel(): Promise<RefundResult>;
27
46
  //# sourceMappingURL=x402.d.ts.map
@@ -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;AAuBD,wBAAgB,SAAS,IAAI,eAAe,CA4D3C;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"}
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
@@ -45,6 +48,16 @@ let _enabled = false;
45
48
  let _address;
46
49
  let _mode = 'exact';
47
50
  let _batchAvailable = false;
51
+ // The batch-settlement client scheme, retained at module scope so the
52
+ // `1s_refund` tool can call its cooperative-refund flow after setup.
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;
48
61
  function initialMode() {
49
62
  return process.env.X402_PAYMENT_MODE?.trim().toLowerCase() === 'batch'
50
63
  ? 'batch'
@@ -73,7 +86,9 @@ export function setupX402() {
73
86
  // Built eagerly but lazily funded: no on-chain deposit happens until the
74
87
  // first paid request is made while in batch mode. If construction fails
75
88
  // (e.g. RPC misconfig), fall back to exact-only rather than crashing the MCP.
76
- 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.
77
92
  try {
78
93
  const publicClient = createPublicClient({
79
94
  chain: base,
@@ -81,34 +96,84 @@ export function setupX402() {
81
96
  });
82
97
  const batchSigner = toClientEvmSigner(account, publicClient);
83
98
  const channelDir = process.env.X402_CHANNEL_DIR?.trim() || undefined;
84
- const salt = process.env.X402_CHANNEL_SALT?.trim() || ZERO_SALT;
85
- const batchScheme = new BatchSettlementEvmScheme(batchSigner, {
86
- depositPolicy: { depositMultiplier: depositMultiplier() },
87
- salt,
88
- ...(channelDir ? { storage: new FileClientChannelStorage({ directory: channelDir }) } : {}),
89
- });
90
- const batchClient = new x402Client();
91
- batchClient.register('eip155:*', batchScheme);
92
- 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);
93
114
  _batchAvailable = true;
94
115
  }
95
116
  catch (err) {
96
117
  _batchAvailable = false;
118
+ _batchFetch = undefined;
119
+ _buildBatch = undefined;
97
120
  console.error(`[onesource-api] warning: batch payment scheme unavailable (${err instanceof Error ? err.message : String(err)}); falling back to exact-only`);
98
121
  }
99
122
  _enabled = true;
100
123
  _address = account.address;
101
124
  _mode = initialMode();
102
125
  // If batch was requested but is unavailable, stay on exact.
103
- if (_mode === 'batch' && !batchFetch)
126
+ if (_mode === 'batch' && !_batchFetch)
104
127
  _mode = 'exact';
105
128
  // Dispatcher: route each request through the active scheme. Reads `_mode`
106
- // live so in-session switches via setPaymentMode take effect immediately.
107
- 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
+ };
108
146
  _applied = true;
109
147
  _cachedResult = { enabled: true, address: account.address, fetch: dispatchFetch };
110
148
  return _cachedResult;
111
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
+ }
112
177
  /** Current payment scheme. */
113
178
  export function getPaymentMode() {
114
179
  return _mode;
@@ -137,5 +202,79 @@ export function resetX402() {
137
202
  _address = undefined;
138
203
  _mode = 'exact';
139
204
  _batchAvailable = false;
205
+ _batchScheme = undefined;
206
+ _batchFetch = undefined;
207
+ _buildBatch = undefined;
208
+ _baseSalt = ZERO_SALT;
209
+ _saltOffset = 0n;
210
+ }
211
+ // A batch-eligible (/api/chain/*) endpoint the refund flow probes for the
212
+ // channel's payment requirements (receiver, asset, receiverAuthorizer) — it's
213
+ // a plain unpaid GET that the gateway answers with a 402 challenge, so any
214
+ // such route works and the specific one is irrelevant to the wallet/channel.
215
+ const REFUND_PROBE_PATH = '/api/chain/block-number';
216
+ function atomicToUsdc(atomic) {
217
+ try {
218
+ const n = Number(BigInt(atomic)) / 1e6;
219
+ return n.toFixed(6).replace(/\.?0+$/, '');
220
+ }
221
+ catch {
222
+ return atomic;
223
+ }
224
+ }
225
+ /**
226
+ * Cooperatively refund the unused balance of the current batch payment channel
227
+ * back to the payer wallet. Probes {@link REFUND_PROBE_PATH} for the channel
228
+ * requirements, then asks the receiver (via its receiverAuthorizer) to sign and
229
+ * submit the on-chain refund. Always a full refund of the remaining escrow.
230
+ *
231
+ * Returns a structured result rather than throwing, so the calling tool can
232
+ * surface a clear message for the common "nothing to refund" / "no channel"
233
+ * cases. Uses the unwrapped global fetch (the SDK attaches the refund payload
234
+ * itself; the payment-wrapping fetch would wrongly try to pay the 402 probe).
235
+ */
236
+ export async function refundBatchChannel() {
237
+ if (!_enabled) {
238
+ return { ok: false, message: 'x402 payment is not active in this session (set X402_PRIVATE_KEY).' };
239
+ }
240
+ if (!_batchScheme) {
241
+ return { ok: false, message: 'Batch payment channels are unavailable in this session, so there is nothing to refund.' };
242
+ }
243
+ const base = (process.env.ONESOURCE_BASE_URL ?? 'https://skills.onesource.io').replace(/\/+$/, '');
244
+ const probeUrl = base + REFUND_PROBE_PATH;
245
+ try {
246
+ const settle = (await _batchScheme.refund(probeUrl));
247
+ const tx = settle?.transaction;
248
+ const balance = settle?.extra?.channelState?.balance;
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();
253
+ return {
254
+ ok: true,
255
+ transaction: tx,
256
+ message: `Refund submitted${tx ? ` (tx ${tx})` : ''}.${remaining} ` +
257
+ `Unused channel escrow is being returned to ${_address ?? 'your wallet'} on Base.`,
258
+ };
259
+ }
260
+ catch (err) {
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')) {
264
+ return {
265
+ ok: false,
266
+ message: 'Nothing to refund — the channel has no unused balance (everything deposited has been spent or already refunded).',
267
+ };
268
+ }
269
+ if (lower.includes('existing channel record')) {
270
+ return {
271
+ ok: false,
272
+ message: 'No payment channel found for this wallet. Open one by making a call in batch mode first (1s_payment_mode → batch).',
273
+ };
274
+ }
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}` };
278
+ }
140
279
  }
141
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;AAE5B,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;IACzB,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;AAC1B,CAAC"}
1
+ {"version":3,"file":"x402.js","sourceRoot":"","sources":["../src/x402.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@one-source/api-mcp",
3
- "version": "5.2.1",
3
+ "version": "5.3.1",
4
4
  "type": "module",
5
- "description": "MCP server for OneSource blockchain data — 26 named tools for balances, NFTs, transactions, events, live chain queries, and x402 payment-mode control via x402",
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": {
7
7
  "onesource-api-mcp": "./dist/cli.js"
8
8
  },