{"version":3,"sources":["../../src/exact/client/permit2.ts"],"sourcesContent":["import { PaymentRequirements, PaymentPayloadResult } from \"@x402/core/types\";\nimport { encodeFunctionData, getAddress } from \"viem\";\nimport {\n  PERMIT2_ADDRESS,\n  x402ExactPermit2ProxyAddress,\n  erc20ApproveAbi,\n  erc20AllowanceAbi,\n} from \"../../constants\";\nimport { ClientEvmSigner } from \"../../signer\";\nimport { createPermit2PayloadForProxy } from \"../../shared/permit2\";\n\n/** Maximum uint256 value for unlimited approval. */\nconst MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n/**\n * Creates a Permit2 payload using the x402Permit2Proxy witness pattern.\n * The spender is set to x402Permit2Proxy, which enforces that funds\n * can only be sent to the witness.to address.\n *\n * @param signer - The EVM signer for client operations\n * @param x402Version - The x402 protocol version\n * @param paymentRequirements - The payment requirements\n * @returns Promise resolving to a payment payload result\n */\nexport async function createPermit2Payload(\n  signer: ClientEvmSigner,\n  x402Version: number,\n  paymentRequirements: PaymentRequirements,\n): Promise<PaymentPayloadResult> {\n  return createPermit2PayloadForProxy(\n    x402ExactPermit2ProxyAddress,\n    signer,\n    x402Version,\n    paymentRequirements,\n  );\n}\n\n/**\n * Creates transaction data to approve Permit2 to spend tokens.\n * The user sends this transaction (paying gas) before using Permit2 flow.\n *\n * @param tokenAddress - The ERC20 token contract address\n * @returns Transaction data to send for approval\n *\n * @example\n * ```typescript\n * const tx = createPermit2ApprovalTx(\"0x...\");\n * await walletClient.sendTransaction({\n *   to: tx.to,\n *   data: tx.data,\n * });\n * ```\n */\nexport function createPermit2ApprovalTx(tokenAddress: `0x${string}`): {\n  to: `0x${string}`;\n  data: `0x${string}`;\n} {\n  const data = encodeFunctionData({\n    abi: erc20ApproveAbi,\n    functionName: \"approve\",\n    args: [PERMIT2_ADDRESS, MAX_UINT256],\n  });\n\n  return {\n    to: getAddress(tokenAddress),\n    data,\n  };\n}\n\n/**\n * Parameters for checking Permit2 allowance.\n * Application provides these to check if approval is needed.\n */\nexport interface Permit2AllowanceParams {\n  tokenAddress: `0x${string}`;\n  ownerAddress: `0x${string}`;\n}\n\n/**\n * Returns contract read parameters for checking Permit2 allowance.\n * Use with a public client to check if the user has approved Permit2.\n *\n * @param params - The allowance check parameters\n * @returns Contract read parameters for checking allowance\n *\n * @example\n * ```typescript\n * const readParams = getPermit2AllowanceReadParams({\n *   tokenAddress: \"0x...\",\n *   ownerAddress: \"0x...\",\n * });\n *\n * const allowance = await publicClient.readContract(readParams);\n * const needsApproval = allowance < requiredAmount;\n * ```\n */\nexport function getPermit2AllowanceReadParams(params: Permit2AllowanceParams): {\n  address: `0x${string}`;\n  abi: typeof erc20AllowanceAbi;\n  functionName: \"allowance\";\n  args: [`0x${string}`, `0x${string}`];\n} {\n  return {\n    address: getAddress(params.tokenAddress),\n    abi: erc20AllowanceAbi,\n    functionName: \"allowance\",\n    args: [getAddress(params.ownerAddress), PERMIT2_ADDRESS],\n  };\n}\n"],"mappings":";;;;;;;;;;;AACA,SAAS,oBAAoB,kBAAkB;AAW/C,IAAM,cAAc,OAAO,oEAAoE;AAY/F,eAAsB,qBACpB,QACA,aACA,qBAC+B;AAC/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAkBO,SAAS,wBAAwB,cAGtC;AACA,QAAM,OAAO,mBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,iBAAiB,WAAW;AAAA,EACrC,CAAC;AAED,SAAO;AAAA,IACL,IAAI,WAAW,YAAY;AAAA,IAC3B;AAAA,EACF;AACF;AA6BO,SAAS,8BAA8B,QAK5C;AACA,SAAO;AAAA,IACL,SAAS,WAAW,OAAO,YAAY;AAAA,IACvC,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,WAAW,OAAO,YAAY,GAAG,eAAe;AAAA,EACzD;AACF;","names":[]}