@hyperlane-xyz/rebalancer 0.1.2 → 1.0.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 (223) hide show
  1. package/README.md +134 -14
  2. package/dist/config/RebalancerConfig.d.ts +2 -2
  3. package/dist/config/RebalancerConfig.d.ts.map +1 -1
  4. package/dist/config/RebalancerConfig.js +4 -3
  5. package/dist/config/RebalancerConfig.js.map +1 -1
  6. package/dist/config/RebalancerConfig.test.js +434 -163
  7. package/dist/config/RebalancerConfig.test.js.map +1 -1
  8. package/dist/config/types.d.ts +1650 -290
  9. package/dist/config/types.d.ts.map +1 -1
  10. package/dist/config/types.js +124 -46
  11. package/dist/config/types.js.map +1 -1
  12. package/dist/core/Rebalancer.d.ts +14 -7
  13. package/dist/core/Rebalancer.d.ts.map +1 -1
  14. package/dist/core/Rebalancer.js +168 -99
  15. package/dist/core/Rebalancer.js.map +1 -1
  16. package/dist/core/Rebalancer.test.d.ts +2 -0
  17. package/dist/core/Rebalancer.test.d.ts.map +1 -0
  18. package/dist/core/Rebalancer.test.js +391 -0
  19. package/dist/core/Rebalancer.test.js.map +1 -0
  20. package/dist/core/RebalancerService.d.ts +16 -2
  21. package/dist/core/RebalancerService.d.ts.map +1 -1
  22. package/dist/core/RebalancerService.js +164 -21
  23. package/dist/core/RebalancerService.js.map +1 -1
  24. package/dist/core/RebalancerService.test.d.ts +2 -0
  25. package/dist/core/RebalancerService.test.d.ts.map +1 -0
  26. package/dist/core/RebalancerService.test.js +809 -0
  27. package/dist/core/RebalancerService.test.js.map +1 -0
  28. package/dist/factories/RebalancerContextFactory.d.ts +11 -0
  29. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -1
  30. package/dist/factories/RebalancerContextFactory.js +60 -13
  31. package/dist/factories/RebalancerContextFactory.js.map +1 -1
  32. package/dist/index.d.ts +6 -6
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -3
  35. package/dist/index.js.map +1 -1
  36. package/dist/interfaces/IMonitor.d.ts +6 -8
  37. package/dist/interfaces/IMonitor.d.ts.map +1 -1
  38. package/dist/interfaces/IMonitor.js.map +1 -1
  39. package/dist/interfaces/IRebalancer.d.ts +20 -4
  40. package/dist/interfaces/IRebalancer.d.ts.map +1 -1
  41. package/dist/interfaces/IStrategy.d.ts +18 -2
  42. package/dist/interfaces/IStrategy.d.ts.map +1 -1
  43. package/dist/metrics/Metrics.d.ts +4 -2
  44. package/dist/metrics/Metrics.d.ts.map +1 -1
  45. package/dist/metrics/Metrics.js +21 -1
  46. package/dist/metrics/Metrics.js.map +1 -1
  47. package/dist/metrics/scripts/metrics.d.ts +2 -0
  48. package/dist/metrics/scripts/metrics.d.ts.map +1 -1
  49. package/dist/metrics/scripts/metrics.js +12 -0
  50. package/dist/metrics/scripts/metrics.js.map +1 -1
  51. package/dist/monitor/Monitor.d.ts +8 -3
  52. package/dist/monitor/Monitor.d.ts.map +1 -1
  53. package/dist/monitor/Monitor.js +75 -15
  54. package/dist/monitor/Monitor.js.map +1 -1
  55. package/dist/strategy/BaseStrategy.d.ts +51 -5
  56. package/dist/strategy/BaseStrategy.d.ts.map +1 -1
  57. package/dist/strategy/BaseStrategy.js +199 -19
  58. package/dist/strategy/BaseStrategy.js.map +1 -1
  59. package/dist/strategy/CollateralDeficitStrategy.d.ts +65 -0
  60. package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -0
  61. package/dist/strategy/CollateralDeficitStrategy.js +245 -0
  62. package/dist/strategy/CollateralDeficitStrategy.js.map +1 -0
  63. package/dist/strategy/CollateralDeficitStrategy.test.d.ts +2 -0
  64. package/dist/strategy/CollateralDeficitStrategy.test.d.ts.map +1 -0
  65. package/dist/strategy/CollateralDeficitStrategy.test.js +364 -0
  66. package/dist/strategy/CollateralDeficitStrategy.test.js.map +1 -0
  67. package/dist/strategy/CompositeStrategy.d.ts +18 -0
  68. package/dist/strategy/CompositeStrategy.d.ts.map +1 -0
  69. package/dist/strategy/CompositeStrategy.js +63 -0
  70. package/dist/strategy/CompositeStrategy.js.map +1 -0
  71. package/dist/strategy/CompositeStrategy.test.d.ts +2 -0
  72. package/dist/strategy/CompositeStrategy.test.d.ts.map +1 -0
  73. package/dist/strategy/CompositeStrategy.test.js +265 -0
  74. package/dist/strategy/CompositeStrategy.test.js.map +1 -0
  75. package/dist/strategy/MinAmountStrategy.d.ts +12 -5
  76. package/dist/strategy/MinAmountStrategy.d.ts.map +1 -1
  77. package/dist/strategy/MinAmountStrategy.js +23 -14
  78. package/dist/strategy/MinAmountStrategy.js.map +1 -1
  79. package/dist/strategy/MinAmountStrategy.test.js +88 -20
  80. package/dist/strategy/MinAmountStrategy.test.js.map +1 -1
  81. package/dist/strategy/StrategyFactory.d.ts +15 -6
  82. package/dist/strategy/StrategyFactory.d.ts.map +1 -1
  83. package/dist/strategy/StrategyFactory.js +48 -10
  84. package/dist/strategy/StrategyFactory.js.map +1 -1
  85. package/dist/strategy/StrategyFactory.test.js +2 -2
  86. package/dist/strategy/StrategyFactory.test.js.map +1 -1
  87. package/dist/strategy/WeightedStrategy.d.ts +13 -4
  88. package/dist/strategy/WeightedStrategy.d.ts.map +1 -1
  89. package/dist/strategy/WeightedStrategy.js +18 -6
  90. package/dist/strategy/WeightedStrategy.js.map +1 -1
  91. package/dist/strategy/WeightedStrategy.test.js +108 -18
  92. package/dist/strategy/WeightedStrategy.test.js.map +1 -1
  93. package/dist/strategy/index.d.ts +2 -0
  94. package/dist/strategy/index.d.ts.map +1 -1
  95. package/dist/strategy/index.js +2 -0
  96. package/dist/strategy/index.js.map +1 -1
  97. package/dist/test/helpers.d.ts +93 -3
  98. package/dist/test/helpers.d.ts.map +1 -1
  99. package/dist/test/helpers.js +267 -10
  100. package/dist/test/helpers.js.map +1 -1
  101. package/dist/tracking/ActionTracker.d.ts +49 -0
  102. package/dist/tracking/ActionTracker.d.ts.map +1 -0
  103. package/dist/tracking/ActionTracker.js +422 -0
  104. package/dist/tracking/ActionTracker.js.map +1 -0
  105. package/dist/tracking/ActionTracker.test.d.ts +2 -0
  106. package/dist/tracking/ActionTracker.test.d.ts.map +1 -0
  107. package/dist/tracking/ActionTracker.test.js +637 -0
  108. package/dist/tracking/ActionTracker.test.js.map +1 -0
  109. package/dist/tracking/IActionTracker.d.ts +101 -0
  110. package/dist/tracking/IActionTracker.d.ts.map +1 -0
  111. package/dist/tracking/IActionTracker.js +2 -0
  112. package/dist/tracking/IActionTracker.js.map +1 -0
  113. package/dist/tracking/InflightContextAdapter.d.ts +18 -0
  114. package/dist/tracking/InflightContextAdapter.d.ts.map +1 -0
  115. package/dist/tracking/InflightContextAdapter.js +35 -0
  116. package/dist/tracking/InflightContextAdapter.js.map +1 -0
  117. package/dist/tracking/InflightContextAdapter.test.d.ts +2 -0
  118. package/dist/tracking/InflightContextAdapter.test.d.ts.map +1 -0
  119. package/dist/tracking/InflightContextAdapter.test.js +172 -0
  120. package/dist/tracking/InflightContextAdapter.test.js.map +1 -0
  121. package/dist/tracking/index.d.ts +7 -0
  122. package/dist/tracking/index.d.ts.map +1 -0
  123. package/dist/tracking/index.js +6 -0
  124. package/dist/tracking/index.js.map +1 -0
  125. package/dist/tracking/store/IStore.d.ts +41 -0
  126. package/dist/tracking/store/IStore.d.ts.map +1 -0
  127. package/dist/tracking/store/IStore.js +2 -0
  128. package/dist/tracking/store/IStore.js.map +1 -0
  129. package/dist/tracking/store/InMemoryStore.d.ts +21 -0
  130. package/dist/tracking/store/InMemoryStore.d.ts.map +1 -0
  131. package/dist/tracking/store/InMemoryStore.js +40 -0
  132. package/dist/tracking/store/InMemoryStore.js.map +1 -0
  133. package/dist/tracking/store/InMemoryStore.test.d.ts +2 -0
  134. package/dist/tracking/store/InMemoryStore.test.d.ts.map +1 -0
  135. package/dist/tracking/store/InMemoryStore.test.js +290 -0
  136. package/dist/tracking/store/InMemoryStore.test.js.map +1 -0
  137. package/dist/tracking/store/index.d.ts +3 -0
  138. package/dist/tracking/store/index.d.ts.map +1 -0
  139. package/dist/tracking/store/index.js +2 -0
  140. package/dist/tracking/store/index.js.map +1 -0
  141. package/dist/tracking/types.d.ts +43 -0
  142. package/dist/tracking/types.d.ts.map +1 -0
  143. package/dist/tracking/types.js +2 -0
  144. package/dist/tracking/types.js.map +1 -0
  145. package/dist/utils/ExplorerClient.d.ts +39 -1
  146. package/dist/utils/ExplorerClient.d.ts.map +1 -1
  147. package/dist/utils/ExplorerClient.js +205 -2
  148. package/dist/utils/ExplorerClient.js.map +1 -1
  149. package/dist/utils/balanceUtils.js +2 -2
  150. package/dist/utils/balanceUtils.js.map +1 -1
  151. package/dist/utils/balanceUtils.test.js +1 -0
  152. package/dist/utils/balanceUtils.test.js.map +1 -1
  153. package/dist/utils/bridgeUtils.d.ts +1 -3
  154. package/dist/utils/bridgeUtils.d.ts.map +1 -1
  155. package/dist/utils/bridgeUtils.js +1 -5
  156. package/dist/utils/bridgeUtils.js.map +1 -1
  157. package/dist/utils/bridgeUtils.test.js +3 -14
  158. package/dist/utils/bridgeUtils.test.js.map +1 -1
  159. package/package.json +11 -9
  160. package/src/config/RebalancerConfig.test.ts +459 -163
  161. package/src/config/RebalancerConfig.ts +5 -3
  162. package/src/config/types.ts +159 -52
  163. package/src/core/Rebalancer.test.ts +632 -0
  164. package/src/core/Rebalancer.ts +247 -157
  165. package/src/core/RebalancerService.test.ts +1144 -0
  166. package/src/core/RebalancerService.ts +245 -23
  167. package/src/factories/RebalancerContextFactory.ts +115 -14
  168. package/src/index.ts +16 -4
  169. package/src/interfaces/IMonitor.ts +15 -8
  170. package/src/interfaces/IRebalancer.ts +22 -4
  171. package/src/interfaces/IStrategy.ts +23 -2
  172. package/src/metrics/Metrics.ts +26 -5
  173. package/src/metrics/scripts/metrics.ts +14 -0
  174. package/src/monitor/Monitor.ts +109 -22
  175. package/src/strategy/BaseStrategy.ts +316 -26
  176. package/src/strategy/CollateralDeficitStrategy.test.ts +551 -0
  177. package/src/strategy/CollateralDeficitStrategy.ts +390 -0
  178. package/src/strategy/CompositeStrategy.test.ts +405 -0
  179. package/src/strategy/CompositeStrategy.ts +102 -0
  180. package/src/strategy/MinAmountStrategy.test.ts +189 -88
  181. package/src/strategy/MinAmountStrategy.ts +44 -13
  182. package/src/strategy/StrategyFactory.test.ts +2 -2
  183. package/src/strategy/StrategyFactory.ts +91 -8
  184. package/src/strategy/WeightedStrategy.test.ts +187 -72
  185. package/src/strategy/WeightedStrategy.ts +41 -7
  186. package/src/strategy/index.ts +2 -0
  187. package/src/test/helpers.ts +418 -14
  188. package/src/tracking/ActionTracker.test.ts +783 -0
  189. package/src/tracking/ActionTracker.ts +647 -0
  190. package/src/tracking/IActionTracker.ts +140 -0
  191. package/src/tracking/InflightContextAdapter.test.ts +203 -0
  192. package/src/tracking/InflightContextAdapter.ts +42 -0
  193. package/src/tracking/index.ts +36 -0
  194. package/src/tracking/store/IStore.ts +48 -0
  195. package/src/tracking/store/InMemoryStore.test.ts +338 -0
  196. package/src/tracking/store/InMemoryStore.ts +58 -0
  197. package/src/tracking/store/index.ts +2 -0
  198. package/src/tracking/types.ts +74 -0
  199. package/src/utils/ExplorerClient.ts +266 -3
  200. package/src/utils/balanceUtils.test.ts +1 -0
  201. package/src/utils/balanceUtils.ts +2 -2
  202. package/src/utils/bridgeUtils.test.ts +3 -15
  203. package/src/utils/bridgeUtils.ts +0 -10
  204. package/dist/core/WithInflightGuard.d.ts +0 -20
  205. package/dist/core/WithInflightGuard.d.ts.map +0 -1
  206. package/dist/core/WithInflightGuard.js +0 -47
  207. package/dist/core/WithInflightGuard.js.map +0 -1
  208. package/dist/core/WithInflightGuard.test.d.ts +0 -2
  209. package/dist/core/WithInflightGuard.test.d.ts.map +0 -1
  210. package/dist/core/WithInflightGuard.test.js +0 -64
  211. package/dist/core/WithInflightGuard.test.js.map +0 -1
  212. package/dist/core/WithSemaphore.d.ts +0 -22
  213. package/dist/core/WithSemaphore.d.ts.map +0 -1
  214. package/dist/core/WithSemaphore.js +0 -67
  215. package/dist/core/WithSemaphore.js.map +0 -1
  216. package/dist/core/WithSemaphore.test.d.ts +0 -2
  217. package/dist/core/WithSemaphore.test.d.ts.map +0 -1
  218. package/dist/core/WithSemaphore.test.js +0 -83
  219. package/dist/core/WithSemaphore.test.js.map +0 -1
  220. package/src/core/WithInflightGuard.test.ts +0 -131
  221. package/src/core/WithInflightGuard.ts +0 -67
  222. package/src/core/WithSemaphore.test.ts +0 -111
  223. package/src/core/WithSemaphore.ts +0 -92
@@ -0,0 +1,422 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { parseWarpRouteMessage } from '@hyperlane-xyz/utils';
3
+ /**
4
+ * ActionTracker implementation managing the lifecycle of tracked entities.
5
+ */
6
+ export class ActionTracker {
7
+ transferStore;
8
+ rebalanceIntentStore;
9
+ rebalanceActionStore;
10
+ explorerClient;
11
+ core;
12
+ config;
13
+ logger;
14
+ constructor(transferStore, rebalanceIntentStore, rebalanceActionStore, explorerClient, core, config, logger) {
15
+ this.transferStore = transferStore;
16
+ this.rebalanceIntentStore = rebalanceIntentStore;
17
+ this.rebalanceActionStore = rebalanceActionStore;
18
+ this.explorerClient = explorerClient;
19
+ this.core = core;
20
+ this.config = config;
21
+ this.logger = logger;
22
+ }
23
+ // === Lifecycle ===
24
+ async initialize() {
25
+ this.logger.info('ActionTracker initializing');
26
+ // Log config for debugging
27
+ this.logger.debug({
28
+ routersByDomain: this.config.routersByDomain,
29
+ bridges: this.config.bridges,
30
+ rebalancerAddress: this.config.rebalancerAddress,
31
+ }, 'ActionTracker config');
32
+ // 1. Startup recovery: query Explorer for inflight rebalance messages
33
+ const inflightMessages = await this.explorerClient.getInflightRebalanceActions({
34
+ bridges: this.config.bridges,
35
+ routersByDomain: this.config.routersByDomain,
36
+ rebalancerAddress: this.config.rebalancerAddress,
37
+ }, this.logger);
38
+ this.logger.info({ count: inflightMessages.length }, 'Found inflight rebalance messages during startup');
39
+ // 2. For each message, create synthetic intent + action
40
+ for (const msg of inflightMessages) {
41
+ await this.recoverAction(msg);
42
+ }
43
+ // 3. Sync all stores
44
+ await this.syncTransfers();
45
+ await this.syncRebalanceIntents();
46
+ await this.syncRebalanceActions();
47
+ // Log store contents for debugging
48
+ await this.logStoreContents();
49
+ this.logger.info('ActionTracker initialized');
50
+ }
51
+ // === Sync Operations ===
52
+ async syncTransfers(confirmedBlockTags) {
53
+ this.logger.debug('Syncing transfers');
54
+ const inflightMessages = await this.explorerClient.getInflightUserTransfers({
55
+ routersByDomain: this.config.routersByDomain,
56
+ excludeTxSender: this.config.rebalancerAddress,
57
+ }, this.logger);
58
+ this.logger.debug({ count: inflightMessages.length }, 'Received inflight user transfers from Explorer');
59
+ let newTransfers = 0;
60
+ let completedTransfers = 0;
61
+ for (const msg of inflightMessages) {
62
+ const transfer = await this.transferStore.get(msg.msg_id);
63
+ if (!transfer) {
64
+ this.logger.debug({
65
+ msgId: msg.msg_id,
66
+ origin: msg.origin_domain_id,
67
+ destination: msg.destination_domain_id,
68
+ sender: msg.sender,
69
+ recipient: msg.recipient,
70
+ messageBodyLength: msg.message_body?.length,
71
+ messageBodyPreview: msg.message_body?.substring(0, 66),
72
+ }, 'Processing new transfer message');
73
+ try {
74
+ const { amount } = parseWarpRouteMessage(msg.message_body);
75
+ const newTransfer = {
76
+ id: msg.msg_id,
77
+ status: 'in_progress',
78
+ messageId: msg.msg_id,
79
+ origin: msg.origin_domain_id,
80
+ destination: msg.destination_domain_id,
81
+ sender: msg.sender,
82
+ recipient: msg.recipient,
83
+ amount,
84
+ createdAt: Date.now(),
85
+ updatedAt: Date.now(),
86
+ };
87
+ await this.transferStore.save(newTransfer);
88
+ newTransfers++;
89
+ this.logger.debug({ id: newTransfer.id, amount: amount.toString() }, 'Created new transfer');
90
+ }
91
+ catch (error) {
92
+ this.logger.warn({
93
+ msgId: msg.msg_id,
94
+ messageBody: msg.message_body,
95
+ messageBodyLength: msg.message_body?.length,
96
+ origin: msg.origin_domain_id,
97
+ destination: msg.destination_domain_id,
98
+ error: error instanceof Error ? error.message : String(error),
99
+ }, 'Failed to parse message body, skipping transfer');
100
+ }
101
+ }
102
+ }
103
+ const existingTransfers = await this.getInProgressTransfers();
104
+ for (const transfer of existingTransfers) {
105
+ const chainName = this.core.multiProvider.getChainName(transfer.destination);
106
+ const blockTag = confirmedBlockTags?.[chainName];
107
+ const delivered = await this.isMessageDelivered(transfer.messageId, transfer.destination, blockTag);
108
+ if (delivered) {
109
+ await this.transferStore.update(transfer.id, { status: 'complete' });
110
+ completedTransfers++;
111
+ this.logger.debug({ id: transfer.id }, 'Transfer completed');
112
+ }
113
+ }
114
+ const inProgressCount = (await this.getInProgressTransfers()).length;
115
+ this.logger.info({
116
+ newTransfers,
117
+ completed: completedTransfers,
118
+ inProgress: inProgressCount,
119
+ }, 'Transfers synced');
120
+ }
121
+ async syncRebalanceIntents() {
122
+ this.logger.debug('Syncing rebalance intents');
123
+ // Check in_progress intents for completion
124
+ const inProgressIntents = await this.rebalanceIntentStore.getByStatus('in_progress');
125
+ for (const intent of inProgressIntents) {
126
+ if (intent.fulfilledAmount >= intent.amount) {
127
+ await this.rebalanceIntentStore.update(intent.id, {
128
+ status: 'complete',
129
+ });
130
+ this.logger.debug({ id: intent.id }, 'RebalanceIntent completed');
131
+ }
132
+ }
133
+ this.logger.debug('Rebalance intents synced');
134
+ }
135
+ async syncRebalanceActions(confirmedBlockTags) {
136
+ this.logger.debug('Syncing rebalance actions');
137
+ let discoveredActions = 0;
138
+ let completedActions = 0;
139
+ const inflightMessages = await this.explorerClient.getInflightRebalanceActions({
140
+ bridges: this.config.bridges,
141
+ routersByDomain: this.config.routersByDomain,
142
+ rebalancerAddress: this.config.rebalancerAddress,
143
+ }, this.logger);
144
+ this.logger.debug({ count: inflightMessages.length }, 'Found inflight rebalance actions from Explorer');
145
+ const allActions = await this.rebalanceActionStore.getAll();
146
+ for (const msg of inflightMessages) {
147
+ const existingAction = allActions.find((a) => a.messageId === msg.msg_id);
148
+ if (!existingAction) {
149
+ this.logger.info({
150
+ msgId: msg.msg_id,
151
+ origin: msg.origin_domain_id,
152
+ destination: msg.destination_domain_id,
153
+ }, 'Discovered new rebalance action, recovering...');
154
+ await this.recoverAction(msg);
155
+ discoveredActions++;
156
+ }
157
+ }
158
+ const inProgressActions = await this.rebalanceActionStore.getByStatus('in_progress');
159
+ for (const action of inProgressActions) {
160
+ const chainName = this.core.multiProvider.getChainName(action.destination);
161
+ const blockTag = confirmedBlockTags?.[chainName];
162
+ const delivered = await this.isMessageDelivered(action.messageId, action.destination, blockTag);
163
+ if (delivered) {
164
+ await this.completeRebalanceAction(action.id);
165
+ completedActions++;
166
+ this.logger.debug({ id: action.id }, 'RebalanceAction completed');
167
+ }
168
+ }
169
+ const inProgressCount = (await this.rebalanceActionStore.getByStatus('in_progress')).length;
170
+ this.logger.info({
171
+ discovered: discoveredActions,
172
+ completed: completedActions,
173
+ inProgress: inProgressCount,
174
+ }, 'Actions synced');
175
+ }
176
+ // === Transfer Queries ===
177
+ async getInProgressTransfers() {
178
+ return this.transferStore.getByStatus('in_progress');
179
+ }
180
+ async getTransfersByDestination(destination) {
181
+ return this.transferStore.getByDestination(destination);
182
+ }
183
+ // === RebalanceIntent Queries ===
184
+ async getActiveRebalanceIntents() {
185
+ // Only return in_progress intents - their origin tx is confirmed
186
+ // so simulation only needs to add to destination (origin already deducted on-chain)
187
+ return this.rebalanceIntentStore.getByStatus('in_progress');
188
+ }
189
+ async getRebalanceIntentsByDestination(destination) {
190
+ return this.rebalanceIntentStore.getByDestination(destination);
191
+ }
192
+ // === RebalanceIntent Management ===
193
+ async createRebalanceIntent(params) {
194
+ const intent = {
195
+ id: uuidv4(),
196
+ status: 'not_started',
197
+ origin: params.origin,
198
+ destination: params.destination,
199
+ amount: params.amount,
200
+ fulfilledAmount: 0n,
201
+ bridge: params.bridge,
202
+ priority: params.priority,
203
+ strategyType: params.strategyType,
204
+ createdAt: Date.now(),
205
+ updatedAt: Date.now(),
206
+ };
207
+ await this.rebalanceIntentStore.save(intent);
208
+ this.logger.debug({ id: intent.id, origin: intent.origin, destination: intent.destination }, 'Created RebalanceIntent');
209
+ return intent;
210
+ }
211
+ async completeRebalanceIntent(id) {
212
+ await this.rebalanceIntentStore.update(id, { status: 'complete' });
213
+ this.logger.info({ id }, 'Intent completed');
214
+ }
215
+ async cancelRebalanceIntent(id) {
216
+ await this.rebalanceIntentStore.update(id, { status: 'cancelled' });
217
+ this.logger.debug({ id }, 'Cancelled RebalanceIntent');
218
+ }
219
+ async failRebalanceIntent(id) {
220
+ await this.rebalanceIntentStore.update(id, { status: 'failed' });
221
+ this.logger.info({ id }, 'Intent failed');
222
+ }
223
+ // === RebalanceAction Management ===
224
+ async createRebalanceAction(params) {
225
+ const action = {
226
+ id: uuidv4(),
227
+ status: 'in_progress',
228
+ intentId: params.intentId,
229
+ messageId: params.messageId,
230
+ txHash: params.txHash,
231
+ origin: params.origin,
232
+ destination: params.destination,
233
+ amount: params.amount,
234
+ createdAt: Date.now(),
235
+ updatedAt: Date.now(),
236
+ };
237
+ await this.rebalanceActionStore.save(action);
238
+ // Transition parent intent from not_started to in_progress
239
+ const intent = await this.rebalanceIntentStore.get(params.intentId);
240
+ if (intent && intent.status === 'not_started') {
241
+ await this.rebalanceIntentStore.update(intent.id, {
242
+ status: 'in_progress',
243
+ });
244
+ this.logger.debug({ intentId: intent.id }, 'Transitioned RebalanceIntent to in_progress');
245
+ }
246
+ this.logger.debug({ id: action.id, intentId: action.intentId }, 'Created RebalanceAction');
247
+ return action;
248
+ }
249
+ async completeRebalanceAction(id) {
250
+ const action = await this.rebalanceActionStore.get(id);
251
+ if (!action) {
252
+ throw new Error(`RebalanceAction ${id} not found`);
253
+ }
254
+ await this.rebalanceActionStore.update(id, { status: 'complete' });
255
+ // Update parent intent's fulfilledAmount
256
+ const intent = await this.rebalanceIntentStore.get(action.intentId);
257
+ if (intent) {
258
+ const newFulfilledAmount = intent.fulfilledAmount + action.amount;
259
+ const updates = {
260
+ fulfilledAmount: newFulfilledAmount,
261
+ };
262
+ // Check if intent is now complete
263
+ if (newFulfilledAmount >= intent.amount) {
264
+ updates.status = 'complete';
265
+ this.logger.debug({ intentId: intent.id }, 'RebalanceIntent fully fulfilled');
266
+ }
267
+ await this.rebalanceIntentStore.update(intent.id, updates);
268
+ }
269
+ this.logger.info({ id, intentId: action.intentId }, 'Action completed');
270
+ }
271
+ async failRebalanceAction(id) {
272
+ await this.rebalanceActionStore.update(id, { status: 'failed' });
273
+ this.logger.info({ id }, 'Action failed');
274
+ }
275
+ // === Debug Helpers ===
276
+ /**
277
+ * Log the contents of all stores.
278
+ * Logs each item separately for full visibility (avoids [Object] truncation).
279
+ */
280
+ async logStoreContents() {
281
+ const transfers = await this.transferStore.getAll();
282
+ const intents = await this.rebalanceIntentStore.getAll();
283
+ const actions = await this.rebalanceActionStore.getAll();
284
+ const activeIntents = intents.filter((i) => ['not_started', 'in_progress'].includes(i.status));
285
+ const inProgressTransfers = transfers.filter((t) => t.status === 'in_progress');
286
+ const inProgressActions = actions.filter((a) => a.status === 'in_progress');
287
+ // Log summary
288
+ this.logger.info({
289
+ transfers: inProgressTransfers.length,
290
+ intents: activeIntents.length,
291
+ actions: inProgressActions.length,
292
+ }, 'Store summary');
293
+ // Log each transfer separately
294
+ for (const t of inProgressTransfers) {
295
+ this.logger.info({
296
+ type: 'transfer',
297
+ origin: t.origin,
298
+ destination: t.destination,
299
+ amount: t.amount.toString(),
300
+ messageId: t.messageId,
301
+ }, 'In-progress transfer');
302
+ }
303
+ // Log each intent separately
304
+ for (const i of activeIntents) {
305
+ this.logger.info({
306
+ type: 'intent',
307
+ id: i.id,
308
+ origin: i.origin,
309
+ destination: i.destination,
310
+ amount: i.amount.toString(),
311
+ status: i.status,
312
+ bridge: i.bridge,
313
+ }, 'Active intent');
314
+ }
315
+ // Log each action separately
316
+ for (const a of inProgressActions) {
317
+ this.logger.info({
318
+ type: 'action',
319
+ id: a.id,
320
+ origin: a.origin,
321
+ destination: a.destination,
322
+ amount: a.amount.toString(),
323
+ messageId: a.messageId,
324
+ intentId: a.intentId,
325
+ }, 'In-progress action');
326
+ }
327
+ }
328
+ // === Private Helpers ===
329
+ async getConfirmedBlockTag(chainName) {
330
+ try {
331
+ const metadata = this.core.multiProvider.getChainMetadata(chainName);
332
+ const reorgPeriod = metadata.blocks?.reorgPeriod ?? 32;
333
+ if (typeof reorgPeriod === 'string') {
334
+ return reorgPeriod;
335
+ }
336
+ const provider = this.core.multiProvider.getProvider(chainName);
337
+ const latestBlock = await provider.getBlockNumber();
338
+ return Math.max(0, latestBlock - reorgPeriod);
339
+ }
340
+ catch (error) {
341
+ this.logger.warn({ chain: chainName, error: error.message }, 'Failed to get confirmed block, using latest');
342
+ return undefined;
343
+ }
344
+ }
345
+ async isMessageDelivered(messageId, destination, providedBlockTag) {
346
+ try {
347
+ const chainName = this.core.multiProvider.getChainName(destination);
348
+ const mailbox = this.core.getContracts(chainName).mailbox;
349
+ const blockTag = providedBlockTag ?? (await this.getConfirmedBlockTag(chainName));
350
+ const delivered = await mailbox.delivered(messageId, { blockTag });
351
+ this.logger.debug({ messageId, destination: chainName, blockTag, delivered }, 'Checked message delivery at confirmed block');
352
+ return delivered;
353
+ }
354
+ catch (error) {
355
+ this.logger.warn({ messageId, destination, error }, 'Failed to check message delivery status');
356
+ return false;
357
+ }
358
+ }
359
+ async recoverAction(msg) {
360
+ // Check if action already exists
361
+ const existing = await this.rebalanceActionStore.get(msg.msg_id);
362
+ if (existing) {
363
+ this.logger.debug({ id: msg.msg_id }, 'Action already exists, skipping');
364
+ return;
365
+ }
366
+ this.logger.debug({
367
+ msgId: msg.msg_id,
368
+ origin: msg.origin_domain_id,
369
+ destination: msg.destination_domain_id,
370
+ sender: msg.sender,
371
+ recipient: msg.recipient,
372
+ txHash: msg.origin_tx_hash,
373
+ messageBodyLength: msg.message_body?.length,
374
+ messageBodyPreview: msg.message_body?.substring(0, 66),
375
+ }, 'Recovering rebalance action');
376
+ try {
377
+ // Create synthetic intent
378
+ const { amount } = parseWarpRouteMessage(msg.message_body);
379
+ const intent = {
380
+ id: uuidv4(),
381
+ status: 'in_progress',
382
+ origin: msg.origin_domain_id,
383
+ destination: msg.destination_domain_id,
384
+ amount,
385
+ fulfilledAmount: 0n,
386
+ priority: undefined,
387
+ strategyType: undefined,
388
+ createdAt: Date.now(),
389
+ updatedAt: Date.now(),
390
+ };
391
+ await this.rebalanceIntentStore.save(intent);
392
+ this.logger.debug({ id: intent.id, amount: amount.toString() }, 'Created synthetic RebalanceIntent');
393
+ // Create action
394
+ const action = {
395
+ id: msg.msg_id,
396
+ status: 'in_progress',
397
+ intentId: intent.id,
398
+ messageId: msg.msg_id,
399
+ txHash: msg.origin_tx_hash,
400
+ origin: msg.origin_domain_id,
401
+ destination: msg.destination_domain_id,
402
+ amount,
403
+ createdAt: Date.now(),
404
+ updatedAt: Date.now(),
405
+ };
406
+ await this.rebalanceActionStore.save(action);
407
+ this.logger.debug({ id: action.id, intentId: action.intentId, amount: amount.toString() }, 'Recovered RebalanceAction');
408
+ }
409
+ catch (error) {
410
+ this.logger.warn({
411
+ msgId: msg.msg_id,
412
+ messageBody: msg.message_body,
413
+ messageBodyLength: msg.message_body?.length,
414
+ origin: msg.origin_domain_id,
415
+ destination: msg.destination_domain_id,
416
+ txHash: msg.origin_tx_hash,
417
+ error: error instanceof Error ? error.message : String(error),
418
+ }, 'Failed to parse message body during recovery, skipping action');
419
+ }
420
+ }
421
+ }
422
+ //# sourceMappingURL=ActionTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionTracker.js","sourceRoot":"","sources":["../../src/tracking/ActionTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ActionTracker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionTracker.test.d.ts","sourceRoot":"","sources":["../../src/tracking/ActionTracker.test.ts"],"names":[],"mappings":""}