@molecularlabs/nucleus-frontend
Version:
Nucleus BoringVault Frontend SDK
1 lines • 5.85 kB
Source Map (JSON)
{"version":3,"sources":["../../src/display/approvals.ts"],"sourcesContent":["import { type Address, formatUnits } from \"viem\";\nimport { getErc20AllowanceWithDecimals } from \"../api/erc20\";\nimport { type ChainId, toChainId } from \"../api/vault-config\";\nimport { ATOMIC_QUEUE_CONTRACT_ADDRESS } from \"../constants\";\nimport { tryCatch } from \"../utils/try-catch\";\nimport { getVaultByKey } from \"../vaults\";\nimport type { VaultKey } from \"../vaults/config\";\n\nconst isDepositSpendApproved = async ({\n vaultKey,\n sourceChainId,\n depositTokenSymbol,\n userAddress,\n}: {\n vaultKey: VaultKey;\n sourceChainId: ChainId;\n userAddress: Address;\n depositTokenSymbol: string;\n}) => {\n const {\n data: vault,\n error: vaultError,\n success: vaultSuccess,\n } = await tryCatch(getVaultByKey(vaultKey));\n if (!vaultSuccess) {\n throw new Error(`Vault not found for ${vaultKey}: ${vaultError.message}`);\n }\n\n if (!vault.contracts) {\n throw new Error(`Contracts not found: ${vaultKey}`);\n }\n\n const normalizedSourceChainId = toChainId(sourceChainId);\n const depositAssetAddress =\n vault.deposit.sourceChains[normalizedSourceChainId].depositTokens[\n depositTokenSymbol\n ].address;\n\n if (!depositAssetAddress) {\n throw new Error(`Deposit asset address not found: ${depositTokenSymbol}`);\n }\n\n const { deposit } = vault;\n\n const { sourceChains } = deposit;\n\n const sourceChain = sourceChains[normalizedSourceChainId];\n if (!sourceChain) {\n throw new Error(`Source chain not found: ${normalizedSourceChainId}`);\n }\n\n const [allowance, decimals] = await getErc20AllowanceWithDecimals({\n chainId: normalizedSourceChainId,\n tokenAddress: depositAssetAddress,\n userAddress: userAddress,\n spenderAddress: vault.contracts.boringVault,\n });\n\n if (allowance.status === \"failure\" || decimals.status === \"failure\") {\n return {\n isApproved: false,\n allowance: \"0\",\n allowanceAsBigInt: \"0\",\n decimals: \"0\",\n error: allowance.error || decimals.error,\n };\n }\n\n return {\n isApproved: allowance.result > 0n,\n allowance: formatUnits(allowance.result, decimals.result),\n allowanceAsBigInt: allowance.result.toString(),\n decimals: decimals.result,\n error: null,\n };\n};\n\nconst isWithdrawalSpendApproved = async ({\n vaultKey,\n destinationChainId,\n userAddress,\n}: {\n vaultKey: VaultKey;\n destinationChainId: ChainId;\n userAddress: Address;\n}) => {\n const {\n data: vault,\n error: vaultError,\n success: vaultSuccess,\n } = await tryCatch(getVaultByKey(vaultKey));\n if (!vaultSuccess) {\n throw new Error(`Vault not found for ${vaultKey}: ${vaultError.message}`);\n }\n\n if (!vault.contracts) {\n throw new Error(`Contracts not found for ${vaultKey}`);\n }\n\n const normalizedDestinationChainId = toChainId(destinationChainId);\n\n const boringVaultAddress = vault.contracts.boringVault;\n\n const [allowance, decimals] = await getErc20AllowanceWithDecimals({\n chainId: normalizedDestinationChainId,\n tokenAddress: boringVaultAddress,\n userAddress: userAddress,\n spenderAddress: ATOMIC_QUEUE_CONTRACT_ADDRESS,\n });\n\n if (allowance.status === \"failure\" || decimals.status === \"failure\") {\n return {\n isApproved: false,\n allowance: \"0\",\n allowanceAsBigInt: \"0\",\n decimals: \"0\",\n error: allowance.error || decimals.error,\n };\n }\n\n return {\n isApproved: allowance.result > 0n,\n allowance: formatUnits(allowance.result, decimals.result),\n allowanceAsBigInt: allowance.result.toString(),\n decimals: decimals.result,\n error: null,\n };\n};\n\nexport { isDepositSpendApproved, isWithdrawalSpendApproved };\n"],"mappings":"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","names":[]}