@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,338 @@
1
+ import chai, { expect } from 'chai';
2
+ import chaiAsPromised from 'chai-as-promised';
3
+
4
+ import type { Transfer } from '../types.js';
5
+
6
+ import { InMemoryStore } from './InMemoryStore.js';
7
+
8
+ chai.use(chaiAsPromised);
9
+
10
+ describe('InMemoryStore', () => {
11
+ let store: InMemoryStore<Transfer, 'in_progress' | 'complete'>;
12
+
13
+ beforeEach(() => {
14
+ store = new InMemoryStore<Transfer, 'in_progress' | 'complete'>();
15
+ });
16
+
17
+ describe('save', () => {
18
+ it('should save a new entity', async () => {
19
+ const transfer: Transfer = {
20
+ id: 'transfer-1',
21
+ status: 'in_progress',
22
+ messageId: 'msg-1',
23
+ origin: 1,
24
+ destination: 2,
25
+ amount: 100n,
26
+ sender: '0xsender',
27
+ recipient: '0xrecipient',
28
+ createdAt: Date.now(),
29
+ updatedAt: Date.now(),
30
+ };
31
+
32
+ await store.save(transfer);
33
+
34
+ const retrieved = await store.get('transfer-1');
35
+ expect(retrieved).to.deep.equal(transfer);
36
+ });
37
+
38
+ it('should overwrite an existing entity with the same id', async () => {
39
+ const transfer1: Transfer = {
40
+ id: 'transfer-1',
41
+ status: 'in_progress',
42
+ messageId: 'msg-1',
43
+ origin: 1,
44
+ destination: 2,
45
+ amount: 100n,
46
+ sender: '0xsender',
47
+ recipient: '0xrecipient',
48
+ createdAt: Date.now(),
49
+ updatedAt: Date.now(),
50
+ };
51
+
52
+ const transfer2: Transfer = {
53
+ ...transfer1,
54
+ status: 'complete',
55
+ updatedAt: Date.now() + 1000,
56
+ };
57
+
58
+ await store.save(transfer1);
59
+ await store.save(transfer2);
60
+
61
+ const retrieved = await store.get('transfer-1');
62
+ expect(retrieved?.status).to.equal('complete');
63
+ });
64
+ });
65
+
66
+ describe('get', () => {
67
+ it('should return undefined for non-existent entity', async () => {
68
+ const result = await store.get('non-existent');
69
+ expect(result).to.be.undefined;
70
+ });
71
+
72
+ it('should retrieve an existing entity', async () => {
73
+ const transfer: Transfer = {
74
+ id: 'transfer-1',
75
+ status: 'in_progress',
76
+ messageId: 'msg-1',
77
+ origin: 1,
78
+ destination: 2,
79
+ amount: 100n,
80
+ sender: '0xsender',
81
+ recipient: '0xrecipient',
82
+ createdAt: Date.now(),
83
+ updatedAt: Date.now(),
84
+ };
85
+
86
+ await store.save(transfer);
87
+ const retrieved = await store.get('transfer-1');
88
+
89
+ expect(retrieved).to.deep.equal(transfer);
90
+ });
91
+ });
92
+
93
+ describe('getAll', () => {
94
+ it('should return empty array when no entities exist', async () => {
95
+ const result = await store.getAll();
96
+ expect(result).to.be.an('array').that.is.empty;
97
+ });
98
+
99
+ it('should return all entities', async () => {
100
+ const transfer1: Transfer = {
101
+ id: 'transfer-1',
102
+ status: 'in_progress',
103
+ messageId: 'msg-1',
104
+ origin: 1,
105
+ destination: 2,
106
+ amount: 100n,
107
+ sender: '0xsender1',
108
+ recipient: '0xrecipient1',
109
+ createdAt: Date.now(),
110
+ updatedAt: Date.now(),
111
+ };
112
+
113
+ const transfer2: Transfer = {
114
+ id: 'transfer-2',
115
+ status: 'complete',
116
+ messageId: 'msg-2',
117
+ origin: 2,
118
+ destination: 3,
119
+ amount: 200n,
120
+ sender: '0xsender2',
121
+ recipient: '0xrecipient2',
122
+ createdAt: Date.now(),
123
+ updatedAt: Date.now(),
124
+ };
125
+
126
+ await store.save(transfer1);
127
+ await store.save(transfer2);
128
+
129
+ const result = await store.getAll();
130
+ expect(result).to.have.lengthOf(2);
131
+ expect(result).to.deep.include(transfer1);
132
+ expect(result).to.deep.include(transfer2);
133
+ });
134
+ });
135
+
136
+ describe('update', () => {
137
+ it('should throw error when updating non-existent entity', async () => {
138
+ await expect(
139
+ store.update('non-existent', { status: 'complete' }),
140
+ ).to.be.rejectedWith('Entity non-existent not found');
141
+ });
142
+
143
+ it('should update existing entity', async () => {
144
+ const transfer: Transfer = {
145
+ id: 'transfer-1',
146
+ status: 'in_progress',
147
+ messageId: 'msg-1',
148
+ origin: 1,
149
+ destination: 2,
150
+ amount: 100n,
151
+ sender: '0xsender',
152
+ recipient: '0xrecipient',
153
+ createdAt: Date.now(),
154
+ updatedAt: Date.now(),
155
+ };
156
+
157
+ await store.save(transfer);
158
+ await store.update('transfer-1', { status: 'complete' });
159
+
160
+ const updated = await store.get('transfer-1');
161
+ expect(updated?.status).to.equal('complete');
162
+ expect(updated?.updatedAt).to.be.at.least(transfer.updatedAt);
163
+ });
164
+
165
+ it('should preserve non-updated fields', async () => {
166
+ const transfer: Transfer = {
167
+ id: 'transfer-1',
168
+ status: 'in_progress',
169
+ messageId: 'msg-1',
170
+ origin: 1,
171
+ destination: 2,
172
+ amount: 100n,
173
+ sender: '0xsender',
174
+ recipient: '0xrecipient',
175
+ createdAt: Date.now(),
176
+ updatedAt: Date.now(),
177
+ };
178
+
179
+ await store.save(transfer);
180
+ await store.update('transfer-1', { status: 'complete' });
181
+
182
+ const updated = await store.get('transfer-1');
183
+ expect(updated?.messageId).to.equal('msg-1');
184
+ expect(updated?.origin).to.equal(1);
185
+ expect(updated?.destination).to.equal(2);
186
+ expect(updated?.amount).to.equal(100n);
187
+ });
188
+ });
189
+
190
+ describe('delete', () => {
191
+ it('should delete existing entity', async () => {
192
+ const transfer: Transfer = {
193
+ id: 'transfer-1',
194
+ status: 'in_progress',
195
+ messageId: 'msg-1',
196
+ origin: 1,
197
+ destination: 2,
198
+ amount: 100n,
199
+ sender: '0xsender',
200
+ recipient: '0xrecipient',
201
+ createdAt: Date.now(),
202
+ updatedAt: Date.now(),
203
+ };
204
+
205
+ await store.save(transfer);
206
+ await store.delete('transfer-1');
207
+
208
+ const retrieved = await store.get('transfer-1');
209
+ expect(retrieved).to.be.undefined;
210
+ });
211
+
212
+ it('should not throw when deleting non-existent entity', async () => {
213
+ await expect(store.delete('non-existent')).to.not.be.rejected;
214
+ });
215
+ });
216
+
217
+ describe('getByStatus', () => {
218
+ it('should return empty array when no entities match status', async () => {
219
+ const result = await store.getByStatus('complete');
220
+ expect(result).to.be.an('array').that.is.empty;
221
+ });
222
+
223
+ it('should return only entities with matching status', async () => {
224
+ const transfer1: Transfer = {
225
+ id: 'transfer-1',
226
+ status: 'in_progress',
227
+ messageId: 'msg-1',
228
+ origin: 1,
229
+ destination: 2,
230
+ amount: 100n,
231
+ sender: '0xsender1',
232
+ recipient: '0xrecipient1',
233
+ createdAt: Date.now(),
234
+ updatedAt: Date.now(),
235
+ };
236
+
237
+ const transfer2: Transfer = {
238
+ id: 'transfer-2',
239
+ status: 'complete',
240
+ messageId: 'msg-2',
241
+ origin: 2,
242
+ destination: 3,
243
+ amount: 200n,
244
+ sender: '0xsender2',
245
+ recipient: '0xrecipient2',
246
+ createdAt: Date.now(),
247
+ updatedAt: Date.now(),
248
+ };
249
+
250
+ const transfer3: Transfer = {
251
+ id: 'transfer-3',
252
+ status: 'in_progress',
253
+ messageId: 'msg-3',
254
+ origin: 3,
255
+ destination: 1,
256
+ amount: 300n,
257
+ sender: '0xsender3',
258
+ recipient: '0xrecipient3',
259
+ createdAt: Date.now(),
260
+ updatedAt: Date.now(),
261
+ };
262
+
263
+ await store.save(transfer1);
264
+ await store.save(transfer2);
265
+ await store.save(transfer3);
266
+
267
+ const inProgress = await store.getByStatus('in_progress');
268
+ expect(inProgress).to.have.lengthOf(2);
269
+ expect(inProgress).to.deep.include(transfer1);
270
+ expect(inProgress).to.deep.include(transfer3);
271
+
272
+ const complete = await store.getByStatus('complete');
273
+ expect(complete).to.have.lengthOf(1);
274
+ expect(complete).to.deep.include(transfer2);
275
+ });
276
+ });
277
+
278
+ describe('getByDestination', () => {
279
+ it('should return empty array when no entities match destination', async () => {
280
+ const result = await store.getByDestination(999);
281
+ expect(result).to.be.an('array').that.is.empty;
282
+ });
283
+
284
+ it('should return only entities with matching destination', async () => {
285
+ const transfer1: Transfer = {
286
+ id: 'transfer-1',
287
+ status: 'in_progress',
288
+ messageId: 'msg-1',
289
+ origin: 1,
290
+ destination: 2,
291
+ amount: 100n,
292
+ sender: '0xsender1',
293
+ recipient: '0xrecipient1',
294
+ createdAt: Date.now(),
295
+ updatedAt: Date.now(),
296
+ };
297
+
298
+ const transfer2: Transfer = {
299
+ id: 'transfer-2',
300
+ status: 'complete',
301
+ messageId: 'msg-2',
302
+ origin: 2,
303
+ destination: 3,
304
+ amount: 200n,
305
+ sender: '0xsender2',
306
+ recipient: '0xrecipient2',
307
+ createdAt: Date.now(),
308
+ updatedAt: Date.now(),
309
+ };
310
+
311
+ const transfer3: Transfer = {
312
+ id: 'transfer-3',
313
+ status: 'in_progress',
314
+ messageId: 'msg-3',
315
+ origin: 3,
316
+ destination: 2,
317
+ amount: 300n,
318
+ sender: '0xsender3',
319
+ recipient: '0xrecipient3',
320
+ createdAt: Date.now(),
321
+ updatedAt: Date.now(),
322
+ };
323
+
324
+ await store.save(transfer1);
325
+ await store.save(transfer2);
326
+ await store.save(transfer3);
327
+
328
+ const toDomain2 = await store.getByDestination(2);
329
+ expect(toDomain2).to.have.lengthOf(2);
330
+ expect(toDomain2).to.deep.include(transfer1);
331
+ expect(toDomain2).to.deep.include(transfer3);
332
+
333
+ const toDomain3 = await store.getByDestination(3);
334
+ expect(toDomain3).to.have.lengthOf(1);
335
+ expect(toDomain3).to.deep.include(transfer2);
336
+ });
337
+ });
338
+ });
@@ -0,0 +1,59 @@
1
+ import type { Domain } from '@humanode-hyperlane/utils';
2
+
3
+ import type { TrackedActionBase } from '../types.js';
4
+
5
+ import type { IStore } from './IStore.js';
6
+
7
+ /**
8
+ * In-memory implementation of the IStore interface.
9
+ * Uses a Map for fast lookups and keeps all data in memory.
10
+ *
11
+ * @template T - The entity type extending TrackedActionBase
12
+ * @template Status - The status enum type for this entity
13
+ */
14
+ export class InMemoryStore<
15
+ T extends TrackedActionBase,
16
+ Status extends string,
17
+ > implements IStore<T, Status> {
18
+ protected data: Map<string, T> = new Map();
19
+
20
+ async save(entity: T): Promise<void> {
21
+ this.data.set(entity.id, entity);
22
+ }
23
+
24
+ async get(id: string): Promise<T | undefined> {
25
+ return this.data.get(id);
26
+ }
27
+
28
+ async getAll(): Promise<T[]> {
29
+ return Array.from(this.data.values());
30
+ }
31
+
32
+ async update(id: string, updates: Partial<T>): Promise<void> {
33
+ const existing = this.data.get(id);
34
+ if (!existing) {
35
+ throw new Error(`Entity ${id} not found`);
36
+ }
37
+ this.data.set(id, {
38
+ ...existing,
39
+ ...updates,
40
+ updatedAt: Date.now(),
41
+ } as T);
42
+ }
43
+
44
+ async delete(id: string): Promise<void> {
45
+ this.data.delete(id);
46
+ }
47
+
48
+ async getByStatus(status: Status): Promise<T[]> {
49
+ return Array.from(this.data.values()).filter(
50
+ (entity) => entity.status === status,
51
+ );
52
+ }
53
+
54
+ async getByDestination(destination: Domain): Promise<T[]> {
55
+ return Array.from(this.data.values()).filter(
56
+ (entity) => entity.destination === destination,
57
+ );
58
+ }
59
+ }
@@ -0,0 +1,2 @@
1
+ export type { IStore } from './IStore.js';
2
+ export { InMemoryStore } from './InMemoryStore.js';
@@ -0,0 +1,118 @@
1
+ import type { Address, Domain } from '@humanode-hyperlane/utils';
2
+
3
+ import type { ExternalBridgeType } from '../config/types.js';
4
+ import type { BridgeTransferStatus } from '../interfaces/IExternalBridge.js';
5
+
6
+ import type { IStore } from './store/IStore.js';
7
+
8
+ // === Base Interfaces ===
9
+
10
+ export interface Identifiable {
11
+ id: string;
12
+ }
13
+
14
+ export interface CrossChainAction {
15
+ origin: Domain;
16
+ destination: Domain;
17
+ amount: bigint;
18
+ }
19
+
20
+ export interface Timestamped {
21
+ createdAt: number;
22
+ updatedAt: number;
23
+ }
24
+
25
+ export interface TrackedActionBase
26
+ extends Identifiable, CrossChainAction, Timestamped {
27
+ status: string;
28
+ }
29
+
30
+ // === Status Types ===
31
+
32
+ export type TransferStatus = 'in_progress' | 'complete';
33
+ export type RebalanceIntentStatus =
34
+ | 'not_started'
35
+ | 'in_progress'
36
+ | 'complete'
37
+ | 'cancelled'
38
+ | 'failed';
39
+ export type RebalanceActionStatus = 'in_progress' | 'complete' | 'failed';
40
+
41
+ // === Execution Types ===
42
+
43
+ /**
44
+ * Execution method for rebalancing:
45
+ * - `movable_collateral`: Uses MovableCollateralRouter.rebalance() on-chain
46
+ * - `inventory`: Uses external bridges + transferRemote
47
+ */
48
+ export type ExecutionMethod = 'movable_collateral' | 'inventory';
49
+
50
+ /**
51
+ * Type of rebalance action:
52
+ * - `rebalance_message`: Standard movable collateral rebalance (Hyperlane message)
53
+ * - `inventory_movement`: External bridge transfer (e.g., LiFi) to move inventory
54
+ * - `inventory_deposit`: transferRemote to deposit inventory as collateral
55
+ */
56
+ export type ActionType =
57
+ | 'rebalance_message'
58
+ | 'inventory_movement'
59
+ | 'inventory_deposit';
60
+
61
+ // === Entity Types ===
62
+
63
+ export interface Transfer extends TrackedActionBase {
64
+ status: TransferStatus;
65
+ messageId: string;
66
+ sender: Address;
67
+ recipient: Address;
68
+ }
69
+
70
+ export interface RebalanceIntent extends TrackedActionBase {
71
+ status: RebalanceIntentStatus;
72
+ bridge?: Address; // Optional - bridge contract used (missing for recovered intents)
73
+ priority?: number; // Optional - missing for recovered intents
74
+ strategyType?: string; // Optional - missing for recovered intents
75
+ executionMethod?: ExecutionMethod; // Optional - defaults to movable_collateral
76
+ externalBridge?: ExternalBridgeType; // Optional - external bridge type (e.g., LiFi)
77
+ }
78
+
79
+ export interface RebalanceAction extends TrackedActionBase {
80
+ status: RebalanceActionStatus;
81
+ type: ActionType; // Type of action (rebalance_message, inventory_movement, inventory_deposit)
82
+ intentId: string; // Links to parent RebalanceIntent
83
+ messageId?: string; // Hyperlane message ID (required for rebalance_message, inventory_deposit)
84
+ txHash?: string; // Origin transaction hash
85
+ // Fields for inventory_movement (external bridge)
86
+ externalBridgeTransferId?: string; // External bridge transfer ID (e.g., LiFi transfer ID)
87
+ externalBridgeId?: ExternalBridgeType; // External bridge identifier (e.g., 'lifi')
88
+ lastBridgeStatus?: BridgeTransferStatus['status']; // Last observed external bridge status
89
+ nonPendingSince?: number; // Timestamp when bridge status first became non-pending
90
+ }
91
+
92
+ // === Type Aliases for Stores ===
93
+
94
+ export type ITransferStore = IStore<Transfer, TransferStatus>;
95
+ export type IRebalanceIntentStore = IStore<
96
+ RebalanceIntent,
97
+ RebalanceIntentStatus
98
+ >;
99
+ export type IRebalanceActionStore = IStore<
100
+ RebalanceAction,
101
+ RebalanceActionStatus
102
+ >;
103
+
104
+ // === Derived Types ===
105
+
106
+ /**
107
+ * Represents an inventory intent that has been partially fulfilled
108
+ * and can continue execution. Values are derived from action states.
109
+ */
110
+ export interface PartialInventoryIntent {
111
+ intent: RebalanceIntent;
112
+ /** Sum of complete inventory_deposit action amounts */
113
+ completedAmount: bigint;
114
+ /** Amount remaining to fulfill (0n when final deposit is fully in-flight). Formula: intent.amount - completedAmount - inflightAmount */
115
+ remaining: bigint;
116
+ /** True when intent has in_progress inventory_deposit actions (not safe to continue, but still active) */
117
+ hasInflightDeposit: boolean;
118
+ }