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