@gauntlet-xyz/sdk 2.3.0 → 3.0.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 (353) hide show
  1. package/README.md +135 -0
  2. package/dist/api/activity.d.ts +1 -1
  3. package/dist/api/activity.d.ts.map +1 -1
  4. package/dist/api/caip.d.ts +1 -1
  5. package/dist/api/caip.d.ts.map +1 -1
  6. package/dist/api/client.d.ts +65 -6
  7. package/dist/api/client.d.ts.map +1 -1
  8. package/dist/api/errors.d.ts +1 -1
  9. package/dist/api/errors.d.ts.map +1 -1
  10. package/dist/api/generated.d.ts +621 -14
  11. package/dist/api/generated.d.ts.map +1 -1
  12. package/dist/api/index.d.ts +13 -13
  13. package/dist/api/index.d.ts.map +1 -1
  14. package/dist/api/index.js +48 -8
  15. package/dist/api/index.js.map +7 -1
  16. package/dist/api/positionHistory.d.ts +1 -1
  17. package/dist/api/positionHistory.d.ts.map +1 -1
  18. package/dist/attribution/index.d.ts +3 -3
  19. package/dist/attribution/index.d.ts.map +1 -1
  20. package/dist/chunk-7TA2OJUK.js +4364 -0
  21. package/dist/chunk-7TA2OJUK.js.map +7 -0
  22. package/dist/chunk-HC2BS7MK.js +439 -0
  23. package/dist/chunk-HC2BS7MK.js.map +7 -0
  24. package/dist/chunk-S2TTA45N.js +2009 -0
  25. package/dist/chunk-S2TTA45N.js.map +7 -0
  26. package/dist/chunk-STIV2CC4.js +57 -0
  27. package/dist/chunk-STIV2CC4.js.map +7 -0
  28. package/dist/chunk-SU6JAKIA.js +283 -0
  29. package/dist/chunk-SU6JAKIA.js.map +7 -0
  30. package/dist/cjs/api/activity.d.ts +70 -0
  31. package/dist/cjs/api/activity.d.ts.map +1 -0
  32. package/dist/cjs/api/activity.js +136 -0
  33. package/dist/cjs/api/activity.js.map +7 -0
  34. package/dist/cjs/api/caip.d.ts +29 -0
  35. package/dist/cjs/api/caip.d.ts.map +1 -0
  36. package/dist/cjs/api/caip.js +59 -0
  37. package/dist/cjs/api/caip.js.map +7 -0
  38. package/dist/cjs/api/client.d.ts +173 -0
  39. package/dist/cjs/api/client.d.ts.map +1 -0
  40. package/dist/cjs/api/client.js +171 -0
  41. package/dist/cjs/api/client.js.map +7 -0
  42. package/dist/cjs/api/decimal.d.ts +21 -0
  43. package/dist/cjs/api/decimal.d.ts.map +1 -0
  44. package/dist/cjs/api/decimal.js +60 -0
  45. package/dist/cjs/api/decimal.js.map +7 -0
  46. package/dist/cjs/api/errors.d.ts +32 -0
  47. package/dist/cjs/api/errors.d.ts.map +1 -0
  48. package/dist/cjs/api/errors.js +80 -0
  49. package/dist/cjs/api/errors.js.map +7 -0
  50. package/dist/cjs/api/generated.d.ts +2068 -0
  51. package/dist/cjs/api/generated.d.ts.map +1 -0
  52. package/dist/cjs/api/generated.js +17 -0
  53. package/dist/cjs/api/generated.js.map +7 -0
  54. package/dist/cjs/api/http.d.ts +16 -0
  55. package/dist/cjs/api/http.d.ts.map +1 -0
  56. package/dist/cjs/api/http.js +64 -0
  57. package/dist/cjs/api/http.js.map +7 -0
  58. package/dist/cjs/api/index.d.ts +14 -0
  59. package/dist/cjs/api/index.d.ts.map +1 -0
  60. package/dist/cjs/api/index.js +73 -0
  61. package/dist/cjs/api/index.js.map +7 -0
  62. package/dist/cjs/api/positionHistory.d.ts +44 -0
  63. package/dist/cjs/api/positionHistory.d.ts.map +1 -0
  64. package/dist/cjs/api/positionHistory.js +131 -0
  65. package/dist/cjs/api/positionHistory.js.map +7 -0
  66. package/dist/cjs/attribution/erc8021.d.ts +9 -0
  67. package/dist/cjs/attribution/erc8021.d.ts.map +1 -0
  68. package/dist/cjs/attribution/erc8021.js +37 -0
  69. package/dist/cjs/attribution/erc8021.js.map +7 -0
  70. package/dist/cjs/attribution/index.d.ts +25 -0
  71. package/dist/cjs/attribution/index.d.ts.map +1 -0
  72. package/dist/cjs/attribution/index.js +68 -0
  73. package/dist/cjs/attribution/index.js.map +7 -0
  74. package/dist/cjs/client.d.ts +72 -0
  75. package/dist/cjs/client.d.ts.map +1 -0
  76. package/dist/cjs/client.js +80 -0
  77. package/dist/cjs/client.js.map +7 -0
  78. package/dist/cjs/constants.d.ts +16 -0
  79. package/dist/cjs/constants.d.ts.map +1 -0
  80. package/dist/cjs/constants.js +83 -0
  81. package/dist/cjs/constants.js.map +7 -0
  82. package/dist/cjs/errors.d.ts +85 -0
  83. package/dist/cjs/errors.d.ts.map +1 -0
  84. package/dist/cjs/errors.js +210 -0
  85. package/dist/cjs/errors.js.map +7 -0
  86. package/dist/cjs/evm/abis/erc20.d.ts +41 -0
  87. package/dist/cjs/evm/abis/erc20.d.ts.map +1 -0
  88. package/dist/cjs/evm/abis/erc20.js +57 -0
  89. package/dist/cjs/evm/abis/erc20.js.map +7 -0
  90. package/dist/cjs/evm/abis/erc4626.d.ts +105 -0
  91. package/dist/cjs/evm/abis/erc4626.d.ts.map +1 -0
  92. package/dist/cjs/evm/abis/erc4626.js +97 -0
  93. package/dist/cjs/evm/abis/erc4626.js.map +7 -0
  94. package/dist/cjs/evm/abis/multiDepositorVault.d.ts +1048 -0
  95. package/dist/cjs/evm/abis/multiDepositorVault.d.ts.map +1 -0
  96. package/dist/cjs/evm/abis/multiDepositorVault.js +614 -0
  97. package/dist/cjs/evm/abis/multiDepositorVault.js.map +7 -0
  98. package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts +910 -0
  99. package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts.map +1 -0
  100. package/dist/cjs/evm/abis/priceAndFeeCalculator.js +517 -0
  101. package/dist/cjs/evm/abis/priceAndFeeCalculator.js.map +7 -0
  102. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts +277 -0
  103. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -0
  104. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js +166 -0
  105. package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js.map +7 -0
  106. package/dist/cjs/evm/abis/provisioner.d.ts +4984 -0
  107. package/dist/cjs/evm/abis/provisioner.d.ts.map +1 -0
  108. package/dist/cjs/evm/abis/provisioner.js +2785 -0
  109. package/dist/cjs/evm/abis/provisioner.js.map +7 -0
  110. package/dist/cjs/evm/abis/provisionerV2.d.ts +740 -0
  111. package/dist/cjs/evm/abis/provisionerV2.d.ts.map +1 -0
  112. package/dist/cjs/evm/abis/provisionerV2.js +320 -0
  113. package/dist/cjs/evm/abis/provisionerV2.js.map +7 -0
  114. package/dist/cjs/evm/adapters/aera.d.ts +6 -0
  115. package/dist/cjs/evm/adapters/aera.d.ts.map +1 -0
  116. package/dist/cjs/evm/adapters/aera.js +491 -0
  117. package/dist/cjs/evm/adapters/aera.js.map +7 -0
  118. package/dist/cjs/evm/adapters/index.d.ts +3 -0
  119. package/dist/cjs/evm/adapters/index.d.ts.map +1 -0
  120. package/dist/cjs/evm/adapters/index.js +41 -0
  121. package/dist/cjs/evm/adapters/index.js.map +7 -0
  122. package/dist/cjs/evm/adapters/morpho.d.ts +3 -0
  123. package/dist/cjs/evm/adapters/morpho.d.ts.map +1 -0
  124. package/dist/cjs/evm/adapters/morpho.js +103 -0
  125. package/dist/cjs/evm/adapters/morpho.js.map +7 -0
  126. package/dist/cjs/evm/adapters/types.d.ts +84 -0
  127. package/dist/cjs/evm/adapters/types.d.ts.map +1 -0
  128. package/dist/cjs/evm/adapters/types.js +17 -0
  129. package/dist/cjs/evm/adapters/types.js.map +7 -0
  130. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts +46 -0
  131. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -0
  132. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js +223 -0
  133. package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js.map +7 -0
  134. package/dist/cjs/evm/aeraContracts/readOptions.d.ts +8 -0
  135. package/dist/cjs/evm/aeraContracts/readOptions.d.ts.map +1 -0
  136. package/dist/cjs/evm/aeraContracts/readOptions.js +31 -0
  137. package/dist/cjs/evm/aeraContracts/readOptions.js.map +7 -0
  138. package/dist/cjs/evm/aeraContracts/v1.d.ts +2317 -0
  139. package/dist/cjs/evm/aeraContracts/v1.d.ts.map +1 -0
  140. package/dist/cjs/evm/aeraContracts/v1.js +120 -0
  141. package/dist/cjs/evm/aeraContracts/v1.js.map +7 -0
  142. package/dist/cjs/evm/aeraContracts/v2.d.ts +4538 -0
  143. package/dist/cjs/evm/aeraContracts/v2.d.ts.map +1 -0
  144. package/dist/cjs/evm/aeraContracts/v2.js +449 -0
  145. package/dist/cjs/evm/aeraContracts/v2.js.map +7 -0
  146. package/dist/cjs/evm/aeraContracts.d.ts +33 -0
  147. package/dist/cjs/evm/aeraContracts.d.ts.map +1 -0
  148. package/dist/cjs/evm/aeraContracts.js +224 -0
  149. package/dist/cjs/evm/aeraContracts.js.map +7 -0
  150. package/dist/cjs/evm/deposit.d.ts +50 -0
  151. package/dist/cjs/evm/deposit.d.ts.map +1 -0
  152. package/dist/cjs/evm/deposit.js +112 -0
  153. package/dist/cjs/evm/deposit.js.map +7 -0
  154. package/dist/cjs/evm/depositQuote.d.ts +32 -0
  155. package/dist/cjs/evm/depositQuote.d.ts.map +1 -0
  156. package/dist/cjs/evm/depositQuote.js +96 -0
  157. package/dist/cjs/evm/depositQuote.js.map +7 -0
  158. package/dist/cjs/evm/depositReceiverApproval.d.ts +17 -0
  159. package/dist/cjs/evm/depositReceiverApproval.d.ts.map +1 -0
  160. package/dist/cjs/evm/depositReceiverApproval.js +66 -0
  161. package/dist/cjs/evm/depositReceiverApproval.js.map +7 -0
  162. package/dist/cjs/evm/index.d.ts +28 -0
  163. package/dist/cjs/evm/index.d.ts.map +1 -0
  164. package/dist/cjs/evm/index.js +116 -0
  165. package/dist/cjs/evm/index.js.map +7 -0
  166. package/dist/cjs/evm/operationMode.d.ts +9 -0
  167. package/dist/cjs/evm/operationMode.d.ts.map +1 -0
  168. package/dist/cjs/evm/operationMode.js +65 -0
  169. package/dist/cjs/evm/operationMode.js.map +7 -0
  170. package/dist/cjs/evm/tokenModes.d.ts +22 -0
  171. package/dist/cjs/evm/tokenModes.d.ts.map +1 -0
  172. package/dist/cjs/evm/tokenModes.js +47 -0
  173. package/dist/cjs/evm/tokenModes.js.map +7 -0
  174. package/dist/cjs/evm/types.d.ts +34 -0
  175. package/dist/cjs/evm/types.d.ts.map +1 -0
  176. package/dist/cjs/evm/types.js +32 -0
  177. package/dist/cjs/evm/types.js.map +7 -0
  178. package/dist/cjs/evm/userCurrentBalance.d.ts +55 -0
  179. package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -0
  180. package/dist/cjs/evm/userCurrentBalance.js +225 -0
  181. package/dist/cjs/evm/userCurrentBalance.js.map +7 -0
  182. package/dist/cjs/evm/vaults.d.ts +44 -0
  183. package/dist/cjs/evm/vaults.d.ts.map +1 -0
  184. package/dist/cjs/evm/vaults.js +78 -0
  185. package/dist/cjs/evm/vaults.js.map +7 -0
  186. package/dist/cjs/evm/withdraw.d.ts +73 -0
  187. package/dist/cjs/evm/withdraw.d.ts.map +1 -0
  188. package/dist/cjs/evm/withdraw.js +161 -0
  189. package/dist/cjs/evm/withdraw.js.map +7 -0
  190. package/dist/cjs/evm/withdrawQuote.d.ts +135 -0
  191. package/dist/cjs/evm/withdrawQuote.d.ts.map +1 -0
  192. package/dist/cjs/evm/withdrawQuote.js +256 -0
  193. package/dist/cjs/evm/withdrawQuote.js.map +7 -0
  194. package/dist/cjs/index.d.ts +31 -0
  195. package/dist/cjs/index.d.ts.map +1 -0
  196. package/dist/cjs/index.js +128 -0
  197. package/dist/cjs/index.js.map +7 -0
  198. package/dist/cjs/package.json +1 -0
  199. package/dist/cjs/privy/index.d.ts +52 -0
  200. package/dist/cjs/privy/index.d.ts.map +1 -0
  201. package/dist/cjs/privy/index.js +57 -0
  202. package/dist/cjs/privy/index.js.map +7 -0
  203. package/dist/client.d.ts +4 -2
  204. package/dist/client.d.ts.map +1 -1
  205. package/dist/constants.d.ts.map +1 -1
  206. package/dist/errors.d.ts +15 -1
  207. package/dist/errors.d.ts.map +1 -1
  208. package/dist/evm/abis/priceAndFeeCalculatorV2.d.ts +44 -0
  209. package/dist/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -1
  210. package/dist/evm/abis/provisionerV2.d.ts +56 -0
  211. package/dist/evm/abis/provisionerV2.d.ts.map +1 -1
  212. package/dist/evm/adapters/aera.d.ts +1 -1
  213. package/dist/evm/adapters/aera.d.ts.map +1 -1
  214. package/dist/evm/adapters/index.d.ts +1 -1
  215. package/dist/evm/adapters/index.d.ts.map +1 -1
  216. package/dist/evm/adapters/morpho.d.ts +1 -1
  217. package/dist/evm/adapters/morpho.d.ts.map +1 -1
  218. package/dist/evm/adapters/types.d.ts +6 -2
  219. package/dist/evm/adapters/types.d.ts.map +1 -1
  220. package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts +11 -6
  221. package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -1
  222. package/dist/evm/aeraContracts/readOptions.d.ts +8 -0
  223. package/dist/evm/aeraContracts/readOptions.d.ts.map +1 -0
  224. package/dist/evm/aeraContracts/v1.d.ts +2 -2
  225. package/dist/evm/aeraContracts/v1.d.ts.map +1 -1
  226. package/dist/evm/aeraContracts/v2.d.ts +396 -4
  227. package/dist/evm/aeraContracts/v2.d.ts.map +1 -1
  228. package/dist/evm/aeraContracts.d.ts +11 -5
  229. package/dist/evm/aeraContracts.d.ts.map +1 -1
  230. package/dist/evm/deposit.d.ts +4 -2
  231. package/dist/evm/deposit.d.ts.map +1 -1
  232. package/dist/evm/depositQuote.d.ts +32 -0
  233. package/dist/evm/depositQuote.d.ts.map +1 -0
  234. package/dist/evm/depositReceiverApproval.d.ts +2 -2
  235. package/dist/evm/depositReceiverApproval.d.ts.map +1 -1
  236. package/dist/evm/index.d.ts +27 -17
  237. package/dist/evm/index.d.ts.map +1 -1
  238. package/dist/evm/index.js +88 -9
  239. package/dist/evm/index.js.map +7 -1
  240. package/dist/evm/tokenModes.d.ts +22 -0
  241. package/dist/evm/tokenModes.d.ts.map +1 -0
  242. package/dist/evm/userCurrentBalance.d.ts +6 -2
  243. package/dist/evm/userCurrentBalance.d.ts.map +1 -1
  244. package/dist/evm/vaults.d.ts +2 -9
  245. package/dist/evm/vaults.d.ts.map +1 -1
  246. package/dist/evm/withdraw.d.ts +10 -2
  247. package/dist/evm/withdraw.d.ts.map +1 -1
  248. package/dist/evm/withdrawQuote.d.ts +135 -0
  249. package/dist/evm/withdrawQuote.d.ts.map +1 -0
  250. package/dist/index.d.ts +30 -22
  251. package/dist/index.d.ts.map +1 -1
  252. package/dist/index.js +139 -12
  253. package/dist/index.js.map +7 -1
  254. package/dist/manifest/vaults.json +1958 -0
  255. package/dist/privy/index.d.ts +1 -1
  256. package/dist/privy/index.d.ts.map +1 -1
  257. package/dist/privy/index.js +39 -48
  258. package/dist/privy/index.js.map +7 -1
  259. package/manifest/vaults.json +45 -460
  260. package/package.json +43 -9
  261. package/src/api/client.ts +104 -7
  262. package/src/api/generated.ts +621 -14
  263. package/src/api/index.ts +13 -0
  264. package/src/client.ts +4 -1
  265. package/src/constants.ts +2 -0
  266. package/src/errors.ts +39 -2
  267. package/src/evm/abis/priceAndFeeCalculatorV2.ts +22 -0
  268. package/src/evm/abis/provisionerV2.ts +33 -0
  269. package/src/evm/adapters/aera.ts +64 -34
  270. package/src/evm/adapters/types.ts +4 -0
  271. package/src/evm/aeraContracts/priceAndFeeCalculator.ts +72 -5
  272. package/src/evm/aeraContracts/readOptions.ts +3 -0
  273. package/src/evm/aeraContracts/v2.ts +273 -41
  274. package/src/evm/aeraContracts.ts +81 -8
  275. package/src/evm/deposit.ts +21 -8
  276. package/src/evm/depositQuote.ts +137 -0
  277. package/src/evm/index.ts +41 -0
  278. package/src/evm/tokenModes.ts +54 -0
  279. package/src/evm/userCurrentBalance.ts +12 -1
  280. package/src/evm/vaults.ts +0 -7
  281. package/src/evm/withdraw.ts +131 -7
  282. package/src/evm/withdrawQuote.ts +434 -0
  283. package/src/index.ts +26 -1
  284. package/dist/api/activity.js +0 -154
  285. package/dist/api/activity.js.map +0 -1
  286. package/dist/api/caip.js +0 -38
  287. package/dist/api/caip.js.map +0 -1
  288. package/dist/api/client.js +0 -109
  289. package/dist/api/client.js.map +0 -1
  290. package/dist/api/decimal.js +0 -44
  291. package/dist/api/decimal.js.map +0 -1
  292. package/dist/api/errors.js +0 -41
  293. package/dist/api/errors.js.map +0 -1
  294. package/dist/api/generated.js +0 -6
  295. package/dist/api/generated.js.map +0 -1
  296. package/dist/api/http.js +0 -39
  297. package/dist/api/http.js.map +0 -1
  298. package/dist/api/positionHistory.js +0 -126
  299. package/dist/api/positionHistory.js.map +0 -1
  300. package/dist/attribution/erc8021.js +0 -17
  301. package/dist/attribution/erc8021.js.map +0 -1
  302. package/dist/attribution/index.js +0 -45
  303. package/dist/attribution/index.js.map +0 -1
  304. package/dist/client.js +0 -72
  305. package/dist/client.js.map +0 -1
  306. package/dist/constants.js +0 -28
  307. package/dist/constants.js.map +0 -1
  308. package/dist/errors.js +0 -115
  309. package/dist/errors.js.map +0 -1
  310. package/dist/evm/abis/erc20.js +0 -30
  311. package/dist/evm/abis/erc20.js.map +0 -1
  312. package/dist/evm/abis/erc4626.js +0 -70
  313. package/dist/evm/abis/erc4626.js.map +0 -1
  314. package/dist/evm/abis/multiDepositorVault.js +0 -587
  315. package/dist/evm/abis/multiDepositorVault.js.map +0 -1
  316. package/dist/evm/abis/priceAndFeeCalculator.js +0 -490
  317. package/dist/evm/abis/priceAndFeeCalculator.js.map +0 -1
  318. package/dist/evm/abis/priceAndFeeCalculatorV2.js +0 -119
  319. package/dist/evm/abis/priceAndFeeCalculatorV2.js.map +0 -1
  320. package/dist/evm/abis/provisioner.js +0 -2768
  321. package/dist/evm/abis/provisioner.js.map +0 -1
  322. package/dist/evm/abis/provisionerV2.js +0 -262
  323. package/dist/evm/abis/provisionerV2.js.map +0 -1
  324. package/dist/evm/adapters/aera.js +0 -249
  325. package/dist/evm/adapters/aera.js.map +0 -1
  326. package/dist/evm/adapters/index.js +0 -14
  327. package/dist/evm/adapters/index.js.map +0 -1
  328. package/dist/evm/adapters/morpho.js +0 -79
  329. package/dist/evm/adapters/morpho.js.map +0 -1
  330. package/dist/evm/adapters/types.js +0 -2
  331. package/dist/evm/adapters/types.js.map +0 -1
  332. package/dist/evm/aeraContracts/priceAndFeeCalculator.js +0 -140
  333. package/dist/evm/aeraContracts/priceAndFeeCalculator.js.map +0 -1
  334. package/dist/evm/aeraContracts/v1.js +0 -59
  335. package/dist/evm/aeraContracts/v1.js.map +0 -1
  336. package/dist/evm/aeraContracts/v2.js +0 -217
  337. package/dist/evm/aeraContracts/v2.js.map +0 -1
  338. package/dist/evm/aeraContracts.js +0 -134
  339. package/dist/evm/aeraContracts.js.map +0 -1
  340. package/dist/evm/deposit.js +0 -109
  341. package/dist/evm/deposit.js.map +0 -1
  342. package/dist/evm/depositReceiverApproval.js +0 -32
  343. package/dist/evm/depositReceiverApproval.js.map +0 -1
  344. package/dist/evm/operationMode.js +0 -41
  345. package/dist/evm/operationMode.js.map +0 -1
  346. package/dist/evm/types.js +0 -5
  347. package/dist/evm/types.js.map +0 -1
  348. package/dist/evm/userCurrentBalance.js +0 -211
  349. package/dist/evm/userCurrentBalance.js.map +0 -1
  350. package/dist/evm/vaults.js +0 -75
  351. package/dist/evm/vaults.js.map +0 -1
  352. package/dist/evm/withdraw.js +0 -97
  353. package/dist/evm/withdraw.js.map +0 -1
@@ -0,0 +1,434 @@
1
+ import type { Address } from 'viem';
2
+ import type { GauntletClient } from '../client';
3
+ import {
4
+ AccountRequiredError,
5
+ InvalidSlippageBPSError,
6
+ InvalidWithdrawParamsError,
7
+ requireNonZeroSyncWithdrawBound,
8
+ UnsupportedAssetError,
9
+ UnsupportedFeatureError,
10
+ VaultNotFoundError,
11
+ } from '../errors';
12
+ import { DEFAULT_BPS, MAX_BPS } from '../constants';
13
+ import { resolveVault } from './vaults';
14
+ import {
15
+ applySlippageDown,
16
+ applySlippageUp,
17
+ requireAeraSyncRedeemRuntime,
18
+ resolveAeraRuntimeContracts,
19
+ resolveAeraTokenModeSupport,
20
+ } from './aeraContracts';
21
+ import { multiDepositorVaultAbi } from './abis/multiDepositorVault';
22
+ import {
23
+ convertNumeraireToToken,
24
+ convertTokenToNumeraire,
25
+ } from './aeraContracts/priceAndFeeCalculator';
26
+ import {
27
+ getKnownSyncRedeemLiquidityTokens,
28
+ getSyncRedeemEpochState,
29
+ getSyncRedeemRate,
30
+ getSyncRedeemRateContext,
31
+ getSyncRedeemTokenOut,
32
+ getSyncWithdrawUnitsIn,
33
+ getUserUnitsRefundableUntil,
34
+ type SyncRedeemRate,
35
+ } from './aeraContracts/v2';
36
+ import { resolveOperationMode } from './operationMode';
37
+
38
+ /** Epoch-cap accounting plus any liquid-token balance known to the caller. */
39
+ export interface SyncWithdrawCapacity {
40
+ /** Effective epoch cap (min of relative and absolute), in numeraire. */
41
+ epochCapNumeraire: bigint;
42
+ /** Numeraire already redeemed globally in the current epoch. */
43
+ epochRedeemedNumeraire: bigint;
44
+ /** Remaining global sync redeem capacity this epoch, in numeraire. */
45
+ remainingNumeraire: bigint;
46
+ /** Remaining capacity expressed in the withdraw token. */
47
+ remainingTokens: bigint;
48
+ /** Vault token balance when no pull-funds calldata is configured; otherwise unknown. */
49
+ knownLiquidityTokens?: bigint;
50
+ /** This redemption's size in numeraire (matches the on-chain epoch accounting). */
51
+ requestNumeraire: bigint;
52
+ /** True when this redemption alone exceeds remaining epoch capacity (the tx would revert). */
53
+ exceedsCapacity: boolean;
54
+ }
55
+
56
+ export type SyncWithdrawQuoteRequest =
57
+ | { mode: 'amount'; amount: bigint }
58
+ | { mode: 'shares'; shares: bigint }
59
+ | { mode: 'entireAmount'; account: Address };
60
+
61
+ export interface SyncWithdrawQuoteContext {
62
+ vaultId: string;
63
+ chainId: number;
64
+ tokenAddress: Address;
65
+ /** Account used for balance and lock reads when the quote is account-scoped. */
66
+ account?: Address;
67
+ /** Slippage tolerance used to derive `minTokensOut` or `maxUnitsIn`. */
68
+ slippageBps: number;
69
+ /** Block snapshot used for all quote reads. */
70
+ blockNumber: bigint;
71
+ /** Exact sizing request that produced this quote. */
72
+ request: SyncWithdrawQuoteRequest;
73
+ }
74
+
75
+ interface SyncWithdrawQuoteDetails {
76
+ /** Vault units (shares) burned: exact for `'redeem'`, estimated for `'withdraw'`. */
77
+ shares: bigint;
78
+ /** Upper bound on shares burned after slippage (equals `shares` for `'redeem'`). */
79
+ maxUnitsIn: bigint;
80
+ /** Tokens received: exact (requested) for `'withdraw'`, estimated for `'redeem'`. */
81
+ tokensOut: bigint;
82
+ /** Lower bound on tokens received after slippage (equals `tokensOut` for `'withdraw'`). */
83
+ minTokensOut: bigint;
84
+ /** Largest exact-token withdrawal that fits `shares`; only set for `'redeem'` quotes. */
85
+ shareSafeTokensOut?: bigint;
86
+ /** Live multiplier breakdown (base, dynamic premium, effective), in bps. */
87
+ rate: SyncRedeemRate;
88
+ capacity: SyncWithdrawCapacity;
89
+ /** Timestamp until which the account's units are locked; undefined when no account was quoted. */
90
+ unitsLockedUntil?: bigint;
91
+ /** Context that must match any transaction build using these quote bounds. */
92
+ context: SyncWithdrawQuoteContext;
93
+ }
94
+
95
+ /** Bounds consumed by one of the two on-chain sync withdraw entry points. */
96
+ export type SyncWithdrawQuoteBounds =
97
+ | {
98
+ kind: 'redeem';
99
+ shares: bigint;
100
+ minTokensOut: bigint;
101
+ context: SyncWithdrawQuoteContext;
102
+ }
103
+ | {
104
+ kind: 'withdraw';
105
+ tokensOut: bigint;
106
+ maxUnitsIn: bigint;
107
+ context: SyncWithdrawQuoteContext;
108
+ };
109
+
110
+ /**
111
+ * A live quote for an instant (sync) withdraw.
112
+ *
113
+ * `kind` distinguishes the two on-chain entry points:
114
+ * - `'redeem'`: exact shares burned, estimated tokens out (used for by-shares / entire-balance exits)
115
+ * - `'withdraw'`: exact tokens out, estimated shares burned (used for by-token-amount exits)
116
+ */
117
+ export type SyncWithdrawQuote =
118
+ | (SyncWithdrawQuoteDetails & { kind: 'redeem' })
119
+ | (SyncWithdrawQuoteDetails & { kind: 'withdraw' });
120
+
121
+ export type SyncWithdrawRateParams = {
122
+ vaultId: string;
123
+ /** EVM chain ID. Defaults to the vault's primary chain (Base for current multichain vaults). */
124
+ chainId?: number;
125
+ /** Required for multiasset vaults. */
126
+ assetSymbol?: string;
127
+ };
128
+
129
+ type SyncWithdrawQuoteBaseParams = SyncWithdrawRateParams & {
130
+ /** Optional for explicit amount/shares quotes; required for full-position quotes. */
131
+ account?: Address;
132
+ /**
133
+ * Slippage tolerance in basis points (e.g. 100 = 1%). Defaults to 100.
134
+ * A value of 10000 is invalid for share-sized quotes because it makes `minTokensOut` zero.
135
+ */
136
+ slippageBps?: number;
137
+ };
138
+
139
+ export type SyncWithdrawQuoteParams =
140
+ | (SyncWithdrawQuoteBaseParams & { shares: bigint; amount?: never; entireAmount?: never })
141
+ | (SyncWithdrawQuoteBaseParams & { amount: bigint; shares?: never; entireAmount?: never })
142
+ | (SyncWithdrawQuoteBaseParams & {
143
+ account: Address;
144
+ entireAmount: true;
145
+ shares?: never;
146
+ amount?: never;
147
+ });
148
+
149
+ function validateSyncWithdrawQuoteParams(params: SyncWithdrawQuoteParams) {
150
+ const modes = [
151
+ 'amount' in params && params.amount != null,
152
+ 'shares' in params && params.shares != null,
153
+ 'entireAmount' in params && params.entireAmount === true,
154
+ ].filter(Boolean).length;
155
+
156
+ if (modes !== 1) throw new InvalidWithdrawParamsError();
157
+ if ('entireAmount' in params && params.entireAmount === true && !params.account) {
158
+ throw new AccountRequiredError();
159
+ }
160
+ }
161
+
162
+ async function resolveSyncWithdrawContext(
163
+ client: GauntletClient,
164
+ params: SyncWithdrawRateParams,
165
+ readKind: 'quote' | 'rate'
166
+ ) {
167
+ const resolved = await resolveVault(client, params.vaultId, params.chainId);
168
+ if (!resolved) throw new VaultNotFoundError(params.vaultId);
169
+
170
+ const { vault, protocol } = resolved;
171
+ if (protocol !== 'aera') {
172
+ throw new UnsupportedFeatureError(
173
+ readKind === 'quote'
174
+ ? 'Sync withdraw quote is only available for Aera vaults'
175
+ : 'Sync withdraw rate is only available for Aera vaults'
176
+ );
177
+ }
178
+
179
+ const chainId = params.chainId ?? vault.chainId;
180
+ const publicClient = client.getPublicClient(chainId);
181
+ const token =
182
+ vault.supplyToken.length > 1
183
+ ? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)
184
+ : vault.supplyToken[0];
185
+ if (token === undefined) {
186
+ throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);
187
+ }
188
+
189
+ const quoteBlock = await publicClient.getBlock();
190
+ if (quoteBlock.number === null) {
191
+ throw new UnsupportedFeatureError(
192
+ readKind === 'quote'
193
+ ? 'Aera: sync withdraw quote requires a numbered block'
194
+ : 'Aera: sync withdraw rate requires a numbered block'
195
+ );
196
+ }
197
+ const readContext = {
198
+ blockNumber: quoteBlock.number,
199
+ blockTimestamp: BigInt(quoteBlock.timestamp),
200
+ };
201
+
202
+ const runtime = await resolveAeraRuntimeContracts(publicClient, vault, readContext);
203
+ requireAeraSyncRedeemRuntime(runtime);
204
+
205
+ const support = await resolveAeraTokenModeSupport(
206
+ publicClient,
207
+ runtime,
208
+ token.address,
209
+ readContext
210
+ );
211
+ resolveOperationMode(params.vaultId, 'sync', {
212
+ async: support.asyncRedeem,
213
+ sync: support.syncRedeem,
214
+ });
215
+
216
+ return { publicClient, vault, token, runtime, chainId, readContext };
217
+ }
218
+
219
+ /** Reads the live instant-withdraw fee rate without requiring a withdrawal amount or account. */
220
+ export async function getSyncWithdrawRate(
221
+ client: GauntletClient,
222
+ params: SyncWithdrawRateParams
223
+ ): Promise<SyncRedeemRate> {
224
+ const { publicClient, vault, token, runtime, readContext } = await resolveSyncWithdrawContext(
225
+ client,
226
+ params,
227
+ 'rate'
228
+ );
229
+
230
+ return getSyncRedeemRate(
231
+ publicClient,
232
+ runtime.provisioner.address,
233
+ vault.vaultAddress,
234
+ token.address,
235
+ runtime.feeCalculator.address,
236
+ readContext
237
+ );
238
+ }
239
+
240
+ /**
241
+ * Builds a live quote for an instant (sync) withdraw without sending a transaction.
242
+ *
243
+ * Surfaces everything the on-chain `redeem`/`withdraw` would apply or check but that a plain
244
+ * transaction build does not pre-validate: the effective rate (including the price-age dynamic
245
+ * premium), slippage bounds, the global per-epoch redeem capacity, any known vault-balance limit,
246
+ * and whether the caller's units are still locked from a recent sync deposit.
247
+ *
248
+ * @throws {VaultNotFoundError} If the vault ID is not found.
249
+ * @throws {UnsupportedAssetError} If the asset symbol is not accepted by the vault.
250
+ * @throws {UnsupportedFeatureError} If the vault is not an Aera V2 deployment.
251
+ * @throws {UnsupportedDepositModeError} If sync redeem is not enabled for the token.
252
+ * @throws {StalePriceError} If the oracle price is too stale for an instant redeem.
253
+ */
254
+ export async function getSyncWithdrawQuote(
255
+ client: GauntletClient,
256
+ params: SyncWithdrawQuoteParams
257
+ ): Promise<SyncWithdrawQuote> {
258
+ validateSyncWithdrawQuoteParams(params);
259
+
260
+ if (
261
+ params.slippageBps !== undefined &&
262
+ (!Number.isInteger(params.slippageBps) ||
263
+ params.slippageBps < 0 ||
264
+ params.slippageBps > Number(MAX_BPS))
265
+ ) {
266
+ throw new InvalidSlippageBPSError(params.slippageBps);
267
+ }
268
+ const slippageBps = params.slippageBps ?? DEFAULT_BPS;
269
+
270
+ const {
271
+ publicClient,
272
+ vault,
273
+ token,
274
+ runtime,
275
+ chainId,
276
+ readContext: quoteReadContext,
277
+ } = await resolveSyncWithdrawContext(client, params, 'quote');
278
+
279
+ const provisioner = runtime.provisioner.address;
280
+ const feeCalculator = runtime.feeCalculator.address;
281
+ const feeVersion = runtime.feeCalculator.version;
282
+ const vaultAddress = vault.vaultAddress;
283
+
284
+ const { rate, hasPullFundsSubmitData } = await getSyncRedeemRateContext(
285
+ publicClient,
286
+ provisioner,
287
+ vaultAddress,
288
+ token.address,
289
+ feeCalculator,
290
+ quoteReadContext
291
+ );
292
+
293
+ let kind: SyncWithdrawQuote['kind'];
294
+ let shares: bigint;
295
+ let tokensOut: bigint;
296
+ let minTokensOut: bigint;
297
+ let maxUnitsIn: bigint;
298
+ let request: SyncWithdrawQuoteRequest;
299
+ let shareSafeTokensOut: bigint | undefined;
300
+
301
+ if ('amount' in params && params.amount != null) {
302
+ // Exact token out: shares burned is the estimate, bounded above by slippage.
303
+ kind = 'withdraw';
304
+ request = { mode: 'amount', amount: params.amount };
305
+ tokensOut = params.amount;
306
+ requireNonZeroSyncWithdrawBound(tokensOut, 'tokensOut');
307
+ minTokensOut = params.amount;
308
+ shares = await getSyncWithdrawUnitsIn(
309
+ publicClient,
310
+ provisioner,
311
+ feeCalculator,
312
+ feeVersion,
313
+ vaultAddress,
314
+ token.address,
315
+ params.amount,
316
+ rate.effectiveMultiplierBps,
317
+ quoteReadContext
318
+ );
319
+ maxUnitsIn = applySlippageUp(shares, slippageBps);
320
+ requireNonZeroSyncWithdrawBound(maxUnitsIn, 'maxUnitsIn');
321
+ } else {
322
+ // Exact shares in: tokens out is the estimate, bounded below by slippage.
323
+ kind = 'redeem';
324
+ if ('entireAmount' in params && params.entireAmount) {
325
+ if (!params.account) throw new AccountRequiredError();
326
+ request = { mode: 'entireAmount', account: params.account };
327
+ shares = await publicClient.readContract({
328
+ address: vaultAddress,
329
+ abi: multiDepositorVaultAbi,
330
+ functionName: 'balanceOf',
331
+ args: [params.account],
332
+ blockNumber: quoteReadContext.blockNumber,
333
+ });
334
+ } else if ('shares' in params && params.shares != null) {
335
+ request = { mode: 'shares', shares: params.shares };
336
+ shares = params.shares;
337
+ } else {
338
+ throw new InvalidWithdrawParamsError();
339
+ }
340
+ requireNonZeroSyncWithdrawBound(shares, 'unitsIn');
341
+ const getTokensOut = (unitsIn: bigint) =>
342
+ getSyncRedeemTokenOut(
343
+ publicClient,
344
+ provisioner,
345
+ feeCalculator,
346
+ feeVersion,
347
+ vaultAddress,
348
+ token.address,
349
+ unitsIn,
350
+ rate.effectiveMultiplierBps,
351
+ quoteReadContext
352
+ );
353
+ // A capacity-limited Max is submitted as an exact-token withdraw. Reserve slippage headroom so
354
+ // its maximum share cost cannot exceed the user's share balance.
355
+ const shareSafeUnitsIn = (shares * MAX_BPS) / (MAX_BPS + BigInt(slippageBps));
356
+ const tokensOutPromise = getTokensOut(shares);
357
+ const shareSafeTokensOutPromise =
358
+ shareSafeUnitsIn === shares ? tokensOutPromise : getTokensOut(shareSafeUnitsIn);
359
+ [tokensOut, shareSafeTokensOut] = await Promise.all([
360
+ tokensOutPromise,
361
+ shareSafeTokensOutPromise,
362
+ ]);
363
+ minTokensOut = applySlippageDown(tokensOut, slippageBps);
364
+ requireNonZeroSyncWithdrawBound(minTokensOut, 'minTokensOut');
365
+ maxUnitsIn = shares;
366
+ }
367
+
368
+ const [epoch, requestNumeraire, unitsLockedUntil, knownLiquidityTokens] = await Promise.all([
369
+ getSyncRedeemEpochState(publicClient, provisioner, quoteReadContext),
370
+ convertTokenToNumeraire(
371
+ publicClient,
372
+ feeCalculator,
373
+ feeVersion,
374
+ vaultAddress,
375
+ token.address,
376
+ tokensOut,
377
+ quoteReadContext
378
+ ),
379
+ params.account
380
+ ? getUserUnitsRefundableUntil(publicClient, provisioner, params.account, quoteReadContext)
381
+ : Promise.resolve(undefined),
382
+ getKnownSyncRedeemLiquidityTokens(
383
+ publicClient,
384
+ vaultAddress,
385
+ token.address,
386
+ hasPullFundsSubmitData,
387
+ quoteReadContext
388
+ ),
389
+ ]);
390
+
391
+ const remainingNumeraire =
392
+ epoch.epochCapNumeraire > epoch.epochRedeemedNumeraire
393
+ ? epoch.epochCapNumeraire - epoch.epochRedeemedNumeraire
394
+ : 0n;
395
+ const remainingTokens = await convertNumeraireToToken(
396
+ publicClient,
397
+ feeCalculator,
398
+ feeVersion,
399
+ vaultAddress,
400
+ token.address,
401
+ remainingNumeraire,
402
+ quoteReadContext
403
+ );
404
+ const quoteDetails: SyncWithdrawQuoteDetails = {
405
+ shares,
406
+ maxUnitsIn,
407
+ tokensOut,
408
+ minTokensOut,
409
+ shareSafeTokensOut,
410
+ rate,
411
+ capacity: {
412
+ epochCapNumeraire: epoch.epochCapNumeraire,
413
+ epochRedeemedNumeraire: epoch.epochRedeemedNumeraire,
414
+ remainingNumeraire,
415
+ remainingTokens,
416
+ knownLiquidityTokens,
417
+ requestNumeraire,
418
+ exceedsCapacity: requestNumeraire > remainingNumeraire,
419
+ },
420
+ unitsLockedUntil,
421
+ context: {
422
+ vaultId: params.vaultId,
423
+ chainId,
424
+ tokenAddress: token.address,
425
+ ...(params.account ? { account: params.account } : {}),
426
+ slippageBps,
427
+ blockNumber: quoteReadContext.blockNumber,
428
+ request,
429
+ },
430
+ };
431
+
432
+ if (kind === 'redeem') return { kind, ...quoteDetails };
433
+ return { kind, ...quoteDetails };
434
+ }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { GauntletClient, AttributionMode } from './client';
1
+ export { GauntletClient, AttributionMode, bundledVaultManifest } from './client';
2
2
  export type { GauntletClientConfig } from './client';
3
3
  export { ContractVersion } from './evm/types';
4
4
 
@@ -15,7 +15,10 @@ export type { VaultFilter } from './evm/vaults';
15
15
 
16
16
  export { getDepositTx } from './evm/deposit';
17
17
  export { getDepositReceiverApprovalTx } from './evm/depositReceiverApproval';
18
+ export { getSyncDepositQuote, getSyncDepositRate } from './evm/depositQuote';
18
19
  export { getWithdrawTx } from './evm/withdraw';
20
+ export { getSyncWithdrawQuote, getSyncWithdrawRate } from './evm/withdrawQuote';
21
+ export { getAeraTokenModeSupport } from './evm/tokenModes';
19
22
  export { getUserCurrentBalance } from './evm/userCurrentBalance';
20
23
  export { getVaults, VaultId } from './evm/vaults';
21
24
  export { resolveAeraRuntimeContracts, resolveContractVersion } from './evm/aeraContracts';
@@ -32,7 +35,24 @@ export {
32
35
 
33
36
  export type { EvmDepositParams } from './evm/deposit';
34
37
  export type { EvmDepositReceiverApprovalParams } from './evm/depositReceiverApproval';
38
+ export type {
39
+ SyncDepositQuote,
40
+ SyncDepositQuoteParams,
41
+ SyncDepositRate,
42
+ SyncDepositRateParams,
43
+ } from './evm/depositQuote';
35
44
  export type { EvmWithdrawParams } from './evm/withdraw';
45
+ export type {
46
+ SyncWithdrawQuote,
47
+ SyncWithdrawQuoteParams,
48
+ SyncWithdrawCapacity,
49
+ SyncWithdrawQuoteContext,
50
+ SyncWithdrawQuoteRequest,
51
+ SyncWithdrawQuoteBounds,
52
+ SyncWithdrawRateParams,
53
+ } from './evm/withdrawQuote';
54
+ export type { AeraTokenModeSupportParams } from './evm/tokenModes';
55
+ export type { SyncRedeemRate } from './evm/aeraContracts/v2';
36
56
  export type { EvmTxStep } from './evm/adapters/types';
37
57
  export type { UserCurrentBalanceParams, UserCurrentBalance } from './evm/userCurrentBalance';
38
58
  export type { PreparedTx } from './attribution';
@@ -46,12 +66,17 @@ export {
46
66
  ChainMismatchError,
47
67
  UnsupportedDepositModeError,
48
68
  RpcNotConfiguredError,
69
+ AccountMismatchError,
49
70
  AccountRequiredError,
50
71
  UnsupportedProtocolError,
51
72
  UnsupportedFeatureError,
52
73
  InvalidWithdrawParamsError,
74
+ InvalidSyncDepositBoundError,
75
+ InvalidSyncWithdrawBoundError,
76
+ InvalidSlippageBPSError,
53
77
  UnimplementedFeatureError,
54
78
  UnitConversionError,
55
79
  StalePriceError,
56
80
  InvalidSolverTipError,
57
81
  } from './errors';
82
+ export type { SyncWithdrawBound } from './errors';
@@ -1,154 +0,0 @@
1
- import { GauntletSDKError } from '../errors';
2
- import { decimalToBigInt, sharesToBigInt } from './decimal';
3
- import { SettlementTimeoutError } from './errors';
4
- const PENDING_TYPES = new Set(['deposit_pending', 'withdraw_pending']);
5
- const REFUNDED_TYPES = new Set(['deposit_refunded', 'withdraw_refunded']);
6
- function flowKind(rowType) {
7
- if (rowType.startsWith('deposit'))
8
- return 'deposit';
9
- if (rowType.startsWith('withdraw'))
10
- return 'withdraw';
11
- if (rowType === 'transfer_in' || rowType === 'transfer_out')
12
- return rowType;
13
- throw new GauntletSDKError(`Unknown activity row type "${rowType}"`);
14
- }
15
- function abs(value) {
16
- return value < 0n ? -value : value;
17
- }
18
- /**
19
- * Comparison scale for asset amounts. The API emits human-unit decimal strings
20
- * with at most `token.decimals` fractional digits, so 18 digits is exact for
21
- * every supported asset.
22
- */
23
- const ASSET_SCALE = 18;
24
- function toAssetAmount(rows) {
25
- // Per the API contract, at most one row of an async lifecycle carries the
26
- // asset movement (the other legs are "0"), so the max magnitude is the
27
- // flow's amount. For refunded flows this surfaces the requested amount
28
- // instead of the useless net of zero.
29
- let best = rows[0];
30
- let bestMagnitude = abs(decimalToBigInt(best.assets_delta.native, ASSET_SCALE));
31
- for (const row of rows.slice(1)) {
32
- const magnitude = abs(decimalToBigInt(row.assets_delta.native, ASSET_SCALE));
33
- if (magnitude > bestMagnitude) {
34
- best = row;
35
- bestMagnitude = magnitude;
36
- }
37
- }
38
- const token = best.assets_delta.token ?? rows.find((r) => r.assets_delta.token)?.assets_delta.token ?? null;
39
- const decimal = best.assets_delta.native.replace(/^-/, '');
40
- const raw = token?.decimals != null ? decimalToBigInt(decimal, token.decimals) : null;
41
- return { decimal, raw, token };
42
- }
43
- /**
44
- * Pure stitcher: folds raw activity rows into `ActivityFlow`s. Rows may be in
45
- * any order and may span multiple vaults; async lifecycles are paired by
46
- * `request_hash`. Flows are returned newest-first (by the flow's latest row).
47
- */
48
- export function stitchActivityFlows(rows) {
49
- const groups = new Map();
50
- for (const [index, row] of rows.entries()) {
51
- // Rows without a request_hash are standalone sync flows: each one is its
52
- // own group, so two same-type events in one transaction (e.g. a multicall
53
- // doing two deposits) stay two flows.
54
- const key = row.request_hash ?? `row:${index}`;
55
- const group = groups.get(key);
56
- if (group)
57
- group.push(row);
58
- else
59
- groups.set(key, [row]);
60
- }
61
- const flows = [];
62
- for (const group of groups.values()) {
63
- group.sort((a, b) => a.block_timestamp - b.block_timestamp);
64
- const pendingRow = group.find((r) => PENDING_TYPES.has(r.type)) ?? null;
65
- const terminalRow = group.find((r) => !PENDING_TYPES.has(r.type)) ?? null;
66
- const isAsync = group.some((r) => r.request_hash != null);
67
- let status;
68
- if (!terminalRow)
69
- status = 'pending';
70
- else if (REFUNDED_TYPES.has(terminalRow.type))
71
- status = 'refunded';
72
- else
73
- status = 'settled';
74
- let sharesMagnitude = 0n;
75
- for (const row of group) {
76
- const shares = abs(sharesToBigInt(row.shares_delta));
77
- if (shares > sharesMagnitude)
78
- sharesMagnitude = shares;
79
- }
80
- flows.push({
81
- kind: flowKind((terminalRow ?? pendingRow ?? group[0]).type),
82
- status,
83
- vaultId: group[0].vault_id,
84
- requestHash: group[0].request_hash ?? null,
85
- requestedAt: pendingRow
86
- ? new Date(pendingRow.block_timestamp * 1000)
87
- : isAsync
88
- ? null
89
- : new Date(group[0].block_timestamp * 1000),
90
- settledAt: terminalRow ? new Date(terminalRow.block_timestamp * 1000) : null,
91
- assets: toAssetAmount(group),
92
- shares: sharesMagnitude,
93
- txHashes: [...new Set(group.map((r) => r.tx_hash))],
94
- });
95
- }
96
- return flows.sort((a, b) => {
97
- const aAt = (a.settledAt ?? a.requestedAt)?.getTime() ?? 0;
98
- const bAt = (b.settledAt ?? b.requestedAt)?.getTime() ?? 0;
99
- return bAt - aAt;
100
- });
101
- }
102
- /**
103
- * Fetches the wallet's activity log and stitches it into lifecycle-aware
104
- * flows — the replacement for scanning vault event logs over RPC.
105
- *
106
- * ```ts
107
- * const flows = await getActivityFlows(client.api, wallet);
108
- * const open = flows.filter((f) => f.status === 'pending');
109
- * ```
110
- */
111
- export async function getActivityFlows(api, walletAddress, options = {}) {
112
- const maxRows = options.maxRows ?? 1000;
113
- const rows = [];
114
- for await (const row of api.activityRows(walletAddress, {
115
- vaultId: options.vaultId,
116
- // The API caps page size at 1000; request maxRows per page so the common
117
- // case is a single round trip instead of ten default-100 pages.
118
- limit: options.limit ?? Math.min(maxRows, 1000),
119
- order: 'desc',
120
- })) {
121
- rows.push(row);
122
- if (rows.length >= maxRows)
123
- break;
124
- }
125
- const flows = stitchActivityFlows(rows);
126
- if (rows.length >= maxRows) {
127
- // The window cut may have split an async lifecycle, keeping a terminal
128
- // row whose request leg (the one carrying the amount) fell outside the
129
- // window. Drop those flows rather than reporting zeroed amounts.
130
- return flows.filter((f) => f.requestHash === null || f.requestedAt !== null);
131
- }
132
- return flows;
133
- }
134
- /**
135
- * Polls the activity log until the Aera async request identified by
136
- * `requestHash` reaches a terminal state, and returns the settled or refunded
137
- * flow. Use after submitting a `requestDeposit` / `requestRedeem` transaction.
138
- */
139
- export async function waitForRequestSettlement(api, walletAddress, requestHash, options = {}) {
140
- const pollIntervalMs = options.pollIntervalMs ?? 5000;
141
- const timeoutMs = options.timeoutMs ?? 600000;
142
- const deadline = Date.now() + timeoutMs;
143
- for (;;) {
144
- const flows = await getActivityFlows(api, walletAddress, { vaultId: options.vaultId });
145
- const flow = flows.find((f) => f.requestHash === requestHash);
146
- if (flow && flow.status !== 'pending')
147
- return flow;
148
- if (Date.now() + pollIntervalMs > deadline) {
149
- throw new SettlementTimeoutError(requestHash, timeoutMs);
150
- }
151
- await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
152
- }
153
- }
154
- //# sourceMappingURL=activity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/api/activity.ts"],"names":[],"mappings":"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"}