@dexterai/x402 6.0.0-rc.5 → 6.0.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +5 -1
  3. package/REFERENCE.md +33 -3
  4. package/dist/adapters/index.d.cts +3 -2
  5. package/dist/adapters/index.d.ts +3 -2
  6. package/dist/batch-settlement/index.cjs +1 -1
  7. package/dist/batch-settlement/index.d.cts +4 -3
  8. package/dist/batch-settlement/index.d.ts +4 -3
  9. package/dist/batch-settlement/index.js +1 -1
  10. package/dist/batch-settlement/seller/index.cjs +1 -1
  11. package/dist/batch-settlement/seller/index.d.cts +5 -4
  12. package/dist/batch-settlement/seller/index.d.ts +5 -4
  13. package/dist/batch-settlement/seller/index.js +1 -1
  14. package/dist/client/index.d.cts +5 -3
  15. package/dist/client/index.d.ts +5 -3
  16. package/dist/mcp/index.cjs +1 -0
  17. package/dist/mcp/index.d.cts +183 -0
  18. package/dist/mcp/index.d.ts +183 -0
  19. package/dist/mcp/index.js +1 -0
  20. package/dist/react/index.d.cts +2 -2
  21. package/dist/react/index.d.ts +2 -2
  22. package/dist/server/index.cjs +1 -1
  23. package/dist/server/index.d.cts +5 -4
  24. package/dist/server/index.d.ts +5 -4
  25. package/dist/server/index.js +1 -1
  26. package/dist/tab/adapters/solana/index.cjs +1 -1
  27. package/dist/tab/adapters/solana/index.js +1 -1
  28. package/dist/tab/index.cjs +4 -4
  29. package/dist/tab/index.d.cts +3 -2
  30. package/dist/tab/index.d.ts +3 -2
  31. package/dist/tab/index.js +1 -1
  32. package/dist/tab/seller/index.cjs +7 -7
  33. package/dist/tab/seller/index.js +1 -1
  34. package/dist/{types-CHQzNDR6.d.ts → types-BvK5UjA9.d.ts} +1 -1
  35. package/dist/{types-BvQpNtFw.d.cts → types-C08JT9MG.d.ts} +2 -236
  36. package/dist/{types-CkcNYx1Q.d.ts → types-C6IbRTpi.d.ts} +1 -1
  37. package/dist/{types-BvQpNtFw.d.ts → types-CRs5sEcb.d.cts} +2 -236
  38. package/dist/{types-CBQKKFxJ.d.cts → types-Cyyl3Cw_.d.cts} +1 -1
  39. package/dist/{types-DwVhPqOZ.d.ts → types-DGVtb7cl.d.cts} +4 -2
  40. package/dist/{types-BbvuPNXl.d.cts → types-DjDjuUc6.d.ts} +4 -2
  41. package/dist/types-DolSK-3d.d.cts +237 -0
  42. package/dist/types-DolSK-3d.d.ts +237 -0
  43. package/dist/{types-JpkrtFbZ.d.cts → types-RauRuMb7.d.cts} +1 -1
  44. package/docs/mcp.md +98 -0
  45. package/examples/mcp-paid-tool.ts +39 -0
  46. package/package.json +16 -10
package/CHANGELOG.md CHANGED
@@ -7,6 +7,52 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed
11
+
12
+ - Updates `@x402/core`, `@x402/evm`, and `@x402/extensions` from 2.12.0 to 2.26.0
13
+ and uses the upstream file-storage entrypoints.
14
+ - Batch buyers preserve the exact USDC deposit specified by the caller. Each
15
+ handle uses one channel configuration and refuses automatic top-ups or a
16
+ second initial funding attempt. Requests and cumulative vouchers stay within
17
+ the authorized budget, including when recovering a larger existing escrow.
18
+ - `resumeBatchChannel` accepts `maxAmountPerPayment` in USDC, with a default of
19
+ `"1"`. Resume spends existing escrow and refuses new funding. Deposit and
20
+ per-call amounts exceeding six decimal places are rejected before signing.
21
+
22
+ ## [6.0.0] - 2026-09-16
23
+
24
+ ### Added
25
+
26
+ - `@dexterai/x402/mcp` provides native x402 v2 MCP challenge, object proof and
27
+ receipt helpers, a seller adapter with required durable admission storage,
28
+ and a buyer helper that dispatches one approved payment while retaining the
29
+ complete tool result. Uncertain outcomes require recovery of the original
30
+ operation. The default processor supports exact authorization payments on
31
+ explicitly configured networks; Tasks and other payment flows require
32
+ application integration. See [the MCP guide](./docs/mcp.md).
33
+
34
+ ### Changed
35
+
36
+ - Promotes the V2 Tab buyer and seller contracts from the v6 release candidates.
37
+ Install with the exact peer `@dexterai/vault@0.43.4` and Node.js 22 or newer.
38
+ - Fresh grants require a `reserveFinalVoucherV2` provider that returns a confirmed,
39
+ voucher-bound reservation receipt. The SDK verifies the transaction and account
40
+ state before releasing the voucher. Historical V1 buyer grants require migration.
41
+ - Existing seller integrations must adopt the fenced ledger and asynchronous
42
+ metering contracts described under 6.0.0-rc.3 before upgrading from v5.
43
+
44
+ ### Fixed
45
+
46
+ - Reservation verification accepts the known Swig binding versions, including
47
+ attested V3 and automation V4 identities, using the Vault SDK's identity check.
48
+ Unknown versions remain rejected. This preserves the V3 fix previously used in
49
+ the unpublished 6.0.0-rc.6 artifact.
50
+ - CI now installs the packed release in a fresh consumer and verifies the public
51
+ ESM and CommonJS Tab exports, V2 signatures, reservation checks and retry identity.
52
+
53
+ These checks use local fixtures. Hosted checkout and live settlement require
54
+ their own deployment and transaction verification.
55
+
10
56
  ## [6.0.0-rc.5] - 2026-08-17
11
57
 
12
58
  ### Fixed
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  <p align="center">
16
16
  <a href="https://www.npmjs.com/package/@dexterai/x402"><img src="https://img.shields.io/npm/v/@dexterai/x402.svg" alt="npm"></a>
17
- <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E=18-brightgreen.svg" alt="Node"></a>
17
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%3E=22-brightgreen.svg" alt="Node"></a>
18
18
  <img src="https://img.shields.io/badge/non--custodial-passkey-brightgreen" alt="Non-custodial">
19
19
  <a href="https://dexter.cash/sdk"><img src="https://img.shields.io/badge/Try_it-real_payments-blueviolet" alt="Live Demo"></a>
20
20
  </p>
@@ -176,6 +176,8 @@ The screen is hosted for a structural reason, not a stylistic one: the vault's p
176
176
 
177
177
  Tabs are the headline. The same install carries the rest of the x402 surface — each documented in full in [REFERENCE.md](./REFERENCE.md).
178
178
 
179
+ Paid MCP tools use the `@dexterai/x402/mcp` entrypoint. The [MCP guide](./docs/mcp.md) covers the seller adapter, durable storage contract, and buyer dispatch with complete result preservation.
180
+
179
181
  - **One-shot payments** — a single discrete purchase over HTTP `402`, USDC on Solana and the major EVM chains. `payAndFetch` (client), `x402Middleware` (server), `useX402Payment` (React).
180
182
  - **Batch settlement (EVM)** — prepay an escrow once, make many paid calls with off-chain vouchers, settle in a handful of transactions to amortize gas. `openBatchChannel`.
181
183
  - **Discovery** — make any protected route findable by capability through the x402 bazaar spec. `bazaarExtension()`.
@@ -205,6 +207,8 @@ Tabs are Solana. One-shot and batch settlement span Solana and the major EVM cha
205
207
 
206
208
  ## More
207
209
 
210
+ Release maintainers can follow the [GitHub OIDC publishing workflow](./docs/releases.md).
211
+
208
212
  - **[REFERENCE.md](./REFERENCE.md)** — every export, option table, and example: tabs, one-shot, batch settlement, discovery.
209
213
  - **Upgrading?** v6 pins the tested Vault `0.43.2` pair, requires voucher-bound V2 reservation receipts, and uses exact-state V3 revocation. Migration from v5/v4/v3: [REFERENCE.md](./REFERENCE.md#migration).
210
214
  - **License** — MIT, see [LICENSE](./LICENSE).
package/REFERENCE.md CHANGED
@@ -42,7 +42,7 @@ import { createSolanaAdapter, createEvmAdapter } from '@dexterai/x402/adapters';
42
42
  import { toAtomicUnits, fromAtomicUnits } from '@dexterai/x402/utils';
43
43
  ```
44
44
 
45
- > `@dexterai/vault` is an exact **peer dependency** at `0.43.2`: install it alongside the matching v6 x402 package so the adapter, revocation wire, and your app use one tested Vault contract.
45
+ > `@dexterai/vault` is an exact **peer dependency** at `0.43.4`: install it alongside the matching v6 x402 package so the adapter, revocation wire, and your app use one tested Vault contract.
46
46
 
47
47
  ---
48
48
 
@@ -105,7 +105,7 @@ Builds the `vault` adapter the buyer calls drive through.
105
105
  | `passkeySigner` | `PasskeySignerWithPublicKey` | A `signOperation(operationMessage)` signer (see below) |
106
106
  | `feePayer` | `Signer` | Lamport fee payer |
107
107
 
108
- The `passkeySigner` uses Vault 0.43.2's canonical shape: `{ credentialId, publicKey, signOperation(operationMessage) }`. The adapter passes the raw operation bytes. The signer obtains the canonical V7 200-byte challenge binding the fixed program, exact vault, current monotonic authorization nonce, operation hash, and fresh ceremony entropy; the adapter owns only the precompile assembly. Do not substitute a bare `sha256(operationMessage)` challenge for V7 operations.
108
+ The `passkeySigner` uses Vault 0.43.4's canonical shape: `{ credentialId, publicKey, signOperation(operationMessage) }`. The adapter passes the raw operation bytes. The signer obtains the canonical V7 200-byte challenge binding the fixed program, exact vault, current monotonic authorization nonce, operation hash, and fresh ceremony entropy; the adapter owns only the precompile assembly. Do not substitute a bare `sha256(operationMessage)` challenge for V7 operations.
109
109
 
110
110
  - **Browser:** vault's `DexterApiBrowserPasskeySigner` — drops in with no shim.
111
111
  - **CLI / server agent:** `passkeySignerFromP256Keypair(kp, { resolveAuthorizationContext })` from `@dexterai/x402/tab/adapters/solana`, wrapping a locally-held P-256 keypair. The resolver must read the current `PasskeyAuthorization` state immediately before a revoke ceremony; the helper never guesses that nonce.
@@ -346,7 +346,37 @@ console.log(escrow.state); // { deposited: '0.3', spent: '0.16', remaining: '0.1
346
346
  await escrow.close();
347
347
  ```
348
348
 
349
- State auto-persists and resumes with `resumeBatchChannel({ wallet, network, salt })`. If the seller never settles, reclaim unspent escrow with `forceWithdraw()` then `finalizeWithdraw()`. The seller mounts `createBatchSettlementSeller(config)` as an Express handler; Dexter operates the authorizer, so the seller manages no signing key. The returned handler exposes `.stop()`, `.closeAll()`, `.closeChannel(id)`.
349
+ `deposit` is a fixed USDC budget. Opening with `deposit: '10'` authorizes one
350
+ $10 deposit and purchases within that total, including a single purchase above
351
+ $1. Amounts support at most six decimal places. The handle binds to the first
352
+ channel configuration it uses and rejects a different seller, token, or
353
+ withdrawal delay. Exhaustion stops spending; funding another channel requires a
354
+ new `openBatchChannel` call.
355
+
356
+ Give each channel one owner and persist its salt and channel store. After a
357
+ funding attempt with an uncertain outcome, the handle refuses another deposit
358
+ signature. Reconcile that attempt before resuming the existing channel. Use
359
+ `resumeBatchChannel` after a process restart; it spends existing escrow and
360
+ refuses requests that require more funding. Its default per-call limit is one
361
+ USDC. Set a higher limit explicitly when needed:
362
+
363
+ ```typescript
364
+ import { resumeBatchChannel } from '@dexterai/x402/batch-settlement';
365
+
366
+ const resumed = await resumeBatchChannel({
367
+ wallet: evmWallet,
368
+ network: 'eip155:8453',
369
+ salt: savedSalt,
370
+ store: savedChannelStore,
371
+ maxAmountPerPayment: '2.00',
372
+ });
373
+ ```
374
+
375
+ If the seller never settles, reclaim unspent escrow with `forceWithdraw()` then
376
+ `finalizeWithdraw()`. The seller mounts `createBatchSettlementSeller(config)` as
377
+ an Express handler; Dexter operates the authorizer, so the seller manages no
378
+ signing key. The returned handler exposes `.stop()`, `.closeAll()`, and
379
+ `.closeChannel(id)`.
350
380
 
351
381
  ---
352
382
 
@@ -1,6 +1,7 @@
1
- import { S as SolanaAdapter, E as EvmAdapter, C as ChainAdapter } from '../types-BvQpNtFw.cjs';
2
- export { A as AdapterConfig, B as BalanceInfo, a as EvmWallet, G as GenericWallet, b as SignedTransaction, c as SolanaWallet, W as WalletSet, d as createEvmAdapter, e as createSolanaAdapter, i as isEvmWallet, f as isSolanaWallet } from '../types-BvQpNtFw.cjs';
1
+ import { S as SolanaAdapter, E as EvmAdapter, C as ChainAdapter } from '../types-CRs5sEcb.cjs';
2
+ export { A as AdapterConfig, B as BalanceInfo, a as EvmWallet, G as GenericWallet, b as SignedTransaction, c as SolanaWallet, W as WalletSet, d as createEvmAdapter, e as createSolanaAdapter, i as isEvmWallet, f as isSolanaWallet } from '../types-CRs5sEcb.cjs';
3
3
  export { A as ARBITRUM_ONE, a as AVALANCHE, B as BASE_MAINNET, b as BASE_SEPOLIA, c as BSC_MAINNET, d as BSC_STABLECOIN_ADDRESSES, e as BSC_USDC, f as BSC_USDT, E as EIP712_DOMAINS, g as ETHEREUM_MAINNET, M as MONAD_MAINNET, O as OPTIMISM, P as PERMIT2_ADDRESS, h as POLYGON, R as ROBINHOOD_MAINNET, i as ROBINHOOD_USDG, S as SKALE_BASE, j as SKALE_BASE_SEPOLIA, k as SOLANA_DEVNET, l as SOLANA_MAINNET, m as SOLANA_TESTNET, U as USDC_ADDRESSES, W as WORLD_MAINNET, X as X402_EXACT_PERMIT2_PROXY } from '../constants-BLvApMMl.cjs';
4
+ import '../types-DolSK-3d.cjs';
4
5
 
5
6
  /**
6
7
  * Check if an asset address is a known USDC contract (any chain).
@@ -1,6 +1,7 @@
1
- import { S as SolanaAdapter, E as EvmAdapter, C as ChainAdapter } from '../types-BvQpNtFw.js';
2
- export { A as AdapterConfig, B as BalanceInfo, a as EvmWallet, G as GenericWallet, b as SignedTransaction, c as SolanaWallet, W as WalletSet, d as createEvmAdapter, e as createSolanaAdapter, i as isEvmWallet, f as isSolanaWallet } from '../types-BvQpNtFw.js';
1
+ import { S as SolanaAdapter, E as EvmAdapter, C as ChainAdapter } from '../types-C08JT9MG.js';
2
+ export { A as AdapterConfig, B as BalanceInfo, a as EvmWallet, G as GenericWallet, b as SignedTransaction, c as SolanaWallet, W as WalletSet, d as createEvmAdapter, e as createSolanaAdapter, i as isEvmWallet, f as isSolanaWallet } from '../types-C08JT9MG.js';
3
3
  export { A as ARBITRUM_ONE, a as AVALANCHE, B as BASE_MAINNET, b as BASE_SEPOLIA, c as BSC_MAINNET, d as BSC_STABLECOIN_ADDRESSES, e as BSC_USDC, f as BSC_USDT, E as EIP712_DOMAINS, g as ETHEREUM_MAINNET, M as MONAD_MAINNET, O as OPTIMISM, P as PERMIT2_ADDRESS, h as POLYGON, R as ROBINHOOD_MAINNET, i as ROBINHOOD_USDG, S as SKALE_BASE, j as SKALE_BASE_SEPOLIA, k as SOLANA_DEVNET, l as SOLANA_MAINNET, m as SOLANA_TESTNET, U as USDC_ADDRESSES, W as WORLD_MAINNET, X as X402_EXACT_PERMIT2_PROXY } from '../constants-BLvApMMl.js';
4
+ import '../types-DolSK-3d.js';
4
5
 
5
6
  /**
6
7
  * Check if an asset address is a known USDC contract (any chain).
@@ -1 +1 @@
1
- "use strict";var nt=Object.create;var k=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames;var it=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var st=(t,e)=>{for(var n in e)k(t,n,{get:e[n],enumerable:!0})},$=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of rt(e))!ot.call(t,r)&&r!==n&&k(t,r,{get:()=>e[r],enumerable:!(a=at(e,r))||a.enumerable});return t};var lt=(t,e,n)=>(n=t!=null?nt(it(t)):{},$(e||!t||!t.__esModule?k(n,"default",{value:t,enumerable:!0}):n,t)),ct=t=>$(k({},"__esModule",{value:!0}),t);var ft={};st(ft,{InsufficientBalanceError:()=>A,UnsupportedNetworkError:()=>f,WithdrawNotReadyError:()=>y,createFileChannelStore:()=>P,createLocalStorageChannelStore:()=>B,getDefaultChannelStore:()=>W,openBatchChannel:()=>Q,resumeBatchChannel:()=>Y});module.exports=ct(ft);var s=require("viem"),C=require("viem/chains"),X=require("@x402/evm"),I=require("@x402/evm/batch-settlement/client"),T=require("@x402/core/client");var O=require("os"),N=require("path"),j=require("@x402/evm/batch-settlement/client");function P(t){return new j.FileClientChannelStorage({directory:t})}var E="dexter-x402-channel:";function B(t){return{async get(e){let n=t.getItem(E+e);return n?JSON.parse(n):void 0},async set(e,n){t.setItem(E+e,JSON.stringify(n))},async delete(e){t.removeItem(E+e)}}}function W(){let t=globalThis.localStorage;return t?B(t):P((0,N.join)((0,O.homedir)(),".dexter-x402","channels"))}var A=class extends Error{constructor(e){super(e),this.name="InsufficientBalanceError"}},f=class extends Error{constructor(e){super(e),this.name="UnsupportedNetworkError"}};var L=require("viem"),z=require("@x402/evm/batch-settlement/client"),g=require("@x402/evm"),y=class extends Error{constructor(e){super(e),this.name="WithdrawNotReadyError"}};function M(t,e){return t===0?0:t+e}var dt=6,H=[{name:"payer",type:"address"},{name:"payerAuthorizer",type:"address"},{name:"receiver",type:"address"},{name:"receiverAuthorizer",type:"address"},{name:"token",type:"address"},{name:"withdrawDelay",type:"uint40"},{name:"salt",type:"bytes32"}],R=[{type:"function",name:"initiateWithdraw",inputs:[{name:"config",type:"tuple",components:H},{name:"amount",type:"uint128"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"finalizeWithdraw",inputs:[{name:"config",type:"tuple",components:H}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"pendingWithdrawals",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"amount",type:"uint128"},{name:"initiatedAt",type:"uint40"}],stateMutability:"view"},{type:"function",name:"channels",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"balance",type:"uint128"},{name:"totalClaimed",type:"uint128"}],stateMutability:"view"}];function ht(t){if(Array.isArray(t))return{balance:BigInt(t[0]),totalClaimed:BigInt(t[1])};let e=t;return{balance:BigInt(e.balance),totalClaimed:BigInt(e.totalClaimed)}}function q(t){if(Array.isArray(t))return{amount:BigInt(t[0]),initiatedAt:Number(t[1])};let e=t;return{amount:BigInt(e.amount),initiatedAt:Number(e.initiatedAt)}}async function _(t){let{config:e,network:n,client:a,withdrawDelaySecs:r}=t,i=(0,z.computeChannelId)(e,n),l=t.amountAtomic;l===void 0&&(l=ht(await a.readContract({address:g.BATCH_SETTLEMENT_ADDRESS,abi:R,functionName:"channels",args:[i]})).balance);let c=await a.writeContract({address:g.BATCH_SETTLEMENT_ADDRESS,abi:R,functionName:"initiateWithdraw",args:[e,l]});await a.waitForTransactionReceipt({hash:c});let d=q(await a.readContract({address:g.BATCH_SETTLEMENT_ADDRESS,abi:R,functionName:"pendingWithdrawals",args:[i]}));return{initiateTx:c,finalizableAt:M(d.initiatedAt,r)}}async function J(t){let{config:e,network:n,client:a,withdrawDelaySecs:r}=t,i=(0,z.computeChannelId)(e,n),l=q(await a.readContract({address:g.BATCH_SETTLEMENT_ADDRESS,abi:R,functionName:"pendingWithdrawals",args:[i]}));if(l.initiatedAt===0)throw new y(`no withdrawal is pending for channel ${i} \u2014 call forceWithdraw first`);let c=M(l.initiatedAt,r),d=Math.floor(Date.now()/1e3);if(d<c)throw new y(`withdrawal for channel ${i} is not finalizable until ${c} (unix seconds) \u2014 ${c-d}s remaining`);let o=await a.writeContract({address:g.BATCH_SETTLEMENT_ADDRESS,abi:R,functionName:"finalizeWithdraw",args:[e]});return await a.waitForTransactionReceipt({hash:o}),{finalizeTx:o,withdrawnAmount:(0,L.formatUnits)(l.amount,dt)}}var V={"eip155:8453":{chain:C.base,defaultRpc:"https://api.dexter.cash/api/evm/base/rpc"},"eip155:42161":{chain:C.arbitrum,defaultRpc:"https://api.dexter.cash/api/evm/arbitrum/rpc"},"eip155:137":{chain:C.polygon,defaultRpc:"https://api.dexter.cash/api/evm/polygon/rpc"}};function G(t){let e=V[t.network];if(!e)throw new f(`batch-settlement is not available on network "${t.network}" \u2014 supported: ${Object.keys(V).join(", ")}`);let n=t.rpcUrl??e.defaultRpc,a=t.wallet.signTypedData;if(typeof a!="function")throw new Error("batch-settlement requires an EvmWallet that supports signTypedData (EIP-712)");let r=(0,s.createWalletClient)({account:{address:t.wallet.address,type:"json-rpc"},chain:e.chain,transport:(0,s.http)(n)}).extend(s.publicActions),i=t.wallet.sendTransaction,l=typeof i=="function",c=async u=>{let b=u.to??void 0;if(!b)throw new Error("batch-settlement escape hatch: transaction is missing a `to` address");let p=u.data??"0x";if(typeof i=="function")return await i.call(t.wallet,{to:b,data:p,value:u.value});throw new Error("batch-settlement: wallet has no sendTransaction")},d=Object.assign(r,{address:t.wallet.address,signTypedData:u=>a.call(t.wallet,u),sendTransaction:c}),o=(0,X.toClientEvmSigner)(d),m=new I.BatchSettlementEvmScheme(o,{storage:t.store,depositPolicy:{depositMultiplier:4},depositStrategy:()=>t.depositAtomic,salt:t.salt}),h=new T.x402Client;h.register(t.network,m);let w=new T.x402HTTPClient(h);return{scheme:m,x402Cli:h,httpClient:w,rpcUrl:n,withdrawClient:d,canSubmitTransactions:l}}var v=6;function ut(t,e){let n=e>t?0n:t-e;return{deposited:(0,s.formatUnits)(t,v),spent:(0,s.formatUnits)(e,v),remaining:(0,s.formatUnits)(n,v)}}function pt(t){let e=t.payload;if(!e||typeof e!="object")return"";let n=e.voucher;if(!n||typeof n!="object")return"";let a=n.channelId;return typeof a=="string"?a:""}function mt(t){let e=t.payload;if(!e||typeof e!="object")return;let n=e.channelConfig;if(!(!n||typeof n!="object"))return n}function K(t){let{stack:e,store:n,network:a}=t,r="",i,l=t.depositedAtomic,c=0n;async function d(){if(!r)return;let o=await(0,I.getChannel)(n,r);o&&(o.chargedCumulativeAmount!==void 0&&(c=BigInt(o.chargedCumulativeAmount)),l===0n&&o.balance!==void 0&&(l=BigInt(o.balance)))}return{get channelId(){return r},get salt(){return t.salt},get network(){return a},get state(){return ut(l,c)},async fetch(o,m){let{httpClient:h}=e,w=await fetch(o,m);if(w.status!==402)return w;let F=h.getPaymentRequiredResponse(p=>w.headers.get(p),await w.clone().json().catch(()=>{})),u=2,b;for(let p=1;p<=u;p+=1){let S=await h.createPaymentPayload(F),D=pt(S);D&&(r=D);let U=mt(S);U&&(i=U);let Z=h.encodePaymentSignatureHeader(S),x=await fetch(o,{...m,headers:{...m?.headers??{},...Z}});b=x;let{recovered:tt}=await h.processPaymentResult(S,et=>x.headers.get(et),x.status);if(await d(),!(x.status===402&&tt&&p<u))return x}return b},async close(){return r&&await n.delete(r.toLowerCase()),{closed:!0}},async forceWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement forceWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!i)throw new Error("forceWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return _({config:i,network:a,client:e.withdrawClient,withdrawDelaySecs:i.withdrawDelay})},async finalizeWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement finalizeWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!i)throw new Error("finalizeWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return J({config:i,network:a,client:e.withdrawClient,withdrawDelaySecs:i.withdrawDelay})}}}async function wt(){let t=globalThis.crypto??(await import("crypto")).webcrypto,e=new Uint8Array(32);return t.getRandomValues(e),(0,s.toHex)(e)}async function Q(t){let e=t.store??W(),n=t.salt??await wt(),a;try{a=(0,s.parseUnits)(t.deposit,v)}catch{throw new Error(`deposit must be a valid USDC amount in decimal units (e.g. "0.30"), got "${t.deposit}"`)}if(a<=0n)throw new Error(`deposit must be a positive amount, got "${t.deposit}"`);let r=G({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:a.toString(),salt:n});return K({stack:r,store:e,network:t.network,depositedAtomic:a,salt:n})}async function Y(t){let e=t.store??W(),n=G({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:"0",salt:t.salt});return K({stack:n,store:e,network:t.network,depositedAtomic:0n,salt:t.salt})}0&&(module.exports={InsufficientBalanceError,UnsupportedNetworkError,WithdrawNotReadyError,createFileChannelStore,createLocalStorageChannelStore,getDefaultChannelStore,openBatchChannel,resumeBatchChannel});
1
+ "use strict";var Ct=Object.create;var I=Object.defineProperty;var yt=Object.getOwnPropertyDescriptor;var xt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,St=Object.prototype.hasOwnProperty;var At=(t,e)=>{for(var n in e)I(t,n,{get:e[n],enumerable:!0})},Q=(t,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of xt(e))!St.call(t,r)&&r!==n&&I(t,r,{get:()=>e[r],enumerable:!(a=yt(e,r))||a.enumerable});return t};var bt=(t,e,n)=>(n=t!=null?Ct(Et(t)):{},Q(e||!t||!t.__esModule?I(n,"default",{value:t,enumerable:!0}):n,t)),Rt=t=>Q(I({},"__esModule",{value:!0}),t);var Ft={};At(Ft,{InsufficientBalanceError:()=>P,UnsupportedNetworkError:()=>x,WithdrawNotReadyError:()=>S,createFileChannelStore:()=>X,createLocalStorageChannelStore:()=>Y,getDefaultChannelStore:()=>T,openBatchChannel:()=>ft,resumeBatchChannel:()=>gt});module.exports=Rt(Ft);var d=require("viem"),A=require("viem/chains"),ht=require("@x402/evm"),U=require("@x402/evm/batch-settlement/client"),F=require("@x402/core/client");var Tt="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Dt="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Nt="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var z="eip155:8453",$="eip155:84532",K="eip155:42161",H="eip155:137",q="eip155:10",j="eip155:43114",V="eip155:56",W="eip155:480",_="eip155:143",B="eip155:4663",O="eip155:1187947933",k="eip155:324705682",G="eip155:1";var It="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",Wt="0x55d398326f99059fF775485246999027B3197955",tt="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",_t="0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",et={[V]:tt,[z]:It,[$]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[K]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[H]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[q]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[j]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[W]:"0x79A02482A880bCE3F13e09Da970dC34db4CD24d1",[_]:"0x754704Bc059F8C67012fEd69BC8A327a5aafb603",[B]:_t,[O]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[k]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[G]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},Lt={[Wt]:{symbol:"USDT",decimals:18},[tt]:{symbol:"USDC",decimals:18}};var zt={[W]:{name:"USDC",version:"2"},[_]:{name:"USDC",version:"2"},[B]:{name:"Global Dollar",version:"1"},[O]:{name:"Bridged USDC (SKALE Bridge)",version:"2"},[k]:{name:"Bridged USDC (SKALE Bridge)",version:"2"}};var $t={[V]:56,[z]:8453,[$]:84532,[K]:42161,[H]:137,[q]:10,[j]:43114,[W]:480,[_]:143,[B]:4663,[O]:1187947933,[k]:324705682,[G]:1},Kt={[Tt]:"https://api.dexter.cash/api/solana/rpc",[Dt]:"https://api.devnet.solana.com",[Nt]:"https://api.testnet.solana.com"},Ht={[V]:"https://api.dexter.cash/api/evm/bsc/rpc",[z]:"https://api.dexter.cash/api/base/rpc",[$]:"https://sepolia.base.org",[K]:"https://api.dexter.cash/api/evm/arbitrum/rpc",[H]:"https://api.dexter.cash/api/evm/polygon/rpc",[q]:"https://api.dexter.cash/api/evm/optimism/rpc",[j]:"https://api.dexter.cash/api/evm/avalanche/rpc",[W]:"https://worldchain-mainnet.g.alchemy.com/public",[_]:"https://rpc.monad.xyz",[B]:"https://rpc.mainnet.chain.robinhood.com",[O]:"https://skale-base.skalenodes.com/v1/base",[k]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[G]:"https://eth.llamarpc.com"};var nt=require("os"),at=require("path"),rt=require("@x402/evm/batch-settlement/client/file-storage");function X(t){return new rt.FileClientChannelStorage({directory:t})}var J="dexter-x402-channel:";function Y(t){return{async get(e){let n=t.getItem(J+e);return n?JSON.parse(n):void 0},async set(e,n){t.setItem(J+e,JSON.stringify(n))},async delete(e){t.removeItem(J+e)}}}function T(){let t=globalThis.localStorage;return t?Y(t):X((0,at.join)((0,nt.homedir)(),".dexter-x402","channels"))}var P=class extends Error{constructor(e){super(e),this.name="InsufficientBalanceError"}},x=class extends Error{constructor(e){super(e),this.name="UnsupportedNetworkError"}};var ot=require("viem"),Z=require("@x402/evm/batch-settlement/client"),E=require("@x402/evm"),S=class extends Error{constructor(e){super(e),this.name="WithdrawNotReadyError"}};function st(t,e){return t===0?0:t+e}var Bt=6,it=[{name:"payer",type:"address"},{name:"payerAuthorizer",type:"address"},{name:"receiver",type:"address"},{name:"receiverAuthorizer",type:"address"},{name:"token",type:"address"},{name:"withdrawDelay",type:"uint40"},{name:"salt",type:"bytes32"}],D=[{type:"function",name:"initiateWithdraw",inputs:[{name:"config",type:"tuple",components:it},{name:"amount",type:"uint128"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"finalizeWithdraw",inputs:[{name:"config",type:"tuple",components:it}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"pendingWithdrawals",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"amount",type:"uint128"},{name:"initiatedAt",type:"uint40"}],stateMutability:"view"},{type:"function",name:"channels",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"balance",type:"uint128"},{name:"totalClaimed",type:"uint128"}],stateMutability:"view"}];function Ot(t){if(Array.isArray(t))return{balance:BigInt(t[0]),totalClaimed:BigInt(t[1])};let e=t;return{balance:BigInt(e.balance),totalClaimed:BigInt(e.totalClaimed)}}function ct(t){if(Array.isArray(t))return{amount:BigInt(t[0]),initiatedAt:Number(t[1])};let e=t;return{amount:BigInt(e.amount),initiatedAt:Number(e.initiatedAt)}}async function lt(t){let{config:e,network:n,client:a,withdrawDelaySecs:r}=t,s=(0,Z.computeChannelId)(e,n),l=t.amountAtomic;l===void 0&&(l=Ot(await a.readContract({address:E.BATCH_SETTLEMENT_ADDRESS,abi:D,functionName:"channels",args:[s]})).balance);let p=await a.writeContract({address:E.BATCH_SETTLEMENT_ADDRESS,abi:D,functionName:"initiateWithdraw",args:[e,l]});await a.waitForTransactionReceipt({hash:p});let m=ct(await a.readContract({address:E.BATCH_SETTLEMENT_ADDRESS,abi:D,functionName:"pendingWithdrawals",args:[s]}));return{initiateTx:p,finalizableAt:st(m.initiatedAt,r)}}async function dt(t){let{config:e,network:n,client:a,withdrawDelaySecs:r}=t,s=(0,Z.computeChannelId)(e,n),l=ct(await a.readContract({address:E.BATCH_SETTLEMENT_ADDRESS,abi:D,functionName:"pendingWithdrawals",args:[s]}));if(l.initiatedAt===0)throw new S(`no withdrawal is pending for channel ${s} \u2014 call forceWithdraw first`);let p=st(l.initiatedAt,r),m=Math.floor(Date.now()/1e3);if(m<p)throw new S(`withdrawal for channel ${s} is not finalizable until ${p} (unix seconds) \u2014 ${p-m}s remaining`);let c=await a.writeContract({address:E.BATCH_SETTLEMENT_ADDRESS,abi:D,functionName:"finalizeWithdraw",args:[e]});return await a.waitForTransactionReceipt({hash:c}),{finalizeTx:c,withdrawnAmount:(0,ot.formatUnits)(l.amount,Bt)}}var pt={"eip155:8453":{chain:A.base,defaultRpc:"https://api.dexter.cash/api/evm/base/rpc"},"eip155:42161":{chain:A.arbitrum,defaultRpc:"https://api.dexter.cash/api/evm/arbitrum/rpc"},"eip155:137":{chain:A.polygon,defaultRpc:"https://api.dexter.cash/api/evm/polygon/rpc"}};function mt(t){let e=pt[t.network];if(!e)throw new x(`batch-settlement is not available on network "${t.network}" \u2014 supported: ${Object.keys(pt).join(", ")}`);let n=t.rpcUrl??e.defaultRpc,a=BigInt(t.depositAtomic),r=a===0n,s=r?t.maxPaymentAtomic??"1000000":t.depositAtomic,l=et[t.network],p=t.wallet.signTypedData;if(typeof p!="function")throw new Error("batch-settlement requires an EvmWallet that supports signTypedData (EIP-712)");let m=(0,d.createWalletClient)({account:{address:t.wallet.address,type:"json-rpc"},chain:e.chain,transport:(0,d.http)(n)}).extend(d.publicActions),c=t.wallet.sendTransaction,b=typeof c=="function",C=async i=>{let o=i.to??void 0;if(!o)throw new Error("batch-settlement escape hatch: transaction is missing a `to` address");let g=i.data??"0x";if(typeof c=="function")return await c.call(t.wallet,{to:o,data:g,value:i.value});throw new Error("batch-settlement: wallet has no sendTransaction")},f=Object.assign(m,{address:t.wallet.address,signTypedData:i=>{if(!r&&i.primaryType==="Voucher"&&BigInt(i.message.maxClaimableAmount)>a)throw new Error("batch-settlement voucher exceeds the authorized deposit budget");return p.call(t.wallet,i)},sendTransaction:C}),M=(0,ht.toClientEvmSigner)(f),R=!1,y=new U.BatchSettlementEvmScheme(M,{storage:t.store,depositPolicy:{depositMultiplier:4},depositStrategy:i=>{if(r)throw new Error("batch-settlement resume requires funded escrow; resume never authorizes a deposit");if(BigInt(i.currentBalance)>0n||BigInt(i.clientContext.chargedCumulativeAmount??"0")>0n)throw new Error("batch-settlement escrow is exhausted; automatic top-ups are disabled");if(R)throw new Error("batch-settlement initial funding was already attempted; reconcile its outcome and resume the channel before spending again");let o=i.paymentRequirements.extra?.minDeposit;if(typeof o=="string"&&/^\d+$/.test(o)&&BigInt(o)>a)throw new Error("batch-settlement seller minimum deposit exceeds the authorized deposit budget");if(BigInt(i.minimumDepositAmount)>a||i.maxDeposit!==void 0&&BigInt(i.maxDeposit)<a)throw new Error("batch-settlement cannot fund the exact authorized deposit");return R=!0,t.depositAtomic},salt:t.salt}),h=new F.x402Client;h.register(t.network,y),h.setSpendControls({allowedAssets:[{network:t.network,asset:l,maxAmountPerPayment:s}]}),h.registerPolicy((i,o)=>{let g=o.filter(w=>w.asset.toLowerCase()===l.toLowerCase());if(g.length===0)throw new Error("batch-settlement channels support only USDC on the selected network");return g});let u;h.onBeforePaymentCreation(async({selectedRequirements:i})=>{let o=JSON.stringify(y.buildChannelConfig(i),(g,w)=>typeof w=="string"?w.toLowerCase():w);if(u!==void 0&&o!==u)throw new Error("batch-settlement handle is already bound to a different channel configuration");u=o});let N=new F.x402HTTPClient(h);return{scheme:y,x402Cli:h,httpClient:N,rpcUrl:n,withdrawClient:f,canSubmitTransactions:b}}var v=6;function ut(t,e){let n;try{if(!/^(?:\d+(?:\.\d{0,6})?|\.\d{1,6})$/.test(t))throw new Error("invalid decimal");n=(0,d.parseUnits)(t,v)}catch{throw new Error(`${e} must be a valid USDC amount with at most six decimal places (e.g. "0.30"), got "${t}"`)}if(n<=0n)throw new Error(`${e} must be a positive amount, got "${t}"`);return n}function kt(t,e){let n=e>t?0n:t-e;return{deposited:(0,d.formatUnits)(t,v),spent:(0,d.formatUnits)(e,v),remaining:(0,d.formatUnits)(n,v)}}function Pt(t){let e=t.payload;if(!e||typeof e!="object")return"";let n=e.voucher;if(!n||typeof n!="object")return"";let a=n.channelId;return typeof a=="string"?a:""}function vt(t){let e=t.payload;if(!e||typeof e!="object")return;let n=e.channelConfig;if(!(!n||typeof n!="object"))return n}function wt(t){let{stack:e,store:n,network:a}=t,r="",s,l=t.depositedAtomic,p=0n;async function m(){if(!r)return;let c=await(0,U.getChannel)(n,r);c&&(c.chargedCumulativeAmount!==void 0&&(p=BigInt(c.chargedCumulativeAmount)),l===0n&&c.balance!==void 0&&(l=BigInt(c.balance)))}return{get channelId(){return r},get salt(){return t.salt},get network(){return a},get state(){return kt(l,p)},async fetch(c,b){let{httpClient:C}=e,f=await fetch(c,b);if(f.status!==402)return f;let M=C.getPaymentRequiredResponse(h=>f.headers.get(h),await f.clone().json().catch(()=>{})),R=2,y;for(let h=1;h<=R;h+=1){let u=await C.createPaymentPayload(M),N=Pt(u);N&&(r=N);let L=vt(u);L&&(s=L);let i=C.encodePaymentSignatureHeader(u),o=await fetch(c,{...b,headers:{...b?.headers??{},...i}});y=o;let{recovered:g}=await C.processPaymentResult(u,w=>o.headers.get(w),o.status);if(await m(),!(o.status===402&&g&&h<R))return o}return y},async close(){return r&&await n.delete(r.toLowerCase()),{closed:!0}},async forceWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement forceWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!s)throw new Error("forceWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return lt({config:s,network:a,client:e.withdrawClient,withdrawDelaySecs:s.withdrawDelay})},async finalizeWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement finalizeWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!s)throw new Error("finalizeWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return dt({config:s,network:a,client:e.withdrawClient,withdrawDelaySecs:s.withdrawDelay})}}}async function Ut(){let t=globalThis.crypto??(await import("crypto")).webcrypto,e=new Uint8Array(32);return t.getRandomValues(e),(0,d.toHex)(e)}async function ft(t){let e=t.store??T(),n=t.salt??await Ut(),a=ut(t.deposit,"deposit"),r=mt({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:a.toString(),salt:n});return wt({stack:r,store:e,network:t.network,depositedAtomic:a,salt:n})}async function gt(t){let e=t.store??T(),n=ut(t.maxAmountPerPayment??"1","maxAmountPerPayment"),a=mt({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:"0",maxPaymentAtomic:n.toString(),salt:t.salt});return wt({stack:a,store:e,network:t.network,depositedAtomic:0n,salt:t.salt})}0&&(module.exports={InsufficientBalanceError,UnsupportedNetworkError,WithdrawNotReadyError,createFileChannelStore,createLocalStorageChannelStore,getDefaultChannelStore,openBatchChannel,resumeBatchChannel});
@@ -1,7 +1,8 @@
1
- import { O as OpenBatchChannelOptions, B as BatchSettlementChannel, R as ResumeBatchChannelOptions, C as ChannelStore } from '../types-BbvuPNXl.cjs';
2
- export { a as ChannelState, b as CloseReceipt, c as CloseResult, F as FinalizeWithdrawResult, d as ForceWithdrawResult, I as InsufficientBalanceError, U as UnsupportedNetworkError, W as WithdrawNotReadyError } from '../types-BbvuPNXl.cjs';
1
+ import { O as OpenBatchChannelOptions, B as BatchSettlementChannel, R as ResumeBatchChannelOptions, C as ChannelStore } from '../types-DGVtb7cl.cjs';
2
+ export { a as ChannelState, b as CloseReceipt, c as CloseResult, F as FinalizeWithdrawResult, d as ForceWithdrawResult, I as InsufficientBalanceError, U as UnsupportedNetworkError, W as WithdrawNotReadyError } from '../types-DGVtb7cl.cjs';
3
3
  import '@x402/evm/batch-settlement/client';
4
- import '../types-BvQpNtFw.cjs';
4
+ import '../types-CRs5sEcb.cjs';
5
+ import '../types-DolSK-3d.cjs';
5
6
 
6
7
  declare function openBatchChannel(options: OpenBatchChannelOptions): Promise<BatchSettlementChannel>;
7
8
  /**
@@ -1,7 +1,8 @@
1
- import { O as OpenBatchChannelOptions, B as BatchSettlementChannel, R as ResumeBatchChannelOptions, C as ChannelStore } from '../types-DwVhPqOZ.js';
2
- export { a as ChannelState, b as CloseReceipt, c as CloseResult, F as FinalizeWithdrawResult, d as ForceWithdrawResult, I as InsufficientBalanceError, U as UnsupportedNetworkError, W as WithdrawNotReadyError } from '../types-DwVhPqOZ.js';
1
+ import { O as OpenBatchChannelOptions, B as BatchSettlementChannel, R as ResumeBatchChannelOptions, C as ChannelStore } from '../types-DjDjuUc6.js';
2
+ export { a as ChannelState, b as CloseReceipt, c as CloseResult, F as FinalizeWithdrawResult, d as ForceWithdrawResult, I as InsufficientBalanceError, U as UnsupportedNetworkError, W as WithdrawNotReadyError } from '../types-DjDjuUc6.js';
3
3
  import '@x402/evm/batch-settlement/client';
4
- import '../types-BvQpNtFw.js';
4
+ import '../types-C08JT9MG.js';
5
+ import '../types-DolSK-3d.js';
5
6
 
6
7
  declare function openBatchChannel(options: OpenBatchChannelOptions): Promise<BatchSettlementChannel>;
7
8
  /**
@@ -1 +1 @@
1
- import{createWalletClient as K,http as Q,publicActions as Y,parseUnits as Z,formatUnits as A,toHex as tt}from"viem";import{base as et,arbitrum as nt,polygon as at}from"viem/chains";import{toClientEvmSigner as rt}from"@x402/evm";import{BatchSettlementEvmScheme as it,getChannel as ot}from"@x402/evm/batch-settlement/client";import{x402Client as st,x402HTTPClient as lt}from"@x402/core/client";import{homedir as q}from"os";import{join as _}from"path";import{FileClientChannelStorage as J}from"@x402/evm/batch-settlement/client";function E(t){return new J({directory:t})}var R="dexter-x402-channel:";function P(t){return{async get(e){let n=t.getItem(R+e);return n?JSON.parse(n):void 0},async set(e,n){t.setItem(R+e,JSON.stringify(n))},async delete(e){t.removeItem(R+e)}}}function x(){let t=globalThis.localStorage;return t?P(t):E(_(q(),".dexter-x402","channels"))}var k=class extends Error{constructor(e){super(e),this.name="InsufficientBalanceError"}},y=class extends Error{constructor(e){super(e),this.name="UnsupportedNetworkError"}};import{formatUnits as V}from"viem";import{computeChannelId as z}from"@x402/evm/batch-settlement/client";import{BATCH_SETTLEMENT_ADDRESS as C}from"@x402/evm";var S=class extends Error{constructor(e){super(e),this.name="WithdrawNotReadyError"}};function F(t,e){return t===0?0:t+e}var X=6,B=[{name:"payer",type:"address"},{name:"payerAuthorizer",type:"address"},{name:"receiver",type:"address"},{name:"receiverAuthorizer",type:"address"},{name:"token",type:"address"},{name:"withdrawDelay",type:"uint40"},{name:"salt",type:"bytes32"}],b=[{type:"function",name:"initiateWithdraw",inputs:[{name:"config",type:"tuple",components:B},{name:"amount",type:"uint128"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"finalizeWithdraw",inputs:[{name:"config",type:"tuple",components:B}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"pendingWithdrawals",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"amount",type:"uint128"},{name:"initiatedAt",type:"uint40"}],stateMutability:"view"},{type:"function",name:"channels",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"balance",type:"uint128"},{name:"totalClaimed",type:"uint128"}],stateMutability:"view"}];function G(t){if(Array.isArray(t))return{balance:BigInt(t[0]),totalClaimed:BigInt(t[1])};let e=t;return{balance:BigInt(e.balance),totalClaimed:BigInt(e.totalClaimed)}}function D(t){if(Array.isArray(t))return{amount:BigInt(t[0]),initiatedAt:Number(t[1])};let e=t;return{amount:BigInt(e.amount),initiatedAt:Number(e.initiatedAt)}}async function U(t){let{config:e,network:n,client:a,withdrawDelaySecs:i}=t,r=z(e,n),s=t.amountAtomic;s===void 0&&(s=G(await a.readContract({address:C,abi:b,functionName:"channels",args:[r]})).balance);let l=await a.writeContract({address:C,abi:b,functionName:"initiateWithdraw",args:[e,s]});await a.waitForTransactionReceipt({hash:l});let c=D(await a.readContract({address:C,abi:b,functionName:"pendingWithdrawals",args:[r]}));return{initiateTx:l,finalizableAt:F(c.initiatedAt,i)}}async function $(t){let{config:e,network:n,client:a,withdrawDelaySecs:i}=t,r=z(e,n),s=D(await a.readContract({address:C,abi:b,functionName:"pendingWithdrawals",args:[r]}));if(s.initiatedAt===0)throw new S(`no withdrawal is pending for channel ${r} \u2014 call forceWithdraw first`);let l=F(s.initiatedAt,i),c=Math.floor(Date.now()/1e3);if(c<l)throw new S(`withdrawal for channel ${r} is not finalizable until ${l} (unix seconds) \u2014 ${l-c}s remaining`);let o=await a.writeContract({address:C,abi:b,functionName:"finalizeWithdraw",args:[e]});return await a.waitForTransactionReceipt({hash:o}),{finalizeTx:o,withdrawnAmount:V(s.amount,X)}}var O={"eip155:8453":{chain:et,defaultRpc:"https://api.dexter.cash/api/evm/base/rpc"},"eip155:42161":{chain:nt,defaultRpc:"https://api.dexter.cash/api/evm/arbitrum/rpc"},"eip155:137":{chain:at,defaultRpc:"https://api.dexter.cash/api/evm/polygon/rpc"}};function N(t){let e=O[t.network];if(!e)throw new y(`batch-settlement is not available on network "${t.network}" \u2014 supported: ${Object.keys(O).join(", ")}`);let n=t.rpcUrl??e.defaultRpc,a=t.wallet.signTypedData;if(typeof a!="function")throw new Error("batch-settlement requires an EvmWallet that supports signTypedData (EIP-712)");let i=K({account:{address:t.wallet.address,type:"json-rpc"},chain:e.chain,transport:Q(n)}).extend(Y),r=t.wallet.sendTransaction,s=typeof r=="function",l=async h=>{let w=h.to??void 0;if(!w)throw new Error("batch-settlement escape hatch: transaction is missing a `to` address");let u=h.data??"0x";if(typeof r=="function")return await r.call(t.wallet,{to:w,data:u,value:h.value});throw new Error("batch-settlement: wallet has no sendTransaction")},c=Object.assign(i,{address:t.wallet.address,signTypedData:h=>a.call(t.wallet,h),sendTransaction:l}),o=rt(c),p=new it(o,{storage:t.store,depositPolicy:{depositMultiplier:4},depositStrategy:()=>t.depositAtomic,salt:t.salt}),d=new st;d.register(t.network,p);let m=new lt(d);return{scheme:p,x402Cli:d,httpClient:m,rpcUrl:n,withdrawClient:c,canSubmitTransactions:s}}var W=6;function ct(t,e){let n=e>t?0n:t-e;return{deposited:A(t,W),spent:A(e,W),remaining:A(n,W)}}function dt(t){let e=t.payload;if(!e||typeof e!="object")return"";let n=e.voucher;if(!n||typeof n!="object")return"";let a=n.channelId;return typeof a=="string"?a:""}function ht(t){let e=t.payload;if(!e||typeof e!="object")return;let n=e.channelConfig;if(!(!n||typeof n!="object"))return n}function j(t){let{stack:e,store:n,network:a}=t,i="",r,s=t.depositedAtomic,l=0n;async function c(){if(!i)return;let o=await ot(n,i);o&&(o.chargedCumulativeAmount!==void 0&&(l=BigInt(o.chargedCumulativeAmount)),s===0n&&o.balance!==void 0&&(s=BigInt(o.balance)))}return{get channelId(){return i},get salt(){return t.salt},get network(){return a},get state(){return ct(s,l)},async fetch(o,p){let{httpClient:d}=e,m=await fetch(o,p);if(m.status!==402)return m;let v=d.getPaymentRequiredResponse(u=>m.headers.get(u),await m.clone().json().catch(()=>{})),h=2,w;for(let u=1;u<=h;u+=1){let f=await d.createPaymentPayload(v),I=dt(f);I&&(i=I);let T=ht(f);T&&(r=T);let H=d.encodePaymentSignatureHeader(f),g=await fetch(o,{...p,headers:{...p?.headers??{},...H}});w=g;let{recovered:L}=await d.processPaymentResult(f,M=>g.headers.get(M),g.status);if(await c(),!(g.status===402&&L&&u<h))return g}return w},async close(){return i&&await n.delete(i.toLowerCase()),{closed:!0}},async forceWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement forceWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!r)throw new Error("forceWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return U({config:r,network:a,client:e.withdrawClient,withdrawDelaySecs:r.withdrawDelay})},async finalizeWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement finalizeWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!r)throw new Error("finalizeWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return $({config:r,network:a,client:e.withdrawClient,withdrawDelaySecs:r.withdrawDelay})}}}async function ut(){let t=globalThis.crypto??(await import("crypto")).webcrypto,e=new Uint8Array(32);return t.getRandomValues(e),tt(e)}async function pt(t){let e=t.store??x(),n=t.salt??await ut(),a;try{a=Z(t.deposit,W)}catch{throw new Error(`deposit must be a valid USDC amount in decimal units (e.g. "0.30"), got "${t.deposit}"`)}if(a<=0n)throw new Error(`deposit must be a positive amount, got "${t.deposit}"`);let i=N({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:a.toString(),salt:n});return j({stack:i,store:e,network:t.network,depositedAtomic:a,salt:n})}async function mt(t){let e=t.store??x(),n=N({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:"0",salt:t.salt});return j({stack:n,store:e,network:t.network,depositedAtomic:0n,salt:t.salt})}export{k as InsufficientBalanceError,y as UnsupportedNetworkError,S as WithdrawNotReadyError,E as createFileChannelStore,P as createLocalStorageChannelStore,x as getDefaultChannelStore,pt as openBatchChannel,mt as resumeBatchChannel};
1
+ import{createWalletClient as Ct,http as yt,publicActions as xt,parseUnits as Et,formatUnits as q,toHex as St}from"viem";import{base as At,arbitrum as bt,polygon as Rt}from"viem/chains";import{toClientEvmSigner as Tt}from"@x402/evm";import{BatchSettlementEvmScheme as Dt,getChannel as Nt}from"@x402/evm/batch-settlement/client";import{x402Client as It,x402HTTPClient as Wt}from"@x402/core/client";var ot="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",st="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",ct="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var P="eip155:8453",v="eip155:84532",U="eip155:42161",F="eip155:137",M="eip155:10",L="eip155:43114",z="eip155:56",T="eip155:480",D="eip155:143",N="eip155:4663",I="eip155:1187947933",W="eip155:324705682",$="eip155:1";var lt="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",dt="0x55d398326f99059fF775485246999027B3197955",j="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",pt="0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",V={[z]:j,[P]:lt,[v]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[U]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[F]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[M]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[L]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[T]:"0x79A02482A880bCE3F13e09Da970dC34db4CD24d1",[D]:"0x754704Bc059F8C67012fEd69BC8A327a5aafb603",[N]:pt,[I]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[W]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[$]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},Ut={[dt]:{symbol:"USDT",decimals:18},[j]:{symbol:"USDC",decimals:18}};var Ft={[T]:{name:"USDC",version:"2"},[D]:{name:"USDC",version:"2"},[N]:{name:"Global Dollar",version:"1"},[I]:{name:"Bridged USDC (SKALE Bridge)",version:"2"},[W]:{name:"Bridged USDC (SKALE Bridge)",version:"2"}};var Mt={[z]:56,[P]:8453,[v]:84532,[U]:42161,[F]:137,[M]:10,[L]:43114,[T]:480,[D]:143,[N]:4663,[I]:1187947933,[W]:324705682,[$]:1},Lt={[ot]:"https://api.dexter.cash/api/solana/rpc",[st]:"https://api.devnet.solana.com",[ct]:"https://api.testnet.solana.com"},zt={[z]:"https://api.dexter.cash/api/evm/bsc/rpc",[P]:"https://api.dexter.cash/api/base/rpc",[v]:"https://sepolia.base.org",[U]:"https://api.dexter.cash/api/evm/arbitrum/rpc",[F]:"https://api.dexter.cash/api/evm/polygon/rpc",[M]:"https://api.dexter.cash/api/evm/optimism/rpc",[L]:"https://api.dexter.cash/api/evm/avalanche/rpc",[T]:"https://worldchain-mainnet.g.alchemy.com/public",[D]:"https://rpc.monad.xyz",[N]:"https://rpc.mainnet.chain.robinhood.com",[I]:"https://skale-base.skalenodes.com/v1/base",[W]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[$]:"https://eth.llamarpc.com"};import{homedir as ht}from"os";import{join as mt}from"path";import{FileClientChannelStorage as ut}from"@x402/evm/batch-settlement/client/file-storage";function G(t){return new ut({directory:t})}var K="dexter-x402-channel:";function J(t){return{async get(e){let n=t.getItem(K+e);return n?JSON.parse(n):void 0},async set(e,n){t.setItem(K+e,JSON.stringify(n))},async delete(e){t.removeItem(K+e)}}}function _(){let t=globalThis.localStorage;return t?J(t):G(mt(ht(),".dexter-x402","channels"))}var H=class extends Error{constructor(e){super(e),this.name="InsufficientBalanceError"}},E=class extends Error{constructor(e){super(e),this.name="UnsupportedNetworkError"}};import{formatUnits as wt}from"viem";import{computeChannelId as Y}from"@x402/evm/batch-settlement/client";import{BATCH_SETTLEMENT_ADDRESS as S}from"@x402/evm";var b=class extends Error{constructor(e){super(e),this.name="WithdrawNotReadyError"}};function Z(t,e){return t===0?0:t+e}var ft=6,X=[{name:"payer",type:"address"},{name:"payerAuthorizer",type:"address"},{name:"receiver",type:"address"},{name:"receiverAuthorizer",type:"address"},{name:"token",type:"address"},{name:"withdrawDelay",type:"uint40"},{name:"salt",type:"bytes32"}],A=[{type:"function",name:"initiateWithdraw",inputs:[{name:"config",type:"tuple",components:X},{name:"amount",type:"uint128"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"finalizeWithdraw",inputs:[{name:"config",type:"tuple",components:X}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"pendingWithdrawals",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"amount",type:"uint128"},{name:"initiatedAt",type:"uint40"}],stateMutability:"view"},{type:"function",name:"channels",inputs:[{name:"channelId",type:"bytes32"}],outputs:[{name:"balance",type:"uint128"},{name:"totalClaimed",type:"uint128"}],stateMutability:"view"}];function gt(t){if(Array.isArray(t))return{balance:BigInt(t[0]),totalClaimed:BigInt(t[1])};let e=t;return{balance:BigInt(e.balance),totalClaimed:BigInt(e.totalClaimed)}}function Q(t){if(Array.isArray(t))return{amount:BigInt(t[0]),initiatedAt:Number(t[1])};let e=t;return{amount:BigInt(e.amount),initiatedAt:Number(e.initiatedAt)}}async function tt(t){let{config:e,network:n,client:a,withdrawDelaySecs:o}=t,s=Y(e,n),l=t.amountAtomic;l===void 0&&(l=gt(await a.readContract({address:S,abi:A,functionName:"channels",args:[s]})).balance);let d=await a.writeContract({address:S,abi:A,functionName:"initiateWithdraw",args:[e,l]});await a.waitForTransactionReceipt({hash:d});let h=Q(await a.readContract({address:S,abi:A,functionName:"pendingWithdrawals",args:[s]}));return{initiateTx:d,finalizableAt:Z(h.initiatedAt,o)}}async function et(t){let{config:e,network:n,client:a,withdrawDelaySecs:o}=t,s=Y(e,n),l=Q(await a.readContract({address:S,abi:A,functionName:"pendingWithdrawals",args:[s]}));if(l.initiatedAt===0)throw new b(`no withdrawal is pending for channel ${s} \u2014 call forceWithdraw first`);let d=Z(l.initiatedAt,o),h=Math.floor(Date.now()/1e3);if(h<d)throw new b(`withdrawal for channel ${s} is not finalizable until ${d} (unix seconds) \u2014 ${d-h}s remaining`);let c=await a.writeContract({address:S,abi:A,functionName:"finalizeWithdraw",args:[e]});return await a.waitForTransactionReceipt({hash:c}),{finalizeTx:c,withdrawnAmount:wt(l.amount,ft)}}var nt={"eip155:8453":{chain:At,defaultRpc:"https://api.dexter.cash/api/evm/base/rpc"},"eip155:42161":{chain:bt,defaultRpc:"https://api.dexter.cash/api/evm/arbitrum/rpc"},"eip155:137":{chain:Rt,defaultRpc:"https://api.dexter.cash/api/evm/polygon/rpc"}};function at(t){let e=nt[t.network];if(!e)throw new E(`batch-settlement is not available on network "${t.network}" \u2014 supported: ${Object.keys(nt).join(", ")}`);let n=t.rpcUrl??e.defaultRpc,a=BigInt(t.depositAtomic),o=a===0n,s=o?t.maxPaymentAtomic??"1000000":t.depositAtomic,l=V[t.network],d=t.wallet.signTypedData;if(typeof d!="function")throw new Error("batch-settlement requires an EvmWallet that supports signTypedData (EIP-712)");let h=Ct({account:{address:t.wallet.address,type:"json-rpc"},chain:e.chain,transport:yt(n)}).extend(xt),c=t.wallet.sendTransaction,y=typeof c=="function",g=async r=>{let i=r.to??void 0;if(!i)throw new Error("batch-settlement escape hatch: transaction is missing a `to` address");let f=r.data??"0x";if(typeof c=="function")return await c.call(t.wallet,{to:i,data:f,value:r.value});throw new Error("batch-settlement: wallet has no sendTransaction")},w=Object.assign(h,{address:t.wallet.address,signTypedData:r=>{if(!o&&r.primaryType==="Voucher"&&BigInt(r.message.maxClaimableAmount)>a)throw new Error("batch-settlement voucher exceeds the authorized deposit budget");return d.call(t.wallet,r)},sendTransaction:g}),O=Tt(w),x=!1,C=new Dt(O,{storage:t.store,depositPolicy:{depositMultiplier:4},depositStrategy:r=>{if(o)throw new Error("batch-settlement resume requires funded escrow; resume never authorizes a deposit");if(BigInt(r.currentBalance)>0n||BigInt(r.clientContext.chargedCumulativeAmount??"0")>0n)throw new Error("batch-settlement escrow is exhausted; automatic top-ups are disabled");if(x)throw new Error("batch-settlement initial funding was already attempted; reconcile its outcome and resume the channel before spending again");let i=r.paymentRequirements.extra?.minDeposit;if(typeof i=="string"&&/^\d+$/.test(i)&&BigInt(i)>a)throw new Error("batch-settlement seller minimum deposit exceeds the authorized deposit budget");if(BigInt(r.minimumDepositAmount)>a||r.maxDeposit!==void 0&&BigInt(r.maxDeposit)<a)throw new Error("batch-settlement cannot fund the exact authorized deposit");return x=!0,t.depositAtomic},salt:t.salt}),p=new It;p.register(t.network,C),p.setSpendControls({allowedAssets:[{network:t.network,asset:l,maxAmountPerPayment:s}]}),p.registerPolicy((r,i)=>{let f=i.filter(u=>u.asset.toLowerCase()===l.toLowerCase());if(f.length===0)throw new Error("batch-settlement channels support only USDC on the selected network");return f});let m;p.onBeforePaymentCreation(async({selectedRequirements:r})=>{let i=JSON.stringify(C.buildChannelConfig(r),(f,u)=>typeof u=="string"?u.toLowerCase():u);if(m!==void 0&&i!==m)throw new Error("batch-settlement handle is already bound to a different channel configuration");m=i});let R=new Wt(p);return{scheme:C,x402Cli:p,httpClient:R,rpcUrl:n,withdrawClient:w,canSubmitTransactions:y}}var B=6;function rt(t,e){let n;try{if(!/^(?:\d+(?:\.\d{0,6})?|\.\d{1,6})$/.test(t))throw new Error("invalid decimal");n=Et(t,B)}catch{throw new Error(`${e} must be a valid USDC amount with at most six decimal places (e.g. "0.30"), got "${t}"`)}if(n<=0n)throw new Error(`${e} must be a positive amount, got "${t}"`);return n}function _t(t,e){let n=e>t?0n:t-e;return{deposited:q(t,B),spent:q(e,B),remaining:q(n,B)}}function Bt(t){let e=t.payload;if(!e||typeof e!="object")return"";let n=e.voucher;if(!n||typeof n!="object")return"";let a=n.channelId;return typeof a=="string"?a:""}function Ot(t){let e=t.payload;if(!e||typeof e!="object")return;let n=e.channelConfig;if(!(!n||typeof n!="object"))return n}function it(t){let{stack:e,store:n,network:a}=t,o="",s,l=t.depositedAtomic,d=0n;async function h(){if(!o)return;let c=await Nt(n,o);c&&(c.chargedCumulativeAmount!==void 0&&(d=BigInt(c.chargedCumulativeAmount)),l===0n&&c.balance!==void 0&&(l=BigInt(c.balance)))}return{get channelId(){return o},get salt(){return t.salt},get network(){return a},get state(){return _t(l,d)},async fetch(c,y){let{httpClient:g}=e,w=await fetch(c,y);if(w.status!==402)return w;let O=g.getPaymentRequiredResponse(p=>w.headers.get(p),await w.clone().json().catch(()=>{})),x=2,C;for(let p=1;p<=x;p+=1){let m=await g.createPaymentPayload(O),R=Bt(m);R&&(o=R);let k=Ot(m);k&&(s=k);let r=g.encodePaymentSignatureHeader(m),i=await fetch(c,{...y,headers:{...y?.headers??{},...r}});C=i;let{recovered:f}=await g.processPaymentResult(m,u=>i.headers.get(u),i.status);if(await h(),!(i.status===402&&f&&p<x))return i}return C},async close(){return o&&await n.delete(o.toLowerCase()),{closed:!0}},async forceWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement forceWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!s)throw new Error("forceWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return tt({config:s,network:a,client:e.withdrawClient,withdrawDelaySecs:s.withdrawDelay})},async finalizeWithdraw(){if(!e.canSubmitTransactions)throw new Error("batch-settlement finalizeWithdraw requires a wallet with a sendTransaction method (the withdrawal escape hatch submits an on-chain transaction and the buyer pays gas; a signature-only wallet cannot use it).");if(!s)throw new Error("finalizeWithdraw is unavailable until the channel has resolved on-chain \u2014 make at least one fetch() against the channel first");return et({config:s,network:a,client:e.withdrawClient,withdrawDelaySecs:s.withdrawDelay})}}}async function kt(){let t=globalThis.crypto??(await import("crypto")).webcrypto,e=new Uint8Array(32);return t.getRandomValues(e),St(e)}async function Pt(t){let e=t.store??_(),n=t.salt??await kt(),a=rt(t.deposit,"deposit"),o=at({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:a.toString(),salt:n});return it({stack:o,store:e,network:t.network,depositedAtomic:a,salt:n})}async function vt(t){let e=t.store??_(),n=rt(t.maxAmountPerPayment??"1","maxAmountPerPayment"),a=at({wallet:t.wallet,network:t.network,rpcUrl:t.rpcUrl,store:e,depositAtomic:"0",maxPaymentAtomic:n.toString(),salt:t.salt});return it({stack:a,store:e,network:t.network,depositedAtomic:0n,salt:t.salt})}export{H as InsufficientBalanceError,E as UnsupportedNetworkError,b as WithdrawNotReadyError,G as createFileChannelStore,J as createLocalStorageChannelStore,_ as getDefaultChannelStore,Pt as openBatchChannel,vt as resumeBatchChannel};
@@ -1 +1 @@
1
- "use strict";var R=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var D=(e,r)=>{for(var s in r)R(e,s,{get:r[s],enumerable:!0})},z=(e,r,s,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of O(r))!_.call(e,n)&&n!==s&&R(e,n,{get:()=>r[n],enumerable:!(o=N(r,n))||o.enumerable});return e};var Q=e=>z(R({},"__esModule",{value:!0}),e);var W={};D(W,{createBatchSettlementSeller:()=>E});module.exports=Q(W);var B=require("os"),U=require("path"),$=require("@x402/evm/batch-settlement/server");var C=require("@x402/core/server"),x=require("@x402/core/http"),A=require("@x402/evm/batch-settlement/server");function b(e){let r=e.verbose?console.log.bind(console,"[batch-settlement:seller]"):()=>{},s=new C.HTTPFacilitatorClient({url:e.facilitatorUrl}),o=new A.BatchSettlementEvmScheme(e.payTo,{storage:e.channelStore}),n=new C.x402ResourceServer(s).register(e.network,o),l=new x.x402HTTPResourceServer(n,{[e.route]:{accepts:{scheme:"batch-settlement",payTo:e.payTo,price:e.price,network:e.network},description:"batch-settlement protected route",mimeType:"application/json"}}),i=null;function u(){if(i)return i;let t=l.initialize();return t.catch(a=>{i===t&&(i=null),e.verbose?r("resource server initialize() failed:",a):console.error("[batch-settlement:seller] resource server initialize() failed:",a)}),i=t,t}let h=u();function d(t,a){if(t.headersSent)return;for(let[g,v]of Object.entries(a.headers))t.setHeader(g,v);t.status(a.status);let{body:m}=a;m==null?t.end():typeof m=="string"?t.send(m):t.json(m)}return{scheme:o,facilitator:s,handler:async(t,a,m)=>{try{await u();let g=t.get("host")??"",v=`${t.baseUrl??""}${t.path}`||"/",M={getHeader:y=>t.headers[y.toLowerCase()],getMethod:()=>t.method,getPath:()=>v,getUrl:()=>`${t.protocol}://${g}${t.originalUrl}`,getAcceptHeader:()=>t.headers.accept??"",getUserAgent:()=>t.headers["user-agent"]??"",getBody:()=>t.body??{},getQueryParams:()=>t.query,getQueryParam:y=>{let f=t.query[y];if(typeof f=="string"||Array.isArray(f))return f}},F=t.headers["payment-signature"]??t.headers["x-payment"],w={adapter:M,path:v,method:t.method,paymentHeader:F},p=await l.processHTTPRequest(w);if(r("processHTTPRequest ->",p.type),p.type==="no-payment-required"){m();return}if(p.type==="payment-error"){d(a,p.response);return}let j={request:w,responseBody:Buffer.alloc(0)},S=await l.processSettlement(p.paymentPayload,p.paymentRequirements,p.declaredExtensions,j);if(r("processSettlement ->",S.success?"success":`failure:${S.errorReason}`),!S.success){d(a,S.response);return}for(let[y,f]of Object.entries(S.headers))a.headersSent||a.setHeader(y,f);m()}catch(g){r("handler error:",g),a.headersSent||a.status(500).json({error:"Payment processing error"})}},ready:h}}var P=require("viem"),k=6;async function T(e){let{manager:r,store:s,channelId:o}=e,n=await s.get(o),l=BigInt(n?.chargedCumulativeAmount??"0"),i=BigInt(n?.balance??"0"),u=i>l?i-l:0n,{claims:h,settle:d}=await r.claimAndSettle(),c=await r.refund([o]),t=c.find(a=>a.channel===o)??c[0];return{claimTx:h[0]?.transaction??"",settleTx:d?.transaction??"",refundTx:t?.transaction??"",settledAmount:(0,P.formatUnits)(l,k),refundedAmount:(0,P.formatUnits)(u,k)}}async function I(e){let r=await e.store.list(),s=[];for(let o of r)try{let n=await T({manager:e.manager,store:e.store,channelId:o.channelId});s.push({channelId:o.channelId,...n})}catch(n){s.push({channelId:o.channelId,error:n instanceof Error?n.message:String(n)})}return s}function L(e){let r=!1,s=async()=>{try{await e.claimAndSettle()}catch(n){e.onError?.(n)}},o=setInterval(()=>{r||s()},e.claimIntervalMs);return typeof o.unref=="function"&&o.unref(),{async stop(){r||(r=!0,clearInterval(o),await s())}}}var q="https://x402.dexter.cash",G="GET /",H=new Set(["eip155:8453","eip155:42161","eip155:137"]);function K(e){return e===!1?null:e===void 0||e===!0?3e5:(e.claimIntervalSecs??300)*1e3}function E(e){if(!H.has(e.network))throw new Error(`batch-settlement is not supported on network "${e.network}" \u2014 supported: ${[...H].join(", ")}`);let r=e.facilitatorUrl??q,s=e.channelStore??new $.FileChannelStorage({directory:(0,U.join)((0,B.homedir)(),".dexter-x402","seller-channels")}),o=b({payTo:e.payTo,network:e.network,price:e.price,route:e.route??G,facilitatorUrl:r,channelStore:s,verbose:e.verbose}),n=o.scheme.createChannelManager(o.facilitator,e.network),l=async()=>{await n.claimAndSettle()},i=K(e.autoSettle),u=null;i!==null&&(u=L({claimAndSettle:l,claimIntervalMs:i,onError:t=>console.error("[batch-settlement:seller] auto-loop claim pass failed",t)}));let h=s,d=(t,a,m)=>{o.handler(t,a,m)},c=d;return c.middleware=()=>d,c.closeChannel=t=>T({manager:n,store:h,channelId:t}),c.closeAll=()=>I({manager:n,store:h}),c.stop=async()=>{u&&await u.stop()},c}0&&(module.exports={createBatchSettlementSeller});
1
+ "use strict";var R=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var D=(e,r)=>{for(var s in r)R(e,s,{get:r[s],enumerable:!0})},z=(e,r,s,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of O(r))!_.call(e,n)&&n!==s&&R(e,n,{get:()=>r[n],enumerable:!(o=N(r,n))||o.enumerable});return e};var Q=e=>z(R({},"__esModule",{value:!0}),e);var W={};D(W,{createBatchSettlementSeller:()=>E});module.exports=Q(W);var B=require("os"),U=require("path"),$=require("@x402/evm/batch-settlement/server/file-storage");var C=require("@x402/core/server"),w=require("@x402/core/http"),A=require("@x402/evm/batch-settlement/server");function b(e){let r=e.verbose?console.log.bind(console,"[batch-settlement:seller]"):()=>{},s=new C.HTTPFacilitatorClient({url:e.facilitatorUrl}),o=new A.BatchSettlementEvmScheme(e.payTo,{storage:e.channelStore}),n=new C.x402ResourceServer(s).register(e.network,o),l=new w.x402HTTPResourceServer(n,{[e.route]:{accepts:{scheme:"batch-settlement",payTo:e.payTo,price:e.price,network:e.network},description:"batch-settlement protected route",mimeType:"application/json"}}),i=null;function u(){if(i)return i;let t=l.initialize();return t.catch(a=>{i===t&&(i=null),e.verbose?r("resource server initialize() failed:",a):console.error("[batch-settlement:seller] resource server initialize() failed:",a)}),i=t,t}let h=u();function d(t,a){if(t.headersSent)return;for(let[g,v]of Object.entries(a.headers))t.setHeader(g,v);t.status(a.status);let{body:m}=a;m==null?t.end():typeof m=="string"?t.send(m):t.json(m)}return{scheme:o,facilitator:s,handler:async(t,a,m)=>{try{await u();let g=t.get("host")??"",v=`${t.baseUrl??""}${t.path}`||"/",M={getHeader:y=>t.headers[y.toLowerCase()],getMethod:()=>t.method,getPath:()=>v,getUrl:()=>`${t.protocol}://${g}${t.originalUrl}`,getAcceptHeader:()=>t.headers.accept??"",getUserAgent:()=>t.headers["user-agent"]??"",getBody:()=>t.body??{},getQueryParams:()=>t.query,getQueryParam:y=>{let f=t.query[y];if(typeof f=="string"||Array.isArray(f))return f}},F=t.headers["payment-signature"]??t.headers["x-payment"],x={adapter:M,path:v,method:t.method,paymentHeader:F},p=await l.processHTTPRequest(x);if(r("processHTTPRequest ->",p.type),p.type==="no-payment-required"){m();return}if(p.type==="payment-error"){d(a,p.response);return}let j={request:x,responseBody:Buffer.alloc(0)},S=await l.processSettlement(p.paymentPayload,p.paymentRequirements,p.declaredExtensions,j);if(r("processSettlement ->",S.success?"success":`failure:${S.errorReason}`),!S.success){d(a,S.response);return}for(let[y,f]of Object.entries(S.headers))a.headersSent||a.setHeader(y,f);m()}catch(g){r("handler error:",g),a.headersSent||a.status(500).json({error:"Payment processing error"})}},ready:h}}var P=require("viem"),k=6;async function T(e){let{manager:r,store:s,channelId:o}=e,n=await s.get(o),l=BigInt(n?.chargedCumulativeAmount??"0"),i=BigInt(n?.balance??"0"),u=i>l?i-l:0n,{claims:h,settle:d}=await r.claimAndSettle(),c=await r.refund([o]),t=c.find(a=>a.channel===o)??c[0];return{claimTx:h[0]?.transaction??"",settleTx:d?.transaction??"",refundTx:t?.transaction??"",settledAmount:(0,P.formatUnits)(l,k),refundedAmount:(0,P.formatUnits)(u,k)}}async function I(e){let r=await e.store.list(),s=[];for(let o of r)try{let n=await T({manager:e.manager,store:e.store,channelId:o.channelId});s.push({channelId:o.channelId,...n})}catch(n){s.push({channelId:o.channelId,error:n instanceof Error?n.message:String(n)})}return s}function L(e){let r=!1,s=async()=>{try{await e.claimAndSettle()}catch(n){e.onError?.(n)}},o=setInterval(()=>{r||s()},e.claimIntervalMs);return typeof o.unref=="function"&&o.unref(),{async stop(){r||(r=!0,clearInterval(o),await s())}}}var q="https://x402.dexter.cash",G="GET /",H=new Set(["eip155:8453","eip155:42161","eip155:137"]);function K(e){return e===!1?null:e===void 0||e===!0?3e5:(e.claimIntervalSecs??300)*1e3}function E(e){if(!H.has(e.network))throw new Error(`batch-settlement is not supported on network "${e.network}" \u2014 supported: ${[...H].join(", ")}`);let r=e.facilitatorUrl??q,s=e.channelStore??new $.FileChannelStorage({directory:(0,U.join)((0,B.homedir)(),".dexter-x402","seller-channels")}),o=b({payTo:e.payTo,network:e.network,price:e.price,route:e.route??G,facilitatorUrl:r,channelStore:s,verbose:e.verbose}),n=o.scheme.createChannelManager(o.facilitator,e.network),l=async()=>{await n.claimAndSettle()},i=K(e.autoSettle),u=null;i!==null&&(u=L({claimAndSettle:l,claimIntervalMs:i,onError:t=>console.error("[batch-settlement:seller] auto-loop claim pass failed",t)}));let h=s,d=(t,a,m)=>{o.handler(t,a,m)},c=d;return c.middleware=()=>d,c.closeChannel=t=>T({manager:n,store:h,channelId:t}),c.closeAll=()=>I({manager:n,store:h}),c.stop=async()=>{u&&await u.stop()},c}0&&(module.exports={createBatchSettlementSeller});
@@ -1,10 +1,11 @@
1
- import { B as BatchSettlementSellerConfig, a as BatchSettlementSeller } from '../../types-JpkrtFbZ.cjs';
2
- export { S as SellerCloseResult } from '../../types-JpkrtFbZ.cjs';
1
+ import { B as BatchSettlementSellerConfig, a as BatchSettlementSeller } from '../../types-RauRuMb7.cjs';
2
+ export { S as SellerCloseResult } from '../../types-RauRuMb7.cjs';
3
3
  import 'express';
4
4
  import '@x402/evm/batch-settlement/server';
5
- import '../../types-BbvuPNXl.cjs';
5
+ import '../../types-DGVtb7cl.cjs';
6
6
  import '@x402/evm/batch-settlement/client';
7
- import '../../types-BvQpNtFw.cjs';
7
+ import '../../types-CRs5sEcb.cjs';
8
+ import '../../types-DolSK-3d.cjs';
8
9
 
9
10
  /**
10
11
  * Creates a batch-settlement seller runtime. The returned object is callable
@@ -1,10 +1,11 @@
1
- import { B as BatchSettlementSellerConfig, a as BatchSettlementSeller } from '../../types-CkcNYx1Q.js';
2
- export { S as SellerCloseResult } from '../../types-CkcNYx1Q.js';
1
+ import { B as BatchSettlementSellerConfig, a as BatchSettlementSeller } from '../../types-C6IbRTpi.js';
2
+ export { S as SellerCloseResult } from '../../types-C6IbRTpi.js';
3
3
  import 'express';
4
4
  import '@x402/evm/batch-settlement/server';
5
- import '../../types-DwVhPqOZ.js';
5
+ import '../../types-DjDjuUc6.js';
6
6
  import '@x402/evm/batch-settlement/client';
7
- import '../../types-BvQpNtFw.js';
7
+ import '../../types-C08JT9MG.js';
8
+ import '../../types-DolSK-3d.js';
8
9
 
9
10
  /**
10
11
  * Creates a batch-settlement seller runtime. The returned object is callable
@@ -1 +1 @@
1
- import{homedir as E}from"os";import{join as M}from"path";import{FileChannelStorage as F}from"@x402/evm/batch-settlement/server";import{HTTPFacilitatorClient as H,x402ResourceServer as B}from"@x402/core/server";import{x402HTTPResourceServer as U}from"@x402/core/http";import{BatchSettlementEvmScheme as $}from"@x402/evm/batch-settlement/server";function P(e){let s=e.verbose?console.log.bind(console,"[batch-settlement:seller]"):()=>{},a=new H({url:e.facilitatorUrl}),r=new $(e.payTo,{storage:e.channelStore}),o=new B(a).register(e.network,r),l=new U(o,{[e.route]:{accepts:{scheme:"batch-settlement",payTo:e.payTo,price:e.price,network:e.network},description:"batch-settlement protected route",mimeType:"application/json"}}),i=null;function u(){if(i)return i;let t=l.initialize();return t.catch(n=>{i===t&&(i=null),e.verbose?s("resource server initialize() failed:",n):console.error("[batch-settlement:seller] resource server initialize() failed:",n)}),i=t,t}let h=u();function d(t,n){if(t.headersSent)return;for(let[g,v]of Object.entries(n.headers))t.setHeader(g,v);t.status(n.status);let{body:m}=n;m==null?t.end():typeof m=="string"?t.send(m):t.json(m)}return{scheme:r,facilitator:a,handler:async(t,n,m)=>{try{await u();let g=t.get("host")??"",v=`${t.baseUrl??""}${t.path}`||"/",k={getHeader:y=>t.headers[y.toLowerCase()],getMethod:()=>t.method,getPath:()=>v,getUrl:()=>`${t.protocol}://${g}${t.originalUrl}`,getAcceptHeader:()=>t.headers.accept??"",getUserAgent:()=>t.headers["user-agent"]??"",getBody:()=>t.body??{},getQueryParams:()=>t.query,getQueryParam:y=>{let f=t.query[y];if(typeof f=="string"||Array.isArray(f))return f}},I=t.headers["payment-signature"]??t.headers["x-payment"],R={adapter:k,path:v,method:t.method,paymentHeader:I},p=await l.processHTTPRequest(R);if(s("processHTTPRequest ->",p.type),p.type==="no-payment-required"){m();return}if(p.type==="payment-error"){d(n,p.response);return}let L={request:R,responseBody:Buffer.alloc(0)},S=await l.processSettlement(p.paymentPayload,p.paymentRequirements,p.declaredExtensions,L);if(s("processSettlement ->",S.success?"success":`failure:${S.errorReason}`),!S.success){d(n,S.response);return}for(let[y,f]of Object.entries(S.headers))n.headersSent||n.setHeader(y,f);m()}catch(g){s("handler error:",g),n.headersSent||n.status(500).json({error:"Payment processing error"})}},ready:h}}import{formatUnits as T}from"viem";var w=6;async function C(e){let{manager:s,store:a,channelId:r}=e,o=await a.get(r),l=BigInt(o?.chargedCumulativeAmount??"0"),i=BigInt(o?.balance??"0"),u=i>l?i-l:0n,{claims:h,settle:d}=await s.claimAndSettle(),c=await s.refund([r]),t=c.find(n=>n.channel===r)??c[0];return{claimTx:h[0]?.transaction??"",settleTx:d?.transaction??"",refundTx:t?.transaction??"",settledAmount:T(l,w),refundedAmount:T(u,w)}}async function x(e){let s=await e.store.list(),a=[];for(let r of s)try{let o=await C({manager:e.manager,store:e.store,channelId:r.channelId});a.push({channelId:r.channelId,...o})}catch(o){a.push({channelId:r.channelId,error:o instanceof Error?o.message:String(o)})}return a}function A(e){let s=!1,a=async()=>{try{await e.claimAndSettle()}catch(o){e.onError?.(o)}},r=setInterval(()=>{s||a()},e.claimIntervalMs);return typeof r.unref=="function"&&r.unref(),{async stop(){s||(s=!0,clearInterval(r),await a())}}}var j="https://x402.dexter.cash",N="GET /",b=new Set(["eip155:8453","eip155:42161","eip155:137"]);function O(e){return e===!1?null:e===void 0||e===!0?3e5:(e.claimIntervalSecs??300)*1e3}function _(e){if(!b.has(e.network))throw new Error(`batch-settlement is not supported on network "${e.network}" \u2014 supported: ${[...b].join(", ")}`);let s=e.facilitatorUrl??j,a=e.channelStore??new F({directory:M(E(),".dexter-x402","seller-channels")}),r=P({payTo:e.payTo,network:e.network,price:e.price,route:e.route??N,facilitatorUrl:s,channelStore:a,verbose:e.verbose}),o=r.scheme.createChannelManager(r.facilitator,e.network),l=async()=>{await o.claimAndSettle()},i=O(e.autoSettle),u=null;i!==null&&(u=A({claimAndSettle:l,claimIntervalMs:i,onError:t=>console.error("[batch-settlement:seller] auto-loop claim pass failed",t)}));let h=a,d=(t,n,m)=>{r.handler(t,n,m)},c=d;return c.middleware=()=>d,c.closeChannel=t=>C({manager:o,store:h,channelId:t}),c.closeAll=()=>x({manager:o,store:h}),c.stop=async()=>{u&&await u.stop()},c}export{_ as createBatchSettlementSeller};
1
+ import{homedir as E}from"os";import{join as M}from"path";import{FileChannelStorage as F}from"@x402/evm/batch-settlement/server/file-storage";import{HTTPFacilitatorClient as H,x402ResourceServer as B}from"@x402/core/server";import{x402HTTPResourceServer as U}from"@x402/core/http";import{BatchSettlementEvmScheme as $}from"@x402/evm/batch-settlement/server";function P(e){let s=e.verbose?console.log.bind(console,"[batch-settlement:seller]"):()=>{},a=new H({url:e.facilitatorUrl}),r=new $(e.payTo,{storage:e.channelStore}),o=new B(a).register(e.network,r),l=new U(o,{[e.route]:{accepts:{scheme:"batch-settlement",payTo:e.payTo,price:e.price,network:e.network},description:"batch-settlement protected route",mimeType:"application/json"}}),i=null;function u(){if(i)return i;let t=l.initialize();return t.catch(n=>{i===t&&(i=null),e.verbose?s("resource server initialize() failed:",n):console.error("[batch-settlement:seller] resource server initialize() failed:",n)}),i=t,t}let h=u();function d(t,n){if(t.headersSent)return;for(let[g,v]of Object.entries(n.headers))t.setHeader(g,v);t.status(n.status);let{body:m}=n;m==null?t.end():typeof m=="string"?t.send(m):t.json(m)}return{scheme:r,facilitator:a,handler:async(t,n,m)=>{try{await u();let g=t.get("host")??"",v=`${t.baseUrl??""}${t.path}`||"/",k={getHeader:y=>t.headers[y.toLowerCase()],getMethod:()=>t.method,getPath:()=>v,getUrl:()=>`${t.protocol}://${g}${t.originalUrl}`,getAcceptHeader:()=>t.headers.accept??"",getUserAgent:()=>t.headers["user-agent"]??"",getBody:()=>t.body??{},getQueryParams:()=>t.query,getQueryParam:y=>{let f=t.query[y];if(typeof f=="string"||Array.isArray(f))return f}},I=t.headers["payment-signature"]??t.headers["x-payment"],R={adapter:k,path:v,method:t.method,paymentHeader:I},p=await l.processHTTPRequest(R);if(s("processHTTPRequest ->",p.type),p.type==="no-payment-required"){m();return}if(p.type==="payment-error"){d(n,p.response);return}let L={request:R,responseBody:Buffer.alloc(0)},S=await l.processSettlement(p.paymentPayload,p.paymentRequirements,p.declaredExtensions,L);if(s("processSettlement ->",S.success?"success":`failure:${S.errorReason}`),!S.success){d(n,S.response);return}for(let[y,f]of Object.entries(S.headers))n.headersSent||n.setHeader(y,f);m()}catch(g){s("handler error:",g),n.headersSent||n.status(500).json({error:"Payment processing error"})}},ready:h}}import{formatUnits as T}from"viem";var x=6;async function C(e){let{manager:s,store:a,channelId:r}=e,o=await a.get(r),l=BigInt(o?.chargedCumulativeAmount??"0"),i=BigInt(o?.balance??"0"),u=i>l?i-l:0n,{claims:h,settle:d}=await s.claimAndSettle(),c=await s.refund([r]),t=c.find(n=>n.channel===r)??c[0];return{claimTx:h[0]?.transaction??"",settleTx:d?.transaction??"",refundTx:t?.transaction??"",settledAmount:T(l,x),refundedAmount:T(u,x)}}async function w(e){let s=await e.store.list(),a=[];for(let r of s)try{let o=await C({manager:e.manager,store:e.store,channelId:r.channelId});a.push({channelId:r.channelId,...o})}catch(o){a.push({channelId:r.channelId,error:o instanceof Error?o.message:String(o)})}return a}function A(e){let s=!1,a=async()=>{try{await e.claimAndSettle()}catch(o){e.onError?.(o)}},r=setInterval(()=>{s||a()},e.claimIntervalMs);return typeof r.unref=="function"&&r.unref(),{async stop(){s||(s=!0,clearInterval(r),await a())}}}var j="https://x402.dexter.cash",N="GET /",b=new Set(["eip155:8453","eip155:42161","eip155:137"]);function O(e){return e===!1?null:e===void 0||e===!0?3e5:(e.claimIntervalSecs??300)*1e3}function _(e){if(!b.has(e.network))throw new Error(`batch-settlement is not supported on network "${e.network}" \u2014 supported: ${[...b].join(", ")}`);let s=e.facilitatorUrl??j,a=e.channelStore??new F({directory:M(E(),".dexter-x402","seller-channels")}),r=P({payTo:e.payTo,network:e.network,price:e.price,route:e.route??N,facilitatorUrl:s,channelStore:a,verbose:e.verbose}),o=r.scheme.createChannelManager(r.facilitator,e.network),l=async()=>{await o.claimAndSettle()},i=O(e.autoSettle),u=null;i!==null&&(u=A({claimAndSettle:l,claimIntervalMs:i,onError:t=>console.error("[batch-settlement:seller] auto-loop claim pass failed",t)}));let h=a,d=(t,n,m)=>{r.handler(t,n,m)},c=d;return c.middleware=()=>d,c.closeChannel=t=>C({manager:o,store:h,channelId:t}),c.closeAll=()=>w({manager:o,store:h}),c.stop=async()=>{u&&await u.stop()},c}export{_ as createBatchSettlementSeller};
@@ -1,9 +1,11 @@
1
- import { P as PaymentStrategy, a as PayAndFetchOptions, b as PayResult, N as NetworkRef, C as ChallengeOption, c as PaymentChallenge } from '../types-CBQKKFxJ.cjs';
2
- import { W as WalletSet, g as SettlementProbe, c as SolanaWallet, a as EvmWallet, h as AccessPassClientConfig, P as PaymentAccept } from '../types-BvQpNtFw.cjs';
3
- export { j as AccessPassInfo, k as AccessPassTier, C as ChainAdapter, X as X402Error, d as createEvmAdapter, e as createSolanaAdapter } from '../types-BvQpNtFw.cjs';
1
+ import { P as PaymentStrategy, a as PayAndFetchOptions, b as PayResult, N as NetworkRef, C as ChallengeOption, c as PaymentChallenge } from '../types-Cyyl3Cw_.cjs';
2
+ import { W as WalletSet, g as SettlementProbe, c as SolanaWallet, a as EvmWallet } from '../types-CRs5sEcb.cjs';
3
+ export { C as ChainAdapter, d as createEvmAdapter, e as createSolanaAdapter } from '../types-CRs5sEcb.cjs';
4
4
  import { SIWxSigner } from '@x402/extensions/sign-in-with-x';
5
5
  import { Keypair } from '@solana/web3.js';
6
6
  export { P as PaymentReceipt, f as fireImpressionBeacon, g as getPaymentReceipt, a as getSponsoredAccessInfo, b as getSponsoredRecommendations } from '../x402-client-B8zdDeat.cjs';
7
+ import { A as AccessPassClientConfig, P as PaymentAccept } from '../types-DolSK-3d.cjs';
8
+ export { a as AccessPassInfo, b as AccessPassTier, X as X402Error } from '../types-DolSK-3d.cjs';
7
9
  export { FormattedResource as CapabilityAPI, CapabilitySearchOptions, CapabilitySearchResult, NoMatchReason, capabilitySearch } from '@dexterai/x402-core';
8
10
  export { B as BASE_MAINNET, D as DEXTER_FACILITATOR_URL, l as SOLANA_MAINNET, n as USDC_MINT } from '../constants-BLvApMMl.cjs';
9
11
  export { SponsoredAccessSettlementInfo, SponsoredRecommendation } from '@dexterai/x402-ads-types';
@@ -1,9 +1,11 @@
1
- import { P as PaymentStrategy, a as PayAndFetchOptions, b as PayResult, N as NetworkRef, C as ChallengeOption, c as PaymentChallenge } from '../types-CHQzNDR6.js';
2
- import { W as WalletSet, g as SettlementProbe, c as SolanaWallet, a as EvmWallet, h as AccessPassClientConfig, P as PaymentAccept } from '../types-BvQpNtFw.js';
3
- export { j as AccessPassInfo, k as AccessPassTier, C as ChainAdapter, X as X402Error, d as createEvmAdapter, e as createSolanaAdapter } from '../types-BvQpNtFw.js';
1
+ import { P as PaymentStrategy, a as PayAndFetchOptions, b as PayResult, N as NetworkRef, C as ChallengeOption, c as PaymentChallenge } from '../types-BvK5UjA9.js';
2
+ import { W as WalletSet, g as SettlementProbe, c as SolanaWallet, a as EvmWallet } from '../types-C08JT9MG.js';
3
+ export { C as ChainAdapter, d as createEvmAdapter, e as createSolanaAdapter } from '../types-C08JT9MG.js';
4
4
  import { SIWxSigner } from '@x402/extensions/sign-in-with-x';
5
5
  import { Keypair } from '@solana/web3.js';
6
6
  export { P as PaymentReceipt, f as fireImpressionBeacon, g as getPaymentReceipt, a as getSponsoredAccessInfo, b as getSponsoredRecommendations } from '../x402-client-B8zdDeat.js';
7
+ import { A as AccessPassClientConfig, P as PaymentAccept } from '../types-DolSK-3d.js';
8
+ export { a as AccessPassInfo, b as AccessPassTier, X as X402Error } from '../types-DolSK-3d.js';
7
9
  export { FormattedResource as CapabilityAPI, CapabilitySearchOptions, CapabilitySearchResult, NoMatchReason, capabilitySearch } from '@dexterai/x402-core';
8
10
  export { B as BASE_MAINNET, D as DEXTER_FACILITATOR_URL, l as SOLANA_MAINNET, n as USDC_MINT } from '../constants-BLvApMMl.js';
9
11
  export { SponsoredAccessSettlementInfo, SponsoredRecommendation } from '@dexterai/x402-ads-types';
@@ -0,0 +1 @@
1
+ "use strict";var X=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var _e=Object.prototype.hasOwnProperty;var Pe=(e,t)=>{for(var n in t)X(e,n,{get:t[n],enumerable:!0})},Me=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of xe(t))!_e.call(e,s)&&s!==n&&X(e,s,{get:()=>t[s],enumerable:!(r=ge(t,s))||r.enumerable});return e};var Te=e=>Me(X({},"__esModule",{value:!0}),e);var Ce={};Pe(Ce,{MCP_PAYMENT_META:()=>x,MCP_PAYMENT_RESPONSE_META:()=>_,MCP_PAYMENT_STATE_META:()=>P,attachMcpPayment:()=>V,callMcpToolWithPayment:()=>Ee,createMcpFacilitatorProcessor:()=>fe,createMcpPaymentRequiredResult:()=>h,createPaidMcpTool:()=>ye,getMcpPaymentReceipt:()=>Y,getMcpPaymentRequired:()=>R,isMcpPaymentAccept:()=>J,isMcpPaymentPayload:()=>M,isMcpPaymentRequired:()=>y,probeMcpTool:()=>he});module.exports=Te(Ce);var le=require("crypto"),de=require("@solana/web3.js");var G="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",ie="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",ce="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var w="eip155:8453",B="eip155:84532",L="eip155:42161",W="eip155:137",U="eip155:10",q="eip155:43114",K="eip155:56",N="eip155:480",C="eip155:143",O="eip155:4663",v="eip155:1187947933",D="eip155:324705682",F="eip155:1";var pe="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",Ae="0x55d398326f99059fF775485246999027B3197955",ue="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",Re="0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",ve={[K]:ue,[w]:pe,[B]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[L]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[W]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[U]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[q]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[N]:"0x79A02482A880bCE3F13e09Da970dC34db4CD24d1",[C]:"0x754704Bc059F8C67012fEd69BC8A327a5aafb603",[O]:Re,[v]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[D]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[F]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},De={[Ae]:{symbol:"USDT",decimals:18},[ue]:{symbol:"USDC",decimals:18}};var Ie={[N]:{name:"USDC",version:"2"},[C]:{name:"USDC",version:"2"},[O]:{name:"Global Dollar",version:"1"},[v]:{name:"Bridged USDC (SKALE Bridge)",version:"2"},[D]:{name:"Bridged USDC (SKALE Bridge)",version:"2"}};var ke={[K]:56,[w]:8453,[B]:84532,[L]:42161,[W]:137,[U]:10,[q]:43114,[N]:480,[C]:143,[O]:4663,[v]:1187947933,[D]:324705682,[F]:1},Be={[G]:"https://api.dexter.cash/api/solana/rpc",[ie]:"https://api.devnet.solana.com",[ce]:"https://api.testnet.solana.com"},Se={[K]:"https://api.dexter.cash/api/evm/bsc/rpc",[w]:"https://api.dexter.cash/api/base/rpc",[B]:"https://sepolia.base.org",[L]:"https://api.dexter.cash/api/evm/arbitrum/rpc",[W]:"https://api.dexter.cash/api/evm/polygon/rpc",[U]:"https://api.dexter.cash/api/evm/optimism/rpc",[q]:"https://api.dexter.cash/api/evm/avalanche/rpc",[N]:"https://worldchain-mainnet.g.alchemy.com/public",[C]:"https://rpc.monad.xyz",[O]:"https://rpc.mainnet.chain.robinhood.com",[v]:"https://skale-base.skalenodes.com/v1/base",[D]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[F]:"https://eth.llamarpc.com"},Z="https://x402.dexter.cash";function be(e){if(typeof Buffer<"u")return Buffer.from(e,"utf-8").toString("base64");let t=new TextEncoder().encode(e),n="";for(let r=0;r<t.length;r++)n+=String.fromCharCode(t[r]);return btoa(n)}function we(e){if(typeof Buffer<"u")return Buffer.from(e,"base64").toString("utf-8");let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return new TextDecoder().decode(n)}function Q(e){return be(JSON.stringify(e))}function ee(e){return JSON.parse(we(e))}function Ne(e){if(e instanceof TypeError)return!0;if(e&&typeof e=="object"&&"status"in e){let t=e.status;return t>=500&&t<600}return!1}var I=class extends Error{status;body;constructor(t,n){super(`HTTP ${t}`),this.status=t,this.body=n}},$=class{facilitatorUrl;cachedSupported=null;cacheTime=0;CACHE_TTL_MS=6e4;timeoutMs;maxRetries;retryBaseMs;constructor(t=Z,n){this.facilitatorUrl=t.replace(/\/$/,""),this.timeoutMs=n?.timeoutMs??1e4,this.maxRetries=n?.maxRetries??3,this.retryBaseMs=n?.retryBaseMs??500}async fetchWithTimeout(t,n){let r=new AbortController,s=setTimeout(()=>r.abort(),this.timeoutMs);try{return await fetch(t,{...n,signal:r.signal})}finally{clearTimeout(s)}}async fetchWithRetry(t,n){let r;for(let s=0;s<this.maxRetries;s++)try{let o=await this.fetchWithTimeout(t,n);if(!o.ok&&o.status>=500)throw new I(o.status,await o.text());return o}catch(o){if(r=o,s<this.maxRetries-1&&Ne(o)){let a=this.retryBaseMs*Math.pow(2,s);await new Promise(c=>setTimeout(c,a));continue}throw o}throw r}async getSupported(){let t=Date.now();if(this.cachedSupported&&t-this.cacheTime<this.CACHE_TTL_MS)return this.cachedSupported;let n=await this.fetchWithTimeout(`${this.facilitatorUrl}/supported`);if(!n.ok)throw new Error(`Facilitator /supported returned ${n.status}`);return this.cachedSupported=await n.json(),this.cacheTime=t,this.cachedSupported}async getFeePayer(t){let r=(await this.getSupported()).kinds.find(s=>s.x402Version===2&&(s.scheme==="exact"||s.scheme==="exact-approval")&&s.network===t);if(!r)throw new Error(`Facilitator does not support network "${t}" with a recognized scheme`);return r.extra?.feePayer}async getNetworkExtra(t){return(await this.getSupported()).kinds.find(s=>s.x402Version===2&&(s.scheme==="exact"||s.scheme==="exact-approval"||s.scheme==="batch-settlement")&&s.network===t)?.extra}async verifyPayment(t,n){try{let r=ee(t),s=await this.fetchWithRetry(`${this.facilitatorUrl}/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({x402Version:2,paymentPayload:r,paymentRequirements:n})});return s.ok?await s.json():{isValid:!1,invalidReason:`facilitator_error_${s.status}`}}catch(r){return{isValid:!1,invalidReason:r instanceof I?`facilitator_error_${r.status}`:r instanceof Error&&r.name==="AbortError"?"facilitator_timeout":r instanceof Error?r.message:"unexpected_verify_error"}}}async settlePayment(t,n){try{let r=ee(t),s=await this.fetchWithRetry(`${this.facilitatorUrl}/settle`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({x402Version:2,paymentPayload:r,paymentRequirements:n})});return s.ok?{...await s.json(),network:n.network}:{success:!1,network:n.network,errorReason:`facilitator_error_${s.status}`}}catch(r){let s=r instanceof I?`facilitator_error_${r.status}`:r instanceof Error&&r.name==="AbortError"?"facilitator_timeout":r instanceof Error?r.message:"unexpected_settle_error";return{success:!1,network:n.network,errorReason:s}}}};var x="x402/payment",_="x402/payment-response",P="dexter/payment-state";function V(e,t){if(!M(t))throw new Error("Invalid x402 v2 MCP payment payload");if(e._meta?.[x]!==void 0)throw new Error("Request already contains payment");return p({...e,_meta:{...e._meta,[x]:t}})}function l(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function p(e){return JSON.parse(JSON.stringify(e))}function A(e){let t=p(e);function n(r){return Array.isArray(r)?r.map(n):l(r)?Object.fromEntries(Object.keys(r).sort().map(s=>[s,n(r[s])])):r}return JSON.stringify(n(t))}function J(e){return l(e)&&["scheme","network","asset","payTo"].every(t=>typeof e[t]=="string"&&e[t].length>0)&&typeof e.amount=="string"&&/^(0|[1-9][0-9]*)$/.test(e.amount)&&typeof e.maxTimeoutSeconds=="number"&&Number.isSafeInteger(e.maxTimeoutSeconds)&&e.maxTimeoutSeconds>0&&(e.extra===void 0||l(e.extra))}function y(e){return l(e)&&e.x402Version===2&&l(e.resource)&&typeof e.resource.url=="string"&&e.resource.url.length>0&&Array.isArray(e.accepts)&&e.accepts.length>0&&e.accepts.every(J)&&(e.extensions===void 0||l(e.extensions))}function M(e){return l(e)&&e.x402Version===2&&(e.resource===void 0||l(e.resource)&&typeof e.resource.url=="string")&&J(e.accepted)&&l(e.payload)&&(e.extensions===void 0||l(e.extensions))}function h(e,t){if(!y(e))throw new Error("Invalid x402 v2 MCP payment requirements");let n=p({...e,...t===void 0?{}:{error:t}});return{isError:!0,structuredContent:n,content:[{type:"text",text:JSON.stringify(n)}]}}function R(e){if(e.isError!==!0)return;if(y(e.structuredContent))return p(e.structuredContent);let t=e.content?.[0];if(!(t?.type!=="text"||typeof t.text!="string"))try{let n=JSON.parse(t.text);return y(n)?n:void 0}catch{return}}function Y(e){let t=e._meta?.[_];if(!(!l(t)||typeof t.success!="boolean"||typeof t.network!="string")&&!(t.success&&(typeof t.transaction!="string"||t.transaction.length===0)))return p(t)}function H(e,t){return(t.resource===void 0||t.resource.url===e.resource.url)&&e.accepts.some(n=>A(n)===A(t.accepted))}function S(e){return e.errorReason==="settlement_pending"||e.errorCode==="settlement_pending"}function b(e){return(0,le.createHash)("sha256").update(A(e)).digest("hex")}function me(e){let{network:t,scheme:n,asset:r}=e.accepted;if(n!=="exact")throw new Error("Default MCP processor supports exact payments");if(["transaction","authorization","permit2Authorization"].filter(o=>e.payload[o]!==void 0).length!==1)throw new Error("Payment must contain exactly one supported proof family");if(t.startsWith("solana:")&&typeof e.payload.transaction=="string"){let o=Buffer.from(e.payload.transaction,"base64"),a=de.VersionedTransaction.deserialize(o);return b({network:t,message:Buffer.from(a.message.serialize()).toString("base64")})}if(t.startsWith("eip155:")){let o=e.accepted.extra?.assetTransferMethod??"eip3009";if(o!=="eip3009"&&o!=="permit2")throw new Error("Unsupported asset transfer method");let a=e.payload.authorization;if(o==="eip3009"&&l(a)&&typeof a.from=="string"&&/^0x[0-9a-f]{40}$/i.test(a.from)&&typeof a.nonce=="string"&&/^0x[0-9a-f]{64}$/i.test(a.nonce))return b({network:t,kind:"eip3009",asset:r.toLowerCase(),from:a.from.toLowerCase(),nonce:a.nonce.toLowerCase()});let c=e.payload.permit2Authorization;if(o==="permit2"&&l(c)&&typeof c.from=="string"&&/^0x[0-9a-f]{40}$/i.test(c.from)&&typeof c.nonce=="string"&&/^[0-9]+$/.test(c.nonce))return b({network:t,kind:"permit2",from:c.from.toLowerCase(),nonce:BigInt(c.nonce).toString()})}throw new Error("Unsupported exact payment proof")}function fe(e){if(!e.networks.length)throw new Error("Configure at least one MCP payment network");let t=new Set(e.networks),n=new $(e.facilitatorUrl,{maxRetries:1,timeoutMs:e.timeoutMs}),r=o=>o.scheme==="exact"&&(o.extra?.paymentFlow===void 0||o.extra.paymentFlow==="authorization")&&t.has(o.network)&&(/^solana:/.test(o.network)&&(o.extra?.assetTransferMethod===void 0||o.extra.assetTransferMethod==="default")||/^eip155:/.test(o.network)&&["eip3009","permit2"].includes(String(o.extra?.assetTransferMethod??"eip3009")));function s(o,a){if(!r(a)||A(o.accepted)!==A(a))throw new Error("Unsupported or mismatched facilitator payment requirements");me(o)}return{supports:r,identify:me,async verify(o,a){try{s(o,a)}catch{return{isValid:!1,invalidReason:"unsupported_payment_proof"}}return n.verifyPayment(Q(o),a)},async settle(o,a){s(o,a);let c=await n.settlePayment(Q(o),a);return!S(c)&&c.success===!0&&typeof c.transaction=="string"&&c.transaction.length>0&&c.network===a.network?{status:"settled",receipt:{...c,success:!0}}:{status:"unknown",reason:c.errorReason??c.errorCode??"settlement_not_confirmed",receipt:c}}}}function T(e,t){return{isError:!0,content:[{type:"text",text:e}],...t?{_meta:{[P]:t}}:{}}}function j(e){let t=T("This payment already has an admitted operation. Retrieve or reconcile that operation before paying again.",{paymentId:e.paymentId,phase:e.phase,recoveryRequired:!0});return e.receipt&&(t._meta[_]=p(e.receipt)),t}function ye(e){if(!e.name||!e.serviceScope)throw new Error("Paid MCP tool requires name and serviceScope");return async(t,n)=>{let r=p(t);if(r.name!==e.name)return T("Unknown paid tool");let s;try{if(s=await e.authorize(p(r),n),!s)return T("Access denied")}catch{return T("Access denied")}let o=r._meta?.[x],a;async function c(){let i=typeof e.requirements=="function"?await e.requirements(p(r),n):e.requirements;if(!y(i))throw new Error("Invalid MCP payment requirements");let m=p(i);if(m.accepts.some(f=>!e.payments.supports(f)||f.extra?.paymentFlow!==void 0&&f.extra.paymentFlow!=="authorization"))throw new Error("MCP requirements advertise a payment scheme or network unsupported by this processor");return m}if(o===void 0)return h(await c());if(!M(o))return h(await c(),'Payment must be an x402 v2 object in params._meta["x402/payment"]');let u=p(o),E;try{E=e.payments.identify(u)}catch{return h(await c(),"Unsupported payment proof")}if(!E)throw new Error("Payment processor returned an empty payment ID");let te=b({serviceScope:e.serviceScope,name:r.name,arguments:r.arguments??{},accepted:u.accepted}),re=b(u),z=i=>i.accessScope!==s||i.serviceScope!==e.serviceScope||i.binding!==te||i.proofFingerprint!==re||u.resource!==void 0&&u.resource.url!==i.resource.url?T("Payment is already bound to another request or caller"):(i.phase==="complete"||i.phase==="execution_failed")&&i.result?i.phase==="execution_failed"&&R(i.result)?j(i):p(i.result):j(i),ne=await e.store.get(E);if(ne)return z(ne);if(a=await c(),!H(a,u)||!e.payments.supports(u.accepted))return h(a,"Payment terms do not match this tool");let k;try{k=await e.payments.verify(u,u.accepted)}catch{return h(a,"Payment verification unavailable")}if(k.isValid!==!0)return h(a,"Payment verification failed");let d={paymentId:E,revision:0,phase:"admitted",binding:te,proofFingerprint:re,accessScope:s,serviceScope:e.serviceScope,resource:a.resource,request:r,payment:u,payer:k.payer},se=await e.store.claim(p(d));if(!se.claimed)return z(se.record);async function g(i){let m=p({...d,...i,revision:d.revision+1});if(!await e.store.compareAndSwap(E,d.revision,m))throw new Error("MCP payment record changed concurrently");d=m}try{await g({phase:"executing"});let i;try{if(i=p(await e.execute(p(r),{application:n,paymentId:E,payer:k.payer,requirements:p(u.accepted)})),!Array.isArray(i.content)||i.resultType!==void 0&&i.resultType!=="complete"||i.task!==void 0)throw new Error("Paid MCP tool must return a completed tool result");i._meta&&(delete i._meta[_],delete i._meta[P])}catch{return await g({phase:"execution_unknown"}),j(d)}if(i.isError===!0)return await g({phase:"execution_failed",result:i}),z(d);await g({phase:"executed",result:i}),await g({phase:"settling"});let m;try{m=await e.payments.settle(u,u.accepted)}catch{m={status:"unknown",reason:"Settlement response unavailable"}}if(m.receipt&&S(m.receipt)&&(m={status:"unknown",reason:"settlement_pending",receipt:m.receipt}),m.status!=="settled"){await g({phase:m.status==="failed"?"settlement_failed":"settlement_unknown",...m.receipt?{receipt:m.receipt}:{}});let ae=T(m.status==="failed"?"Settlement failed; reconcile the admitted operation before paying again":"Settlement outcome unknown; reconcile the admitted operation before paying again");return ae._meta={[P]:{paymentId:E,phase:d.phase,recoveryRequired:!0},...m.receipt?{[_]:m.receipt}:{}},ae}let f=m.receipt;if(f.success!==!0||!f.transaction||f.network!==u.accepted.network)return await g({phase:"settlement_unknown"}),j(d);let oe={...i,_meta:{...i._meta,[_]:p(f)}};return await g({phase:"complete",result:oe,receipt:f}),oe}catch{return T("Operation outcome requires reconciliation before another payment.",{paymentId:E,phase:"unknown",recoveryRequired:!0})}}}async function he(e,t){if(t._meta?.[x]!==void 0)throw new Error("Probe already contains payment");let n=await e(p(t));return{result:n,paymentRequired:R(n)}}async function Ee(e){let t=p(e.paymentRequired),n=p(e.payment);if(!y(t)||!M(n)||!H(t,n))throw new Error("Payment does not match the approved MCP requirements");let r=V(e.request,n);await e.beforeDispatch(p(r));let s;try{s=await e.transport(r)}catch(u){return{paymentStatus:"unknown",deliveryStatus:"unknown",error:u}}if(!l(s)||!Array.isArray(s.content)||s.content.some(u=>!l(u)||typeof u.type!="string")||s.isError!==void 0&&typeof s.isError!="boolean")return{rawResult:s,paymentStatus:"unknown",deliveryStatus:"unknown",error:new Error("Invalid MCP result after paid dispatch")};let o=s.isError===!0?"tool_error":"result_received",a;try{a=Y(s)}catch(u){return{result:s,paymentStatus:"unknown",deliveryStatus:o,error:u}}if(!a||a.network!==n.accepted.network)return{result:s,paymentStatus:"unknown",deliveryStatus:o,error:new Error("Missing or invalid payment receipt")};let c=s._meta?.[P];return S(a)||l(c)&&["unknown","settling","settlement_unknown"].includes(String(c.phase))?{result:s,receipt:a,paymentStatus:"unknown",deliveryStatus:o}:{result:s,receipt:a,deliveryStatus:o,paymentStatus:a.success?"seller_reported_settled":"seller_reported_failed"}}0&&(module.exports={MCP_PAYMENT_META,MCP_PAYMENT_RESPONSE_META,MCP_PAYMENT_STATE_META,attachMcpPayment,callMcpToolWithPayment,createMcpFacilitatorProcessor,createMcpPaymentRequiredResult,createPaidMcpTool,getMcpPaymentReceipt,getMcpPaymentRequired,isMcpPaymentAccept,isMcpPaymentPayload,isMcpPaymentRequired,probeMcpTool});