@humanode-hyperlane/rebalancer 0.0.0-stage → 27.2.2

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 (439) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +297 -2
  3. package/dist/bridges/LiFiBridge.d.ts +93 -0
  4. package/dist/bridges/LiFiBridge.d.ts.map +1 -0
  5. package/dist/bridges/LiFiBridge.js +527 -0
  6. package/dist/bridges/LiFiBridge.js.map +1 -0
  7. package/dist/bridges/LiFiBridge.test.d.ts +2 -0
  8. package/dist/bridges/LiFiBridge.test.d.ts.map +1 -0
  9. package/dist/bridges/LiFiBridge.test.js +504 -0
  10. package/dist/bridges/LiFiBridge.test.js.map +1 -0
  11. package/dist/config/RebalancerConfig.d.ts +20 -0
  12. package/dist/config/RebalancerConfig.d.ts.map +1 -0
  13. package/dist/config/RebalancerConfig.js +35 -0
  14. package/dist/config/RebalancerConfig.js.map +1 -0
  15. package/dist/config/RebalancerConfig.test.d.ts +2 -0
  16. package/dist/config/RebalancerConfig.test.d.ts.map +1 -0
  17. package/dist/config/RebalancerConfig.test.js +798 -0
  18. package/dist/config/RebalancerConfig.test.js.map +1 -0
  19. package/dist/config/types.d.ts +3008 -0
  20. package/dist/config/types.d.ts.map +1 -0
  21. package/dist/config/types.js +451 -0
  22. package/dist/config/types.js.map +1 -0
  23. package/dist/core/InventoryRebalancer.d.ts +201 -0
  24. package/dist/core/InventoryRebalancer.d.ts.map +1 -0
  25. package/dist/core/InventoryRebalancer.js +994 -0
  26. package/dist/core/InventoryRebalancer.js.map +1 -0
  27. package/dist/core/InventoryRebalancer.test.d.ts +2 -0
  28. package/dist/core/InventoryRebalancer.test.d.ts.map +1 -0
  29. package/dist/core/InventoryRebalancer.test.js +1511 -0
  30. package/dist/core/InventoryRebalancer.test.js.map +1 -0
  31. package/dist/core/Rebalancer.d.ts +37 -0
  32. package/dist/core/Rebalancer.d.ts.map +1 -0
  33. package/dist/core/Rebalancer.js +433 -0
  34. package/dist/core/Rebalancer.js.map +1 -0
  35. package/dist/core/Rebalancer.test.d.ts +2 -0
  36. package/dist/core/Rebalancer.test.d.ts.map +1 -0
  37. package/dist/core/Rebalancer.test.js +424 -0
  38. package/dist/core/Rebalancer.test.js.map +1 -0
  39. package/dist/core/RebalancerOrchestrator.d.ts +56 -0
  40. package/dist/core/RebalancerOrchestrator.d.ts.map +1 -0
  41. package/dist/core/RebalancerOrchestrator.js +154 -0
  42. package/dist/core/RebalancerOrchestrator.js.map +1 -0
  43. package/dist/core/RebalancerOrchestrator.test.d.ts +2 -0
  44. package/dist/core/RebalancerOrchestrator.test.d.ts.map +1 -0
  45. package/dist/core/RebalancerOrchestrator.test.js +721 -0
  46. package/dist/core/RebalancerOrchestrator.test.js.map +1 -0
  47. package/dist/core/RebalancerService.d.ts +127 -0
  48. package/dist/core/RebalancerService.d.ts.map +1 -0
  49. package/dist/core/RebalancerService.js +270 -0
  50. package/dist/core/RebalancerService.js.map +1 -0
  51. package/dist/core/RebalancerService.test.d.ts +2 -0
  52. package/dist/core/RebalancerService.test.d.ts.map +1 -0
  53. package/dist/core/RebalancerService.test.js +777 -0
  54. package/dist/core/RebalancerService.test.js.map +1 -0
  55. package/dist/e2e/collateral-deficit.e2e-test.d.ts +2 -0
  56. package/dist/e2e/collateral-deficit.e2e-test.d.ts.map +1 -0
  57. package/dist/e2e/collateral-deficit.e2e-test.js +227 -0
  58. package/dist/e2e/collateral-deficit.e2e-test.js.map +1 -0
  59. package/dist/e2e/composite.e2e-test.d.ts +2 -0
  60. package/dist/e2e/composite.e2e-test.d.ts.map +1 -0
  61. package/dist/e2e/composite.e2e-test.js +666 -0
  62. package/dist/e2e/composite.e2e-test.js.map +1 -0
  63. package/dist/e2e/fixtures/routes.d.ts +89 -0
  64. package/dist/e2e/fixtures/routes.d.ts.map +1 -0
  65. package/dist/e2e/fixtures/routes.js +420 -0
  66. package/dist/e2e/fixtures/routes.js.map +1 -0
  67. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts +38 -0
  68. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -0
  69. package/dist/e2e/harness/BaseLocalDeploymentManager.js +144 -0
  70. package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -0
  71. package/dist/e2e/harness/BridgeSetup.d.ts +11 -0
  72. package/dist/e2e/harness/BridgeSetup.d.ts.map +1 -0
  73. package/dist/e2e/harness/BridgeSetup.js +50 -0
  74. package/dist/e2e/harness/BridgeSetup.js.map +1 -0
  75. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts +13 -0
  76. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -0
  77. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js +105 -0
  78. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -0
  79. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts +11 -0
  80. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -0
  81. package/dist/e2e/harness/Erc20LocalDeploymentManager.js +105 -0
  82. package/dist/e2e/harness/Erc20LocalDeploymentManager.js.map +1 -0
  83. package/dist/e2e/harness/ForkIndexer.d.ts +23 -0
  84. package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -0
  85. package/dist/e2e/harness/ForkIndexer.js +127 -0
  86. package/dist/e2e/harness/ForkIndexer.js.map +1 -0
  87. package/dist/e2e/harness/ForkIndexer.test.d.ts +2 -0
  88. package/dist/e2e/harness/ForkIndexer.test.d.ts.map +1 -0
  89. package/dist/e2e/harness/ForkIndexer.test.js +257 -0
  90. package/dist/e2e/harness/ForkIndexer.test.js.map +1 -0
  91. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts +21 -0
  92. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -0
  93. package/dist/e2e/harness/MixedLocalDeploymentManager.js +115 -0
  94. package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -0
  95. package/dist/e2e/harness/MockExplorerClient.d.ts +23 -0
  96. package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -0
  97. package/dist/e2e/harness/MockExplorerClient.js +57 -0
  98. package/dist/e2e/harness/MockExplorerClient.js.map +1 -0
  99. package/dist/e2e/harness/MockExternalBridge.d.ts +32 -0
  100. package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -0
  101. package/dist/e2e/harness/MockExternalBridge.js +247 -0
  102. package/dist/e2e/harness/MockExternalBridge.js.map +1 -0
  103. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts +13 -0
  104. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -0
  105. package/dist/e2e/harness/NativeLocalDeploymentManager.js +91 -0
  106. package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -0
  107. package/dist/e2e/harness/SnapshotHelper.d.ts +13 -0
  108. package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -0
  109. package/dist/e2e/harness/SnapshotHelper.js +36 -0
  110. package/dist/e2e/harness/SnapshotHelper.js.map +1 -0
  111. package/dist/e2e/harness/TestHelpers.d.ts +25 -0
  112. package/dist/e2e/harness/TestHelpers.d.ts.map +1 -0
  113. package/dist/e2e/harness/TestHelpers.js +103 -0
  114. package/dist/e2e/harness/TestHelpers.js.map +1 -0
  115. package/dist/e2e/harness/TestRebalancer.d.ts +85 -0
  116. package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -0
  117. package/dist/e2e/harness/TestRebalancer.js +427 -0
  118. package/dist/e2e/harness/TestRebalancer.js.map +1 -0
  119. package/dist/e2e/harness/TransferHelper.d.ts +34 -0
  120. package/dist/e2e/harness/TransferHelper.d.ts.map +1 -0
  121. package/dist/e2e/harness/TransferHelper.js +93 -0
  122. package/dist/e2e/harness/TransferHelper.js.map +1 -0
  123. package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts +2 -0
  124. package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts.map +1 -0
  125. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js +411 -0
  126. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js.map +1 -0
  127. package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts +2 -0
  128. package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts.map +1 -0
  129. package/dist/e2e/inventory-erc20-weighted.e2e-test.js +408 -0
  130. package/dist/e2e/inventory-erc20-weighted.e2e-test.js.map +1 -0
  131. package/dist/e2e/inventory-minAmount.e2e-test.d.ts +2 -0
  132. package/dist/e2e/inventory-minAmount.e2e-test.d.ts.map +1 -0
  133. package/dist/e2e/inventory-minAmount.e2e-test.js +411 -0
  134. package/dist/e2e/inventory-minAmount.e2e-test.js.map +1 -0
  135. package/dist/e2e/inventory-weighted.e2e-test.d.ts +2 -0
  136. package/dist/e2e/inventory-weighted.e2e-test.d.ts.map +1 -0
  137. package/dist/e2e/inventory-weighted.e2e-test.js +409 -0
  138. package/dist/e2e/inventory-weighted.e2e-test.js.map +1 -0
  139. package/dist/e2e/minAmount.e2e-test.d.ts +2 -0
  140. package/dist/e2e/minAmount.e2e-test.d.ts.map +1 -0
  141. package/dist/e2e/minAmount.e2e-test.js +203 -0
  142. package/dist/e2e/minAmount.e2e-test.js.map +1 -0
  143. package/dist/e2e/mixed-weighted.e2e-test.d.ts +2 -0
  144. package/dist/e2e/mixed-weighted.e2e-test.d.ts.map +1 -0
  145. package/dist/e2e/mixed-weighted.e2e-test.js +189 -0
  146. package/dist/e2e/mixed-weighted.e2e-test.js.map +1 -0
  147. package/dist/e2e/weighted.e2e-test.d.ts +2 -0
  148. package/dist/e2e/weighted.e2e-test.d.ts.map +1 -0
  149. package/dist/e2e/weighted.e2e-test.js +198 -0
  150. package/dist/e2e/weighted.e2e-test.js.map +1 -0
  151. package/dist/factories/RebalancerContextFactory.d.ts +89 -0
  152. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -0
  153. package/dist/factories/RebalancerContextFactory.js +420 -0
  154. package/dist/factories/RebalancerContextFactory.js.map +1 -0
  155. package/dist/factories/RebalancerContextFactory.test.d.ts +2 -0
  156. package/dist/factories/RebalancerContextFactory.test.d.ts.map +1 -0
  157. package/dist/factories/RebalancerContextFactory.test.js +270 -0
  158. package/dist/factories/RebalancerContextFactory.test.js.map +1 -0
  159. package/dist/index.d.ts +37 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +37 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/interfaces/IExternalBridge.d.ts +103 -0
  164. package/dist/interfaces/IExternalBridge.d.ts.map +1 -0
  165. package/dist/interfaces/IExternalBridge.js +2 -0
  166. package/dist/interfaces/IExternalBridge.js.map +1 -0
  167. package/dist/interfaces/IMetrics.d.ts +5 -0
  168. package/dist/interfaces/IMetrics.d.ts.map +1 -0
  169. package/dist/interfaces/IMetrics.js +2 -0
  170. package/dist/interfaces/IMetrics.js.map +1 -0
  171. package/dist/interfaces/IMonitor.d.ts +50 -0
  172. package/dist/interfaces/IMonitor.d.ts.map +1 -0
  173. package/dist/interfaces/IMonitor.js +14 -0
  174. package/dist/interfaces/IMonitor.js.map +1 -0
  175. package/dist/interfaces/IRebalancer.d.ts +31 -0
  176. package/dist/interfaces/IRebalancer.d.ts.map +1 -0
  177. package/dist/interfaces/IRebalancer.js +2 -0
  178. package/dist/interfaces/IRebalancer.js.map +1 -0
  179. package/dist/interfaces/IStrategy.d.ts +60 -0
  180. package/dist/interfaces/IStrategy.d.ts.map +1 -0
  181. package/dist/interfaces/IStrategy.js +13 -0
  182. package/dist/interfaces/IStrategy.js.map +1 -0
  183. package/dist/metrics/Metrics.d.ts +25 -0
  184. package/dist/metrics/Metrics.d.ts.map +1 -0
  185. package/dist/metrics/Metrics.js +164 -0
  186. package/dist/metrics/Metrics.js.map +1 -0
  187. package/dist/metrics/PriceGetter.d.ts +10 -0
  188. package/dist/metrics/PriceGetter.d.ts.map +1 -0
  189. package/dist/metrics/PriceGetter.js +41 -0
  190. package/dist/metrics/PriceGetter.js.map +1 -0
  191. package/dist/metrics/scripts/metrics.d.ts +28 -0
  192. package/dist/metrics/scripts/metrics.d.ts.map +1 -0
  193. package/dist/metrics/scripts/metrics.js +61 -0
  194. package/dist/metrics/scripts/metrics.js.map +1 -0
  195. package/dist/monitor/Monitor.d.ts +40 -0
  196. package/dist/monitor/Monitor.d.ts.map +1 -0
  197. package/dist/monitor/Monitor.js +211 -0
  198. package/dist/monitor/Monitor.js.map +1 -0
  199. package/dist/service.d.ts +3 -0
  200. package/dist/service.d.ts.map +1 -0
  201. package/dist/service.js +205 -0
  202. package/dist/service.js.map +1 -0
  203. package/dist/strategy/BaseStrategy.d.ts +86 -0
  204. package/dist/strategy/BaseStrategy.d.ts.map +1 -0
  205. package/dist/strategy/BaseStrategy.js +342 -0
  206. package/dist/strategy/BaseStrategy.js.map +1 -0
  207. package/dist/strategy/CollateralDeficitStrategy.d.ts +65 -0
  208. package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -0
  209. package/dist/strategy/CollateralDeficitStrategy.js +253 -0
  210. package/dist/strategy/CollateralDeficitStrategy.js.map +1 -0
  211. package/dist/strategy/CollateralDeficitStrategy.test.d.ts +2 -0
  212. package/dist/strategy/CollateralDeficitStrategy.test.d.ts.map +1 -0
  213. package/dist/strategy/CollateralDeficitStrategy.test.js +497 -0
  214. package/dist/strategy/CollateralDeficitStrategy.test.js.map +1 -0
  215. package/dist/strategy/CompositeStrategy.d.ts +18 -0
  216. package/dist/strategy/CompositeStrategy.d.ts.map +1 -0
  217. package/dist/strategy/CompositeStrategy.js +63 -0
  218. package/dist/strategy/CompositeStrategy.js.map +1 -0
  219. package/dist/strategy/CompositeStrategy.test.d.ts +2 -0
  220. package/dist/strategy/CompositeStrategy.test.d.ts.map +1 -0
  221. package/dist/strategy/CompositeStrategy.test.js +278 -0
  222. package/dist/strategy/CompositeStrategy.test.js.map +1 -0
  223. package/dist/strategy/MinAmountStrategy.d.ts +35 -0
  224. package/dist/strategy/MinAmountStrategy.d.ts.map +1 -0
  225. package/dist/strategy/MinAmountStrategy.js +112 -0
  226. package/dist/strategy/MinAmountStrategy.js.map +1 -0
  227. package/dist/strategy/MinAmountStrategy.test.d.ts +2 -0
  228. package/dist/strategy/MinAmountStrategy.test.d.ts.map +1 -0
  229. package/dist/strategy/MinAmountStrategy.test.js +547 -0
  230. package/dist/strategy/MinAmountStrategy.test.js.map +1 -0
  231. package/dist/strategy/StrategyFactory.d.ts +27 -0
  232. package/dist/strategy/StrategyFactory.d.ts.map +1 -0
  233. package/dist/strategy/StrategyFactory.js +79 -0
  234. package/dist/strategy/StrategyFactory.js.map +1 -0
  235. package/dist/strategy/StrategyFactory.test.d.ts +2 -0
  236. package/dist/strategy/StrategyFactory.test.d.ts.map +1 -0
  237. package/dist/strategy/StrategyFactory.test.js +81 -0
  238. package/dist/strategy/StrategyFactory.test.js.map +1 -0
  239. package/dist/strategy/WeightedStrategy.d.ts +32 -0
  240. package/dist/strategy/WeightedStrategy.d.ts.map +1 -0
  241. package/dist/strategy/WeightedStrategy.js +73 -0
  242. package/dist/strategy/WeightedStrategy.js.map +1 -0
  243. package/dist/strategy/WeightedStrategy.test.d.ts +2 -0
  244. package/dist/strategy/WeightedStrategy.test.d.ts.map +1 -0
  245. package/dist/strategy/WeightedStrategy.test.js +403 -0
  246. package/dist/strategy/WeightedStrategy.test.js.map +1 -0
  247. package/dist/strategy/index.d.ts +7 -0
  248. package/dist/strategy/index.d.ts.map +1 -0
  249. package/dist/strategy/index.js +7 -0
  250. package/dist/strategy/index.js.map +1 -0
  251. package/dist/test/helpers.d.ts +99 -0
  252. package/dist/test/helpers.d.ts.map +1 -0
  253. package/dist/test/helpers.js +311 -0
  254. package/dist/test/helpers.js.map +1 -0
  255. package/dist/test/lifiMocks.d.ts +52 -0
  256. package/dist/test/lifiMocks.d.ts.map +1 -0
  257. package/dist/test/lifiMocks.js +160 -0
  258. package/dist/test/lifiMocks.js.map +1 -0
  259. package/dist/tracking/ActionTracker.d.ts +90 -0
  260. package/dist/tracking/ActionTracker.d.ts.map +1 -0
  261. package/dist/tracking/ActionTracker.js +678 -0
  262. package/dist/tracking/ActionTracker.js.map +1 -0
  263. package/dist/tracking/ActionTracker.test.d.ts +2 -0
  264. package/dist/tracking/ActionTracker.test.d.ts.map +1 -0
  265. package/dist/tracking/ActionTracker.test.js +1351 -0
  266. package/dist/tracking/ActionTracker.test.js.map +1 -0
  267. package/dist/tracking/IActionTracker.d.ts +157 -0
  268. package/dist/tracking/IActionTracker.d.ts.map +1 -0
  269. package/dist/tracking/IActionTracker.js +2 -0
  270. package/dist/tracking/IActionTracker.js.map +1 -0
  271. package/dist/tracking/InflightContextAdapter.d.ts +18 -0
  272. package/dist/tracking/InflightContextAdapter.d.ts.map +1 -0
  273. package/dist/tracking/InflightContextAdapter.js +52 -0
  274. package/dist/tracking/InflightContextAdapter.js.map +1 -0
  275. package/dist/tracking/InflightContextAdapter.test.d.ts +2 -0
  276. package/dist/tracking/InflightContextAdapter.test.d.ts.map +1 -0
  277. package/dist/tracking/InflightContextAdapter.test.js +175 -0
  278. package/dist/tracking/InflightContextAdapter.test.js.map +1 -0
  279. package/dist/tracking/store/IStore.d.ts +41 -0
  280. package/dist/tracking/store/IStore.d.ts.map +1 -0
  281. package/dist/tracking/store/IStore.js +2 -0
  282. package/dist/tracking/store/IStore.js.map +1 -0
  283. package/dist/tracking/store/InMemoryStore.d.ts +21 -0
  284. package/dist/tracking/store/InMemoryStore.d.ts.map +1 -0
  285. package/dist/tracking/store/InMemoryStore.js +40 -0
  286. package/dist/tracking/store/InMemoryStore.js.map +1 -0
  287. package/dist/tracking/store/InMemoryStore.test.d.ts +2 -0
  288. package/dist/tracking/store/InMemoryStore.test.d.ts.map +1 -0
  289. package/dist/tracking/store/InMemoryStore.test.js +290 -0
  290. package/dist/tracking/store/InMemoryStore.test.js.map +1 -0
  291. package/dist/tracking/store/index.d.ts +3 -0
  292. package/dist/tracking/store/index.d.ts.map +1 -0
  293. package/dist/tracking/store/index.js +2 -0
  294. package/dist/tracking/store/index.js.map +1 -0
  295. package/dist/tracking/types.d.ts +77 -0
  296. package/dist/tracking/types.d.ts.map +1 -0
  297. package/dist/tracking/types.js +2 -0
  298. package/dist/tracking/types.js.map +1 -0
  299. package/dist/utils/ExplorerClient.d.ts +68 -0
  300. package/dist/utils/ExplorerClient.d.ts.map +1 -0
  301. package/dist/utils/ExplorerClient.js +324 -0
  302. package/dist/utils/ExplorerClient.js.map +1 -0
  303. package/dist/utils/ExplorerClient.test.d.ts +2 -0
  304. package/dist/utils/ExplorerClient.test.d.ts.map +1 -0
  305. package/dist/utils/ExplorerClient.test.js +261 -0
  306. package/dist/utils/ExplorerClient.test.js.map +1 -0
  307. package/dist/utils/balanceUtils.d.ts +12 -0
  308. package/dist/utils/balanceUtils.d.ts.map +1 -0
  309. package/dist/utils/balanceUtils.js +40 -0
  310. package/dist/utils/balanceUtils.js.map +1 -0
  311. package/dist/utils/balanceUtils.test.d.ts +2 -0
  312. package/dist/utils/balanceUtils.test.d.ts.map +1 -0
  313. package/dist/utils/balanceUtils.test.js +55 -0
  314. package/dist/utils/balanceUtils.test.js.map +1 -0
  315. package/dist/utils/blockTag.d.ts +14 -0
  316. package/dist/utils/blockTag.d.ts.map +1 -0
  317. package/dist/utils/blockTag.js +46 -0
  318. package/dist/utils/blockTag.js.map +1 -0
  319. package/dist/utils/bridgeUtils.d.ts +40 -0
  320. package/dist/utils/bridgeUtils.d.ts.map +1 -0
  321. package/dist/utils/bridgeUtils.js +54 -0
  322. package/dist/utils/bridgeUtils.js.map +1 -0
  323. package/dist/utils/bridgeUtils.test.d.ts +2 -0
  324. package/dist/utils/bridgeUtils.test.d.ts.map +1 -0
  325. package/dist/utils/bridgeUtils.test.js +163 -0
  326. package/dist/utils/bridgeUtils.test.js.map +1 -0
  327. package/dist/utils/errors.d.ts +4 -0
  328. package/dist/utils/errors.d.ts.map +1 -0
  329. package/dist/utils/errors.js +6 -0
  330. package/dist/utils/errors.js.map +1 -0
  331. package/dist/utils/gasEstimation.d.ts +65 -0
  332. package/dist/utils/gasEstimation.d.ts.map +1 -0
  333. package/dist/utils/gasEstimation.js +206 -0
  334. package/dist/utils/gasEstimation.js.map +1 -0
  335. package/dist/utils/solanaKeyParser.d.ts +10 -0
  336. package/dist/utils/solanaKeyParser.d.ts.map +1 -0
  337. package/dist/utils/solanaKeyParser.js +87 -0
  338. package/dist/utils/solanaKeyParser.js.map +1 -0
  339. package/dist/utils/solanaKeyParser.test.d.ts +2 -0
  340. package/dist/utils/solanaKeyParser.test.d.ts.map +1 -0
  341. package/dist/utils/solanaKeyParser.test.js +71 -0
  342. package/dist/utils/solanaKeyParser.test.js.map +1 -0
  343. package/dist/utils/tokenUtils.d.ts +38 -0
  344. package/dist/utils/tokenUtils.d.ts.map +1 -0
  345. package/dist/utils/tokenUtils.js +65 -0
  346. package/dist/utils/tokenUtils.js.map +1 -0
  347. package/dist/utils/transactionUtils.d.ts +22 -0
  348. package/dist/utils/transactionUtils.d.ts.map +1 -0
  349. package/dist/utils/transactionUtils.js +26 -0
  350. package/dist/utils/transactionUtils.js.map +1 -0
  351. package/package.json +87 -3
  352. package/src/bridges/LiFiBridge.test.ts +615 -0
  353. package/src/bridges/LiFiBridge.ts +731 -0
  354. package/src/config/RebalancerConfig.test.ts +921 -0
  355. package/src/config/RebalancerConfig.ts +63 -0
  356. package/src/config/types.ts +613 -0
  357. package/src/core/InventoryRebalancer.test.ts +1858 -0
  358. package/src/core/InventoryRebalancer.ts +1455 -0
  359. package/src/core/Rebalancer.test.ts +686 -0
  360. package/src/core/Rebalancer.ts +686 -0
  361. package/src/core/RebalancerOrchestrator.test.ts +871 -0
  362. package/src/core/RebalancerOrchestrator.ts +273 -0
  363. package/src/core/RebalancerService.test.ts +1094 -0
  364. package/src/core/RebalancerService.ts +412 -0
  365. package/src/e2e/E2E_TEST_CONVENTIONS.md +222 -0
  366. package/src/e2e/collateral-deficit.e2e-test.ts +403 -0
  367. package/src/e2e/composite.e2e-test.ts +1008 -0
  368. package/src/e2e/fixtures/routes.ts +532 -0
  369. package/src/e2e/harness/BaseLocalDeploymentManager.ts +246 -0
  370. package/src/e2e/harness/BridgeSetup.ts +95 -0
  371. package/src/e2e/harness/Erc20InventoryLocalDeploymentManager.ts +183 -0
  372. package/src/e2e/harness/Erc20LocalDeploymentManager.ts +190 -0
  373. package/src/e2e/harness/ForkIndexer.test.ts +448 -0
  374. package/src/e2e/harness/ForkIndexer.ts +183 -0
  375. package/src/e2e/harness/MixedLocalDeploymentManager.ts +196 -0
  376. package/src/e2e/harness/MockExplorerClient.ts +94 -0
  377. package/src/e2e/harness/MockExternalBridge.ts +411 -0
  378. package/src/e2e/harness/NativeLocalDeploymentManager.ts +138 -0
  379. package/src/e2e/harness/SnapshotHelper.ts +56 -0
  380. package/src/e2e/harness/TestHelpers.ts +169 -0
  381. package/src/e2e/harness/TestRebalancer.ts +758 -0
  382. package/src/e2e/harness/TransferHelper.ts +188 -0
  383. package/src/e2e/inventory-erc20-minAmount.e2e-test.ts +735 -0
  384. package/src/e2e/inventory-erc20-weighted.e2e-test.ts +733 -0
  385. package/src/e2e/inventory-minAmount.e2e-test.ts +734 -0
  386. package/src/e2e/inventory-weighted.e2e-test.ts +734 -0
  387. package/src/e2e/minAmount.e2e-test.ts +313 -0
  388. package/src/e2e/mixed-weighted.e2e-test.ts +267 -0
  389. package/src/e2e/weighted.e2e-test.ts +304 -0
  390. package/src/factories/RebalancerContextFactory.test.ts +394 -0
  391. package/src/factories/RebalancerContextFactory.ts +771 -0
  392. package/src/index.ts +125 -0
  393. package/src/interfaces/IExternalBridge.ts +117 -0
  394. package/src/interfaces/IMetrics.ts +5 -0
  395. package/src/interfaces/IMonitor.ts +71 -0
  396. package/src/interfaces/IRebalancer.ts +57 -0
  397. package/src/interfaces/IStrategy.ts +81 -0
  398. package/src/metrics/Metrics.ts +335 -0
  399. package/src/metrics/PriceGetter.ts +74 -0
  400. package/src/metrics/scripts/metrics.ts +139 -0
  401. package/src/monitor/Monitor.ts +324 -0
  402. package/src/service.ts +285 -0
  403. package/src/strategy/BaseStrategy.ts +553 -0
  404. package/src/strategy/CollateralDeficitStrategy.test.ts +728 -0
  405. package/src/strategy/CollateralDeficitStrategy.ts +421 -0
  406. package/src/strategy/CompositeStrategy.test.ts +418 -0
  407. package/src/strategy/CompositeStrategy.ts +102 -0
  408. package/src/strategy/MinAmountStrategy.test.ts +732 -0
  409. package/src/strategy/MinAmountStrategy.ts +200 -0
  410. package/src/strategy/StrategyFactory.test.ts +108 -0
  411. package/src/strategy/StrategyFactory.ts +157 -0
  412. package/src/strategy/WeightedStrategy.test.ts +529 -0
  413. package/src/strategy/WeightedStrategy.ts +126 -0
  414. package/src/strategy/index.ts +6 -0
  415. package/src/test/helpers.ts +477 -0
  416. package/src/test/lifiMocks.ts +211 -0
  417. package/src/tracking/ActionTracker.test.ts +1625 -0
  418. package/src/tracking/ActionTracker.ts +1019 -0
  419. package/src/tracking/IActionTracker.ts +213 -0
  420. package/src/tracking/InflightContextAdapter.test.ts +206 -0
  421. package/src/tracking/InflightContextAdapter.ts +75 -0
  422. package/src/tracking/store/IStore.ts +48 -0
  423. package/src/tracking/store/InMemoryStore.test.ts +338 -0
  424. package/src/tracking/store/InMemoryStore.ts +59 -0
  425. package/src/tracking/store/index.ts +2 -0
  426. package/src/tracking/types.ts +118 -0
  427. package/src/utils/ExplorerClient.test.ts +386 -0
  428. package/src/utils/ExplorerClient.ts +439 -0
  429. package/src/utils/balanceUtils.test.ts +79 -0
  430. package/src/utils/balanceUtils.ts +65 -0
  431. package/src/utils/blockTag.ts +68 -0
  432. package/src/utils/bridgeUtils.test.ts +193 -0
  433. package/src/utils/bridgeUtils.ts +101 -0
  434. package/src/utils/errors.ts +5 -0
  435. package/src/utils/gasEstimation.ts +306 -0
  436. package/src/utils/solanaKeyParser.test.ts +103 -0
  437. package/src/utils/solanaKeyParser.ts +117 -0
  438. package/src/utils/tokenUtils.ts +89 -0
  439. package/src/utils/transactionUtils.ts +41 -0
@@ -0,0 +1,213 @@
1
+ import type { Address, Domain } from '@humanode-hyperlane/utils';
2
+
3
+ import type { ExternalBridgeType } from '../config/types.js';
4
+ import type { ExternalBridgeRegistry } from '../interfaces/IExternalBridge.js';
5
+ import type { ConfirmedBlockTags } from '../interfaces/IMonitor.js';
6
+
7
+ import type {
8
+ ActionType,
9
+ ExecutionMethod,
10
+ PartialInventoryIntent,
11
+ RebalanceAction,
12
+ RebalanceIntent,
13
+ Transfer,
14
+ } from './types.js';
15
+
16
+ export interface CreateRebalanceIntentParams {
17
+ origin: Domain;
18
+ destination: Domain;
19
+ amount: bigint;
20
+ bridge?: Address;
21
+ priority?: number;
22
+ strategyType?: string;
23
+ executionMethod?: ExecutionMethod;
24
+ externalBridge?: ExternalBridgeType;
25
+ }
26
+
27
+ export interface CreateRebalanceActionParams {
28
+ intentId: string;
29
+ origin: Domain;
30
+ destination: Domain;
31
+ amount: bigint;
32
+ type: ActionType; // Required - type of action being created
33
+ messageId?: string; // Optional - not needed for inventory_movement
34
+ txHash?: string;
35
+ externalBridgeTransferId?: string; // Optional - for inventory_movement (external transfer bridge ID)
36
+ externalBridgeId?: ExternalBridgeType; // Optional - for inventory_movement (e.g., 'lifi')
37
+ }
38
+
39
+ /**
40
+ * ActionTracker manages the lifecycle of tracked entities:
41
+ * - Transfers: Inflight user warp transfers
42
+ * - RebalanceIntents: Intents to move collateral
43
+ * - RebalanceActions: On-chain actions to fulfill intents
44
+ */
45
+ export interface IActionTracker {
46
+ // === Lifecycle ===
47
+
48
+ /**
49
+ * Initialize the tracker by loading state from Explorer and on-chain data.
50
+ * Called once on startup.
51
+ */
52
+ initialize(): Promise<void>;
53
+
54
+ // === Sync Operations ===
55
+
56
+ /**
57
+ * Sync inflight user transfers from Explorer and verify delivery status.
58
+ * @param confirmedBlockTags Optional block tags from Monitor for consistent state queries
59
+ */
60
+ syncTransfers(confirmedBlockTags?: ConfirmedBlockTags): Promise<void>;
61
+
62
+ /**
63
+ * Sync rebalance intents by checking fulfillment status.
64
+ */
65
+ syncRebalanceIntents(): Promise<void>;
66
+
67
+ /**
68
+ * Sync rebalance actions by verifying on-chain message delivery.
69
+ * @param confirmedBlockTags Optional block tags from Monitor for consistent state queries
70
+ */
71
+ syncRebalanceActions(confirmedBlockTags?: ConfirmedBlockTags): Promise<void>;
72
+
73
+ /**
74
+ * Sync inventory_movement actions by checking their status via external bridge API.
75
+ * This is separate from syncRebalanceActions because inventory_movement actions
76
+ * don't use Hyperlane messages and need to query the bridge's status API.
77
+ *
78
+ * @param externalBridgeRegistry - Bridge registry to query for status
79
+ * @returns Count of completed and failed actions
80
+ */
81
+ syncInventoryMovementActions(
82
+ externalBridgeRegistry: Partial<ExternalBridgeRegistry>,
83
+ ): Promise<{ completed: number; failed: number }>;
84
+
85
+ // === Transfer Queries ===
86
+
87
+ /**
88
+ * Get a single transfer by ID.
89
+ */
90
+ getTransfer(id: string): Promise<Transfer | undefined>;
91
+
92
+ /**
93
+ * Get all transfers currently in progress.
94
+ */
95
+ getInProgressTransfers(): Promise<Transfer[]>;
96
+
97
+ /**
98
+ * Get all transfers destined for a specific domain.
99
+ */
100
+ getTransfersByDestination(destination: Domain): Promise<Transfer[]>;
101
+
102
+ // === RebalanceIntent Queries ===
103
+
104
+ /**
105
+ * Get a single rebalance intent by ID.
106
+ */
107
+ getRebalanceIntent(id: string): Promise<RebalanceIntent | undefined>;
108
+
109
+ /**
110
+ * Get all active rebalance intents (not_started + in_progress).
111
+ */
112
+ getActiveRebalanceIntents(): Promise<RebalanceIntent[]>;
113
+
114
+ /**
115
+ * Get all rebalance intents destined for a specific domain.
116
+ */
117
+ getRebalanceIntentsByDestination(
118
+ destination: Domain,
119
+ ): Promise<RebalanceIntent[]>;
120
+
121
+ /**
122
+ * Returns inventory intents that have remaining work.
123
+ * Intents with in-flight deposits are included but marked via hasInflightDeposit —
124
+ * callers must check before continuing.
125
+ * Returns enriched data with computed values derived from action states.
126
+ */
127
+ getPartiallyFulfilledInventoryIntents(): Promise<PartialInventoryIntent[]>;
128
+
129
+ // === RebalanceIntent Management ===
130
+
131
+ /**
132
+ * Create a new rebalance intent.
133
+ * Initial status: 'not_started'
134
+ */
135
+ createRebalanceIntent(
136
+ params: CreateRebalanceIntentParams,
137
+ ): Promise<RebalanceIntent>;
138
+
139
+ /**
140
+ * Mark a rebalance intent as complete.
141
+ */
142
+ completeRebalanceIntent(id: string): Promise<void>;
143
+
144
+ /**
145
+ * Cancel a rebalance intent.
146
+ * Used for deliberate stops (e.g., stale fulfillment).
147
+ */
148
+ cancelRebalanceIntent(id: string): Promise<void>;
149
+
150
+ /**
151
+ * Mark a rebalance intent as failed.
152
+ * Used when tx execution was attempted but failed.
153
+ */
154
+ failRebalanceIntent(id: string): Promise<void>;
155
+
156
+ // === RebalanceAction Queries ===
157
+
158
+ /**
159
+ * Get actions filtered by type.
160
+ * @param type - Action type to filter by
161
+ */
162
+ getActionsByType(type: ActionType): Promise<RebalanceAction[]>;
163
+
164
+ /**
165
+ * Get all actions associated with a specific intent.
166
+ * @param intentId - ID of the intent
167
+ */
168
+ getActionsForIntent(intentId: string): Promise<RebalanceAction[]>;
169
+
170
+ /**
171
+ * Get total inflight inventory movement amount from a specific chain.
172
+ * Returns the sum of amounts for all in_progress inventory_movement actions
173
+ * that originate from the specified domain.
174
+ *
175
+ * @param origin - Domain ID of the origin chain
176
+ * @returns Total amount being moved out via inventory movements
177
+ */
178
+ getInflightInventoryMovements(origin: Domain): Promise<bigint>;
179
+
180
+ /**
181
+ * Get a single rebalance action by ID.
182
+ */
183
+ getRebalanceAction(id: string): Promise<RebalanceAction | undefined>;
184
+
185
+ /**
186
+ * Get all rebalance actions currently in progress.
187
+ */
188
+ getInProgressActions(): Promise<RebalanceAction[]>;
189
+
190
+ // === RebalanceAction Management ===
191
+
192
+ createRebalanceAction(
193
+ params: CreateRebalanceActionParams,
194
+ ): Promise<RebalanceAction>;
195
+
196
+ /**
197
+ * Mark a rebalance action as complete.
198
+ * Checks if parent intent is now fully fulfilled and marks it complete if so.
199
+ */
200
+ completeRebalanceAction(id: string): Promise<void>;
201
+
202
+ /**
203
+ * Mark a rebalance action as failed.
204
+ */
205
+ failRebalanceAction(id: string): Promise<void>;
206
+
207
+ // === Debug ===
208
+
209
+ /**
210
+ * Log the contents of all stores for debugging purposes.
211
+ */
212
+ logStoreContents(): Promise<void>;
213
+ }
@@ -0,0 +1,206 @@
1
+ import { expect } from 'chai';
2
+ import Sinon from 'sinon';
3
+
4
+ import type { MultiProvider } from '@humanode-hyperlane/sdk';
5
+
6
+ import type { IActionTracker } from './IActionTracker.js';
7
+ import { InflightContextAdapter } from './InflightContextAdapter.js';
8
+ import type { RebalanceIntent, Transfer } from './types.js';
9
+
10
+ describe('InflightContextAdapter', () => {
11
+ let actionTracker: Sinon.SinonStubbedInstance<IActionTracker>;
12
+ let multiProvider: Sinon.SinonStubbedInstance<MultiProvider>;
13
+ let adapter: InflightContextAdapter;
14
+
15
+ beforeEach(() => {
16
+ actionTracker = {
17
+ getActiveRebalanceIntents: Sinon.stub(),
18
+ getInProgressTransfers: Sinon.stub(),
19
+ getActionsForIntent: Sinon.stub(),
20
+ } as any;
21
+
22
+ multiProvider = {
23
+ getChainName: Sinon.stub(),
24
+ } as any;
25
+
26
+ adapter = new InflightContextAdapter(
27
+ actionTracker as any,
28
+ multiProvider as any,
29
+ );
30
+ });
31
+
32
+ afterEach(() => {
33
+ Sinon.restore();
34
+ });
35
+
36
+ describe('getInflightContext', () => {
37
+ it('should return both pendingRebalances and pendingTransfers', async () => {
38
+ const mockIntents: RebalanceIntent[] = [
39
+ {
40
+ id: 'intent1',
41
+ origin: 1,
42
+ destination: 2,
43
+ amount: 1000n,
44
+ status: 'not_started',
45
+ createdAt: Date.now(),
46
+ updatedAt: Date.now(),
47
+ },
48
+ ];
49
+
50
+ const mockTransfers: Transfer[] = [
51
+ {
52
+ id: 'transfer1',
53
+ origin: 1,
54
+ destination: 2,
55
+ amount: 500n,
56
+ messageId: '0x123',
57
+ sender: '0xabc' as any,
58
+ recipient: '0xdef' as any,
59
+ status: 'in_progress',
60
+ createdAt: Date.now(),
61
+ updatedAt: Date.now(),
62
+ },
63
+ ];
64
+
65
+ actionTracker.getActiveRebalanceIntents.resolves(mockIntents);
66
+ actionTracker.getInProgressTransfers.resolves(mockTransfers);
67
+ actionTracker.getActionsForIntent.resolves([]); // No actions
68
+ multiProvider.getChainName.withArgs(1).returns('ethereum');
69
+ multiProvider.getChainName.withArgs(2).returns('arbitrum');
70
+
71
+ const result = await adapter.getInflightContext();
72
+
73
+ expect(result.pendingRebalances).to.have.lengthOf(1);
74
+ expect(result.pendingRebalances[0]).to.deep.equal({
75
+ origin: 'ethereum',
76
+ destination: 'arbitrum',
77
+ amount: 1000n,
78
+ deliveredAmount: 0n,
79
+ awaitingDeliveryAmount: 0n,
80
+ executionMethod: undefined,
81
+ bridge: undefined,
82
+ });
83
+
84
+ expect(result.pendingTransfers).to.have.lengthOf(1);
85
+ expect(result.pendingTransfers[0]).to.deep.equal({
86
+ origin: 'ethereum',
87
+ destination: 'arbitrum',
88
+ amount: 500n,
89
+ });
90
+ });
91
+
92
+ it('should handle empty arrays', async () => {
93
+ actionTracker.getActiveRebalanceIntents.resolves([]);
94
+ actionTracker.getInProgressTransfers.resolves([]);
95
+
96
+ const result = await adapter.getInflightContext();
97
+
98
+ expect(result.pendingRebalances).to.be.an('array').that.is.empty;
99
+ expect(result.pendingTransfers).to.be.an('array').that.is.empty;
100
+ });
101
+
102
+ it('should correctly convert domain IDs to chain names', async () => {
103
+ const mockIntents: RebalanceIntent[] = [
104
+ {
105
+ id: 'intent1',
106
+ origin: 137,
107
+ destination: 10,
108
+ amount: 2000n,
109
+ status: 'not_started',
110
+ createdAt: Date.now(),
111
+ updatedAt: Date.now(),
112
+ },
113
+ ];
114
+
115
+ const mockTransfers: Transfer[] = [
116
+ {
117
+ id: 'transfer1',
118
+ origin: 137,
119
+ destination: 10,
120
+ amount: 300n,
121
+ messageId: '0x456',
122
+ sender: '0x111' as any,
123
+ recipient: '0x222' as any,
124
+ status: 'in_progress',
125
+ createdAt: Date.now(),
126
+ updatedAt: Date.now(),
127
+ },
128
+ ];
129
+
130
+ actionTracker.getActiveRebalanceIntents.resolves(mockIntents);
131
+ actionTracker.getInProgressTransfers.resolves(mockTransfers);
132
+ actionTracker.getActionsForIntent.resolves([]);
133
+ multiProvider.getChainName.withArgs(137).returns('polygon');
134
+ multiProvider.getChainName.withArgs(10).returns('optimism');
135
+
136
+ const result = await adapter.getInflightContext();
137
+
138
+ expect(result.pendingRebalances[0].origin).to.equal('polygon');
139
+ expect(result.pendingRebalances[0].destination).to.equal('optimism');
140
+ expect(result.pendingTransfers[0].origin).to.equal('polygon');
141
+ expect(result.pendingTransfers[0].destination).to.equal('optimism');
142
+ });
143
+
144
+ it('should handle multiple intents and transfers', async () => {
145
+ const mockIntents: RebalanceIntent[] = [
146
+ {
147
+ id: 'intent1',
148
+ origin: 1,
149
+ destination: 2,
150
+ amount: 1000n,
151
+ status: 'not_started',
152
+ createdAt: Date.now(),
153
+ updatedAt: Date.now(),
154
+ },
155
+ {
156
+ id: 'intent2',
157
+ origin: 2,
158
+ destination: 3,
159
+ amount: 1500n,
160
+ status: 'in_progress',
161
+ createdAt: Date.now(),
162
+ updatedAt: Date.now(),
163
+ },
164
+ ];
165
+
166
+ const mockTransfers: Transfer[] = [
167
+ {
168
+ id: 'transfer1',
169
+ origin: 1,
170
+ destination: 2,
171
+ amount: 500n,
172
+ messageId: '0x123',
173
+ sender: '0xabc' as any,
174
+ recipient: '0xdef' as any,
175
+ status: 'in_progress',
176
+ createdAt: Date.now(),
177
+ updatedAt: Date.now(),
178
+ },
179
+ {
180
+ id: 'transfer2',
181
+ origin: 3,
182
+ destination: 1,
183
+ amount: 750n,
184
+ messageId: '0x789',
185
+ sender: '0x333' as any,
186
+ recipient: '0x444' as any,
187
+ status: 'in_progress',
188
+ createdAt: Date.now(),
189
+ updatedAt: Date.now(),
190
+ },
191
+ ];
192
+
193
+ actionTracker.getActiveRebalanceIntents.resolves(mockIntents);
194
+ actionTracker.getInProgressTransfers.resolves(mockTransfers);
195
+ actionTracker.getActionsForIntent.resolves([]);
196
+ multiProvider.getChainName.withArgs(1).returns('ethereum');
197
+ multiProvider.getChainName.withArgs(2).returns('arbitrum');
198
+ multiProvider.getChainName.withArgs(3).returns('optimism');
199
+
200
+ const result = await adapter.getInflightContext();
201
+
202
+ expect(result.pendingRebalances).to.have.lengthOf(2);
203
+ expect(result.pendingTransfers).to.have.lengthOf(2);
204
+ });
205
+ });
206
+ });
@@ -0,0 +1,75 @@
1
+ import type { MultiProvider } from '@humanode-hyperlane/sdk';
2
+
3
+ import type {
4
+ InflightContext,
5
+ RouteWithContext,
6
+ } from '../interfaces/IStrategy.js';
7
+
8
+ import type { IActionTracker } from './IActionTracker.js';
9
+
10
+ /**
11
+ * Adapter that converts ActionTracker data to strategy-consumable InflightContext.
12
+ * Handles conversion from Domain IDs (used by ActionTracker) to ChainNames (used by Strategy).
13
+ */
14
+ export class InflightContextAdapter {
15
+ constructor(
16
+ private readonly actionTracker: IActionTracker,
17
+ private readonly multiProvider: MultiProvider,
18
+ ) {}
19
+
20
+ /**
21
+ * Get inflight context for strategy decision-making.
22
+ * Includes active rebalance intents and in-progress user transfers.
23
+ */
24
+ async getInflightContext(): Promise<InflightContext> {
25
+ const intents = await this.actionTracker.getActiveRebalanceIntents();
26
+ const transfers = await this.actionTracker.getInProgressTransfers();
27
+
28
+ const pendingRebalances: RouteWithContext[] = await Promise.all(
29
+ intents.map(async (intent) => {
30
+ let deliveredAmount = 0n;
31
+ let awaitingDeliveryAmount = 0n;
32
+
33
+ // For inventory intents, compute delivered and awaiting amounts from actions
34
+ if (intent.executionMethod === 'inventory') {
35
+ const actions = await this.actionTracker.getActionsForIntent(
36
+ intent.id,
37
+ );
38
+
39
+ // Sum of complete inventory_deposit actions (message delivered)
40
+ deliveredAmount = actions
41
+ .filter(
42
+ (a) => a.type === 'inventory_deposit' && a.status === 'complete',
43
+ )
44
+ .reduce((sum, a) => sum + a.amount, 0n);
45
+
46
+ // Sum of in_progress inventory_deposit actions (tx confirmed, message pending)
47
+ awaitingDeliveryAmount = actions
48
+ .filter(
49
+ (a) =>
50
+ a.type === 'inventory_deposit' && a.status === 'in_progress',
51
+ )
52
+ .reduce((sum, a) => sum + a.amount, 0n);
53
+ }
54
+
55
+ return {
56
+ origin: this.multiProvider.getChainName(intent.origin),
57
+ destination: this.multiProvider.getChainName(intent.destination),
58
+ amount: intent.amount,
59
+ deliveredAmount,
60
+ awaitingDeliveryAmount,
61
+ executionMethod: intent.executionMethod,
62
+ bridge: intent.bridge,
63
+ };
64
+ }),
65
+ );
66
+
67
+ const pendingTransfers = transfers.map((transfer) => ({
68
+ origin: this.multiProvider.getChainName(transfer.origin),
69
+ destination: this.multiProvider.getChainName(transfer.destination),
70
+ amount: transfer.amount,
71
+ }));
72
+
73
+ return { pendingRebalances, pendingTransfers };
74
+ }
75
+ }
@@ -0,0 +1,48 @@
1
+ import type { Domain } from '@humanode-hyperlane/utils';
2
+
3
+ import type { TrackedActionBase } from '../types.js';
4
+
5
+ /**
6
+ * Generic store interface for tracking entities.
7
+ * Provides CRUD operations and query methods for any tracked entity type.
8
+ *
9
+ * @template T - The entity type extending TrackedActionBase
10
+ * @template Status - The status enum type for this entity
11
+ */
12
+ export interface IStore<T extends TrackedActionBase, Status extends string> {
13
+ /**
14
+ * Save a new entity or update an existing one.
15
+ */
16
+ save(entity: T): Promise<void>;
17
+
18
+ /**
19
+ * Retrieve an entity by ID.
20
+ */
21
+ get(id: string): Promise<T | undefined>;
22
+
23
+ /**
24
+ * Retrieve all entities.
25
+ */
26
+ getAll(): Promise<T[]>;
27
+
28
+ /**
29
+ * Update an entity with partial data.
30
+ * Automatically updates the `updatedAt` timestamp.
31
+ */
32
+ update(id: string, updates: Partial<T>): Promise<void>;
33
+
34
+ /**
35
+ * Delete an entity by ID.
36
+ */
37
+ delete(id: string): Promise<void>;
38
+
39
+ /**
40
+ * Query entities by status.
41
+ */
42
+ getByStatus(status: Status): Promise<T[]>;
43
+
44
+ /**
45
+ * Query entities by destination domain.
46
+ */
47
+ getByDestination(destination: Domain): Promise<T[]>;
48
+ }