{"version":3,"sources":["../../../../src/upto/facilitator/permit2.ts","../../../../src/upto/facilitator/scheme.ts"],"sourcesContent":["import {\n  PaymentPayload,\n  PaymentRequirements,\n  FacilitatorContext,\n  SettleResponse,\n  VerifyResponse,\n} from \"@x402/core/types\";\nimport {\n  extractEip2612GasSponsoringInfo,\n  extractErc20ApprovalGasSponsoringInfo,\n  ERC20_APPROVAL_GAS_SPONSORING_KEY,\n  resolveErc20ApprovalExtensionSigner,\n  type Erc20ApprovalGasSponsoringFacilitatorExtension,\n  type Erc20ApprovalGasSponsoringSigner,\n} from \"../../exact/extensions\";\nimport { getAddress, encodeFunctionData } from \"viem\";\nimport { appendDataSuffix, resolveDataSuffix } from \"../../shared/extensions\";\nimport {\n  PERMIT2_ADDRESS,\n  uptoPermit2WitnessTypes,\n  x402UptoPermit2ProxyABI,\n  x402UptoPermit2ProxyAddress,\n} from \"../../constants\";\nimport {\n  ErrAssetNotDeployedContract,\n  ErrPermit2AmountMismatch,\n  ErrUptoSettlementExceedsAmount,\n  ErrUptoFacilitatorMismatch,\n  ErrUptoInvalidScheme,\n  ErrUptoNetworkMismatch,\n} from \"./errors\";\nimport { FacilitatorEvmSigner } from \"../../signer\";\nimport { UptoPermit2Payload } from \"../../types\";\nimport { getEvmChainId } from \"../../utils\";\nimport { validateErc20ApprovalForPayment } from \"../../shared/erc20approval\";\nimport { verifyTypedDataSignature } from \"../../shared/verifySignature\";\nimport {\n  buildUptoPermit2SettleArgs,\n  waitAndReturnSettleResponse,\n  mapSettleError,\n  splitEip2612Signature,\n  simulatePermit2Settle,\n  simulatePermit2SettleWithPermit,\n  simulatePermit2SettleWithErc20Approval,\n  diagnosePermit2SimulationFailure,\n  checkPermit2Prerequisites,\n  validateEip2612PermitForPayment,\n  type Permit2ProxyConfig,\n} from \"../../shared/permit2\";\nimport type { Eip2612GasSponsoringInfo } from \"../../exact/extensions\";\n\nconst uptoProxyConfig: Permit2ProxyConfig = {\n  proxyAddress: x402UptoPermit2ProxyAddress,\n  proxyABI: x402UptoPermit2ProxyABI,\n};\n\nexport interface VerifyUptoPermit2Options {\n  simulate?: boolean;\n}\n\nexport interface UptoPermit2FacilitatorConfig {\n  simulateInSettle?: boolean;\n}\n\n/**\n * Verifies an upto Permit2 payment payload against the given requirements.\n *\n * Validates scheme, network, spender, recipient, facilitator, deadline, amount,\n * token, signature, Permit2 allowance, and payer balance.\n *\n * @param signer - The facilitator signer for contract reads and signature verification\n * @param payload - The payment payload to verify\n * @param requirements - The payment requirements to verify against\n * @param permit2Payload - The upto Permit2 specific payload with witness data\n * @param context - Optional facilitator context for extension-provided capabilities\n * @param options - Optional verification options (e.g., skip simulation)\n * @returns Promise resolving to a verification response indicating validity\n */\nexport async function verifyUptoPermit2(\n  signer: FacilitatorEvmSigner,\n  payload: PaymentPayload,\n  requirements: PaymentRequirements,\n  permit2Payload: UptoPermit2Payload,\n  context?: FacilitatorContext,\n  options?: VerifyUptoPermit2Options,\n): Promise<VerifyResponse> {\n  const payer = permit2Payload.permit2Authorization.from;\n\n  if (payload.accepted.scheme !== \"upto\" || requirements.scheme !== \"upto\") {\n    return {\n      isValid: false,\n      invalidReason: ErrUptoInvalidScheme,\n      payer,\n    };\n  }\n\n  if (payload.accepted.network !== requirements.network) {\n    return {\n      isValid: false,\n      invalidReason: ErrUptoNetworkMismatch,\n      payer,\n    };\n  }\n\n  const chainId = getEvmChainId(requirements.network);\n  const tokenAddress = getAddress(requirements.asset);\n\n  const assetBytecode = await signer.getCode({ address: tokenAddress });\n  if (!assetBytecode || assetBytecode === \"0x\") {\n    return { isValid: false, invalidReason: ErrAssetNotDeployedContract, payer };\n  }\n\n  if (\n    getAddress(permit2Payload.permit2Authorization.spender) !==\n    getAddress(x402UptoPermit2ProxyAddress)\n  ) {\n    return {\n      isValid: false,\n      invalidReason: \"invalid_permit2_spender\",\n      payer,\n    };\n  }\n\n  if (\n    getAddress(permit2Payload.permit2Authorization.witness.to) !== getAddress(requirements.payTo)\n  ) {\n    return {\n      isValid: false,\n      invalidReason: \"invalid_permit2_recipient_mismatch\",\n      payer,\n    };\n  }\n\n  // Verify the facilitator address in the witness matches our own address\n  const facilitatorAddresses = signer.getAddresses();\n  const witnessFacilitator = getAddress(permit2Payload.permit2Authorization.witness.facilitator);\n  const isFacilitatorMatch = facilitatorAddresses.some(\n    addr => getAddress(addr) === witnessFacilitator,\n  );\n  if (!isFacilitatorMatch) {\n    return {\n      isValid: false,\n      invalidReason: ErrUptoFacilitatorMismatch,\n      payer,\n    };\n  }\n\n  const now = Math.floor(Date.now() / 1000);\n  if (BigInt(permit2Payload.permit2Authorization.deadline) < BigInt(now + 6)) {\n    return {\n      isValid: false,\n      invalidReason: \"permit2_deadline_expired\",\n      payer,\n    };\n  }\n\n  if (BigInt(permit2Payload.permit2Authorization.witness.validAfter) > BigInt(now)) {\n    return {\n      isValid: false,\n      invalidReason: \"permit2_not_yet_valid\",\n      payer,\n    };\n  }\n\n  if (\n    BigInt(permit2Payload.permit2Authorization.permitted.amount) !== BigInt(requirements.amount)\n  ) {\n    return {\n      isValid: false,\n      invalidReason: ErrPermit2AmountMismatch,\n      payer,\n    };\n  }\n\n  if (getAddress(permit2Payload.permit2Authorization.permitted.token) !== tokenAddress) {\n    return {\n      isValid: false,\n      invalidReason: \"permit2_token_mismatch\",\n      payer,\n    };\n  }\n\n  // Verify signature using upto-specific witness types (includes facilitator)\n  const permit2TypedData = {\n    types: uptoPermit2WitnessTypes,\n    primaryType: \"PermitWitnessTransferFrom\" as const,\n    domain: {\n      name: \"Permit2\",\n      chainId,\n      verifyingContract: PERMIT2_ADDRESS,\n    },\n    message: {\n      permitted: {\n        token: getAddress(permit2Payload.permit2Authorization.permitted.token),\n        amount: BigInt(permit2Payload.permit2Authorization.permitted.amount),\n      },\n      spender: getAddress(permit2Payload.permit2Authorization.spender),\n      nonce: BigInt(permit2Payload.permit2Authorization.nonce),\n      deadline: BigInt(permit2Payload.permit2Authorization.deadline),\n      witness: {\n        to: getAddress(permit2Payload.permit2Authorization.witness.to),\n        facilitator: getAddress(permit2Payload.permit2Authorization.witness.facilitator),\n        validAfter: BigInt(permit2Payload.permit2Authorization.witness.validAfter),\n      },\n    },\n  };\n\n  // Verify signature using a strict primitive that mirrors Permit2's\n  // on-chain SignatureVerification: ecrecover when the address has no code,\n  // strict EIP-1271 isValidSignature when it does. No ECDSA fallback for\n  // addresses with code (would accept sigs Permit2 rejects on-chain).\n  const signatureValid = await verifyTypedDataSignature(signer, {\n    address: payer,\n    ...permit2TypedData,\n    signature: permit2Payload.signature,\n  });\n  if (!signatureValid) {\n    return {\n      isValid: false,\n      invalidReason: \"invalid_permit2_signature\",\n      payer,\n    };\n  }\n\n  // If simulation is disabled, return early\n  if (options?.simulate === false) {\n    return { isValid: true, invalidReason: undefined, payer };\n  }\n\n  const facilitatorAddress = getAddress(permit2Payload.permit2Authorization.witness.facilitator);\n  // Per spec §Phase 3 Step 7: simulate with requirements.amount (the worst-case charge).\n  // At verify time, requirements.amount = max authorized amount.\n  // At settle time, requirements.amount = actual settlement amount (≤ max).\n  const uptoSettleArgs = buildUptoPermit2SettleArgs(\n    permit2Payload,\n    BigInt(requirements.amount),\n    facilitatorAddress,\n  );\n\n  const eip2612InfoForSim = extractEip2612GasSponsoringInfo(payload);\n  if (eip2612InfoForSim) {\n    const fieldResult = validateEip2612PermitForPayment(eip2612InfoForSim, payer, tokenAddress);\n    if (!fieldResult.isValid) {\n      return { isValid: false, invalidReason: fieldResult.invalidReason!, payer };\n    }\n\n    const simOk = await simulatePermit2SettleWithPermit(\n      uptoProxyConfig,\n      signer,\n      uptoSettleArgs,\n      eip2612InfoForSim,\n    );\n    if (!simOk) {\n      return diagnosePermit2SimulationFailure(\n        uptoProxyConfig,\n        signer,\n        tokenAddress,\n        permit2Payload,\n        requirements.amount,\n      );\n    }\n\n    return { isValid: true, invalidReason: undefined, payer };\n  }\n\n  const erc20GasSponsorshipExtension =\n    context?.getExtension<Erc20ApprovalGasSponsoringFacilitatorExtension>(\n      ERC20_APPROVAL_GAS_SPONSORING_KEY,\n    );\n  if (erc20GasSponsorshipExtension) {\n    const erc20Info = extractErc20ApprovalGasSponsoringInfo(payload);\n    if (erc20Info) {\n      const fieldResult = await validateErc20ApprovalForPayment(erc20Info, payer, tokenAddress);\n      if (!fieldResult.isValid) {\n        return { isValid: false, invalidReason: fieldResult.invalidReason!, payer };\n      }\n\n      const extensionSigner = resolveErc20ApprovalExtensionSigner(\n        erc20GasSponsorshipExtension,\n        requirements.network,\n      );\n\n      if (extensionSigner?.simulateTransactions) {\n        const simOk = await simulatePermit2SettleWithErc20Approval(\n          uptoProxyConfig,\n          extensionSigner,\n          uptoSettleArgs,\n          erc20Info,\n        );\n        if (!simOk) {\n          return diagnosePermit2SimulationFailure(\n            uptoProxyConfig,\n            signer,\n            tokenAddress,\n            permit2Payload,\n            requirements.amount,\n          );\n        }\n        return { isValid: true, invalidReason: undefined, payer };\n      }\n\n      return checkPermit2Prerequisites(\n        uptoProxyConfig,\n        signer,\n        tokenAddress,\n        payer,\n        requirements.amount,\n      );\n    }\n  }\n\n  const simOk = await simulatePermit2Settle(uptoProxyConfig, signer, uptoSettleArgs);\n  if (!simOk) {\n    return diagnosePermit2SimulationFailure(\n      uptoProxyConfig,\n      signer,\n      tokenAddress,\n      permit2Payload,\n      requirements.amount,\n    );\n  }\n\n  return {\n    isValid: true,\n    invalidReason: undefined,\n    payer,\n  };\n}\n\n/**\n * Settles an upto Permit2 payment on-chain.\n *\n * Verifies the payment first, then selects the appropriate settlement path:\n * EIP-2612 atomic permit, ERC-20 approval extension, or direct settlement.\n *\n * @param signer - The facilitator signer for contract writes\n * @param payload - The payment payload to settle\n * @param requirements - The payment requirements\n * @param permit2Payload - The upto Permit2 specific payload with witness data\n * @param context - Optional facilitator context for extension-provided capabilities\n * @param config - Optional facilitator configuration (e.g., simulation settings for settle)\n * @returns Promise resolving to a settlement response indicating success or failure\n */\nexport async function settleUptoPermit2(\n  signer: FacilitatorEvmSigner,\n  payload: PaymentPayload,\n  requirements: PaymentRequirements,\n  permit2Payload: UptoPermit2Payload,\n  context?: FacilitatorContext,\n  config?: UptoPermit2FacilitatorConfig,\n): Promise<SettleResponse> {\n  const payer = permit2Payload.permit2Authorization.from;\n  const settlementAmount = BigInt(requirements.amount);\n\n  // Re-verify the signature before settling. We override `requirements.amount`\n  // with the *authorized maximum* (`permitted.amount`) — NOT the actual\n  // settlement amount — because `verifyUptoPermit2` performs strict equality\n  // (`permitted.amount === requirements.amount`) to confirm the payload matches\n  // what the client signed.  The actual settlement amount, which may be lower\n  // than the authorized maximum, is validated separately in the guard below\n  // (`settlementAmount > permitted.amount`).\n  const verifyRequirements: PaymentRequirements = {\n    ...requirements,\n    amount: permit2Payload.permit2Authorization.permitted.amount,\n  };\n\n  const valid = await verifyUptoPermit2(\n    signer,\n    payload,\n    verifyRequirements,\n    permit2Payload,\n    context,\n    { simulate: config?.simulateInSettle ?? true },\n  );\n  if (!valid.isValid) {\n    return {\n      success: false,\n      network: payload.accepted.network,\n      transaction: \"\",\n      errorReason: valid.invalidReason ?? \"invalid_scheme\",\n      payer,\n    };\n  }\n\n  // Zero settlement — no on-chain tx needed\n  if (settlementAmount === 0n) {\n    return {\n      success: true,\n      transaction: \"\",\n      network: payload.accepted.network,\n      payer,\n      amount: \"0\",\n    };\n  }\n\n  if (settlementAmount > BigInt(permit2Payload.permit2Authorization.permitted.amount)) {\n    return {\n      success: false,\n      network: payload.accepted.network,\n      transaction: \"\",\n      errorReason: ErrUptoSettlementExceedsAmount,\n      payer,\n    };\n  }\n\n  const facilitatorAddress = getAddress(permit2Payload.permit2Authorization.witness.facilitator);\n\n  const dataSuffix = await resolveDataSuffix(context, {\n    paymentPayload: payload,\n    paymentRequirements: requirements,\n  });\n\n  // Branch: EIP-2612 gas sponsoring (atomic settleWithPermit via contract)\n  const eip2612Info = extractEip2612GasSponsoringInfo(payload);\n  if (eip2612Info) {\n    return settleUptoWithEIP2612(\n      signer,\n      payload,\n      permit2Payload,\n      eip2612Info,\n      settlementAmount,\n      facilitatorAddress,\n      dataSuffix,\n    );\n  }\n\n  // Branch: ERC-20 approval gas sponsoring (broadcast approval + settle via extension signer)\n  const erc20Info = extractErc20ApprovalGasSponsoringInfo(payload);\n  if (erc20Info) {\n    const erc20GasSponsorshipExtension =\n      context?.getExtension<Erc20ApprovalGasSponsoringFacilitatorExtension>(\n        ERC20_APPROVAL_GAS_SPONSORING_KEY,\n      );\n    const extensionSigner = resolveErc20ApprovalExtensionSigner(\n      erc20GasSponsorshipExtension,\n      payload.accepted.network,\n    );\n    if (extensionSigner) {\n      return settleUptoWithERC20Approval(\n        extensionSigner,\n        payload,\n        permit2Payload,\n        erc20Info,\n        settlementAmount,\n        facilitatorAddress,\n        dataSuffix,\n      );\n    }\n  }\n\n  // Branch: standard settle (allowance already on-chain)\n  return settleUptoDirect(\n    signer,\n    payload,\n    permit2Payload,\n    settlementAmount,\n    facilitatorAddress,\n    dataSuffix,\n  );\n}\n\n/**\n * Settles an upto Permit2 payment via settleWithPermit, including the EIP-2612 permit atomically.\n *\n * @param signer - The facilitator signer for contract writes\n * @param payload - The payment payload for network info\n * @param permit2Payload - The upto Permit2 specific payload with authorization and signature\n * @param eip2612Info - The EIP-2612 gas sponsoring info from the payload extension\n * @param settlementAmount - The amount to settle on-chain\n * @param facilitatorAddress - The facilitator address authorized in the witness\n * @param dataSuffix - Optional hex suffix appended to the settlement transaction\n * @returns Promise resolving to a settlement response\n */\nasync function settleUptoWithEIP2612(\n  signer: FacilitatorEvmSigner,\n  payload: PaymentPayload,\n  permit2Payload: UptoPermit2Payload,\n  eip2612Info: Eip2612GasSponsoringInfo,\n  settlementAmount: bigint,\n  facilitatorAddress: `0x${string}`,\n  dataSuffix?: `0x${string}`,\n): Promise<SettleResponse> {\n  const payer = permit2Payload.permit2Authorization.from;\n  try {\n    const { v, r, s } = splitEip2612Signature(eip2612Info.signature);\n\n    const tx = await signer.writeContract({\n      address: uptoProxyConfig.proxyAddress,\n      abi: uptoProxyConfig.proxyABI,\n      functionName: \"settleWithPermit\",\n      args: [\n        {\n          value: BigInt(eip2612Info.amount),\n          deadline: BigInt(eip2612Info.deadline),\n          r,\n          s,\n          v,\n        },\n        ...buildUptoPermit2SettleArgs(permit2Payload, settlementAmount, facilitatorAddress),\n      ],\n      dataSuffix,\n    });\n\n    const response = await waitAndReturnSettleResponse(signer, tx, payload, payer);\n    return { ...response, amount: settlementAmount.toString() };\n  } catch (error) {\n    return mapSettleError(error, payload, payer);\n  }\n}\n\n/**\n * Settles an upto Permit2 payment using an ERC-20 approval gas sponsoring extension.\n *\n * Broadcasts the pre-signed approval transaction followed by the settle transaction\n * via the extension signer.\n *\n * @param extensionSigner - The extension signer with sendTransactions capability\n * @param payload - The payment payload for network info\n * @param permit2Payload - The upto Permit2 specific payload with authorization and signature\n * @param erc20Info - Object containing the signed approval transaction\n * @param erc20Info.signedTransaction - The RLP-encoded signed ERC-20 approve transaction hex string\n * @param settlementAmount - The amount to settle on-chain\n * @param facilitatorAddress - The facilitator address authorized in the witness\n * @param dataSuffix - Optional hex suffix appended to the settlement transaction\n * @returns Promise resolving to a settlement response\n */\nasync function settleUptoWithERC20Approval(\n  extensionSigner: Erc20ApprovalGasSponsoringSigner,\n  payload: PaymentPayload,\n  permit2Payload: UptoPermit2Payload,\n  erc20Info: { signedTransaction: string },\n  settlementAmount: bigint,\n  facilitatorAddress: `0x${string}`,\n  dataSuffix?: `0x${string}`,\n): Promise<SettleResponse> {\n  const payer = permit2Payload.permit2Authorization.from;\n\n  try {\n    const settleData = appendDataSuffix(\n      encodeFunctionData({\n        abi: uptoProxyConfig.proxyABI,\n        functionName: \"settle\",\n        args: buildUptoPermit2SettleArgs(permit2Payload, settlementAmount, facilitatorAddress),\n      }),\n      dataSuffix,\n    );\n\n    const txHashes = await extensionSigner.sendTransactions([\n      erc20Info.signedTransaction as `0x${string}`,\n      { to: uptoProxyConfig.proxyAddress, data: settleData, gas: BigInt(300_000) },\n    ]);\n\n    const settleTxHash = txHashes[txHashes.length - 1];\n    const response = await waitAndReturnSettleResponse(\n      extensionSigner,\n      settleTxHash,\n      payload,\n      payer,\n    );\n    return { ...response, amount: settlementAmount.toString() };\n  } catch (error) {\n    return mapSettleError(error, payload, payer);\n  }\n}\n\n/**\n * Settles an upto Permit2 payment directly when Permit2 allowance is already on-chain.\n *\n * @param signer - The facilitator signer for contract writes\n * @param payload - The payment payload for network info\n * @param permit2Payload - The upto Permit2 specific payload with authorization and signature\n * @param settlementAmount - The amount to settle on-chain\n * @param facilitatorAddress - The facilitator address authorized in the witness\n * @param dataSuffix - Optional hex suffix appended to the settlement transaction\n * @returns Promise resolving to a settlement response\n */\nasync function settleUptoDirect(\n  signer: FacilitatorEvmSigner,\n  payload: PaymentPayload,\n  permit2Payload: UptoPermit2Payload,\n  settlementAmount: bigint,\n  facilitatorAddress: `0x${string}`,\n  dataSuffix?: `0x${string}`,\n): Promise<SettleResponse> {\n  const payer = permit2Payload.permit2Authorization.from;\n  try {\n    const tx = await signer.writeContract({\n      address: uptoProxyConfig.proxyAddress,\n      abi: uptoProxyConfig.proxyABI,\n      functionName: \"settle\",\n      args: buildUptoPermit2SettleArgs(permit2Payload, settlementAmount, facilitatorAddress),\n      dataSuffix,\n    });\n\n    const response = await waitAndReturnSettleResponse(signer, tx, payload, payer);\n    return { ...response, amount: settlementAmount.toString() };\n  } catch (error) {\n    return mapSettleError(error, payload, payer);\n  }\n}\n","import {\n  PaymentPayload,\n  PaymentRequirements,\n  SchemeNetworkFacilitator,\n  FacilitatorContext,\n  SettleResponse,\n  VerifyResponse,\n} from \"@x402/core/types\";\nimport { FacilitatorEvmSigner } from \"../../signer\";\nimport { UptoPermit2Payload, isUptoPermit2Payload } from \"../../types\";\nimport { verifyUptoPermit2, settleUptoPermit2 } from \"./permit2\";\n\n/**\n * EVM facilitator implementation for the Upto payment scheme.\n * Handles verification and settlement of Permit2-based payments.\n */\nexport class UptoEvmScheme implements SchemeNetworkFacilitator {\n  readonly scheme = \"upto\";\n  readonly caipFamily = \"eip155:*\";\n\n  /**\n   * Creates a new UptoEvmScheme facilitator instance.\n   *\n   * @param signer - The EVM signer for facilitator operations\n   */\n  constructor(private readonly signer: FacilitatorEvmSigner) {}\n\n  /**\n   * Returns extra metadata required by the upto scheme, including the facilitator address.\n   *\n   * @param _ - The network identifier (unused)\n   * @returns Object with facilitatorAddress, or undefined if no signer addresses are available\n   */\n  getExtra(_: string): Record<string, unknown> | undefined {\n    const addresses = this.signer.getAddresses();\n    if (addresses.length === 0) {\n      return undefined;\n    }\n    return { facilitatorAddress: addresses[Math.floor(Math.random() * addresses.length)] };\n  }\n\n  /**\n   * Returns the list of facilitator signer addresses for the upto scheme.\n   *\n   * @param _ - The network identifier (unused)\n   * @returns Array of facilitator signer addresses\n   */\n  getSigners(_: string): string[] {\n    return [...this.signer.getAddresses()];\n  }\n\n  /**\n   * Verifies an upto Permit2 payment payload against the given requirements.\n   *\n   * @param payload - The payment payload to verify\n   * @param requirements - The payment requirements to verify against\n   * @param context - Optional facilitator context\n   * @param _ - Payment required extensions (unused; reserved for interface parity)\n   * @returns Promise resolving to a verification response\n   */\n  async verify(\n    payload: PaymentPayload,\n    requirements: PaymentRequirements,\n    context?: FacilitatorContext,\n    _?: Record<string, unknown>,\n  ): Promise<VerifyResponse> {\n    const rawPayload = payload.payload as Record<string, unknown>;\n    if (!isUptoPermit2Payload(rawPayload)) {\n      return { isValid: false, invalidReason: \"unsupported_payload_type\", payer: \"\" };\n    }\n    return verifyUptoPermit2(\n      this.signer,\n      payload,\n      requirements,\n      rawPayload as UptoPermit2Payload,\n      context,\n    );\n  }\n\n  /**\n   * Settles an upto Permit2 payment on-chain.\n   *\n   * @param payload - The payment payload to settle\n   * @param requirements - The payment requirements\n   * @param context - Optional facilitator context\n   * @returns Promise resolving to a settlement response\n   */\n  async settle(\n    payload: PaymentPayload,\n    requirements: PaymentRequirements,\n    context?: FacilitatorContext,\n  ): Promise<SettleResponse> {\n    const rawPayload = payload.payload as Record<string, unknown>;\n    if (!isUptoPermit2Payload(rawPayload)) {\n      return {\n        success: false,\n        network: payload.accepted.network,\n        transaction: \"\",\n        errorReason: \"unsupported_payload_type\",\n        payer: \"\",\n      };\n    }\n    return settleUptoPermit2(\n      this.signer,\n      payload,\n      requirements,\n      rawPayload as UptoPermit2Payload,\n      context,\n    );\n  }\n}\n"],"mappings":"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","names":["simOk"]}