augustdigital-sdk 8.20.1

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 (316) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +349 -0
  3. package/lib/abis/AddressResolver.d.ts +28 -0
  4. package/lib/abis/AddressResolver.js +23 -0
  5. package/lib/abis/ChainlinkV3.d.ts +87 -0
  6. package/lib/abis/ChainlinkV3.js +117 -0
  7. package/lib/abis/ERC20.d.ts +168 -0
  8. package/lib/abis/ERC20.js +226 -0
  9. package/lib/abis/ERC20_Bytes32.d.ts +139 -0
  10. package/lib/abis/ERC20_Bytes32.js +196 -0
  11. package/lib/abis/ERC4626.d.ts +364 -0
  12. package/lib/abis/ERC4626.js +507 -0
  13. package/lib/abis/ERC721.d.ts +231 -0
  14. package/lib/abis/ERC721.js +321 -0
  15. package/lib/abis/FeeOracle.d.ts +120 -0
  16. package/lib/abis/FeeOracle.js +162 -0
  17. package/lib/abis/LendingPool.d.ts +1393 -0
  18. package/lib/abis/LendingPool.js +1807 -0
  19. package/lib/abis/LendingPoolV2.d.ts +1413 -0
  20. package/lib/abis/LendingPoolV2.js +1833 -0
  21. package/lib/abis/LendingPoolV3.d.ts +1677 -0
  22. package/lib/abis/LendingPoolV3.js +1160 -0
  23. package/lib/abis/Loan.d.ts +837 -0
  24. package/lib/abis/Loan.js +1080 -0
  25. package/lib/abis/MultiAssetNativeDepositWrapper.d.ts +137 -0
  26. package/lib/abis/MultiAssetNativeDepositWrapper.js +125 -0
  27. package/lib/abis/Multicall3.d.ts +30 -0
  28. package/lib/abis/Multicall3.js +97 -0
  29. package/lib/abis/OFT.d.ts +116 -0
  30. package/lib/abis/OFT.js +85 -0
  31. package/lib/abis/PoolAdapter.d.ts +36 -0
  32. package/lib/abis/PoolAdapter.js +51 -0
  33. package/lib/abis/RewardDistributor.d.ts +267 -0
  34. package/lib/abis/RewardDistributor.js +352 -0
  35. package/lib/abis/RwaRedeemSubaccount.d.ts +747 -0
  36. package/lib/abis/RwaRedeemSubaccount.js +548 -0
  37. package/lib/abis/SmartAccount.d.ts +17 -0
  38. package/lib/abis/SmartAccount.js +19 -0
  39. package/lib/abis/SwapRouter.d.ts +1043 -0
  40. package/lib/abis/SwapRouter.js +740 -0
  41. package/lib/abis/TextResolver.d.ts +16 -0
  42. package/lib/abis/TextResolver.js +16 -0
  43. package/lib/abis/TokenizedVaultV2.d.ts +1364 -0
  44. package/lib/abis/TokenizedVaultV2.js +1041 -0
  45. package/lib/abis/TokenizedVaultV2DepositWithPermit.d.ts +1456 -0
  46. package/lib/abis/TokenizedVaultV2DepositWithPermit.js +1878 -0
  47. package/lib/abis/TokenizedVaultV2Receipt.d.ts +1568 -0
  48. package/lib/abis/TokenizedVaultV2Receipt.js +1061 -0
  49. package/lib/abis/TokenizedVaultV2SenderAllocationWhitelist.d.ts +454 -0
  50. package/lib/abis/TokenizedVaultV2SenderAllocationWhitelist.js +327 -0
  51. package/lib/abis/TokenizedVaultV2WhitelistedAllocation.d.ts +1466 -0
  52. package/lib/abis/TokenizedVaultV2WhitelistedAllocation.js +1092 -0
  53. package/lib/abis/TokenizedVaultV2WhitelistedAssets.d.ts +274 -0
  54. package/lib/abis/TokenizedVaultV2WhitelistedAssets.js +167 -0
  55. package/lib/abis/UniversalResolverResolve.d.ts +69 -0
  56. package/lib/abis/UniversalResolverResolve.js +35 -0
  57. package/lib/abis/UniversalSignatureValidator.d.ts +17 -0
  58. package/lib/abis/UniversalSignatureValidator.js +30 -0
  59. package/lib/abis/WrapperAdapter.d.ts +71 -0
  60. package/lib/abis/WrapperAdapter.js +77 -0
  61. package/lib/abis/index.d.ts +34 -0
  62. package/lib/abis/index.js +51 -0
  63. package/lib/adapters/evm/getters.d.ts +19 -0
  64. package/lib/adapters/evm/getters.js +209 -0
  65. package/lib/adapters/evm/index.d.ts +353 -0
  66. package/lib/adapters/evm/index.js +434 -0
  67. package/lib/adapters/evm/utils.d.ts +8 -0
  68. package/lib/adapters/evm/utils.js +51 -0
  69. package/lib/adapters/solana/constants.d.ts +33 -0
  70. package/lib/adapters/solana/constants.js +52 -0
  71. package/lib/adapters/solana/getters.d.ts +11 -0
  72. package/lib/adapters/solana/getters.js +165 -0
  73. package/lib/adapters/solana/idl/vault-idl.d.ts +272 -0
  74. package/lib/adapters/solana/idl/vault-idl.js +1084 -0
  75. package/lib/adapters/solana/index.d.ts +233 -0
  76. package/lib/adapters/solana/index.js +291 -0
  77. package/lib/adapters/solana/types.d.ts +67 -0
  78. package/lib/adapters/solana/types.js +3 -0
  79. package/lib/adapters/solana/utils.d.ts +141 -0
  80. package/lib/adapters/solana/utils.js +595 -0
  81. package/lib/adapters/solana/vault.actions.d.ts +57 -0
  82. package/lib/adapters/solana/vault.actions.js +379 -0
  83. package/lib/adapters/stellar/actions.d.ts +28 -0
  84. package/lib/adapters/stellar/actions.js +77 -0
  85. package/lib/adapters/stellar/constants.d.ts +43 -0
  86. package/lib/adapters/stellar/constants.js +53 -0
  87. package/lib/adapters/stellar/getters.d.ts +68 -0
  88. package/lib/adapters/stellar/getters.js +290 -0
  89. package/lib/adapters/stellar/index.d.ts +114 -0
  90. package/lib/adapters/stellar/index.js +175 -0
  91. package/lib/adapters/stellar/soroban.d.ts +123 -0
  92. package/lib/adapters/stellar/soroban.js +613 -0
  93. package/lib/adapters/stellar/submit.d.ts +34 -0
  94. package/lib/adapters/stellar/submit.js +149 -0
  95. package/lib/adapters/stellar/types.d.ts +58 -0
  96. package/lib/adapters/stellar/types.js +6 -0
  97. package/lib/adapters/stellar/utils.d.ts +24 -0
  98. package/lib/adapters/stellar/utils.js +34 -0
  99. package/lib/adapters/sui/constants.d.ts +14 -0
  100. package/lib/adapters/sui/constants.js +29 -0
  101. package/lib/adapters/sui/getters.d.ts +9 -0
  102. package/lib/adapters/sui/getters.js +60 -0
  103. package/lib/adapters/sui/index.d.ts +45 -0
  104. package/lib/adapters/sui/index.js +101 -0
  105. package/lib/adapters/sui/transformer.d.ts +10 -0
  106. package/lib/adapters/sui/transformer.js +107 -0
  107. package/lib/adapters/sui/types.d.ts +66 -0
  108. package/lib/adapters/sui/types.js +3 -0
  109. package/lib/adapters/sui/utils.d.ts +10 -0
  110. package/lib/adapters/sui/utils.js +29 -0
  111. package/lib/core/analytics/chain-name.d.ts +9 -0
  112. package/lib/core/analytics/chain-name.js +34 -0
  113. package/lib/core/analytics/constants.d.ts +5 -0
  114. package/lib/core/analytics/constants.js +9 -0
  115. package/lib/core/analytics/env.d.ts +29 -0
  116. package/lib/core/analytics/env.js +59 -0
  117. package/lib/core/analytics/index.d.ts +36 -0
  118. package/lib/core/analytics/index.js +79 -0
  119. package/lib/core/analytics/instrumentation.d.ts +29 -0
  120. package/lib/core/analytics/instrumentation.js +277 -0
  121. package/lib/core/analytics/method-taxonomy.d.ts +19 -0
  122. package/lib/core/analytics/method-taxonomy.js +128 -0
  123. package/lib/core/analytics/metrics.d.ts +33 -0
  124. package/lib/core/analytics/metrics.js +116 -0
  125. package/lib/core/analytics/sanitize.d.ts +44 -0
  126. package/lib/core/analytics/sanitize.js +260 -0
  127. package/lib/core/analytics/sentry-runtime.d.ts +15 -0
  128. package/lib/core/analytics/sentry-runtime.js +97 -0
  129. package/lib/core/analytics/sentry.d.ts +67 -0
  130. package/lib/core/analytics/sentry.js +613 -0
  131. package/lib/core/analytics/types.d.ts +48 -0
  132. package/lib/core/analytics/types.js +3 -0
  133. package/lib/core/analytics/user-identity.d.ts +41 -0
  134. package/lib/core/analytics/user-identity.js +141 -0
  135. package/lib/core/analytics/version.d.ts +6 -0
  136. package/lib/core/analytics/version.js +10 -0
  137. package/lib/core/attribution.d.ts +111 -0
  138. package/lib/core/attribution.js +142 -0
  139. package/lib/core/auth/index.d.ts +1 -0
  140. package/lib/core/auth/index.js +18 -0
  141. package/lib/core/auth/verify.d.ts +2 -0
  142. package/lib/core/auth/verify.js +31 -0
  143. package/lib/core/base.class.d.ts +152 -0
  144. package/lib/core/base.class.js +172 -0
  145. package/lib/core/cache.d.ts +9 -0
  146. package/lib/core/cache.js +31 -0
  147. package/lib/core/constants/adapters.d.ts +103 -0
  148. package/lib/core/constants/adapters.js +180 -0
  149. package/lib/core/constants/core.d.ts +133 -0
  150. package/lib/core/constants/core.js +209 -0
  151. package/lib/core/constants/swap-router.d.ts +150 -0
  152. package/lib/core/constants/swap-router.js +169 -0
  153. package/lib/core/constants/vaults.d.ts +93 -0
  154. package/lib/core/constants/vaults.js +273 -0
  155. package/lib/core/constants/web3.d.ts +91 -0
  156. package/lib/core/constants/web3.js +229 -0
  157. package/lib/core/errors/index.d.ts +114 -0
  158. package/lib/core/errors/index.js +183 -0
  159. package/lib/core/fetcher.d.ts +198 -0
  160. package/lib/core/fetcher.js +903 -0
  161. package/lib/core/helpers/adapters.d.ts +13 -0
  162. package/lib/core/helpers/adapters.js +39 -0
  163. package/lib/core/helpers/chain-address.d.ts +13 -0
  164. package/lib/core/helpers/chain-address.js +47 -0
  165. package/lib/core/helpers/chain-error.d.ts +207 -0
  166. package/lib/core/helpers/chain-error.js +682 -0
  167. package/lib/core/helpers/chain-support.d.ts +80 -0
  168. package/lib/core/helpers/chain-support.js +115 -0
  169. package/lib/core/helpers/core.d.ts +68 -0
  170. package/lib/core/helpers/core.js +285 -0
  171. package/lib/core/helpers/explorer-link.d.ts +16 -0
  172. package/lib/core/helpers/explorer-link.js +26 -0
  173. package/lib/core/helpers/multicall.d.ts +68 -0
  174. package/lib/core/helpers/multicall.js +103 -0
  175. package/lib/core/helpers/revert-decode.d.ts +248 -0
  176. package/lib/core/helpers/revert-decode.js +515 -0
  177. package/lib/core/helpers/signer.d.ts +52 -0
  178. package/lib/core/helpers/signer.js +145 -0
  179. package/lib/core/helpers/swap-router.d.ts +211 -0
  180. package/lib/core/helpers/swap-router.js +480 -0
  181. package/lib/core/helpers/vault-version.d.ts +23 -0
  182. package/lib/core/helpers/vault-version.js +75 -0
  183. package/lib/core/helpers/vaults.d.ts +89 -0
  184. package/lib/core/helpers/vaults.js +235 -0
  185. package/lib/core/helpers/web3.d.ts +353 -0
  186. package/lib/core/helpers/web3.js +992 -0
  187. package/lib/core/index.d.ts +23 -0
  188. package/lib/core/index.js +40 -0
  189. package/lib/core/logger/index.d.ts +98 -0
  190. package/lib/core/logger/index.js +144 -0
  191. package/lib/core/logger/slack.d.ts +16 -0
  192. package/lib/core/logger/slack.js +57 -0
  193. package/lib/core/vault-metadata.d.ts +12 -0
  194. package/lib/core/vault-metadata.js +42 -0
  195. package/lib/core/version-check.d.ts +58 -0
  196. package/lib/core/version-check.js +182 -0
  197. package/lib/evm/index.d.ts +2 -0
  198. package/lib/evm/index.js +19 -0
  199. package/lib/evm/methods/crossChainVault.d.ts +128 -0
  200. package/lib/evm/methods/crossChainVault.js +853 -0
  201. package/lib/evm/methods/crossChainVaultRegistry.d.ts +93 -0
  202. package/lib/evm/methods/crossChainVaultRegistry.js +240 -0
  203. package/lib/evm/methods/index.d.ts +2 -0
  204. package/lib/evm/methods/index.js +19 -0
  205. package/lib/evm/types/crossChain.d.ts +363 -0
  206. package/lib/evm/types/crossChain.js +20 -0
  207. package/lib/evm/types/index.d.ts +1 -0
  208. package/lib/evm/types/index.js +18 -0
  209. package/lib/index.d.ts +30 -0
  210. package/lib/index.js +52 -0
  211. package/lib/main.d.ts +527 -0
  212. package/lib/main.js +601 -0
  213. package/lib/modules/api/fetcher.d.ts +82 -0
  214. package/lib/modules/api/fetcher.js +150 -0
  215. package/lib/modules/api/index.d.ts +1 -0
  216. package/lib/modules/api/index.js +6 -0
  217. package/lib/modules/api/main.d.ts +313 -0
  218. package/lib/modules/api/main.js +479 -0
  219. package/lib/modules/sub-accounts/fetcher.d.ts +53 -0
  220. package/lib/modules/sub-accounts/fetcher.js +120 -0
  221. package/lib/modules/sub-accounts/index.d.ts +2 -0
  222. package/lib/modules/sub-accounts/index.js +19 -0
  223. package/lib/modules/sub-accounts/main.d.ts +243 -0
  224. package/lib/modules/sub-accounts/main.js +205 -0
  225. package/lib/modules/sub-accounts/utils.d.ts +106 -0
  226. package/lib/modules/sub-accounts/utils.js +112 -0
  227. package/lib/modules/vaults/adapter.helpers.d.ts +64 -0
  228. package/lib/modules/vaults/adapter.helpers.js +184 -0
  229. package/lib/modules/vaults/fetcher.d.ts +147 -0
  230. package/lib/modules/vaults/fetcher.js +368 -0
  231. package/lib/modules/vaults/getters.d.ts +570 -0
  232. package/lib/modules/vaults/getters.js +3051 -0
  233. package/lib/modules/vaults/index.d.ts +20 -0
  234. package/lib/modules/vaults/index.js +44 -0
  235. package/lib/modules/vaults/main.d.ts +601 -0
  236. package/lib/modules/vaults/main.js +1623 -0
  237. package/lib/modules/vaults/prefetch.d.ts +65 -0
  238. package/lib/modules/vaults/prefetch.js +120 -0
  239. package/lib/modules/vaults/read.actions.d.ts +225 -0
  240. package/lib/modules/vaults/read.actions.js +596 -0
  241. package/lib/modules/vaults/types.d.ts +71 -0
  242. package/lib/modules/vaults/types.js +3 -0
  243. package/lib/modules/vaults/utils/call-data-decoder.d.ts +61 -0
  244. package/lib/modules/vaults/utils/call-data-decoder.js +194 -0
  245. package/lib/modules/vaults/utils/date-utils.d.ts +50 -0
  246. package/lib/modules/vaults/utils/date-utils.js +84 -0
  247. package/lib/modules/vaults/utils.d.ts +140 -0
  248. package/lib/modules/vaults/utils.js +799 -0
  249. package/lib/modules/vaults/write.actions.d.ts +529 -0
  250. package/lib/modules/vaults/write.actions.js +1749 -0
  251. package/lib/polyfills.d.ts +1 -0
  252. package/lib/polyfills.js +12 -0
  253. package/lib/sdk.d.ts +26721 -0
  254. package/lib/services/coingecko/fetcher.d.ts +15 -0
  255. package/lib/services/coingecko/fetcher.js +67 -0
  256. package/lib/services/coingecko/index.d.ts +2 -0
  257. package/lib/services/coingecko/index.js +19 -0
  258. package/lib/services/coingecko/utils.d.ts +1 -0
  259. package/lib/services/coingecko/utils.js +24 -0
  260. package/lib/services/debank/fetcher.d.ts +126 -0
  261. package/lib/services/debank/fetcher.js +47 -0
  262. package/lib/services/debank/index.d.ts +2 -0
  263. package/lib/services/debank/index.js +19 -0
  264. package/lib/services/debank/utils.d.ts +38 -0
  265. package/lib/services/debank/utils.js +297 -0
  266. package/lib/services/layerzero/deposits.d.ts +49 -0
  267. package/lib/services/layerzero/deposits.js +166 -0
  268. package/lib/services/layerzero/redeems.d.ts +20 -0
  269. package/lib/services/layerzero/redeems.js +92 -0
  270. package/lib/services/layerzero/utils.d.ts +9 -0
  271. package/lib/services/layerzero/utils.js +22 -0
  272. package/lib/services/octavfi/fetcher.d.ts +9 -0
  273. package/lib/services/octavfi/fetcher.js +103 -0
  274. package/lib/services/octavfi/index.d.ts +3 -0
  275. package/lib/services/octavfi/index.js +20 -0
  276. package/lib/services/octavfi/types.d.ts +34 -0
  277. package/lib/services/octavfi/types.js +3 -0
  278. package/lib/services/octavfi/utils.d.ts +16 -0
  279. package/lib/services/octavfi/utils.js +212 -0
  280. package/lib/services/subgraph/fetcher.d.ts +2 -0
  281. package/lib/services/subgraph/fetcher.js +61 -0
  282. package/lib/services/subgraph/index.d.ts +2 -0
  283. package/lib/services/subgraph/index.js +19 -0
  284. package/lib/services/subgraph/schema.d.ts +45 -0
  285. package/lib/services/subgraph/schema.js +75 -0
  286. package/lib/services/subgraph/vaults.d.ts +25 -0
  287. package/lib/services/subgraph/vaults.js +1106 -0
  288. package/lib/services/swap-quotes/index.d.ts +105 -0
  289. package/lib/services/swap-quotes/index.js +77 -0
  290. package/lib/services/swap-quotes/paraswap.d.ts +51 -0
  291. package/lib/services/swap-quotes/paraswap.js +138 -0
  292. package/lib/types/api.d.ts +280 -0
  293. package/lib/types/api.js +3 -0
  294. package/lib/types/index.d.ts +12 -0
  295. package/lib/types/index.js +28 -0
  296. package/lib/types/points.d.ts +28 -0
  297. package/lib/types/points.js +3 -0
  298. package/lib/types/pools.d.ts +144 -0
  299. package/lib/types/pools.js +3 -0
  300. package/lib/types/staking.d.ts +28 -0
  301. package/lib/types/staking.js +3 -0
  302. package/lib/types/sub-accounts.d.ts +140 -0
  303. package/lib/types/sub-accounts.js +3 -0
  304. package/lib/types/subgraph.d.ts +74 -0
  305. package/lib/types/subgraph.js +3 -0
  306. package/lib/types/typed-contract.d.ts +102 -0
  307. package/lib/types/typed-contract.js +3 -0
  308. package/lib/types/user.d.ts +1 -0
  309. package/lib/types/user.js +3 -0
  310. package/lib/types/vaults.d.ts +714 -0
  311. package/lib/types/vaults.js +24 -0
  312. package/lib/types/web3.d.ts +51 -0
  313. package/lib/types/web3.js +14 -0
  314. package/lib/types/webserver.d.ts +698 -0
  315. package/lib/types/webserver.js +3 -0
  316. package/package.json +78 -0
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchVaultMetadata = void 0;
4
+ exports.fetchArchivedVaults = fetchArchivedVaults;
5
+ exports.isArchivedVault = isArchivedVault;
6
+ exports.fetchVaultWithFallback = fetchVaultWithFallback;
7
+ exports.fetchVaultsBatch = fetchVaultsBatch;
8
+ exports.fetchVaultsComprehensive = fetchVaultsComprehensive;
9
+ exports.filterVaultsIntelligently = filterVaultsIntelligently;
10
+ const core_1 = require("../../core");
11
+ const ARCHIVED_VAULTS_CACHE_KEY = 'archived_vaults';
12
+ const ARCHIVED_VAULTS_TTL_MS = 10 * 60 * 1000;
13
+ /**
14
+ * Fetch the set of vaults whose deposit/withdraw history is served from the
15
+ * backend Mongo snapshot (`/upshift/vault_history`) rather than their (retired)
16
+ * Goldsky subgraph.
17
+ *
18
+ * This is the routing source of truth: a vault appears here only once its
19
+ * history has been backfilled, so the SDK can never reroute a vault to empty
20
+ * snapshot data ahead of its backfill. Result is cached for 10 minutes.
21
+ *
22
+ * Side effects: one HTTP GET to the public API (cached).
23
+ *
24
+ * @returns A set of lowercased vault addresses. Empty on any error — callers
25
+ * then fall back to the subgraph path, which is the safe default while
26
+ * subgraphs still exist.
27
+ */
28
+ async function fetchArchivedVaults() {
29
+ const cached = core_1.CACHE.get(ARCHIVED_VAULTS_CACHE_KEY);
30
+ if (cached)
31
+ return cached;
32
+ try {
33
+ const response = await (0, core_1.fetchAugustPublic)(core_1.WEBSERVER_ENDPOINTS.public.tokenizedVault.archivedVaults);
34
+ if (response.status !== 200) {
35
+ core_1.Logger.log.error('fetchArchivedVaults', `non-200 from archived endpoint: ${response.status}`);
36
+ return new Set();
37
+ }
38
+ const addresses = (await response.json());
39
+ const set = new Set(addresses.map((a) => a.toLowerCase()));
40
+ core_1.CACHE.set(ARCHIVED_VAULTS_CACHE_KEY, set, { ttl: ARCHIVED_VAULTS_TTL_MS });
41
+ return set;
42
+ }
43
+ catch (e) {
44
+ core_1.Logger.log.error('fetchArchivedVaults', e);
45
+ return new Set();
46
+ }
47
+ }
48
+ /**
49
+ * Whether a vault's history should be served from the backend snapshot rather
50
+ * than its subgraph. Backed by {@link fetchArchivedVaults} (cached).
51
+ *
52
+ * @param vaultAddress - The vault contract address (any casing).
53
+ * @returns `true` if the vault has a backfilled history snapshot.
54
+ */
55
+ async function isArchivedVault(vaultAddress) {
56
+ const archived = await fetchArchivedVaults();
57
+ return archived.has(vaultAddress.toLowerCase());
58
+ }
59
+ /** @internal */
60
+ async function runWithConcurrency(tasks, limit) {
61
+ if (!Number.isFinite(limit) || limit <= 0) {
62
+ throw new Error(`runWithConcurrency: limit must be a positive finite number, got ${limit}`);
63
+ }
64
+ const results = new Array(tasks.length);
65
+ let nextIndex = 0;
66
+ const workerCount = Math.min(Math.floor(limit), tasks.length);
67
+ // `nextIndex++` is safe across workers — JS is single-threaded and the
68
+ // increment runs to completion before any worker yields at `await`.
69
+ const workers = Array.from({ length: workerCount }, async () => {
70
+ while (true) {
71
+ const i = nextIndex++;
72
+ if (i >= tasks.length)
73
+ return;
74
+ results[i] = await tasks[i]();
75
+ }
76
+ });
77
+ await Promise.all(workers);
78
+ return results;
79
+ }
80
+ /**
81
+ * Specialized vault fetching with enhanced retry logic and fallback strategies
82
+ * This function attempts to fetch vault data with multiple fallback approaches
83
+ *
84
+ * The return shape is "success flag wins": when `success === true`, `data` is
85
+ * the resolved value (which may legitimately be falsy — `0`, `''`, `0n`,
86
+ * `null`); when `success === false`, `error` is populated. Callers must branch
87
+ * on `success`, not on the truthiness of `data`.
88
+ */
89
+ async function fetchVaultWithFallback(vaultAddress, fetchFn, options = {}) {
90
+ const { maxRetries = 3, baseDelay = 1000 } = options;
91
+ try {
92
+ const data = await (0, core_1.withRetry)(fetchFn, maxRetries * 2, baseDelay * 2);
93
+ return { success: true, data, strategy: 'extended-retry' };
94
+ }
95
+ catch (error) {
96
+ core_1.Logger.log.warn('fetchVaultWithFallback:extended_retry_failed', {
97
+ vault: vaultAddress,
98
+ error,
99
+ });
100
+ }
101
+ return {
102
+ success: false,
103
+ error: new Error(`All strategies failed for vault ${vaultAddress}`),
104
+ strategy: 'all-failed',
105
+ };
106
+ }
107
+ /**
108
+ * Batch vault fetching with intelligent retry and fallback
109
+ * Ensures maximum vault coverage by trying multiple strategies
110
+ */
111
+ async function fetchVaultsBatch(vaults, options = {}) {
112
+ const { maxRetries = 3, baseDelay = 1000, batchSize = 10, parallelLimit = batchSize, } = options;
113
+ const successful = [];
114
+ const failed = [];
115
+ let totalAttempted = 0;
116
+ for (let i = 0; i < vaults.length; i += batchSize) {
117
+ const batch = vaults.slice(i, i + batchSize);
118
+ const batchTasks = batch.map((vault, batchIndex) => async () => {
119
+ const globalIndex = i + batchIndex;
120
+ totalAttempted++;
121
+ try {
122
+ const result = await fetchVaultWithFallback(vault.address, vault.fetchFn, {
123
+ maxRetries,
124
+ baseDelay,
125
+ });
126
+ // Branch on `result.success` only — not on truthiness of `result.data`.
127
+ // A successful fetch can legitimately resolve to a falsy value
128
+ // (`0`, `''`, `0n`, `null`); the cast respects the function's
129
+ // documented contract that `data` is present on the success branch.
130
+ if (result.success) {
131
+ successful.push({
132
+ index: globalIndex,
133
+ data: result.data,
134
+ strategy: result.strategy,
135
+ });
136
+ }
137
+ else {
138
+ failed.push({
139
+ index: globalIndex,
140
+ error: result.error ?? new Error('Unknown failure'),
141
+ address: vault.address,
142
+ });
143
+ }
144
+ }
145
+ catch (error) {
146
+ failed.push({
147
+ index: globalIndex,
148
+ error: error,
149
+ address: vault.address,
150
+ });
151
+ }
152
+ });
153
+ await runWithConcurrency(batchTasks, parallelLimit);
154
+ // Small delay between batches to be respectful to RPC endpoints
155
+ if (i + batchSize < vaults.length) {
156
+ await new Promise((resolve) => setTimeout(resolve, 100));
157
+ }
158
+ }
159
+ const successRate = totalAttempted > 0 ? (successful.length / totalAttempted) * 100 : 0;
160
+ return {
161
+ successful,
162
+ failed,
163
+ totalAttempted,
164
+ successRate,
165
+ };
166
+ }
167
+ /**
168
+ * Comprehensive vault fetching that handles all failure points
169
+ * This function ensures maximum vault coverage by implementing multiple strategies
170
+ */
171
+ async function fetchVaultsComprehensive(vaults, fetchFn, options = {}) {
172
+ const { maxRetries = 5, baseDelay = 2000, batchSize = 10, parallelLimit = batchSize, includeClosed: _includeClosed = false, // Reserved for future filtering
173
+ includeInvisible: _includeInvisible = false, // Reserved for future filtering
174
+ fallbackRpcUrls = {}, timeout = 60000, } = options;
175
+ const successful = [];
176
+ const failed = [];
177
+ const rpcFailures = {};
178
+ let totalAttempted = 0;
179
+ for (let i = 0; i < vaults.length; i += batchSize) {
180
+ const batch = vaults.slice(i, i + batchSize);
181
+ const batchTasks = batch.map((vault, batchIndex) => async () => {
182
+ const globalIndex = i + batchIndex;
183
+ totalAttempted++;
184
+ let attempts = 0;
185
+ let lastError;
186
+ // Strategy 1: Primary fetch with retry
187
+ for (attempts = 1; attempts <= maxRetries; attempts++) {
188
+ try {
189
+ const data = await Promise.race([
190
+ fetchFn(vault),
191
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Primary fetch timeout')), timeout)),
192
+ ]);
193
+ successful.push({
194
+ index: globalIndex,
195
+ data,
196
+ strategy: 'primary-retry',
197
+ attempts,
198
+ });
199
+ return;
200
+ }
201
+ catch (error) {
202
+ lastError = error;
203
+ if (attempts < maxRetries) {
204
+ const delay = baseDelay * 2 ** (attempts - 1);
205
+ core_1.Logger.log.warn('fetchVaultsComprehensive', `Vault ${vault.address} attempt ${attempts} failed, retrying in ${delay}ms: ${error.message}`);
206
+ await new Promise((resolve) => setTimeout(resolve, delay));
207
+ }
208
+ }
209
+ }
210
+ // Strategy 2: Try with fallback RPC endpoints
211
+ if (fallbackRpcUrls[vault.chain] &&
212
+ fallbackRpcUrls[vault.chain].length > 0) {
213
+ for (const fallbackRpc of fallbackRpcUrls[vault.chain]) {
214
+ try {
215
+ const data = await Promise.race([
216
+ fetchFn({ ...vault, fallbackRpc }),
217
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Fallback RPC timeout')), timeout)),
218
+ ]);
219
+ successful.push({
220
+ index: globalIndex,
221
+ data,
222
+ strategy: 'fallback-rpc',
223
+ attempts: attempts + 1,
224
+ });
225
+ return;
226
+ }
227
+ catch (error) {
228
+ core_1.Logger.log.warn('fetchVault:fallback_rpc_failed', {
229
+ vault: vault.address,
230
+ fallbackRpc,
231
+ error: error instanceof Error ? error.message : String(error),
232
+ });
233
+ }
234
+ }
235
+ }
236
+ // Strategy 3: Try with minimal data fetching (if fetchFn supports it)
237
+ try {
238
+ const data = await Promise.race([
239
+ fetchFn({ ...vault, minimal: true }),
240
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Minimal fetch timeout')), timeout)),
241
+ ]);
242
+ successful.push({
243
+ index: globalIndex,
244
+ data,
245
+ strategy: 'minimal-data',
246
+ attempts: attempts + 1,
247
+ });
248
+ return;
249
+ }
250
+ catch (error) {
251
+ core_1.Logger.log.warn('fetchVault:minimal_data_failed', {
252
+ vault: vault.address,
253
+ error: error instanceof Error ? error.message : String(error),
254
+ });
255
+ }
256
+ // Strategy 4: Extended retry with longer delays
257
+ try {
258
+ const extendedDelay = baseDelay * 3;
259
+ await new Promise((resolve) => setTimeout(resolve, extendedDelay));
260
+ const data = await Promise.race([
261
+ fetchFn(vault),
262
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Extended retry timeout')), timeout)),
263
+ ]);
264
+ successful.push({
265
+ index: globalIndex,
266
+ data,
267
+ strategy: 'extended-retry',
268
+ attempts: attempts + 2,
269
+ });
270
+ return;
271
+ }
272
+ catch (error) {
273
+ core_1.Logger.log.warn('fetchVault:extended_retry_failed', {
274
+ vault: vault.address,
275
+ error: error instanceof Error ? error.message : String(error),
276
+ });
277
+ }
278
+ // All strategies failed
279
+ failed.push({
280
+ index: globalIndex,
281
+ error: lastError || new Error('All strategies failed'),
282
+ address: vault.address,
283
+ chain: vault.chain,
284
+ attempts: attempts + 2,
285
+ });
286
+ // Track RPC failures by chain
287
+ rpcFailures[vault.chain] = (rpcFailures[vault.chain] || 0) + 1;
288
+ });
289
+ await runWithConcurrency(batchTasks, parallelLimit);
290
+ // Small delay between batches to be respectful to RPC endpoints
291
+ if (i + batchSize < vaults.length) {
292
+ await new Promise((resolve) => setTimeout(resolve, 200));
293
+ }
294
+ }
295
+ const successRate = totalAttempted > 0 ? (successful.length / totalAttempted) * 100 : 0;
296
+ return {
297
+ successful,
298
+ failed,
299
+ totalAttempted,
300
+ successRate,
301
+ coverageReport: {
302
+ totalVaults: vaults.length,
303
+ successfulVaults: successful.length,
304
+ failedVaults: failed.length,
305
+ closedVaults: 0, // Will be calculated by the calling code
306
+ invisibleVaults: 0, // Will be calculated by the calling code
307
+ rpcFailures,
308
+ },
309
+ };
310
+ }
311
+ /**
312
+ * Enhanced vault filtering that preserves more vaults while maintaining quality
313
+ */
314
+ function filterVaultsIntelligently(vaults, options = {}) {
315
+ const { includeClosed = true, includeInvisible = true, includeNull = false, minStatus = ['active', 'closed'], } = options;
316
+ const active = [];
317
+ const closed = [];
318
+ const invisible = [];
319
+ const failed = [];
320
+ vaults.forEach((vault, index) => {
321
+ if (!vault) {
322
+ if (includeNull) {
323
+ failed.push({ index, reason: 'null_response' });
324
+ }
325
+ return;
326
+ }
327
+ const status = vault.status || 'unknown';
328
+ const isVisible = vault.isVisible ?? vault.is_visible ?? true;
329
+ if (status === 'active' && isVisible) {
330
+ active.push(vault);
331
+ }
332
+ else if (status === 'closed' && includeClosed) {
333
+ closed.push(vault);
334
+ }
335
+ else if (!isVisible && includeInvisible) {
336
+ invisible.push(vault);
337
+ }
338
+ else if (minStatus.includes(status)) {
339
+ active.push(vault);
340
+ }
341
+ else {
342
+ failed.push({
343
+ index,
344
+ reason: `status_${status}_invisible_${!isVisible}`,
345
+ });
346
+ }
347
+ });
348
+ const total = vaults.length;
349
+ const successCount = active.length + closed.length + invisible.length;
350
+ const successRate = total > 0 ? (successCount / total) * 100 : 0;
351
+ return {
352
+ active,
353
+ closed,
354
+ invisible,
355
+ failed,
356
+ summary: {
357
+ total,
358
+ active: active.length,
359
+ closed: closed.length,
360
+ invisible: invisible.length,
361
+ failed: failed.length,
362
+ successRate,
363
+ },
364
+ };
365
+ }
366
+ var vault_metadata_1 = require("../../core/vault-metadata");
367
+ Object.defineProperty(exports, "fetchVaultMetadata", { enumerable: true, get: function () { return vault_metadata_1.fetchVaultMetadata; } });
368
+ //# sourceMappingURL=fetcher.js.map