@lombard.finance/sdk 4.5.1 → 4.6.0

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 (106) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/api.cjs +1 -1
  3. package/dist/api.js +2 -2
  4. package/dist/btc.cjs +1 -1
  5. package/dist/btc.js +2 -2
  6. package/dist/chunks/{BtcActions-B-ttz47_.cjs → BtcActions-Bic_HKkw.cjs} +2 -2
  7. package/dist/chunks/{BtcActions-B-ttz47_.cjs.map → BtcActions-Bic_HKkw.cjs.map} +1 -1
  8. package/dist/chunks/{BtcActions-HGHFC106.js → BtcActions-CI5XotUx.js} +4 -4
  9. package/dist/chunks/{BtcActions-HGHFC106.js.map → BtcActions-CI5XotUx.js.map} +1 -1
  10. package/dist/chunks/{EvmActions-TNM8i9Xg.js → EvmActions-C7EKF3jb.js} +6 -6
  11. package/dist/chunks/{EvmActions-TNM8i9Xg.js.map → EvmActions-C7EKF3jb.js.map} +1 -1
  12. package/dist/chunks/{EvmActions-BGxXtQFZ.cjs → EvmActions-D_sFfTAK.cjs} +2 -2
  13. package/dist/chunks/{EvmActions-BGxXtQFZ.cjs.map → EvmActions-D_sFfTAK.cjs.map} +1 -1
  14. package/dist/chunks/{ReferralsClient-DvEsA3II.js → ReferralsClient-AxhLoWRT.js} +2 -2
  15. package/dist/chunks/{ReferralsClient-DvEsA3II.js.map → ReferralsClient-AxhLoWRT.js.map} +1 -1
  16. package/dist/chunks/{ReferralsClient-Cmrjo9bN.cjs → ReferralsClient-bZo9Jpg6.cjs} +2 -2
  17. package/dist/chunks/{ReferralsClient-Cmrjo9bN.cjs.map → ReferralsClient-bZo9Jpg6.cjs.map} +1 -1
  18. package/dist/chunks/config-CSo0k7gN.cjs +2 -0
  19. package/dist/chunks/config-CSo0k7gN.cjs.map +1 -0
  20. package/dist/chunks/config-JT3GvwPB.js +392 -0
  21. package/dist/chunks/config-JT3GvwPB.js.map +1 -0
  22. package/dist/chunks/{defi-registry-DDNavtO1.cjs → defi-registry-hHpGoh1m.cjs} +2 -2
  23. package/dist/chunks/{defi-registry-DDNavtO1.cjs.map → defi-registry-hHpGoh1m.cjs.map} +1 -1
  24. package/dist/chunks/{defi-registry-DxjjBQTV.js → defi-registry-ig-wro_O.js} +2 -2
  25. package/dist/chunks/{defi-registry-DxjjBQTV.js.map → defi-registry-ig-wro_O.js.map} +1 -1
  26. package/dist/chunks/{depositStatus-DTc01ZoZ.js → depositStatus-BrrE4n4B.js} +2 -2
  27. package/dist/chunks/{depositStatus-DTc01ZoZ.js.map → depositStatus-BrrE4n4B.js.map} +1 -1
  28. package/dist/chunks/{depositStatus-CFo5jW89.cjs → depositStatus-D5t8HN_A.cjs} +2 -2
  29. package/dist/chunks/{depositStatus-CFo5jW89.cjs.map → depositStatus-D5t8HN_A.cjs.map} +1 -1
  30. package/dist/chunks/{events-DvTn2yHn.cjs → events-BfRsYM_-.cjs} +2 -2
  31. package/dist/chunks/{events-DvTn2yHn.cjs.map → events-BfRsYM_-.cjs.map} +1 -1
  32. package/dist/chunks/{events-83d3qdxG.js → events-LMs7IA1e.js} +8 -8
  33. package/dist/chunks/{events-83d3qdxG.js.map → events-LMs7IA1e.js.map} +1 -1
  34. package/dist/chunks/{get-vault-tvl-Ct_Zkg7C.js → get-vault-tvl-C3Yr4MI4.js} +2 -2
  35. package/dist/chunks/{get-vault-tvl-Ct_Zkg7C.js.map → get-vault-tvl-C3Yr4MI4.js.map} +1 -1
  36. package/dist/chunks/{get-vault-tvl-D_tQIDAs.cjs → get-vault-tvl-CRbxkHmr.cjs} +2 -2
  37. package/dist/chunks/{get-vault-tvl-D_tQIDAs.cjs.map → get-vault-tvl-CRbxkHmr.cjs.map} +1 -1
  38. package/dist/chunks/{get-vault-withdrawals-jk7Sv4S4.js → get-vault-withdrawals-CQwNiILS.js} +2 -2
  39. package/dist/chunks/{get-vault-withdrawals-jk7Sv4S4.js.map → get-vault-withdrawals-CQwNiILS.js.map} +1 -1
  40. package/dist/chunks/{get-vault-withdrawals-8ALlEiAC.cjs → get-vault-withdrawals-QqvpZnxA.cjs} +2 -2
  41. package/dist/chunks/{get-vault-withdrawals-8ALlEiAC.cjs.map → get-vault-withdrawals-QqvpZnxA.cjs.map} +1 -1
  42. package/dist/chunks/{statusConstants-qfM-LJfE.js → statusConstants-BU4PglPs.js} +3 -3
  43. package/dist/chunks/{statusConstants-qfM-LJfE.js.map → statusConstants-BU4PglPs.js.map} +1 -1
  44. package/dist/chunks/{statusConstants-8ra-0ydr.cjs → statusConstants-CCKi5qUm.cjs} +2 -2
  45. package/dist/chunks/{statusConstants-8ra-0ydr.cjs.map → statusConstants-CCKi5qUm.cjs.map} +1 -1
  46. package/dist/chunks/{unstakeLBTC-CmoCaGX9.cjs → unstakeLBTC-3bwLj1qT.cjs} +2 -2
  47. package/dist/chunks/{unstakeLBTC-CmoCaGX9.cjs.map → unstakeLBTC-3bwLj1qT.cjs.map} +1 -1
  48. package/dist/chunks/{unstakeLBTC-DtvVbpbU.js → unstakeLBTC-BrVLnaac.js} +2 -2
  49. package/dist/chunks/{unstakeLBTC-DtvVbpbU.js.map → unstakeLBTC-BrVLnaac.js.map} +1 -1
  50. package/dist/chunks/{withdraw-i0AueZ_C.cjs → withdraw-BKEovicU.cjs} +2 -2
  51. package/dist/chunks/{withdraw-i0AueZ_C.cjs.map → withdraw-BKEovicU.cjs.map} +1 -1
  52. package/dist/chunks/{withdraw-DgjuaUN3.js → withdraw-rndehhDn.js} +2 -2
  53. package/dist/chunks/{withdraw-DgjuaUN3.js.map → withdraw-rndehhDn.js.map} +1 -1
  54. package/dist/chunks/wrapToBtce-BVu8ALEo.cjs +2 -0
  55. package/dist/chunks/wrapToBtce-BVu8ALEo.cjs.map +1 -0
  56. package/dist/chunks/wrapToBtce-CML1FYEZ.js +298 -0
  57. package/dist/chunks/wrapToBtce-CML1FYEZ.js.map +1 -0
  58. package/dist/contract-functions/getBtceShares/getBtceShares.d.ts +25 -0
  59. package/dist/contract-functions/getBtceShares/getBtceShares.d.ts.map +1 -0
  60. package/dist/contract-functions/getBtceShares/index.d.ts +2 -0
  61. package/dist/contract-functions/getBtceShares/index.d.ts.map +1 -0
  62. package/dist/contract-functions/getEarnPosition/getEarnPosition.d.ts +52 -0
  63. package/dist/contract-functions/getEarnPosition/getEarnPosition.d.ts.map +1 -0
  64. package/dist/contract-functions/getEarnPosition/index.d.ts +2 -0
  65. package/dist/contract-functions/getEarnPosition/index.d.ts.map +1 -0
  66. package/dist/contract-functions/getSharesByAddress/getSharesByAddress.d.ts +5 -1
  67. package/dist/contract-functions/getSharesByAddress/getSharesByAddress.d.ts.map +1 -1
  68. package/dist/contract-functions/index.d.ts +4 -0
  69. package/dist/contract-functions/index.d.ts.map +1 -1
  70. package/dist/contract-functions/unwrapBtceToLbtcv/index.d.ts +2 -0
  71. package/dist/contract-functions/unwrapBtceToLbtcv/index.d.ts.map +1 -0
  72. package/dist/contract-functions/unwrapBtceToLbtcv/unwrapBtceToLbtcv.d.ts +26 -0
  73. package/dist/contract-functions/unwrapBtceToLbtcv/unwrapBtceToLbtcv.d.ts.map +1 -0
  74. package/dist/contract-functions/wrapToBtce/index.d.ts +2 -0
  75. package/dist/contract-functions/wrapToBtce/index.d.ts.map +1 -0
  76. package/dist/contract-functions/wrapToBtce/wrapToBtce.d.ts +30 -0
  77. package/dist/contract-functions/wrapToBtce/wrapToBtce.d.ts.map +1 -0
  78. package/dist/contracts.cjs +1 -1
  79. package/dist/contracts.js +19 -15
  80. package/dist/core.cjs +1 -1
  81. package/dist/core.js +6 -6
  82. package/dist/defi.cjs +1 -1
  83. package/dist/defi.js +2 -2
  84. package/dist/entries/contracts.d.ts +4 -0
  85. package/dist/entries/contracts.d.ts.map +1 -1
  86. package/dist/evm.cjs +1 -1
  87. package/dist/evm.js +3 -3
  88. package/dist/index.cjs +1 -1
  89. package/dist/index.d.ts +5 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +132 -125
  92. package/dist/vaults/index.d.ts +1 -1
  93. package/dist/vaults/index.d.ts.map +1 -1
  94. package/dist/vaults/lib/config.d.ts +23 -0
  95. package/dist/vaults/lib/config.d.ts.map +1 -1
  96. package/dist/vaults.cjs +1 -1
  97. package/dist/vaults.js +5 -5
  98. package/package.json +1 -1
  99. package/dist/chunks/config-DghboRx0.js +0 -374
  100. package/dist/chunks/config-DghboRx0.js.map +0 -1
  101. package/dist/chunks/config-DmCmanM_.cjs +0 -2
  102. package/dist/chunks/config-DmCmanM_.cjs.map +0 -1
  103. package/dist/chunks/getSharesByAddress-D8hehnP1.cjs +0 -2
  104. package/dist/chunks/getSharesByAddress-D8hehnP1.cjs.map +0 -1
  105. package/dist/chunks/getSharesByAddress-_tBaIBsw.js +0 -121
  106. package/dist/chunks/getSharesByAddress-_tBaIBsw.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"get-vault-tvl-Ct_Zkg7C.js","sources":["../../src/vaults/lib/ops/get-vault-deposits.ts","../../src/vaults/lib/metrics/get-vault-apy.ts","../../src/vaults/lib/metrics/get-vault-points.ts","../../src/vaults/lib/metrics/get-vault-tvl.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n NETWORK_TO_VEDA_VAULT_CHAIN_MAP,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\ntype SevenSeasDepositEntry = {\n block_number: number;\n chain: string;\n deposit_amount: number;\n deposit_asset: string;\n share_amount: number;\n tx_hash: string;\n user: string;\n vault_address: string;\n};\n\ntype SevenSeasDepositsPayload =\n | SevenSeasDepositEntry\n | SevenSeasDepositEntry[]\n | { Response: SevenSeasDepositEntry }\n | { Response: SevenSeasDepositEntry[] };\n\nconst normalizeSevenSeasDeposits = (\n payload: SevenSeasDepositsPayload | undefined,\n): SevenSeasDepositEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultDepositsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultDeposit = {\n /** The transaction hash */\n txHash: Hash;\n /** The transaction's block number */\n blockNumber: number;\n /** The chain id */\n chainId: VedaVaultChain;\n /** The deposited amount */\n amount: BigNumber;\n /** The amount of shares received */\n shareAmount: BigNumber;\n /** The deposit token */\n token?: Omit<TokenInfo, 'abi'>;\n /** The user wallet address that made the deposit */\n toAddress: Address;\n};\n\n/**\n * Retrieves the deposits made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>}\n */\nexport async function getVaultDeposits({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultDepositsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n const url = `${bffApiUrl}/sevenseas-api/deposits/${network}/${vault.vaultContract.address}/${account}`;\n\n const { data } = await axios.get<SevenSeasDepositsPayload>(url);\n const entries = normalizeSevenSeasDeposits(data);\n\n const depositAssetsAddresses = unique(\n entries.map(d => ensureHex(d.deposit_asset)),\n );\n\n const depositAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> = {};\n for (const asset of depositAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n depositAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n depositAssets[asset] = undefined;\n }\n }\n\n const deposits = entries.map(d => {\n const token = depositAssets[ensureHex(d.deposit_asset)];\n const amount = fromBaseDenomination(d.deposit_amount, token?.decimals || 0);\n const shareAmount = fromBaseDenomination(d.share_amount, vault.decimals);\n\n const vaultDeposit: VaultDeposit = {\n txHash: ensureHex(d.tx_hash),\n blockNumber: d.block_number,\n chainId: NETWORK_TO_VEDA_VAULT_CHAIN_MAP[d.chain],\n amount,\n shareAmount,\n token,\n toAddress: ensureHex(d.user),\n };\n\n return vaultDeposit;\n });\n\n return orderBy(deposits, d => d.blockNumber, 'desc');\n}\n\nexport type GetVaultDepositsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the deposits made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all deposits regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>} All deposits across all supported chains, sorted by block number (newest first)\n */\nexport async function getVaultDepositsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultDepositsAllChainsParameters): Promise<VaultDeposit[]> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch deposits from all supported chains in parallel\n const depositsPromises = vault.chains.map(chainId =>\n getVaultDeposits({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch deposits for chain ${chainId}:`, error);\n return []; // Return empty array on error to not break the entire query\n }),\n );\n\n const depositsArrays = await Promise.all(depositsPromises);\n\n // Flatten and sort all deposits by block number (newest first)\n const allDeposits = depositsArrays.flat();\n return orderBy(allDeposits, d => d.blockNumber, 'desc');\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport { orderBy } from '../../../utils/array';\nimport { isVedaVaultChain, Vault, VAULTS, VedaVaultChain } from '../config';\n\ntype PerformanceEntry = {\n aggregation_period: string;\n apy: number;\n chain_allocation: { [network: string]: number };\n fees: number;\n real_apy_breakdown: {\n allocation: number;\n apy: number;\n /** network */\n chain: string;\n protocol: string;\n }[];\n timestamp: string;\n};\n\ntype PerformancePayload =\n | PerformanceEntry\n | PerformanceEntry[]\n | { Response: PerformanceEntry }\n | { Response: PerformanceEntry[] };\n\nconst normalizeSevenSeasPerformance = (\n payload: PerformancePayload | undefined,\n): PerformanceEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultApyParameters = IEnvParam & {\n aggregationPeriod?: 7 | 14 | 30;\n chainId?: ChainId;\n vaultKey?: Vault;\n};\n\n/** Gets the trailing APY performance history. */\nexport async function getVaultApy({\n aggregationPeriod = 7,\n chainId = ChainId.ethereum,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultApyParameters) {\n const response = await getVaultPerformance({\n aggregationPeriod,\n chainId,\n vaultKey,\n env,\n });\n\n const apys = response.map(r => {\n const allocations = Object.entries(r.chain_allocation)\n .map(([network, value]) => [\n NETWORK_TO_CHAIN_ID_MAP[network],\n BigNumber(value),\n ])\n .reduce(\n (acc, cur) => {\n const [chainId, value] = cur as [ChainId, BigNumber];\n acc[chainId] = value;\n return acc;\n },\n {} as Partial<Record<ChainId, BigNumber>>,\n );\n\n const breakdown = r.real_apy_breakdown.map(b => ({\n allocations: BigNumber(b.allocation),\n apy: BigNumber(b.apy),\n chainId: NETWORK_TO_CHAIN_ID_MAP[b.chain],\n protocol: b.protocol,\n }));\n\n return {\n apy: BigNumber(r.apy),\n allocations,\n breakdown,\n timestamp: new Date(r.timestamp),\n };\n });\n\n return orderBy(apys, a => a.timestamp.getTime(), 'desc');\n}\n\ntype GetVaultPerformanceParameters = {\n aggregationPeriod?: 7 | 14 | 30;\n chainId: ChainId;\n vaultKey?: Vault;\n} & IEnvParam;\n\nconst CHAIN_ID_TO_NETWORK_MAP: Record<VedaVaultChain, string> = {\n // NOTE: For now only `ethereum` is supported by the API.\n [ChainId.ethereum]: 'ethereum',\n\n // NOTE: The following networks are not supported for now. The API is supposed\n // to return the aggregated data for all vault chains.\n [ChainId.base]: 'base',\n [ChainId.binanceSmartChain]: 'bnb',\n [ChainId.corn]: 'corn',\n};\n\nconst NETWORK_TO_CHAIN_ID_MAP: Record<string, VedaVaultChain> = {\n ethereum: ChainId.ethereum,\n base: ChainId.base,\n bnb: ChainId.binanceSmartChain,\n corn: ChainId.corn,\n};\n\n/**\n * Gets the raw response of the performance apy api for the provided vault.\n */\nasync function getVaultPerformance({\n aggregationPeriod = 7,\n chainId,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultPerformanceParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = CHAIN_ID_TO_NETWORK_MAP[chainId];\n if (network !== 'ethereum') {\n throw new Error(\n `Unsupported network ${network}. Please switch to 'ethereum'.`,\n );\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const params = new URLSearchParams({\n aggregation_period: String(aggregationPeriod),\n historical: 'true',\n });\n const url = `${bffApiUrl}/sevenseas-api/performance/${network}/${vault.vaultContract.address}?${params.toString()}`;\n\n const { data } = await axios.get<PerformancePayload>(url);\n\n return normalizeSevenSeasPerformance(data);\n}\n","import axios from 'axios';\nimport { Address } from 'viem';\n\nimport { Vault, VAULTS } from '../config';\n\nexport type GetVaultPointsParameters = {\n /** The account address. */\n account: Address;\n /** The optional vault identifier */\n vaultKey?: Vault;\n};\n\nconst POINTS_URL = 'https://api.veda.tech/points/user/{account}';\n\ntype Response = {\n Response: {\n [network: string]: {\n userChainVedaPointsSum: number;\n vaults: {\n [vaultAddress: string]: {\n name: string;\n timestamp: string;\n totalPoints: number;\n };\n };\n };\n };\n};\n\n/**\n * Gets the points earned by specified account in the DeFi vault.\n */\nexport async function getVaultPoints({\n account,\n vaultKey = Vault.Veda,\n}: GetVaultPointsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const url = POINTS_URL.replace('{account}', account);\n const { data } = await axios.get<Response>(url, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n },\n });\n\n const vedaPointsBreakdown: Record<string, number> = {};\n const entries = Object.entries(data.Response);\n for (const [network, points] of entries) {\n if (network === 'userTotalVedaPointsSum') continue;\n\n const vaultPoints = Object.entries(points.vaults).find(\n ([v]) => v === vault.vaultContract.address,\n );\n if (vaultPoints) {\n const [, data] = vaultPoints;\n const p = Number.isNaN(data.totalPoints) ? 0 : data.totalPoints;\n vedaPointsBreakdown[network] = p;\n }\n }\n\n let totalPoints = 0;\n for (const p of Object.values(vedaPointsBreakdown)) {\n totalPoints += p;\n }\n\n return {\n totalPoints,\n pointsBreakdown: vedaPointsBreakdown,\n };\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { extractChain, PublicClient } from 'viem';\nimport * as chains from 'viem/chains';\n\nimport { makePublicClient } from '../../../clients/public-client';\nimport { getApiConfig } from '../../../common/api-config';\nimport { IEnvParam } from '../../../common/parameters';\nimport { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenContractInfo,\n retrieveTokenProperties,\n} from '../../../tokens/tokens';\nimport { Vault, VAULTS, VedaVaultChain } from '../config';\n\nexport type GetVaultBtcHolding = {\n vaultKey?: Vault;\n rpcUrls?: Record<VedaVaultChain, string>;\n};\nexport async function getVaultBtcHolding({\n vaultKey = Vault.Veda,\n rpcUrls,\n}: GetVaultBtcHolding) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const clients: Partial<Record<VedaVaultChain, PublicClient>> = {};\n for (const chainId of vault.chains) {\n const publicClient = makePublicClient({\n chainId: chainId,\n rpcUrl: rpcUrls?.[chainId],\n });\n clients[chainId] = publicClient;\n }\n\n const balances = [];\n\n for (const [token, chainIds] of Object.entries(vault.tokens)) {\n for (const chainId of chainIds) {\n const tokenContract = await getTokenContractInfo(token as Token, chainId);\n\n const publicClient = clients[chainId];\n if (!publicClient) continue;\n\n const tokenInfo = await retrieveTokenProperties(\n publicClient,\n tokenContract,\n );\n\n if (!tokenInfo) continue;\n\n const balanceRaw = await publicClient.readContract({\n abi: tokenContract.abi,\n address: tokenContract.address,\n functionName: 'balanceOf',\n args: [vault.vaultContract.address],\n });\n\n const balance = fromBaseDenomination(\n balanceRaw ? String(balanceRaw) : 0,\n tokenInfo.decimals,\n );\n\n const ch = extractChain({ chains: Object.values(chains), id: chainId });\n console.info(`Balance of ${token} on ${ch.name}: ${balance}`);\n\n balances.push(balance);\n }\n }\n\n return BigNumber.sum.apply(null, balances);\n}\n\nexport type GetVaultTVLParameters = {\n vaultKey?: Vault;\n} & IEnvParam;\n\ntype DuneQueryResult = {\n net_btc_balance: number;\n price: number;\n vault_tvl: number;\n};\n\ntype Response = {\n /** The TVL represented in BTC locked in the vault */\n btcBalance: BigNumber;\n /** The BTC price in US dollars */\n btcPrice: BigNumber;\n /** The TVL represented us US dollars */\n tvl: BigNumber;\n};\nexport async function getVaultTVL({\n vaultKey = Vault.Veda,\n env,\n}: GetVaultTVLParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const url = `${bffApiUrl}/dune-api/query/vault-tvl`;\n const { data } = await axios.get<DuneQueryResult>(url);\n\n const response: Response = {\n btcBalance: BigNumber(data.net_btc_balance),\n btcPrice: BigNumber(data.price),\n tvl: BigNumber(data.vault_tvl),\n };\n\n return response;\n}\n"],"names":["normalizeSevenSeasDeposits","payload","response","getVaultDeposits","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","url","data","axios","entries","depositAssetsAddresses","unique","d","ensureHex","depositAssets","asset","assetInfo","getAssetInfo","deposits","token","amount","fromBaseDenomination","shareAmount","NETWORK_TO_VEDA_VAULT_CHAIN_MAP","orderBy","getVaultDepositsAllChains","depositsPromises","error","allDeposits","normalizeSevenSeasPerformance","getVaultApy","aggregationPeriod","ChainId","apys","getVaultPerformance","r","allocations","value","NETWORK_TO_CHAIN_ID_MAP","BigNumber","acc","cur","breakdown","b","a","CHAIN_ID_TO_NETWORK_MAP","params","POINTS_URL","getVaultPoints","vedaPointsBreakdown","points","vaultPoints","v","p","totalPoints","getVaultTVL"],"mappings":"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"}
1
+ {"version":3,"file":"get-vault-tvl-C3Yr4MI4.js","sources":["../../src/vaults/lib/ops/get-vault-deposits.ts","../../src/vaults/lib/metrics/get-vault-apy.ts","../../src/vaults/lib/metrics/get-vault-points.ts","../../src/vaults/lib/metrics/get-vault-tvl.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n NETWORK_TO_VEDA_VAULT_CHAIN_MAP,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\ntype SevenSeasDepositEntry = {\n block_number: number;\n chain: string;\n deposit_amount: number;\n deposit_asset: string;\n share_amount: number;\n tx_hash: string;\n user: string;\n vault_address: string;\n};\n\ntype SevenSeasDepositsPayload =\n | SevenSeasDepositEntry\n | SevenSeasDepositEntry[]\n | { Response: SevenSeasDepositEntry }\n | { Response: SevenSeasDepositEntry[] };\n\nconst normalizeSevenSeasDeposits = (\n payload: SevenSeasDepositsPayload | undefined,\n): SevenSeasDepositEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultDepositsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultDeposit = {\n /** The transaction hash */\n txHash: Hash;\n /** The transaction's block number */\n blockNumber: number;\n /** The chain id */\n chainId: VedaVaultChain;\n /** The deposited amount */\n amount: BigNumber;\n /** The amount of shares received */\n shareAmount: BigNumber;\n /** The deposit token */\n token?: Omit<TokenInfo, 'abi'>;\n /** The user wallet address that made the deposit */\n toAddress: Address;\n};\n\n/**\n * Retrieves the deposits made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>}\n */\nexport async function getVaultDeposits({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultDepositsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n const url = `${bffApiUrl}/sevenseas-api/deposits/${network}/${vault.vaultContract.address}/${account}`;\n\n const { data } = await axios.get<SevenSeasDepositsPayload>(url);\n const entries = normalizeSevenSeasDeposits(data);\n\n const depositAssetsAddresses = unique(\n entries.map(d => ensureHex(d.deposit_asset)),\n );\n\n const depositAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> = {};\n for (const asset of depositAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n depositAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n depositAssets[asset] = undefined;\n }\n }\n\n const deposits = entries.map(d => {\n const token = depositAssets[ensureHex(d.deposit_asset)];\n const amount = fromBaseDenomination(d.deposit_amount, token?.decimals || 0);\n const shareAmount = fromBaseDenomination(d.share_amount, vault.decimals);\n\n const vaultDeposit: VaultDeposit = {\n txHash: ensureHex(d.tx_hash),\n blockNumber: d.block_number,\n chainId: NETWORK_TO_VEDA_VAULT_CHAIN_MAP[d.chain],\n amount,\n shareAmount,\n token,\n toAddress: ensureHex(d.user),\n };\n\n return vaultDeposit;\n });\n\n return orderBy(deposits, d => d.blockNumber, 'desc');\n}\n\nexport type GetVaultDepositsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the deposits made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all deposits regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>} All deposits across all supported chains, sorted by block number (newest first)\n */\nexport async function getVaultDepositsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultDepositsAllChainsParameters): Promise<VaultDeposit[]> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch deposits from all supported chains in parallel\n const depositsPromises = vault.chains.map(chainId =>\n getVaultDeposits({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch deposits for chain ${chainId}:`, error);\n return []; // Return empty array on error to not break the entire query\n }),\n );\n\n const depositsArrays = await Promise.all(depositsPromises);\n\n // Flatten and sort all deposits by block number (newest first)\n const allDeposits = depositsArrays.flat();\n return orderBy(allDeposits, d => d.blockNumber, 'desc');\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport { orderBy } from '../../../utils/array';\nimport { isVedaVaultChain, Vault, VAULTS, VedaVaultChain } from '../config';\n\ntype PerformanceEntry = {\n aggregation_period: string;\n apy: number;\n chain_allocation: { [network: string]: number };\n fees: number;\n real_apy_breakdown: {\n allocation: number;\n apy: number;\n /** network */\n chain: string;\n protocol: string;\n }[];\n timestamp: string;\n};\n\ntype PerformancePayload =\n | PerformanceEntry\n | PerformanceEntry[]\n | { Response: PerformanceEntry }\n | { Response: PerformanceEntry[] };\n\nconst normalizeSevenSeasPerformance = (\n payload: PerformancePayload | undefined,\n): PerformanceEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultApyParameters = IEnvParam & {\n aggregationPeriod?: 7 | 14 | 30;\n chainId?: ChainId;\n vaultKey?: Vault;\n};\n\n/** Gets the trailing APY performance history. */\nexport async function getVaultApy({\n aggregationPeriod = 7,\n chainId = ChainId.ethereum,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultApyParameters) {\n const response = await getVaultPerformance({\n aggregationPeriod,\n chainId,\n vaultKey,\n env,\n });\n\n const apys = response.map(r => {\n const allocations = Object.entries(r.chain_allocation)\n .map(([network, value]) => [\n NETWORK_TO_CHAIN_ID_MAP[network],\n BigNumber(value),\n ])\n .reduce(\n (acc, cur) => {\n const [chainId, value] = cur as [ChainId, BigNumber];\n acc[chainId] = value;\n return acc;\n },\n {} as Partial<Record<ChainId, BigNumber>>,\n );\n\n const breakdown = r.real_apy_breakdown.map(b => ({\n allocations: BigNumber(b.allocation),\n apy: BigNumber(b.apy),\n chainId: NETWORK_TO_CHAIN_ID_MAP[b.chain],\n protocol: b.protocol,\n }));\n\n return {\n apy: BigNumber(r.apy),\n allocations,\n breakdown,\n timestamp: new Date(r.timestamp),\n };\n });\n\n return orderBy(apys, a => a.timestamp.getTime(), 'desc');\n}\n\ntype GetVaultPerformanceParameters = {\n aggregationPeriod?: 7 | 14 | 30;\n chainId: ChainId;\n vaultKey?: Vault;\n} & IEnvParam;\n\nconst CHAIN_ID_TO_NETWORK_MAP: Record<VedaVaultChain, string> = {\n // NOTE: For now only `ethereum` is supported by the API.\n [ChainId.ethereum]: 'ethereum',\n\n // NOTE: The following networks are not supported for now. The API is supposed\n // to return the aggregated data for all vault chains.\n [ChainId.base]: 'base',\n [ChainId.binanceSmartChain]: 'bnb',\n [ChainId.corn]: 'corn',\n};\n\nconst NETWORK_TO_CHAIN_ID_MAP: Record<string, VedaVaultChain> = {\n ethereum: ChainId.ethereum,\n base: ChainId.base,\n bnb: ChainId.binanceSmartChain,\n corn: ChainId.corn,\n};\n\n/**\n * Gets the raw response of the performance apy api for the provided vault.\n */\nasync function getVaultPerformance({\n aggregationPeriod = 7,\n chainId,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultPerformanceParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = CHAIN_ID_TO_NETWORK_MAP[chainId];\n if (network !== 'ethereum') {\n throw new Error(\n `Unsupported network ${network}. Please switch to 'ethereum'.`,\n );\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const params = new URLSearchParams({\n aggregation_period: String(aggregationPeriod),\n historical: 'true',\n });\n const url = `${bffApiUrl}/sevenseas-api/performance/${network}/${vault.vaultContract.address}?${params.toString()}`;\n\n const { data } = await axios.get<PerformancePayload>(url);\n\n return normalizeSevenSeasPerformance(data);\n}\n","import axios from 'axios';\nimport { Address } from 'viem';\n\nimport { Vault, VAULTS } from '../config';\n\nexport type GetVaultPointsParameters = {\n /** The account address. */\n account: Address;\n /** The optional vault identifier */\n vaultKey?: Vault;\n};\n\nconst POINTS_URL = 'https://api.veda.tech/points/user/{account}';\n\ntype Response = {\n Response: {\n [network: string]: {\n userChainVedaPointsSum: number;\n vaults: {\n [vaultAddress: string]: {\n name: string;\n timestamp: string;\n totalPoints: number;\n };\n };\n };\n };\n};\n\n/**\n * Gets the points earned by specified account in the DeFi vault.\n */\nexport async function getVaultPoints({\n account,\n vaultKey = Vault.Veda,\n}: GetVaultPointsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const url = POINTS_URL.replace('{account}', account);\n const { data } = await axios.get<Response>(url, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n },\n });\n\n const vedaPointsBreakdown: Record<string, number> = {};\n const entries = Object.entries(data.Response);\n for (const [network, points] of entries) {\n if (network === 'userTotalVedaPointsSum') continue;\n\n const vaultPoints = Object.entries(points.vaults).find(\n ([v]) => v === vault.vaultContract.address,\n );\n if (vaultPoints) {\n const [, data] = vaultPoints;\n const p = Number.isNaN(data.totalPoints) ? 0 : data.totalPoints;\n vedaPointsBreakdown[network] = p;\n }\n }\n\n let totalPoints = 0;\n for (const p of Object.values(vedaPointsBreakdown)) {\n totalPoints += p;\n }\n\n return {\n totalPoints,\n pointsBreakdown: vedaPointsBreakdown,\n };\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { extractChain, PublicClient } from 'viem';\nimport * as chains from 'viem/chains';\n\nimport { makePublicClient } from '../../../clients/public-client';\nimport { getApiConfig } from '../../../common/api-config';\nimport { IEnvParam } from '../../../common/parameters';\nimport { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenContractInfo,\n retrieveTokenProperties,\n} from '../../../tokens/tokens';\nimport { Vault, VAULTS, VedaVaultChain } from '../config';\n\nexport type GetVaultBtcHolding = {\n vaultKey?: Vault;\n rpcUrls?: Record<VedaVaultChain, string>;\n};\nexport async function getVaultBtcHolding({\n vaultKey = Vault.Veda,\n rpcUrls,\n}: GetVaultBtcHolding) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const clients: Partial<Record<VedaVaultChain, PublicClient>> = {};\n for (const chainId of vault.chains) {\n const publicClient = makePublicClient({\n chainId: chainId,\n rpcUrl: rpcUrls?.[chainId],\n });\n clients[chainId] = publicClient;\n }\n\n const balances = [];\n\n for (const [token, chainIds] of Object.entries(vault.tokens)) {\n for (const chainId of chainIds) {\n const tokenContract = await getTokenContractInfo(token as Token, chainId);\n\n const publicClient = clients[chainId];\n if (!publicClient) continue;\n\n const tokenInfo = await retrieveTokenProperties(\n publicClient,\n tokenContract,\n );\n\n if (!tokenInfo) continue;\n\n const balanceRaw = await publicClient.readContract({\n abi: tokenContract.abi,\n address: tokenContract.address,\n functionName: 'balanceOf',\n args: [vault.vaultContract.address],\n });\n\n const balance = fromBaseDenomination(\n balanceRaw ? String(balanceRaw) : 0,\n tokenInfo.decimals,\n );\n\n const ch = extractChain({ chains: Object.values(chains), id: chainId });\n console.info(`Balance of ${token} on ${ch.name}: ${balance}`);\n\n balances.push(balance);\n }\n }\n\n return BigNumber.sum.apply(null, balances);\n}\n\nexport type GetVaultTVLParameters = {\n vaultKey?: Vault;\n} & IEnvParam;\n\ntype DuneQueryResult = {\n net_btc_balance: number;\n price: number;\n vault_tvl: number;\n};\n\ntype Response = {\n /** The TVL represented in BTC locked in the vault */\n btcBalance: BigNumber;\n /** The BTC price in US dollars */\n btcPrice: BigNumber;\n /** The TVL represented us US dollars */\n tvl: BigNumber;\n};\nexport async function getVaultTVL({\n vaultKey = Vault.Veda,\n env,\n}: GetVaultTVLParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const url = `${bffApiUrl}/dune-api/query/vault-tvl`;\n const { data } = await axios.get<DuneQueryResult>(url);\n\n const response: Response = {\n btcBalance: BigNumber(data.net_btc_balance),\n btcPrice: BigNumber(data.price),\n tvl: BigNumber(data.vault_tvl),\n };\n\n return response;\n}\n"],"names":["normalizeSevenSeasDeposits","payload","response","getVaultDeposits","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","url","data","axios","entries","depositAssetsAddresses","unique","d","ensureHex","depositAssets","asset","assetInfo","getAssetInfo","deposits","token","amount","fromBaseDenomination","shareAmount","NETWORK_TO_VEDA_VAULT_CHAIN_MAP","orderBy","getVaultDepositsAllChains","depositsPromises","error","allDeposits","normalizeSevenSeasPerformance","getVaultApy","aggregationPeriod","ChainId","apys","getVaultPerformance","r","allocations","value","NETWORK_TO_CHAIN_ID_MAP","BigNumber","acc","cur","breakdown","b","a","CHAIN_ID_TO_NETWORK_MAP","params","POINTS_URL","getVaultPoints","vedaPointsBreakdown","points","vaultPoints","v","p","totalPoints","getVaultTVL"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const g=require("axios"),C=require("./api-config-DkXqqfCK.cjs"),_=require("./tokens-BkvA0Gp1.cjs"),b=require("./array-DKG6Pz4i.cjs"),V=require("./time-I-BeyUkG.cjs"),a=require("./config-DmCmanM_.cjs"),w=require("bignumber.js"),m=require("./token-addresses-nzvTOi24.cjs");require("viem");require("viem/chains");const T=t=>{if(!t)return[];if(Array.isArray(t))return t;if("Response"in t){const e=t.Response;return Array.isArray(e)?e:e?[e]:[]}return[t]};async function P({account:t,chainId:e,vaultKey:u=a.Vault.Veda,rpcUrl:i,env:l}){const n=a.VAULTS[u];if(!n)throw new Error(`Unknown vault key: ${u}`);if(!a.isVedaVaultChain(e))throw new Error(`Unsupported chain id: ${e}. Please switch to one of the supported chains: ${n.chains.join(", ")}`);const r=a.VEDA_VAULT_CHAIN_TO_NETWORK_MAP[e],{bffApiUrl:c}=C.getApiConfig(l);if(!c)throw new Error(`Could not determine API endpoint for provided environment: ${l}`);const p=`${c}/sevenseas-api/deposits/${r}/${n.vaultContract.address}/${t}`,{data:s}=await g.get(p),d=T(s),h=b.unique(d.map(o=>V.ensureHex(o.deposit_asset))),A={};for(const o of h){const f=await _.getAssetInfo(o,e,i);f?A[o]={address:f.address,decimals:f.decimals,symbol:f.symbol}:A[o]=void 0}const k=d.map(o=>{const f=A[V.ensureHex(o.deposit_asset)],$=_.fromBaseDenomination(o.deposit_amount,(f==null?void 0:f.decimals)||0),y=_.fromBaseDenomination(o.share_amount,n.decimals);return{txHash:V.ensureHex(o.tx_hash),blockNumber:o.block_number,chainId:a.NETWORK_TO_VEDA_VAULT_CHAIN_MAP[o.chain],amount:$,shareAmount:y,token:f,toAddress:V.ensureHex(o.user)}});return b.orderBy(k,o=>o.blockNumber,"desc")}async function U({account:t,vaultKey:e=a.Vault.Veda,rpcUrl:u}){const i=a.VAULTS[e];if(!i)throw new Error(`Unknown vault key: ${e}`);const l=i.chains.map(c=>P({account:t,chainId:c,vaultKey:e,rpcUrl:u}).catch(p=>(console.error(`Failed to fetch deposits for chain ${c}:`,p),[]))),r=(await Promise.all(l)).flat();return b.orderBy(r,c=>c.blockNumber,"desc")}const I=t=>{if(!t)return[];if(Array.isArray(t))return t;if("Response"in t){const e=t.Response;return Array.isArray(e)?e:e?[e]:[]}return[t]};async function E({aggregationPeriod:t=7,chainId:e=m.ChainId.ethereum,vaultKey:u=a.Vault.Veda,env:i}){const n=(await S({aggregationPeriod:t,chainId:e,vaultKey:u,env:i})).map(r=>{const c=Object.entries(r.chain_allocation).map(([s,d])=>[v[s],w(d)]).reduce((s,d)=>{const[h,A]=d;return s[h]=A,s},{}),p=r.real_apy_breakdown.map(s=>({allocations:w(s.allocation),apy:w(s.apy),chainId:v[s.chain],protocol:s.protocol}));return{apy:w(r.apy),allocations:c,breakdown:p,timestamp:new Date(r.timestamp)}});return b.orderBy(n,r=>r.timestamp.getTime(),"desc")}const N={[m.ChainId.ethereum]:"ethereum",[m.ChainId.base]:"base",[m.ChainId.binanceSmartChain]:"bnb",[m.ChainId.corn]:"corn"},v={ethereum:m.ChainId.ethereum,base:m.ChainId.base,bnb:m.ChainId.binanceSmartChain,corn:m.ChainId.corn};async function S({aggregationPeriod:t=7,chainId:e,vaultKey:u=a.Vault.Veda,env:i}){const l=a.VAULTS[u];if(!l)throw new Error(`Unknown vault key: ${u}`);if(!a.isVedaVaultChain(e))throw new Error(`Unsupported chain id: ${e}. Please switch to one of the supported chains: ${l.chains.join(", ")}`);const n=N[e];if(n!=="ethereum")throw new Error(`Unsupported network ${n}. Please switch to 'ethereum'.`);const{bffApiUrl:r}=C.getApiConfig(i);if(!r)throw new Error(`Could not determine API endpoint for provided environment: ${i}`);const c=new URLSearchParams({aggregation_period:String(t),historical:"true"}),p=`${r}/sevenseas-api/performance/${n}/${l.vaultContract.address}?${c.toString()}`,{data:s}=await g.get(p);return I(s)}const D="https://api.veda.tech/points/user/{account}";async function O({account:t,vaultKey:e=a.Vault.Veda}){const u=a.VAULTS[e];if(!u)throw new Error(`Unknown vault key: ${e}`);const i=D.replace("{account}",t),{data:l}=await g.get(i,{headers:{"Access-Control-Allow-Origin":"*","Content-Type":"application/json"}}),n={},r=Object.entries(l.Response);for(const[p,s]of r){if(p==="userTotalVedaPointsSum")continue;const d=Object.entries(s.vaults).find(([h])=>h===u.vaultContract.address);if(d){const[,h]=d,A=Number.isNaN(h.totalPoints)?0:h.totalPoints;n[p]=A}}let c=0;for(const p of Object.values(n))c+=p;return{totalPoints:c,pointsBreakdown:n}}async function q({vaultKey:t=a.Vault.Veda,env:e}){if(!a.VAULTS[t])throw new Error(`Unknown vault key: ${t}`);const{bffApiUrl:i}=C.getApiConfig(e);if(!i)throw new Error(`Could not determine API endpoint for provided environment: ${e}`);const l=`${i}/dune-api/query/vault-tvl`,{data:n}=await g.get(l);return{btcBalance:w(n.net_btc_balance),btcPrice:w(n.price),tvl:w(n.vault_tvl)}}exports.getVaultApy=E;exports.getVaultDeposits=P;exports.getVaultDepositsAllChains=U;exports.getVaultPoints=O;exports.getVaultTVL=q;
2
- //# sourceMappingURL=get-vault-tvl-D_tQIDAs.cjs.map
1
+ "use strict";const g=require("axios"),C=require("./api-config-DkXqqfCK.cjs"),_=require("./tokens-BkvA0Gp1.cjs"),b=require("./array-DKG6Pz4i.cjs"),V=require("./time-I-BeyUkG.cjs"),a=require("./config-CSo0k7gN.cjs"),w=require("bignumber.js"),m=require("./token-addresses-nzvTOi24.cjs");require("viem");require("viem/chains");const T=t=>{if(!t)return[];if(Array.isArray(t))return t;if("Response"in t){const e=t.Response;return Array.isArray(e)?e:e?[e]:[]}return[t]};async function P({account:t,chainId:e,vaultKey:u=a.Vault.Veda,rpcUrl:i,env:l}){const n=a.VAULTS[u];if(!n)throw new Error(`Unknown vault key: ${u}`);if(!a.isVedaVaultChain(e))throw new Error(`Unsupported chain id: ${e}. Please switch to one of the supported chains: ${n.chains.join(", ")}`);const r=a.VEDA_VAULT_CHAIN_TO_NETWORK_MAP[e],{bffApiUrl:c}=C.getApiConfig(l);if(!c)throw new Error(`Could not determine API endpoint for provided environment: ${l}`);const p=`${c}/sevenseas-api/deposits/${r}/${n.vaultContract.address}/${t}`,{data:s}=await g.get(p),d=T(s),h=b.unique(d.map(o=>V.ensureHex(o.deposit_asset))),A={};for(const o of h){const f=await _.getAssetInfo(o,e,i);f?A[o]={address:f.address,decimals:f.decimals,symbol:f.symbol}:A[o]=void 0}const k=d.map(o=>{const f=A[V.ensureHex(o.deposit_asset)],$=_.fromBaseDenomination(o.deposit_amount,(f==null?void 0:f.decimals)||0),y=_.fromBaseDenomination(o.share_amount,n.decimals);return{txHash:V.ensureHex(o.tx_hash),blockNumber:o.block_number,chainId:a.NETWORK_TO_VEDA_VAULT_CHAIN_MAP[o.chain],amount:$,shareAmount:y,token:f,toAddress:V.ensureHex(o.user)}});return b.orderBy(k,o=>o.blockNumber,"desc")}async function U({account:t,vaultKey:e=a.Vault.Veda,rpcUrl:u}){const i=a.VAULTS[e];if(!i)throw new Error(`Unknown vault key: ${e}`);const l=i.chains.map(c=>P({account:t,chainId:c,vaultKey:e,rpcUrl:u}).catch(p=>(console.error(`Failed to fetch deposits for chain ${c}:`,p),[]))),r=(await Promise.all(l)).flat();return b.orderBy(r,c=>c.blockNumber,"desc")}const I=t=>{if(!t)return[];if(Array.isArray(t))return t;if("Response"in t){const e=t.Response;return Array.isArray(e)?e:e?[e]:[]}return[t]};async function E({aggregationPeriod:t=7,chainId:e=m.ChainId.ethereum,vaultKey:u=a.Vault.Veda,env:i}){const n=(await S({aggregationPeriod:t,chainId:e,vaultKey:u,env:i})).map(r=>{const c=Object.entries(r.chain_allocation).map(([s,d])=>[v[s],w(d)]).reduce((s,d)=>{const[h,A]=d;return s[h]=A,s},{}),p=r.real_apy_breakdown.map(s=>({allocations:w(s.allocation),apy:w(s.apy),chainId:v[s.chain],protocol:s.protocol}));return{apy:w(r.apy),allocations:c,breakdown:p,timestamp:new Date(r.timestamp)}});return b.orderBy(n,r=>r.timestamp.getTime(),"desc")}const N={[m.ChainId.ethereum]:"ethereum",[m.ChainId.base]:"base",[m.ChainId.binanceSmartChain]:"bnb",[m.ChainId.corn]:"corn"},v={ethereum:m.ChainId.ethereum,base:m.ChainId.base,bnb:m.ChainId.binanceSmartChain,corn:m.ChainId.corn};async function S({aggregationPeriod:t=7,chainId:e,vaultKey:u=a.Vault.Veda,env:i}){const l=a.VAULTS[u];if(!l)throw new Error(`Unknown vault key: ${u}`);if(!a.isVedaVaultChain(e))throw new Error(`Unsupported chain id: ${e}. Please switch to one of the supported chains: ${l.chains.join(", ")}`);const n=N[e];if(n!=="ethereum")throw new Error(`Unsupported network ${n}. Please switch to 'ethereum'.`);const{bffApiUrl:r}=C.getApiConfig(i);if(!r)throw new Error(`Could not determine API endpoint for provided environment: ${i}`);const c=new URLSearchParams({aggregation_period:String(t),historical:"true"}),p=`${r}/sevenseas-api/performance/${n}/${l.vaultContract.address}?${c.toString()}`,{data:s}=await g.get(p);return I(s)}const D="https://api.veda.tech/points/user/{account}";async function O({account:t,vaultKey:e=a.Vault.Veda}){const u=a.VAULTS[e];if(!u)throw new Error(`Unknown vault key: ${e}`);const i=D.replace("{account}",t),{data:l}=await g.get(i,{headers:{"Access-Control-Allow-Origin":"*","Content-Type":"application/json"}}),n={},r=Object.entries(l.Response);for(const[p,s]of r){if(p==="userTotalVedaPointsSum")continue;const d=Object.entries(s.vaults).find(([h])=>h===u.vaultContract.address);if(d){const[,h]=d,A=Number.isNaN(h.totalPoints)?0:h.totalPoints;n[p]=A}}let c=0;for(const p of Object.values(n))c+=p;return{totalPoints:c,pointsBreakdown:n}}async function q({vaultKey:t=a.Vault.Veda,env:e}){if(!a.VAULTS[t])throw new Error(`Unknown vault key: ${t}`);const{bffApiUrl:i}=C.getApiConfig(e);if(!i)throw new Error(`Could not determine API endpoint for provided environment: ${e}`);const l=`${i}/dune-api/query/vault-tvl`,{data:n}=await g.get(l);return{btcBalance:w(n.net_btc_balance),btcPrice:w(n.price),tvl:w(n.vault_tvl)}}exports.getVaultApy=E;exports.getVaultDeposits=P;exports.getVaultDepositsAllChains=U;exports.getVaultPoints=O;exports.getVaultTVL=q;
2
+ //# sourceMappingURL=get-vault-tvl-CRbxkHmr.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-vault-tvl-D_tQIDAs.cjs","sources":["../../src/vaults/lib/ops/get-vault-deposits.ts","../../src/vaults/lib/metrics/get-vault-apy.ts","../../src/vaults/lib/metrics/get-vault-points.ts","../../src/vaults/lib/metrics/get-vault-tvl.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n NETWORK_TO_VEDA_VAULT_CHAIN_MAP,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\ntype SevenSeasDepositEntry = {\n block_number: number;\n chain: string;\n deposit_amount: number;\n deposit_asset: string;\n share_amount: number;\n tx_hash: string;\n user: string;\n vault_address: string;\n};\n\ntype SevenSeasDepositsPayload =\n | SevenSeasDepositEntry\n | SevenSeasDepositEntry[]\n | { Response: SevenSeasDepositEntry }\n | { Response: SevenSeasDepositEntry[] };\n\nconst normalizeSevenSeasDeposits = (\n payload: SevenSeasDepositsPayload | undefined,\n): SevenSeasDepositEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultDepositsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultDeposit = {\n /** The transaction hash */\n txHash: Hash;\n /** The transaction's block number */\n blockNumber: number;\n /** The chain id */\n chainId: VedaVaultChain;\n /** The deposited amount */\n amount: BigNumber;\n /** The amount of shares received */\n shareAmount: BigNumber;\n /** The deposit token */\n token?: Omit<TokenInfo, 'abi'>;\n /** The user wallet address that made the deposit */\n toAddress: Address;\n};\n\n/**\n * Retrieves the deposits made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>}\n */\nexport async function getVaultDeposits({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultDepositsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n const url = `${bffApiUrl}/sevenseas-api/deposits/${network}/${vault.vaultContract.address}/${account}`;\n\n const { data } = await axios.get<SevenSeasDepositsPayload>(url);\n const entries = normalizeSevenSeasDeposits(data);\n\n const depositAssetsAddresses = unique(\n entries.map(d => ensureHex(d.deposit_asset)),\n );\n\n const depositAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> = {};\n for (const asset of depositAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n depositAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n depositAssets[asset] = undefined;\n }\n }\n\n const deposits = entries.map(d => {\n const token = depositAssets[ensureHex(d.deposit_asset)];\n const amount = fromBaseDenomination(d.deposit_amount, token?.decimals || 0);\n const shareAmount = fromBaseDenomination(d.share_amount, vault.decimals);\n\n const vaultDeposit: VaultDeposit = {\n txHash: ensureHex(d.tx_hash),\n blockNumber: d.block_number,\n chainId: NETWORK_TO_VEDA_VAULT_CHAIN_MAP[d.chain],\n amount,\n shareAmount,\n token,\n toAddress: ensureHex(d.user),\n };\n\n return vaultDeposit;\n });\n\n return orderBy(deposits, d => d.blockNumber, 'desc');\n}\n\nexport type GetVaultDepositsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the deposits made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all deposits regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>} All deposits across all supported chains, sorted by block number (newest first)\n */\nexport async function getVaultDepositsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultDepositsAllChainsParameters): Promise<VaultDeposit[]> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch deposits from all supported chains in parallel\n const depositsPromises = vault.chains.map(chainId =>\n getVaultDeposits({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch deposits for chain ${chainId}:`, error);\n return []; // Return empty array on error to not break the entire query\n }),\n );\n\n const depositsArrays = await Promise.all(depositsPromises);\n\n // Flatten and sort all deposits by block number (newest first)\n const allDeposits = depositsArrays.flat();\n return orderBy(allDeposits, d => d.blockNumber, 'desc');\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport { orderBy } from '../../../utils/array';\nimport { isVedaVaultChain, Vault, VAULTS, VedaVaultChain } from '../config';\n\ntype PerformanceEntry = {\n aggregation_period: string;\n apy: number;\n chain_allocation: { [network: string]: number };\n fees: number;\n real_apy_breakdown: {\n allocation: number;\n apy: number;\n /** network */\n chain: string;\n protocol: string;\n }[];\n timestamp: string;\n};\n\ntype PerformancePayload =\n | PerformanceEntry\n | PerformanceEntry[]\n | { Response: PerformanceEntry }\n | { Response: PerformanceEntry[] };\n\nconst normalizeSevenSeasPerformance = (\n payload: PerformancePayload | undefined,\n): PerformanceEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultApyParameters = IEnvParam & {\n aggregationPeriod?: 7 | 14 | 30;\n chainId?: ChainId;\n vaultKey?: Vault;\n};\n\n/** Gets the trailing APY performance history. */\nexport async function getVaultApy({\n aggregationPeriod = 7,\n chainId = ChainId.ethereum,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultApyParameters) {\n const response = await getVaultPerformance({\n aggregationPeriod,\n chainId,\n vaultKey,\n env,\n });\n\n const apys = response.map(r => {\n const allocations = Object.entries(r.chain_allocation)\n .map(([network, value]) => [\n NETWORK_TO_CHAIN_ID_MAP[network],\n BigNumber(value),\n ])\n .reduce(\n (acc, cur) => {\n const [chainId, value] = cur as [ChainId, BigNumber];\n acc[chainId] = value;\n return acc;\n },\n {} as Partial<Record<ChainId, BigNumber>>,\n );\n\n const breakdown = r.real_apy_breakdown.map(b => ({\n allocations: BigNumber(b.allocation),\n apy: BigNumber(b.apy),\n chainId: NETWORK_TO_CHAIN_ID_MAP[b.chain],\n protocol: b.protocol,\n }));\n\n return {\n apy: BigNumber(r.apy),\n allocations,\n breakdown,\n timestamp: new Date(r.timestamp),\n };\n });\n\n return orderBy(apys, a => a.timestamp.getTime(), 'desc');\n}\n\ntype GetVaultPerformanceParameters = {\n aggregationPeriod?: 7 | 14 | 30;\n chainId: ChainId;\n vaultKey?: Vault;\n} & IEnvParam;\n\nconst CHAIN_ID_TO_NETWORK_MAP: Record<VedaVaultChain, string> = {\n // NOTE: For now only `ethereum` is supported by the API.\n [ChainId.ethereum]: 'ethereum',\n\n // NOTE: The following networks are not supported for now. The API is supposed\n // to return the aggregated data for all vault chains.\n [ChainId.base]: 'base',\n [ChainId.binanceSmartChain]: 'bnb',\n [ChainId.corn]: 'corn',\n};\n\nconst NETWORK_TO_CHAIN_ID_MAP: Record<string, VedaVaultChain> = {\n ethereum: ChainId.ethereum,\n base: ChainId.base,\n bnb: ChainId.binanceSmartChain,\n corn: ChainId.corn,\n};\n\n/**\n * Gets the raw response of the performance apy api for the provided vault.\n */\nasync function getVaultPerformance({\n aggregationPeriod = 7,\n chainId,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultPerformanceParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = CHAIN_ID_TO_NETWORK_MAP[chainId];\n if (network !== 'ethereum') {\n throw new Error(\n `Unsupported network ${network}. Please switch to 'ethereum'.`,\n );\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const params = new URLSearchParams({\n aggregation_period: String(aggregationPeriod),\n historical: 'true',\n });\n const url = `${bffApiUrl}/sevenseas-api/performance/${network}/${vault.vaultContract.address}?${params.toString()}`;\n\n const { data } = await axios.get<PerformancePayload>(url);\n\n return normalizeSevenSeasPerformance(data);\n}\n","import axios from 'axios';\nimport { Address } from 'viem';\n\nimport { Vault, VAULTS } from '../config';\n\nexport type GetVaultPointsParameters = {\n /** The account address. */\n account: Address;\n /** The optional vault identifier */\n vaultKey?: Vault;\n};\n\nconst POINTS_URL = 'https://api.veda.tech/points/user/{account}';\n\ntype Response = {\n Response: {\n [network: string]: {\n userChainVedaPointsSum: number;\n vaults: {\n [vaultAddress: string]: {\n name: string;\n timestamp: string;\n totalPoints: number;\n };\n };\n };\n };\n};\n\n/**\n * Gets the points earned by specified account in the DeFi vault.\n */\nexport async function getVaultPoints({\n account,\n vaultKey = Vault.Veda,\n}: GetVaultPointsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const url = POINTS_URL.replace('{account}', account);\n const { data } = await axios.get<Response>(url, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n },\n });\n\n const vedaPointsBreakdown: Record<string, number> = {};\n const entries = Object.entries(data.Response);\n for (const [network, points] of entries) {\n if (network === 'userTotalVedaPointsSum') continue;\n\n const vaultPoints = Object.entries(points.vaults).find(\n ([v]) => v === vault.vaultContract.address,\n );\n if (vaultPoints) {\n const [, data] = vaultPoints;\n const p = Number.isNaN(data.totalPoints) ? 0 : data.totalPoints;\n vedaPointsBreakdown[network] = p;\n }\n }\n\n let totalPoints = 0;\n for (const p of Object.values(vedaPointsBreakdown)) {\n totalPoints += p;\n }\n\n return {\n totalPoints,\n pointsBreakdown: vedaPointsBreakdown,\n };\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { extractChain, PublicClient } from 'viem';\nimport * as chains from 'viem/chains';\n\nimport { makePublicClient } from '../../../clients/public-client';\nimport { getApiConfig } from '../../../common/api-config';\nimport { IEnvParam } from '../../../common/parameters';\nimport { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenContractInfo,\n retrieveTokenProperties,\n} from '../../../tokens/tokens';\nimport { Vault, VAULTS, VedaVaultChain } from '../config';\n\nexport type GetVaultBtcHolding = {\n vaultKey?: Vault;\n rpcUrls?: Record<VedaVaultChain, string>;\n};\nexport async function getVaultBtcHolding({\n vaultKey = Vault.Veda,\n rpcUrls,\n}: GetVaultBtcHolding) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const clients: Partial<Record<VedaVaultChain, PublicClient>> = {};\n for (const chainId of vault.chains) {\n const publicClient = makePublicClient({\n chainId: chainId,\n rpcUrl: rpcUrls?.[chainId],\n });\n clients[chainId] = publicClient;\n }\n\n const balances = [];\n\n for (const [token, chainIds] of Object.entries(vault.tokens)) {\n for (const chainId of chainIds) {\n const tokenContract = await getTokenContractInfo(token as Token, chainId);\n\n const publicClient = clients[chainId];\n if (!publicClient) continue;\n\n const tokenInfo = await retrieveTokenProperties(\n publicClient,\n tokenContract,\n );\n\n if (!tokenInfo) continue;\n\n const balanceRaw = await publicClient.readContract({\n abi: tokenContract.abi,\n address: tokenContract.address,\n functionName: 'balanceOf',\n args: [vault.vaultContract.address],\n });\n\n const balance = fromBaseDenomination(\n balanceRaw ? String(balanceRaw) : 0,\n tokenInfo.decimals,\n );\n\n const ch = extractChain({ chains: Object.values(chains), id: chainId });\n console.info(`Balance of ${token} on ${ch.name}: ${balance}`);\n\n balances.push(balance);\n }\n }\n\n return BigNumber.sum.apply(null, balances);\n}\n\nexport type GetVaultTVLParameters = {\n vaultKey?: Vault;\n} & IEnvParam;\n\ntype DuneQueryResult = {\n net_btc_balance: number;\n price: number;\n vault_tvl: number;\n};\n\ntype Response = {\n /** The TVL represented in BTC locked in the vault */\n btcBalance: BigNumber;\n /** The BTC price in US dollars */\n btcPrice: BigNumber;\n /** The TVL represented us US dollars */\n tvl: BigNumber;\n};\nexport async function getVaultTVL({\n vaultKey = Vault.Veda,\n env,\n}: GetVaultTVLParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const url = `${bffApiUrl}/dune-api/query/vault-tvl`;\n const { data } = await axios.get<DuneQueryResult>(url);\n\n const response: Response = {\n btcBalance: BigNumber(data.net_btc_balance),\n btcPrice: BigNumber(data.price),\n tvl: BigNumber(data.vault_tvl),\n };\n\n return response;\n}\n"],"names":["normalizeSevenSeasDeposits","payload","response","getVaultDeposits","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","url","data","axios","entries","depositAssetsAddresses","unique","d","ensureHex","depositAssets","asset","assetInfo","getAssetInfo","deposits","token","amount","fromBaseDenomination","shareAmount","NETWORK_TO_VEDA_VAULT_CHAIN_MAP","orderBy","getVaultDepositsAllChains","depositsPromises","error","allDeposits","normalizeSevenSeasPerformance","getVaultApy","aggregationPeriod","ChainId","apys","getVaultPerformance","allocations","value","NETWORK_TO_CHAIN_ID_MAP","BigNumber","acc","cur","breakdown","b","a","CHAIN_ID_TO_NETWORK_MAP","params","POINTS_URL","getVaultPoints","vedaPointsBreakdown","points","vaultPoints","v","p","totalPoints","getVaultTVL"],"mappings":"mUAwCA,MAAMA,EACJC,GAC4B,CAC5B,GAAI,CAACA,EACH,MAAO,CAAA,EAGT,GAAI,MAAM,QAAQA,CAAO,EACvB,OAAOA,EAGT,GAAI,aAAcA,EAAS,CACzB,MAAMC,EAAWD,EAAQ,SACzB,OAAI,MAAM,QAAQC,CAAQ,EACjBA,EAELA,EACK,CAACA,CAAQ,EAEX,CAAA,CACT,CAEA,MAAO,CAACD,CAAO,CACjB,EAoCA,eAAsBE,EAAiB,CACrC,QAAAC,EACA,QAAAC,EACA,SAAAC,EAAWC,EAAAA,MAAM,KACjB,OAAAC,EACA,IAAAC,CACF,EAA+B,CAC7B,MAAMC,EAAQC,EAAAA,OAAOL,CAAQ,EAC7B,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,sBAAsBJ,CAAQ,EAAE,EAGlD,GAAI,CAACM,EAAAA,iBAAiBP,CAAO,EAC3B,MAAM,IAAI,MACR,yBAAyBA,CAAO,mDAAmDK,EAAM,OAAO,KAAK,IAAI,CAAC,EAAA,EAI9G,MAAMG,EAAUC,EAAAA,gCAAgCT,CAAO,EACjD,CAAE,UAAAU,CAAA,EAAcC,EAAAA,aAAaP,CAAG,EACtC,GAAI,CAACM,EACH,MAAM,IAAI,MACR,8DAA8DN,CAAG,EAAA,EAGrE,MAAMQ,EAAM,GAAGF,CAAS,2BAA2BF,CAAO,IAAIH,EAAM,cAAc,OAAO,IAAIN,CAAO,GAE9F,CAAE,KAAAc,CAAA,EAAS,MAAMC,EAAM,IAA8BF,CAAG,EACxDG,EAAUpB,EAA2BkB,CAAI,EAEzCG,EAAyBC,EAAAA,OAC7BF,EAAQ,IAAIG,GAAKC,EAAAA,UAAUD,EAAE,aAAa,CAAC,CAAA,EAGvCE,EAAqE,CAAA,EAC3E,UAAWC,KAASL,EAAwB,CAC1C,MAAMM,EAAY,MAAMC,EAAAA,aAAaF,EAAOrB,EAASG,CAAM,EACvDmB,EACFF,EAAcC,CAAK,EAAI,CACrB,QAASC,EAAU,QACnB,SAAUA,EAAU,SACpB,OAAQA,EAAU,MAAA,EAGpBF,EAAcC,CAAK,EAAI,MAE3B,CAEA,MAAMG,EAAWT,EAAQ,IAAIG,GAAK,CAChC,MAAMO,EAAQL,EAAcD,EAAAA,UAAUD,EAAE,aAAa,CAAC,EAChDQ,EAASC,EAAAA,qBAAqBT,EAAE,gBAAgBO,GAAA,YAAAA,EAAO,WAAY,CAAC,EACpEG,EAAcD,EAAAA,qBAAqBT,EAAE,aAAcb,EAAM,QAAQ,EAYvE,MAVmC,CACjC,OAAQc,EAAAA,UAAUD,EAAE,OAAO,EAC3B,YAAaA,EAAE,aACf,QAASW,EAAAA,gCAAgCX,EAAE,KAAK,EAChD,OAAAQ,EACA,YAAAE,EACA,MAAAH,EACA,UAAWN,EAAAA,UAAUD,EAAE,IAAI,CAAA,CAI/B,CAAC,EAED,OAAOY,EAAAA,QAAQN,EAAUN,GAAKA,EAAE,YAAa,MAAM,CACrD,CAmBA,eAAsBa,EAA0B,CAC9C,QAAAhC,EACA,SAAAE,EAAWC,EAAAA,MAAM,KACjB,OAAAC,CACF,EAAiE,CAC/D,MAAME,EAAQC,EAAAA,OAAOL,CAAQ,EAC7B,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,sBAAsBJ,CAAQ,EAAE,EAIlD,MAAM+B,EAAmB3B,EAAM,OAAO,IAAIL,GACxCF,EAAiB,CAAE,QAAAC,EAAS,QAAAC,EAAS,SAAAC,EAAU,OAAAE,EAAQ,EAAE,MAAM8B,IAC7D,QAAQ,MAAM,sCAAsCjC,CAAO,IAAKiC,CAAK,EAC9D,CAAA,EACR,CAAA,EAMGC,GAHiB,MAAM,QAAQ,IAAIF,CAAgB,GAGtB,KAAA,EACnC,OAAOF,EAAAA,QAAQI,EAAahB,GAAKA,EAAE,YAAa,MAAM,CACxD,CClLA,MAAMiB,EACJvC,GACuB,CACvB,GAAI,CAACA,EACH,MAAO,CAAA,EAGT,GAAI,MAAM,QAAQA,CAAO,EACvB,OAAOA,EAGT,GAAI,aAAcA,EAAS,CACzB,MAAMC,EAAWD,EAAQ,SACzB,OAAI,MAAM,QAAQC,CAAQ,EACjBA,EAELA,EACK,CAACA,CAAQ,EAEX,CAAA,CACT,CAEA,MAAO,CAACD,CAAO,CACjB,EASA,eAAsBwC,EAAY,CAChC,kBAAAC,EAAoB,EACpB,QAAArC,EAAUsC,EAAAA,QAAQ,SAClB,SAAArC,EAAWC,EAAAA,MAAM,KACjB,IAAAE,CACF,EAA0B,CAQxB,MAAMmC,GAPW,MAAMC,EAAoB,CACzC,kBAAAH,EACA,QAAArC,EACA,SAAAC,EACA,IAAAG,CAAA,CACD,GAEqB,IAAI,GAAK,CAC7B,MAAMqC,EAAc,OAAO,QAAQ,EAAE,gBAAgB,EAClD,IAAI,CAAC,CAACjC,EAASkC,CAAK,IAAM,CACzBC,EAAwBnC,CAAO,EAC/BoC,EAAUF,CAAK,CAAA,CAChB,EACA,OACC,CAACG,EAAKC,IAAQ,CACZ,KAAM,CAAC9C,EAAS0C,CAAK,EAAII,EACzB,OAAAD,EAAI7C,CAAO,EAAI0C,EACRG,CACT,EACA,CAAA,CAAC,EAGCE,EAAY,EAAE,mBAAmB,IAAIC,IAAM,CAC/C,YAAaJ,EAAUI,EAAE,UAAU,EACnC,IAAKJ,EAAUI,EAAE,GAAG,EACpB,QAASL,EAAwBK,EAAE,KAAK,EACxC,SAAUA,EAAE,QAAA,EACZ,EAEF,MAAO,CACL,IAAKJ,EAAU,EAAE,GAAG,EACpB,YAAAH,EACA,UAAAM,EACA,UAAW,IAAI,KAAK,EAAE,SAAS,CAAA,CAEnC,CAAC,EAED,OAAOjB,EAAAA,QAAQS,EAAMU,GAAKA,EAAE,UAAU,QAAA,EAAW,MAAM,CACzD,CAQA,MAAMC,EAA0D,CAE9D,CAACZ,EAAAA,QAAQ,QAAQ,EAAG,WAIpB,CAACA,EAAAA,QAAQ,IAAI,EAAG,OAChB,CAACA,EAAAA,QAAQ,iBAAiB,EAAG,MAC7B,CAACA,EAAAA,QAAQ,IAAI,EAAG,MAClB,EAEMK,EAA0D,CAC9D,SAAUL,EAAAA,QAAQ,SAClB,KAAMA,EAAAA,QAAQ,KACd,IAAKA,EAAAA,QAAQ,kBACb,KAAMA,EAAAA,QAAQ,IAChB,EAKA,eAAeE,EAAoB,CACjC,kBAAAH,EAAoB,EACpB,QAAArC,EACA,SAAAC,EAAWC,EAAAA,MAAM,KACjB,IAAAE,CACF,EAAkC,CAChC,MAAMC,EAAQC,EAAAA,OAAOL,CAAQ,EAC7B,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,sBAAsBJ,CAAQ,EAAE,EAGlD,GAAI,CAACM,EAAAA,iBAAiBP,CAAO,EAC3B,MAAM,IAAI,MACR,yBAAyBA,CAAO,mDAAmDK,EAAM,OAAO,KAAK,IAAI,CAAC,EAAA,EAI9G,MAAMG,EAAU0C,EAAwBlD,CAAO,EAC/C,GAAIQ,IAAY,WACd,MAAM,IAAI,MACR,uBAAuBA,CAAO,gCAAA,EAIlC,KAAM,CAAE,UAAAE,CAAA,EAAcC,EAAAA,aAAaP,CAAG,EACtC,GAAI,CAACM,EACH,MAAM,IAAI,MACR,8DAA8DN,CAAG,EAAA,EAIrE,MAAM+C,EAAS,IAAI,gBAAgB,CACjC,mBAAoB,OAAOd,CAAiB,EAC5C,WAAY,MAAA,CACb,EACKzB,EAAM,GAAGF,CAAS,8BAA8BF,CAAO,IAAIH,EAAM,cAAc,OAAO,IAAI8C,EAAO,SAAA,CAAU,GAE3G,CAAE,KAAAtC,CAAA,EAAS,MAAMC,EAAM,IAAwBF,CAAG,EAExD,OAAOuB,EAA8BtB,CAAI,CAC3C,CCnKA,MAAMuC,EAAa,8CAoBnB,eAAsBC,EAAe,CACnC,QAAAtD,EACA,SAAAE,EAAWC,EAAAA,MAAM,IACnB,EAA6B,CAC3B,MAAMG,EAAQC,EAAAA,OAAOL,CAAQ,EAC7B,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,sBAAsBJ,CAAQ,EAAE,EAGlD,MAAMW,EAAMwC,EAAW,QAAQ,YAAarD,CAAO,EAC7C,CAAE,KAAAc,CAAA,EAAS,MAAMC,EAAM,IAAcF,EAAK,CAC9C,QAAS,CACP,8BAA+B,IAC/B,eAAgB,kBAAA,CAClB,CACD,EAEK0C,EAA8C,CAAA,EAC9CvC,EAAU,OAAO,QAAQF,EAAK,QAAQ,EAC5C,SAAW,CAACL,EAAS+C,CAAM,IAAKxC,EAAS,CACvC,GAAIP,IAAY,yBAA0B,SAE1C,MAAMgD,EAAc,OAAO,QAAQD,EAAO,MAAM,EAAE,KAChD,CAAC,CAACE,CAAC,IAAMA,IAAMpD,EAAM,cAAc,OAAA,EAErC,GAAImD,EAAa,CACf,KAAM,CAAA,CAAG3C,CAAI,EAAI2C,EACXE,EAAI,OAAO,MAAM7C,EAAK,WAAW,EAAI,EAAIA,EAAK,YACpDyC,EAAoB9C,CAAO,EAAIkD,CACjC,CACF,CAEA,IAAIC,EAAc,EAClB,UAAW,KAAK,OAAO,OAAOL,CAAmB,EAC/CK,GAAe,EAGjB,MAAO,CACL,YAAAA,EACA,gBAAiBL,CAAA,CAErB,CCqBA,eAAsBM,EAAY,CAChC,SAAA3D,EAAWC,EAAAA,MAAM,KACjB,IAAAE,CACF,EAA0B,CAExB,GAAI,CADUE,EAAAA,OAAOL,CAAQ,EAE3B,MAAM,IAAI,MAAM,sBAAsBA,CAAQ,EAAE,EAGlD,KAAM,CAAE,UAAAS,CAAA,EAAcC,EAAAA,aAAaP,CAAG,EACtC,GAAI,CAACM,EACH,MAAM,IAAI,MACR,8DAA8DN,CAAG,EAAA,EAIrE,MAAMQ,EAAM,GAAGF,CAAS,4BAClB,CAAE,KAAAG,CAAA,EAAS,MAAMC,EAAM,IAAqBF,CAAG,EAQrD,MAN2B,CACzB,WAAYgC,EAAU/B,EAAK,eAAe,EAC1C,SAAU+B,EAAU/B,EAAK,KAAK,EAC9B,IAAK+B,EAAU/B,EAAK,SAAS,CAAA,CAIjC"}
1
+ {"version":3,"file":"get-vault-tvl-CRbxkHmr.cjs","sources":["../../src/vaults/lib/ops/get-vault-deposits.ts","../../src/vaults/lib/metrics/get-vault-apy.ts","../../src/vaults/lib/metrics/get-vault-points.ts","../../src/vaults/lib/metrics/get-vault-tvl.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n NETWORK_TO_VEDA_VAULT_CHAIN_MAP,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\ntype SevenSeasDepositEntry = {\n block_number: number;\n chain: string;\n deposit_amount: number;\n deposit_asset: string;\n share_amount: number;\n tx_hash: string;\n user: string;\n vault_address: string;\n};\n\ntype SevenSeasDepositsPayload =\n | SevenSeasDepositEntry\n | SevenSeasDepositEntry[]\n | { Response: SevenSeasDepositEntry }\n | { Response: SevenSeasDepositEntry[] };\n\nconst normalizeSevenSeasDeposits = (\n payload: SevenSeasDepositsPayload | undefined,\n): SevenSeasDepositEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultDepositsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultDeposit = {\n /** The transaction hash */\n txHash: Hash;\n /** The transaction's block number */\n blockNumber: number;\n /** The chain id */\n chainId: VedaVaultChain;\n /** The deposited amount */\n amount: BigNumber;\n /** The amount of shares received */\n shareAmount: BigNumber;\n /** The deposit token */\n token?: Omit<TokenInfo, 'abi'>;\n /** The user wallet address that made the deposit */\n toAddress: Address;\n};\n\n/**\n * Retrieves the deposits made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>}\n */\nexport async function getVaultDeposits({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultDepositsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n const url = `${bffApiUrl}/sevenseas-api/deposits/${network}/${vault.vaultContract.address}/${account}`;\n\n const { data } = await axios.get<SevenSeasDepositsPayload>(url);\n const entries = normalizeSevenSeasDeposits(data);\n\n const depositAssetsAddresses = unique(\n entries.map(d => ensureHex(d.deposit_asset)),\n );\n\n const depositAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> = {};\n for (const asset of depositAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n depositAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n depositAssets[asset] = undefined;\n }\n }\n\n const deposits = entries.map(d => {\n const token = depositAssets[ensureHex(d.deposit_asset)];\n const amount = fromBaseDenomination(d.deposit_amount, token?.decimals || 0);\n const shareAmount = fromBaseDenomination(d.share_amount, vault.decimals);\n\n const vaultDeposit: VaultDeposit = {\n txHash: ensureHex(d.tx_hash),\n blockNumber: d.block_number,\n chainId: NETWORK_TO_VEDA_VAULT_CHAIN_MAP[d.chain],\n amount,\n shareAmount,\n token,\n toAddress: ensureHex(d.user),\n };\n\n return vaultDeposit;\n });\n\n return orderBy(deposits, d => d.blockNumber, 'desc');\n}\n\nexport type GetVaultDepositsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the deposits made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all deposits regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultDeposit[]>} All deposits across all supported chains, sorted by block number (newest first)\n */\nexport async function getVaultDepositsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultDepositsAllChainsParameters): Promise<VaultDeposit[]> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch deposits from all supported chains in parallel\n const depositsPromises = vault.chains.map(chainId =>\n getVaultDeposits({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch deposits for chain ${chainId}:`, error);\n return []; // Return empty array on error to not break the entire query\n }),\n );\n\n const depositsArrays = await Promise.all(depositsPromises);\n\n // Flatten and sort all deposits by block number (newest first)\n const allDeposits = depositsArrays.flat();\n return orderBy(allDeposits, d => d.blockNumber, 'desc');\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport { orderBy } from '../../../utils/array';\nimport { isVedaVaultChain, Vault, VAULTS, VedaVaultChain } from '../config';\n\ntype PerformanceEntry = {\n aggregation_period: string;\n apy: number;\n chain_allocation: { [network: string]: number };\n fees: number;\n real_apy_breakdown: {\n allocation: number;\n apy: number;\n /** network */\n chain: string;\n protocol: string;\n }[];\n timestamp: string;\n};\n\ntype PerformancePayload =\n | PerformanceEntry\n | PerformanceEntry[]\n | { Response: PerformanceEntry }\n | { Response: PerformanceEntry[] };\n\nconst normalizeSevenSeasPerformance = (\n payload: PerformancePayload | undefined,\n): PerformanceEntry[] => {\n if (!payload) {\n return [];\n }\n\n if (Array.isArray(payload)) {\n return payload;\n }\n\n if ('Response' in payload) {\n const response = payload.Response;\n if (Array.isArray(response)) {\n return response;\n }\n if (response) {\n return [response];\n }\n return [];\n }\n\n return [payload];\n};\n\nexport type GetVaultApyParameters = IEnvParam & {\n aggregationPeriod?: 7 | 14 | 30;\n chainId?: ChainId;\n vaultKey?: Vault;\n};\n\n/** Gets the trailing APY performance history. */\nexport async function getVaultApy({\n aggregationPeriod = 7,\n chainId = ChainId.ethereum,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultApyParameters) {\n const response = await getVaultPerformance({\n aggregationPeriod,\n chainId,\n vaultKey,\n env,\n });\n\n const apys = response.map(r => {\n const allocations = Object.entries(r.chain_allocation)\n .map(([network, value]) => [\n NETWORK_TO_CHAIN_ID_MAP[network],\n BigNumber(value),\n ])\n .reduce(\n (acc, cur) => {\n const [chainId, value] = cur as [ChainId, BigNumber];\n acc[chainId] = value;\n return acc;\n },\n {} as Partial<Record<ChainId, BigNumber>>,\n );\n\n const breakdown = r.real_apy_breakdown.map(b => ({\n allocations: BigNumber(b.allocation),\n apy: BigNumber(b.apy),\n chainId: NETWORK_TO_CHAIN_ID_MAP[b.chain],\n protocol: b.protocol,\n }));\n\n return {\n apy: BigNumber(r.apy),\n allocations,\n breakdown,\n timestamp: new Date(r.timestamp),\n };\n });\n\n return orderBy(apys, a => a.timestamp.getTime(), 'desc');\n}\n\ntype GetVaultPerformanceParameters = {\n aggregationPeriod?: 7 | 14 | 30;\n chainId: ChainId;\n vaultKey?: Vault;\n} & IEnvParam;\n\nconst CHAIN_ID_TO_NETWORK_MAP: Record<VedaVaultChain, string> = {\n // NOTE: For now only `ethereum` is supported by the API.\n [ChainId.ethereum]: 'ethereum',\n\n // NOTE: The following networks are not supported for now. The API is supposed\n // to return the aggregated data for all vault chains.\n [ChainId.base]: 'base',\n [ChainId.binanceSmartChain]: 'bnb',\n [ChainId.corn]: 'corn',\n};\n\nconst NETWORK_TO_CHAIN_ID_MAP: Record<string, VedaVaultChain> = {\n ethereum: ChainId.ethereum,\n base: ChainId.base,\n bnb: ChainId.binanceSmartChain,\n corn: ChainId.corn,\n};\n\n/**\n * Gets the raw response of the performance apy api for the provided vault.\n */\nasync function getVaultPerformance({\n aggregationPeriod = 7,\n chainId,\n vaultKey = Vault.Veda,\n env,\n}: GetVaultPerformanceParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = CHAIN_ID_TO_NETWORK_MAP[chainId];\n if (network !== 'ethereum') {\n throw new Error(\n `Unsupported network ${network}. Please switch to 'ethereum'.`,\n );\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const params = new URLSearchParams({\n aggregation_period: String(aggregationPeriod),\n historical: 'true',\n });\n const url = `${bffApiUrl}/sevenseas-api/performance/${network}/${vault.vaultContract.address}?${params.toString()}`;\n\n const { data } = await axios.get<PerformancePayload>(url);\n\n return normalizeSevenSeasPerformance(data);\n}\n","import axios from 'axios';\nimport { Address } from 'viem';\n\nimport { Vault, VAULTS } from '../config';\n\nexport type GetVaultPointsParameters = {\n /** The account address. */\n account: Address;\n /** The optional vault identifier */\n vaultKey?: Vault;\n};\n\nconst POINTS_URL = 'https://api.veda.tech/points/user/{account}';\n\ntype Response = {\n Response: {\n [network: string]: {\n userChainVedaPointsSum: number;\n vaults: {\n [vaultAddress: string]: {\n name: string;\n timestamp: string;\n totalPoints: number;\n };\n };\n };\n };\n};\n\n/**\n * Gets the points earned by specified account in the DeFi vault.\n */\nexport async function getVaultPoints({\n account,\n vaultKey = Vault.Veda,\n}: GetVaultPointsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const url = POINTS_URL.replace('{account}', account);\n const { data } = await axios.get<Response>(url, {\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n },\n });\n\n const vedaPointsBreakdown: Record<string, number> = {};\n const entries = Object.entries(data.Response);\n for (const [network, points] of entries) {\n if (network === 'userTotalVedaPointsSum') continue;\n\n const vaultPoints = Object.entries(points.vaults).find(\n ([v]) => v === vault.vaultContract.address,\n );\n if (vaultPoints) {\n const [, data] = vaultPoints;\n const p = Number.isNaN(data.totalPoints) ? 0 : data.totalPoints;\n vedaPointsBreakdown[network] = p;\n }\n }\n\n let totalPoints = 0;\n for (const p of Object.values(vedaPointsBreakdown)) {\n totalPoints += p;\n }\n\n return {\n totalPoints,\n pointsBreakdown: vedaPointsBreakdown,\n };\n}\n","import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { extractChain, PublicClient } from 'viem';\nimport * as chains from 'viem/chains';\n\nimport { makePublicClient } from '../../../clients/public-client';\nimport { getApiConfig } from '../../../common/api-config';\nimport { IEnvParam } from '../../../common/parameters';\nimport { Token } from '../../../tokens/token-addresses';\nimport {\n fromBaseDenomination,\n getTokenContractInfo,\n retrieveTokenProperties,\n} from '../../../tokens/tokens';\nimport { Vault, VAULTS, VedaVaultChain } from '../config';\n\nexport type GetVaultBtcHolding = {\n vaultKey?: Vault;\n rpcUrls?: Record<VedaVaultChain, string>;\n};\nexport async function getVaultBtcHolding({\n vaultKey = Vault.Veda,\n rpcUrls,\n}: GetVaultBtcHolding) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const clients: Partial<Record<VedaVaultChain, PublicClient>> = {};\n for (const chainId of vault.chains) {\n const publicClient = makePublicClient({\n chainId: chainId,\n rpcUrl: rpcUrls?.[chainId],\n });\n clients[chainId] = publicClient;\n }\n\n const balances = [];\n\n for (const [token, chainIds] of Object.entries(vault.tokens)) {\n for (const chainId of chainIds) {\n const tokenContract = await getTokenContractInfo(token as Token, chainId);\n\n const publicClient = clients[chainId];\n if (!publicClient) continue;\n\n const tokenInfo = await retrieveTokenProperties(\n publicClient,\n tokenContract,\n );\n\n if (!tokenInfo) continue;\n\n const balanceRaw = await publicClient.readContract({\n abi: tokenContract.abi,\n address: tokenContract.address,\n functionName: 'balanceOf',\n args: [vault.vaultContract.address],\n });\n\n const balance = fromBaseDenomination(\n balanceRaw ? String(balanceRaw) : 0,\n tokenInfo.decimals,\n );\n\n const ch = extractChain({ chains: Object.values(chains), id: chainId });\n console.info(`Balance of ${token} on ${ch.name}: ${balance}`);\n\n balances.push(balance);\n }\n }\n\n return BigNumber.sum.apply(null, balances);\n}\n\nexport type GetVaultTVLParameters = {\n vaultKey?: Vault;\n} & IEnvParam;\n\ntype DuneQueryResult = {\n net_btc_balance: number;\n price: number;\n vault_tvl: number;\n};\n\ntype Response = {\n /** The TVL represented in BTC locked in the vault */\n btcBalance: BigNumber;\n /** The BTC price in US dollars */\n btcPrice: BigNumber;\n /** The TVL represented us US dollars */\n tvl: BigNumber;\n};\nexport async function getVaultTVL({\n vaultKey = Vault.Veda,\n env,\n}: GetVaultTVLParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const url = `${bffApiUrl}/dune-api/query/vault-tvl`;\n const { data } = await axios.get<DuneQueryResult>(url);\n\n const response: Response = {\n btcBalance: BigNumber(data.net_btc_balance),\n btcPrice: BigNumber(data.price),\n tvl: BigNumber(data.vault_tvl),\n };\n\n return response;\n}\n"],"names":["normalizeSevenSeasDeposits","payload","response","getVaultDeposits","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","url","data","axios","entries","depositAssetsAddresses","unique","d","ensureHex","depositAssets","asset","assetInfo","getAssetInfo","deposits","token","amount","fromBaseDenomination","shareAmount","NETWORK_TO_VEDA_VAULT_CHAIN_MAP","orderBy","getVaultDepositsAllChains","depositsPromises","error","allDeposits","normalizeSevenSeasPerformance","getVaultApy","aggregationPeriod","ChainId","apys","getVaultPerformance","allocations","value","NETWORK_TO_CHAIN_ID_MAP","BigNumber","acc","cur","breakdown","b","a","CHAIN_ID_TO_NETWORK_MAP","params","POINTS_URL","getVaultPoints","vedaPointsBreakdown","points","vaultPoints","v","p","totalPoints","getVaultTVL"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { getApiConfig as U } from "./api-config-Dm6dR85f.js";
3
3
  import { getAssetInfo as g, fromBaseDenomination as o } from "./tokens-DgC1hfkm.js";
4
4
  import { unique as C, orderBy as i } from "./array-DYttUPf5.js";
5
5
  import { ensureHex as a } from "./time-Sa5gggPG.js";
6
- import { Vault as T, isVedaVaultChain as F, VAULTS as H, VEDA_VAULT_CHAIN_TO_NETWORK_MAP as W } from "./config-DghboRx0.js";
6
+ import { Vault as T, isVedaVaultChain as F, VAULTS as H, VEDA_VAULT_CHAIN_TO_NETWORK_MAP as W } from "./config-JT3GvwPB.js";
7
7
  const B = {
8
8
  cancelled_requests: [],
9
9
  expired_requests: [],
@@ -158,4 +158,4 @@ export {
158
158
  D as getVaultWithdrawals,
159
159
  G as getVaultWithdrawalsAllChains
160
160
  };
161
- //# sourceMappingURL=get-vault-withdrawals-jk7Sv4S4.js.map
161
+ //# sourceMappingURL=get-vault-withdrawals-CQwNiILS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-vault-withdrawals-jk7Sv4S4.js","sources":["../../src/vaults/lib/ops/get-vault-withdrawals.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\nexport type GetVaultWithdrawalsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultWithdrawal = {\n token?: Omit<TokenInfo, 'abi'>;\n /** The amount of shares withdrawn */\n shareAmount: BigNumber;\n /** The amount of funds withdrawn */\n amount?: BigNumber;\n /** The min price of a share */\n minPrice?: BigNumber;\n /** The expiration timestamp */\n deadline: number;\n /** The request timestamp */\n timestamp: number;\n /** The withdraw request transaction hash */\n txHash: Hash;\n /** The request block number */\n blockNumber: number;\n /** The fulfilment timestamp */\n fulfilledTimestamp?: number;\n /** The funds transfer transaction hash */\n fulfilledTxHash?: Hash;\n /** The fulfilment block number */\n fulfilledBlockNumber?: number;\n /** The chain id */\n chainId?: VedaVaultChain;\n /** The user wallet address that made the withdrawal */\n toAddress?: Address;\n};\n\nexport type VaultWithdrawals = {\n cancelled: VaultWithdrawal[];\n expired: VaultWithdrawal[];\n fulfilled: VaultWithdrawal[];\n open: VaultWithdrawal[];\n};\n\ntype WithdrawRequest = {\n amount: number;\n blockNumber: number;\n deadline: number;\n minPrice: number;\n timestamp: number;\n transactionHash: string;\n wantToken: string;\n};\n\ntype FulfilledRequest = {\n // Yup, there's a typo in the response, double L is expected.\n Fulfillment: {\n blockNumber: number;\n offerAmountSpent: number;\n timestamp: number;\n transactionHash: string;\n wantAmountReceived: number;\n wantToken: string;\n };\n Request: WithdrawRequest;\n};\n\ntype SevenSeasWithdrawRequests = {\n cancelled_requests?: WithdrawRequest[];\n expired_requests?: WithdrawRequest[];\n fulfilled_requests?: FulfilledRequest[];\n open_requests?: WithdrawRequest[];\n};\n\ntype WithdrawalsPayload =\n | SevenSeasWithdrawRequests\n | { Response: SevenSeasWithdrawRequests };\n\nconst EMPTY_WITHDRAW_REQUESTS: SevenSeasWithdrawRequests = {\n cancelled_requests: [],\n expired_requests: [],\n fulfilled_requests: [],\n open_requests: [],\n};\n\nconst normalizeSevenSeasWithdrawRequests = (\n payload?: WithdrawalsPayload,\n): SevenSeasWithdrawRequests => {\n if (!payload) {\n return EMPTY_WITHDRAW_REQUESTS;\n }\n\n if ('Response' in payload) {\n return normalizeSevenSeasWithdrawRequests(payload.Response);\n }\n\n return {\n cancelled_requests: payload.cancelled_requests ?? [],\n expired_requests: payload.expired_requests ?? [],\n fulfilled_requests: payload.fulfilled_requests ?? [],\n open_requests: payload.open_requests ?? [],\n };\n};\n\n/**\n * Retrieves the withdrawals made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>}\n */\nexport async function getVaultWithdrawals({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultWithdrawalsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const endpoint = `${bffApiUrl}/sevenseas-api/withdraw-requests/${network}/${vault.vaultContract.address}/${account}`;\n const searchParams = new URLSearchParams({\n historical: 'true',\n });\n const url = `${endpoint}?${searchParams.toString()}`;\n\n const { data } = await axios.get<WithdrawalsPayload>(url);\n const response = normalizeSevenSeasWithdrawRequests(data);\n\n const cancelledRequests = response.cancelled_requests ?? [];\n const expiredRequests = response.expired_requests ?? [];\n const fulfilledRequests = response.fulfilled_requests ?? [];\n const openRequests = response.open_requests ?? [];\n\n const withdrawAssetsAddresses = unique([\n ...cancelledRequests.map(a => ensureHex(a.wantToken)),\n ...expiredRequests.map(a => ensureHex(a.wantToken)),\n ...fulfilledRequests.map(a => ensureHex(a.Request.wantToken)),\n ...openRequests.map(a => ensureHex(a.wantToken)),\n ]);\n\n const withdrawAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> =\n {};\n for (const asset of withdrawAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n withdrawAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n withdrawAssets[asset] = undefined;\n }\n }\n\n const cancelled = cancelledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const expired = expiredRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const fulfilled = fulfilledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.Request.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: fromBaseDenomination(\n w.Fulfillment.wantAmountReceived,\n token?.decimals || 0,\n ),\n blockNumber: w.Request.blockNumber,\n deadline: w.Request.deadline,\n shareAmount: fromBaseDenomination(\n w.Fulfillment.offerAmountSpent,\n vault.decimals,\n ),\n timestamp: w.Request.timestamp,\n txHash: ensureHex(w.Request.transactionHash),\n token,\n fulfilledBlockNumber: w.Fulfillment.blockNumber,\n fulfilledTimestamp: w.Fulfillment.timestamp,\n fulfilledTxHash: ensureHex(w.Fulfillment.transactionHash),\n minPrice: fromBaseDenomination(w.Request.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const open = openRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n minPrice: fromBaseDenomination(w.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n\n const wihdrawals: VaultWithdrawals = {\n cancelled: orderBy(cancelled, a => a.timestamp, 'desc'),\n expired: orderBy(expired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n fulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(open, a => a.timestamp, 'desc'),\n };\n\n return wihdrawals;\n}\n\nexport type GetVaultWithdrawalsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the withdrawals made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all withdrawals regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>} All withdrawals across all supported chains, categorized and sorted\n */\nexport async function getVaultWithdrawalsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultWithdrawalsAllChainsParameters): Promise<VaultWithdrawals> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch withdrawals from all supported chains in parallel\n const withdrawalsPromises = vault.chains.map(chainId =>\n getVaultWithdrawals({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch withdrawals for chain ${chainId}:`, error);\n return {\n cancelled: [],\n expired: [],\n fulfilled: [],\n open: [],\n }; // Return empty withdrawals on error to not break the entire query\n }),\n );\n\n const withdrawalsArrays = await Promise.all(withdrawalsPromises);\n\n // Combine all withdrawals from all chains\n const allCancelled: VaultWithdrawal[] = [];\n const allExpired: VaultWithdrawal[] = [];\n const allFulfilled: VaultWithdrawal[] = [];\n const allOpen: VaultWithdrawal[] = [];\n\n for (const withdrawals of withdrawalsArrays) {\n allCancelled.push(...withdrawals.cancelled);\n allExpired.push(...withdrawals.expired);\n allFulfilled.push(...withdrawals.fulfilled);\n allOpen.push(...withdrawals.open);\n }\n\n // Sort each category by timestamp (newest first)\n return {\n cancelled: orderBy(allCancelled, a => a.timestamp, 'desc'),\n expired: orderBy(allExpired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n allFulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(allOpen, a => a.timestamp, 'desc'),\n };\n}\n"],"names":["EMPTY_WITHDRAW_REQUESTS","normalizeSevenSeasWithdrawRequests","payload","getVaultWithdrawals","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","endpoint","searchParams","url","data","axios","response","cancelledRequests","expiredRequests","fulfilledRequests","openRequests","withdrawAssetsAddresses","unique","ensureHex","a","withdrawAssets","asset","assetInfo","getAssetInfo","cancelled","w","token","fromBaseDenomination","expired","fulfilled","open","orderBy","getVaultWithdrawalsAllChains","withdrawalsPromises","error","withdrawalsArrays","allCancelled","allExpired","allFulfilled","allOpen","withdrawals"],"mappings":"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"}
1
+ {"version":3,"file":"get-vault-withdrawals-CQwNiILS.js","sources":["../../src/vaults/lib/ops/get-vault-withdrawals.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\nexport type GetVaultWithdrawalsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultWithdrawal = {\n token?: Omit<TokenInfo, 'abi'>;\n /** The amount of shares withdrawn */\n shareAmount: BigNumber;\n /** The amount of funds withdrawn */\n amount?: BigNumber;\n /** The min price of a share */\n minPrice?: BigNumber;\n /** The expiration timestamp */\n deadline: number;\n /** The request timestamp */\n timestamp: number;\n /** The withdraw request transaction hash */\n txHash: Hash;\n /** The request block number */\n blockNumber: number;\n /** The fulfilment timestamp */\n fulfilledTimestamp?: number;\n /** The funds transfer transaction hash */\n fulfilledTxHash?: Hash;\n /** The fulfilment block number */\n fulfilledBlockNumber?: number;\n /** The chain id */\n chainId?: VedaVaultChain;\n /** The user wallet address that made the withdrawal */\n toAddress?: Address;\n};\n\nexport type VaultWithdrawals = {\n cancelled: VaultWithdrawal[];\n expired: VaultWithdrawal[];\n fulfilled: VaultWithdrawal[];\n open: VaultWithdrawal[];\n};\n\ntype WithdrawRequest = {\n amount: number;\n blockNumber: number;\n deadline: number;\n minPrice: number;\n timestamp: number;\n transactionHash: string;\n wantToken: string;\n};\n\ntype FulfilledRequest = {\n // Yup, there's a typo in the response, double L is expected.\n Fulfillment: {\n blockNumber: number;\n offerAmountSpent: number;\n timestamp: number;\n transactionHash: string;\n wantAmountReceived: number;\n wantToken: string;\n };\n Request: WithdrawRequest;\n};\n\ntype SevenSeasWithdrawRequests = {\n cancelled_requests?: WithdrawRequest[];\n expired_requests?: WithdrawRequest[];\n fulfilled_requests?: FulfilledRequest[];\n open_requests?: WithdrawRequest[];\n};\n\ntype WithdrawalsPayload =\n | SevenSeasWithdrawRequests\n | { Response: SevenSeasWithdrawRequests };\n\nconst EMPTY_WITHDRAW_REQUESTS: SevenSeasWithdrawRequests = {\n cancelled_requests: [],\n expired_requests: [],\n fulfilled_requests: [],\n open_requests: [],\n};\n\nconst normalizeSevenSeasWithdrawRequests = (\n payload?: WithdrawalsPayload,\n): SevenSeasWithdrawRequests => {\n if (!payload) {\n return EMPTY_WITHDRAW_REQUESTS;\n }\n\n if ('Response' in payload) {\n return normalizeSevenSeasWithdrawRequests(payload.Response);\n }\n\n return {\n cancelled_requests: payload.cancelled_requests ?? [],\n expired_requests: payload.expired_requests ?? [],\n fulfilled_requests: payload.fulfilled_requests ?? [],\n open_requests: payload.open_requests ?? [],\n };\n};\n\n/**\n * Retrieves the withdrawals made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>}\n */\nexport async function getVaultWithdrawals({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultWithdrawalsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const endpoint = `${bffApiUrl}/sevenseas-api/withdraw-requests/${network}/${vault.vaultContract.address}/${account}`;\n const searchParams = new URLSearchParams({\n historical: 'true',\n });\n const url = `${endpoint}?${searchParams.toString()}`;\n\n const { data } = await axios.get<WithdrawalsPayload>(url);\n const response = normalizeSevenSeasWithdrawRequests(data);\n\n const cancelledRequests = response.cancelled_requests ?? [];\n const expiredRequests = response.expired_requests ?? [];\n const fulfilledRequests = response.fulfilled_requests ?? [];\n const openRequests = response.open_requests ?? [];\n\n const withdrawAssetsAddresses = unique([\n ...cancelledRequests.map(a => ensureHex(a.wantToken)),\n ...expiredRequests.map(a => ensureHex(a.wantToken)),\n ...fulfilledRequests.map(a => ensureHex(a.Request.wantToken)),\n ...openRequests.map(a => ensureHex(a.wantToken)),\n ]);\n\n const withdrawAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> =\n {};\n for (const asset of withdrawAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n withdrawAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n withdrawAssets[asset] = undefined;\n }\n }\n\n const cancelled = cancelledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const expired = expiredRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const fulfilled = fulfilledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.Request.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: fromBaseDenomination(\n w.Fulfillment.wantAmountReceived,\n token?.decimals || 0,\n ),\n blockNumber: w.Request.blockNumber,\n deadline: w.Request.deadline,\n shareAmount: fromBaseDenomination(\n w.Fulfillment.offerAmountSpent,\n vault.decimals,\n ),\n timestamp: w.Request.timestamp,\n txHash: ensureHex(w.Request.transactionHash),\n token,\n fulfilledBlockNumber: w.Fulfillment.blockNumber,\n fulfilledTimestamp: w.Fulfillment.timestamp,\n fulfilledTxHash: ensureHex(w.Fulfillment.transactionHash),\n minPrice: fromBaseDenomination(w.Request.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const open = openRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n minPrice: fromBaseDenomination(w.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n\n const wihdrawals: VaultWithdrawals = {\n cancelled: orderBy(cancelled, a => a.timestamp, 'desc'),\n expired: orderBy(expired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n fulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(open, a => a.timestamp, 'desc'),\n };\n\n return wihdrawals;\n}\n\nexport type GetVaultWithdrawalsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the withdrawals made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all withdrawals regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>} All withdrawals across all supported chains, categorized and sorted\n */\nexport async function getVaultWithdrawalsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultWithdrawalsAllChainsParameters): Promise<VaultWithdrawals> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch withdrawals from all supported chains in parallel\n const withdrawalsPromises = vault.chains.map(chainId =>\n getVaultWithdrawals({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch withdrawals for chain ${chainId}:`, error);\n return {\n cancelled: [],\n expired: [],\n fulfilled: [],\n open: [],\n }; // Return empty withdrawals on error to not break the entire query\n }),\n );\n\n const withdrawalsArrays = await Promise.all(withdrawalsPromises);\n\n // Combine all withdrawals from all chains\n const allCancelled: VaultWithdrawal[] = [];\n const allExpired: VaultWithdrawal[] = [];\n const allFulfilled: VaultWithdrawal[] = [];\n const allOpen: VaultWithdrawal[] = [];\n\n for (const withdrawals of withdrawalsArrays) {\n allCancelled.push(...withdrawals.cancelled);\n allExpired.push(...withdrawals.expired);\n allFulfilled.push(...withdrawals.fulfilled);\n allOpen.push(...withdrawals.open);\n }\n\n // Sort each category by timestamp (newest first)\n return {\n cancelled: orderBy(allCancelled, a => a.timestamp, 'desc'),\n expired: orderBy(allExpired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n allFulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(allOpen, a => a.timestamp, 'desc'),\n };\n}\n"],"names":["EMPTY_WITHDRAW_REQUESTS","normalizeSevenSeasWithdrawRequests","payload","getVaultWithdrawals","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","endpoint","searchParams","url","data","axios","response","cancelledRequests","expiredRequests","fulfilledRequests","openRequests","withdrawAssetsAddresses","unique","ensureHex","a","withdrawAssets","asset","assetInfo","getAssetInfo","cancelled","w","token","fromBaseDenomination","expired","fulfilled","open","orderBy","getVaultWithdrawalsAllChains","withdrawalsPromises","error","withdrawalsArrays","allCancelled","allExpired","allFulfilled","allOpen","withdrawals"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const v=require("axios"),E=require("./api-config-DkXqqfCK.cjs"),l=require("./tokens-BkvA0Gp1.cjs"),i=require("./array-DKG6Pz4i.cjs"),r=require("./time-I-BeyUkG.cjs"),u=require("./config-DmCmanM_.cjs"),C={cancelled_requests:[],expired_requests:[],fulfilled_requests:[],open_requests:[]},R=n=>n?"Response"in n?R(n.Response):{cancelled_requests:n.cancelled_requests??[],expired_requests:n.expired_requests??[],fulfilled_requests:n.fulfilled_requests??[],open_requests:n.open_requests??[]}:C;async function B({account:n,chainId:a,vaultKey:c=u.Vault.Veda,rpcUrl:f,env:p}){const o=u.VAULTS[c];if(!o)throw new Error(`Unknown vault key: ${c}`);if(!u.isVedaVaultChain(a))throw new Error(`Unsupported chain id: ${a}. Please switch to one of the supported chains: ${o.chains.join(", ")}`);const h=u.VEDA_VAULT_CHAIN_TO_NETWORK_MAP[a],{bffApiUrl:m}=E.getApiConfig(p);if(!m)throw new Error(`Could not determine API endpoint for provided environment: ${p}`);const w=`${m}/sevenseas-api/withdraw-requests/${h}/${o.vaultContract.address}/${n}`,q=new URLSearchParams({historical:"true"}),t=`${w}?${q.toString()}`,{data:A}=await v.get(t),x=R(A),_=x.cancelled_requests??[],b=x.expired_requests??[],k=x.fulfilled_requests??[],T=x.open_requests??[],V=i.unique([..._.map(e=>r.ensureHex(e.wantToken)),...b.map(e=>r.ensureHex(e.wantToken)),...k.map(e=>r.ensureHex(e.Request.wantToken)),...T.map(e=>r.ensureHex(e.wantToken))]),d={};for(const e of V){const s=await l.getAssetInfo(e,a,f);s?d[e]={address:s.address,decimals:s.decimals,symbol:s.symbol}:d[e]=void 0}const N=_.map(e=>{const s=d[r.ensureHex(e.wantToken)];return{amount:void 0,blockNumber:e.blockNumber,deadline:e.deadline,shareAmount:l.fromBaseDenomination(e.amount,o.decimals),timestamp:e.timestamp,txHash:r.ensureHex(e.transactionHash),token:s,chainId:a,toAddress:n}}),P=b.map(e=>{const s=d[r.ensureHex(e.wantToken)];return{amount:void 0,blockNumber:e.blockNumber,deadline:e.deadline,shareAmount:l.fromBaseDenomination(e.amount,o.decimals),timestamp:e.timestamp,txHash:r.ensureHex(e.transactionHash),token:s,chainId:a,toAddress:n}}),$=k.map(e=>{const s=d[r.ensureHex(e.Request.wantToken)];return{amount:l.fromBaseDenomination(e.Fulfillment.wantAmountReceived,(s==null?void 0:s.decimals)||0),blockNumber:e.Request.blockNumber,deadline:e.Request.deadline,shareAmount:l.fromBaseDenomination(e.Fulfillment.offerAmountSpent,o.decimals),timestamp:e.Request.timestamp,txHash:r.ensureHex(e.Request.transactionHash),token:s,fulfilledBlockNumber:e.Fulfillment.blockNumber,fulfilledTimestamp:e.Fulfillment.timestamp,fulfilledTxHash:r.ensureHex(e.Fulfillment.transactionHash),minPrice:l.fromBaseDenomination(e.Request.minPrice,(s==null?void 0:s.decimals)||0),chainId:a,toAddress:n}}),g=T.map(e=>{const s=d[r.ensureHex(e.wantToken)];return{amount:void 0,blockNumber:e.blockNumber,deadline:e.deadline,shareAmount:l.fromBaseDenomination(e.amount,o.decimals),timestamp:e.timestamp,txHash:r.ensureHex(e.transactionHash),token:s,minPrice:l.fromBaseDenomination(e.minPrice,(s==null?void 0:s.decimals)||0),chainId:a,toAddress:n}});return{cancelled:i.orderBy(N,e=>e.timestamp,"desc"),expired:i.orderBy(P,e=>e.timestamp,"desc"),fulfilled:i.orderBy($,e=>e.fulfilledTimestamp||e.timestamp,"desc"),open:i.orderBy(g,e=>e.timestamp,"desc")}}async function D({account:n,vaultKey:a=u.Vault.Veda,rpcUrl:c}){const f=u.VAULTS[a];if(!f)throw new Error(`Unknown vault key: ${a}`);const p=f.chains.map(t=>B({account:n,chainId:t,vaultKey:a,rpcUrl:c}).catch(A=>(console.error(`Failed to fetch withdrawals for chain ${t}:`,A),{cancelled:[],expired:[],fulfilled:[],open:[]}))),o=await Promise.all(p),h=[],m=[],w=[],q=[];for(const t of o)h.push(...t.cancelled),m.push(...t.expired),w.push(...t.fulfilled),q.push(...t.open);return{cancelled:i.orderBy(h,t=>t.timestamp,"desc"),expired:i.orderBy(m,t=>t.timestamp,"desc"),fulfilled:i.orderBy(w,t=>t.fulfilledTimestamp||t.timestamp,"desc"),open:i.orderBy(q,t=>t.timestamp,"desc")}}exports.getVaultWithdrawals=B;exports.getVaultWithdrawalsAllChains=D;
2
- //# sourceMappingURL=get-vault-withdrawals-8ALlEiAC.cjs.map
1
+ "use strict";const v=require("axios"),E=require("./api-config-DkXqqfCK.cjs"),l=require("./tokens-BkvA0Gp1.cjs"),i=require("./array-DKG6Pz4i.cjs"),r=require("./time-I-BeyUkG.cjs"),u=require("./config-CSo0k7gN.cjs"),C={cancelled_requests:[],expired_requests:[],fulfilled_requests:[],open_requests:[]},R=n=>n?"Response"in n?R(n.Response):{cancelled_requests:n.cancelled_requests??[],expired_requests:n.expired_requests??[],fulfilled_requests:n.fulfilled_requests??[],open_requests:n.open_requests??[]}:C;async function B({account:n,chainId:a,vaultKey:c=u.Vault.Veda,rpcUrl:f,env:p}){const o=u.VAULTS[c];if(!o)throw new Error(`Unknown vault key: ${c}`);if(!u.isVedaVaultChain(a))throw new Error(`Unsupported chain id: ${a}. Please switch to one of the supported chains: ${o.chains.join(", ")}`);const h=u.VEDA_VAULT_CHAIN_TO_NETWORK_MAP[a],{bffApiUrl:m}=E.getApiConfig(p);if(!m)throw new Error(`Could not determine API endpoint for provided environment: ${p}`);const w=`${m}/sevenseas-api/withdraw-requests/${h}/${o.vaultContract.address}/${n}`,q=new URLSearchParams({historical:"true"}),t=`${w}?${q.toString()}`,{data:A}=await v.get(t),x=R(A),_=x.cancelled_requests??[],b=x.expired_requests??[],k=x.fulfilled_requests??[],T=x.open_requests??[],V=i.unique([..._.map(e=>r.ensureHex(e.wantToken)),...b.map(e=>r.ensureHex(e.wantToken)),...k.map(e=>r.ensureHex(e.Request.wantToken)),...T.map(e=>r.ensureHex(e.wantToken))]),d={};for(const e of V){const s=await l.getAssetInfo(e,a,f);s?d[e]={address:s.address,decimals:s.decimals,symbol:s.symbol}:d[e]=void 0}const N=_.map(e=>{const s=d[r.ensureHex(e.wantToken)];return{amount:void 0,blockNumber:e.blockNumber,deadline:e.deadline,shareAmount:l.fromBaseDenomination(e.amount,o.decimals),timestamp:e.timestamp,txHash:r.ensureHex(e.transactionHash),token:s,chainId:a,toAddress:n}}),P=b.map(e=>{const s=d[r.ensureHex(e.wantToken)];return{amount:void 0,blockNumber:e.blockNumber,deadline:e.deadline,shareAmount:l.fromBaseDenomination(e.amount,o.decimals),timestamp:e.timestamp,txHash:r.ensureHex(e.transactionHash),token:s,chainId:a,toAddress:n}}),$=k.map(e=>{const s=d[r.ensureHex(e.Request.wantToken)];return{amount:l.fromBaseDenomination(e.Fulfillment.wantAmountReceived,(s==null?void 0:s.decimals)||0),blockNumber:e.Request.blockNumber,deadline:e.Request.deadline,shareAmount:l.fromBaseDenomination(e.Fulfillment.offerAmountSpent,o.decimals),timestamp:e.Request.timestamp,txHash:r.ensureHex(e.Request.transactionHash),token:s,fulfilledBlockNumber:e.Fulfillment.blockNumber,fulfilledTimestamp:e.Fulfillment.timestamp,fulfilledTxHash:r.ensureHex(e.Fulfillment.transactionHash),minPrice:l.fromBaseDenomination(e.Request.minPrice,(s==null?void 0:s.decimals)||0),chainId:a,toAddress:n}}),g=T.map(e=>{const s=d[r.ensureHex(e.wantToken)];return{amount:void 0,blockNumber:e.blockNumber,deadline:e.deadline,shareAmount:l.fromBaseDenomination(e.amount,o.decimals),timestamp:e.timestamp,txHash:r.ensureHex(e.transactionHash),token:s,minPrice:l.fromBaseDenomination(e.minPrice,(s==null?void 0:s.decimals)||0),chainId:a,toAddress:n}});return{cancelled:i.orderBy(N,e=>e.timestamp,"desc"),expired:i.orderBy(P,e=>e.timestamp,"desc"),fulfilled:i.orderBy($,e=>e.fulfilledTimestamp||e.timestamp,"desc"),open:i.orderBy(g,e=>e.timestamp,"desc")}}async function D({account:n,vaultKey:a=u.Vault.Veda,rpcUrl:c}){const f=u.VAULTS[a];if(!f)throw new Error(`Unknown vault key: ${a}`);const p=f.chains.map(t=>B({account:n,chainId:t,vaultKey:a,rpcUrl:c}).catch(A=>(console.error(`Failed to fetch withdrawals for chain ${t}:`,A),{cancelled:[],expired:[],fulfilled:[],open:[]}))),o=await Promise.all(p),h=[],m=[],w=[],q=[];for(const t of o)h.push(...t.cancelled),m.push(...t.expired),w.push(...t.fulfilled),q.push(...t.open);return{cancelled:i.orderBy(h,t=>t.timestamp,"desc"),expired:i.orderBy(m,t=>t.timestamp,"desc"),fulfilled:i.orderBy(w,t=>t.fulfilledTimestamp||t.timestamp,"desc"),open:i.orderBy(q,t=>t.timestamp,"desc")}}exports.getVaultWithdrawals=B;exports.getVaultWithdrawalsAllChains=D;
2
+ //# sourceMappingURL=get-vault-withdrawals-QqvpZnxA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-vault-withdrawals-8ALlEiAC.cjs","sources":["../../src/vaults/lib/ops/get-vault-withdrawals.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\nexport type GetVaultWithdrawalsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultWithdrawal = {\n token?: Omit<TokenInfo, 'abi'>;\n /** The amount of shares withdrawn */\n shareAmount: BigNumber;\n /** The amount of funds withdrawn */\n amount?: BigNumber;\n /** The min price of a share */\n minPrice?: BigNumber;\n /** The expiration timestamp */\n deadline: number;\n /** The request timestamp */\n timestamp: number;\n /** The withdraw request transaction hash */\n txHash: Hash;\n /** The request block number */\n blockNumber: number;\n /** The fulfilment timestamp */\n fulfilledTimestamp?: number;\n /** The funds transfer transaction hash */\n fulfilledTxHash?: Hash;\n /** The fulfilment block number */\n fulfilledBlockNumber?: number;\n /** The chain id */\n chainId?: VedaVaultChain;\n /** The user wallet address that made the withdrawal */\n toAddress?: Address;\n};\n\nexport type VaultWithdrawals = {\n cancelled: VaultWithdrawal[];\n expired: VaultWithdrawal[];\n fulfilled: VaultWithdrawal[];\n open: VaultWithdrawal[];\n};\n\ntype WithdrawRequest = {\n amount: number;\n blockNumber: number;\n deadline: number;\n minPrice: number;\n timestamp: number;\n transactionHash: string;\n wantToken: string;\n};\n\ntype FulfilledRequest = {\n // Yup, there's a typo in the response, double L is expected.\n Fulfillment: {\n blockNumber: number;\n offerAmountSpent: number;\n timestamp: number;\n transactionHash: string;\n wantAmountReceived: number;\n wantToken: string;\n };\n Request: WithdrawRequest;\n};\n\ntype SevenSeasWithdrawRequests = {\n cancelled_requests?: WithdrawRequest[];\n expired_requests?: WithdrawRequest[];\n fulfilled_requests?: FulfilledRequest[];\n open_requests?: WithdrawRequest[];\n};\n\ntype WithdrawalsPayload =\n | SevenSeasWithdrawRequests\n | { Response: SevenSeasWithdrawRequests };\n\nconst EMPTY_WITHDRAW_REQUESTS: SevenSeasWithdrawRequests = {\n cancelled_requests: [],\n expired_requests: [],\n fulfilled_requests: [],\n open_requests: [],\n};\n\nconst normalizeSevenSeasWithdrawRequests = (\n payload?: WithdrawalsPayload,\n): SevenSeasWithdrawRequests => {\n if (!payload) {\n return EMPTY_WITHDRAW_REQUESTS;\n }\n\n if ('Response' in payload) {\n return normalizeSevenSeasWithdrawRequests(payload.Response);\n }\n\n return {\n cancelled_requests: payload.cancelled_requests ?? [],\n expired_requests: payload.expired_requests ?? [],\n fulfilled_requests: payload.fulfilled_requests ?? [],\n open_requests: payload.open_requests ?? [],\n };\n};\n\n/**\n * Retrieves the withdrawals made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>}\n */\nexport async function getVaultWithdrawals({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultWithdrawalsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const endpoint = `${bffApiUrl}/sevenseas-api/withdraw-requests/${network}/${vault.vaultContract.address}/${account}`;\n const searchParams = new URLSearchParams({\n historical: 'true',\n });\n const url = `${endpoint}?${searchParams.toString()}`;\n\n const { data } = await axios.get<WithdrawalsPayload>(url);\n const response = normalizeSevenSeasWithdrawRequests(data);\n\n const cancelledRequests = response.cancelled_requests ?? [];\n const expiredRequests = response.expired_requests ?? [];\n const fulfilledRequests = response.fulfilled_requests ?? [];\n const openRequests = response.open_requests ?? [];\n\n const withdrawAssetsAddresses = unique([\n ...cancelledRequests.map(a => ensureHex(a.wantToken)),\n ...expiredRequests.map(a => ensureHex(a.wantToken)),\n ...fulfilledRequests.map(a => ensureHex(a.Request.wantToken)),\n ...openRequests.map(a => ensureHex(a.wantToken)),\n ]);\n\n const withdrawAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> =\n {};\n for (const asset of withdrawAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n withdrawAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n withdrawAssets[asset] = undefined;\n }\n }\n\n const cancelled = cancelledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const expired = expiredRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const fulfilled = fulfilledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.Request.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: fromBaseDenomination(\n w.Fulfillment.wantAmountReceived,\n token?.decimals || 0,\n ),\n blockNumber: w.Request.blockNumber,\n deadline: w.Request.deadline,\n shareAmount: fromBaseDenomination(\n w.Fulfillment.offerAmountSpent,\n vault.decimals,\n ),\n timestamp: w.Request.timestamp,\n txHash: ensureHex(w.Request.transactionHash),\n token,\n fulfilledBlockNumber: w.Fulfillment.blockNumber,\n fulfilledTimestamp: w.Fulfillment.timestamp,\n fulfilledTxHash: ensureHex(w.Fulfillment.transactionHash),\n minPrice: fromBaseDenomination(w.Request.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const open = openRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n minPrice: fromBaseDenomination(w.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n\n const wihdrawals: VaultWithdrawals = {\n cancelled: orderBy(cancelled, a => a.timestamp, 'desc'),\n expired: orderBy(expired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n fulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(open, a => a.timestamp, 'desc'),\n };\n\n return wihdrawals;\n}\n\nexport type GetVaultWithdrawalsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the withdrawals made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all withdrawals regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>} All withdrawals across all supported chains, categorized and sorted\n */\nexport async function getVaultWithdrawalsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultWithdrawalsAllChainsParameters): Promise<VaultWithdrawals> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch withdrawals from all supported chains in parallel\n const withdrawalsPromises = vault.chains.map(chainId =>\n getVaultWithdrawals({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch withdrawals for chain ${chainId}:`, error);\n return {\n cancelled: [],\n expired: [],\n fulfilled: [],\n open: [],\n }; // Return empty withdrawals on error to not break the entire query\n }),\n );\n\n const withdrawalsArrays = await Promise.all(withdrawalsPromises);\n\n // Combine all withdrawals from all chains\n const allCancelled: VaultWithdrawal[] = [];\n const allExpired: VaultWithdrawal[] = [];\n const allFulfilled: VaultWithdrawal[] = [];\n const allOpen: VaultWithdrawal[] = [];\n\n for (const withdrawals of withdrawalsArrays) {\n allCancelled.push(...withdrawals.cancelled);\n allExpired.push(...withdrawals.expired);\n allFulfilled.push(...withdrawals.fulfilled);\n allOpen.push(...withdrawals.open);\n }\n\n // Sort each category by timestamp (newest first)\n return {\n cancelled: orderBy(allCancelled, a => a.timestamp, 'desc'),\n expired: orderBy(allExpired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n allFulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(allOpen, a => a.timestamp, 'desc'),\n };\n}\n"],"names":["EMPTY_WITHDRAW_REQUESTS","normalizeSevenSeasWithdrawRequests","payload","getVaultWithdrawals","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","endpoint","searchParams","url","data","axios","response","cancelledRequests","expiredRequests","fulfilledRequests","openRequests","withdrawAssetsAddresses","unique","ensureHex","a","withdrawAssets","asset","assetInfo","getAssetInfo","cancelled","w","token","fromBaseDenomination","expired","fulfilled","open","orderBy","getVaultWithdrawalsAllChains","withdrawalsPromises","error","withdrawalsArrays","allCancelled","allExpired","allFulfilled","allOpen","withdrawals"],"mappings":"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"}
1
+ {"version":3,"file":"get-vault-withdrawals-QqvpZnxA.cjs","sources":["../../src/vaults/lib/ops/get-vault-withdrawals.ts"],"sourcesContent":["import axios from 'axios';\nimport BigNumber from 'bignumber.js';\nimport { Address, Hash } from 'viem';\n\nimport { getApiConfig } from '../../../common/api-config';\nimport { ChainId } from '../../../common/chains';\nimport { IEnvParam } from '../../../common/parameters';\nimport {\n fromBaseDenomination,\n getAssetInfo,\n TokenInfo,\n} from '../../../tokens/tokens';\nimport { orderBy, unique } from '../../../utils/array';\nimport { ensureHex } from '../../../utils/hex';\nimport {\n isVedaVaultChain,\n Vault,\n VAULTS,\n VEDA_VAULT_CHAIN_TO_NETWORK_MAP,\n VedaVaultChain,\n} from '../config';\n\nexport type GetVaultWithdrawalsParameters = IEnvParam & {\n account: Address;\n chainId: ChainId;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\nexport type VaultWithdrawal = {\n token?: Omit<TokenInfo, 'abi'>;\n /** The amount of shares withdrawn */\n shareAmount: BigNumber;\n /** The amount of funds withdrawn */\n amount?: BigNumber;\n /** The min price of a share */\n minPrice?: BigNumber;\n /** The expiration timestamp */\n deadline: number;\n /** The request timestamp */\n timestamp: number;\n /** The withdraw request transaction hash */\n txHash: Hash;\n /** The request block number */\n blockNumber: number;\n /** The fulfilment timestamp */\n fulfilledTimestamp?: number;\n /** The funds transfer transaction hash */\n fulfilledTxHash?: Hash;\n /** The fulfilment block number */\n fulfilledBlockNumber?: number;\n /** The chain id */\n chainId?: VedaVaultChain;\n /** The user wallet address that made the withdrawal */\n toAddress?: Address;\n};\n\nexport type VaultWithdrawals = {\n cancelled: VaultWithdrawal[];\n expired: VaultWithdrawal[];\n fulfilled: VaultWithdrawal[];\n open: VaultWithdrawal[];\n};\n\ntype WithdrawRequest = {\n amount: number;\n blockNumber: number;\n deadline: number;\n minPrice: number;\n timestamp: number;\n transactionHash: string;\n wantToken: string;\n};\n\ntype FulfilledRequest = {\n // Yup, there's a typo in the response, double L is expected.\n Fulfillment: {\n blockNumber: number;\n offerAmountSpent: number;\n timestamp: number;\n transactionHash: string;\n wantAmountReceived: number;\n wantToken: string;\n };\n Request: WithdrawRequest;\n};\n\ntype SevenSeasWithdrawRequests = {\n cancelled_requests?: WithdrawRequest[];\n expired_requests?: WithdrawRequest[];\n fulfilled_requests?: FulfilledRequest[];\n open_requests?: WithdrawRequest[];\n};\n\ntype WithdrawalsPayload =\n | SevenSeasWithdrawRequests\n | { Response: SevenSeasWithdrawRequests };\n\nconst EMPTY_WITHDRAW_REQUESTS: SevenSeasWithdrawRequests = {\n cancelled_requests: [],\n expired_requests: [],\n fulfilled_requests: [],\n open_requests: [],\n};\n\nconst normalizeSevenSeasWithdrawRequests = (\n payload?: WithdrawalsPayload,\n): SevenSeasWithdrawRequests => {\n if (!payload) {\n return EMPTY_WITHDRAW_REQUESTS;\n }\n\n if ('Response' in payload) {\n return normalizeSevenSeasWithdrawRequests(payload.Response);\n }\n\n return {\n cancelled_requests: payload.cancelled_requests ?? [],\n expired_requests: payload.expired_requests ?? [],\n fulfilled_requests: payload.fulfilled_requests ?? [],\n open_requests: payload.open_requests ?? [],\n };\n};\n\n/**\n * Retrieves the withdrawals made by specified address.\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.chainId - The chain id.\n * @param parameters.vaultKey - The optional vault identifier.\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>}\n */\nexport async function getVaultWithdrawals({\n account,\n chainId,\n vaultKey = Vault.Veda,\n rpcUrl,\n env,\n}: GetVaultWithdrawalsParameters) {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n if (!isVedaVaultChain(chainId)) {\n throw new Error(\n `Unsupported chain id: ${chainId}. Please switch to one of the supported chains: ${vault.chains.join(', ')}`,\n );\n }\n\n const network = VEDA_VAULT_CHAIN_TO_NETWORK_MAP[chainId];\n const { bffApiUrl } = getApiConfig(env);\n if (!bffApiUrl) {\n throw new Error(\n `Could not determine API endpoint for provided environment: ${env}`,\n );\n }\n\n const endpoint = `${bffApiUrl}/sevenseas-api/withdraw-requests/${network}/${vault.vaultContract.address}/${account}`;\n const searchParams = new URLSearchParams({\n historical: 'true',\n });\n const url = `${endpoint}?${searchParams.toString()}`;\n\n const { data } = await axios.get<WithdrawalsPayload>(url);\n const response = normalizeSevenSeasWithdrawRequests(data);\n\n const cancelledRequests = response.cancelled_requests ?? [];\n const expiredRequests = response.expired_requests ?? [];\n const fulfilledRequests = response.fulfilled_requests ?? [];\n const openRequests = response.open_requests ?? [];\n\n const withdrawAssetsAddresses = unique([\n ...cancelledRequests.map(a => ensureHex(a.wantToken)),\n ...expiredRequests.map(a => ensureHex(a.wantToken)),\n ...fulfilledRequests.map(a => ensureHex(a.Request.wantToken)),\n ...openRequests.map(a => ensureHex(a.wantToken)),\n ]);\n\n const withdrawAssets: Record<Address, Omit<TokenInfo, 'abi'> | undefined> =\n {};\n for (const asset of withdrawAssetsAddresses) {\n const assetInfo = await getAssetInfo(asset, chainId, rpcUrl);\n if (assetInfo) {\n withdrawAssets[asset] = {\n address: assetInfo.address,\n decimals: assetInfo.decimals,\n symbol: assetInfo.symbol,\n };\n } else {\n withdrawAssets[asset] = undefined;\n }\n }\n\n const cancelled = cancelledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const expired = expiredRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const fulfilled = fulfilledRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.Request.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: fromBaseDenomination(\n w.Fulfillment.wantAmountReceived,\n token?.decimals || 0,\n ),\n blockNumber: w.Request.blockNumber,\n deadline: w.Request.deadline,\n shareAmount: fromBaseDenomination(\n w.Fulfillment.offerAmountSpent,\n vault.decimals,\n ),\n timestamp: w.Request.timestamp,\n txHash: ensureHex(w.Request.transactionHash),\n token,\n fulfilledBlockNumber: w.Fulfillment.blockNumber,\n fulfilledTimestamp: w.Fulfillment.timestamp,\n fulfilledTxHash: ensureHex(w.Fulfillment.transactionHash),\n minPrice: fromBaseDenomination(w.Request.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n const open = openRequests.map(w => {\n const token = withdrawAssets[ensureHex(w.wantToken)];\n const withdrawal: VaultWithdrawal = {\n amount: undefined,\n blockNumber: w.blockNumber,\n deadline: w.deadline,\n shareAmount: fromBaseDenomination(w.amount, vault.decimals),\n timestamp: w.timestamp,\n txHash: ensureHex(w.transactionHash),\n token,\n minPrice: fromBaseDenomination(w.minPrice, token?.decimals || 0),\n chainId,\n toAddress: account,\n };\n return withdrawal;\n });\n\n const wihdrawals: VaultWithdrawals = {\n cancelled: orderBy(cancelled, a => a.timestamp, 'desc'),\n expired: orderBy(expired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n fulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(open, a => a.timestamp, 'desc'),\n };\n\n return wihdrawals;\n}\n\nexport type GetVaultWithdrawalsAllChainsParameters = {\n account: Address;\n vaultKey?: Vault;\n rpcUrl?: string;\n};\n\n/**\n * Retrieves the withdrawals made by specified address across all supported chains for a vault.\n * This is useful for getting a complete view of all withdrawals regardless of the currently connected chain.\n *\n * @param parameters - The parameters.\n * @param parameters.account - The account address.\n * @param parameters.vaultKey - The optional vault identifier (defaults to Veda).\n * @param parameters.rpcUrl - The optional RPC url.\n *\n * @returns {Promise<VaultWithdrawals>} All withdrawals across all supported chains, categorized and sorted\n */\nexport async function getVaultWithdrawalsAllChains({\n account,\n vaultKey = Vault.Veda,\n rpcUrl,\n}: GetVaultWithdrawalsAllChainsParameters): Promise<VaultWithdrawals> {\n const vault = VAULTS[vaultKey];\n if (!vault) {\n throw new Error(`Unknown vault key: ${vaultKey}`);\n }\n\n // Fetch withdrawals from all supported chains in parallel\n const withdrawalsPromises = vault.chains.map(chainId =>\n getVaultWithdrawals({ account, chainId, vaultKey, rpcUrl }).catch(error => {\n console.error(`Failed to fetch withdrawals for chain ${chainId}:`, error);\n return {\n cancelled: [],\n expired: [],\n fulfilled: [],\n open: [],\n }; // Return empty withdrawals on error to not break the entire query\n }),\n );\n\n const withdrawalsArrays = await Promise.all(withdrawalsPromises);\n\n // Combine all withdrawals from all chains\n const allCancelled: VaultWithdrawal[] = [];\n const allExpired: VaultWithdrawal[] = [];\n const allFulfilled: VaultWithdrawal[] = [];\n const allOpen: VaultWithdrawal[] = [];\n\n for (const withdrawals of withdrawalsArrays) {\n allCancelled.push(...withdrawals.cancelled);\n allExpired.push(...withdrawals.expired);\n allFulfilled.push(...withdrawals.fulfilled);\n allOpen.push(...withdrawals.open);\n }\n\n // Sort each category by timestamp (newest first)\n return {\n cancelled: orderBy(allCancelled, a => a.timestamp, 'desc'),\n expired: orderBy(allExpired, a => a.timestamp, 'desc'),\n fulfilled: orderBy(\n allFulfilled,\n a => a.fulfilledTimestamp || a.timestamp,\n 'desc',\n ),\n open: orderBy(allOpen, a => a.timestamp, 'desc'),\n };\n}\n"],"names":["EMPTY_WITHDRAW_REQUESTS","normalizeSevenSeasWithdrawRequests","payload","getVaultWithdrawals","account","chainId","vaultKey","Vault","rpcUrl","env","vault","VAULTS","isVedaVaultChain","network","VEDA_VAULT_CHAIN_TO_NETWORK_MAP","bffApiUrl","getApiConfig","endpoint","searchParams","url","data","axios","response","cancelledRequests","expiredRequests","fulfilledRequests","openRequests","withdrawAssetsAddresses","unique","ensureHex","a","withdrawAssets","asset","assetInfo","getAssetInfo","cancelled","w","token","fromBaseDenomination","expired","fulfilled","open","orderBy","getVaultWithdrawalsAllChains","withdrawalsPromises","error","withdrawalsArrays","allCancelled","allExpired","allFulfilled","allOpen","withdrawals"],"mappings":"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"}
@@ -2,11 +2,11 @@ var Fe = Object.defineProperty;
2
2
  var je = (n, e, t) => e in n ? Fe(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
3
  var I = (n, e, t) => je(n, typeof e != "symbol" ? e + "" : e, t);
4
4
  import { r as _ } from "./index-CfcQ_g3t.js";
5
- import { AssetId as U } from "./defi-registry-DxjjBQTV.js";
5
+ import { AssetId as U } from "./defi-registry-ig-wro_O.js";
6
6
  import { isValidChain as He, isSolanaChain as ze, SOLANA_TESTNET_CHAIN as We, SOLANA_DEVNET_CHAIN as qe, SOLANA_MAINNET_CHAIN as Ge, isSuiChain as Ke, STARKNET_SEPOLIA_CHAIN as Ye, STARKNET_MAINNET_CHAIN as Je } from "./token-addresses-D0v5cR1j.js";
7
7
  import * as me from "bitcoinjs-lib";
8
8
  import { MIN_STAKE_AMOUNT_BTC as Xe } from "./constants-D1FnS2Z8.js";
9
- const Qe = "4.5.1", nn = "@lombard.finance/sdk", sn = typeof window < "u" && typeof window.document < "u" ? "browser" : typeof process < "u" && process.versions && process.versions.node ? "node" : "unknown";
9
+ const Qe = "4.6.0", nn = "@lombard.finance/sdk", sn = typeof window < "u" && typeof window.document < "u" ? "browser" : typeof process < "u" && process.versions && process.versions.node ? "node" : "unknown";
10
10
  var et = /* @__PURE__ */ ((n) => (n.UNKNOWN_ERROR = "unknown-error", n.INVALID_CONFIGURATION = "invalid-configuration", n.OPERATION_TIMEOUT = "operation-timeout", n.OPERATION_CANCELLED = "operation-cancelled", n))(et || {}), tt = /* @__PURE__ */ ((n) => (n.PROVIDER_MISSING = "provider-missing", n.PROVIDER_INITIALIZATION_FAILED = "provider-initialization-failed", n.PROVIDER_CALL_FAILED = "provider-call-failed", n.SIGNER_MISSING = "signer-missing", n.USER_REJECTED = "user-rejected", n.NETWORK_MISMATCH = "network-mismatch", n))(tt || {}), nt = /* @__PURE__ */ ((n) => (n.ROUTE_NOT_FOUND = "route-not-found", n.INVALID_ROUTE_DEFINITION = "invalid-route-definition", n.UNSUPPORTED_CHAIN = "unsupported-chain", n.UNSUPPORTED_ASSET = "unsupported-asset", n.INCOMPATIBLE_ROUTE = "incompatible-route", n.ENVIRONMENT_MISMATCH = "environment-mismatch", n))(nt || {}), Z = /* @__PURE__ */ ((n) => (n.INVALID_ADDRESS = "invalid-address", n.INVALID_AMOUNT = "invalid-amount", n.AMOUNT_TOO_SMALL = "amount-too-small", n.AMOUNT_TOO_LARGE = "amount-too-large", n.INSUFFICIENT_BALANCE = "insufficient-balance", n.INVALID_PARAMETER = "invalid-parameter", n.MISSING_REQUIRED_PARAMETER = "missing-required-parameter", n.INVALID_CHAIN = "invalid-chain", n.INVALID_STATE = "invalid-state", n.INVALID_ASSET = "invalid-asset", n))(Z || {}), st = /* @__PURE__ */ ((n) => (n.CONTRACT_CALL_FAILED = "contract-call-failed", n.TRANSACTION_FAILED = "transaction-failed", n.TRANSACTION_REVERTED = "transaction-reverted", n.APPROVAL_FAILED = "approval-failed", n.INSUFFICIENT_ALLOWANCE = "insufficient-allowance", n.GAS_ESTIMATION_FAILED = "gas-estimation-failed", n))(st || {}), rt = /* @__PURE__ */ ((n) => (n.INSUFFICIENT_SHARES = "withdraw-insufficient-shares", n.INVALID_AMOUNT = "withdraw-invalid-amount", n.NO_PENDING_WITHDRAWAL = "withdraw-no-pending", n.WITHDRAWAL_ALREADY_FULFILLED = "withdraw-already-fulfilled", n.WITHDRAWAL_EXPIRED = "withdraw-expired", n.WITHDRAWAL_NOT_FOUND = "withdraw-not-found", n.PROTOCOL_NOT_SUPPORTED = "withdraw-protocol-not-supported", n.INSUFFICIENT_LIQUIDITY = "withdraw-insufficient-liquidity", n))(rt || {});
11
11
  class E extends Error {
12
12
  constructor(t, s, r) {
@@ -4455,4 +4455,4 @@ export {
4455
4455
  $n as validatePrepareParams,
4456
4456
  pe as wrapError
4457
4457
  };
4458
- //# sourceMappingURL=statusConstants-qfM-LJfE.js.map
4458
+ //# sourceMappingURL=statusConstants-BU4PglPs.js.map