{"version":3,"file":"swaps.mjs","names":["permissions: Permission[]","permissions","postCowOrder","sellTokenSourceMap: Record<string, SellTokenSource>","buyTokenDestinationMap: Record<string, BuyTokenDestination>","priceQualityMap: Record<string, PriceQuality>","sellTokenSourceMap","buyTokenDestinationMap","sellTokenSourceMap: Record<string, SellTokenSource>","buyTokenDestinationMap: Record<string, BuyTokenDestination>","postCowOrderApi"],"sources":["../src/swaps/allowCowOrderSigning.ts","../src/swaps/appData.ts","../src/swaps/cowOrderbookApi.ts","../src/swaps/getCowQuote.ts","../src/swaps/encodeSignOrder.ts","../src/swaps/signCowOrder.ts","../src/swaps/postCowOrder.ts","../src/swaps/types.ts"],"sourcesContent":["import { id } from \"ethers\"\nimport { c, forAll, Permission } from \"zodiac-roles-sdk\"\nimport {\n  WRAPPED_NATIVE_CURRENCIES,\n  COW_PROTOCOL_VAULT_RELAYER_ADDRESS,\n} from \"@cowprotocol/sdk-config\"\nimport { SupportedChainId } from \"./types\"\n\nconst cowOrderSigner = \"0x23dA9AdE38E4477b23770DeD512fD37b12381FAB\" as const\n\n/**\n * Returns permissions allowing the avatar to sign the specified CowSwap orders.\n *\n * When \"native\" is specified in the sell or buy arrays, the function automatically:\n * - Replaces \"native\" with the chain's wrapped native token (e.g., WETH) for order signing\n * - Adds WETH.deposit() permission when native is in sell (to wrap native tokens before selling)\n * - Adds WETH.withdraw() permission when native is in buy (to unwrap received tokens)\n */\nexport const allowCowOrderSigning = ({\n  chainId,\n  sell,\n  buy,\n  receiver,\n  approveAllowance,\n  buyAllowance,\n  sellAllowance,\n  allowBalancerBalanceAccess,\n}: {\n  /** The chain ID where the swap will be executed. */\n  chainId: SupportedChainId\n\n  sell: (`0x${string}` | \"native\")[]\n  buy: (`0x${string}` | \"native\")[]\n\n  /** Defaults to the avatar of the Roles Modifier. */\n  receiver?: `0x${string}`\n\n  /** Allowance key to restrict approve amounts across sell tokens. If not provided, infinite approvals are allowed. */\n  approveAllowance?: `0x${string}`\n  /** Allowance key to restrict buy amount within allowance. If not provided, no buy amount restriction is applied. */\n  buyAllowance?: `0x${string}`\n  /** Allowance key to restrict sell amount within allowance. If not provided, no sell amount restriction is applied. */\n  sellAllowance?: `0x${string}`\n\n  /** If set to true, swaps can withdraw and deposit Balancer internal token balances of the avatar. */\n  allowBalancerBalanceAccess?: boolean\n}): Permission[] => {\n  const gpV2VaultRelayer = COW_PROTOCOL_VAULT_RELAYER_ADDRESS[\n    chainId\n  ] as `0x${string}`\n  const wrappedNativeToken = WRAPPED_NATIVE_CURRENCIES[chainId].address as `0x${string}`\n\n  const sellIncludesNative = sell.includes(\"native\")\n  const buyIncludesNative = buy.includes(\"native\")\n\n  // Replace \"native\" with the wrapped native token address\n  const resolveTokens = (tokens: (`0x${string}` | \"native\")[]): `0x${string}`[] =>\n    tokens.map((token) => {\n      if (token === \"native\") {\n        return wrappedNativeToken\n      }\n      return token\n    })\n\n  // Throw if sell and buy are identical single-element arrays (swapping a token into itself is not possible)\n  if (\n    sell.length === 1 &&\n    buy.length === 1 &&\n    ((sell[0] === \"native\" && buy[0] === \"native\") ||\n      (sell[0] !== \"native\" &&\n        buy[0] !== \"native\" &&\n        sell[0].toLowerCase() === buy[0].toLowerCase()))\n  ) {\n    throw new Error(\"Cannot swap a token into itself\")\n  }\n\n  const sellTokens = resolveTokens(sell)\n  const buyTokens = resolveTokens(buy)\n\n  // Check if all tokens are native or wrapped native\n  const isOnlyNativeOrWrapped = (tokens: (`0x${string}` | \"native\")[]) =>\n    tokens.every(\n      (token) =>\n        token === \"native\" ||\n        token.toLowerCase() === wrappedNativeToken.toLowerCase()\n    )\n\n  // If both sell and buy tokens are only native/wrapped native, skip signOrder, approve, and unsignOrder permissions\n  if (isOnlyNativeOrWrapped(sell) && isOnlyNativeOrWrapped(buy)) {\n    const permissions: Permission[] = []\n\n    // Add WETH.deposit() permission when selling native tokens\n    if (sellIncludesNative && wrappedNativeToken) {\n      permissions.push({\n        targetAddress: wrappedNativeToken,\n        signature: \"deposit()\",\n        send: true,\n      })\n    }\n\n    // Add WETH.withdraw() permission when buying native tokens\n    if (buyIncludesNative && wrappedNativeToken) {\n      permissions.push({\n        targetAddress: wrappedNativeToken,\n        signature: \"withdraw(uint256)\",\n      })\n    }\n\n    return permissions\n  }\n\n  const permissions: Permission[] = [\n    ...allowErc20Approve(sellTokens, gpV2VaultRelayer, approveAllowance),\n    {\n      targetAddress: cowOrderSigner,\n      signature:\n        \"signOrder((address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32),uint32,uint256)\",\n      condition: c.calldataMatches(\n        [\n          c.matches({\n            sellToken: oneOf(sellTokens),\n            buyToken: oneOf(buyTokens),\n            receiver: receiver ? receiver : c.avatar,\n            buyAmount: buyAllowance\n              ? c.withinAllowance(buyAllowance)\n              : undefined,\n            sellAmount: sellAllowance\n              ? c.withinAllowance(sellAllowance)\n              : undefined,\n            sellTokenBalance: allowBalancerBalanceAccess\n              ? undefined\n              : c.eq(id(\"erc20\")),\n            buyTokenBalance: allowBalancerBalanceAccess\n              ? undefined\n              : c.eq(id(\"erc20\")),\n          }),\n        ],\n        [\n          \"(address sellToken, address buyToken, address receiver, uint256 sellAmount, uint256 buyAmount, uint32 validTo, bytes32 appData, uint256 feeAmount, bytes32 kind, bool partiallyFillable, bytes32 sellTokenBalance, bytes32 buyTokenBalance)\",\n          \"uint32\",\n          \"uint256\",\n        ]\n      ),\n      delegatecall: true,\n    },\n    {\n      targetAddress: cowOrderSigner,\n      signature:\n        \"unsignOrder((address,address,address,uint256,uint256,uint32,bytes32,uint256,bytes32,bool,bytes32,bytes32))\",\n      condition: c.calldataMatches(\n        [\n          c.matches({\n            sellToken: oneOf(sellTokens),\n            buyToken: oneOf(buyTokens),\n            receiver: receiver ? receiver : c.avatar,\n          }),\n        ],\n        [\n          \"(address sellToken, address buyToken, address receiver, uint256 sellAmount, uint256 buyAmount, uint32 validTo, bytes32 appData, uint256 feeAmount, bytes32 kind, bool partiallyFillable, bytes32 sellTokenBalance, bytes32 buyTokenBalance)\",\n        ]\n      ),\n      delegatecall: true,\n    },\n  ]\n\n  // Add WETH.deposit() permission when selling native tokens\n  if (sellIncludesNative && wrappedNativeToken) {\n    permissions.push({\n      targetAddress: wrappedNativeToken,\n      signature: \"deposit()\",\n      send: true,\n    })\n  }\n\n  // Add WETH.withdraw() permission when buying native tokens\n  if (buyIncludesNative && wrappedNativeToken) {\n    permissions.push({\n      targetAddress: wrappedNativeToken,\n      signature: \"withdraw(uint256)\",\n    })\n  }\n\n  return permissions\n}\n\nconst allowErc20Approve = (\n  tokens: readonly `0x${string}`[],\n  spender: `0x${string}`,\n  allowanceKey?: `0x${string}`\n) =>\n  forAll(tokens, {\n    signature: \"approve(address,uint256)\",\n    condition: c.calldataMatches(\n      [spender, allowanceKey ? c.withinAllowance(allowanceKey) : undefined],\n      [\"address\", \"uint256\"]\n    ),\n  })\n\nconst oneOf = (values: string[]) =>\n  values.length === 0\n    ? undefined\n    : values.length === 1\n      ? c.eq(values[0])\n      : c.or(...(values as [string, string, ...string[]]))\n","import { ChainId } from \"../main/types\"\nimport { fetchLicense, License } from \"zodiac-roles-sdk\"\nimport { AdvancedOptions } from \"./types\"\n\ninterface AppData {\n  version: \"1.3.0\"\n  appCode?: string\n  environment?: string\n  metadata: {\n    quote?: {\n      slippageBips: number\n      smartSlippage?: boolean\n    }\n    orderClass?: {\n      orderClass: \"market\" | \"limit\" | \"liquidity\" | \"twap\"\n    }\n    partnerFee?: {\n      bps: number\n      recipient: `0x${string}`\n    }\n  }\n}\n\nconst zodiacOsSafe = \"0x3ec84da3A9bCed9767490c198E69Aa216A35Df12\"\n\nconst defaultAppData = {\n  version: \"1.3.0\",\n  appCode: \"Zodiac Roles SDK\",\n  environment: \"production\",\n  metadata: {},\n} satisfies AppData\n\ninterface Props {\n  chainId: ChainId\n  owner: `0x${string}`\n}\n\nexport const defaultAdvancedOptions: AdvancedOptions = {}\n\nexport const makeAppData = async (\n  { chainId, owner }: Props,\n  advancedOptions: AdvancedOptions = {}\n) => {\n  const license = owner && (await fetchLicense({ chainId, owner }))\n\n  if (license === License.Enterprise) {\n    return JSON.stringify({\n      ...defaultAppData,\n      appCode: advancedOptions.appCode ?? defaultAppData.appCode,\n      environment: advancedOptions.environment ?? defaultAppData.environment,\n    })\n  }\n\n  return JSON.stringify({\n    ...defaultAppData,\n    appCode: advancedOptions.appCode ?? defaultAppData.appCode,\n    environment: advancedOptions.environment ?? defaultAppData.environment,\n    metadata: {\n      partnerFee: {\n        bps: 25,\n        recipient: zodiacOsSafe,\n      },\n    },\n  })\n}\n\nexport const validateAppData = async (\n  { chainId, owner }: Props,\n  appData: string\n) => {\n  const license = owner && (await fetchLicense({ chainId, owner }))\n\n  if (license === License.Enterprise) {\n    return\n  }\n\n  const parsed = JSON.parse(appData) as AppData\n\n  if (parsed.version !== \"1.3.0\") {\n    throw new Error(\"Invalid appData version\")\n  }\n\n  if (!parsed.metadata) {\n    throw new Error(\"Missing appData metadata\")\n  }\n\n  if (\n    parsed.metadata.partnerFee?.bps !== 25 ||\n    parsed.metadata.partnerFee?.recipient !== zodiacOsSafe\n  ) {\n    throw new Error(\"Invalid appData partnerFee\")\n  }\n}\n","import {\n  OrderBookApi,\n  OrderQuoteRequest,\n  OrderQuoteResponse,\n  OrderCreation,\n} from \"@cowprotocol/sdk-order-book\"\nimport { SupportedChainId } from \"./types\"\n\n// Cache OrderBookApi instances per chainId\nconst apiCache = new Map<SupportedChainId, OrderBookApi>()\n\nfunction getOrderBookApi(chainId: SupportedChainId): OrderBookApi {\n  let api = apiCache.get(chainId)\n  if (!api) {\n    api = new OrderBookApi({ chainId })\n    apiCache.set(chainId, api)\n  }\n  return api\n}\n\n/**\n * Get a quote for a COW Protocol order\n *\n * @param chainId - The chain ID to get a quote for\n * @param request - The quote request parameters\n * @returns A promise that resolves to the quote response\n */\nexport async function getCowOrderbookQuote(\n  chainId: SupportedChainId,\n  request: OrderQuoteRequest\n): Promise<OrderQuoteResponse> {\n  const api = getOrderBookApi(chainId)\n  return api.getQuote(request)\n}\n\n/**\n * Post a signed order to the COW Protocol orderbook\n *\n * @param chainId - The chain ID to post the order to\n * @param request - The signed order request parameters\n * @returns A promise that resolves to the orderId\n */\nexport async function postCowOrder(\n  chainId: SupportedChainId,\n  request: OrderCreation\n): Promise<string> {\n  const api = getOrderBookApi(chainId)\n  return api.sendOrder(request)\n}\n","import {\n  OrderQuoteSideKindSell,\n  OrderQuoteSideKindBuy,\n  SigningScheme,\n  SellTokenSource,\n  BuyTokenDestination,\n  PriceQuality,\n  OrderQuoteRequest,\n} from \"@cowprotocol/sdk-order-book\"\nimport { makeAppData } from \"./appData\"\nimport { getCowOrderbookQuote } from \"./cowOrderbookApi\"\nimport type { AdvancedOptions, Quote, QuoteRequest } from \"./types\"\n\n// Mapping helpers for converting string options to SDK enums\nconst sellTokenSourceMap: Record<string, SellTokenSource> = {\n  erc20: SellTokenSource.ERC20,\n  internal: SellTokenSource.INTERNAL,\n  external: SellTokenSource.EXTERNAL,\n}\n\nconst buyTokenDestinationMap: Record<string, BuyTokenDestination> = {\n  erc20: BuyTokenDestination.ERC20,\n  internal: BuyTokenDestination.INTERNAL,\n}\n\nconst priceQualityMap: Record<string, PriceQuality> = {\n  fast: PriceQuality.FAST,\n  optimal: PriceQuality.OPTIMAL,\n}\n\n/**\n * Gets a quote for a CowSwap order. The result can be used as input for `signCowOrder` and `postCowOrder`.\n */\nexport const getCowQuote = async (\n  quoteRequest: QuoteRequest,\n  advancedOptions: AdvancedOptions = {}\n): Promise<Quote> => {\n  // Calculate validTo if not provided (30 minutes from now)\n  const validTo =\n    quoteRequest.validTo || Math.floor(Date.now() / 1000) + 30 * 60\n\n  const appData = await makeAppData(\n    {\n      chainId: quoteRequest.chainId,\n      owner: quoteRequest.owner,\n    },\n    advancedOptions\n  )\n\n  const quoteRequestParams = {\n    sellToken: quoteRequest.sellToken,\n    buyToken: quoteRequest.buyToken,\n    from: quoteRequest.avatar,\n    validTo,\n    receiver: quoteRequest.receiver || quoteRequest.avatar,\n    appData,\n    sellTokenBalance: quoteRequest.sellTokenBalance\n      ? sellTokenSourceMap[quoteRequest.sellTokenBalance]\n      : undefined,\n    buyTokenBalance: quoteRequest.buyTokenBalance\n      ? buyTokenDestinationMap[quoteRequest.buyTokenBalance]\n      : undefined,\n    priceQuality: quoteRequest.priceQuality\n      ? priceQualityMap[quoteRequest.priceQuality]\n      : undefined,\n    signingScheme: SigningScheme.PRESIGN,\n    ...(quoteRequest.kind === \"sell\"\n      ? {\n          kind: OrderQuoteSideKindSell.SELL,\n          sellAmountBeforeFee: quoteRequest.sellAmountBeforeFee.toString(),\n        }\n      : {\n          kind: OrderQuoteSideKindBuy.BUY,\n          buyAmountAfterFee: quoteRequest.buyAmountAfterFee.toString(),\n        }),\n  } as OrderQuoteRequest\n\n  const { quote } = await getCowOrderbookQuote(\n    quoteRequest.chainId,\n    quoteRequestParams\n  )\n\n  // it's confusing: The quote's feeAmount is something different than the feeAmount of the order (which should be generally 0)\n  const networkCostsAmount = quote.feeAmount\n\n  return {\n    sellToken: quote.sellToken as `0x${string}`,\n    buyToken: quote.buyToken as `0x${string}`,\n    receiver: (quote.receiver ?? quoteRequest.avatar) as `0x${string}`,\n    sellAmount: quote.sellAmount,\n    buyAmount: quote.buyAmount,\n    validTo: quote.validTo,\n    appData: quote.appData,\n    appDataHash: quote.appData,\n    kind: quote.kind.toLowerCase() as \"sell\" | \"buy\",\n    partiallyFillable: quote.partiallyFillable,\n    sellTokenBalance: (quote.sellTokenBalance?.toLowerCase() ??\n      \"erc20\") as \"erc20\" | \"external\" | \"internal\",\n    buyTokenBalance: (quote.buyTokenBalance?.toLowerCase() ??\n      \"erc20\") as \"erc20\" | \"internal\",\n    networkCostsAmount,\n    chainId: quoteRequest.chainId,\n    from: quoteRequest.avatar,\n    rolesModifier: quoteRequest.rolesModifier,\n    roleKey: quoteRequest.roleKey,\n  }\n}\n","import { id, Interface } from \"ethers\"\nimport { Quote } from \"./types\"\nimport { encodeKey } from \"zodiac-roles-sdk\"\n\nconst CowswapOrderSignerAddress = \"0x23dA9AdE38E4477b23770DeD512fD37b12381FAB\"\n// Dishonest valid duration checks if block.timestamp + validDuration > order.validTo\n// but because we compute validDuration as validTo - Date.now() this simplifies to block.timestamp > Date.now()\n// block.timestamp might be behind Date.now() (when sending transaction it's verified against \"latest\" block).\n// This means that signOrder would reject unless we wait some time for block.timestamp to advance.\n// Adding buffer here (15 seconds) to ensure signature is immediately valid when generated.\n// https://github.com/gnosisguild/cow-order-signer/blob/1fc456e113ded34bfc745456966f72aec9444be1/contracts/CowswapOrderSigner.sol#L46-L49\nconst signatureValidityBuffer = 15;\n\n/** Encodes a signOrder call to the CowswapOrderSigner contract */\nexport const encodeSignOrder = (quote: Quote) => {\n  return CowswapOrderSignerInterface.encodeFunctionData(\"signOrder\", [\n    {\n      ...quote,\n      kind: id(quote.kind),\n      sellTokenBalance: id(quote.sellTokenBalance ?? \"erc20\"),\n      buyTokenBalance: id(quote.buyTokenBalance ?? \"erc20\"),\n      feeAmount: 0,\n      appData: id(quote.appData),\n    },\n    quote.validTo - Math.floor(Date.now() / 1000) + signatureValidityBuffer,\n    0,\n  ]) as `0x${string}`\n}\n\nexport const encodeSignOrderWithRole = (quote: Quote) => {\n  const signOrderCalldata = encodeSignOrder(quote)\n  return RolesInterface.encodeFunctionData(\"execTransactionWithRole\", [\n    CowswapOrderSignerAddress,\n    0,\n    signOrderCalldata,\n    1, // delegatecall\n    encodeKey(quote.roleKey),\n    true,\n  ]) as `0x${string}`\n}\n\nconst CowswapOrderSignerInterface = new Interface([\n  \"function signOrder(tuple(address sellToken, address buyToken, address receiver, uint256 sellAmount, uint256 buyAmount, uint32 validTo, bytes32 appData, uint256 feeAmount, bytes32 kind, bool partiallyFillable, bytes32 sellTokenBalance, bytes32 buyTokenBalance) order, uint32 validDuration, uint256 feeAmountBP)\",\n])\n\nconst RolesInterface = new Interface([\n  \"function execTransactionWithRole(address to, uint256 value, bytes calldata data, uint8 operation, bytes32 roleKey, bool shouldRevert)\",\n])\n","import { TransactionRequest } from \"ethers\"\nimport { Quote } from \"./types\"\nimport { encodeSignOrderWithRole } from \"./encodeSignOrder\"\n\n/**\n * Encodes the call to the Roles Modifier to make the avatar sign the given CowSwap order.\n * Should be used in conjunction with `postCowOrder`.\n */\nexport const signCowOrder = (quote: Quote) => {\n  return {\n    to: quote.rolesModifier,\n    data: encodeSignOrderWithRole(quote),\n    value: 0 as const,\n    chainId: quote.chainId,\n  } satisfies TransactionRequest\n}\n","import {\n  OrderKind,\n  SigningScheme,\n  SellTokenSource,\n  BuyTokenDestination,\n} from \"@cowprotocol/sdk-order-book\"\nimport { Quote } from \"./types\"\nimport { validateAppData } from \"./appData\"\nimport { postCowOrder as postCowOrderApi } from \"./cowOrderbookApi\"\n\n// Mapping helpers for converting string options to SDK enums\nconst sellTokenSourceMap: Record<string, SellTokenSource> = {\n  erc20: SellTokenSource.ERC20,\n  internal: SellTokenSource.INTERNAL,\n  external: SellTokenSource.EXTERNAL,\n}\n\nconst buyTokenDestinationMap: Record<string, BuyTokenDestination> = {\n  erc20: BuyTokenDestination.ERC20,\n  internal: BuyTokenDestination.INTERNAL,\n}\n\n/**\n * Posts a CowSwap order to the Cow order book API.\n * Should be used in conjunction with `signCowOrder`.\n * @returns A promise that resolves to the orderId\n */\nexport const postCowOrder = async (quote: Quote) => {\n  // Validate the appData before posting\n  await validateAppData(\n    { chainId: quote.chainId, owner: quote.from },\n    quote.appData\n  )\n\n  // Post the order to the COW Protocol API\n  return await postCowOrderApi(quote.chainId, {\n    sellToken: quote.sellToken,\n    buyToken: quote.buyToken,\n    receiver: quote.receiver,\n    sellAmount: quote.sellAmount,\n    buyAmount: quote.buyAmount,\n    validTo: quote.validTo,\n    appData: quote.appData,\n    feeAmount: \"0\",\n    kind: quote.kind === \"sell\" ? OrderKind.SELL : OrderKind.BUY,\n    partiallyFillable: quote.partiallyFillable,\n    sellTokenBalance: quote.sellTokenBalance\n      ? sellTokenSourceMap[quote.sellTokenBalance]\n      : undefined,\n    buyTokenBalance: quote.buyTokenBalance\n      ? buyTokenDestinationMap[quote.buyTokenBalance]\n      : undefined,\n    from: quote.from,\n    signature: quote.from,\n    signingScheme: SigningScheme.PRESIGN,\n  })\n}\n","/**\n * Chain IDs where the CowOrderSigner contract is deployed.\n * This is a subset of chains supported by cow-sdk.\n *\n * TODO: Deploy CowOrderSigner contracts to these additional cow-sdk chains:\n * - LENS (232)\n * - \n */\nexport enum SupportedChainId {\n  MAINNET = 1,\n  GNOSIS_CHAIN = 100,\n  ARBITRUM_ONE = 42161,\n  BASE = 8453,\n  AVALANCHE = 43114,\n  POLYGON = 137,\n  BNB = 56,\n  PLASMA = 9745,\n  LINEA = 59144,\n  SEPOLIA = 11155111,\n}\n\ninterface SellOrderRequest {\n  kind: \"sell\"\n  sellAmountBeforeFee: bigint\n}\n\ninterface BuyOrderRequest {\n  kind: \"buy\"\n  buyAmountAfterFee: bigint\n}\n\n/**\n * Request parameters for getting a CowSwap quote.\n */\nexport type QuoteRequest = (SellOrderRequest | BuyOrderRequest) & {\n  sellToken: `0x${string}`\n  buyToken: `0x${string}`\n  receiver?: `0x${string}` | null\n  validTo?: number\n  partiallyFillable?: boolean\n  sellTokenBalance?: \"erc20\" | \"external\" | \"internal\"\n  buyTokenBalance?: \"erc20\" | \"internal\"\n  priceQuality?: \"fast\" | \"optimal\"\n\n  chainId: SupportedChainId\n  rolesModifier: `0x${string}`\n  roleKey: `0x${string}`\n  /** Address of the avatar (Safe) the rolesModifier is attached to. Used as the order's `from`. */\n  avatar: `0x${string}`\n  /** Address of the rolesModifier owner. Used to resolve the partner fee license. */\n  owner: `0x${string}`\n}\n\n/**\n * Quote returned by getCowQuote, used as input for signCowOrder and postCowOrder.\n */\nexport type Quote = {\n  sellToken: `0x${string}`\n  buyToken: `0x${string}`\n  receiver: `0x${string}`\n  sellAmount: string\n  buyAmount: string\n  validTo: number\n  appData: string\n  appDataHash: string\n  networkCostsAmount: string\n  kind: \"sell\" | \"buy\"\n  partiallyFillable: boolean\n  sellTokenBalance: \"erc20\" | \"external\" | \"internal\"\n  buyTokenBalance: \"erc20\" | \"internal\"\n\n  from: `0x${string}`\n  chainId: SupportedChainId\n  rolesModifier: `0x${string}`\n  roleKey: `0x${string}`\n}\n\n/**\n * Advanced options for getCowQuote.\n */\nexport interface AdvancedOptions {\n  appCode?: string\n  environment?: string\n}\n"],"mappings":"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"}