{"version":3,"sources":["../../src/upto/client/permit2.ts","../../src/upto/client/scheme.ts"],"sourcesContent":["import { PaymentRequirements, PaymentPayloadResult } from \"@x402/core/types\";\nimport {\n PERMIT2_ADDRESS,\n uptoPermit2WitnessTypes,\n x402UptoPermit2ProxyAddress,\n} from \"../../constants\";\nimport { ClientEvmSigner } from \"../../signer\";\nimport { UptoPermit2Authorization } from \"../../types\";\nimport { createPermit2Nonce, getEvmChainId } from \"../../utils\";\nimport { getAddress } from \"viem\";\n\n// Re-export Permit2-generic approval helpers\nexport { createPermit2ApprovalTx, getPermit2AllowanceReadParams } from \"../../exact/client/permit2\";\nexport type { Permit2AllowanceParams } from \"../../exact/client/permit2\";\n\n/**\n * Creates a signed upto Permit2 payment payload for the given requirements.\n *\n * Constructs a Permit2 authorization with an upto witness (including facilitator address)\n * and signs it using EIP-712 typed data.\n *\n * @param signer - The EVM client signer for signing typed data\n * @param x402Version - The x402 protocol version\n * @param paymentRequirements - The payment requirements including asset, amount, and payTo\n * @returns Promise resolving to a payment payload result with the signed authorization\n */\nexport async function createUptoPermit2Payload(\n signer: ClientEvmSigner,\n x402Version: number,\n paymentRequirements: PaymentRequirements,\n): Promise {\n const facilitatorAddress = paymentRequirements.extra?.facilitatorAddress as\n | `0x${string}`\n | undefined;\n if (!facilitatorAddress) {\n throw new Error(\n \"upto scheme requires facilitatorAddress in paymentRequirements.extra. \" +\n \"Ensure the server is configured with an upto facilitator that provides getExtra().\",\n );\n }\n\n const now = Math.floor(Date.now() / 1000);\n const nonce = createPermit2Nonce();\n const validAfter = (now - 600).toString();\n const deadline = (now + paymentRequirements.maxTimeoutSeconds).toString();\n\n if (BigInt(deadline) <= BigInt(validAfter)) {\n throw new Error(\n `Invalid time window: deadline (${deadline}) must be after validAfter (${validAfter}). ` +\n `Check that maxTimeoutSeconds (${paymentRequirements.maxTimeoutSeconds}) is positive.`,\n );\n }\n\n const permit2Authorization: UptoPermit2Authorization & { from: `0x${string}` } = {\n from: signer.address,\n permitted: {\n token: getAddress(paymentRequirements.asset),\n amount: paymentRequirements.amount,\n },\n spender: x402UptoPermit2ProxyAddress,\n nonce,\n deadline,\n witness: {\n to: getAddress(paymentRequirements.payTo),\n facilitator: getAddress(facilitatorAddress),\n validAfter,\n },\n };\n\n const chainId = getEvmChainId(paymentRequirements.network);\n\n const signature = await signer.signTypedData({\n domain: { name: \"Permit2\", chainId, verifyingContract: PERMIT2_ADDRESS },\n types: uptoPermit2WitnessTypes,\n primaryType: \"PermitWitnessTransferFrom\",\n message: {\n permitted: {\n token: getAddress(permit2Authorization.permitted.token),\n amount: BigInt(permit2Authorization.permitted.amount),\n },\n spender: getAddress(permit2Authorization.spender),\n nonce: BigInt(permit2Authorization.nonce),\n deadline: BigInt(permit2Authorization.deadline),\n witness: {\n to: getAddress(permit2Authorization.witness.to),\n facilitator: getAddress(permit2Authorization.witness.facilitator),\n validAfter: BigInt(permit2Authorization.witness.validAfter),\n },\n },\n });\n\n return {\n x402Version,\n payload: { signature, permit2Authorization },\n };\n}\n","import {\n SchemeNetworkClient,\n PaymentRequirements,\n PaymentPayloadResult,\n PaymentPayloadContext,\n} from \"@x402/core/types\";\nimport { ClientEvmSigner } from \"../../signer\";\nimport { createUptoPermit2Payload } from \"./permit2\";\nimport {\n trySignEip2612PermitExtension,\n trySignErc20ApprovalExtension,\n} from \"../../shared/extensions\";\nimport { UptoEvmSchemeOptions } from \"./rpc\";\n\n/**\n * EVM client implementation for the Upto payment scheme.\n * Handles Permit2-based payment payload creation and gas-sponsoring extensions.\n */\nexport class UptoEvmScheme implements SchemeNetworkClient {\n readonly scheme = \"upto\";\n\n /**\n * Creates a new UptoEvmScheme instance.\n *\n * @param signer - The EVM signer for client operations\n * @param options - Optional RPC configuration\n */\n constructor(\n private readonly signer: ClientEvmSigner,\n private readonly options?: UptoEvmSchemeOptions,\n ) {}\n\n /**\n * Creates a payment payload for the Upto scheme using Permit2.\n *\n * @param x402Version - The x402 protocol version\n * @param paymentRequirements - The payment requirements\n * @param context - Optional context with server-declared extensions\n * @returns Promise resolving to a payment payload result\n */\n async createPaymentPayload(\n x402Version: number,\n paymentRequirements: PaymentRequirements,\n context?: PaymentPayloadContext,\n ): Promise {\n const result = await createUptoPermit2Payload(this.signer, x402Version, paymentRequirements);\n\n const eip2612Extensions = await trySignEip2612PermitExtension(\n this.signer,\n this.options,\n paymentRequirements,\n result,\n context,\n );\n if (eip2612Extensions) {\n return { ...result, extensions: eip2612Extensions };\n }\n\n const erc20Extensions = await trySignErc20ApprovalExtension(\n this.signer,\n this.options,\n paymentRequirements,\n context,\n );\n if (erc20Extensions) {\n return { ...result, extensions: erc20Extensions };\n }\n\n return result;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AASA,SAAS,kBAAkB;AAiB3B,eAAsB,yBACpB,QACA,aACA,qBAC+B;AAC/B,QAAM,qBAAqB,oBAAoB,OAAO;AAGtD,MAAI,CAAC,oBAAoB;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AAEA,QAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACxC,QAAM,QAAQ,mBAAmB;AACjC,QAAM,cAAc,MAAM,KAAK,SAAS;AACxC,QAAM,YAAY,MAAM,oBAAoB,mBAAmB,SAAS;AAExE,MAAI,OAAO,QAAQ,KAAK,OAAO,UAAU,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR,kCAAkC,QAAQ,+BAA+B,UAAU,oCAChD,oBAAoB,iBAAiB;AAAA,IAC1E;AAAA,EACF;AAEA,QAAM,uBAA2E;AAAA,IAC/E,MAAM,OAAO;AAAA,IACb,WAAW;AAAA,MACT,OAAO,WAAW,oBAAoB,KAAK;AAAA,MAC3C,QAAQ,oBAAoB;AAAA,IAC9B;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,IAAI,WAAW,oBAAoB,KAAK;AAAA,MACxC,aAAa,WAAW,kBAAkB;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,cAAc,oBAAoB,OAAO;AAEzD,QAAM,YAAY,MAAM,OAAO,cAAc;AAAA,IAC3C,QAAQ,EAAE,MAAM,WAAW,SAAS,mBAAmB,gBAAgB;AAAA,IACvE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,MACP,WAAW;AAAA,QACT,OAAO,WAAW,qBAAqB,UAAU,KAAK;AAAA,QACtD,QAAQ,OAAO,qBAAqB,UAAU,MAAM;AAAA,MACtD;AAAA,MACA,SAAS,WAAW,qBAAqB,OAAO;AAAA,MAChD,OAAO,OAAO,qBAAqB,KAAK;AAAA,MACxC,UAAU,OAAO,qBAAqB,QAAQ;AAAA,MAC9C,SAAS;AAAA,QACP,IAAI,WAAW,qBAAqB,QAAQ,EAAE;AAAA,QAC9C,aAAa,WAAW,qBAAqB,QAAQ,WAAW;AAAA,QAChE,YAAY,OAAO,qBAAqB,QAAQ,UAAU;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,SAAS,EAAE,WAAW,qBAAqB;AAAA,EAC7C;AACF;;;AC7EO,IAAM,gBAAN,MAAmD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxD,YACmB,QACA,SACjB;AAFiB;AACA;AAVnB,SAAS,SAAS;AAAA,EAWf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUH,MAAM,qBACJ,aACA,qBACA,SAC+B;AAC/B,UAAM,SAAS,MAAM,yBAAyB,KAAK,QAAQ,aAAa,mBAAmB;AAE3F,UAAM,oBAAoB,MAAM;AAAA,MAC9B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,mBAAmB;AACrB,aAAO,EAAE,GAAG,QAAQ,YAAY,kBAAkB;AAAA,IACpD;AAEA,UAAM,kBAAkB,MAAM;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AACA,QAAI,iBAAiB;AACnB,aAAO,EAAE,GAAG,QAAQ,YAAY,gBAAgB;AAAA,IAClD;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}