{"version":3,"sources":["../../../src/adapters/agent-wallet.ts","../../../src/adapters/chains.ts"],"sourcesContent":["/**\n * Adaptation layer — BankofAI overlay, NOT from upstream @x402/evm.\n *\n * Bridges a non-custodial wallet (e.g. `@bankofai/agent-wallet`) to upstream's\n * signer contracts, for both roles. Each factory takes `(wallet, { network })`\n * and builds the viem client internally from the CAIP-2 network — callers no\n * longer construct a viem chain / public client themselves.\n *\n *   - {@link createClientEvmSigner}      → `ClientEvmSigner`\n *   - {@link createFacilitatorEvmSigner} → `FacilitatorEvmSigner`\n *\n * Wallet contracts come from `@bankofai/x402-core/wallets` (the chain-agnostic\n * {@link ClientWallet} / {@link FacilitatorWallet} hierarchy); EVM only refines\n * the facilitator transaction shape via {@link Eip1559TxFields}.\n *\n * Upgrade safety: consumes only upstream's public surface (`toClientEvmSigner` /\n * `toFacilitatorEvmSigner` + the signer types); never edits `signer.ts` /\n * `index.ts`. Wallet types are structural — no runtime coupling to agent-wallet.\n */\nimport { encodeFunctionData, type Abi, type Log } from \"viem\";\n\nimport type { ClientWallet, FacilitatorWallet } from \"@bankofai/x402-core/wallets\";\n\nimport {\n  toClientEvmSigner,\n  toFacilitatorEvmSigner,\n  type ClientEvmSigner,\n  type FacilitatorEvmSigner,\n} from \"../signer\";\nimport { createEvmPublicClient } from \"./chains\";\nimport { log } from \"@bankofai/x402-core\";\n\n// ────────────────────────────────────────────────────────────────────────────\n// Client\n// ────────────────────────────────────────────────────────────────────────────\n\n/** EVM client wallet — the chain-agnostic {@link ClientWallet} (no EVM refinement). */\nexport type ClientEvmWallet = ClientWallet;\n\n/** Options for {@link createClientEvmSigner}. */\nexport interface CreateClientEvmSignerOptions {\n  /** CAIP-2 network, e.g. `\"eip155:97\"`. The viem client is built from it. */\n  network: string;\n  /** Optional RPC URL override; falls back to the chain's default. */\n  rpcUrl?: string;\n}\n\n/**\n * Extracts an EVM raw transaction from legacy and agent-wallet 3.x results.\n *\n * @param result - Wallet transaction signing result.\n * @returns A normalized 0x-prefixed serialized transaction.\n */\nfunction normalizeSignedEvmTransaction(result: string | Record<string, unknown>): `0x${string}` {\n  const raw =\n    typeof result === \"string\"\n      ? result\n      : result.family === \"evm\" && typeof result.rawTransaction === \"string\"\n        ? result.rawTransaction\n        : undefined;\n  if (raw == null) {\n    throw new Error(\"EVM signTransaction must return an EVM signed transaction artifact\");\n  }\n  return `0x${raw.replace(/^0x/, \"\")}` as `0x${string}`;\n}\n\n/**\n * Creates a {@link ClientEvmSigner} from a wallet — the EVM counterpart of\n * `createClientTronSigner`. The key never enters the SDK; the wallet signs. The\n * viem public client (for EIP-2612 / permit2 enrichment + the gas-sponsored\n * approve) is built internally from `opts.network`.\n *\n * @param wallet - The wallet that signs payment authorizations.\n * @param opts - Target network (+ optional RPC override).\n * @returns A {@link ClientEvmSigner} backed by the wallet.\n *\n * @example\n * ```typescript\n * const wallet = await resolveWallet({ network: \"eip155:97\" }); // @bankofai/agent-wallet\n * const signer = await createClientEvmSigner(wallet, { network: \"eip155:97\" });\n * client.register(\"eip155:97\", new ExactEvmScheme(signer));\n * ```\n */\nexport async function createClientEvmSigner(\n  wallet: ClientEvmWallet,\n  opts: CreateClientEvmSignerOptions,\n): Promise<ClientEvmSigner> {\n  const address = (await wallet.getAddress()) as `0x${string}`;\n  const publicClient = createEvmPublicClient(opts.network, opts.rpcUrl);\n\n  // Bind to the wallet: agent-wallet's `LocalSigner.signTransaction` reads\n  // `this._impl`, so a detached reference throws. (`signTypedData` below is\n  // invoked as `wallet.signTypedData(...)`, so it stays bound.)\n  const signTransaction = wallet.signTransaction?.bind(wallet);\n\n  return toClientEvmSigner(\n    {\n      address,\n      // agent-wallet strips the `0x` (signature analog of SDK issue #2); re-add it.\n      signTypedData: async msg => {\n        const sig = await wallet.signTypedData(msg);\n        return `0x${sig.replace(/^0x/, \"\")}` as `0x${string}`;\n      },\n      // Enables the ERC-20 approval gas-sponsoring extension: the client signs\n      // the `approve(Permit2, MaxUint256)` tx offline (facilitator broadcasts it).\n      ...(signTransaction\n        ? {\n            signTransaction: async (args: Record<string, unknown>) => {\n              const signed = await signTransaction(args);\n              return normalizeSignedEvmTransaction(signed);\n            },\n          }\n        : {}),\n    },\n    publicClient,\n  );\n}\n\n/**\n * A typed-data signer with an eagerly-resolved address. Structurally satisfies\n * the batch-settlement `AuthorizerSigner` (the receiver-authorizer key).\n */\nexport type EvmAuthorizerSigner = Pick<ClientEvmSigner, \"address\" | \"signTypedData\">;\n\n/**\n * Creates an authorizer signer (address + typed-data signing) from a wallet —\n * e.g. the batch-settlement `receiverAuthorizer`, which signs `ClaimBatch` /\n * `Refund` EIP-712 digests. No chain client is built (signing is offline).\n *\n * @param wallet - The wallet that holds the authorizer key.\n * @returns A signer satisfying batch-settlement's `AuthorizerSigner`.\n */\nexport async function createAuthorizerEvmSigner(\n  wallet: ClientWallet,\n): Promise<EvmAuthorizerSigner> {\n  const address = (await wallet.getAddress()) as `0x${string}`;\n  return {\n    address,\n    // agent-wallet strips the `0x`; re-add it so the signature conforms.\n    signTypedData: async msg => {\n      const sig = await wallet.signTypedData(msg);\n      return `0x${sig.replace(/^0x/, \"\")}` as `0x${string}`;\n    },\n  };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Facilitator\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Typed EIP-1559 fields the facilitator wallet receives to sign a settlement tx.\n * A `type` (not `interface`) so it stays assignable to `Record<string, unknown>`\n * — the shape a generic agent-wallet `signTransaction` accepts.\n */\nexport type Eip1559TxFields = {\n  to: `0x${string}`;\n  data: `0x${string}`;\n  value: bigint;\n  nonce: number;\n  gas: bigint;\n  maxFeePerGas: bigint;\n  maxPriorityFeePerGas: bigint;\n  chainId: number;\n};\n\n/** EVM facilitator wallet — {@link FacilitatorWallet} refined to EIP-1559 fields. */\nexport type FacilitatorEvmWallet = FacilitatorWallet<Eip1559TxFields>;\n\n/**\n * Loose view of the viem public client for internal forwarding. viem's read/verify\n * methods are generic and strict, while upstream's `FacilitatorEvmSigner` shape is\n * loose; we narrow once here so the impedance is resolved inside the SDK.\n */\ntype LooseEvmPublicClient = {\n  getChainId(): Promise<number>;\n  getTransactionCount(args: {\n    address: `0x${string}`;\n    blockTag?: \"latest\" | \"pending\";\n  }): Promise<number>;\n  estimateFeesPerGas(): Promise<{ maxFeePerGas: bigint; maxPriorityFeePerGas: bigint }>;\n  estimateGas(args: {\n    account: `0x${string}`;\n    to: `0x${string}`;\n    data: `0x${string}`;\n    value?: bigint;\n  }): Promise<bigint>;\n  sendRawTransaction(args: { serializedTransaction: `0x${string}` }): Promise<`0x${string}`>;\n  readContract(args: {\n    address: `0x${string}`;\n    abi: readonly unknown[];\n    functionName: string;\n    args?: readonly unknown[];\n    account?: `0x${string}`;\n  }): Promise<unknown>;\n  verifyTypedData(args: {\n    address: `0x${string}`;\n    domain: Record<string, unknown>;\n    types: Record<string, unknown>;\n    primaryType: string;\n    message: Record<string, unknown>;\n    signature: `0x${string}`;\n  }): Promise<boolean>;\n  getCode(args: { address: `0x${string}` }): Promise<`0x${string}` | undefined>;\n  waitForTransactionReceipt(args: {\n    hash: `0x${string}`;\n  }): Promise<{ status: string; logs?: readonly Log[] }>;\n};\n\n/** Options for {@link createFacilitatorEvmSigner}. */\nexport interface CreateFacilitatorEvmSignerOptions {\n  /** CAIP-2 network, e.g. `\"eip155:97\"`. The viem client is built from it. */\n  network: string;\n  /** Optional RPC URL override; falls back to the chain's default. */\n  rpcUrl?: string;\n  /** Gas limit when a per-call `gas` is not supplied; otherwise estimated. */\n  defaultGas?: bigint;\n}\n\n/**\n * One transaction for {@link GasSponsoringFacilitatorEvmSigner.sendTransactions}:\n * a pre-signed serialized tx (broadcast as-is) or an unsigned call intent (signed\n * by the facilitator wallet, then broadcast).\n */\nexport type EvmTransactionRequest =\n  | `0x${string}`\n  | { to: `0x${string}`; data: `0x${string}`; gas?: bigint };\n\n/**\n * {@link FacilitatorEvmSigner} plus `sendTransactions` — the shape the ERC-20\n * approval gas-sponsoring extension expects (broadcasts the client's pre-signed\n * `approve` bundled with `settle`).\n */\nexport type GasSponsoringFacilitatorEvmSigner = FacilitatorEvmSigner & {\n  sendTransactions(transactions: readonly EvmTransactionRequest[]): Promise<`0x${string}`[]>;\n};\n\n/**\n * Appends an extension data suffix (e.g. a builder code) to encoded calldata.\n *\n * @param data - The encoded function calldata.\n * @param suffix - Optional `0x`-prefixed suffix to append.\n * @returns The calldata with the suffix appended, or `data` unchanged.\n */\nfunction appendDataSuffix(data: `0x${string}`, suffix?: `0x${string}`): `0x${string}` {\n  if (!suffix || suffix === \"0x\") {\n    return data;\n  }\n  return `${data}${suffix.slice(2)}` as `0x${string}`;\n}\n\n/**\n * Creates a {@link FacilitatorEvmSigner} from a wallet — the EVM counterpart of\n * `createFacilitatorTronSigner`. The viem public client (reads / verification /\n * broadcast) is built internally from `opts.network`. The transaction is built\n * (nonce / EIP-1559 fees / gas), handed to the wallet to sign (the private key\n * never enters the SDK), then broadcast.\n *\n * @param wallet - The wallet that signs settlement transactions.\n * @param opts - Target network (+ optional RPC override / default gas).\n * @returns A {@link GasSponsoringFacilitatorEvmSigner} backed by the wallet.\n *\n * @example\n * ```typescript\n * const signer = await createFacilitatorEvmSigner(agentWallet, { network: \"eip155:97\" });\n * facilitator.register(\"eip155:97\", new ExactEvmScheme(signer));\n * ```\n */\nexport async function createFacilitatorEvmSigner(\n  wallet: FacilitatorEvmWallet,\n  opts: CreateFacilitatorEvmSignerOptions,\n): Promise<GasSponsoringFacilitatorEvmSigner> {\n  const address = (await wallet.getAddress()) as `0x${string}`;\n  // Narrow once: viem's strict generic methods → the loose shape we forward to\n  // upstream's FacilitatorEvmSigner. Keeps the cast inside the SDK.\n  const client = createEvmPublicClient(\n    opts.network,\n    opts.rpcUrl,\n  ) as unknown as LooseEvmPublicClient;\n\n  /**\n   * Build, wallet-sign, and broadcast a transaction.\n   *\n   * @param to - Destination contract or account\n   * @param data - Encoded call data\n   * @param gasOverride - Optional precomputed gas limit\n   * @returns Broadcast transaction hash\n   */\n  async function buildSignBroadcast(\n    to: `0x${string}`,\n    data: `0x${string}`,\n    gasOverride?: bigint,\n  ): Promise<`0x${string}`> {\n    const value = 0n; // x402 settlement never transfers native value.\n    const [chainId, nonce, fees] = await Promise.all([\n      client.getChainId(),\n      // \"pending\" (not the default \"latest\") counts the EOA's not-yet-mined txs,\n      // so rapid sequential settlements from one facilitator key don't reuse a\n      // nonce while the previous settle is still in the mempool.\n      client.getTransactionCount({ address, blockTag: \"pending\" }),\n      client.estimateFeesPerGas(),\n    ]);\n    const gas =\n      gasOverride ??\n      opts.defaultGas ??\n      (await client.estimateGas({ account: address, to, data, value }));\n\n    const signed = await wallet.signTransaction({\n      to,\n      data,\n      value,\n      nonce,\n      gas,\n      maxFeePerGas: fees.maxFeePerGas,\n      maxPriorityFeePerGas: fees.maxPriorityFeePerGas,\n      chainId,\n    });\n    const serializedTransaction = normalizeSignedEvmTransaction(signed);\n    log.debug(\"x402 evm: broadcast start\", { to, chainId, nonce });\n    try {\n      const hash = await client.sendRawTransaction({ serializedTransaction });\n      log.info(\"x402 evm: broadcast ok\", { to, hash });\n      return hash;\n    } catch (error) {\n      log.error(\"x402 evm: broadcast failed\", {\n        to,\n        error: error instanceof Error ? error.message : String(error),\n      });\n      throw error;\n    }\n  }\n\n  const base = toFacilitatorEvmSigner({\n    address,\n    // Issue every read as the facilitator EOA (sets the eth_call `from`). View\n    // calls ignore the caller, but caller-authorized simulations need it — the\n    // upto proxy `settle` reverts with `UnauthorizedFacilitator` unless\n    // `msg.sender` is the witness-bound facilitator (= this single-key wallet).\n    // `...args` last so an explicit per-call `account` (if upstream ever adds one)\n    // overrides this default.\n    readContract: args => client.readContract({ account: address, ...args }),\n    verifyTypedData: args => client.verifyTypedData(args),\n    getCode: args => client.getCode(args),\n    waitForTransactionReceipt: async args => {\n      const receipt = await client.waitForTransactionReceipt(args);\n      log[receipt.status === \"success\" ? \"info\" : \"warn\"](\"x402 evm: tx receipt\", {\n        hash: args.hash,\n        status: receipt.status,\n      });\n      return receipt;\n    },\n    writeContract: args => {\n      const data = appendDataSuffix(\n        encodeFunctionData({\n          abi: args.abi as Abi,\n          functionName: args.functionName,\n          args: args.args,\n        }),\n        args.dataSuffix,\n      );\n      return buildSignBroadcast(args.address, data, args.gas);\n    },\n    sendTransaction: args => buildSignBroadcast(args.to, args.data),\n  });\n\n  // Batch broadcast for the ERC-20 approval gas-sponsoring extension: the\n  // client's pre-signed `approve` (a serialized tx) is broadcast as-is; the\n  // `settle` call intent is signed by the facilitator wallet and broadcast.\n  return {\n    ...base,\n    async sendTransactions(transactions) {\n      const hashes: `0x${string}`[] = [];\n      for (const tx of transactions) {\n        if (typeof tx === \"string\") {\n          const serializedTransaction = `0x${tx.replace(/^0x/, \"\")}` as `0x${string}`;\n          const hash = await client.sendRawTransaction({ serializedTransaction });\n          log.info(\"x402 evm: pre-signed tx broadcast ok\", { hash });\n          hashes.push(hash);\n        } else {\n          hashes.push(await buildSignBroadcast(tx.to, tx.data, tx.gas));\n        }\n      }\n      return hashes;\n    },\n  };\n}\n","/**\n * Adaptation layer — CAIP-2 → viem client resolution.\n *\n * Centralizes the `eip155:<chainId>` → viem `Chain` → `PublicClient` construction\n * that callers previously hand-wired (importing a viem chain + `createPublicClient`\n * in every example). Known chains are resolved by id; an unknown chain is allowed\n * when an `rpcUrl` is supplied (built via `defineChain`). Adding a common chain is\n * one entry in `KNOWN_CHAINS`.\n */\nimport { createPublicClient, defineChain, http, type Chain, type PublicClient } from \"viem\";\nimport { base, baseSepolia, bsc, bscTestnet, mainnet, sepolia } from \"viem/chains\";\n\nimport { getEvmChainId } from \"../utils\";\n\n/** Common chains resolved by chain id (extend as needed). */\nconst KNOWN_CHAINS: Record<number, Chain> = {\n  [mainnet.id]: mainnet,\n  [sepolia.id]: sepolia,\n  [base.id]: base,\n  [baseSepolia.id]: baseSepolia,\n  [bsc.id]: bsc,\n  [bscTestnet.id]: bscTestnet,\n};\n\n/**\n * Resolves a viem `Chain` for a CAIP-2 network. Known chains are returned\n * directly; an unknown chain requires `rpcUrl` and is built via `defineChain`.\n *\n * @param network - CAIP-2 id, e.g. `\"eip155:8453\"`.\n * @param rpcUrl - Optional RPC URL (required for chains not in `KNOWN_CHAINS`).\n * @returns The resolved viem chain.\n */\nexport function resolveEvmChain(network: string, rpcUrl?: string): Chain {\n  const chainId = getEvmChainId(network);\n  const known = KNOWN_CHAINS[chainId];\n  if (known) {\n    return known;\n  }\n  if (!rpcUrl) {\n    throw new Error(\n      `Unknown EVM chain ${network}: not in KNOWN_CHAINS. Pass rpcUrl to use a custom chain.`,\n    );\n  }\n  return defineChain({\n    id: chainId,\n    name: network,\n    nativeCurrency: { name: \"Ether\", symbol: \"ETH\", decimals: 18 },\n    rpcUrls: { default: { http: [rpcUrl] } },\n  });\n}\n\n/**\n * Builds a key-less viem `PublicClient` for a CAIP-2 network (reads + broadcast).\n *\n * @param network - CAIP-2 id, e.g. `\"eip155:97\"`.\n * @param rpcUrl - Optional RPC URL override; falls back to the chain's default.\n * @returns A viem public client.\n */\nexport function createEvmPublicClient(network: string, rpcUrl?: string): PublicClient {\n  const chain = resolveEvmChain(network, rpcUrl);\n  return createPublicClient({ chain, transport: http(rpcUrl) });\n}\n"],"mappings":"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","names":["base"]}