@paxoslabs/amplify-sdk 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/{chain-utils-BdJecHBA.d.mts → chain-utils-5r2UnCDS.d.mts} +47 -1
  2. package/dist/{chain-utils-BdJecHBA.d.ts → chain-utils-5r2UnCDS.d.ts} +47 -1
  3. package/dist/{chunk-5OK753GA.js → chunk-4NQPS3JC.js} +470 -358
  4. package/dist/chunk-4NQPS3JC.js.map +1 -0
  5. package/dist/chunk-6JLKHV6O.js +128 -0
  6. package/dist/chunk-6JLKHV6O.js.map +1 -0
  7. package/dist/{chunk-NNDY5TID.js → chunk-FHE43NKY.js} +12 -12
  8. package/dist/{chunk-NNDY5TID.js.map → chunk-FHE43NKY.js.map} +1 -1
  9. package/dist/chunk-GOJQYEJQ.js +3212 -0
  10. package/dist/chunk-GOJQYEJQ.js.map +1 -0
  11. package/dist/{chunk-HU5CTL4C.mjs → chunk-LMNADWTH.mjs} +364 -253
  12. package/dist/chunk-LMNADWTH.mjs.map +1 -0
  13. package/dist/chunk-ODXJYXUH.mjs +3168 -0
  14. package/dist/chunk-ODXJYXUH.mjs.map +1 -0
  15. package/dist/{chunk-QZHI2T7O.mjs → chunk-QMFYPHX5.mjs} +280 -47
  16. package/dist/chunk-QMFYPHX5.mjs.map +1 -0
  17. package/dist/{chunk-Q5FXJU5Y.mjs → chunk-UY2WD7MF.mjs} +3 -3
  18. package/dist/{chunk-Q5FXJU5Y.mjs.map → chunk-UY2WD7MF.mjs.map} +1 -1
  19. package/dist/chunk-WD6QFSXZ.js +701 -0
  20. package/dist/chunk-WD6QFSXZ.js.map +1 -0
  21. package/dist/chunk-Y5LBT2WT.mjs +118 -0
  22. package/dist/chunk-Y5LBT2WT.mjs.map +1 -0
  23. package/dist/core.d.mts +50 -7
  24. package/dist/core.d.ts +50 -7
  25. package/dist/core.js +32 -16
  26. package/dist/core.mjs +4 -4
  27. package/dist/display.d.mts +211 -2
  28. package/dist/display.d.ts +211 -2
  29. package/dist/display.js +26 -10
  30. package/dist/display.mjs +4 -4
  31. package/dist/{index-DXXA8gEA.d.mts → index-D8RtV9cB.d.mts} +498 -410
  32. package/dist/{index-aE5lTOUH.d.ts → index-ev_V5sjt.d.ts} +498 -410
  33. package/dist/index.d.mts +40 -5
  34. package/dist/index.d.ts +40 -5
  35. package/dist/index.js +80 -60
  36. package/dist/index.mjs +5 -5
  37. package/dist/utils.d.mts +1 -1
  38. package/dist/utils.d.ts +1 -1
  39. package/dist/utils.js +7 -7
  40. package/dist/utils.mjs +2 -2
  41. package/dist/vaults.d.mts +2 -2
  42. package/dist/vaults.d.ts +2 -2
  43. package/dist/vaults.js +25 -25
  44. package/dist/vaults.mjs +4 -4
  45. package/package.json +1 -1
  46. package/dist/chunk-5OK753GA.js.map +0 -1
  47. package/dist/chunk-7JQQ2TH4.mjs +0 -1231
  48. package/dist/chunk-7JQQ2TH4.mjs.map +0 -1
  49. package/dist/chunk-HU5CTL4C.mjs.map +0 -1
  50. package/dist/chunk-QZHI2T7O.mjs.map +0 -1
  51. package/dist/chunk-SWUG4PTB.js +0 -464
  52. package/dist/chunk-SWUG4PTB.js.map +0 -1
  53. package/dist/chunk-WK7EJRBB.mjs +0 -1482
  54. package/dist/chunk-WK7EJRBB.mjs.map +0 -1
  55. package/dist/chunk-WYBYBPX5.js +0 -1518
  56. package/dist/chunk-WYBYBPX5.js.map +0 -1
  57. package/dist/chunk-ZKDXRGI5.js +0 -1239
  58. package/dist/chunk-ZKDXRGI5.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/display/deposit-display.ts","../src/display/vault-display.ts","../src/display/withdrawal-display.ts"],"names":["toChainId","resolveVault","APIError","getRateInQuoteWithAssetDecimals","getErc20Decimals","parseUnits","calculateExpectedSharesMinted","readSupplyCapInBase","readFeeModuleFromDCD","maxUint256","zeroAddress","getClient","BoringVaultAbi","AccountantAbi","assetDecimals","depositAmountBigInt","readDepositFeeStructure","erc20Abi","isValidAddress","getCache","VaultNotFoundByNameError","getRestV2BaseURL","DEFAULT_TIMEOUT","getRequestHeaders","WithdrawQueueAbi","FeeModuleAbi"],"mappings":"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","file":"chunk-WD6QFSXZ.js","sourcesContent":["/**\n * @file Deposit display helpers\n * @module display/deposit-display\n */\n\nimport {\n type Address,\n erc20Abi,\n maxUint256,\n parseUnits,\n zeroAddress,\n} from 'viem'\nimport { AccountantAbi } from '../abi/accountant-abi'\nimport { BoringVaultAbi } from '../abi/boring-vault-abi'\nimport { getRateInQuoteWithAssetDecimals } from '../api/accountant'\nimport { getErc20Decimals } from '../api/erc20'\nimport {\n readDepositFeeStructure,\n readFeeModuleFromDCD,\n readSupplyCapInBase,\n} from '../api/fees-and-supply-cap'\nimport { resolveVault } from '../client/resolve-vault'\nimport { getClient } from '../lib/viem/client'\nimport { APIError } from '../types/amplify-sdk-api'\nimport { calculateExpectedSharesMinted } from '../utils/bigint'\nimport { toChainId } from '../utils/chain-utils'\nimport type {\n CalculateDepositFeeParams,\n CurrentSupplyResult,\n DepositCapResult,\n DepositFeeResult,\n GetCurrentSupplyParams,\n GetDepositCapParams,\n GetMinimumMintParams,\n GetShareValueParams,\n MinimumMintResult,\n ShareValueResult,\n} from './types'\n\n/**\n * Calculates the expected vault shares a user will receive for a deposit\n *\n * Uses the on-chain exchange rate from the Accountant contract to calculate\n * how many vault shares will be minted for a given deposit amount.\n *\n * @param params - Deposit parameters\n * @returns Expected shares, exchange rate, and decimal info\n * @throws {APIError} If vault not found or contract read fails\n *\n * @example\n * ```typescript\n * const result = await getMinimumMint({\n * vaultName: \"Amplify USDC Core\",\n * chainId: 1,\n * depositAssetAddress: \"0xA0b8...\", // USDC\n * depositAmount: \"1000.0\",\n * });\n * console.log(result.expectedShares);\n * ```\n */\nexport async function getMinimumMint(\n params: GetMinimumMintParams\n): Promise<MinimumMintResult> {\n try {\n const normalizedChainId = toChainId(params.chainId)\n\n const config = await resolveVault({\n vaultName: params.vaultName,\n assetAddress: params.depositAssetAddress,\n chainId: normalizedChainId,\n callerEndpoint: 'getMinimumMint',\n })\n\n if (!config.vault.accountantAddress) {\n throw new APIError(\n `Accountant contract address not configured for vault ${config.id}`,\n { endpoint: 'getMinimumMint' }\n )\n }\n\n if (!config.vault.boringVaultAddress) {\n throw new APIError(\n `BoringVault contract address not configured for vault ${config.id}`,\n { endpoint: 'getMinimumMint' }\n )\n }\n\n // Get exchange rate and asset decimals via multicall\n const rateResults = await getRateInQuoteWithAssetDecimals({\n assetAddress: params.depositAssetAddress,\n accountantAddress: config.vault.accountantAddress,\n chainId: normalizedChainId,\n })\n const [assetDecimalsResult, exchangeRateResult] = rateResults\n if (\n assetDecimalsResult.status === 'failure' ||\n exchangeRateResult.status === 'failure'\n ) {\n throw new APIError(\n `Failed to get exchange rate or asset decimals: ${\n assetDecimalsResult.error?.message ||\n exchangeRateResult.error?.message\n }`,\n { endpoint: 'getMinimumMint' }\n )\n }\n\n const assetDecimals = assetDecimalsResult.result\n const exchangeRate = exchangeRateResult.result\n\n // Get vault share decimals\n const shareDecimals = await getErc20Decimals({\n tokenAddress: config.vault.boringVaultAddress,\n chainId: normalizedChainId,\n })\n\n // Parse deposit amount using asset decimals\n const depositAmountBigInt = parseUnits(params.depositAmount, assetDecimals)\n\n // Calculate expected shares\n const expectedShares = calculateExpectedSharesMinted(\n depositAmountBigInt,\n exchangeRate,\n shareDecimals\n )\n\n return {\n expectedShares,\n exchangeRate,\n shareDecimals,\n assetDecimals,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to calculate minimum mint: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getMinimumMint', cause: error }\n )\n }\n}\n\n/**\n * Reads the deposit cap and fee module info from the DCD contract on-chain\n *\n * Uses the customer's configured RPC to call `supplyCapInBase()` and\n * `feeModule()` on the DistributorCodeDepositor contract.\n *\n * @param params - Vault identification parameters\n * @returns Supply cap, fee module address, and derived boolean flags\n * @throws {APIError} If vault not found or contract read fails\n *\n * @example\n * ```typescript\n * const cap = await getDepositCap({\n * vaultName: \"Amplify USDC Core\",\n * chainId: 1,\n * assetAddress: \"0xA0b8...\",\n * });\n * console.log(cap.hasDepositCap); // true if supplyCapInBase != 0 and != maxUint256\n * console.log(cap.hasFees); // true if depositFeeModuleAddress from vault config != zeroAddress\n * ```\n */\nexport async function getDepositCap(\n params: GetDepositCapParams\n): Promise<DepositCapResult> {\n try {\n const normalizedChainId = toChainId(params.chainId)\n\n const config = await resolveVault({\n vaultName: params.vaultName,\n assetAddress: params.assetAddress,\n chainId: normalizedChainId,\n callerEndpoint: 'getDepositCap',\n })\n\n if (\n !config.vault.communityCodeDepositorAddress ||\n !config.vault.depositFeeModuleAddress\n ) {\n throw new APIError(\n `Deposit cap not available for vault ${config.id} — requires both CommunityCodeDepositor and deposit fee module`,\n { endpoint: 'getDepositCap' }\n )\n }\n\n const [supplyCapInBase, depositFeeModuleAddress] = await Promise.all([\n readSupplyCapInBase(\n config.vault.communityCodeDepositorAddress,\n normalizedChainId\n ),\n readFeeModuleFromDCD(\n config.vault.communityCodeDepositorAddress,\n normalizedChainId\n ),\n ])\n\n return {\n supplyCapInBase,\n hasDepositCap: supplyCapInBase !== 0n && supplyCapInBase !== maxUint256,\n depositFeeModuleAddress,\n hasFees: depositFeeModuleAddress !== zeroAddress,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to get deposit cap: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getDepositCap', cause: error }\n )\n }\n}\n\n/**\n * Reads the current total supply value from the boring vault and accountant\n *\n * Computes `totalValueInBase = totalSupply * accountant.getRate() / 10^accountant.decimals()`,\n * matching the on-chain supply cap enforcement logic in the DCD contract.\n *\n * @param params - Vault identification parameters\n * @returns Total share supply, exchange rate, and computed value in base-asset units\n * @throws {APIError} If vault not found or contract read fails\n *\n * @example\n * ```typescript\n * const supply = await getCurrentSupply({\n * vaultName: \"Amplify USDC Core\",\n * chainId: 1,\n * assetAddress: \"0xA0b8...\",\n * });\n * console.log(supply.totalValueInBase); // current TVL in base-asset raw units\n * ```\n */\nexport async function getCurrentSupply(\n params: GetCurrentSupplyParams\n): Promise<CurrentSupplyResult> {\n try {\n const normalizedChainId = toChainId(params.chainId)\n\n const config = await resolveVault({\n vaultName: params.vaultName,\n assetAddress: params.assetAddress,\n chainId: normalizedChainId,\n callerEndpoint: 'getCurrentSupply',\n })\n\n if (!config.vault.boringVaultAddress) {\n throw new APIError(\n `BoringVault contract address not configured for vault ${config.id}`,\n { endpoint: 'getCurrentSupply' }\n )\n }\n\n if (!config.vault.accountantAddress) {\n throw new APIError(\n `Accountant contract address not configured for vault ${config.id}`,\n { endpoint: 'getCurrentSupply' }\n )\n }\n\n const client = await getClient(normalizedChainId)\n\n const results = await client.multicall({\n contracts: [\n {\n abi: BoringVaultAbi,\n address: config.vault.boringVaultAddress,\n functionName: 'totalSupply',\n },\n {\n abi: AccountantAbi,\n address: config.vault.accountantAddress,\n functionName: 'getRate',\n },\n {\n abi: AccountantAbi,\n address: config.vault.accountantAddress,\n functionName: 'decimals',\n },\n ],\n })\n\n const [supplyResult, rateResult, decimalsResult] = results\n\n if (\n supplyResult.status === 'failure' ||\n rateResult.status === 'failure' ||\n decimalsResult.status === 'failure'\n ) {\n throw new APIError('Failed to read supply data from vault contracts', {\n endpoint: 'getCurrentSupply',\n })\n }\n\n const totalShareSupply = supplyResult.result as bigint\n const exchangeRate = rateResult.result as bigint\n const accountantDecimals = decimalsResult.result as number\n\n const totalValueInBase =\n (totalShareSupply * exchangeRate) / BigInt(10 ** accountantDecimals)\n\n return {\n totalShareSupply,\n exchangeRate,\n accountantDecimals,\n totalValueInBase,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to get current supply: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getCurrentSupply', cause: error }\n )\n }\n}\n\n/**\n * Calculates the deposit fee for a given deposit amount by reading the\n * fee module's `depositTokenFeeData` and `ONE_HUNDRED_PERCENT` on-chain.\n *\n * Returns both the fixed (flat) and variable fee components, along with\n * the total fee and the net deposit amount after fees.\n *\n * @param params - Deposit parameters including vault name, chain, asset, and amount\n * @returns Fee breakdown with fixed, variable, total, and net amounts\n * @throws {APIError} If vault not found, no fee module, or contract read fails\n *\n * @example\n * ```typescript\n * const fee = await calculateDepositFee({\n * vaultName: \"Amplify USDC Core\",\n * chainId: 1,\n * assetAddress: \"0xA0b8...\",\n * depositAmount: \"1000.0\",\n * });\n * console.log(fee.variableFeeAmount); // variable portion\n * console.log(fee.flatFee); // fixed portion\n * console.log(fee.totalFeeAmount); // variable + fixed\n * ```\n */\nexport async function calculateDepositFee(\n params: CalculateDepositFeeParams\n): Promise<DepositFeeResult> {\n try {\n const normalizedChainId = toChainId(params.chainId)\n\n const config = await resolveVault({\n vaultName: params.vaultName,\n assetAddress: params.assetAddress,\n chainId: normalizedChainId,\n callerEndpoint: 'calculateDepositFee',\n })\n\n const depositFeeModuleAddress = (config.vault.depositFeeModuleAddress ??\n zeroAddress) as Address\n const hasFees = depositFeeModuleAddress !== zeroAddress\n\n if (!hasFees) {\n const assetDecimals = await getErc20Decimals({\n tokenAddress: params.assetAddress,\n chainId: normalizedChainId,\n })\n const depositAmountBigInt = parseUnits(\n params.depositAmount,\n assetDecimals\n )\n\n return {\n hasFees: false,\n depositFeeModuleAddress,\n feePercentage: 0n,\n oneHundredPercent: 0n,\n flatFee: 0n,\n variableFeeAmount: 0n,\n totalFeeAmount: 0n,\n depositAmountAfterFees: depositAmountBigInt,\n assetDecimals,\n }\n }\n\n const assetDecimals = await getErc20Decimals({\n tokenAddress: params.assetAddress,\n chainId: normalizedChainId,\n })\n\n const { feePercentage, flatFee, oneHundredPercent } =\n await readDepositFeeStructure(\n depositFeeModuleAddress,\n params.assetAddress,\n normalizedChainId\n )\n\n const depositAmountBigInt = parseUnits(params.depositAmount, assetDecimals)\n\n const variableFeeAmount =\n oneHundredPercent > 0n\n ? (depositAmountBigInt * feePercentage) / oneHundredPercent\n : 0n\n\n const totalFeeAmount = variableFeeAmount + flatFee\n\n const depositAmountAfterFees =\n depositAmountBigInt > totalFeeAmount\n ? depositAmountBigInt - totalFeeAmount\n : 0n\n\n return {\n hasFees: true,\n depositFeeModuleAddress,\n feePercentage,\n oneHundredPercent,\n flatFee,\n variableFeeAmount,\n totalFeeAmount,\n depositAmountAfterFees,\n assetDecimals,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to calculate deposit fee: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'calculateDepositFee', cause: error }\n )\n }\n}\n\n/**\n * Calculates the value of vault shares in a quote asset\n *\n * Reads the on-chain exchange rate from the Accountant contract via\n * `getRateInQuote(quoteAsset)` and computes:\n * value = shareBalance * rateInQuote / 10^shareDecimals\n *\n * The share balance can come from two sources:\n * - `userAddress`: reads `balanceOf(userAddress)` on the BoringVault on-chain\n * - `shareAmount`: uses the provided amount directly (skips balanceOf)\n *\n * When both are provided, `shareAmount` takes precedence. At least one\n * must be specified.\n *\n * @param params - Share value parameters\n * @returns Share balance, value in quote-asset units, exchange rate, and decimal info\n * @throws {APIError} If neither userAddress nor shareAmount provided, vault not found, or contract read fails\n *\n * @example\n * ```typescript\n * // Look up a user's position value by wallet address\n * const result = await getShareValue({\n * vaultName: \"pxlUSDCc\",\n * chainId: 1,\n * quoteAssetAddress: \"0xA0b8...\", // USDC\n * userAddress: \"0x1234...\",\n * });\n * console.log(result.shareBalance); // shares held\n * console.log(result.value); // worth in USDC units\n *\n * // Or value a known share amount directly\n * const preview = await getShareValue({\n * vaultName: \"pxlUSDCc\",\n * chainId: 1,\n * quoteAssetAddress: \"0xA0b8...\",\n * shareAmount: \"100.0\",\n * });\n * ```\n */\nexport async function getShareValue(\n params: GetShareValueParams\n): Promise<ShareValueResult> {\n try {\n if (!params.userAddress && !params.shareAmount) {\n throw new APIError(\n 'Either userAddress or shareAmount must be provided.',\n { endpoint: 'getShareValue' }\n )\n }\n\n const normalizedChainId = toChainId(params.chainId)\n\n const config = await resolveVault({\n vaultName: params.vaultName,\n assetAddress: params.quoteAssetAddress,\n chainId: normalizedChainId,\n callerEndpoint: 'getShareValue',\n })\n\n if (!config.vault.accountantAddress) {\n throw new APIError(\n `Accountant contract address not configured for vault ${config.id}`,\n { endpoint: 'getShareValue' }\n )\n }\n\n if (!config.vault.boringVaultAddress) {\n throw new APIError(\n `BoringVault contract address not configured for vault ${config.id}`,\n { endpoint: 'getShareValue' }\n )\n }\n\n const client = await getClient(normalizedChainId)\n\n const results = await client.multicall({\n contracts: [\n {\n abi: erc20Abi,\n address: params.quoteAssetAddress,\n functionName: 'decimals',\n },\n {\n abi: BoringVaultAbi,\n address: config.vault.boringVaultAddress,\n functionName: 'decimals',\n },\n {\n abi: AccountantAbi,\n address: config.vault.accountantAddress,\n functionName: 'getRateInQuote',\n args: [params.quoteAssetAddress],\n },\n ],\n })\n\n const [quoteDecimalsResult, shareDecimalsResult, rateResult] = results\n\n if (\n quoteDecimalsResult.status === 'failure' ||\n shareDecimalsResult.status === 'failure' ||\n rateResult.status === 'failure'\n ) {\n throw new APIError(\n 'Failed to read share value data from vault contracts',\n { endpoint: 'getShareValue' }\n )\n }\n\n const quoteAssetDecimals = quoteDecimalsResult.result as number\n const shareDecimals = shareDecimalsResult.result as number\n const exchangeRate = rateResult.result as bigint\n\n let shareBalance: bigint\n if (params.shareAmount) {\n shareBalance = parseUnits(params.shareAmount, shareDecimals)\n } else {\n const [balanceResult] = await client.multicall({\n contracts: [\n {\n abi: erc20Abi,\n address: config.vault.boringVaultAddress,\n functionName: 'balanceOf',\n args: [params.userAddress!],\n },\n ],\n })\n\n if (balanceResult.status === 'failure') {\n throw new APIError(\n `Failed to read balanceOf for ${params.userAddress}`,\n { endpoint: 'getShareValue' }\n )\n }\n shareBalance = balanceResult.result\n }\n\n const ONE_SHARE = BigInt(10) ** BigInt(shareDecimals)\n const value = (shareBalance * exchangeRate) / ONE_SHARE\n\n return {\n shareBalance,\n value,\n exchangeRate,\n shareDecimals,\n quoteAssetDecimals,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to get share value: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getShareValue', cause: error }\n )\n }\n}\n","/**\n * @file Vault display helpers\n * @module display/vault-display\n */\n\nimport type { Address } from 'viem'\nimport { getCache } from '../client/amplify-sdk-client'\nimport { getRestV2BaseURL } from '../constants/environment'\nimport { getRequestHeaders } from '../lib/sdk-config'\nimport { APIError, isValidAddress } from '../types/amplify-sdk-api'\nimport { VaultNotFoundByNameError } from '../types/withdraw-errors'\nimport { DEFAULT_TIMEOUT } from '../utils/fetch'\nimport type {\n GetVaultAPYParams,\n GetVaultTVLParams,\n VaultAPYResult,\n VaultTVLResult,\n} from './types'\n\n/**\n * Resolves a vault's on-chain BoringVault address for REST API display queries\n * (APY, TVL). Accepts either a direct `vaultAddress` or a `vaultName` lookup\n * via the local cache. No asset validation is performed since these are\n * informational queries, not transaction-prep.\n */\nasync function resolveVaultAddressForDisplay(\n params: { vaultAddress?: Address; vaultName?: string; chainId?: number },\n callerEndpoint: string\n): Promise<Address> {\n if (params.vaultAddress) {\n if (!isValidAddress(params.vaultAddress)) {\n throw new APIError(\n `Invalid vaultAddress: ${params.vaultAddress}. Must be a valid Ethereum address.`,\n { endpoint: callerEndpoint }\n )\n }\n return params.vaultAddress\n }\n\n if (params.vaultName) {\n const cache = getCache()\n if (cache.isEmpty() || cache.isExpired()) {\n await cache.refresh()\n }\n const vault = cache.getVaultByName(params.vaultName)\n if (!vault) {\n throw new VaultNotFoundByNameError(\n `No vault found with name \"${params.vaultName}\". The vault may not exist or may not be available for your organization.`,\n { vaultName: params.vaultName, endpoint: callerEndpoint }\n )\n }\n return vault.vault.boringVaultAddress\n }\n\n throw new APIError('Either vaultAddress or vaultName must be provided.', {\n endpoint: callerEndpoint,\n })\n}\n\n/**\n * Fetches the latest APY for a vault from the backend API\n *\n * Requests the most recent APY data point by using\n * orderByTimestamp=desc with pageSize=1.\n *\n * @param params - Vault identifier parameters (vaultAddress, vaultName, or both)\n * @returns Latest APY value and metadata\n * @throws {APIError} If the API request fails or no data found\n *\n * @example\n * ```typescript\n * const result = await getVaultAPY({\n * vaultAddress: \"0x1234...\",\n * });\n * console.log(result.apyFormatted); // \"4.50%\"\n * ```\n */\nexport async function getVaultAPY(\n params: GetVaultAPYParams\n): Promise<VaultAPYResult> {\n try {\n const resolvedAddress = await resolveVaultAddressForDisplay(\n params,\n 'getVaultAPY'\n )\n\n const queryParams = new URLSearchParams({\n filter: `vaultAddress=${resolvedAddress}`,\n orderByTimestamp: 'desc',\n pageSize: '1',\n })\n\n const url = `${getRestV2BaseURL()}/amplify/vaultApys?${queryParams.toString()}`\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT)\n\n const response = await fetch(url, {\n method: 'GET',\n headers: getRequestHeaders(),\n signal: controller.signal,\n })\n\n clearTimeout(timeout)\n\n if (!response.ok) {\n throw new APIError(\n `Failed to fetch vault APY: ${response.status} ${response.statusText}`,\n { endpoint: 'getVaultAPY', statusCode: response.status }\n )\n }\n\n const data = (await response.json()) as {\n vaultApys: Array<{\n vaultAddress: string\n timestamp: string\n interval: string\n apy: string\n }>\n nextPageToken: string | null\n }\n\n if (!data.vaultApys || data.vaultApys.length === 0) {\n throw new APIError(`No APY data found for vault ${resolvedAddress}`, {\n endpoint: 'getVaultAPY',\n })\n }\n\n const latest = data.vaultApys[0]\n const apyNumber = Number.parseFloat(latest.apy)\n\n return {\n apy: apyNumber,\n apyFormatted: `${apyNumber.toFixed(2)}%`,\n vaultAddress: latest.vaultAddress as Address,\n timestamp: latest.timestamp,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to fetch vault APY: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getVaultAPY', cause: error }\n )\n }\n}\n\n/**\n * Fetches the current TVL for a vault from the backend API\n *\n * Requests the most recent TVL data point by using\n * includeCurrent=true, orderByTimestamp=desc with pageSize=1.\n *\n * @param params - Vault identifier parameters (vaultAddress, vaultName, or both)\n * @returns Current TVL value and metadata\n * @throws {APIError} If the API request fails or no data found\n *\n * @example\n * ```typescript\n * const result = await getVaultTVL({\n * vaultAddress: \"0x1234...\",\n * });\n * console.log(result.tvl, result.tvlAsset);\n * ```\n */\nexport async function getVaultTVL(\n params: GetVaultTVLParams\n): Promise<VaultTVLResult> {\n try {\n const resolvedAddress = await resolveVaultAddressForDisplay(\n params,\n 'getVaultTVL'\n )\n\n const filterParts = [`vaultAddress=${resolvedAddress}`]\n if (params.chainId !== undefined) {\n filterParts.push(`chainId=${params.chainId}`)\n }\n\n const queryParams = new URLSearchParams({\n filter: filterParts.join(' AND '),\n includeCurrent: 'true',\n orderByTimestamp: 'desc',\n pageSize: '1',\n })\n\n const url = `${getRestV2BaseURL()}/amplify/vaultTvls?${queryParams.toString()}`\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT)\n\n const response = await fetch(url, {\n method: 'GET',\n headers: getRequestHeaders(),\n signal: controller.signal,\n })\n\n clearTimeout(timeout)\n\n if (!response.ok) {\n throw new APIError(\n `Failed to fetch vault TVL: ${response.status} ${response.statusText}`,\n { endpoint: 'getVaultTVL', statusCode: response.status }\n )\n }\n\n const data = (await response.json()) as {\n vaultTvls: Array<{\n vaultAddress: string\n chainId: number\n timestamp: string\n interval: string\n tvl: string\n tvlAsset: string\n }>\n nextPageToken: string | null\n }\n\n if (!data.vaultTvls || data.vaultTvls.length === 0) {\n throw new APIError(`No TVL data found for vault ${resolvedAddress}`, {\n endpoint: 'getVaultTVL',\n })\n }\n\n const latest = data.vaultTvls[0]\n\n return {\n tvl: latest.tvl,\n tvlAsset: latest.tvlAsset,\n vaultAddress: latest.vaultAddress as Address,\n chainId: latest.chainId,\n timestamp: latest.timestamp,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to fetch vault TVL: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getVaultTVL', cause: error }\n )\n }\n}\n","/**\n * @file Withdrawal display helpers\n * @module display/withdrawal-display\n */\n\nimport { type Address, parseUnits } from 'viem'\nimport { FeeModuleAbi } from '../abi/fee-module-abi'\nimport { WithdrawQueueAbi } from '../abi/withdraw-queue-abi'\nimport { getErc20Decimals } from '../api/erc20'\nimport { getCache } from '../client/amplify-sdk-client'\nimport { resolveVault } from '../client/resolve-vault'\nimport { getRestV2BaseURL } from '../constants/environment'\nimport { getRequestHeaders } from '../lib/sdk-config'\nimport { getClient } from '../lib/viem/client'\nimport { APIError } from '../types/amplify-sdk-api'\nimport { isValidAddress } from '../types/amplify-sdk-api'\nimport { VaultNotFoundByNameError } from '../types/withdraw-errors'\nimport { DEFAULT_TIMEOUT } from '../utils/fetch'\nimport { toChainId } from '../utils/chain-utils'\nimport type {\n GetMinimumWithdrawalOrderSizeParams,\n GetWithdrawalFeeParams,\n GetWithdrawalRequestsParams,\n MinimumWithdrawalOrderSizeResult,\n WithdrawalFeeResult,\n WithdrawalRequest,\n WithdrawalRequestsResult,\n} from './types'\n\n/**\n * Builds a filter string from typed params for the v2 API\n */\nfunction buildFilterString(\n params: Record<string, string | number | boolean | undefined>\n): string {\n return Object.entries(params)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${k}=${v}`)\n .join(' AND ')\n}\n\n/**\n * Fetches a user's withdrawal requests from the backend API\n *\n * @param params - Filter parameters for withdrawal requests\n * @returns Paginated list of withdrawal requests\n * @throws {APIError} If the API request fails or parameters are invalid\n *\n * @example\n * ```typescript\n * const result = await getWithdrawalRequests({\n * userAddress: \"0x1234...\",\n * status: \"PENDING\",\n * chainId: 1,\n * });\n * console.log(result.withdrawalRequests);\n * ```\n */\nexport async function getWithdrawalRequests(\n params: GetWithdrawalRequestsParams\n): Promise<WithdrawalRequestsResult> {\n try {\n if (!isValidAddress(params.userAddress)) {\n throw new APIError(\n `Invalid userAddress: ${params.userAddress}. Must be a valid Ethereum address.`,\n { endpoint: 'getWithdrawalRequests' }\n )\n }\n\n let resolvedVaultAddress = params.vaultAddress\n if (!resolvedVaultAddress && params.vaultName) {\n const cache = getCache()\n if (cache.isEmpty() || cache.isExpired()) {\n await cache.refresh()\n }\n const vault = cache.getVaultByName(params.vaultName)\n if (!vault) {\n throw new VaultNotFoundByNameError(\n `No vault found with name \"${params.vaultName}\". The vault may not exist or may not be available for your organization.`,\n { vaultName: params.vaultName, endpoint: 'getWithdrawalRequests' }\n )\n }\n resolvedVaultAddress = vault.vault.boringVaultAddress\n }\n\n const filter = buildFilterString({\n userAddress: params.userAddress,\n chainId: params.chainId,\n vaultAddress: resolvedVaultAddress,\n status: params.status,\n })\n\n const queryParams = new URLSearchParams()\n if (filter) queryParams.set('filter', filter)\n if (params.pageSize) queryParams.set('pageSize', String(params.pageSize))\n if (params.pageToken) queryParams.set('pageToken', params.pageToken)\n\n const url = `${getRestV2BaseURL()}/amplify/withdrawalRequests?${queryParams.toString()}`\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT)\n\n const response = await fetch(url, {\n method: 'GET',\n headers: getRequestHeaders(),\n signal: controller.signal,\n })\n\n clearTimeout(timeout)\n\n if (!response.ok) {\n throw new APIError(\n `Failed to fetch withdrawal requests: ${response.status} ${response.statusText}`,\n {\n endpoint: 'getWithdrawalRequests',\n statusCode: response.status,\n }\n )\n }\n\n const data = (await response.json()) as {\n withdrawalRequests: WithdrawalRequest[]\n nextPageToken: string | null\n }\n\n return {\n withdrawalRequests: data.withdrawalRequests ?? [],\n nextPageToken: data.nextPageToken ?? null,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to fetch withdrawal requests: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getWithdrawalRequests', cause: error }\n )\n }\n}\n\n/**\n * Reads the withdrawal fee from the on-chain FeeModule contract\n *\n * Performs two sequential RPC calls:\n * 1. Reads the FeeModule address from WithdrawQueue.feeModule()\n * 2. Multicalls calculateOfferFees + offerFeePercentage on the FeeModule\n *\n * @param params - Parameters for fee calculation\n * @returns Fee amount and fee percentage\n * @throws {APIError} If vault not found or contract read fails\n *\n * @example\n * ```typescript\n * const fee = await getWithdrawalFee({\n * vaultName: \"Amplify USDC Core\",\n * chainId: 1,\n * assetAddress: \"0xA0b8...\", // USDC\n * amount: \"1.0\",\n * offerAsset: \"0x1234...\", // vault shares\n * wantAsset: \"0xA0b8...\", // USDC\n * receiver: \"0x5678...\",\n * });\n * console.log(fee.feeAmount, fee.feePercentage);\n * ```\n */\nexport async function getWithdrawalFee(\n params: GetWithdrawalFeeParams\n): Promise<WithdrawalFeeResult> {\n try {\n const normalizedChainId = toChainId(params.chainId)\n\n const config = await resolveVault({\n vaultName: params.vaultName,\n assetAddress: params.assetAddress,\n chainId: normalizedChainId,\n callerEndpoint: 'getWithdrawalFee',\n })\n\n if (!config.vault.withdrawQueueAddress) {\n throw new APIError(\n `WithdrawQueue contract address not configured for vault ${config.id}`,\n { endpoint: 'getWithdrawalFee' }\n )\n }\n\n if (!config.vault.boringVaultAddress) {\n throw new APIError(\n `BoringVault contract address not configured for vault ${config.id}`,\n { endpoint: 'getWithdrawalFee' }\n )\n }\n\n const client = await getClient(normalizedChainId)\n\n // Step 1: Read the FeeModule address from WithdrawQueue\n const feeModuleAddress = (await client.readContract({\n abi: WithdrawQueueAbi,\n address: config.vault.withdrawQueueAddress,\n functionName: 'feeModule',\n })) as Address\n\n // Get share decimals to parse the amount\n const shareDecimals = await getErc20Decimals({\n tokenAddress: config.vault.boringVaultAddress,\n chainId: normalizedChainId,\n })\n\n const amountBigInt = parseUnits(params.amount, shareDecimals)\n\n // Step 2: Multicall calculateOfferFees + offerFeePercentage\n const results = await client.multicall({\n contracts: [\n {\n abi: FeeModuleAbi,\n address: feeModuleAddress,\n functionName: 'calculateOfferFees',\n args: [\n amountBigInt,\n params.offerAsset,\n params.wantAsset,\n params.receiver,\n ],\n },\n {\n abi: FeeModuleAbi,\n address: feeModuleAddress,\n functionName: 'offerFeePercentage',\n },\n ],\n })\n\n const [feeAmountResult, feePercentageResult] = results\n\n if (\n feeAmountResult.status === 'failure' ||\n feePercentageResult.status === 'failure'\n ) {\n throw new APIError('Failed to read fee data from FeeModule contract', {\n endpoint: 'getWithdrawalFee',\n })\n }\n\n return {\n feeAmount: feeAmountResult.result,\n feePercentage: feePercentageResult.result,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to get withdrawal fee: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getWithdrawalFee', cause: error }\n )\n }\n}\n\n/**\n * Reads the minimum withdrawal order size from the WithdrawQueue contract\n *\n * @param params - Parameters to identify the vault\n * @returns Minimum order size in vault shares and share decimals\n * @throws {APIError} If vault not found or contract read fails\n *\n * @example\n * ```typescript\n * const result = await getMinimumWithdrawalOrderSize({\n * vaultName: \"Amplify USDC Core\",\n * chainId: 1,\n * assetAddress: \"0xA0b8...\",\n * });\n * console.log(result.minimumOrderSize, result.shareDecimals);\n * ```\n */\nexport async function getMinimumWithdrawalOrderSize(\n params: GetMinimumWithdrawalOrderSizeParams\n): Promise<MinimumWithdrawalOrderSizeResult> {\n try {\n const normalizedChainId = toChainId(params.chainId)\n\n const config = await resolveVault({\n vaultName: params.vaultName,\n assetAddress: params.assetAddress,\n chainId: normalizedChainId,\n callerEndpoint: 'getMinimumWithdrawalOrderSize',\n })\n\n if (!config.vault.withdrawQueueAddress) {\n throw new APIError(\n `WithdrawQueue contract address not configured for vault ${config.id}`,\n { endpoint: 'getMinimumWithdrawalOrderSize' }\n )\n }\n\n if (!config.vault.boringVaultAddress) {\n throw new APIError(\n `BoringVault contract address not configured for vault ${config.id}`,\n { endpoint: 'getMinimumWithdrawalOrderSize' }\n )\n }\n\n const client = await getClient(normalizedChainId)\n\n const [minOrderResult, shareDecimalsResult] = await client.multicall({\n contracts: [\n {\n abi: WithdrawQueueAbi,\n address: config.vault.withdrawQueueAddress,\n functionName: 'minimumOrderSize',\n },\n {\n abi: [\n {\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n ] as const,\n address: config.vault.boringVaultAddress,\n functionName: 'decimals',\n },\n ],\n })\n\n if (\n minOrderResult.status === 'failure' ||\n shareDecimalsResult.status === 'failure'\n ) {\n throw new APIError(\n 'Failed to read minimum order size from WithdrawQueue contract',\n { endpoint: 'getMinimumWithdrawalOrderSize' }\n )\n }\n\n return {\n minimumOrderSize: minOrderResult.result,\n shareDecimals: shareDecimalsResult.result,\n }\n } catch (error) {\n if (error instanceof APIError) {\n throw error\n }\n throw new APIError(\n `Failed to get minimum withdrawal order size: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { endpoint: 'getMinimumWithdrawalOrderSize', cause: error }\n )\n }\n}\n"]}
@@ -0,0 +1,118 @@
1
+ import { __publicField, isValidAddress, APIError, isValidChainId, getCache, getChainNameById } from './chunk-ODXJYXUH.mjs';
2
+
3
+ // src/types/withdraw-errors.ts
4
+ var WithdrawError = class _WithdrawError extends Error {
5
+ constructor(message, code, context) {
6
+ super(message);
7
+ /**
8
+ * Error code for programmatic handling
9
+ * @example "VAULT_NOT_FOUND", "INVALID_ADDRESS", "INSUFFICIENT_BALANCE"
10
+ */
11
+ __publicField(this, "code");
12
+ /**
13
+ * Additional context data for debugging
14
+ */
15
+ __publicField(this, "context");
16
+ this.name = "WithdrawError";
17
+ this.code = code;
18
+ this.context = context;
19
+ Object.setPrototypeOf(this, _WithdrawError.prototype);
20
+ }
21
+ };
22
+ var InvalidChainIdError = class _InvalidChainIdError extends WithdrawError {
23
+ constructor(message, context) {
24
+ super(message, "INVALID_CHAIN_ID", context);
25
+ this.name = "InvalidChainIdError";
26
+ Object.setPrototypeOf(this, _InvalidChainIdError.prototype);
27
+ }
28
+ };
29
+ var TransactionDataError = class _TransactionDataError extends WithdrawError {
30
+ constructor(message, context) {
31
+ super(message, "TRANSACTION_DATA_ERROR", context);
32
+ this.name = "TransactionDataError";
33
+ Object.setPrototypeOf(this, _TransactionDataError.prototype);
34
+ }
35
+ };
36
+ var VaultNotFoundByAddressError = class _VaultNotFoundByAddressError extends WithdrawError {
37
+ constructor(message, context) {
38
+ super(message, "VAULT_NOT_FOUND_BY_ADDRESS", context);
39
+ this.name = "VaultNotFoundByAddressError";
40
+ Object.setPrototypeOf(this, _VaultNotFoundByAddressError.prototype);
41
+ }
42
+ };
43
+ var VaultNotFoundByNameError = class _VaultNotFoundByNameError extends WithdrawError {
44
+ constructor(message, context) {
45
+ super(message, "VAULT_NOT_FOUND_BY_NAME", context);
46
+ this.name = "VaultNotFoundByNameError";
47
+ Object.setPrototypeOf(this, _VaultNotFoundByNameError.prototype);
48
+ }
49
+ };
50
+ var UnauthorizedVaultAccessError = class _UnauthorizedVaultAccessError extends WithdrawError {
51
+ constructor(message, context) {
52
+ super(message, "UNAUTHORIZED_VAULT_ACCESS", context);
53
+ this.name = "UnauthorizedVaultAccessError";
54
+ Object.setPrototypeOf(this, _UnauthorizedVaultAccessError.prototype);
55
+ }
56
+ };
57
+ function isVaultNotFoundByAddressError(error) {
58
+ return error instanceof VaultNotFoundByAddressError;
59
+ }
60
+ function isVaultNotFoundByNameError(error) {
61
+ return error instanceof VaultNotFoundByNameError;
62
+ }
63
+
64
+ // src/client/resolve-vault.ts
65
+ async function resolveVault(params) {
66
+ const { vaultName, assetAddress, chainId, callerEndpoint } = params;
67
+ if (!isValidAddress(assetAddress)) {
68
+ throw new APIError(
69
+ `Invalid assetAddress: ${assetAddress}. Must be a valid Ethereum address.`,
70
+ { endpoint: callerEndpoint }
71
+ );
72
+ }
73
+ if (!isValidChainId(chainId)) {
74
+ throw new APIError(
75
+ `Invalid chainId: ${chainId}. Must be a positive integer.`,
76
+ { endpoint: callerEndpoint }
77
+ );
78
+ }
79
+ const cache = getCache();
80
+ if (cache.isEmpty() || cache.isExpired()) {
81
+ await cache.refresh();
82
+ }
83
+ const vault = cache.getVaultByName(vaultName);
84
+ if (!vault) {
85
+ throw new VaultNotFoundByNameError(
86
+ `No vault found with name "${vaultName}". The vault may not exist or may not be available for your organization.`,
87
+ { vaultName, endpoint: callerEndpoint }
88
+ );
89
+ }
90
+ const supportedChainIds = /* @__PURE__ */ new Set([vault.chainId]);
91
+ for (const a of vault.supportedAssets) {
92
+ if (a.chainId != null) {
93
+ supportedChainIds.add(a.chainId);
94
+ }
95
+ }
96
+ if (!supportedChainIds.has(chainId)) {
97
+ const chains = Array.from(supportedChainIds).join(", ");
98
+ throw new APIError(
99
+ `Vault "${vaultName}" supports chains [${chains}], but ${getChainNameById(chainId)} (${chainId}) was requested.`,
100
+ { endpoint: callerEndpoint }
101
+ );
102
+ }
103
+ const matchedAsset = vault.supportedAssets.find(
104
+ (a) => a.address.toLowerCase() === assetAddress.toLowerCase() && (a.chainId == null || a.chainId === chainId)
105
+ );
106
+ if (!matchedAsset) {
107
+ const supported = vault.supportedAssets.filter((a) => a.chainId == null || a.chainId === chainId).map((a) => `${a.address} (${a.symbol})`).join(", ");
108
+ throw new APIError(
109
+ `Vault "${vaultName}" supports assets [${supported}] on chain ${chainId}, but asset ${assetAddress} was requested.`,
110
+ { endpoint: callerEndpoint }
111
+ );
112
+ }
113
+ return vault;
114
+ }
115
+
116
+ export { InvalidChainIdError, TransactionDataError, UnauthorizedVaultAccessError, VaultNotFoundByAddressError, VaultNotFoundByNameError, WithdrawError, isVaultNotFoundByAddressError, isVaultNotFoundByNameError, resolveVault };
117
+ //# sourceMappingURL=chunk-Y5LBT2WT.mjs.map
118
+ //# sourceMappingURL=chunk-Y5LBT2WT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/withdraw-errors.ts","../src/client/resolve-vault.ts"],"names":[],"mappings":"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","file":"chunk-Y5LBT2WT.mjs","sourcesContent":["/**\n * Withdraw operation error types\n *\n * Defines all error classes and error scenarios specific to the withdraw flow.\n * Provides type-safe error handling with clear error messages for different failure modes.\n *\n * @module types/withdraw-errors\n */\n\n/**\n * Base class for all withdraw-related errors\n *\n * Extends Error with additional context information for better error handling\n * and debugging in consuming applications.\n */\nexport class WithdrawError extends Error {\n /**\n * Error code for programmatic handling\n * @example \"VAULT_NOT_FOUND\", \"INVALID_ADDRESS\", \"INSUFFICIENT_BALANCE\"\n */\n readonly code: string\n\n /**\n * Additional context data for debugging\n */\n readonly context?: Record<string, unknown>\n\n constructor(\n message: string,\n code: string,\n context?: Record<string, unknown>\n ) {\n super(message)\n this.name = 'WithdrawError'\n this.code = code\n this.context = context\n\n // Maintain proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, WithdrawError.prototype)\n }\n}\n\n/**\n * Thrown when vault lookup fails\n *\n * Occurs when no vault matches the provided (yieldType, wantToken, chainId)\n * combination in the vault cache.\n *\n * @example\n * ```typescript\n * throw new VaultNotFoundError(\n * \"No vault found matching yieldType 'UNKNOWN', token '0x...', and chain 1\",\n * { yieldType: \"UNKNOWN\", token: \"0x...\", chainId: 1 }\n * );\n * ```\n */\nexport class VaultNotFoundError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_NOT_FOUND', context)\n this.name = 'VaultNotFoundError'\n Object.setPrototypeOf(this, VaultNotFoundError.prototype)\n }\n}\n\n/**\n * Thrown when multiple vaults match the lookup criteria\n *\n * Data integrity error indicating vault cache is corrupted or misconfigured.\n * Should not occur in production with well-formed vault data.\n *\n * @example\n * ```typescript\n * throw new MultipleVaultsFoundError(\n * \"Data integrity error: multiple vaults match yieldType 'CORE', token '0x...', chain 1\",\n * { count: 2, yieldType: \"CORE\" }\n * );\n * ```\n */\nexport class MultipleVaultsFoundError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'MULTIPLE_VAULTS_FOUND', context)\n this.name = 'MultipleVaultsFoundError'\n Object.setPrototypeOf(this, MultipleVaultsFoundError.prototype)\n }\n}\n\n/**\n * Thrown when recipient address is invalid\n *\n * Occurs when recipientAddress is:\n * - Not a valid Ethereum address format (0x + 40 hex chars)\n * - The zero address (0x0000...)\n * - Missing or empty\n *\n * @example\n * ```typescript\n * throw new InvalidAddressError(\n * \"Invalid recipient address: must be valid Ethereum address\",\n * { address: \"0xinvalid\", reason: \"not hex format\" }\n * );\n * ```\n */\nexport class InvalidAddressError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_ADDRESS', context)\n this.name = 'InvalidAddressError'\n Object.setPrototypeOf(this, InvalidAddressError.prototype)\n }\n}\n\n/**\n * Thrown when share amount is invalid\n *\n * Occurs when shareAmount is:\n * - Not a valid number string\n * - Zero or negative\n * - Cannot be converted to BigInt\n *\n * @example\n * ```typescript\n * throw new InvalidShareAmountError(\n * \"Share amount must be greater than zero\",\n * { amount: \"0\", reason: \"zero not allowed\" }\n * );\n * ```\n */\nexport class InvalidShareAmountError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_SHARE_AMOUNT', context)\n this.name = 'InvalidShareAmountError'\n Object.setPrototypeOf(this, InvalidShareAmountError.prototype)\n }\n}\n\n/**\n * Thrown when slippage value is invalid\n *\n * Occurs when slippage is:\n * - Negative\n * - Greater than 10000 (100%)\n * - Not an integer\n *\n * @example\n * ```typescript\n * throw new InvalidSlippageError(\n * \"Invalid slippage value: must be 0-10000 basis points\",\n * { slippage: -100, reason: \"negative not allowed\" }\n * );\n * ```\n */\nexport class InvalidSlippageError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_SLIPPAGE', context)\n this.name = 'InvalidSlippageError'\n Object.setPrototypeOf(this, InvalidSlippageError.prototype)\n }\n}\n\n/**\n * Thrown when yield type is invalid\n *\n * Occurs when yieldType is:\n * - Not defined in YieldType enum\n * - Empty or null\n * - Case-sensitive mismatch\n *\n * @example\n * ```typescript\n * throw new InvalidYieldTypeError(\n * \"Invalid yield type: 'UNKNOWN' is not supported\",\n * { yieldType: \"UNKNOWN\", supportedTypes: [\"CORE\", \"TREASURY\", \"FRONTIER\"] }\n * );\n * ```\n */\nexport class InvalidYieldTypeError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_YIELD_TYPE', context)\n this.name = 'InvalidYieldTypeError'\n Object.setPrototypeOf(this, InvalidYieldTypeError.prototype)\n }\n}\n\n/**\n * Thrown when chain ID is invalid\n *\n * Occurs when chainId is:\n * - Not a positive integer\n * - Not in list of supported chains\n * - Mismatches vault's supported networks\n *\n * @example\n * ```typescript\n * throw new InvalidChainIdError(\n * \"Chain ID 999999 is not supported\",\n * { chainId: 999999, supportedChains: [1, 288, 1329] }\n * );\n * ```\n */\nexport class InvalidChainIdError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'INVALID_CHAIN_ID', context)\n this.name = 'InvalidChainIdError'\n Object.setPrototypeOf(this, InvalidChainIdError.prototype)\n }\n}\n\n/**\n * Thrown when transaction data cannot be constructed\n *\n * Occurs during transaction data assembly if:\n * - Required vault addresses are missing\n * - ABI is unavailable\n * - Function encoding fails\n *\n * @example\n * ```typescript\n * throw new TransactionDataError(\n * \"Failed to construct transaction data: missing Teller address\",\n * { reason: \"missing address\", field: \"tellerAddress\" }\n * );\n * ```\n */\nexport class TransactionDataError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'TRANSACTION_DATA_ERROR', context)\n this.name = 'TransactionDataError'\n Object.setPrototypeOf(this, TransactionDataError.prototype)\n }\n}\n\n/**\n * Thrown when vault cache is empty or uninitialized\n *\n * Occurs when attempting to lookup vaults before cache is populated.\n * Consumer should call getVaults() or getSupportedAssets() first.\n *\n * @example\n * ```typescript\n * throw new VaultCacheEmptyError(\n * \"Vault cache is empty. Call getVaults() or getSupportedAssets() first.\",\n * { reason: \"cache not initialized\" }\n * );\n * ```\n */\nexport class VaultCacheEmptyError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_CACHE_EMPTY', context)\n this.name = 'VaultCacheEmptyError'\n Object.setPrototypeOf(this, VaultCacheEmptyError.prototype)\n }\n}\n\n/**\n * Type guard for WithdrawError\n *\n * Safely check if an error is a WithdrawError\n *\n * @example\n * ```typescript\n * try {\n * await prepareWithdrawOrderTxData(params);\n * } catch (error) {\n * if (isWithdrawError(error)) {\n * console.error(`Withdraw error [${error.code}]: ${error.message}`);\n * }\n * }\n * ```\n */\nexport function isWithdrawError(error: unknown): error is WithdrawError {\n return error instanceof WithdrawError\n}\n\n/**\n * Type guard for vault not found errors\n */\nexport function isVaultNotFoundError(\n error: unknown\n): error is VaultNotFoundError {\n return error instanceof VaultNotFoundError\n}\n\n/**\n * Type guard for invalid address errors\n */\nexport function isInvalidAddressError(\n error: unknown\n): error is InvalidAddressError {\n return error instanceof InvalidAddressError\n}\n\n/**\n * Type guard for invalid share amount errors\n */\nexport function isInvalidShareAmountError(\n error: unknown\n): error is InvalidShareAmountError {\n return error instanceof InvalidShareAmountError\n}\n\n/**\n * Type guard for invalid slippage errors\n */\nexport function isInvalidSlippageError(\n error: unknown\n): error is InvalidSlippageError {\n return error instanceof InvalidSlippageError\n}\n\nexport class VaultNotFoundByAddressError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_NOT_FOUND_BY_ADDRESS', context)\n this.name = 'VaultNotFoundByAddressError'\n Object.setPrototypeOf(this, VaultNotFoundByAddressError.prototype)\n }\n}\n\nexport class VaultNotFoundByNameError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'VAULT_NOT_FOUND_BY_NAME', context)\n this.name = 'VaultNotFoundByNameError'\n Object.setPrototypeOf(this, VaultNotFoundByNameError.prototype)\n }\n}\n\nexport class UnauthorizedVaultAccessError extends WithdrawError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, 'UNAUTHORIZED_VAULT_ACCESS', context)\n this.name = 'UnauthorizedVaultAccessError'\n Object.setPrototypeOf(this, UnauthorizedVaultAccessError.prototype)\n }\n}\n\nexport function isVaultNotFoundByAddressError(\n error: unknown\n): error is VaultNotFoundByAddressError {\n return error instanceof VaultNotFoundByAddressError\n}\n\nexport function isVaultNotFoundByNameError(\n error: unknown\n): error is VaultNotFoundByNameError {\n return error instanceof VaultNotFoundByNameError\n}\n\n/**\n * Helper to format error message for logging\n *\n * @param error - Any error to format\n * @returns Human-readable error message with context if available\n */\nexport function formatWithdrawError(error: unknown): string {\n if (isWithdrawError(error)) {\n const context =\n error.context && Object.keys(error.context).length > 0\n ? ` | context: ${JSON.stringify(error.context)}`\n : ''\n return `[${error.code}] ${error.message}${context}`\n }\n if (error instanceof Error) {\n return error.message\n }\n return String(error)\n}\n","import type { Address } from 'viem'\nimport type { AmplifyVault } from '../types/amplify-sdk-api'\nimport {\n APIError,\n isValidAddress,\n isValidChainId,\n} from '../types/amplify-sdk-api'\nimport { VaultNotFoundByNameError } from '../types/withdraw-errors'\nimport { getChainNameById } from '../utils/chain-utils'\nimport { getCache } from './amplify-sdk-client'\n\n/**\n * Parameters for resolving a vault by name, chain, and asset.\n *\n * All three fields are required and validated against the resolved vault\n * to ensure the calldata is unambiguous — wrong chain or wrong asset will\n * throw an `APIError` before any transaction is prepared.\n *\n * @property {string} vaultName - Human-readable vault name (e.g. \"Amplify USDC Core\")\n * @property {Address} assetAddress - Token contract address for the deposit or want asset\n * @property {number} chainId - Chain ID where the vault is deployed\n * @property {string} callerEndpoint - Caller name included in error messages for tracing\n */\nexport interface ResolveVaultParams {\n vaultName: string\n assetAddress: Address\n chainId: number\n callerEndpoint: string\n}\n\n/**\n * Resolves a vault by name and validates it against the provided chain ID\n * and asset address.\n *\n * Throws an `APIError` when:\n * - `assetAddress` or `chainId` fail basic format validation\n * - No vault exists with the given `vaultName`\n * - The resolved vault is on a different chain than `chainId`\n * - The resolved vault's supported asset does not match `assetAddress`\n */\nexport async function resolveVault(\n params: ResolveVaultParams\n): Promise<AmplifyVault> {\n const { vaultName, assetAddress, chainId, callerEndpoint } = params\n\n if (!isValidAddress(assetAddress)) {\n throw new APIError(\n `Invalid assetAddress: ${assetAddress}. Must be a valid Ethereum address.`,\n { endpoint: callerEndpoint }\n )\n }\n\n if (!isValidChainId(chainId)) {\n throw new APIError(\n `Invalid chainId: ${chainId}. Must be a positive integer.`,\n { endpoint: callerEndpoint }\n )\n }\n\n const cache = getCache()\n\n if (cache.isEmpty() || cache.isExpired()) {\n await cache.refresh()\n }\n\n const vault = cache.getVaultByName(vaultName)\n if (!vault) {\n throw new VaultNotFoundByNameError(\n `No vault found with name \"${vaultName}\". The vault may not exist or may not be available for your organization.`,\n { vaultName, endpoint: callerEndpoint }\n )\n }\n\n const supportedChainIds = new Set<number>([vault.chainId])\n for (const a of vault.supportedAssets) {\n if (a.chainId != null) {\n supportedChainIds.add(a.chainId)\n }\n }\n\n if (!supportedChainIds.has(chainId)) {\n const chains = Array.from(supportedChainIds).join(', ')\n throw new APIError(\n `Vault \"${vaultName}\" supports chains [${chains}], but ${getChainNameById(chainId)} (${chainId}) was requested.`,\n { endpoint: callerEndpoint }\n )\n }\n\n const matchedAsset = vault.supportedAssets.find(\n (a) =>\n a.address.toLowerCase() === assetAddress.toLowerCase() &&\n (a.chainId == null || a.chainId === chainId)\n )\n if (!matchedAsset) {\n const supported = vault.supportedAssets\n .filter((a) => a.chainId == null || a.chainId === chainId)\n .map((a) => `${a.address} (${a.symbol})`)\n .join(', ')\n throw new APIError(\n `Vault \"${vaultName}\" supports assets [${supported}] on chain ${chainId}, but asset ${assetAddress} was requested.`,\n { endpoint: callerEndpoint }\n )\n }\n\n return vault\n}\n"]}
package/dist/core.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Address } from 'viem';
2
2
  export { Address } from 'viem';
3
- import { C as ChainId } from './chain-utils-BdJecHBA.mjs';
4
- export { t as toChainId } from './chain-utils-BdJecHBA.mjs';
3
+ import { C as ChainId, A as AmplifyVault } from './chain-utils-5r2UnCDS.mjs';
4
+ export { t as toChainId } from './chain-utils-5r2UnCDS.mjs';
5
5
  import 'viem/chains';
6
6
 
7
7
  type AccountantBaseProps = {
@@ -12,13 +12,13 @@ type RateInQuoteWithAssetDecimalsProps = AccountantBaseProps & {
12
12
  assetAddress: Address;
13
13
  };
14
14
  declare const getRateInQuoteWithAssetDecimals: ({ assetAddress, accountantAddress, chainId, }: RateInQuoteWithAssetDecimalsProps) => Promise<[{
15
- error?: undefined;
16
- result: number;
17
- status: "success";
18
- } | {
19
15
  error: Error;
20
16
  result?: undefined;
21
17
  status: "failure";
18
+ } | {
19
+ error?: undefined;
20
+ result: number;
21
+ status: "success";
22
22
  }, {
23
23
  error: Error;
24
24
  result?: undefined;
@@ -66,6 +66,49 @@ interface GetErc20AllowanceParams {
66
66
  }
67
67
  declare const getErc20Allowance: ({ chainId, tokenAddress, recipientAddress, spenderAddress, }: GetErc20AllowanceParams) => Promise<bigint>;
68
68
 
69
+ interface DepositFeeStructure {
70
+ feePercentage: bigint;
71
+ flatFee: bigint;
72
+ oneHundredPercent: bigint;
73
+ }
74
+ /**
75
+ * Reads the supply cap from a CommunityCodeDepositor contract.
76
+ *
77
+ * **Important:** Only DCD contracts paired with a deposit fee module support
78
+ * this function. Calling it against legacy DCDs (without `depositFeeModuleAddress`)
79
+ * will revert. Callers must check both `communityCodeDepositorAddress` and
80
+ * `depositFeeModuleAddress` before invoking.
81
+ */
82
+ declare function readSupplyCapInBase(dcdAddress: Address, chainId: number): Promise<bigint>;
83
+ /**
84
+ * Reads the deposit fee structure from a DCD fee module contract for a given
85
+ * deposit asset. Null on-chain values are treated as zero rather than as
86
+ * errors, so callers always receive a usable fee structure.
87
+ */
88
+ declare function readDepositFeeStructure(feeModuleAddress: Address, depositAsset: Address, chainId: number): Promise<DepositFeeStructure>;
89
+ /**
90
+ * Reads the withdraw fee percentage from on-chain contracts.
91
+ * First reads the feeModule address from the WithdrawQueue, then reads
92
+ * offerFeePercentage from the FeeModule. Returns null if either call fails.
93
+ */
94
+ declare function readWithdrawFeePercentage(withdrawQueueAddress: Address, chainId: number): Promise<{
95
+ feeModuleAddress: string;
96
+ offerFeePercentage: bigint;
97
+ } | null>;
98
+ /**
99
+ * Enriches vaults with on-chain supply cap data and defaults missing fee
100
+ * values to zero. Fees are sourced from GraphQL (indexer); when the indexer
101
+ * returns null/empty fees for a vault that has a fee module configured, the
102
+ * fees are treated as zero rather than triggering RPC fallback reads.
103
+ *
104
+ * Supply cap enrichment only runs when both `communityCodeDepositorAddress`
105
+ * and `depositFeeModuleAddress` are present — legacy DCDs without a fee
106
+ * module do not support `supplyCapInBase`.
107
+ *
108
+ * Individual vault failures are silently ignored so the vault still loads.
109
+ */
110
+ declare function enrichVaultsWithSupplyCapsAndFees(vaults: AmplifyVault[]): Promise<AmplifyVault[]>;
111
+
69
112
  type PausedStatusProps = {
70
113
  accountantAddress: Address;
71
114
  tellerAddress: Address;
@@ -149,4 +192,4 @@ interface FetchWithdrawAssetsParams {
149
192
  */
150
193
  declare function fetchWithdrawAssets(params?: FetchWithdrawAssetsParams): Promise<WithdrawAssetsResponse>;
151
194
 
152
- export { type BridgeData, ChainId, fetchWithdrawAssets, getAssetSlippage, getErc20Allowance, getErc20Balance, getErc20Decimals, getEthPrice, getPausedStates, getPreviewFee, getRateInQuoteWithAssetDecimals, getTotalSupply, getVaultAllowance };
195
+ export { type BridgeData, ChainId, type DepositFeeStructure, enrichVaultsWithSupplyCapsAndFees, fetchWithdrawAssets, getAssetSlippage, getErc20Allowance, getErc20Balance, getErc20Decimals, getEthPrice, getPausedStates, getPreviewFee, getRateInQuoteWithAssetDecimals, getTotalSupply, getVaultAllowance, readDepositFeeStructure, readSupplyCapInBase, readWithdrawFeePercentage };
package/dist/core.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Address } from 'viem';
2
2
  export { Address } from 'viem';
3
- import { C as ChainId } from './chain-utils-BdJecHBA.js';
4
- export { t as toChainId } from './chain-utils-BdJecHBA.js';
3
+ import { C as ChainId, A as AmplifyVault } from './chain-utils-5r2UnCDS.js';
4
+ export { t as toChainId } from './chain-utils-5r2UnCDS.js';
5
5
  import 'viem/chains';
6
6
 
7
7
  type AccountantBaseProps = {
@@ -12,13 +12,13 @@ type RateInQuoteWithAssetDecimalsProps = AccountantBaseProps & {
12
12
  assetAddress: Address;
13
13
  };
14
14
  declare const getRateInQuoteWithAssetDecimals: ({ assetAddress, accountantAddress, chainId, }: RateInQuoteWithAssetDecimalsProps) => Promise<[{
15
- error?: undefined;
16
- result: number;
17
- status: "success";
18
- } | {
19
15
  error: Error;
20
16
  result?: undefined;
21
17
  status: "failure";
18
+ } | {
19
+ error?: undefined;
20
+ result: number;
21
+ status: "success";
22
22
  }, {
23
23
  error: Error;
24
24
  result?: undefined;
@@ -66,6 +66,49 @@ interface GetErc20AllowanceParams {
66
66
  }
67
67
  declare const getErc20Allowance: ({ chainId, tokenAddress, recipientAddress, spenderAddress, }: GetErc20AllowanceParams) => Promise<bigint>;
68
68
 
69
+ interface DepositFeeStructure {
70
+ feePercentage: bigint;
71
+ flatFee: bigint;
72
+ oneHundredPercent: bigint;
73
+ }
74
+ /**
75
+ * Reads the supply cap from a CommunityCodeDepositor contract.
76
+ *
77
+ * **Important:** Only DCD contracts paired with a deposit fee module support
78
+ * this function. Calling it against legacy DCDs (without `depositFeeModuleAddress`)
79
+ * will revert. Callers must check both `communityCodeDepositorAddress` and
80
+ * `depositFeeModuleAddress` before invoking.
81
+ */
82
+ declare function readSupplyCapInBase(dcdAddress: Address, chainId: number): Promise<bigint>;
83
+ /**
84
+ * Reads the deposit fee structure from a DCD fee module contract for a given
85
+ * deposit asset. Null on-chain values are treated as zero rather than as
86
+ * errors, so callers always receive a usable fee structure.
87
+ */
88
+ declare function readDepositFeeStructure(feeModuleAddress: Address, depositAsset: Address, chainId: number): Promise<DepositFeeStructure>;
89
+ /**
90
+ * Reads the withdraw fee percentage from on-chain contracts.
91
+ * First reads the feeModule address from the WithdrawQueue, then reads
92
+ * offerFeePercentage from the FeeModule. Returns null if either call fails.
93
+ */
94
+ declare function readWithdrawFeePercentage(withdrawQueueAddress: Address, chainId: number): Promise<{
95
+ feeModuleAddress: string;
96
+ offerFeePercentage: bigint;
97
+ } | null>;
98
+ /**
99
+ * Enriches vaults with on-chain supply cap data and defaults missing fee
100
+ * values to zero. Fees are sourced from GraphQL (indexer); when the indexer
101
+ * returns null/empty fees for a vault that has a fee module configured, the
102
+ * fees are treated as zero rather than triggering RPC fallback reads.
103
+ *
104
+ * Supply cap enrichment only runs when both `communityCodeDepositorAddress`
105
+ * and `depositFeeModuleAddress` are present — legacy DCDs without a fee
106
+ * module do not support `supplyCapInBase`.
107
+ *
108
+ * Individual vault failures are silently ignored so the vault still loads.
109
+ */
110
+ declare function enrichVaultsWithSupplyCapsAndFees(vaults: AmplifyVault[]): Promise<AmplifyVault[]>;
111
+
69
112
  type PausedStatusProps = {
70
113
  accountantAddress: Address;
71
114
  tellerAddress: Address;
@@ -149,4 +192,4 @@ interface FetchWithdrawAssetsParams {
149
192
  */
150
193
  declare function fetchWithdrawAssets(params?: FetchWithdrawAssetsParams): Promise<WithdrawAssetsResponse>;
151
194
 
152
- export { type BridgeData, ChainId, fetchWithdrawAssets, getAssetSlippage, getErc20Allowance, getErc20Balance, getErc20Decimals, getEthPrice, getPausedStates, getPreviewFee, getRateInQuoteWithAssetDecimals, getTotalSupply, getVaultAllowance };
195
+ export { type BridgeData, ChainId, type DepositFeeStructure, enrichVaultsWithSupplyCapsAndFees, fetchWithdrawAssets, getAssetSlippage, getErc20Allowance, getErc20Balance, getErc20Decimals, getEthPrice, getPausedStates, getPreviewFee, getRateInQuoteWithAssetDecimals, getTotalSupply, getVaultAllowance, readDepositFeeStructure, readSupplyCapInBase, readWithdrawFeePercentage };
package/dist/core.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkNNDY5TID_js = require('./chunk-NNDY5TID.js');
4
- var chunkWYBYBPX5_js = require('./chunk-WYBYBPX5.js');
3
+ var chunkFHE43NKY_js = require('./chunk-FHE43NKY.js');
4
+ var chunkGOJQYEJQ_js = require('./chunk-GOJQYEJQ.js');
5
5
  var viem = require('viem');
6
6
 
7
7
  async function getVaultAllowance({
@@ -10,7 +10,7 @@ async function getVaultAllowance({
10
10
  recipientAddress,
11
11
  chainId
12
12
  }) {
13
- const client = await chunkWYBYBPX5_js.getClient(chainId);
13
+ const client = await chunkGOJQYEJQ_js.getClient(chainId);
14
14
  const allowance = await client.readContract({
15
15
  abi: viem.erc20Abi,
16
16
  address: tokenAddress,
@@ -23,7 +23,7 @@ async function getTotalSupply({
23
23
  tokenAddress,
24
24
  chainId
25
25
  }) {
26
- const client = await chunkWYBYBPX5_js.getClient(chainId);
26
+ const client = await chunkGOJQYEJQ_js.getClient(chainId);
27
27
  const totalSupply = await client.readContract({
28
28
  abi: viem.erc20Abi,
29
29
  address: tokenAddress,
@@ -73,10 +73,10 @@ var ChainlinkAbi = [
73
73
  async function getEthPrice({
74
74
  chainId
75
75
  }) {
76
- const client = await chunkWYBYBPX5_js.getClient(chainId);
76
+ const client = await chunkGOJQYEJQ_js.getClient(chainId);
77
77
  const priceData = await client.readContract({
78
78
  abi: ChainlinkAbi,
79
- address: chunkWYBYBPX5_js.CHAINLINK_ADDRESS,
79
+ address: chunkGOJQYEJQ_js.CHAINLINK_ADDRESS,
80
80
  functionName: "latestRoundData",
81
81
  args: []
82
82
  });
@@ -1097,7 +1097,7 @@ var getPausedStates = async ({
1097
1097
  tellerAddress,
1098
1098
  chainId
1099
1099
  }) => {
1100
- const client = await chunkWYBYBPX5_js.getClient(chainId);
1100
+ const client = await chunkGOJQYEJQ_js.getClient(chainId);
1101
1101
  const results = await client.multicall({
1102
1102
  contracts: [
1103
1103
  {
@@ -1106,7 +1106,7 @@ var getPausedStates = async ({
1106
1106
  functionName: "isPaused"
1107
1107
  },
1108
1108
  {
1109
- abi: chunkNNDY5TID_js.AccountantAbi,
1109
+ abi: chunkFHE43NKY_js.AccountantAbi,
1110
1110
  address: accountantAddress,
1111
1111
  functionName: "accountantState"
1112
1112
  }
@@ -1118,7 +1118,7 @@ var getPausedStates = async ({
1118
1118
  // src/api/withdraw-assets.ts
1119
1119
  var assetsCache = null;
1120
1120
  function constructUrl(params) {
1121
- const withdrawAssetsUrl = `${chunkWYBYBPX5_js.API_BASE_URL}/v1/protocol/withdraw-assets`;
1121
+ const withdrawAssetsUrl = `${chunkGOJQYEJQ_js.API_BASE_URL}/v1/protocol/withdraw-assets`;
1122
1122
  if (!params) return withdrawAssetsUrl;
1123
1123
  const queryParams = new URLSearchParams();
1124
1124
  if (params.chainId) queryParams.append("chainId", params.chainId.toString());
@@ -1149,7 +1149,7 @@ async function fetchWithdrawAssets(params) {
1149
1149
  }
1150
1150
 
1151
1151
  // src/api/solver-slippage.ts
1152
- async function getAssetSlippage(chainId, vaultAddress, tokenAddress, defaultSlippage = chunkWYBYBPX5_js.DEFAULT_SLIPPAGE_BPS) {
1152
+ async function getAssetSlippage(chainId, vaultAddress, tokenAddress, defaultSlippage = chunkGOJQYEJQ_js.DEFAULT_SLIPPAGE_BPS) {
1153
1153
  try {
1154
1154
  const withdrawAssets = await fetchWithdrawAssets();
1155
1155
  if (!withdrawAssets) {
@@ -1179,7 +1179,7 @@ var getPreviewFee = async ({
1179
1179
  contractAddress,
1180
1180
  chainId
1181
1181
  }) => {
1182
- const client = await chunkWYBYBPX5_js.getClient(chainId);
1182
+ const client = await chunkGOJQYEJQ_js.getClient(chainId);
1183
1183
  const rate = await client.readContract({
1184
1184
  abi: TellerAbi,
1185
1185
  address: contractAddress,
@@ -1191,23 +1191,39 @@ var getPreviewFee = async ({
1191
1191
 
1192
1192
  Object.defineProperty(exports, "getErc20Allowance", {
1193
1193
  enumerable: true,
1194
- get: function () { return chunkNNDY5TID_js.getErc20Allowance; }
1194
+ get: function () { return chunkFHE43NKY_js.getErc20Allowance; }
1195
1195
  });
1196
1196
  Object.defineProperty(exports, "getErc20Balance", {
1197
1197
  enumerable: true,
1198
- get: function () { return chunkNNDY5TID_js.getErc20Balance; }
1198
+ get: function () { return chunkFHE43NKY_js.getErc20Balance; }
1199
1199
  });
1200
1200
  Object.defineProperty(exports, "getErc20Decimals", {
1201
1201
  enumerable: true,
1202
- get: function () { return chunkNNDY5TID_js.getErc20Decimals; }
1202
+ get: function () { return chunkFHE43NKY_js.getErc20Decimals; }
1203
1203
  });
1204
1204
  Object.defineProperty(exports, "getRateInQuoteWithAssetDecimals", {
1205
1205
  enumerable: true,
1206
- get: function () { return chunkNNDY5TID_js.getRateInQuoteWithAssetDecimals; }
1206
+ get: function () { return chunkFHE43NKY_js.getRateInQuoteWithAssetDecimals; }
1207
+ });
1208
+ Object.defineProperty(exports, "enrichVaultsWithSupplyCapsAndFees", {
1209
+ enumerable: true,
1210
+ get: function () { return chunkGOJQYEJQ_js.enrichVaultsWithSupplyCapsAndFees; }
1211
+ });
1212
+ Object.defineProperty(exports, "readDepositFeeStructure", {
1213
+ enumerable: true,
1214
+ get: function () { return chunkGOJQYEJQ_js.readDepositFeeStructure; }
1215
+ });
1216
+ Object.defineProperty(exports, "readSupplyCapInBase", {
1217
+ enumerable: true,
1218
+ get: function () { return chunkGOJQYEJQ_js.readSupplyCapInBase; }
1219
+ });
1220
+ Object.defineProperty(exports, "readWithdrawFeePercentage", {
1221
+ enumerable: true,
1222
+ get: function () { return chunkGOJQYEJQ_js.readWithdrawFeePercentage; }
1207
1223
  });
1208
1224
  Object.defineProperty(exports, "toChainId", {
1209
1225
  enumerable: true,
1210
- get: function () { return chunkWYBYBPX5_js.toChainId; }
1226
+ get: function () { return chunkGOJQYEJQ_js.toChainId; }
1211
1227
  });
1212
1228
  exports.fetchWithdrawAssets = fetchWithdrawAssets;
1213
1229
  exports.getAssetSlippage = getAssetSlippage;
package/dist/core.mjs CHANGED
@@ -1,7 +1,7 @@
1
- import { AccountantAbi } from './chunk-Q5FXJU5Y.mjs';
2
- export { getErc20Allowance, getErc20Balance, getErc20Decimals, getRateInQuoteWithAssetDecimals } from './chunk-Q5FXJU5Y.mjs';
3
- import { DEFAULT_SLIPPAGE_BPS, getClient, CHAINLINK_ADDRESS, API_BASE_URL } from './chunk-WK7EJRBB.mjs';
4
- export { toChainId } from './chunk-WK7EJRBB.mjs';
1
+ import { AccountantAbi } from './chunk-UY2WD7MF.mjs';
2
+ export { getErc20Allowance, getErc20Balance, getErc20Decimals, getRateInQuoteWithAssetDecimals } from './chunk-UY2WD7MF.mjs';
3
+ import { DEFAULT_SLIPPAGE_BPS, getClient, CHAINLINK_ADDRESS, API_BASE_URL } from './chunk-ODXJYXUH.mjs';
4
+ export { enrichVaultsWithSupplyCapsAndFees, readDepositFeeStructure, readSupplyCapInBase, readWithdrawFeePercentage, toChainId } from './chunk-ODXJYXUH.mjs';
5
5
  import { erc20Abi } from 'viem';
6
6
 
7
7
  async function getVaultAllowance({