@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,103 @@
1
+ import { expect } from 'chai';
2
+
3
+ import { Keypair } from '@solana/web3.js';
4
+ import bs58 from 'bs58';
5
+
6
+ import { parseSolanaPrivateKey } from './solanaKeyParser.js';
7
+
8
+ describe('parseSolanaPrivateKey', () => {
9
+ it('parses valid 64-byte JSON array', () => {
10
+ const bytes = Array.from({ length: 64 }, (_, i) => i);
11
+ const parsed = parseSolanaPrivateKey(JSON.stringify(bytes));
12
+
13
+ expect(parsed).to.be.instanceOf(Uint8Array);
14
+ expect(Array.from(parsed)).to.deep.equal(bytes);
15
+ expect(parsed).to.have.length(64);
16
+ });
17
+
18
+ it('parses valid 64-byte comma-separated', () => {
19
+ const bytes = Array.from({ length: 64 }, (_, i) => i);
20
+ const parsed = parseSolanaPrivateKey(bytes.join(','));
21
+
22
+ expect(Array.from(parsed)).to.deep.equal(bytes);
23
+ expect(parsed).to.have.length(64);
24
+ });
25
+
26
+ it('parses valid 32-byte seed JSON array and expands to 64 bytes', () => {
27
+ const seed = Array.from({ length: 32 }, (_, i) => i);
28
+ const parsed = parseSolanaPrivateKey(JSON.stringify(seed));
29
+ const expected = Keypair.fromSeed(Uint8Array.from(seed)).secretKey;
30
+
31
+ expect(parsed).to.have.length(64);
32
+ expect(Array.from(parsed)).to.deep.equal(Array.from(expected));
33
+ });
34
+
35
+ it('parses valid 32-byte seed comma-separated and expands to 64 bytes', () => {
36
+ const seed = Array.from({ length: 32 }, (_, i) => i + 1);
37
+ const parsed = parseSolanaPrivateKey(seed.join(','));
38
+ const expected = Keypair.fromSeed(Uint8Array.from(seed)).secretKey;
39
+
40
+ expect(parsed).to.have.length(64);
41
+ expect(Array.from(parsed)).to.deep.equal(Array.from(expected));
42
+ });
43
+
44
+ it('throws on "1,2,abc,4" (non-numeric)', () => {
45
+ expect(() => parseSolanaPrivateKey('1,2,abc,4')).to.throw(
46
+ 'Comma-separated byte at index 2 is not numeric.',
47
+ );
48
+ });
49
+
50
+ it('throws on empty string', () => {
51
+ expect(() => parseSolanaPrivateKey(' ')).to.throw('Input is empty.');
52
+ });
53
+
54
+ it('throws on "256,1,2" (out of range)', () => {
55
+ expect(() => parseSolanaPrivateKey('256,1,2')).to.throw(
56
+ 'Comma-separated byte at index 0 must be in range 0..255.',
57
+ );
58
+ });
59
+
60
+ it('throws on "-1,1,2" (negative)', () => {
61
+ expect(() => parseSolanaPrivateKey('-1,1,2')).to.throw(
62
+ 'Comma-separated byte at index 0 must be in range 0..255.',
63
+ );
64
+ });
65
+
66
+ it('throws on "1.5,2,3" (non-integer)', () => {
67
+ expect(() => parseSolanaPrivateKey('1.5,2,3')).to.throw(
68
+ 'Comma-separated byte at index 0 must be an integer.',
69
+ );
70
+ });
71
+
72
+ it('throws on 10-byte array (wrong length)', () => {
73
+ const tenBytes = JSON.stringify(Array.from({ length: 10 }, (_, i) => i));
74
+ expect(() => parseSolanaPrivateKey(tenBytes)).to.throw(
75
+ 'Received 10 bytes; expected exactly 32 or 64.',
76
+ );
77
+ });
78
+
79
+ it('error message contains HYP_INVENTORY_KEY_SEALEVEL', () => {
80
+ expect(() => parseSolanaPrivateKey('not-a-key')).to.throw(
81
+ 'HYP_INVENTORY_KEY_SEALEVEL',
82
+ );
83
+ });
84
+
85
+ it('parses valid base58-encoded 64-byte key', () => {
86
+ const bytes = Array.from({ length: 64 }, (_, i) => i);
87
+ const base58Key = bs58.encode(Uint8Array.from(bytes));
88
+ const parsed = parseSolanaPrivateKey(base58Key);
89
+
90
+ expect(Array.from(parsed)).to.deep.equal(bytes);
91
+ expect(parsed).to.have.length(64);
92
+ });
93
+
94
+ it('parses valid base58-encoded 32-byte seed and expands to 64 bytes', () => {
95
+ const seed = Array.from({ length: 32 }, (_, i) => i + 1);
96
+ const base58Seed = bs58.encode(Uint8Array.from(seed));
97
+ const parsed = parseSolanaPrivateKey(base58Seed);
98
+ const expected = Keypair.fromSeed(Uint8Array.from(seed)).secretKey;
99
+
100
+ expect(parsed).to.have.length(64);
101
+ expect(Array.from(parsed)).to.deep.equal(Array.from(expected));
102
+ });
103
+ });
@@ -0,0 +1,117 @@
1
+ import { Keypair } from '@solana/web3.js';
2
+ import bs58 from 'bs58';
3
+
4
+ const SOLANA_KEY_ERROR_MESSAGE =
5
+ 'Invalid Solana private key format. Expected JSON byte array, comma-separated bytes, or base58 key (32 or 64 bytes). Set HYP_INVENTORY_KEY_SEALEVEL env var.';
6
+
7
+ function throwInvalidSolanaKey(reason: string): never {
8
+ throw new Error(`${SOLANA_KEY_ERROR_MESSAGE} ${reason}`);
9
+ }
10
+
11
+ function validateKeyLength(bytes: number[]): void {
12
+ if (bytes.length !== 32 && bytes.length !== 64) {
13
+ throwInvalidSolanaKey(
14
+ `Received ${bytes.length} bytes; expected exactly 32 or 64.`,
15
+ );
16
+ }
17
+ }
18
+
19
+ function toSecretKey(bytes: number[]): Uint8Array {
20
+ validateKeyLength(bytes);
21
+ if (bytes.length === 32) {
22
+ return Keypair.fromSeed(Uint8Array.from(bytes)).secretKey;
23
+ }
24
+ return Uint8Array.from(bytes);
25
+ }
26
+
27
+ /**
28
+ * Parses a Solana private key from various formats.
29
+ * Supports JSON array format, comma-separated byte values, and base58 values.
30
+ *
31
+ * @param rawKey - Raw private key string in JSON array, comma-separated, or base58 format
32
+ * @returns Uint8Array representation of the private key
33
+ * @throws Error if the key format is invalid
34
+ */
35
+ export function parseSolanaPrivateKey(rawKey: string): Uint8Array {
36
+ const trimmed = rawKey.trim();
37
+ if (trimmed === '') {
38
+ throwInvalidSolanaKey('Input is empty.');
39
+ }
40
+
41
+ try {
42
+ if (trimmed.startsWith('[')) {
43
+ const parsed: unknown = JSON.parse(trimmed);
44
+ if (!Array.isArray(parsed)) {
45
+ throwInvalidSolanaKey('JSON input must be an array of bytes.');
46
+ }
47
+
48
+ const bytes = parsed.map((value, index) => {
49
+ if (!Number.isInteger(value)) {
50
+ throwInvalidSolanaKey(
51
+ `JSON byte at index ${index} must be an integer.`,
52
+ );
53
+ }
54
+ if (value < 0 || value > 255) {
55
+ throwInvalidSolanaKey(
56
+ `JSON byte at index ${index} must be in range 0..255.`,
57
+ );
58
+ }
59
+ return value;
60
+ });
61
+
62
+ return toSecretKey(bytes);
63
+ }
64
+
65
+ if (trimmed.includes(',')) {
66
+ const bytes = trimmed.split(',').map((segment, index) => {
67
+ const segmentTrimmed = segment.trim();
68
+ if (segmentTrimmed === '') {
69
+ throwInvalidSolanaKey(
70
+ `Comma-separated byte at index ${index} is empty.`,
71
+ );
72
+ }
73
+
74
+ const value = Number(segmentTrimmed);
75
+ if (!Number.isFinite(value)) {
76
+ throwInvalidSolanaKey(
77
+ `Comma-separated byte at index ${index} is not numeric.`,
78
+ );
79
+ }
80
+ if (!Number.isInteger(value)) {
81
+ throwInvalidSolanaKey(
82
+ `Comma-separated byte at index ${index} must be an integer.`,
83
+ );
84
+ }
85
+ if (value < 0 || value > 255) {
86
+ throwInvalidSolanaKey(
87
+ `Comma-separated byte at index ${index} must be in range 0..255.`,
88
+ );
89
+ }
90
+
91
+ return value;
92
+ });
93
+
94
+ return toSecretKey(bytes);
95
+ }
96
+
97
+ try {
98
+ const decoded = bs58.decode(trimmed);
99
+ const bytes = Array.from(decoded);
100
+ return toSecretKey(bytes);
101
+ } catch {
102
+ // bs58 decode failed, fall through to outer catch
103
+ }
104
+ } catch (error) {
105
+ if (
106
+ error instanceof Error &&
107
+ error.message.includes(SOLANA_KEY_ERROR_MESSAGE)
108
+ ) {
109
+ throw error;
110
+ }
111
+ throwInvalidSolanaKey('Failed to parse key input.');
112
+ }
113
+
114
+ throwInvalidSolanaKey(
115
+ 'Failed to match supported format (JSON array, comma-separated bytes, or base58 key).',
116
+ );
117
+ }
@@ -0,0 +1,89 @@
1
+ import { ProtocolType, assert } from '@humanode-hyperlane/utils';
2
+
3
+ import type { ExternalBridgeType } from '../config/types.js';
4
+
5
+ import {
6
+ PROTOCOL_TO_HYP_NATIVE_STANDARD,
7
+ type Token,
8
+ TokenStandard,
9
+ } from '@humanode-hyperlane/sdk';
10
+
11
+ const REBALANCEABLE_TOKEN_COLLATERALIZED_STANDARDS = new Set<TokenStandard>([
12
+ TokenStandard.EvmHypCollateral,
13
+ TokenStandard.EvmHypNative,
14
+ TokenStandard.SealevelHypCollateral,
15
+ TokenStandard.SealevelHypNative,
16
+ ]);
17
+
18
+ // SDK-backed native token standard check scoped to EVM and Sealevel only (2-protocol scope).
19
+ // NOTE: We intentionally do NOT use the full PROTOCOL_TO_HYP_NATIVE_STANDARD map (all 7 protocols)
20
+ // because the rebalancer only supports EVM and Sealevel native token bridging.
21
+ // Expanding this would change gas reservation behavior for other protocols.
22
+ const REBALANCER_NATIVE_STANDARDS = new Set([
23
+ PROTOCOL_TO_HYP_NATIVE_STANDARD[ProtocolType.Ethereum],
24
+ PROTOCOL_TO_HYP_NATIVE_STANDARD[ProtocolType.Sealevel],
25
+ ]);
26
+
27
+ /**
28
+ * Check if a token's balance is the same as native gas balance.
29
+ * For these tokens, we must reserve funds for IGP when calculating max transferable.
30
+ *
31
+ * @param standard - The token standard to check.
32
+ * @returns `true` if the token is a native token standard, `false` otherwise.
33
+ */
34
+ export function isNativeTokenStandard(standard: TokenStandard): boolean {
35
+ return REBALANCER_NATIVE_STANDARDS.has(standard);
36
+ }
37
+
38
+ /**
39
+ * @dev This function exists because the rebalancer currently only supports a subset of collateralized token standards
40
+ * (see `REBALANCEABLE_TOKEN_COLLATERALIZED_STANDARDS` vs. all possible `TOKEN_COLLATERALIZED_STANDARDS`).
41
+ *
42
+ * @deprecated This function is conditionally deprecated. It is intended for removal once the rebalancer
43
+ * achieves full support for all collateralized token standards.
44
+ * After this condition is met and this function is removed, please use `token.isCollateralized()` as the alternative.
45
+ *
46
+ * @param token - The token to be checked for rebalancing eligibility.
47
+ * @returns `true` if the token is of a collateralized standard currently supported by the rebalancer, `false` otherwise.
48
+ */
49
+ export function isCollateralizedTokenEligibleForRebalancing(
50
+ token: Token,
51
+ ): boolean {
52
+ return (
53
+ token.isCollateralized() &&
54
+ REBALANCEABLE_TOKEN_COLLATERALIZED_STANDARDS.has(token.standard)
55
+ );
56
+ }
57
+
58
+ /**
59
+ * Resolves the correct token address for external bridges (e.g. LiFi).
60
+ *
61
+ * For warp route tokens, `addressOrDenom` is the warp router contract address,
62
+ * NOT the underlying token. External bridges need the actual token address:
63
+ * - Native tokens (EvmHypNative, SealevelHypNative): Use the bridge's native token representation
64
+ * - Collateral tokens (EvmHypCollateral, SealevelHypCollateral): Use `collateralAddressOrDenom` (the underlying token)
65
+ * - Synthetic tokens: `collateralAddressOrDenom` is undefined, `addressOrDenom` IS the token
66
+ *
67
+ * @param token - The warp route token to resolve
68
+ * @param externalBridgeType - The type of external bridge (e.g. 'lifi')
69
+ * @param getNativeTokenAddress - Function to get the bridge's native token representation
70
+ * @returns The correct token address for the external bridge
71
+ */
72
+ export function getExternalBridgeTokenAddress(
73
+ token: Token,
74
+ externalBridgeType: ExternalBridgeType,
75
+ getNativeTokenAddress: (type: ExternalBridgeType) => string,
76
+ ): string {
77
+ if (isNativeTokenStandard(token.standard)) {
78
+ return getNativeTokenAddress(externalBridgeType);
79
+ }
80
+
81
+ if (token.collateralAddressOrDenom) return token.collateralAddressOrDenom;
82
+
83
+ assert(
84
+ !REBALANCEABLE_TOKEN_COLLATERALIZED_STANDARDS.has(token.standard),
85
+ `Missing collateralAddressOrDenom for collateralized token on ${token.chainName} (${token.standard})`,
86
+ );
87
+
88
+ return token.addressOrDenom;
89
+ }
@@ -0,0 +1,41 @@
1
+ import {
2
+ assert,
3
+ type KnownProtocolType,
4
+ type ProtocolType,
5
+ } from '@humanode-hyperlane/utils';
6
+ import {
7
+ PROTOCOL_TO_DEFAULT_PROVIDER_TYPE,
8
+ type ProtocolTypedTransaction,
9
+ type WarpTypedTransaction,
10
+ } from '@humanode-hyperlane/sdk';
11
+
12
+ /**
13
+ * Runtime-validated cast from WarpTypedTransaction to ProtocolTypedTransaction.
14
+ * WarpTypedTransaction extends TypedTransaction but ProtocolTypedTransaction
15
+ * only covers known protocol types.
16
+ * Safe at runtime because WarpCore only produces default-provider transactions.
17
+ *
18
+ * The double-cast (as unknown as) is unavoidable due to TypeScript's type narrowing
19
+ * limitations: WarpTypedTransaction is a union of all protocol transaction types,
20
+ * and ProtocolTypedTransaction<P> is a conditional/mapped type. Even after the
21
+ * runtime assert() proves type safety, TypeScript cannot narrow the union across
22
+ * this structural boundary. The cast is safe because the assert validates the
23
+ * transaction type matches the expected protocol at runtime.
24
+ *
25
+ * @param tx - The transaction to cast
26
+ * @param expectedProtocol - The expected protocol type
27
+ * @returns The transaction cast to ProtocolTypedTransaction
28
+ * @throws Error if the transaction type doesn't match the expected protocol
29
+ */
30
+ export function toProtocolTransaction(
31
+ tx: WarpTypedTransaction,
32
+ expectedProtocol: ProtocolType,
33
+ ): ProtocolTypedTransaction<ProtocolType> {
34
+ const expectedType =
35
+ PROTOCOL_TO_DEFAULT_PROVIDER_TYPE[expectedProtocol as KnownProtocolType];
36
+ assert(
37
+ expectedType && tx.type === expectedType,
38
+ `Transaction type ${tx.type} doesn't match expected protocol ${expectedProtocol} (expected ${expectedType})`,
39
+ );
40
+ return tx as unknown as ProtocolTypedTransaction<ProtocolType>;
41
+ }