{"version":3,"sources":["../src/metaUtils/xlinkContractHelpers.ts"],"sourcesContent":["import { getStacksToken } from \"../stacksUtils/xlinkContractHelpers\"\nimport { requestAPI } from \"../utils/apiHelpers\"\nimport { BigNumber } from \"../utils/BigNumber\"\nimport { isNotNull } from \"../utils/typeHelpers\"\nimport {\n  createBRC20Token,\n  createRunesToken,\n  KnownChainId,\n  KnownTokenId,\n} from \"../utils/types/knownIds\"\nimport { SDKGlobalContext } from \"../xlinkSdkUtils/types.internal\"\n\nexport interface BRC20SupportedRoute {\n  brc20Tick: string\n  brc20Token: KnownTokenId.BRC20Token\n  stacksToken: KnownTokenId.StacksToken\n  pegInPaused: boolean\n  pegInFeeRate: BigNumber\n  pegInFeeBitcoinAmount: null | BigNumber\n  pegOutPaused: boolean\n  pegOutFeeRate: BigNumber\n  pegOutFeeBitcoinAmount: null | BigNumber\n}\nexport async function getBRC20SupportedRoutes(\n  sdkContext: SDKGlobalContext,\n  chainId: KnownChainId.BRC20Chain,\n): Promise<BRC20SupportedRoute[]> {\n  if (\n    sdkContext.brc20.routesConfigCache != null &&\n    sdkContext.brc20.routesConfigCache.get(chainId) != null\n  ) {\n    return sdkContext.brc20.routesConfigCache.get(chainId)!\n  }\n\n  const promise = _getBRC20SupportedRoutes(sdkContext, chainId).catch(err => {\n    const cachedPromise = sdkContext.brc20.routesConfigCache?.get(chainId)\n    if (promise === cachedPromise) {\n      sdkContext.brc20.routesConfigCache?.delete(chainId)\n    }\n    throw err\n  })\n  sdkContext.brc20.routesConfigCache?.set(chainId, promise)\n  return promise\n}\nasync function _getBRC20SupportedRoutes(\n  sdkContext: Pick<SDKGlobalContext, \"backendAPI\">,\n  chainId: KnownChainId.BRC20Chain,\n): Promise<BRC20SupportedRoute[]> {\n  const stacksChainId =\n    chainId === KnownChainId.BRC20.Mainnet\n      ? KnownChainId.Stacks.Mainnet\n      : KnownChainId.Stacks.Testnet\n\n  const resp = await requestAPI<{ routes: SupportedBRC20BridgeRoute[] }>(\n    sdkContext,\n    {\n      method: \"GET\",\n      path: \"/2024-10-01/brc20/supported-routes\",\n      query: {\n        network: chainId === KnownChainId.BRC20.Mainnet ? \"mainnet\" : \"testnet\",\n      },\n    },\n  )\n\n  const routes = await Promise.all(\n    resp.routes.map(async (route): Promise<null | BRC20SupportedRoute> => {\n      const stacksToken = await getStacksToken(\n        stacksChainId,\n        route.stacksTokenContractAddress,\n      )\n\n      if (stacksToken == null) return null\n\n      return {\n        brc20Tick: route.brc20Tick,\n        brc20Token: createBRC20Token(route.brc20Tick),\n        stacksToken,\n        pegInPaused: route.pegInPaused,\n        pegInFeeRate: BigNumber.from(route.pegInFeeRate),\n        pegInFeeBitcoinAmount:\n          route.pegInFeeBitcoinAmount == null\n            ? null\n            : BigNumber.from(route.pegInFeeBitcoinAmount),\n        pegOutPaused: route.pegOutPaused,\n        pegOutFeeRate: BigNumber.from(route.pegOutFeeRate),\n        pegOutFeeBitcoinAmount:\n          route.pegOutFeeBitcoinAmount == null\n            ? null\n            : BigNumber.from(route.pegOutFeeBitcoinAmount),\n      }\n    }),\n  )\n\n  return routes.filter(isNotNull)\n}\ninterface SupportedBRC20BridgeRoute {\n  brc20Tick: string\n  stacksTokenContractAddress: {\n    deployerAddress: string\n    contractName: string\n  }\n  pegInPaused: boolean\n  pegInFeeRate: `${number}`\n  pegInFeeBitcoinAmount: null | `${number}`\n  pegOutPaused: boolean\n  pegOutFeeRate: `${number}`\n  pegOutFeeBitcoinAmount: null | `${number}`\n}\n\nexport interface RunesSupportedRoute {\n  runesId: `${number}:${number}`\n  runesToken: KnownTokenId.RunesToken\n  stacksToken: KnownTokenId.StacksToken\n  pegInPaused: boolean\n  pegInFeeRate: BigNumber\n  pegInFeeBitcoinAmount: null | BigNumber\n  pegOutPaused: boolean\n  pegOutFeeRate: BigNumber\n  pegOutFeeBitcoinAmount: null | BigNumber\n}\n\nexport async function getRunesSupportedRoutes(\n  sdkContext: SDKGlobalContext,\n  chainId: KnownChainId.RunesChain,\n): Promise<RunesSupportedRoute[]> {\n  if (\n    sdkContext.runes.routesConfigCache != null &&\n    sdkContext.runes.routesConfigCache.get(chainId) != null\n  ) {\n    return sdkContext.runes.routesConfigCache.get(chainId)!\n  }\n\n  const promise = _getRunesSupportedRoutes(sdkContext, chainId).catch(err => {\n    const cachedPromise = sdkContext.runes.routesConfigCache?.get(chainId)\n    if (promise === cachedPromise) {\n      sdkContext.runes.routesConfigCache?.delete(chainId)\n    }\n    throw err\n  })\n  sdkContext.runes.routesConfigCache?.set(chainId, promise)\n  return promise\n}\nasync function _getRunesSupportedRoutes(\n  sdkContext: Pick<SDKGlobalContext, \"backendAPI\">,\n  chainId: KnownChainId.RunesChain,\n): Promise<RunesSupportedRoute[]> {\n  const stacksChainId =\n    chainId === KnownChainId.Runes.Mainnet\n      ? KnownChainId.Stacks.Mainnet\n      : KnownChainId.Stacks.Testnet\n\n  const resp = await requestAPI<{ routes: SupportedRunesBridgeRoute[] }>(\n    sdkContext,\n    {\n      method: \"GET\",\n      path: \"/2024-10-01/runes/supported-routes\",\n      query: {\n        network: chainId === KnownChainId.Runes.Mainnet ? \"mainnet\" : \"testnet\",\n      },\n    },\n  )\n\n  const routes = await Promise.all(\n    resp.routes.map(async (route): Promise<null | RunesSupportedRoute> => {\n      const stacksToken = await getStacksToken(\n        stacksChainId,\n        route.stacksTokenContractAddress,\n      )\n\n      if (stacksToken == null) return null\n\n      return {\n        runesId: route.runesId,\n        runesToken: createRunesToken(route.runesId),\n        stacksToken,\n        pegInPaused: route.pegInPaused,\n        pegInFeeRate: BigNumber.from(route.pegInFeeRate),\n        pegInFeeBitcoinAmount:\n          route.pegInFeeBitcoinAmount == null\n            ? null\n            : BigNumber.from(route.pegInFeeBitcoinAmount),\n        pegOutPaused: route.pegOutPaused,\n        pegOutFeeRate: BigNumber.from(route.pegOutFeeRate),\n        pegOutFeeBitcoinAmount:\n          route.pegOutFeeBitcoinAmount == null\n            ? null\n            : BigNumber.from(route.pegOutFeeBitcoinAmount),\n      }\n    }),\n  )\n\n  return routes.filter(isNotNull)\n}\ninterface SupportedRunesBridgeRoute {\n  runesId: `${number}:${number}`\n  stacksTokenContractAddress: {\n    deployerAddress: string\n    contractName: string\n  }\n  pegInPaused: boolean\n  pegInFeeRate: `${number}`\n  pegInFeeBitcoinAmount: null | `${number}`\n  pegOutPaused: boolean\n  pegOutFeeRate: `${number}`\n  pegOutFeeBitcoinAmount: null | `${number}`\n}\n"],"mappings":"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","names":[]}