@oydual31/more-vaults-sdk 0.4.2 → 0.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 (38) hide show
  1. package/README.md +94 -0
  2. package/dist/{spokeRoutes-B8Lnk-t4.d.cts → curatorBridge-CNs59kT9.d.cts} +222 -1
  3. package/dist/{spokeRoutes-B8Lnk-t4.d.ts → curatorBridge-CNs59kT9.d.ts} +222 -1
  4. package/dist/ethers/index.cjs +328 -3
  5. package/dist/ethers/index.cjs.map +1 -1
  6. package/dist/ethers/index.d.cts +279 -1
  7. package/dist/ethers/index.d.ts +279 -1
  8. package/dist/ethers/index.js +318 -5
  9. package/dist/ethers/index.js.map +1 -1
  10. package/dist/react/index.cjs +375 -0
  11. package/dist/react/index.cjs.map +1 -1
  12. package/dist/react/index.d.cts +266 -2
  13. package/dist/react/index.d.ts +266 -2
  14. package/dist/react/index.js +372 -2
  15. package/dist/react/index.js.map +1 -1
  16. package/dist/viem/index.cjs +377 -0
  17. package/dist/viem/index.cjs.map +1 -1
  18. package/dist/viem/index.d.cts +261 -3
  19. package/dist/viem/index.d.ts +261 -3
  20. package/dist/viem/index.js +367 -2
  21. package/dist/viem/index.js.map +1 -1
  22. package/package.json +1 -1
  23. package/src/ethers/abis.ts +24 -0
  24. package/src/ethers/curatorBridge.ts +235 -0
  25. package/src/ethers/curatorSubVaults.ts +443 -0
  26. package/src/ethers/index.ts +26 -0
  27. package/src/ethers/types.ts +99 -0
  28. package/src/react/index.ts +14 -0
  29. package/src/react/useCuratorBridgeQuote.ts +43 -0
  30. package/src/react/useERC7540RequestStatus.ts +43 -0
  31. package/src/react/useExecuteBridge.ts +50 -0
  32. package/src/react/useSubVaultPositions.ts +35 -0
  33. package/src/react/useVaultPortfolio.ts +35 -0
  34. package/src/viem/abis.ts +24 -0
  35. package/src/viem/curatorBridge.ts +288 -0
  36. package/src/viem/curatorSubVaults.ts +514 -0
  37. package/src/viem/index.ts +23 -0
  38. package/src/viem/types.ts +100 -0
@@ -1128,6 +1128,23 @@ var REGISTRY_ABI = [
1128
1128
  { type: "function", name: "isBridgeAllowed", inputs: [{ name: "bridge", type: "address" }], outputs: [{ type: "bool" }], stateMutability: "view" },
1129
1129
  { type: "function", name: "getAllowedFacets", inputs: [], outputs: [{ type: "address[]" }], stateMutability: "view" }
1130
1130
  ];
1131
+ var SUB_VAULT_ABI = [
1132
+ // ConfigurationFacet reads — called on the MoreVaults diamond proxy
1133
+ { type: "function", name: "tokensHeld", inputs: [{ name: "id", type: "bytes32" }], outputs: [{ name: "", type: "address[]" }], stateMutability: "view" },
1134
+ { type: "function", name: "lockedTokensAmountOfAsset", inputs: [{ name: "asset", type: "address" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1135
+ // ERC4626 standard reads — called on the sub-vault contract
1136
+ { type: "function", name: "convertToAssets", inputs: [{ name: "shares", type: "uint256" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1137
+ { type: "function", name: "convertToShares", inputs: [{ name: "assets", type: "uint256" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1138
+ { type: "function", name: "previewDeposit", inputs: [{ name: "assets", type: "uint256" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1139
+ { type: "function", name: "previewRedeem", inputs: [{ name: "shares", type: "uint256" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1140
+ { type: "function", name: "maxDeposit", inputs: [{ name: "receiver", type: "address" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1141
+ { type: "function", name: "maxRedeem", inputs: [{ name: "owner", type: "address" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1142
+ // ERC7540 async reads — called on the sub-vault contract
1143
+ { type: "function", name: "pendingDepositRequest", inputs: [{ name: "requestId", type: "uint256" }, { name: "controller", type: "address" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1144
+ { type: "function", name: "claimableDepositRequest", inputs: [{ name: "requestId", type: "uint256" }, { name: "controller", type: "address" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1145
+ { type: "function", name: "pendingRedeemRequest", inputs: [{ name: "requestId", type: "uint256" }, { name: "controller", type: "address" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" },
1146
+ { type: "function", name: "claimableRedeemRequest", inputs: [{ name: "requestId", type: "uint256" }, { name: "controller", type: "address" }], outputs: [{ name: "", type: "uint256" }], stateMutability: "view" }
1147
+ ];
1131
1148
  var LZ_ENDPOINT_ABI = [
1132
1149
  {
1133
1150
  type: "function",
@@ -3947,6 +3964,354 @@ function buildUniswapV3Swap(params) {
3947
3964
  }
3948
3965
  };
3949
3966
  }
3967
+ function encodeBridgeParams(params) {
3968
+ return viem.encodeAbiParameters(
3969
+ [
3970
+ { type: "address" },
3971
+ { type: "uint32" },
3972
+ { type: "uint256" },
3973
+ { type: "address" },
3974
+ { type: "address" }
3975
+ ],
3976
+ [
3977
+ viem.getAddress(params.oftToken),
3978
+ params.dstEid,
3979
+ params.amount,
3980
+ viem.getAddress(params.dstVault),
3981
+ viem.getAddress(params.refundAddress)
3982
+ ]
3983
+ );
3984
+ }
3985
+ function encodeBridgeParamsForQuote(params) {
3986
+ return viem.encodeAbiParameters(
3987
+ [
3988
+ { type: "address" },
3989
+ { type: "uint32" },
3990
+ { type: "uint256" },
3991
+ { type: "address" }
3992
+ ],
3993
+ [
3994
+ viem.getAddress(params.oftToken),
3995
+ params.dstEid,
3996
+ params.amount,
3997
+ viem.getAddress(params.dstVault)
3998
+ ]
3999
+ );
4000
+ }
4001
+ function findBridgeRoute(srcChainId, dstChainId, tokenAddress) {
4002
+ const normalizedToken = viem.getAddress(tokenAddress);
4003
+ for (const [symbol, chains] of Object.entries(OFT_ROUTES)) {
4004
+ const srcEntry = chains[srcChainId];
4005
+ const dstEntry = chains[dstChainId];
4006
+ if (!srcEntry || !dstEntry) continue;
4007
+ const srcToken = viem.getAddress(srcEntry.token);
4008
+ const srcOft = viem.getAddress(srcEntry.oft);
4009
+ if (srcToken === normalizedToken || srcOft === normalizedToken) {
4010
+ return {
4011
+ oftSrc: srcOft,
4012
+ oftDst: viem.getAddress(dstEntry.oft),
4013
+ symbol
4014
+ };
4015
+ }
4016
+ }
4017
+ return null;
4018
+ }
4019
+ async function quoteCuratorBridgeFee(publicClient, vault, params) {
4020
+ const status = await getCuratorVaultStatus(publicClient, vault);
4021
+ const lzAdapter = status.lzAdapter;
4022
+ const bridgeSpecificParams = encodeBridgeParamsForQuote(params);
4023
+ const nativeFee = await publicClient.readContract({
4024
+ address: lzAdapter,
4025
+ abi: LZ_ADAPTER_ABI,
4026
+ functionName: "quoteBridgeFee",
4027
+ args: [bridgeSpecificParams]
4028
+ });
4029
+ return nativeFee;
4030
+ }
4031
+ async function executeCuratorBridge(walletClient, publicClient, vault, token, params) {
4032
+ const account = walletClient.account;
4033
+ const v = viem.getAddress(vault);
4034
+ const status = await getCuratorVaultStatus(publicClient, vault);
4035
+ const lzAdapter = status.lzAdapter;
4036
+ const fee = await quoteCuratorBridgeFee(publicClient, vault, params);
4037
+ const bridgeSpecificParams = encodeBridgeParams(params);
4038
+ const txHash = await walletClient.writeContract({
4039
+ address: v,
4040
+ abi: BRIDGE_FACET_ABI,
4041
+ functionName: "executeBridging",
4042
+ args: [
4043
+ lzAdapter,
4044
+ viem.getAddress(token),
4045
+ params.amount,
4046
+ bridgeSpecificParams
4047
+ ],
4048
+ value: fee,
4049
+ account,
4050
+ chain: walletClient.chain
4051
+ });
4052
+ return txHash;
4053
+ }
4054
+ var ERC4626_ID = viem.keccak256(viem.toHex("ERC4626_ID"));
4055
+ var ERC7540_ID = viem.keccak256(viem.toHex("ERC7540_ID"));
4056
+ async function getSubVaultPositions(publicClient, vault) {
4057
+ const v = viem.getAddress(vault);
4058
+ const [erc4626Raw, erc7540Raw] = await Promise.all([
4059
+ publicClient.readContract({
4060
+ address: v,
4061
+ abi: SUB_VAULT_ABI,
4062
+ functionName: "tokensHeld",
4063
+ args: [ERC4626_ID]
4064
+ }).catch(() => []),
4065
+ publicClient.readContract({
4066
+ address: v,
4067
+ abi: SUB_VAULT_ABI,
4068
+ functionName: "tokensHeld",
4069
+ args: [ERC7540_ID]
4070
+ }).catch(() => [])
4071
+ ]);
4072
+ const erc4626Vaults = erc4626Raw.map(viem.getAddress);
4073
+ const erc7540Vaults = erc7540Raw.map(viem.getAddress);
4074
+ const allSubVaults = [
4075
+ ...erc4626Vaults.map((a) => ({ address: a, type: "erc4626" })),
4076
+ ...erc7540Vaults.map((a) => ({ address: a, type: "erc7540" }))
4077
+ ];
4078
+ if (allSubVaults.length === 0) return [];
4079
+ const PER_SV = 5;
4080
+ const subVaultCalls = allSubVaults.flatMap(({ address: sv }) => [
4081
+ { address: sv, abi: ERC20_ABI, functionName: "balanceOf", args: [v] },
4082
+ { address: sv, abi: VAULT_ABI, functionName: "asset" },
4083
+ { address: sv, abi: METADATA_ABI, functionName: "name" },
4084
+ { address: sv, abi: METADATA_ABI, functionName: "symbol" },
4085
+ { address: sv, abi: METADATA_ABI, functionName: "decimals" }
4086
+ ]);
4087
+ const subVaultResults = await publicClient.multicall({
4088
+ contracts: subVaultCalls,
4089
+ allowFailure: true
4090
+ });
4091
+ const partials = allSubVaults.map(({ address: sv, type }, i) => {
4092
+ const base = i * PER_SV;
4093
+ const sharesBalance = subVaultResults[base]?.status === "success" ? subVaultResults[base].result : 0n;
4094
+ const underlyingAsset = subVaultResults[base + 1]?.status === "success" ? viem.getAddress(subVaultResults[base + 1].result) : viem.zeroAddress;
4095
+ const name = subVaultResults[base + 2]?.status === "success" ? subVaultResults[base + 2].result : "";
4096
+ const symbol = subVaultResults[base + 3]?.status === "success" ? subVaultResults[base + 3].result : "";
4097
+ const decimals = subVaultResults[base + 4]?.status === "success" ? subVaultResults[base + 4].result : 18;
4098
+ return { address: sv, type, sharesBalance, underlyingAsset, name, symbol, decimals };
4099
+ });
4100
+ const active = partials.filter((p) => p.sharesBalance > 0n);
4101
+ if (active.length === 0) return [];
4102
+ const PER_ACTIVE = 4;
4103
+ const activeCalls = active.flatMap(({ address: sv, sharesBalance, underlyingAsset }) => [
4104
+ { address: sv, abi: SUB_VAULT_ABI, functionName: "convertToAssets", args: [sharesBalance] },
4105
+ { address: underlyingAsset, abi: METADATA_ABI, functionName: "name" },
4106
+ { address: underlyingAsset, abi: METADATA_ABI, functionName: "symbol" },
4107
+ { address: underlyingAsset, abi: METADATA_ABI, functionName: "decimals" }
4108
+ ]);
4109
+ const activeResults = await publicClient.multicall({
4110
+ contracts: activeCalls,
4111
+ allowFailure: true
4112
+ });
4113
+ return active.map((p, i) => {
4114
+ const base = i * PER_ACTIVE;
4115
+ const underlyingValue = activeResults[base]?.status === "success" ? activeResults[base].result : 0n;
4116
+ const underlyingSymbol = activeResults[base + 2]?.status === "success" ? activeResults[base + 2].result : "";
4117
+ const underlyingDecimals = activeResults[base + 3]?.status === "success" ? activeResults[base + 3].result : 18;
4118
+ return {
4119
+ address: p.address,
4120
+ type: p.type,
4121
+ name: p.name,
4122
+ symbol: p.symbol,
4123
+ decimals: p.decimals,
4124
+ sharesBalance: p.sharesBalance,
4125
+ underlyingValue,
4126
+ underlyingAsset: p.underlyingAsset,
4127
+ underlyingSymbol,
4128
+ underlyingDecimals
4129
+ };
4130
+ });
4131
+ }
4132
+ async function detectSubVaultType(publicClient, subVault) {
4133
+ const sv = viem.getAddress(subVault);
4134
+ const [erc7540Result, erc4626Result] = await publicClient.multicall({
4135
+ contracts: [
4136
+ {
4137
+ address: sv,
4138
+ abi: SUB_VAULT_ABI,
4139
+ functionName: "pendingDepositRequest",
4140
+ args: [0n, viem.zeroAddress]
4141
+ },
4142
+ {
4143
+ address: sv,
4144
+ abi: SUB_VAULT_ABI,
4145
+ functionName: "convertToAssets",
4146
+ args: [0n]
4147
+ }
4148
+ ],
4149
+ allowFailure: true
4150
+ });
4151
+ if (erc7540Result?.status === "success") return "erc7540";
4152
+ if (erc4626Result?.status === "success") return "erc4626";
4153
+ return null;
4154
+ }
4155
+ async function getSubVaultInfo(publicClient, vault, subVault) {
4156
+ const v = viem.getAddress(vault);
4157
+ const sv = viem.getAddress(subVault);
4158
+ const [type, basicResults] = await Promise.all([
4159
+ detectSubVaultType(publicClient, sv),
4160
+ publicClient.multicall({
4161
+ contracts: [
4162
+ { address: sv, abi: METADATA_ABI, functionName: "name" },
4163
+ { address: sv, abi: METADATA_ABI, functionName: "symbol" },
4164
+ { address: sv, abi: METADATA_ABI, functionName: "decimals" },
4165
+ { address: sv, abi: VAULT_ABI, functionName: "asset" },
4166
+ { address: sv, abi: SUB_VAULT_ABI, functionName: "maxDeposit", args: [v] }
4167
+ ],
4168
+ allowFailure: true
4169
+ })
4170
+ ]);
4171
+ const name = basicResults[0]?.status === "success" ? basicResults[0].result : "";
4172
+ const symbol = basicResults[1]?.status === "success" ? basicResults[1].result : "";
4173
+ const decimals = basicResults[2]?.status === "success" ? basicResults[2].result : 18;
4174
+ const underlying = basicResults[3]?.status === "success" ? viem.getAddress(basicResults[3].result) : viem.zeroAddress;
4175
+ const maxDeposit = basicResults[4]?.status === "success" ? basicResults[4].result : 0n;
4176
+ const [underlyingResults, registryRaw] = await Promise.all([
4177
+ publicClient.multicall({
4178
+ contracts: [
4179
+ { address: underlying, abi: METADATA_ABI, functionName: "name" },
4180
+ { address: underlying, abi: METADATA_ABI, functionName: "symbol" },
4181
+ { address: underlying, abi: METADATA_ABI, functionName: "decimals" }
4182
+ ],
4183
+ allowFailure: true
4184
+ }),
4185
+ publicClient.readContract({ address: v, abi: VAULT_ANALYSIS_ABI, functionName: "moreVaultsRegistry" }).catch(() => null)
4186
+ ]);
4187
+ const underlyingSymbol = underlyingResults[1]?.status === "success" ? underlyingResults[1].result : "";
4188
+ const underlyingDecimals = underlyingResults[2]?.status === "success" ? underlyingResults[2].result : 18;
4189
+ let isWhitelisted = false;
4190
+ if (registryRaw) {
4191
+ const registry = viem.getAddress(registryRaw);
4192
+ const whitelistResult = await publicClient.readContract({
4193
+ address: registry,
4194
+ abi: REGISTRY_ABI,
4195
+ functionName: "isWhitelisted",
4196
+ args: [sv]
4197
+ }).catch(() => false);
4198
+ isWhitelisted = whitelistResult;
4199
+ }
4200
+ return {
4201
+ address: sv,
4202
+ type: type ?? "erc4626",
4203
+ name,
4204
+ symbol,
4205
+ decimals,
4206
+ underlyingAsset: underlying,
4207
+ underlyingSymbol,
4208
+ underlyingDecimals,
4209
+ maxDeposit,
4210
+ isWhitelisted
4211
+ };
4212
+ }
4213
+ async function getERC7540RequestStatus(publicClient, vault, subVault) {
4214
+ const v = viem.getAddress(vault);
4215
+ const sv = viem.getAddress(subVault);
4216
+ const results = await publicClient.multicall({
4217
+ contracts: [
4218
+ { address: sv, abi: SUB_VAULT_ABI, functionName: "pendingDepositRequest", args: [0n, v] },
4219
+ { address: sv, abi: SUB_VAULT_ABI, functionName: "claimableDepositRequest", args: [0n, v] },
4220
+ { address: sv, abi: SUB_VAULT_ABI, functionName: "pendingRedeemRequest", args: [0n, v] },
4221
+ { address: sv, abi: SUB_VAULT_ABI, functionName: "claimableRedeemRequest", args: [0n, v] }
4222
+ ],
4223
+ allowFailure: true
4224
+ });
4225
+ const pendingDeposit = results[0]?.status === "success" ? results[0].result : 0n;
4226
+ const claimableDeposit = results[1]?.status === "success" ? results[1].result : 0n;
4227
+ const pendingRedeem = results[2]?.status === "success" ? results[2].result : 0n;
4228
+ const claimableRedeem = results[3]?.status === "success" ? results[3].result : 0n;
4229
+ return {
4230
+ subVault: sv,
4231
+ pendingDeposit,
4232
+ claimableDeposit,
4233
+ pendingRedeem,
4234
+ claimableRedeem,
4235
+ canFinalizeDeposit: claimableDeposit > 0n,
4236
+ canFinalizeRedeem: claimableRedeem > 0n
4237
+ };
4238
+ }
4239
+ async function previewSubVaultDeposit(publicClient, subVault, assets) {
4240
+ const result = await publicClient.readContract({
4241
+ address: viem.getAddress(subVault),
4242
+ abi: SUB_VAULT_ABI,
4243
+ functionName: "previewDeposit",
4244
+ args: [assets]
4245
+ });
4246
+ return result;
4247
+ }
4248
+ async function previewSubVaultRedeem(publicClient, subVault, shares) {
4249
+ const result = await publicClient.readContract({
4250
+ address: viem.getAddress(subVault),
4251
+ abi: SUB_VAULT_ABI,
4252
+ functionName: "previewRedeem",
4253
+ args: [shares]
4254
+ });
4255
+ return result;
4256
+ }
4257
+ async function getVaultPortfolio(publicClient, vault) {
4258
+ const v = viem.getAddress(vault);
4259
+ const [availableRaw, subVaultPositions, vaultTotals] = await Promise.all([
4260
+ publicClient.readContract({ address: v, abi: VAULT_ANALYSIS_ABI, functionName: "getAvailableAssets" }).catch(() => []),
4261
+ getSubVaultPositions(publicClient, v),
4262
+ publicClient.multicall({
4263
+ contracts: [
4264
+ { address: v, abi: VAULT_ABI, functionName: "totalAssets" },
4265
+ { address: v, abi: VAULT_ABI, functionName: "totalSupply" },
4266
+ { address: v, abi: VAULT_ABI, functionName: "asset" }
4267
+ ],
4268
+ allowFailure: true
4269
+ })
4270
+ ]);
4271
+ const totalAssets = vaultTotals[0]?.status === "success" ? vaultTotals[0].result : 0n;
4272
+ const totalSupply = vaultTotals[1]?.status === "success" ? vaultTotals[1].result : 0n;
4273
+ const underlyingAsset = vaultTotals[2]?.status === "success" ? viem.getAddress(vaultTotals[2].result) : viem.zeroAddress;
4274
+ const availableAddresses = availableRaw.map(viem.getAddress);
4275
+ const subVaultAddressSet = new Set(subVaultPositions.map((p) => p.address.toLowerCase()));
4276
+ const liquidAddresses = availableAddresses.filter(
4277
+ (addr) => !subVaultAddressSet.has(addr.toLowerCase())
4278
+ );
4279
+ const PER_ASSET = 4;
4280
+ const liquidCalls = liquidAddresses.flatMap((addr) => [
4281
+ { address: addr, abi: ERC20_ABI, functionName: "balanceOf", args: [v] },
4282
+ { address: addr, abi: METADATA_ABI, functionName: "name" },
4283
+ { address: addr, abi: METADATA_ABI, functionName: "symbol" },
4284
+ { address: addr, abi: METADATA_ABI, functionName: "decimals" }
4285
+ ]);
4286
+ const liquidResults = liquidAddresses.length > 0 ? await publicClient.multicall({ contracts: liquidCalls, allowFailure: true }) : [];
4287
+ const liquidAssets = liquidAddresses.map((addr, i) => {
4288
+ const base = i * PER_ASSET;
4289
+ const balance = liquidResults[base]?.status === "success" ? liquidResults[base].result : 0n;
4290
+ const name = liquidResults[base + 1]?.status === "success" ? liquidResults[base + 1].result : "";
4291
+ const symbol = liquidResults[base + 2]?.status === "success" ? liquidResults[base + 2].result : "";
4292
+ const decimals = liquidResults[base + 3]?.status === "success" ? liquidResults[base + 3].result : 18;
4293
+ return { address: addr, name, symbol, decimals, balance };
4294
+ });
4295
+ const lockedAssets = await publicClient.readContract({
4296
+ address: v,
4297
+ abi: SUB_VAULT_ABI,
4298
+ functionName: "lockedTokensAmountOfAsset",
4299
+ args: [underlyingAsset]
4300
+ }).catch(() => 0n);
4301
+ const subVaultTotal = subVaultPositions.reduce((sum, p) => sum + p.underlyingValue, 0n);
4302
+ const underlyingBalance = liquidAssets.find(
4303
+ (a) => a.address.toLowerCase() === underlyingAsset.toLowerCase()
4304
+ )?.balance ?? 0n;
4305
+ const totalValue = underlyingBalance + subVaultTotal;
4306
+ return {
4307
+ liquidAssets,
4308
+ subVaultPositions,
4309
+ totalValue,
4310
+ totalAssets,
4311
+ totalSupply,
4312
+ lockedAssets
4313
+ };
4314
+ }
3950
4315
 
3951
4316
  // src/viem/wagmiCompat.ts
3952
4317
  function asSdkClient(client) {
@@ -3986,6 +4351,7 @@ exports.OFT_ROUTES = OFT_ROUTES;
3986
4351
  exports.OMNI_FACTORY_ADDRESS = OMNI_FACTORY_ADDRESS;
3987
4352
  exports.REGISTRY_ABI = REGISTRY_ABI;
3988
4353
  exports.STARGATE_TAXI_CMD = STARGATE_TAXI_CMD;
4354
+ exports.SUB_VAULT_ABI = SUB_VAULT_ABI;
3989
4355
  exports.UNISWAP_V3_ROUTERS = UNISWAP_V3_ROUTERS;
3990
4356
  exports.USDC_STARGATE_OFT = USDC_STARGATE_OFT;
3991
4357
  exports.USDC_TOKEN = USDC_TOKEN;
@@ -4007,21 +4373,28 @@ exports.depositFromSpokeAsync = depositFromSpoke;
4007
4373
  exports.depositMultiAsset = depositMultiAsset;
4008
4374
  exports.depositSimple = depositSimple;
4009
4375
  exports.detectStargateOft = detectStargateOft;
4376
+ exports.detectSubVaultType = detectSubVaultType;
4010
4377
  exports.discoverVaultTopology = discoverVaultTopology;
4378
+ exports.encodeBridgeParams = encodeBridgeParams;
4011
4379
  exports.encodeCuratorAction = encodeCuratorAction;
4012
4380
  exports.encodeUniswapV3SwapCalldata = encodeUniswapV3SwapCalldata;
4013
4381
  exports.ensureAllowance = ensureAllowance;
4014
4382
  exports.executeActions = executeActions;
4015
4383
  exports.executeCompose = executeCompose;
4384
+ exports.executeCuratorBridge = executeCuratorBridge;
4385
+ exports.findBridgeRoute = findBridgeRoute;
4016
4386
  exports.getAllVaultChainIds = getAllVaultChainIds;
4017
4387
  exports.getAsyncRequestStatus = getAsyncRequestStatus;
4018
4388
  exports.getAsyncRequestStatusLabel = getAsyncRequestStatusLabel;
4019
4389
  exports.getCuratorVaultStatus = getCuratorVaultStatus;
4390
+ exports.getERC7540RequestStatus = getERC7540RequestStatus;
4020
4391
  exports.getFullVaultTopology = getFullVaultTopology;
4021
4392
  exports.getInboundRoutes = getInboundRoutes;
4022
4393
  exports.getMaxWithdrawable = getMaxWithdrawable;
4023
4394
  exports.getOutboundRoutes = getOutboundRoutes;
4024
4395
  exports.getPendingActions = getPendingActions;
4396
+ exports.getSubVaultInfo = getSubVaultInfo;
4397
+ exports.getSubVaultPositions = getSubVaultPositions;
4025
4398
  exports.getUserBalances = getUserBalances;
4026
4399
  exports.getUserBalancesForRoutes = getUserBalancesForRoutes;
4027
4400
  exports.getUserPosition = getUserPosition;
@@ -4031,6 +4404,7 @@ exports.getVaultAssetBreakdown = getVaultAssetBreakdown;
4031
4404
  exports.getVaultDistribution = getVaultDistribution;
4032
4405
  exports.getVaultDistributionWithTopology = getVaultDistributionWithTopology;
4033
4406
  exports.getVaultMetadata = getVaultMetadata;
4407
+ exports.getVaultPortfolio = getVaultPortfolio;
4034
4408
  exports.getVaultStatus = getVaultStatus;
4035
4409
  exports.getVaultSummary = getVaultSummary;
4036
4410
  exports.getVaultTopology = getVaultTopology;
@@ -4046,7 +4420,10 @@ exports.preflightSpokeRedeem = preflightSpokeRedeem;
4046
4420
  exports.preflightSync = preflightSync;
4047
4421
  exports.previewDeposit = previewDeposit;
4048
4422
  exports.previewRedeem = previewRedeem;
4423
+ exports.previewSubVaultDeposit = previewSubVaultDeposit;
4424
+ exports.previewSubVaultRedeem = previewSubVaultRedeem;
4049
4425
  exports.quoteComposeFee = quoteComposeFee;
4426
+ exports.quoteCuratorBridgeFee = quoteCuratorBridgeFee;
4050
4427
  exports.quoteDepositFromSpokeFee = quoteDepositFromSpokeFee;
4051
4428
  exports.quoteLzFee = quoteLzFee;
4052
4429
  exports.quoteRouteDepositFee = quoteRouteDepositFee;