{"version":3,"sources":["../../src/display/bridge-fees.ts"],"sourcesContent":["import type { Address } from \"viem\";\nimport { getPreviewFee } from \"../api/teller\";\nimport type { ChainId } from \"../api/vault-config\";\nimport { NATIVE_TOKEN_FOR_BRIDGE_FEE } from \"../constants\";\nimport { getVaultByKey } from \"../vaults\";\nimport { prepareBridgeContractArg } from \"../vaults/bridge\";\nimport type { VaultKey } from \"../vaults/config\";\n\ninterface GetPreviewFeeParams {\n  vaultKey: VaultKey;\n  bridgeAmount: bigint;\n  sourceChainId: ChainId;\n  destinationChainId: ChainId;\n  userAddress: Address;\n  nativeTokenForBridgeFee?: Address;\n}\n\nconst getBridgeFee = async ({\n  vaultKey,\n  bridgeAmount,\n  sourceChainId,\n  destinationChainId,\n  userAddress,\n  nativeTokenForBridgeFee = NATIVE_TOKEN_FOR_BRIDGE_FEE,\n}: GetPreviewFeeParams) => {\n  const vault = await getVaultByKey(vaultKey);\n  if (!vault) {\n    throw new Error(`Invalid vault key: ${vaultKey}`);\n  }\n\n  if (!vault.contracts) {\n    throw new Error(`Contracts not configured for vault ${vaultKey}`);\n  }\n\n  if (!vault.contracts.boringVault) {\n    throw new Error(\n      `BoringVault contract not configured for vault ${vaultKey}`\n    );\n  }\n\n  if (!vault.contracts.accountant) {\n    throw new Error(`Accountant contract not configured for vault ${vaultKey}`);\n  }\n\n  if (!vault.contracts.teller) {\n    throw new Error(`Teller contract not configured for vault ${vaultKey}`);\n  }\n\n  const sourceChain = vault.withdraw.sourceChains[sourceChainId];\n  if (!sourceChain) {\n    throw new Error(`Source chain not configured for vault ${vaultKey}`);\n  }\n\n  const destinationChain = sourceChain.destinationChains[destinationChainId];\n  if (!destinationChain) {\n    throw new Error(`Destination chain not configured for vault ${vaultKey}`);\n  }\n\n  const bridgeChainIdentifier = destinationChain.bridge.chainIdentifier;\n\n  const bridgeContractArg = prepareBridgeContractArg({\n    bridgeChainIdentifier,\n    userAddress,\n    nativeTokenForBridgeFee,\n  });\n\n  const previewFee = await getPreviewFee({\n    shareAmount: bridgeAmount,\n    bridgeData: bridgeContractArg,\n    contractAddress: vault.contracts.teller,\n    chainId: sourceChainId,\n  });\n\n  // TODO: use native currency from chains object returned from API\n  return previewFee;\n};\n\nexport { getBridgeFee };\n"],"mappings":"AACA,SAAS,qBAAqB;AAE9B,SAAS,mCAAmC;AAC5C,SAAS,qBAAqB;AAC9B,SAAS,gCAAgC;AAYzC,MAAM,eAAe,OAAO;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,0BAA0B;AAC5B,MAA2B;AACzB,QAAM,QAAQ,MAAM,cAAc,QAAQ;AAC1C,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,sBAAsB,QAAQ,EAAE;AAAA,EAClD;AAEA,MAAI,CAAC,MAAM,WAAW;AACpB,UAAM,IAAI,MAAM,sCAAsC,QAAQ,EAAE;AAAA,EAClE;AAEA,MAAI,CAAC,MAAM,UAAU,aAAa;AAChC,UAAM,IAAI;AAAA,MACR,iDAAiD,QAAQ;AAAA,IAC3D;AAAA,EACF;AAEA,MAAI,CAAC,MAAM,UAAU,YAAY;AAC/B,UAAM,IAAI,MAAM,gDAAgD,QAAQ,EAAE;AAAA,EAC5E;AAEA,MAAI,CAAC,MAAM,UAAU,QAAQ;AAC3B,UAAM,IAAI,MAAM,4CAA4C,QAAQ,EAAE;AAAA,EACxE;AAEA,QAAM,cAAc,MAAM,SAAS,aAAa,aAAa;AAC7D,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,yCAAyC,QAAQ,EAAE;AAAA,EACrE;AAEA,QAAM,mBAAmB,YAAY,kBAAkB,kBAAkB;AACzE,MAAI,CAAC,kBAAkB;AACrB,UAAM,IAAI,MAAM,8CAA8C,QAAQ,EAAE;AAAA,EAC1E;AAEA,QAAM,wBAAwB,iBAAiB,OAAO;AAEtD,QAAM,oBAAoB,yBAAyB;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,aAAa,MAAM,cAAc;AAAA,IACrC,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,iBAAiB,MAAM,UAAU;AAAA,IACjC,SAAS;AAAA,EACX,CAAC;AAGD,SAAO;AACT;","names":[]}