{"version":3,"sources":["../src/x402.ts","../src/x402-config.ts","../src/x402-eip3009.ts","../src/x402-fromServer.ts","../src/x402-signer.ts","../src/x402-types.ts"],"sourcesContent":["import axios from \"axios\";\nimport type { NextFunction, Request, Response } from \"express\";\nimport { build402Response, getLoadedCA } from \"./x402-config\";\nimport {\n  decodePaymentHeader,\n  verifyTransferAuthorization,\n} from \"./x402-eip3009\";\nimport { getKeys } from \"./x402-fromServer\";\nimport { QuoteSigner } from \"./x402-signer\";\nimport type { ContractAddresses } from \"./x402-types\";\n\n// Default constants\nexport let DEFAULT_REQUIRED_PAYMENT_AMOUNT = BigInt(\"1000\"); // 0.001 USDC\nexport const NETWORK = \"arbitrum-sepolia\";\nexport const ARBITRUM_SEPOLIA_CHAIN_ID = 421614;\nexport const GAS_PRICE_MULTIPLIER = 1.2;\nexport const MAX_GAS_PRICE_GWEI = 100;\nexport const API_BASE_URL = \"https://xarbi-be1.vercel.app\";\n\n// Global state (initialized once)\n\nexport let addresses: ContractAddresses | null = null;\n\ninterface X402MiddlewareOptions {\n  merchantId: string;\n  minPaymentAmount?: bigint;\n  settlementUrl?: string;\n  network?: string;\n  chainId?: number;\n}\n\nexport async function x402Middleware(options: X402MiddlewareOptions) {\n  return async (req: Request, res: Response, next: NextFunction) => {\n    const {\n      merchantId,\n      minPaymentAmount = DEFAULT_REQUIRED_PAYMENT_AMOUNT,\n      settlementUrl = `${API_BASE_URL}/settlement`,\n      network = NETWORK,\n      chainId = ARBITRUM_SEPOLIA_CHAIN_ID,\n    } = options;\n\n    DEFAULT_REQUIRED_PAYMENT_AMOUNT = minPaymentAmount;\n    const keys = await getKeys(merchantId);\n    const signer = new QuoteSigner(keys.privateKey);\n\n    try {\n      // Initialize contract addresses if not already loaded\n      if (addresses === null) {\n        addresses = (await getLoadedCA()) as ContractAddresses;\n      }\n\n      //@ts-ignore bun shit\n      const paymentHeader = req.headers[\"x-payment\"] as string;\n\n      // === 1️⃣ No payment header → return 402\n      if (!paymentHeader) {\n        return res\n          .status(402)\n          .json(\n            build402Response(\n              req.url,\n              \"Payment Required\",\n              addresses,\n              keys.publicKey\n            )\n          );\n      }\n\n      // === 2️⃣ Decode payment\n      const paymentPayload = decodePaymentHeader(paymentHeader);\n      if (!paymentPayload) {\n        return res\n          .status(402)\n          .json(\n            build402Response(\n              req.path,\n              \"Invalid X-Payment header format\",\n              addresses,\n              keys.publicKey\n            )\n          );\n      }\n\n      // === 3️⃣ Check network + scheme\n      if (\n        paymentPayload.scheme !== \"exact\" ||\n        paymentPayload.network !== network\n      ) {\n        return res\n          .status(402)\n          .json(\n            build402Response(\n              req.path,\n              \"Unsupported payment scheme or network\",\n              addresses,\n              keys.publicKey\n            )\n          );\n      }\n\n      // === 4️⃣ Check amount\n      const paymentAmount = BigInt(paymentPayload.payload.value);\n      if (paymentAmount < minPaymentAmount) {\n        return res\n          .status(402)\n          .json(\n            build402Response(\n              req.url,\n              \"Insufficient payment amount\",\n              addresses,\n              keys.publicKey\n            )\n          );\n      }\n\n      // === 5️⃣ Check recipient\n      if (\n        paymentPayload.payload.to.toLowerCase() !==\n        signer.getAddress().toLowerCase()\n      ) {\n        return res\n          .status(402)\n          .json(\n            build402Response(\n              req.url,\n              \"Payment recipient mismatch\",\n              addresses,\n              keys.publicKey\n            )\n          );\n      }\n\n      // === 6️⃣ Verify signature (EIP-3009)\n      const authorization = {\n        from: paymentPayload.payload.from,\n        to: paymentPayload.payload.to,\n        value: paymentPayload.payload.value,\n        validAfter: paymentPayload.payload.validAfter,\n        validBefore: paymentPayload.payload.validBefore,\n        nonce: paymentPayload.payload.nonce,\n      };\n\n      const signature = {\n        v: paymentPayload.payload.v,\n        r: paymentPayload.payload.r,\n        s: paymentPayload.payload.s,\n      };\n\n      const recoveredSigner = await verifyTransferAuthorization(\n        authorization,\n        signature,\n        addresses.usdc,\n        \"TestUSDC\",\n        \"1\",\n        chainId\n      );\n\n      if (\n        !recoveredSigner ||\n        recoveredSigner.toLowerCase() !==\n          paymentPayload.payload.from.toLowerCase()\n      ) {\n        return res\n          .status(402)\n          .json(\n            build402Response(\n              req.path,\n              \"Invalid payment signature\",\n              addresses,\n              keys.publicKey\n            )\n          );\n      }\n\n      // === 7️⃣ Time window validation\n      const now = Math.floor(Date.now() / 1000);\n      if (\n        now < paymentPayload.payload.validAfter ||\n        now > paymentPayload.payload.validBefore\n      ) {\n        return res\n          .status(402)\n          .json(\n            build402Response(\n              req.path,\n              \"Payment authorization expired or not yet valid\",\n              addresses,\n              keys.publicKey\n            )\n          );\n      }\n\n      // === 8️⃣ Submit payment to settlement service\n      const response = await axios.post(settlementUrl, paymentPayload, {\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"merchant-id\": merchantId,\n        },\n      });\n\n      const { sucess, transactionHash } = response.data.result;\n\n      // === 9️⃣ Attach payment info to request\n      (req as any).paymentInfo = {\n        from: paymentPayload.payload.from,\n        amount: paymentPayload.payload.value,\n        token: addresses.usdc,\n        settled: sucess,\n        transactionHash: transactionHash || null,\n      };\n\n      // === 🔟 Add X-Payment-Response header (for x402 spec)\n      const paymentResponse = {\n        status: sucess ? \"completed\" : \"verified\",\n        transactionHash: transactionHash || null,\n        amount: paymentPayload.payload.value,\n        token: addresses.usdc,\n        settled: sucess,\n      };\n\n      res.setHeader(\n        \"X-Payment-Response\",\n        Buffer.from(JSON.stringify(paymentResponse)).toString(\"base64\")\n      );\n\n      // Pass control to next handler\n      next();\n    } catch (err) {\n      console.error(\"x402Middleware error:\", err);\n      res.status(500).json({ error: \"Internal server error\" });\n    }\n  };\n}\n","import axios from \"axios\";\nimport { API_BASE_URL, DEFAULT_REQUIRED_PAYMENT_AMOUNT, NETWORK } from \"./x402\";\nimport type { ContractAddresses } from \"./x402-types\";\n\nexport function build402Response(\n  resource: string,\n  error: string,\n  addresses: ContractAddresses,\n  merchantAddressPublicKey: `0x${string}`\n) {\n  return {\n    x402Version: 1,\n    error,\n    accepts: [\n      {\n        scheme: \"exact\",\n        network: NETWORK,\n        maxAmountRequired: DEFAULT_REQUIRED_PAYMENT_AMOUNT.toString(),\n        resource,\n        description: `Payment required to access ${resource}`,\n        mimeType: \"application/json\",\n        payTo: merchantAddressPublicKey,\n        maxTimeoutSeconds: 300,\n        asset: addresses.usdc,\n        extra: { name: \"TestUSDC\", version: \"1\" },\n      },\n    ],\n    facilitator: { url: \"https://xarbi-be1.vercel.app\" },\n  };\n}\n\nexport async function getLoadedCA() {\n  const response = await axios.get(`${API_BASE_URL}/ca`);\n  return response.data;\n}\n","import {\n  encodeAbiParameters,\n  encodePacked,\n  keccak256,\n  parseAbiParameters,\n  recoverAddress,\n  type Address,\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport type {\n  EIP3009Authorization,\n  EIP3009PaymentPayload,\n  EIP3009Signature,\n} from \"./x402-types\";\n\n/**\n * EIP-3009 Transfer with Authorization utilities\n * Implements the x402 payment scheme for EVM chains\n */\n\nconst EIP3009_TYPEHASH = keccak256(\n  encodePacked(\n    [\"string\"],\n    [\n      \"TransferWithAuthorization(address from,address to,uint256 value,uint256 validAfter,uint256 validBefore,bytes32 nonce)\",\n    ]\n  )\n);\n\n/**\n * Create EIP-712 domain separator for a token contract\n */\nexport function createDomainSeparator(\n  tokenAddress: Address,\n  tokenName: string,\n  tokenVersion: string,\n  chainId: number\n): `0x${string}` {\n  const domainTypeHash = keccak256(\n    encodePacked(\n      [\"string\"],\n      [\n        \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\",\n      ]\n    )\n  );\n\n  return keccak256(\n    encodeAbiParameters(\n      parseAbiParameters(\"bytes32, bytes32, bytes32, uint256, address\"),\n      [\n        domainTypeHash,\n        keccak256(encodePacked([\"string\"], [tokenName])),\n        keccak256(encodePacked([\"string\"], [tokenVersion])),\n        BigInt(chainId),\n        tokenAddress,\n      ]\n    )\n  );\n}\n\n/**\n * Sign an EIP-3009 transfer authorization\n */\nexport async function signTransferAuthorization(\n  authorization: EIP3009Authorization,\n  tokenAddress: Address,\n  tokenName: string,\n  tokenVersion: string,\n  chainId: number,\n  privateKey: `0x${string}`\n): Promise<EIP3009Signature> {\n  const account = privateKeyToAccount(privateKey);\n\n  const structHash = keccak256(\n    encodeAbiParameters(\n      parseAbiParameters(\n        \"bytes32, address, address, uint256, uint256, uint256, bytes32\"\n      ),\n      [\n        EIP3009_TYPEHASH,\n        authorization.from,\n        authorization.to,\n        BigInt(authorization.value),\n        BigInt(authorization.validAfter),\n        BigInt(authorization.validBefore),\n        authorization.nonce,\n      ]\n    )\n  );\n\n  // Create domain separator\n  const domainSeparator = createDomainSeparator(\n    tokenAddress,\n    tokenName,\n    tokenVersion,\n    chainId\n  );\n\n  // Create digest\n  const digest = keccak256(\n    encodePacked(\n      [\"string\", \"bytes32\", \"bytes32\"],\n      [\"\\x19\\x01\", domainSeparator, structHash]\n    )\n  );\n\n  // Sign the digest\n  const signature = await account.signTypedData({\n    domain: {\n      name: tokenName,\n      version: tokenVersion,\n      chainId: chainId,\n      verifyingContract: tokenAddress,\n    },\n    types: {\n      TransferWithAuthorization: [\n        { name: \"from\", type: \"address\" },\n        { name: \"to\", type: \"address\" },\n        { name: \"value\", type: \"uint256\" },\n        { name: \"validAfter\", type: \"uint256\" },\n        { name: \"validBefore\", type: \"uint256\" },\n        { name: \"nonce\", type: \"bytes32\" },\n      ],\n    },\n    primaryType: \"TransferWithAuthorization\",\n    message: {\n      from: authorization.from,\n      to: authorization.to,\n      value: BigInt(authorization.value),\n      validAfter: BigInt(authorization.validAfter),\n      validBefore: BigInt(authorization.validBefore),\n      nonce: authorization.nonce,\n    },\n  });\n\n  // Parse signature into v, r, s for x402 payment payload\n  const r = signature.slice(0, 66) as `0x${string}`;\n  const s = `0x${signature.slice(66, 130)}` as `0x${string}`;\n  const v = parseInt(signature.slice(130, 132), 16);\n\n  return { v, r, s };\n}\n\n/**\n * Create a complete x402 payment payload for EIP-3009\n */\nexport async function createX402PaymentPayload(\n  authorization: EIP3009Authorization,\n  tokenAddress: Address,\n  tokenName: string,\n  tokenVersion: string,\n  chainId: number,\n  privateKey: `0x${string}`\n): Promise<EIP3009PaymentPayload> {\n  const signature = await signTransferAuthorization(\n    authorization,\n    tokenAddress,\n    tokenName,\n    tokenVersion,\n    chainId,\n    privateKey\n  );\n\n  return {\n    x402Version: 1,\n    scheme: \"exact\",\n    network: \"arbitrum-sepolia\",\n    payload: {\n      from: authorization.from,\n      to: authorization.to,\n      value: authorization.value,\n      validAfter: authorization.validAfter,\n      validBefore: authorization.validBefore,\n      nonce: authorization.nonce,\n      v: signature.v,\n      r: signature.r,\n      s: signature.s,\n    },\n  };\n}\n\n/**\n * Encode payment payload as base64 for X-PAYMENT header\n */\nexport function encodePaymentHeader(payload: EIP3009PaymentPayload): string {\n  return Buffer.from(JSON.stringify(payload)).toString(\"base64\");\n}\n\n/**\n * Decode payment payload from X-PAYMENT header\n */\nexport function decodePaymentHeader(\n  header: string\n): EIP3009PaymentPayload | null {\n  try {\n    const decoded = Buffer.from(header, \"base64\").toString(\"utf-8\");\n    const payload = JSON.parse(decoded) as EIP3009PaymentPayload;\n\n    // Validate required fields\n    if (\n      !payload.x402Version ||\n      !payload.scheme ||\n      !payload.network ||\n      !payload.payload ||\n      !payload.payload.from ||\n      !payload.payload.to ||\n      !payload.payload.value ||\n      payload.payload.validAfter === undefined ||\n      payload.payload.validBefore === undefined ||\n      !payload.payload.nonce ||\n      payload.payload.v === undefined ||\n      !payload.payload.r ||\n      !payload.payload.s\n    ) {\n      return null;\n    }\n\n    return payload;\n  } catch (error) {\n    console.error(\"Failed to decode payment header:\", error);\n    return null;\n  }\n}\n\n/**\n * Verify an EIP-3009 signature and recover the signer address\n */\nexport async function verifyTransferAuthorization(\n  authorization: EIP3009Authorization,\n  signature: EIP3009Signature,\n  tokenAddress: Address,\n  tokenName: string,\n  tokenVersion: string,\n  chainId: number\n): Promise<Address | null> {\n  try {\n    // Validate signature format\n    if (signature.v !== 27 && signature.v !== 28) {\n      console.error(\"Invalid signature v value:\", signature.v);\n      return null;\n    }\n\n    // Create struct hash must match signing\n    const structHash = keccak256(\n      encodeAbiParameters(\n        parseAbiParameters(\n          \"bytes32, address, address, uint256, uint256, uint256, bytes32\"\n        ),\n        [\n          EIP3009_TYPEHASH,\n          authorization.from,\n          authorization.to,\n          BigInt(authorization.value),\n          BigInt(authorization.validAfter),\n          BigInt(authorization.validBefore),\n          authorization.nonce,\n        ]\n      )\n    );\n\n    // Create domain separator\n    const domainSeparator = createDomainSeparator(\n      tokenAddress,\n      tokenName,\n      tokenVersion,\n      chainId\n    );\n\n    // Create digest\n    const digest = keccak256(\n      encodePacked(\n        [\"string\", \"bytes32\", \"bytes32\"],\n        [\"\\x19\\x01\", domainSeparator, structHash]\n      )\n    );\n\n    // Recover signer address\n    const recoveredAddress = await recoverAddressFromDigest(digest, signature);\n\n    return recoveredAddress;\n  } catch (error) {\n    console.error(\"Failed to verify signature:\", error);\n    return null;\n  }\n}\n\n/**\n * Recover address from digest and signature\n */\nasync function recoverAddressFromDigest(\n  digest: `0x${string}`,\n  signature: EIP3009Signature\n): Promise<Address | null> {\n  try {\n    // Convert signature components to proper format\n    const r = BigInt(signature.r);\n    const s = BigInt(signature.s);\n    const v = signature.v;\n\n    // Validate signature parameters\n    // Using secp256k1 curve order\n    const secp256k1N = BigInt(\n      \"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\"\n    );\n    const secp256k1halfN = secp256k1N / 2n;\n\n    if (s > secp256k1halfN) {\n      // Invalid signature - s value too high (malleable signature)\n      return null;\n    }\n\n    if (r === 0n || s === 0n) {\n      return null;\n    }\n\n    // Use viem's built-in signature recovery\n    // recoverAddress expects the hash and signature\n    const fullSignature = `${signature.r}${signature.s.slice(2)}${v\n      .toString(16)\n      .padStart(2, \"0\")}` as `0x${string}`;\n\n    // The digest is already the full EIP-712 hash, so we use it directly\n    const recoveredAddress = recoverAddress({\n      hash: digest,\n      signature: fullSignature,\n    });\n\n    return await recoveredAddress;\n  } catch (error) {\n    console.error(\"Failed to recover address:\", error);\n    return null;\n  }\n}\n\n/**\n * Generate a random nonce for EIP-3009\n */\nexport function generateNonce(): `0x${string}` {\n  const randomBytes = new Uint8Array(32);\n  crypto.getRandomValues(randomBytes);\n  return `0x${Array.from(randomBytes)\n    .map((b) => b.toString(16).padStart(2, \"0\"))\n    .join(\"\")}` as `0x${string}`;\n}\n","import axios from \"axios\";\nimport { API_BASE_URL } from \"./x402\";\n\nlet privateKey: `0x${string}`;\nlet publicKey: `0x${string}`;\n\nexport async function getKeys(\n  merchantID: string\n): Promise<{ publicKey: `0x${string}`; privateKey: `0x${string}` }> {\n  // If we already have it cached, return it immediately\n\n  try {\n    const response = await axios.get(`${API_BASE_URL}/merchantKey`, {\n      headers: {\n        \"merchant-id\": merchantID,\n      },\n    });\n\n    privateKey = response.data.privateKey;\n    publicKey = response.data.publicKey;\n    // console.log(\"✅ Private key cached in memory\");\n\n    return {\n      publicKey,\n      privateKey,\n    };\n  } catch (error) {\n    console.error(\"Failed to fetch merchant key:\", error);\n    throw new Error(\"Failed to fetch merchant key\");\n  }\n}\n","import { encodePacked, keccak256 } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { ARBITRUM_SEPOLIA_CHAIN_ID } from \"./x402\";\nimport { EIP712_DOMAIN, EIP712_TYPES, type QuoteStruct } from \"./x402-types\";\n\nexport class QuoteSigner {\n  private account: ReturnType<typeof privateKeyToAccount>;\n\n  constructor(privateKey: `0x${string}`) {\n    this.account = privateKeyToAccount(privateKey);\n  }\n\n  /**\n   * Sign a quote using EIP-712\n   */\n  async signQuote(\n    quote: QuoteStruct,\n    verifyingContract: `0x${string}`\n  ): Promise<{\n    signature: `0x${string}`;\n    signer: `0x${string}`;\n  }> {\n    // Create EIP-712 domain with the verifying contract\n    const domain = {\n      ...EIP712_DOMAIN,\n      chainId: ARBITRUM_SEPOLIA_CHAIN_ID,\n      verifyingContract,\n    };\n\n    // Sign the typed data\n    const signature = await this.account.signTypedData({\n      domain,\n      types: EIP712_TYPES,\n      primaryType: \"Quote\",\n      message: quote,\n    });\n\n    return {\n      signature,\n      signer: this.account.address,\n    };\n  }\n\n  /**\n   * Get the signer address\n   */\n  getAddress(): `0x${string}` {\n    return this.account.address;\n  }\n\n  /**\n   * Compute intent hash from canonical JSON\n   */\n  computeIntentHash(intent: any): `0x${string}` {\n    const canonical = JSON.stringify(intent, Object.keys(intent).sort());\n    return keccak256(encodePacked([\"string\"], [canonical]));\n  }\n}\n","import type { Address } from \"viem\";\nimport { z } from \"zod\";\n\n// EIP-3009 Transfer with Authorization types\nexport interface EIP3009Authorization {\n  from: Address;\n  to: Address;\n  value: string;\n  validAfter: number;\n  validBefore: number;\n  nonce: `0x${string}`;\n}\n\nexport interface EIP3009Signature {\n  v: number;\n  r: `0x${string}`;\n  s: `0x${string}`;\n}\n\nexport interface EIP3009PaymentPayload {\n  x402Version: number;\n  scheme: \"exact\";\n  network: \"arbitrum-sepolia\";\n  payload: {\n    from: Address;\n    to: Address;\n    value: string;\n    validAfter: number;\n    validBefore: number;\n    nonce: `0x${string}`;\n    v: number;\n    r: `0x${string}`;\n    s: `0x${string}`;\n  };\n}\n\n// X402 Payment Requirements\nexport interface X402PaymentRequirement {\n  scheme: \"exact\";\n  network: \"arbitrum-sepolia\";\n  maxAmountRequired: string;\n  resource: string;\n  description: string;\n  mimeType: string;\n  outputSchema?: object | null;\n  payTo: string;\n  maxTimeoutSeconds: number;\n  asset: string; // Token contract address\n  extra: {\n    name: string;\n    version: string;\n  } | null;\n}\n\n// Zod schemas for validation\nexport const PaymentSwapQuoteIntentSchema = z.object({\n  type: z.literal(\"payment.swap.quote.intent\"),\n  from: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n  sell: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n  buy: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n  sellAmount: z.string(),\n  maxSlippageBps: z.number().min(0).max(10000),\n  recipient: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n  deadline: z.number(),\n  chainId: z.number(),\n  nonce: z.string().regex(/^0x[a-fA-F0-9]{64}$/),\n});\n\nexport const PaymentSwapQuoteAttestationSchema = z.object({\n  type: z.literal(\"payment.swap.quote.attestation\"),\n  route: z.object({\n    venues: z.array(z.string()),\n    expected_out: z.string(),\n    ttl: z.number(),\n  }),\n  constraints: z.object({\n    max_fee_bps: z.number(),\n  }),\n  signature: z.string().regex(/^0x[a-fA-F0-9]{130}$/),\n  signer: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n  intent_hash: z.string().regex(/^0x[a-fA-F0-9]{64}$/),\n  quote: z.object({\n    from: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n    sell: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n    buy: z.string().regex(/^0x[a-fA-F0-9]{40}$/),\n    sellAmount: z.string(),\n    minBuy: z.string(),\n    deadline: z.number(),\n    chainId: z.number(),\n    nonce: z.string().regex(/^0x[a-fA-F0-9]{64}$/),\n  }),\n});\n\n// TypeScript types\nexport type PaymentSwapQuoteIntent = z.infer<\n  typeof PaymentSwapQuoteIntentSchema\n>;\nexport type PaymentSwapQuoteAttestation = z.infer<\n  typeof PaymentSwapQuoteAttestationSchema\n>;\n\n// EIP-712 Quote struct\nexport interface QuoteStruct {\n  from: Address;\n  sell: Address;\n  buy: Address;\n  sellAmount: bigint;\n  minBuy: bigint;\n  deadline: bigint;\n  chainId: bigint;\n  nonce: `0x${string}`;\n}\n\n// Contract addresses type\nexport interface ContractAddresses {\n  usdc: Address;\n  weth: Address;\n  quoteRegistry: Address;\n  mockAdapter: Address;\n  executor: Address;\n  quoteServiceSigner: Address;\n}\n\n// CLI options\nexport interface SwapOptions {\n  sell: string;\n  buy: string;\n  amount: string;\n  maxSlippage: string;\n  recipient?: string;\n}\n\n// EIP-712 domain and types\nexport const EIP712_DOMAIN = {\n  name: \"X402Quote\",\n  version: \"1\",\n  chainId: 421614, // Arbitrum Sepolia\n} as const;\n\nexport const EIP712_TYPES = {\n  Quote: [\n    { name: \"from\", type: \"address\" },\n    { name: \"sell\", type: \"address\" },\n    { name: \"buy\", type: \"address\" },\n    { name: \"sellAmount\", type: \"uint256\" },\n    { name: \"minBuy\", type: \"uint256\" },\n    { name: \"deadline\", type: \"uint256\" },\n    { name: \"chainId\", type: \"uint256\" },\n    { name: \"nonce\", type: \"bytes32\" },\n  ],\n} as const;\n"],"mappings":"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","names":["axios","addresses","axios","axios","encodePacked","keccak256","privateKeyToAccount","privateKey","privateKeyToAccount","keccak256","encodePacked","axios"]}