{"version":3,"file":"swaps.cjs","sourceRoot":"","sources":["../../src/utils/swaps.ts"],"names":[],"mappings":";;;AAEA,oDAAgD;AAChD,kDAG4B;AAC5B,oDAG6B;AAE7B,2DAAuD;AAEvD;;;;;;GAMG;AACH,SAAgB,2BAA2B,CACzC,OAAY,EACZ,QAAyB;IAEzB,IAAI,CAAC,QAAQ,IAAI,CAAC,kCAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,kCAA0B,CAAC,OAAO,CAAC,CAAC,IAAI,CAC7C,CAAC,eAAe,EAAE,EAAE,CAClB,QAAQ,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CAC3D,CAAC;AACJ,CAAC;AAXD,kEAWC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,OAAY;IAClD,OAAO,gCAAwB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAFD,0DAEC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,aAAa,EAAE,QAAQ;KACxB,CAAC;AACJ,CAAC;AAEY,QAAA,YAAY,GAAG,iCAAiC,CAAC;AACjD,QAAA,YAAY,GAAG,qCAAqC,CAAC;AAWlE;;;;;;;GAOG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAY,EACZ,OAAsB,EACtB,QAAiB;IAEjB,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAC5B,OAAO,KAAK,kBAAS,CAAC,SAAS;QAC7B,CAAC,CAAC,CAAC,kBAAS,CAAC,OAAO,EAAE,oBAAY,CAAC;QACnC,CAAC,CAAC,CAAC,OAAO,EAAE,oBAAY,CAAC,CAAC;IAE9B,MAAM,iBAAiB,GAAG,IAAA,oCAAkB,EAAC,UAAU,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,GAAG,UAAU,aAAa,iBAAiB,SAAS,CAAC;IAEtE,MAAM,MAAM,GAAiB,MAAM,OAAO,CAAC,QAAQ,EAAE;QACnD,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC;KACrC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7C,OAAO,KAAK,CAAC,OAAO,KAAK,8BAAqB,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GACpB,wCAA+B,CAC7B,OAAuD,CACxD,CAAC;IAEJ,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtC,OAAO,cAAc,CAAC;AACxB,CAAC;AA5BD,kCA4BC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants/chains';\nimport {\n  ALLOWED_CONTRACT_ADDRESSES,\n  SWAPS_CONTRACT_ADDRESSES,\n} from '../constants/swaps';\nimport {\n  DEFAULT_TOKEN_ADDRESS,\n  SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from '../constants/tokens';\nimport type { FetchFunction } from '../types';\nimport { formatChainIdToDec } from './caip-formatters';\n\n/**\n * Checks if the given contract address is valid for the given chain ID.\n *\n * @param chainId - The chain ID.\n * @param contract - The contract address.\n * @returns True if the contract address is valid, false otherwise.\n */\nexport function isValidSwapsContractAddress(\n  chainId: Hex,\n  contract: Hex | undefined,\n): boolean {\n  if (!contract || !ALLOWED_CONTRACT_ADDRESSES[chainId]) {\n    return false;\n  }\n  return ALLOWED_CONTRACT_ADDRESSES[chainId].some(\n    (allowedContract) =>\n      contract.toLowerCase() === allowedContract.toLowerCase(),\n  );\n}\n\n/**\n * Gets the swaps contract address for the given chain ID.\n *\n * @param chainId - The chain ID.\n * @returns The swaps contract address.\n */\nexport function getSwapsContractAddress(chainId: Hex): string {\n  return SWAPS_CONTRACT_ADDRESSES[chainId];\n}\n\n/**\n * Gets the client ID header.\n *\n * @param clientId - The client ID.\n * @returns The client ID header.\n */\nfunction getClientIdHeader(clientId?: string) {\n  if (!clientId) {\n    return undefined;\n  }\n  return {\n    'X-Client-Id': clientId,\n  };\n}\n\nexport const API_BASE_URL = 'https://swap.api.cx.metamask.io';\nexport const DEV_BASE_URL = 'https://swap.dev-api.cx.metamask.io';\n\nexport type SwapsToken = {\n  address: string;\n  symbol: string;\n  name?: string;\n  decimals: number;\n  iconUrl?: string;\n  occurrences?: number;\n};\n\n/**\n * Fetches token metadata from API URL.\n *\n * @param chainId - Current chainId.\n * @param fetchFn - Fetch function.\n * @param clientId - Client id.\n * @returns Promise resolving to an object containing token metadata.\n */\nexport async function fetchTokens(\n  chainId: Hex,\n  fetchFn: FetchFunction,\n  clientId?: string,\n): Promise<SwapsToken[]> {\n  const [apiChainId, apiBaseUrl] =\n    chainId === CHAIN_IDS.LOCALHOST\n      ? [CHAIN_IDS.MAINNET, DEV_BASE_URL]\n      : [chainId, API_BASE_URL];\n\n  const apiDecimalChainId = formatChainIdToDec(apiChainId);\n  const tokenUrl = `${apiBaseUrl}/networks/${apiDecimalChainId}/tokens`;\n\n  const tokens: SwapsToken[] = await fetchFn(tokenUrl, {\n    headers: getClientIdHeader(clientId),\n  });\n\n  const filteredTokens = tokens.filter((token) => {\n    return token.address !== DEFAULT_TOKEN_ADDRESS;\n  });\n\n  const nativeSwapsToken =\n    SWAPS_CHAINID_DEFAULT_TOKEN_MAP[\n      chainId as keyof typeof SWAPS_CHAINID_DEFAULT_TOKEN_MAP\n    ];\n\n  filteredTokens.push(nativeSwapsToken);\n  return filteredTokens;\n}\n"]}