@humanode-hyperlane/rebalancer 27.2.2 → 1029.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/bridges/LiFiBridge.d.ts +3 -3
  2. package/dist/bridges/LiFiBridge.d.ts.map +1 -1
  3. package/dist/bridges/LiFiBridge.js +66 -55
  4. package/dist/bridges/LiFiBridge.js.map +1 -1
  5. package/dist/bridges/LiFiBridge.test.js +213 -0
  6. package/dist/bridges/LiFiBridge.test.js.map +1 -1
  7. package/dist/config/RebalancerConfig.d.ts +4 -3
  8. package/dist/config/RebalancerConfig.d.ts.map +1 -1
  9. package/dist/config/RebalancerConfig.js +7 -5
  10. package/dist/config/RebalancerConfig.js.map +1 -1
  11. package/dist/config/RebalancerConfig.test.js +278 -2
  12. package/dist/config/RebalancerConfig.test.js.map +1 -1
  13. package/dist/config/types.d.ts +707 -2664
  14. package/dist/config/types.d.ts.map +1 -1
  15. package/dist/config/types.js +62 -7
  16. package/dist/config/types.js.map +1 -1
  17. package/dist/core/InventoryRebalancer.d.ts +13 -19
  18. package/dist/core/InventoryRebalancer.d.ts.map +1 -1
  19. package/dist/core/InventoryRebalancer.js +404 -276
  20. package/dist/core/InventoryRebalancer.js.map +1 -1
  21. package/dist/core/InventoryRebalancer.test.js +814 -25
  22. package/dist/core/InventoryRebalancer.test.js.map +1 -1
  23. package/dist/core/Rebalancer.d.ts.map +1 -1
  24. package/dist/core/Rebalancer.js +12 -6
  25. package/dist/core/Rebalancer.js.map +1 -1
  26. package/dist/core/Rebalancer.test.js +51 -0
  27. package/dist/core/Rebalancer.test.js.map +1 -1
  28. package/dist/core/RebalancerOrchestrator.d.ts.map +1 -1
  29. package/dist/core/RebalancerOrchestrator.test.js +0 -1
  30. package/dist/core/RebalancerOrchestrator.test.js.map +1 -1
  31. package/dist/core/RebalancerService.d.ts.map +1 -1
  32. package/dist/core/RebalancerService.js +3 -2
  33. package/dist/core/RebalancerService.js.map +1 -1
  34. package/dist/core/RebalancerService.test.js +24 -0
  35. package/dist/core/RebalancerService.test.js.map +1 -1
  36. package/dist/e2e/fixtures/routes.d.ts +3 -3
  37. package/dist/e2e/fixtures/routes.d.ts.map +1 -1
  38. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -1
  39. package/dist/e2e/harness/BaseLocalDeploymentManager.js +3 -2
  40. package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -1
  41. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -1
  42. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -1
  43. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -1
  44. package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -1
  45. package/dist/e2e/harness/ForkIndexer.js.map +1 -1
  46. package/dist/e2e/harness/LocalProvider.d.ts +3 -0
  47. package/dist/e2e/harness/LocalProvider.d.ts.map +1 -0
  48. package/dist/e2e/harness/LocalProvider.js +9 -0
  49. package/dist/e2e/harness/LocalProvider.js.map +1 -0
  50. package/dist/e2e/harness/LocalProvider.test.d.ts +2 -0
  51. package/dist/e2e/harness/LocalProvider.test.d.ts.map +1 -0
  52. package/dist/e2e/harness/LocalProvider.test.js +14 -0
  53. package/dist/e2e/harness/LocalProvider.test.js.map +1 -0
  54. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -1
  55. package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -1
  56. package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -1
  57. package/dist/e2e/harness/MockExplorerClient.js.map +1 -1
  58. package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -1
  59. package/dist/e2e/harness/MockExternalBridge.js.map +1 -1
  60. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -1
  61. package/dist/e2e/harness/NativeLocalDeploymentManager.js +2 -1
  62. package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -1
  63. package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -1
  64. package/dist/e2e/harness/SnapshotHelper.js +3 -5
  65. package/dist/e2e/harness/SnapshotHelper.js.map +1 -1
  66. package/dist/e2e/harness/TestHelpers.js +1 -2
  67. package/dist/e2e/harness/TestHelpers.js.map +1 -1
  68. package/dist/e2e/harness/TestRebalancer.d.ts +5 -1
  69. package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -1
  70. package/dist/e2e/harness/TestRebalancer.js +14 -4
  71. package/dist/e2e/harness/TestRebalancer.js.map +1 -1
  72. package/dist/e2e/relayer-denylist.e2e-test.d.ts +2 -0
  73. package/dist/e2e/relayer-denylist.e2e-test.d.ts.map +1 -0
  74. package/dist/e2e/relayer-denylist.e2e-test.js +388 -0
  75. package/dist/e2e/relayer-denylist.e2e-test.js.map +1 -0
  76. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -1
  77. package/dist/factories/RebalancerContextFactory.js +61 -31
  78. package/dist/factories/RebalancerContextFactory.js.map +1 -1
  79. package/dist/factories/RebalancerContextFactory.test.js +336 -5
  80. package/dist/factories/RebalancerContextFactory.test.js.map +1 -1
  81. package/dist/index.d.ts +2 -2
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/interfaces/IRebalancer.d.ts +4 -2
  86. package/dist/interfaces/IRebalancer.d.ts.map +1 -1
  87. package/dist/metrics/Metrics.d.ts.map +1 -1
  88. package/dist/metrics/Metrics.js +1 -1
  89. package/dist/metrics/Metrics.js.map +1 -1
  90. package/dist/metrics/PriceGetter.d.ts +1 -0
  91. package/dist/metrics/PriceGetter.d.ts.map +1 -1
  92. package/dist/metrics/PriceGetter.js +14 -4
  93. package/dist/metrics/PriceGetter.js.map +1 -1
  94. package/dist/metrics/PriceGetter.test.d.ts +2 -0
  95. package/dist/metrics/PriceGetter.test.d.ts.map +1 -0
  96. package/dist/metrics/PriceGetter.test.js +84 -0
  97. package/dist/metrics/PriceGetter.test.js.map +1 -0
  98. package/dist/metrics/scripts/metrics.d.ts +4 -4
  99. package/dist/monitor/Monitor.d.ts +1 -0
  100. package/dist/monitor/Monitor.d.ts.map +1 -1
  101. package/dist/monitor/Monitor.js +55 -46
  102. package/dist/monitor/Monitor.js.map +1 -1
  103. package/dist/monitor/Monitor.test.d.ts +2 -0
  104. package/dist/monitor/Monitor.test.d.ts.map +1 -0
  105. package/dist/monitor/Monitor.test.js +346 -0
  106. package/dist/monitor/Monitor.test.js.map +1 -0
  107. package/dist/service.d.ts +1 -1
  108. package/dist/service.d.ts.map +1 -1
  109. package/dist/service.js +9 -5
  110. package/dist/service.js.map +1 -1
  111. package/dist/strategy/BaseStrategy.d.ts.map +1 -1
  112. package/dist/strategy/BaseStrategy.js +13 -11
  113. package/dist/strategy/BaseStrategy.js.map +1 -1
  114. package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -1
  115. package/dist/strategy/CollateralDeficitStrategy.js +2 -2
  116. package/dist/strategy/CollateralDeficitStrategy.js.map +1 -1
  117. package/dist/strategy/CompositeStrategy.d.ts.map +1 -1
  118. package/dist/strategy/CompositeStrategy.js.map +1 -1
  119. package/dist/strategy/CompositeStrategy.test.js.map +1 -1
  120. package/dist/strategy/MinAmountStrategy.d.ts +1 -0
  121. package/dist/strategy/MinAmountStrategy.d.ts.map +1 -1
  122. package/dist/strategy/MinAmountStrategy.js +12 -8
  123. package/dist/strategy/MinAmountStrategy.js.map +1 -1
  124. package/dist/strategy/MinAmountStrategy.test.js +189 -2
  125. package/dist/strategy/MinAmountStrategy.test.js.map +1 -1
  126. package/dist/strategy/StrategyFactory.d.ts.map +1 -1
  127. package/dist/strategy/StrategyFactory.js.map +1 -1
  128. package/dist/strategy/WeightedStrategy.d.ts.map +1 -1
  129. package/dist/test/helpers.d.ts +11 -3
  130. package/dist/test/helpers.d.ts.map +1 -1
  131. package/dist/test/helpers.js +9 -11
  132. package/dist/test/helpers.js.map +1 -1
  133. package/dist/test/lifiMocks.d.ts +6 -6
  134. package/dist/test/lifiMocks.d.ts.map +1 -1
  135. package/dist/test/lifiMocks.js +5 -2
  136. package/dist/test/lifiMocks.js.map +1 -1
  137. package/dist/test/pendingTransferMiddlewareMocks.d.ts +17 -0
  138. package/dist/test/pendingTransferMiddlewareMocks.d.ts.map +1 -0
  139. package/dist/test/pendingTransferMiddlewareMocks.js +43 -0
  140. package/dist/test/pendingTransferMiddlewareMocks.js.map +1 -0
  141. package/dist/tracking/ActionTracker.d.ts +4 -0
  142. package/dist/tracking/ActionTracker.d.ts.map +1 -1
  143. package/dist/tracking/ActionTracker.js +76 -9
  144. package/dist/tracking/ActionTracker.js.map +1 -1
  145. package/dist/tracking/ActionTracker.test.js +418 -1
  146. package/dist/tracking/ActionTracker.test.js.map +1 -1
  147. package/dist/tracking/IActionTracker.d.ts +4 -2
  148. package/dist/tracking/IActionTracker.d.ts.map +1 -1
  149. package/dist/tracking/InflightContextAdapter.d.ts.map +1 -1
  150. package/dist/tracking/InflightContextAdapter.js.map +1 -1
  151. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.d.ts +64 -0
  152. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.d.ts.map +1 -0
  153. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.js +474 -0
  154. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.js.map +1 -0
  155. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.d.ts +2 -0
  156. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.d.ts.map +1 -0
  157. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.js +1168 -0
  158. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.js.map +1 -0
  159. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.d.ts +61 -0
  160. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.d.ts.map +1 -0
  161. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.js +160 -0
  162. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.js.map +1 -0
  163. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.d.ts +2 -0
  164. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.d.ts.map +1 -0
  165. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.js +369 -0
  166. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.js.map +1 -0
  167. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.d.ts +60 -0
  168. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.d.ts.map +1 -0
  169. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.js +288 -0
  170. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.js.map +1 -0
  171. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.d.ts +2 -0
  172. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.d.ts.map +1 -0
  173. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.js +606 -0
  174. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.js.map +1 -0
  175. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.d.ts +25 -0
  176. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.d.ts.map +1 -0
  177. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.js +41 -0
  178. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.js.map +1 -0
  179. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.d.ts +2 -0
  180. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.d.ts.map +1 -0
  181. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.js +141 -0
  182. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.js.map +1 -0
  183. package/dist/tracking/pendingTransferMiddlewares/matchBody.d.ts +12 -0
  184. package/dist/tracking/pendingTransferMiddlewares/matchBody.d.ts.map +1 -0
  185. package/dist/tracking/pendingTransferMiddlewares/matchBody.js +29 -0
  186. package/dist/tracking/pendingTransferMiddlewares/matchBody.js.map +1 -0
  187. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.d.ts +59 -0
  188. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.d.ts.map +1 -0
  189. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.js +661 -0
  190. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.js.map +1 -0
  191. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.d.ts +2 -0
  192. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.d.ts.map +1 -0
  193. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.js +1093 -0
  194. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.js.map +1 -0
  195. package/dist/tracking/pendingTransferMiddlewares/types.d.ts +2 -0
  196. package/dist/tracking/pendingTransferMiddlewares/types.d.ts.map +1 -0
  197. package/dist/tracking/pendingTransferMiddlewares/types.js +4 -0
  198. package/dist/tracking/pendingTransferMiddlewares/types.js.map +1 -0
  199. package/dist/tracking/store/InMemoryStore.d.ts.map +1 -1
  200. package/dist/utils/ExplorerClient.d.ts +1 -0
  201. package/dist/utils/ExplorerClient.d.ts.map +1 -1
  202. package/dist/utils/ExplorerClient.js +8 -3
  203. package/dist/utils/ExplorerClient.js.map +1 -1
  204. package/dist/utils/ExplorerClient.test.js +25 -0
  205. package/dist/utils/ExplorerClient.test.js.map +1 -1
  206. package/dist/utils/balanceUtils.d.ts +7 -1
  207. package/dist/utils/balanceUtils.d.ts.map +1 -1
  208. package/dist/utils/balanceUtils.js +39 -1
  209. package/dist/utils/balanceUtils.js.map +1 -1
  210. package/dist/utils/balanceUtils.test.js +55 -1
  211. package/dist/utils/balanceUtils.test.js.map +1 -1
  212. package/dist/utils/blockTag.d.ts +5 -4
  213. package/dist/utils/blockTag.d.ts.map +1 -1
  214. package/dist/utils/blockTag.js +26 -10
  215. package/dist/utils/blockTag.js.map +1 -1
  216. package/dist/utils/blockTag.test.d.ts +2 -0
  217. package/dist/utils/blockTag.test.d.ts.map +1 -0
  218. package/dist/utils/blockTag.test.js +132 -0
  219. package/dist/utils/blockTag.test.js.map +1 -0
  220. package/dist/utils/bridgeUtils.js.map +1 -1
  221. package/dist/utils/errors.d.ts.map +1 -1
  222. package/dist/utils/gasEstimation.d.ts +2 -1
  223. package/dist/utils/gasEstimation.d.ts.map +1 -1
  224. package/dist/utils/gasEstimation.js +16 -13
  225. package/dist/utils/gasEstimation.js.map +1 -1
  226. package/dist/utils/gasEstimation.test.d.ts +2 -0
  227. package/dist/utils/gasEstimation.test.d.ts.map +1 -0
  228. package/dist/utils/gasEstimation.test.js +104 -0
  229. package/dist/utils/gasEstimation.test.js.map +1 -0
  230. package/dist/utils/tokenUtils.d.ts.map +1 -1
  231. package/dist/utils/tokenUtils.js +5 -2
  232. package/dist/utils/tokenUtils.js.map +1 -1
  233. package/package.json +23 -22
  234. package/src/bridges/LiFiBridge.test.ts +270 -0
  235. package/src/bridges/LiFiBridge.ts +90 -71
  236. package/src/config/RebalancerConfig.test.ts +315 -1
  237. package/src/config/RebalancerConfig.ts +6 -3
  238. package/src/config/types.ts +98 -8
  239. package/src/core/InventoryRebalancer.test.ts +1092 -38
  240. package/src/core/InventoryRebalancer.ts +584 -351
  241. package/src/core/Rebalancer.test.ts +84 -0
  242. package/src/core/Rebalancer.ts +22 -6
  243. package/src/core/RebalancerOrchestrator.test.ts +0 -1
  244. package/src/core/RebalancerService.test.ts +35 -0
  245. package/src/core/RebalancerService.ts +3 -2
  246. package/src/e2e/harness/BaseLocalDeploymentManager.ts +3 -1
  247. package/src/e2e/harness/LocalProvider.test.ts +16 -0
  248. package/src/e2e/harness/LocalProvider.ts +10 -0
  249. package/src/e2e/harness/NativeLocalDeploymentManager.ts +2 -1
  250. package/src/e2e/harness/SnapshotHelper.ts +2 -5
  251. package/src/e2e/harness/TestHelpers.ts +3 -3
  252. package/src/e2e/harness/TestRebalancer.ts +21 -1
  253. package/src/e2e/relayer-denylist.e2e-test.ts +558 -0
  254. package/src/factories/RebalancerContextFactory.test.ts +489 -8
  255. package/src/factories/RebalancerContextFactory.ts +86 -36
  256. package/src/index.ts +2 -0
  257. package/src/interfaces/IRebalancer.ts +4 -1
  258. package/src/metrics/Metrics.ts +1 -0
  259. package/src/metrics/PriceGetter.test.ts +113 -0
  260. package/src/metrics/PriceGetter.ts +18 -3
  261. package/src/monitor/Monitor.test.ts +408 -0
  262. package/src/monitor/Monitor.ts +123 -97
  263. package/src/service.ts +14 -8
  264. package/src/strategy/BaseStrategy.ts +18 -15
  265. package/src/strategy/CollateralDeficitStrategy.ts +4 -3
  266. package/src/strategy/MinAmountStrategy.test.ts +238 -2
  267. package/src/strategy/MinAmountStrategy.ts +29 -17
  268. package/src/test/helpers.ts +13 -12
  269. package/src/test/lifiMocks.ts +5 -2
  270. package/src/test/pendingTransferMiddlewareMocks.ts +65 -0
  271. package/src/tracking/ActionTracker.test.ts +635 -3
  272. package/src/tracking/ActionTracker.ts +92 -12
  273. package/src/tracking/IActionTracker.ts +4 -2
  274. package/src/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.ts +1693 -0
  275. package/src/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.ts +784 -0
  276. package/src/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.ts +554 -0
  277. package/src/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.ts +233 -0
  278. package/src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.ts +894 -0
  279. package/src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.ts +404 -0
  280. package/src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.ts +205 -0
  281. package/src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.ts +89 -0
  282. package/src/tracking/pendingTransferMiddlewares/fixtures/mainnet-denylist.json +3556 -0
  283. package/src/tracking/pendingTransferMiddlewares/matchBody.ts +43 -0
  284. package/src/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.ts +1220 -0
  285. package/src/tracking/pendingTransferMiddlewares/relayerDenylistRules.ts +934 -0
  286. package/src/tracking/pendingTransferMiddlewares/types.ts +3 -0
  287. package/src/utils/ExplorerClient.test.ts +42 -0
  288. package/src/utils/ExplorerClient.ts +14 -3
  289. package/src/utils/balanceUtils.test.ts +87 -1
  290. package/src/utils/balanceUtils.ts +73 -2
  291. package/src/utils/blockTag.test.ts +173 -0
  292. package/src/utils/blockTag.ts +35 -15
  293. package/src/utils/gasEstimation.test.ts +192 -0
  294. package/src/utils/gasEstimation.ts +17 -11
  295. package/src/utils/tokenUtils.ts +5 -2
@@ -0,0 +1,288 @@
1
+ import { open } from 'node:fs/promises';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { assert, sleep, timeout } from '@humanode-hyperlane/utils';
4
+ import { PendingTransferMiddlewareType } from '../../config/types.js';
5
+ import { PendingTransferMiddleware } from './PendingTransferMiddleware.js';
6
+ import { DenylistLoadError, DenylistLoadFailure, findDenyReason, findMessageIdDenyReason, parseDenylistFile, } from './relayerDenylistRules.js';
7
+ import { normalizeMessageId } from './types.js';
8
+ export const FETCH_TIMEOUT_MS = 10_000;
9
+ /** Startup fetch attempts and the delay between them, as in the relayer. */
10
+ const INITIAL_LOAD_ATTEMPTS = 3;
11
+ export const INITIAL_LOAD_RETRY_DELAY_MS = 2_000;
12
+ /** The relayer's limit on a denylist file, in bytes. */
13
+ export const MAX_DENYLIST_FILE_BYTES = 4 * 1024 * 1024;
14
+ export const RELAYER_DENYLIST_REFRESH_FAILED_MESSAGE = 'Relayer denylist refresh failed, keeping last good rules';
15
+ export const RELAYER_DENYLIST_INITIAL_LOAD_RETRY_MESSAGE = 'Failed to fetch relayer denylist at startup, retrying';
16
+ export const RELAYER_DENYLIST_CHECK_FAILED_MESSAGE = 'Failed to check pending transfer against relayer denylist, keeping it';
17
+ /** Drops credentials, query and fragment, which may carry a token. */
18
+ export function redactUrl(url) {
19
+ const parsed = new URL(url);
20
+ return parsed.protocol === 'file:'
21
+ ? `file://${parsed.pathname}`
22
+ : `${parsed.protocol}//${parsed.host}${parsed.pathname}`;
23
+ }
24
+ /** Removes the URL and its secret-bearing parts from an error message. */
25
+ function scrubUrl(message, url) {
26
+ let scrubbed = message.split(url.href).join(redactUrl(url.href));
27
+ for (const secret of [url.username, url.password, url.search]) {
28
+ if (secret)
29
+ scrubbed = scrubbed.split(secret).join('[redacted]');
30
+ }
31
+ return scrubbed;
32
+ }
33
+ function fileTooLarge(bytes) {
34
+ return new Error(`Denylist file is at least ${bytes} bytes; the limit is ${MAX_DENYLIST_FILE_BYTES}`);
35
+ }
36
+ /**
37
+ * Decodes like the relayer's serde_json parser: invalid UTF-8 is an invalid
38
+ * file, and a leading BOM is kept so `JSON.parse` rejects it.
39
+ */
40
+ function decodeUtf8(bytes) {
41
+ try {
42
+ return new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
43
+ }
44
+ catch (error) {
45
+ if (!(error instanceof TypeError))
46
+ throw error;
47
+ throw new DenylistLoadError(DenylistLoadFailure.InvalidFile, 'Invalid denylist JSON: not valid UTF-8');
48
+ }
49
+ }
50
+ /** Reads at most one byte past the relayer's limit, rejecting a larger file. */
51
+ async function readFileCapped(path) {
52
+ const file = await open(path);
53
+ try {
54
+ const buffer = Buffer.alloc(MAX_DENYLIST_FILE_BYTES + 1);
55
+ let bytes = 0;
56
+ while (bytes < buffer.length) {
57
+ const { bytesRead } = await file.read(buffer, bytes, buffer.length - bytes);
58
+ if (bytesRead === 0)
59
+ break;
60
+ bytes += bytesRead;
61
+ }
62
+ if (bytes > MAX_DENYLIST_FILE_BYTES)
63
+ throw fileTooLarge(bytes);
64
+ return buffer.subarray(0, bytes);
65
+ }
66
+ finally {
67
+ await file.close();
68
+ }
69
+ }
70
+ /**
71
+ * Reads at most the relayer's limit, rejecting a larger body before buffering
72
+ * it. Cancels the body once `signal` aborts, as a fetch wrapper may not.
73
+ */
74
+ async function readBodyCapped(response, signal) {
75
+ const length = Number(response.headers.get('content-length'));
76
+ if (length > MAX_DENYLIST_FILE_BYTES)
77
+ throw fileTooLarge(length);
78
+ const chunks = [];
79
+ let bytes = 0;
80
+ const reader = response.body?.getReader();
81
+ // A rejected cancel means the stream already errored, which ends the read too.
82
+ const cancel = () => {
83
+ void reader?.cancel().catch(() => { });
84
+ };
85
+ if (signal.aborted)
86
+ cancel();
87
+ else
88
+ signal.addEventListener('abort', cancel, { once: true });
89
+ while (reader) {
90
+ const { done, value } = await reader.read();
91
+ if (done)
92
+ break;
93
+ bytes += value.byteLength;
94
+ if (bytes > MAX_DENYLIST_FILE_BYTES) {
95
+ await reader.cancel();
96
+ throw fileTooLarge(bytes);
97
+ }
98
+ chunks.push(value);
99
+ }
100
+ return Buffer.concat(chunks);
101
+ }
102
+ async function fetchBodyCapped(url, signal) {
103
+ const response = await fetch(url, { signal });
104
+ if (!response.ok) {
105
+ throw new Error(`HTTP status ${response.status}`);
106
+ }
107
+ return readBodyCapped(response, signal);
108
+ }
109
+ async function readDenylistBytes(url) {
110
+ switch (url.protocol) {
111
+ case 'file:':
112
+ return readFileCapped(fileURLToPath(url));
113
+ case 'http:':
114
+ case 'https:': {
115
+ // The timer settles the load even if the fetch ignores the abort.
116
+ const controller = new AbortController();
117
+ try {
118
+ return await timeout(fetchBodyCapped(url, controller.signal), FETCH_TIMEOUT_MS, `Denylist fetch timed out after ${FETCH_TIMEOUT_MS} ms`);
119
+ }
120
+ finally {
121
+ controller.abort();
122
+ }
123
+ }
124
+ default:
125
+ throw new Error(`Unsupported denylist URL protocol ${url.protocol}`);
126
+ }
127
+ }
128
+ export async function fetchDenylistFile(url) {
129
+ let bytes;
130
+ try {
131
+ bytes = await readDenylistBytes(url);
132
+ }
133
+ catch (error) {
134
+ throw new DenylistLoadError(DenylistLoadFailure.FetchFailed, scrubUrl(error instanceof Error ? error.message : String(error), url));
135
+ }
136
+ return decodeUtf8(bytes);
137
+ }
138
+ async function loadRules(source, logger) {
139
+ const rules = parseDenylistFile(await fetchDenylistFile(source.url));
140
+ logger.debug({
141
+ url: source.redactedUrl,
142
+ matchRules: rules.matchRules.length,
143
+ addressRules: rules.addressRules.length,
144
+ }, 'Loaded relayer denylist');
145
+ return rules;
146
+ }
147
+ function loadFailure(error) {
148
+ return error instanceof DenylistLoadError
149
+ ? error.failure
150
+ : DenylistLoadFailure.FetchFailed;
151
+ }
152
+ /** Retries fetch failures only: an invalid file stays invalid. */
153
+ async function loadInitialRules(source, logger) {
154
+ for (let attempt = 1;; attempt++) {
155
+ try {
156
+ return await loadRules(source, logger);
157
+ }
158
+ catch (error) {
159
+ if (attempt >= INITIAL_LOAD_ATTEMPTS ||
160
+ loadFailure(error) !== DenylistLoadFailure.FetchFailed) {
161
+ throw error;
162
+ }
163
+ logger.warn({
164
+ url: source.redactedUrl,
165
+ attempt,
166
+ error: error instanceof Error ? error.message : String(error),
167
+ }, RELAYER_DENYLIST_INITIAL_LOAD_RETRY_MESSAGE);
168
+ await sleep(INITIAL_LOAD_RETRY_DELAY_MS);
169
+ }
170
+ }
171
+ }
172
+ /**
173
+ * Ignores messages the relayer's runtime denylist blocks. `create()` loads the
174
+ * file; it is re-fetched once `refreshIntervalMs` has passed, and a failed
175
+ * refresh keeps the last good rules.
176
+ *
177
+ * `address` rules are checked against the Explorer's `origin_tx_sender`, the
178
+ * origin transaction's fee payer, where the relayer checks every origin
179
+ * transaction signer. A denied depositor whose transaction another account
180
+ * paid for (e.g. a sponsored Sealevel transfer) is therefore not ignored and
181
+ * stays reserved.
182
+ *
183
+ * The relayer also skips its signer check, so it may deliver a message this
184
+ * middleware ignores for its `origin_tx_sender` alone, when no dispatch tx
185
+ * hash is stored (Cosmos block-level events, an old DB backlog, a zero hash),
186
+ * the origin tx is not found (pruned or reorged out), the sender is zero
187
+ * (Radix, Aleo) or the lookup keeps failing for about 8 minutes
188
+ * (rust/main/agents/relayer/src/msg/pending_message.rs and
189
+ * runtime_denylist.rs).
190
+ *
191
+ * Only `match` rules that set nothing but `messageId` apply to the
192
+ * rebalancer's own rebalance messages, which then stop counting as incoming
193
+ * collateral. Deny a rebalance message only once its funds settled another
194
+ * way; otherwise the rebalancer sends a replacement.
195
+ */
196
+ export class RelayerDenylistMiddleware extends PendingTransferMiddleware {
197
+ source;
198
+ rules;
199
+ loadedAt;
200
+ lastAttemptAt;
201
+ refreshing;
202
+ constructor(inner, source, rules, loadedAt) {
203
+ super(inner, PendingTransferMiddlewareType.RelayerDenylist);
204
+ this.source = source;
205
+ this.rules = rules;
206
+ this.loadedAt = loadedAt;
207
+ this.lastAttemptAt = loadedAt;
208
+ }
209
+ /**
210
+ * Loads the denylist, retrying fetch failures. Throws if it still cannot be
211
+ * fetched or is invalid.
212
+ */
213
+ static async create(inner, options, logger) {
214
+ const url = new URL(options.url);
215
+ const redactedUrl = redactUrl(options.url);
216
+ assert(url.username === '' && url.password === '', `Relayer denylist url ${redactedUrl} must not contain credentials`);
217
+ const source = {
218
+ url,
219
+ redactedUrl,
220
+ refreshIntervalMs: options.refreshIntervalMs,
221
+ };
222
+ let rules;
223
+ try {
224
+ rules = await loadInitialRules(source, logger);
225
+ }
226
+ catch (error) {
227
+ const message = error instanceof Error ? error.message : String(error);
228
+ throw new Error(`Failed to load relayer denylist from ${redactedUrl} (${loadFailure(error)}): ${message}`);
229
+ }
230
+ return new RelayerDenylistMiddleware(inner, source, rules, Date.now());
231
+ }
232
+ async findIgnored(messages, logger) {
233
+ await this.refreshIfStale(logger);
234
+ const now = Date.now();
235
+ const ignored = new Map();
236
+ for (const msg of messages) {
237
+ try {
238
+ const reason = findDenyReason(this.rules, msg, now);
239
+ if (reason !== undefined) {
240
+ ignored.set(normalizeMessageId(msg.msg_id), reason);
241
+ }
242
+ }
243
+ catch (error) {
244
+ logger.warn({
245
+ msgId: msg.msg_id,
246
+ error: error instanceof Error ? error.message : String(error),
247
+ }, RELAYER_DENYLIST_CHECK_FAILED_MESSAGE);
248
+ }
249
+ }
250
+ return ignored;
251
+ }
252
+ isIgnoredRebalanceAction(messageId) {
253
+ return (findMessageIdDenyReason(this.rules, messageId, Date.now()) !==
254
+ undefined || super.isIgnoredRebalanceAction(messageId));
255
+ }
256
+ // Keeps the rules `isIgnoredRebalanceAction` reads fresh; rows pass through.
257
+ async getInflightRebalanceActions(params, logger) {
258
+ await this.refreshIfStale(logger);
259
+ return super.getInflightRebalanceActions(params, logger);
260
+ }
261
+ refreshIfStale(logger) {
262
+ if (this.refreshing)
263
+ return this.refreshing;
264
+ if (Date.now() - this.lastAttemptAt < this.source.refreshIntervalMs) {
265
+ return Promise.resolve();
266
+ }
267
+ this.lastAttemptAt = Date.now();
268
+ this.refreshing = this.reload(logger).finally(() => {
269
+ this.refreshing = undefined;
270
+ });
271
+ return this.refreshing;
272
+ }
273
+ async reload(logger) {
274
+ try {
275
+ this.rules = await loadRules(this.source, logger);
276
+ this.loadedAt = Date.now();
277
+ }
278
+ catch (error) {
279
+ logger.warn({
280
+ url: this.source.redactedUrl,
281
+ failure: loadFailure(error),
282
+ cachedRulesAgeSecs: Math.floor((Date.now() - this.loadedAt) / 1000),
283
+ error: error instanceof Error ? error.message : String(error),
284
+ }, RELAYER_DENYLIST_REFRESH_FAILED_MESSAGE);
285
+ }
286
+ }
287
+ }
288
+ //# sourceMappingURL=RelayerDenylistMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelayerDenylistMiddleware.js","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RelayerDenylistMiddleware.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelayerDenylistMiddleware.test.d.ts","sourceRoot":"","sources":["../../../src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.ts"],"names":[],"mappings":""}