@gzeoneth/gov-tracker 0.1.2 → 0.2.0-1

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 (193) hide show
  1. package/README.md +3 -0
  2. package/dist/abis.d.ts +0 -32
  3. package/dist/abis.d.ts.map +1 -1
  4. package/dist/abis.js +17 -17
  5. package/dist/abis.js.map +1 -1
  6. package/dist/calldata/decoder.d.ts +12 -3
  7. package/dist/calldata/decoder.d.ts.map +1 -1
  8. package/dist/calldata/decoder.js +56 -9
  9. package/dist/calldata/decoder.js.map +1 -1
  10. package/dist/calldata/index.d.ts +4 -7
  11. package/dist/calldata/index.d.ts.map +1 -1
  12. package/dist/calldata/index.js +5 -19
  13. package/dist/calldata/index.js.map +1 -1
  14. package/dist/calldata/parameter-decoder.d.ts +11 -2
  15. package/dist/calldata/parameter-decoder.d.ts.map +1 -1
  16. package/dist/calldata/parameter-decoder.js +67 -8
  17. package/dist/calldata/parameter-decoder.js.map +1 -1
  18. package/dist/calldata/retryable-ticket.d.ts +1 -17
  19. package/dist/calldata/retryable-ticket.d.ts.map +1 -1
  20. package/dist/calldata/retryable-ticket.js +10 -17
  21. package/dist/calldata/retryable-ticket.js.map +1 -1
  22. package/dist/calldata/signature-lookup.d.ts +0 -11
  23. package/dist/calldata/signature-lookup.d.ts.map +1 -1
  24. package/dist/calldata/signature-lookup.js +0 -8
  25. package/dist/calldata/signature-lookup.js.map +1 -1
  26. package/dist/cli/lib/cli.d.ts +1 -3
  27. package/dist/cli/lib/cli.d.ts.map +1 -1
  28. package/dist/cli/lib/cli.js +12 -27
  29. package/dist/cli/lib/cli.js.map +1 -1
  30. package/dist/cli/lib/election-check.d.ts +2 -2
  31. package/dist/cli/lib/election-check.d.ts.map +1 -1
  32. package/dist/cli/lib/election-check.js.map +1 -1
  33. package/dist/cli/lib/json-state.d.ts +2 -29
  34. package/dist/cli/lib/json-state.d.ts.map +1 -1
  35. package/dist/cli/lib/json-state.js +12 -56
  36. package/dist/cli/lib/json-state.js.map +1 -1
  37. package/dist/cli/monitor.js +1 -2
  38. package/dist/cli/monitor.js.map +1 -1
  39. package/dist/constants.d.ts +41 -7
  40. package/dist/constants.d.ts.map +1 -1
  41. package/dist/constants.js +64 -4
  42. package/dist/constants.js.map +1 -1
  43. package/dist/discovery/timelock-discovery.js +1 -1
  44. package/dist/discovery/timelock-discovery.js.map +1 -1
  45. package/dist/election.d.ts.map +1 -1
  46. package/dist/election.js +7 -4
  47. package/dist/election.js.map +1 -1
  48. package/dist/index.d.ts +10 -8
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +35 -26
  51. package/dist/index.js.map +1 -1
  52. package/dist/simulation/index.d.ts +3 -4
  53. package/dist/simulation/index.d.ts.map +1 -1
  54. package/dist/simulation/index.js +3 -9
  55. package/dist/simulation/index.js.map +1 -1
  56. package/dist/simulation/simulation-data.d.ts +6 -31
  57. package/dist/simulation/simulation-data.d.ts.map +1 -1
  58. package/dist/simulation/simulation-data.js +25 -58
  59. package/dist/simulation/simulation-data.js.map +1 -1
  60. package/dist/stages/{stage-builder.d.ts → builder.d.ts} +14 -9
  61. package/dist/stages/builder.d.ts.map +1 -0
  62. package/dist/stages/{stage-builder.js → builder.js} +19 -5
  63. package/dist/stages/builder.js.map +1 -0
  64. package/dist/stages/l2-to-l1-message.d.ts +3 -3
  65. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  66. package/dist/stages/l2-to-l1-message.js +17 -17
  67. package/dist/stages/l2-to-l1-message.js.map +1 -1
  68. package/dist/stages/proposal-created.d.ts +2 -2
  69. package/dist/stages/proposal-created.d.ts.map +1 -1
  70. package/dist/stages/proposal-created.js +5 -5
  71. package/dist/stages/proposal-created.js.map +1 -1
  72. package/dist/stages/proposal-queued.d.ts +2 -2
  73. package/dist/stages/proposal-queued.d.ts.map +1 -1
  74. package/dist/stages/proposal-queued.js +11 -11
  75. package/dist/stages/proposal-queued.js.map +1 -1
  76. package/dist/stages/retryables.d.ts +7 -7
  77. package/dist/stages/retryables.d.ts.map +1 -1
  78. package/dist/stages/retryables.js +75 -61
  79. package/dist/stages/retryables.js.map +1 -1
  80. package/dist/stages/timelock.d.ts +3 -24
  81. package/dist/stages/timelock.d.ts.map +1 -1
  82. package/dist/stages/timelock.js +47 -39
  83. package/dist/stages/timelock.js.map +1 -1
  84. package/dist/stages/{base.d.ts → utils.d.ts} +78 -35
  85. package/dist/stages/utils.d.ts.map +1 -0
  86. package/dist/stages/{base.js → utils.js} +211 -63
  87. package/dist/stages/utils.js.map +1 -0
  88. package/dist/stages/voting.d.ts +2 -2
  89. package/dist/stages/voting.d.ts.map +1 -1
  90. package/dist/stages/voting.js +2 -2
  91. package/dist/stages/voting.js.map +1 -1
  92. package/dist/tracker/cache.d.ts +104 -0
  93. package/dist/tracker/cache.d.ts.map +1 -0
  94. package/dist/tracker/cache.js +287 -0
  95. package/dist/tracker/cache.js.map +1 -0
  96. package/dist/tracker/execute.js +9 -9
  97. package/dist/tracker/execute.js.map +1 -1
  98. package/dist/tracker/pipeline.d.ts +3 -32
  99. package/dist/tracker/pipeline.d.ts.map +1 -1
  100. package/dist/tracker/pipeline.js +40 -43
  101. package/dist/tracker/pipeline.js.map +1 -1
  102. package/dist/tracker/query.js +4 -4
  103. package/dist/tracker/query.js.map +1 -1
  104. package/dist/tracker/state.d.ts +88 -81
  105. package/dist/tracker/state.d.ts.map +1 -1
  106. package/dist/tracker/state.js +241 -264
  107. package/dist/tracker/state.js.map +1 -1
  108. package/dist/tracker.d.ts +4 -4
  109. package/dist/tracker.d.ts.map +1 -1
  110. package/dist/tracker.js +24 -22
  111. package/dist/tracker.js.map +1 -1
  112. package/dist/types/calldata.d.ts +4 -6
  113. package/dist/types/calldata.d.ts.map +1 -1
  114. package/dist/types/core.d.ts +36 -34
  115. package/dist/types/core.d.ts.map +1 -1
  116. package/dist/types/core.js +33 -0
  117. package/dist/types/core.js.map +1 -1
  118. package/dist/types/cross-chain.d.ts +5 -61
  119. package/dist/types/cross-chain.d.ts.map +1 -1
  120. package/dist/types/election.d.ts +3 -6
  121. package/dist/types/election.d.ts.map +1 -1
  122. package/dist/types/index.d.ts +7 -7
  123. package/dist/types/index.d.ts.map +1 -1
  124. package/dist/types/index.js +6 -2
  125. package/dist/types/index.js.map +1 -1
  126. package/dist/types/simulation.d.ts +5 -7
  127. package/dist/types/simulation.d.ts.map +1 -1
  128. package/dist/types/stages.d.ts +50 -32
  129. package/dist/types/stages.d.ts.map +1 -1
  130. package/dist/types/stages.js +10 -1
  131. package/dist/types/stages.js.map +1 -1
  132. package/dist/types/tracking.d.ts +3 -30
  133. package/dist/types/tracking.d.ts.map +1 -1
  134. package/dist/utils/chain.d.ts +7 -3
  135. package/dist/utils/chain.d.ts.map +1 -1
  136. package/dist/utils/chain.js +13 -9
  137. package/dist/utils/chain.js.map +1 -1
  138. package/dist/utils/logger.d.ts +9 -3
  139. package/dist/utils/logger.d.ts.map +1 -1
  140. package/dist/utils/logger.js +53 -19
  141. package/dist/utils/logger.js.map +1 -1
  142. package/dist/utils/rpc-utils.d.ts +7 -8
  143. package/dist/utils/rpc-utils.d.ts.map +1 -1
  144. package/dist/utils/rpc-utils.js +20 -2
  145. package/dist/utils/rpc-utils.js.map +1 -1
  146. package/dist/utils/salt-computation.d.ts.map +1 -1
  147. package/dist/utils/salt-computation.js +2 -3
  148. package/dist/utils/salt-computation.js.map +1 -1
  149. package/dist/utils/stage-metadata.d.ts +2 -2
  150. package/dist/utils/stage-metadata.d.ts.map +1 -1
  151. package/dist/utils/stage-metadata.js +5 -5
  152. package/dist/utils/stage-metadata.js.map +1 -1
  153. package/package.json +9 -5
  154. package/dist/calldata/address-utils.d.ts +0 -23
  155. package/dist/calldata/address-utils.d.ts.map +0 -1
  156. package/dist/calldata/address-utils.js +0 -84
  157. package/dist/calldata/address-utils.js.map +0 -1
  158. package/dist/calldata/extraction.d.ts +0 -17
  159. package/dist/calldata/extraction.d.ts.map +0 -1
  160. package/dist/calldata/extraction.js +0 -56
  161. package/dist/calldata/extraction.js.map +0 -1
  162. package/dist/stages/base.d.ts.map +0 -1
  163. package/dist/stages/base.js.map +0 -1
  164. package/dist/stages/stage-builder.d.ts.map +0 -1
  165. package/dist/stages/stage-builder.js.map +0 -1
  166. package/dist/tracker/context.d.ts +0 -111
  167. package/dist/tracker/context.d.ts.map +0 -1
  168. package/dist/tracker/context.js +0 -264
  169. package/dist/tracker/context.js.map +0 -1
  170. package/dist/tracker/index.d.ts +0 -18
  171. package/dist/tracker/index.d.ts.map +0 -1
  172. package/dist/tracker/index.js +0 -70
  173. package/dist/tracker/index.js.map +0 -1
  174. package/dist/types.d.ts +0 -6
  175. package/dist/types.d.ts.map +0 -1
  176. package/dist/types.js +0 -22
  177. package/dist/types.js.map +0 -1
  178. package/dist/utils/error-classification.d.ts +0 -13
  179. package/dist/utils/error-classification.d.ts.map +0 -1
  180. package/dist/utils/error-classification.js +0 -28
  181. package/dist/utils/error-classification.js.map +0 -1
  182. package/dist/utils/scoped-logger.d.ts +0 -43
  183. package/dist/utils/scoped-logger.d.ts.map +0 -1
  184. package/dist/utils/scoped-logger.js +0 -72
  185. package/dist/utils/scoped-logger.js.map +0 -1
  186. package/dist/utils/stage-helpers.d.ts +0 -51
  187. package/dist/utils/stage-helpers.d.ts.map +0 -1
  188. package/dist/utils/stage-helpers.js +0 -143
  189. package/dist/utils/stage-helpers.js.map +0 -1
  190. package/dist/utils/urls.d.ts +0 -28
  191. package/dist/utils/urls.d.ts.map +0 -1
  192. package/dist/utils/urls.js +0 -71
  193. package/dist/utils/urls.js.map +0 -1
@@ -1,37 +1,51 @@
1
1
  "use strict";
2
2
  /**
3
- * Shared utilities for stage tracking
3
+ * Stage Utilities
4
4
  *
5
- * Common patterns and helpers used across all stage modules
5
+ * Consolidated utilities for stage tracking, serialization, and timelock operations.
6
+ * Previously split between stages/base.ts and utils/stage-helpers.ts.
6
7
  */
7
8
  Object.defineProperty(exports, "__esModule", { value: true });
8
9
  exports.TIMELOCK_STAGE_TYPES = exports.deserializeCallScheduledDataArray = exports.serializeCallScheduledDataArray = exports.deserializeCallScheduledData = exports.serializeCallScheduledData = void 0;
9
10
  exports.serialize = serialize;
10
11
  exports.deserialize = deserialize;
11
- exports.calculateEtaFromScheduledData = calculateEtaFromScheduledData;
12
- exports.isConstitutional = isConstitutional;
13
12
  exports.getStagesForPath = getStagesForPath;
14
13
  exports.initializeStagesForPath = initializeStagesForPath;
15
14
  exports.findStage = findStage;
16
15
  exports.updateStageInList = updateStageInList;
17
16
  exports.getCurrentStage = getCurrentStage;
18
17
  exports.areAllStagesComplete = areAllStagesComplete;
19
- exports.getBlockTimestamp = getBlockTimestamp;
20
18
  exports.findExecutableStage = findExecutableStage;
21
- exports.isTimelockStage = isTimelockStage;
22
19
  exports.findAllExecutableStages = findAllExecutableStages;
23
20
  exports.needsAction = needsAction;
24
21
  exports.getTrackingStatusSummary = getTrackingStatusSummary;
25
22
  exports.extractOperationId = extractOperationId;
23
+ exports.isConstitutional = isConstitutional;
24
+ exports.isTimelockStage = isTimelockStage;
25
+ exports.getBlockTimestamp = getBlockTimestamp;
26
+ exports.calculateEtaFromScheduledData = calculateEtaFromScheduledData;
26
27
  exports.failPrepare = failPrepare;
27
28
  exports.checkOperationReady = checkOperationReady;
29
+ exports.createTimelockStageData = createTimelockStageData;
30
+ exports.collectAllScheduledData = collectAllScheduledData;
31
+ exports.calculateTimelockEta = calculateTimelockEta;
32
+ exports.buildExecutionPayloadData = buildExecutionPayloadData;
33
+ exports.validateStageForPrepare = validateStageForPrepare;
34
+ exports.bulkPrepareError = bulkPrepareError;
35
+ exports.simpleBulkError = simpleBulkError;
36
+ exports.validateStageForBulkPrepare = validateStageForBulkPrepare;
37
+ exports.validateStageForSimpleBulk = validateStageForSimpleBulk;
38
+ exports.searchAndCompleteTimelockExecution = searchAndCompleteTimelockExecution;
28
39
  const ethers_1 = require("ethers");
40
+ const types_1 = require("../types");
29
41
  const abis_1 = require("../abis");
30
42
  const constants_1 = require("../constants");
31
43
  const chain_1 = require("../utils/chain");
32
44
  const rpc_utils_1 = require("../utils/rpc-utils");
45
+ const builder_1 = require("./builder");
46
+ const timelock_discovery_1 = require("../discovery/timelock-discovery");
33
47
  // ============================================================================
34
- // Serialization Utilities
48
+ // Section 1: Serialization Utilities
35
49
  // ============================================================================
36
50
  const CALL_SCHEDULED_BIGNUM_FIELDS = ["index", "value", "delay"];
37
51
  /** Generic serializer: converts BigNumber fields to strings for JSON storage. */
@@ -70,50 +84,26 @@ exports.serializeCallScheduledDataArray = serializeCallScheduledDataArray;
70
84
  const deserializeCallScheduledDataArray = (data) => data.map(exports.deserializeCallScheduledData);
71
85
  exports.deserializeCallScheduledDataArray = deserializeCallScheduledDataArray;
72
86
  // ============================================================================
73
- // Stage Creation and Management
87
+ // Section 2: Stage Creation and Management
74
88
  // ============================================================================
75
89
  /**
76
- * Create a new tracked stage with default values
90
+ * Create a new tracked stage with default values.
91
+ * Used for initializing placeholder stages that will be filled in later.
77
92
  */
78
93
  function createStage(type, chain, status = "NOT_STARTED") {
94
+ const chainId = (0, types_1.chainToChainId)(chain) ?? 0;
95
+ // Assertion needed: we create placeholder stages with empty data that get
96
+ // replaced by properly-built stages. TypeScript can't track this flow.
79
97
  return {
80
98
  type,
81
99
  status,
82
100
  chain,
101
+ chainId,
83
102
  transactions: [],
84
103
  data: {},
85
104
  executable: false,
86
105
  };
87
106
  }
88
- /**
89
- * Calculate ETA from CallScheduled event data
90
- *
91
- * ETA = block timestamp + delay seconds
92
- * This works even when operation is done (contract returns _DONE_TIMESTAMP=1)
93
- */
94
- async function calculateEtaFromScheduledData(blockNumber, delaySeconds, provider) {
95
- const timestamp = await getBlockTimestamp(blockNumber, provider);
96
- return timestamp + delaySeconds;
97
- }
98
- /**
99
- * Check if a proposal is Constitutional (requires L1 round-trip).
100
- *
101
- * Constitutional proposals (from Constitutional Governor) go through:
102
- * L2 Timelock (8 days) → L2→L1 Message → L1 Timelock (3 days) → Retryables
103
- *
104
- * Non-Constitutional proposals (from Non-Constitutional Governor) are L2-only:
105
- * L2 Timelock (3 days) → L2 Execution
106
- *
107
- * Also works with timelock addresses for direct timelock entry.
108
- *
109
- * @see https://docs.arbitrum.foundation/concepts/lifecycle-anatomy-aip-proposal
110
- */
111
- function isConstitutional(governorOrTimelockAddress) {
112
- return (0, chain_1.isAddressIn)(governorOrTimelockAddress, [
113
- constants_1.ADDRESSES.CONSTITUTIONAL_GOVERNOR,
114
- constants_1.ADDRESSES.L2_CONSTITUTIONAL_TIMELOCK,
115
- ]);
116
- }
117
107
  /**
118
108
  * Get all stages for a governor path
119
109
  *
@@ -142,7 +132,7 @@ function initializeStagesForPath(governorAddress, includeProposalStages = true)
142
132
  return stageTypes.map((type) => {
143
133
  // L1_TIMELOCK and RETRYABLE_EXECUTED are L1 stages
144
134
  // L2_TO_L1_MESSAGE is cross-chain but logically completes on L1
145
- const chain = type === "L1_TIMELOCK" || type === "RETRYABLE_EXECUTED" ? "L1" : "L2";
135
+ const chain = type === "L1_TIMELOCK" || type === "RETRYABLE_EXECUTED" ? "ethereum" : "arb1";
146
136
  return createStage(type, chain, "NOT_STARTED");
147
137
  });
148
138
  }
@@ -158,6 +148,9 @@ function findStage(stages, type) {
158
148
  function updateStageInList(stages, updatedStage) {
159
149
  return stages.map((s) => (s.type === updatedStage.type ? updatedStage : s));
160
150
  }
151
+ // ============================================================================
152
+ // Section 3: Stage Querying and Status
153
+ // ============================================================================
161
154
  /**
162
155
  * Get the current active stage (first non-completed stage)
163
156
  */
@@ -175,30 +168,12 @@ function getCurrentStage(stages) {
175
168
  function areAllStagesComplete(stages) {
176
169
  return stages.every((s) => s.status === "COMPLETED" || s.status === "SKIPPED" || s.status === "FAILED");
177
170
  }
178
- /**
179
- * Get block timestamp from provider
180
- */
181
- async function getBlockTimestamp(blockNumber, provider) {
182
- const block = await (0, rpc_utils_1.queryWithRetry)(() => provider.getBlock(blockNumber));
183
- if (!block) {
184
- throw new Error(`Block ${blockNumber} not found`);
185
- }
186
- return block.timestamp;
187
- }
188
171
  /**
189
172
  * Find first READY stage that's executable
190
173
  */
191
174
  function findExecutableStage(stages) {
192
175
  return stages.find((s) => s.status === "READY" && s.executable === true) ?? null;
193
176
  }
194
- /** Timelock stage types (consolidated stages that require execution) */
195
- exports.TIMELOCK_STAGE_TYPES = ["L2_TIMELOCK", "L1_TIMELOCK"];
196
- /**
197
- * Check if a stage type is a timelock stage
198
- */
199
- function isTimelockStage(type) {
200
- return exports.TIMELOCK_STAGE_TYPES.includes(type);
201
- }
202
177
  /**
203
178
  * Find all READY executable stages
204
179
  */
@@ -244,17 +219,80 @@ function getTrackingStatusSummary(stages) {
244
219
  * @returns The operationId if found, undefined otherwise
245
220
  */
246
221
  function extractOperationId(stages) {
247
- // Check stages that contain operationId (in order of likelihood)
248
- const stageTypes = ["PROPOSAL_QUEUED", "L2_TIMELOCK"];
249
- for (const type of stageTypes) {
250
- const stage = stages.find((s) => s.type === type);
251
- const opId = stage?.data?.operationId;
222
+ // Check PROPOSAL_QUEUED first (most common)
223
+ const queuedStage = stages.find((s) => s.type === "PROPOSAL_QUEUED");
224
+ if (queuedStage?.type === "PROPOSAL_QUEUED") {
225
+ const opId = queuedStage.data.operationId;
226
+ if (typeof opId === "string" && opId.length > 0) {
227
+ return opId;
228
+ }
229
+ }
230
+ // Fallback to L2_TIMELOCK
231
+ const l2TimelockStage = stages.find((s) => s.type === "L2_TIMELOCK");
232
+ if (l2TimelockStage?.type === "L2_TIMELOCK") {
233
+ const opId = l2TimelockStage.data.operationId;
252
234
  if (typeof opId === "string" && opId.length > 0) {
253
235
  return opId;
254
236
  }
255
237
  }
256
238
  return undefined;
257
239
  }
240
+ // ============================================================================
241
+ // Section 4: Governance Logic
242
+ // ============================================================================
243
+ /**
244
+ * Check if a proposal is Constitutional (requires L1 round-trip).
245
+ *
246
+ * Constitutional proposals (from Constitutional Governor) go through:
247
+ * L2 Timelock (8 days) → L2→L1 Message → L1 Timelock (3 days) → Retryables
248
+ *
249
+ * Non-Constitutional proposals (from Non-Constitutional Governor) are L2-only:
250
+ * L2 Timelock (3 days) → L2 Execution
251
+ *
252
+ * Also works with timelock addresses for direct timelock entry.
253
+ *
254
+ * @see https://docs.arbitrum.foundation/concepts/lifecycle-anatomy-aip-proposal
255
+ */
256
+ function isConstitutional(governorOrTimelockAddress) {
257
+ return (0, chain_1.isAddressIn)(governorOrTimelockAddress, [
258
+ constants_1.ADDRESSES.CONSTITUTIONAL_GOVERNOR,
259
+ constants_1.ADDRESSES.L2_CONSTITUTIONAL_TIMELOCK,
260
+ ]);
261
+ }
262
+ /** Timelock stage types (consolidated stages that require execution) */
263
+ exports.TIMELOCK_STAGE_TYPES = ["L2_TIMELOCK", "L1_TIMELOCK"];
264
+ /**
265
+ * Check if a stage type is a timelock stage
266
+ */
267
+ function isTimelockStage(type) {
268
+ return exports.TIMELOCK_STAGE_TYPES.includes(type);
269
+ }
270
+ // ============================================================================
271
+ // Section 5: Block & Timing Utilities
272
+ // ============================================================================
273
+ /**
274
+ * Get block timestamp from provider
275
+ */
276
+ async function getBlockTimestamp(blockNumber, provider) {
277
+ const block = await (0, rpc_utils_1.queryWithRetry)(() => provider.getBlock(blockNumber));
278
+ if (!block) {
279
+ throw new Error(`Block ${blockNumber} not found`);
280
+ }
281
+ return block.timestamp;
282
+ }
283
+ /**
284
+ * Calculate ETA from CallScheduled event data
285
+ *
286
+ * ETA = block timestamp + delay seconds
287
+ * This works even when operation is done (contract returns _DONE_TIMESTAMP=1)
288
+ */
289
+ async function calculateEtaFromScheduledData(blockNumber, delaySeconds, provider) {
290
+ const timestamp = await getBlockTimestamp(blockNumber, provider);
291
+ return timestamp + delaySeconds;
292
+ }
293
+ // ============================================================================
294
+ // Section 6: Preparation Helpers
295
+ // ============================================================================
258
296
  /**
259
297
  * Create a failed PrepareResult with an error message.
260
298
  * Reduces boilerplate for the common pattern: { success: false, error: "..." }
@@ -277,4 +315,114 @@ async function checkOperationReady(timelockAddress, operationId, provider) {
277
315
  }
278
316
  return failPrepare("Operation is not ready for execution");
279
317
  }
280
- //# sourceMappingURL=base.js.map
318
+ /** Extract timelock execution payload from a stage. */
319
+ function createTimelockStageData(stage) {
320
+ let stageData = null;
321
+ for (const stageType of exports.TIMELOCK_STAGE_TYPES) {
322
+ stageData = (0, types_1.getStageData)(stage, stageType);
323
+ if (stageData)
324
+ break;
325
+ }
326
+ if (!stageData?.timelockAddress ||
327
+ !stageData?.operationId ||
328
+ !stageData?.callScheduledData?.length) {
329
+ return null;
330
+ }
331
+ const payload = {
332
+ timelockAddress: stageData.timelockAddress,
333
+ operationId: stageData.operationId,
334
+ callScheduledData: (0, exports.deserializeCallScheduledDataArray)(stageData.callScheduledData),
335
+ };
336
+ if (stageData.isSecurityCouncilOperation) {
337
+ payload.isSecurityCouncilOperation = true;
338
+ payload.securityCouncilMembers = stageData.securityCouncilMembers;
339
+ payload.securityCouncilNonce = stageData.securityCouncilNonce;
340
+ }
341
+ return payload;
342
+ }
343
+ /** Collect all CallScheduledData from a timelock state. */
344
+ function collectAllScheduledData(timelockState) {
345
+ return (timelockState.allScheduledData ??
346
+ (timelockState.scheduledData ? [timelockState.scheduledData] : []));
347
+ }
348
+ /** Calculate ETA for a timelock operation. */
349
+ async function calculateTimelockEta(timelockState, operationState, provider) {
350
+ if (timelockState.scheduledData) {
351
+ return calculateEtaFromScheduledData(timelockState.scheduledData.blockNumber, timelockState.scheduledData.delay.toNumber(), provider);
352
+ }
353
+ const contractTimestamp = operationState.timestamp.toNumber();
354
+ return !operationState.isDone && contractTimestamp > 1 ? contractTimestamp : undefined;
355
+ }
356
+ /** Build serialized execution payload data for stage storage. */
357
+ function buildExecutionPayloadData(timelockAddress, operationId, allScheduledData) {
358
+ const payload = { timelockAddress, operationId };
359
+ if (allScheduledData.length > 0) {
360
+ payload.callScheduledData = (0, exports.serializeCallScheduledDataArray)(allScheduledData);
361
+ }
362
+ return payload;
363
+ }
364
+ /** Validate stage for preparation. Returns error or null if valid. */
365
+ function validateStageForPrepare(stage, options = {}) {
366
+ if (!options.prepareCompleted && stage.status !== "READY") {
367
+ return failPrepare(`Stage is not ready. Current status: ${stage.status}`);
368
+ }
369
+ if (options.expectedTypes?.length && !options.expectedTypes.includes(stage.type)) {
370
+ return failPrepare(`Unexpected stage type: ${stage.type}. Expected: ${options.expectedTypes.join(", ")}`);
371
+ }
372
+ return null;
373
+ }
374
+ function bulkPrepareError(error, targetChain) {
375
+ return { total: 0, results: [{ success: false, error }], targetChain };
376
+ }
377
+ function simpleBulkError(error) {
378
+ return { total: 0, results: [{ success: false, error }] };
379
+ }
380
+ function validateStageForBulkPrepare(stage, targetChain, options = {}) {
381
+ const error = validateStageForPrepare(stage, options);
382
+ return error ? { total: 0, results: [error], targetChain } : null;
383
+ }
384
+ function validateStageForSimpleBulk(stage, options = {}) {
385
+ const error = validateStageForPrepare(stage, options);
386
+ return error ? { total: 0, results: [error] } : null;
387
+ }
388
+ // ============================================================================
389
+ // Section 9: Execution Search Helper
390
+ // ============================================================================
391
+ /** Search for timelock execution event and complete stage. */
392
+ async function searchAndCompleteTimelockExecution(stage, timelockAddress, operationId, provider, chain, fromBlock, toBlock, queueTimestamp) {
393
+ const event = await (0, timelock_discovery_1.findCallExecutedEvent)(timelockAddress, operationId, provider, {
394
+ startBlock: fromBlock,
395
+ endBlock: toBlock,
396
+ });
397
+ const builder = new builder_1.StageBuilder(stage.type, stage.chain)
398
+ .data(stage.data)
399
+ .transactions(stage.transactions);
400
+ if (stage.timing)
401
+ builder.timing(stage.timing);
402
+ if (event) {
403
+ const execTimestamp = await getBlockTimestamp(event.blockNumber, provider);
404
+ const chainId = (0, types_1.chainToChainId)(chain) ?? 0;
405
+ builder
406
+ .status("COMPLETED")
407
+ .tx(event.txHash, event.blockNumber, chain, chainId, {
408
+ timestamp: execTimestamp,
409
+ description: "executed",
410
+ })
411
+ .timing({ startedAt: queueTimestamp ?? execTimestamp })
412
+ .data({ operationId });
413
+ return {
414
+ stage: builder.build(),
415
+ executionTxHash: event.txHash,
416
+ executionBlock: event.blockNumber,
417
+ };
418
+ }
419
+ return {
420
+ stage: builder
421
+ .status("COMPLETED")
422
+ .data({ operationId, note: "Execution confirmed by state, event not found" })
423
+ .build(),
424
+ executionTxHash: null,
425
+ executionBlock: null,
426
+ };
427
+ }
428
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/stages/utils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA+BH,8BAYC;AAGD,kCAQC;AAoDD,4CAgBC;AAKD,0DAcC;AAKD,8BAEC;AAKD,8CAKC;AASD,0CAOC;AAKD,oDAIC;AAKD,kDAEC;AAKD,0DAEC;AAWD,kCAEC;AAKD,4DAwBC;AAWD,gDAoBC;AAmBD,4CAKC;AAQD,0CAEC;AASD,8CASC;AAQD,sEAOC;AAUD,kCAEC;AAMD,kDAcC;AAiBD,0DA4BC;AAGD,0DAKC;AAGD,oDAcC;AAGD,8DAUC;AAYD,0DAaC;AAaD,4CAKC;AAED,0CAEC;AAED,kEAOC;AAED,gEAMC;AAOD,gFA+CC;AAxjBD,mCAA2C;AAC3C,oCAakB;AAClB,kCAAuC;AACvC,4CAAyC;AACzC,0CAA6C;AAC7C,kDAAoD;AACpD,uCAAyC;AACzC,wEAAwE;AAExE,+EAA+E;AAC/E,qCAAqC;AACrC,+EAA+E;AAE/E,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAE1E,iFAAiF;AACjF,SAAgB,SAAS,CAAI,IAAO,EAAE,YAA+B;IACnE,MAAM,MAAM,GAAG,EAAO,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAC;QAClD,MAAkC,CAAC,GAAG,CAAC;YACtC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC1B,GAAG;gBACH,OAAQ,GAA8B,CAAC,QAAQ,KAAK,UAAU;gBAC5D,CAAC,CAAE,GAAkC,CAAC,QAAQ,EAAE;gBAChD,CAAC,CAAC,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sEAAsE;AACtE,SAAgB,WAAW,CAAI,IAAO,EAAE,YAA+B;IACrE,MAAM,MAAM,GAAG,EAAO,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAC;QAClD,MAAkC,CAAC,GAAG,CAAC;YACtC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oDAAoD;AAC7C,MAAM,0BAA0B,GAAG,CAAC,IAAuB,EAA+B,EAAE,CACjG,SAAS,CAAC,IAAI,EAAE,4BAA4B,CAA2C,CAAC;AAD7E,QAAA,0BAA0B,8BACmD;AAE1F,uDAAuD;AAChD,MAAM,4BAA4B,GAAG,CAC1C,IAAiC,EACd,EAAE,CACrB,WAAW,CAAC,IAAI,EAAE,4BAA4B,CAAiC,CAAC;AAHrE,QAAA,4BAA4B,gCAGyC;AAElF,oCAAoC;AAC7B,MAAM,+BAA+B,GAAG,CAAC,IAAyB,EAAE,EAAE,CAC3E,IAAI,CAAC,GAAG,CAAC,kCAA0B,CAAC,CAAC;AAD1B,QAAA,+BAA+B,mCACL;AAChC,MAAM,iCAAiC,GAAG,CAAC,IAAmC,EAAE,EAAE,CACvF,IAAI,CAAC,GAAG,CAAC,oCAA4B,CAAC,CAAC;AAD5B,QAAA,iCAAiC,qCACL;AAEzC,+EAA+E;AAC/E,2CAA2C;AAC3C,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,WAAW,CAClB,IAAe,EACf,KAAY,EACZ,SAAsB,aAAa;IAEnC,MAAM,OAAO,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,0EAA0E;IAC1E,uEAAuE;IACvE,OAAO;QACL,IAAI;QACJ,MAAM;QACN,KAAK;QACL,OAAO;QACP,YAAY,EAAE,EAAE;QAChB,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,KAAK;KACF,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,gBAAwB,EACxB,wBAAiC,IAAI;IAErC,MAAM,cAAc,GAAgB,qBAAqB;QACvD,CAAC,CAAC,CAAC,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,CAAC;QAC1D,CAAC,CAAC,EAAE,CAAC;IAEP,0EAA0E;IAC1E,OAAO;QACL,GAAG,cAAc;QACjB,aAAa;QACb,kBAAkB;QAClB,aAAa;QACb,oBAAoB;KACrB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CACrC,eAAuB,EACvB,wBAAiC,IAAI;IAErC,MAAM,UAAU,GAAG,gBAAgB,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAE5E,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,mDAAmD;QACnD,gEAAgE;QAChE,MAAM,KAAK,GACT,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QAEhF,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,MAAsB,EAAE,IAAe;IAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,MAAsB,EACtB,YAA0B;IAE1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAsB;IACpD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5F,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,MAAsB;IACzD,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CACnF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,MAAsB;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,MAAsB;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,MAAsB;IAChD,OAAO,mBAAmB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,MAAsB;IAQ7D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACT,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAC9E,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAC,MAAsB;IACvD,4CAA4C;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IACrE,IAAI,WAAW,EAAE,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IACrE,IAAI,eAAe,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;QAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAAC,yBAAiC;IAChE,OAAO,IAAA,mBAAW,EAAC,yBAAyB,EAAE;QAC5C,qBAAS,CAAC,uBAAuB;QACjC,qBAAS,CAAC,0BAA0B;KACrC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AAC3D,QAAA,oBAAoB,GAAG,CAAC,aAAa,EAAE,aAAa,CAAU,CAAC;AAE5E;;GAEG;AACH,SAAgB,eAAe,CAAC,IAAwB;IACtD,OAAQ,4BAA0C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,+EAA+E;AAC/E,sCAAsC;AACtC,+EAA+E;AAE/E;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,QAAmC;IAEnC,MAAM,KAAK,GAAG,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,SAAS,WAAW,YAAY,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC,SAAS,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,6BAA6B,CACjD,WAAmB,EACnB,YAAoB,EACpB,QAAmC;IAEnC,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,SAAS,GAAG,YAAY,CAAC;AAClC,CAAC;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CACvC,eAAuB,EACvB,WAAmB,EACnB,QAAmC;IAEnC,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,mBAAY,EAAE,QAAQ,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;IACnF,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,mBAAmB;IAE7C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAc,EAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;IACjF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,WAAW,CAAC,4BAA4B,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,WAAW,CAAC,sCAAsC,CAAC,CAAC;AAC7D,CAAC;AAgBD,uDAAuD;AACvD,SAAgB,uBAAuB,CAAC,KAAmB;IACzD,IAAI,SAAS,GAA6B,IAAI,CAAC;IAC/C,KAAK,MAAM,SAAS,IAAI,4BAAoB,EAAE,CAAC;QAC7C,SAAS,GAAG,IAAA,oBAAY,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,SAAS;YAAE,MAAM;IACvB,CAAC;IAED,IACE,CAAC,SAAS,EAAE,eAAe;QAC3B,CAAC,SAAS,EAAE,WAAW;QACvB,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAA6B;QACxC,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,iBAAiB,EAAE,IAAA,yCAAiC,EAAC,SAAS,CAAC,iBAAiB,CAAC;KAClF,CAAC;IAEF,IAAI,SAAS,CAAC,0BAA0B,EAAE,CAAC;QACzC,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;QAC1C,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,sBAAsB,CAAC;QAClE,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,oBAAoB,CAAC;IAChE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2DAA2D;AAC3D,SAAgB,uBAAuB,CAAC,aAA4B;IAClE,OAAO,CACL,aAAa,CAAC,gBAAgB;QAC9B,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACnE,CAAC;AACJ,CAAC;AAED,8CAA8C;AACvC,KAAK,UAAU,oBAAoB,CACxC,aAA4B,EAC5B,cAA8B,EAC9B,QAAmC;IAEnC,IAAI,aAAa,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO,6BAA6B,CAClC,aAAa,CAAC,aAAa,CAAC,WAAW,EACvC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,EAC5C,QAAQ,CACT,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC9D,OAAO,CAAC,cAAc,CAAC,MAAM,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;AACzF,CAAC;AAED,iEAAiE;AACjE,SAAgB,yBAAyB,CACvC,eAAuB,EACvB,WAAmB,EACnB,gBAAqC;IAErC,MAAM,OAAO,GAA4B,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;IAC1E,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,iBAAiB,GAAG,IAAA,uCAA+B,EAAC,gBAAgB,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAWD,sEAAsE;AACtE,SAAgB,uBAAuB,CACrC,KAAmB,EACnB,UAAoC,EAAE;IAEtC,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC1D,OAAO,WAAW,CAAC,uCAAuC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjF,OAAO,WAAW,CAChB,0BAA0B,KAAK,CAAC,IAAI,eAAe,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAaD,SAAgB,gBAAgB,CAC9B,KAAa,EACb,WAAc;IAEd,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;AACzE,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa;IAC3C,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAgB,2BAA2B,CACzC,KAAmB,EACnB,WAAc,EACd,UAAoC,EAAE;IAEtC,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC;AAED,SAAgB,0BAA0B,CACxC,KAAmB,EACnB,UAAoC,EAAE;IAEtC,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,+EAA+E;AAC/E,qCAAqC;AACrC,+EAA+E;AAE/E,8DAA8D;AACvD,KAAK,UAAU,kCAAkC,CACtD,KAAmB,EACnB,eAAuB,EACvB,WAAmB,EACnB,QAAmC,EACnC,KAAY,EACZ,SAAiB,EACjB,OAAgB,EAChB,cAAuB;IAEvB,MAAM,KAAK,GAAG,MAAM,IAAA,0CAAqB,EAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE;QAChF,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,sBAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;SACtD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAChB,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEpC,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO;aACJ,MAAM,CAAC,WAAW,CAAC;aACnB,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE;YACnD,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,UAAU;SACxB,CAAC;aACD,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,IAAI,aAAa,EAAE,CAAC;aACtD,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACzB,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;YACtB,eAAe,EAAE,KAAK,CAAC,MAAM;YAC7B,cAAc,EAAE,KAAK,CAAC,WAAW;SAClC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,OAAO;aACX,MAAM,CAAC,WAAW,CAAC;aACnB,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,+CAA+C,EAAE,CAAC;aAC5E,KAAK,EAAE;QACV,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC"}
@@ -7,12 +7,12 @@
7
7
  * When calculating ETA for vetting period, we must use L1 block time.
8
8
  */
9
9
  import { ethers } from "ethers";
10
- import { ProposalData, TrackedStage, VotingData } from "../types";
10
+ import { ProposalData, TypedTrackedStage, VotingData } from "../types";
11
11
  /**
12
12
  * Track voting stage for a proposal
13
13
  */
14
14
  export declare function trackVotingStage(governorAddress: string, proposalId: string, proposalData: ProposalData, provider: ethers.providers.Provider): Promise<{
15
- stage: TrackedStage;
15
+ stage: TypedTrackedStage<"VOTING_ACTIVE">;
16
16
  votingData: VotingData | null;
17
17
  }>;
18
18
  //# sourceMappingURL=voting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"voting.d.ts","sourceRoot":"","sources":["../../src/stages/voting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAelE;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAClC,OAAO,CAAC;IACT,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B,CAAC,CA8HD"}
1
+ {"version":3,"file":"voting.d.ts","sourceRoot":"","sources":["../../src/stages/voting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAevE;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAClC,OAAO,CAAC;IACT,KAAK,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC1C,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B,CAAC,CA8HD"}
@@ -12,14 +12,14 @@ exports.trackVotingStage = trackVotingStage;
12
12
  const ethers_1 = require("ethers");
13
13
  const governor_discovery_1 = require("../discovery/governor-discovery");
14
14
  const security_council_1 = require("../discovery/security-council");
15
- const stage_builder_1 = require("./stage-builder");
15
+ const builder_1 = require("./builder");
16
16
  const timing_1 = require("../utils/timing");
17
17
  const constants_1 = require("../constants");
18
18
  /**
19
19
  * Track voting stage for a proposal
20
20
  */
21
21
  async function trackVotingStage(governorAddress, proposalId, proposalData, provider) {
22
- const builder = new stage_builder_1.StageBuilder("VOTING_ACTIVE", "L2");
22
+ const builder = new builder_1.StageBuilder("VOTING_ACTIVE", "arb1");
23
23
  // Get current block info
24
24
  const { blockNumber: currentBlock, timestamp: currentTimestamp } = await (0, timing_1.getCurrentBlockInfo)(provider);
25
25
  // Check if voting has started
@@ -1 +1 @@
1
- {"version":3,"file":"voting.js","sourceRoot":"","sources":["../../src/stages/voting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voting.js","sourceRoot":"","sources":["../../src/stages/voting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Cache utilities for tracker state
3
+ *
4
+ * Provides cache implementations and utility functions.
5
+ * All other state management is handled directly in tracker.ts.
6
+ *
7
+ * Available cache adapters:
8
+ * - FileCache: File-based persistence (Node.js only)
9
+ * - LocalStorageCache: Browser localStorage (web only)
10
+ * - MemoryCache: In-memory, no persistence (universal)
11
+ */
12
+ import { TrackingCheckpoint, DiscoveryWatermarks, CacheAdapter } from "../types";
13
+ /**
14
+ * File-based cache that persists to JSON file.
15
+ * Synchronously loads on construction, persists on every write.
16
+ * Uses a write queue to prevent race conditions from concurrent writes.
17
+ */
18
+ export declare class FileCache implements CacheAdapter {
19
+ private readonly path;
20
+ private cache;
21
+ private writeQueue;
22
+ constructor(path: string);
23
+ private load;
24
+ private persistSync;
25
+ private persist;
26
+ get<T>(key: string): Promise<T | null>;
27
+ set<T>(key: string, value: T): Promise<void>;
28
+ delete(key: string): Promise<void>;
29
+ clear(): Promise<void>;
30
+ has(key: string): Promise<boolean>;
31
+ keys(): IterableIterator<string>;
32
+ }
33
+ /**
34
+ * Browser localStorage-based cache adapter.
35
+ * Persists to localStorage with a configurable key prefix.
36
+ *
37
+ * Limitations:
38
+ * - 5MB storage limit (varies by browser)
39
+ * - Synchronous API (blocks main thread, usually negligible)
40
+ * - String-only storage (JSON serialization handled internally)
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * import { createTracker, LocalStorageCache } from "@gzeoneth/gov-tracker";
45
+ *
46
+ * const tracker = createTracker({
47
+ * l2Provider,
48
+ * l1Provider,
49
+ * cache: new LocalStorageCache("arb-gov:"),
50
+ * });
51
+ * ```
52
+ */
53
+ export declare class LocalStorageCache implements CacheAdapter {
54
+ private readonly prefix;
55
+ constructor(prefix?: string);
56
+ private fullKey;
57
+ get<T>(key: string): Promise<T | null>;
58
+ set<T>(key: string, value: T): Promise<void>;
59
+ delete(key: string): Promise<void>;
60
+ clear(): Promise<void>;
61
+ has(key: string): Promise<boolean>;
62
+ keys(prefix?: string): Promise<string[]>;
63
+ }
64
+ /**
65
+ * In-memory cache adapter with no persistence.
66
+ * Useful for testing, short-lived sessions, or as a fallback.
67
+ *
68
+ * Data is lost when the page is refreshed or the process exits.
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * import { createTracker, MemoryCache } from "@gzeoneth/gov-tracker";
73
+ *
74
+ * const tracker = createTracker({
75
+ * l2Provider,
76
+ * l1Provider,
77
+ * cache: new MemoryCache(),
78
+ * });
79
+ * ```
80
+ */
81
+ export declare class MemoryCache implements CacheAdapter {
82
+ private cache;
83
+ get<T>(key: string): Promise<T | null>;
84
+ set<T>(key: string, value: T): Promise<void>;
85
+ delete(key: string): Promise<void>;
86
+ clear(): Promise<void>;
87
+ has(key: string): Promise<boolean>;
88
+ keys(): IterableIterator<string>;
89
+ }
90
+ /**
91
+ * Generate cache key from transaction hash (primary cache key format)
92
+ */
93
+ export declare function txHashCacheKey(txHash: string): string;
94
+ /**
95
+ * Read all cache data without requiring RPC providers.
96
+ * Use this for status/dashboard views that only need cached data.
97
+ *
98
+ * @param cachePath - Path to the cache file
99
+ */
100
+ export declare function readCacheStatus(cachePath: string): Promise<{
101
+ watermarks: DiscoveryWatermarks;
102
+ checkpoints: Map<string, TrackingCheckpoint>;
103
+ }>;
104
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/tracker/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGjF;;;;GAIG;AACH,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,UAAU,CAAoC;gBAE1C,IAAI,EAAE,MAAM;IAKxB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,WAAW;YAKL,OAAO;IAiBf,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAItC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAGjC;AA2BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,GAAE,MAAmB;IAIvC,OAAO,CAAC,OAAO;IAIT,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAYtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAe/C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,KAAK,CAAmC;IAE1C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAItC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAGjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,UAAU,EAAE,mBAAmB,CAAC;IAChC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC9C,CAAC,CAqBD"}