{"version":3,"file":"slippage.mjs","sourceRoot":"","sources":["../../src/utils/slippage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAiB;AAEzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,oBAAoB,GAAG,SAAS,CAAC;AACvC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAEpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,EACE,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,WAAW,GAMZ,EACD,cAAyB,EACzB,eAA0B,EAC1B,EAAE;IACF,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC;QACzD,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,IACE,eAAe;QACf,gBAAgB;QAChB,cAAc;YACZ,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;aAC9C,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QAC1C,kFAAkF;QAClF,CAAC,eAAe,IAAI,cAAc,CAAC;YACjC,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;aAC9C,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAC3C,CAAC;QACD,OAAO,4BAA4B,CAAC;IACtC,CAAC;IAED,OAAO,yBAAyB,CAAC;AACnC,CAAC,CAAC","sourcesContent":["import type { GenericQuoteRequest } from '../types';\nimport { isCrossChain, isSolanaChainId } from './bridge';\n\nexport const BRIDGE_DEFAULT_SLIPPAGE = 0.5;\nconst SWAP_SOLANA_SLIPPAGE = undefined;\nconst SWAP_EVM_STABLECOIN_SLIPPAGE = 0.5;\nconst SWAP_EVM_DEFAULT_SLIPPAGE = 2;\n\n/**\n * Calculates the appropriate slippage based on the transaction context\n *\n * Rules:\n * - Bridge (cross-chain): Always 0.5%\n * - Swap on Solana: Always undefined (AUTO mode)\n * - Swap on EVM stablecoin pairs (same chain only): 0.5%\n * - Swap on EVM other pairs: 2%\n *\n * @param options - the options for the destination chain\n * @param options.srcTokenAddress - the source token address\n * @param options.destTokenAddress - the destination token address\n * @param options.srcChainId - the source chain id\n * @param options.destChainId - the destination chain id\n * @param srcStablecoins - the list of stablecoins on the source chain\n * @param destStablecoins - the list of stablecoins on the destination chain\n \n * @returns the default slippage percentage for the chain and token pair\n */\nexport const getDefaultSlippagePercentage = (\n  {\n    srcTokenAddress,\n    destTokenAddress,\n    srcChainId,\n    destChainId,\n  }: Partial<\n    Pick<\n      GenericQuoteRequest,\n      'srcTokenAddress' | 'destTokenAddress' | 'srcChainId' | 'destChainId'\n    >\n  >,\n  srcStablecoins?: string[],\n  destStablecoins?: string[],\n) => {\n  if (!srcChainId || isCrossChain(srcChainId, destChainId)) {\n    return BRIDGE_DEFAULT_SLIPPAGE;\n  }\n\n  if (isSolanaChainId(srcChainId)) {\n    return SWAP_SOLANA_SLIPPAGE;\n  }\n\n  if (\n    srcTokenAddress &&\n    destTokenAddress &&\n    srcStablecoins\n      ?.map((stablecoin) => stablecoin.toLowerCase())\n      .includes(srcTokenAddress.toLowerCase()) &&\n    // If destChainId is undefined, treat req as a swap and fallback to srcStablecoins\n    (destStablecoins ?? srcStablecoins)\n      ?.map((stablecoin) => stablecoin.toLowerCase())\n      .includes(destTokenAddress.toLowerCase())\n  ) {\n    return SWAP_EVM_STABLECOIN_SLIPPAGE;\n  }\n\n  return SWAP_EVM_DEFAULT_SLIPPAGE;\n};\n"]}