@gzeoneth/gov-tracker 0.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 (203) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +201 -0
  3. package/dist/abis.d.ts +79 -0
  4. package/dist/abis.d.ts.map +1 -0
  5. package/dist/abis.js +159 -0
  6. package/dist/abis.js.map +1 -0
  7. package/dist/cli/lib/cli.d.ts +92 -0
  8. package/dist/cli/lib/cli.d.ts.map +1 -0
  9. package/dist/cli/lib/cli.js +562 -0
  10. package/dist/cli/lib/cli.js.map +1 -0
  11. package/dist/cli/lib/election-check.d.ts +46 -0
  12. package/dist/cli/lib/election-check.d.ts.map +1 -0
  13. package/dist/cli/lib/election-check.js +136 -0
  14. package/dist/cli/lib/election-check.js.map +1 -0
  15. package/dist/cli/lib/json-state.d.ts +100 -0
  16. package/dist/cli/lib/json-state.d.ts.map +1 -0
  17. package/dist/cli/lib/json-state.js +225 -0
  18. package/dist/cli/lib/json-state.js.map +1 -0
  19. package/dist/cli/monitor.d.ts +3 -0
  20. package/dist/cli/monitor.d.ts.map +1 -0
  21. package/dist/cli/monitor.js +442 -0
  22. package/dist/cli/monitor.js.map +1 -0
  23. package/dist/constants.d.ts +235 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +293 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/discovery/governor-discovery.d.ts +84 -0
  28. package/dist/discovery/governor-discovery.d.ts.map +1 -0
  29. package/dist/discovery/governor-discovery.js +310 -0
  30. package/dist/discovery/governor-discovery.js.map +1 -0
  31. package/dist/discovery/security-council.d.ts +68 -0
  32. package/dist/discovery/security-council.d.ts.map +1 -0
  33. package/dist/discovery/security-council.js +181 -0
  34. package/dist/discovery/security-council.js.map +1 -0
  35. package/dist/discovery/timelock-discovery.d.ts +99 -0
  36. package/dist/discovery/timelock-discovery.d.ts.map +1 -0
  37. package/dist/discovery/timelock-discovery.js +322 -0
  38. package/dist/discovery/timelock-discovery.js.map +1 -0
  39. package/dist/election.d.ts +172 -0
  40. package/dist/election.d.ts.map +1 -0
  41. package/dist/election.js +464 -0
  42. package/dist/election.js.map +1 -0
  43. package/dist/index.d.ts +56 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +164 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/stages/base.d.ts +127 -0
  48. package/dist/stages/base.d.ts.map +1 -0
  49. package/dist/stages/base.js +280 -0
  50. package/dist/stages/base.js.map +1 -0
  51. package/dist/stages/l2-to-l1-message.d.ts +108 -0
  52. package/dist/stages/l2-to-l1-message.d.ts.map +1 -0
  53. package/dist/stages/l2-to-l1-message.js +422 -0
  54. package/dist/stages/l2-to-l1-message.js.map +1 -0
  55. package/dist/stages/proposal-created.d.ts +20 -0
  56. package/dist/stages/proposal-created.d.ts.map +1 -0
  57. package/dist/stages/proposal-created.js +62 -0
  58. package/dist/stages/proposal-created.js.map +1 -0
  59. package/dist/stages/proposal-queued.d.ts +39 -0
  60. package/dist/stages/proposal-queued.d.ts.map +1 -0
  61. package/dist/stages/proposal-queued.js +131 -0
  62. package/dist/stages/proposal-queued.js.map +1 -0
  63. package/dist/stages/retryables.d.ts +79 -0
  64. package/dist/stages/retryables.d.ts.map +1 -0
  65. package/dist/stages/retryables.js +307 -0
  66. package/dist/stages/retryables.js.map +1 -0
  67. package/dist/stages/stage-builder.d.ts +46 -0
  68. package/dist/stages/stage-builder.d.ts.map +1 -0
  69. package/dist/stages/stage-builder.js +87 -0
  70. package/dist/stages/stage-builder.js.map +1 -0
  71. package/dist/stages/timelock.d.ts +100 -0
  72. package/dist/stages/timelock.d.ts.map +1 -0
  73. package/dist/stages/timelock.js +552 -0
  74. package/dist/stages/timelock.js.map +1 -0
  75. package/dist/stages/voting.d.ts +18 -0
  76. package/dist/stages/voting.d.ts.map +1 -0
  77. package/dist/stages/voting.js +109 -0
  78. package/dist/stages/voting.js.map +1 -0
  79. package/dist/tracker/context.d.ts +111 -0
  80. package/dist/tracker/context.d.ts.map +1 -0
  81. package/dist/tracker/context.js +264 -0
  82. package/dist/tracker/context.js.map +1 -0
  83. package/dist/tracker/discovery.d.ts +89 -0
  84. package/dist/tracker/discovery.d.ts.map +1 -0
  85. package/dist/tracker/discovery.js +228 -0
  86. package/dist/tracker/discovery.js.map +1 -0
  87. package/dist/tracker/execute.d.ts +44 -0
  88. package/dist/tracker/execute.d.ts.map +1 -0
  89. package/dist/tracker/execute.js +126 -0
  90. package/dist/tracker/execute.js.map +1 -0
  91. package/dist/tracker/index.d.ts +18 -0
  92. package/dist/tracker/index.d.ts.map +1 -0
  93. package/dist/tracker/index.js +70 -0
  94. package/dist/tracker/index.js.map +1 -0
  95. package/dist/tracker/pipeline.d.ts +47 -0
  96. package/dist/tracker/pipeline.d.ts.map +1 -0
  97. package/dist/tracker/pipeline.js +299 -0
  98. package/dist/tracker/pipeline.js.map +1 -0
  99. package/dist/tracker/query.d.ts +45 -0
  100. package/dist/tracker/query.d.ts.map +1 -0
  101. package/dist/tracker/query.js +159 -0
  102. package/dist/tracker/query.js.map +1 -0
  103. package/dist/tracker/state.d.ts +104 -0
  104. package/dist/tracker/state.d.ts.map +1 -0
  105. package/dist/tracker/state.js +287 -0
  106. package/dist/tracker/state.js.map +1 -0
  107. package/dist/tracker.d.ts +261 -0
  108. package/dist/tracker.d.ts.map +1 -0
  109. package/dist/tracker.js +556 -0
  110. package/dist/tracker.js.map +1 -0
  111. package/dist/types/config.d.ts +81 -0
  112. package/dist/types/config.d.ts.map +1 -0
  113. package/dist/types/config.js +6 -0
  114. package/dist/types/config.js.map +1 -0
  115. package/dist/types/core.d.ts +51 -0
  116. package/dist/types/core.d.ts.map +1 -0
  117. package/dist/types/core.js +6 -0
  118. package/dist/types/core.js.map +1 -0
  119. package/dist/types/cross-chain.d.ts +80 -0
  120. package/dist/types/cross-chain.d.ts.map +1 -0
  121. package/dist/types/cross-chain.js +6 -0
  122. package/dist/types/cross-chain.js.map +1 -0
  123. package/dist/types/election.d.ts +59 -0
  124. package/dist/types/election.d.ts.map +1 -0
  125. package/dist/types/election.js +6 -0
  126. package/dist/types/election.js.map +1 -0
  127. package/dist/types/governor.d.ts +71 -0
  128. package/dist/types/governor.d.ts.map +1 -0
  129. package/dist/types/governor.js +6 -0
  130. package/dist/types/governor.js.map +1 -0
  131. package/dist/types/index.d.ts +22 -0
  132. package/dist/types/index.d.ts.map +1 -0
  133. package/dist/types/index.js +21 -0
  134. package/dist/types/index.js.map +1 -0
  135. package/dist/types/stages.d.ts +189 -0
  136. package/dist/types/stages.d.ts.map +1 -0
  137. package/dist/types/stages.js +23 -0
  138. package/dist/types/stages.js.map +1 -0
  139. package/dist/types/timelock.d.ts +108 -0
  140. package/dist/types/timelock.d.ts.map +1 -0
  141. package/dist/types/timelock.js +6 -0
  142. package/dist/types/timelock.js.map +1 -0
  143. package/dist/types/tracking.d.ts +180 -0
  144. package/dist/types/tracking.d.ts.map +1 -0
  145. package/dist/types/tracking.js +6 -0
  146. package/dist/types/tracking.js.map +1 -0
  147. package/dist/types.d.ts +6 -0
  148. package/dist/types.d.ts.map +1 -0
  149. package/dist/types.js +22 -0
  150. package/dist/types.js.map +1 -0
  151. package/dist/utils/chain.d.ts +18 -0
  152. package/dist/utils/chain.d.ts.map +1 -0
  153. package/dist/utils/chain.js +34 -0
  154. package/dist/utils/chain.js.map +1 -0
  155. package/dist/utils/log-filters.d.ts +67 -0
  156. package/dist/utils/log-filters.d.ts.map +1 -0
  157. package/dist/utils/log-filters.js +116 -0
  158. package/dist/utils/log-filters.js.map +1 -0
  159. package/dist/utils/log-search.d.ts +76 -0
  160. package/dist/utils/log-search.d.ts.map +1 -0
  161. package/dist/utils/log-search.js +142 -0
  162. package/dist/utils/log-search.js.map +1 -0
  163. package/dist/utils/logger.d.ts +41 -0
  164. package/dist/utils/logger.d.ts.map +1 -0
  165. package/dist/utils/logger.js +50 -0
  166. package/dist/utils/logger.js.map +1 -0
  167. package/dist/utils/operation-id.d.ts +48 -0
  168. package/dist/utils/operation-id.d.ts.map +1 -0
  169. package/dist/utils/operation-id.js +102 -0
  170. package/dist/utils/operation-id.js.map +1 -0
  171. package/dist/utils/rpc-utils.d.ts +30 -0
  172. package/dist/utils/rpc-utils.d.ts.map +1 -0
  173. package/dist/utils/rpc-utils.js +99 -0
  174. package/dist/utils/rpc-utils.js.map +1 -0
  175. package/dist/utils/salt-computation.d.ts +78 -0
  176. package/dist/utils/salt-computation.d.ts.map +1 -0
  177. package/dist/utils/salt-computation.js +132 -0
  178. package/dist/utils/salt-computation.js.map +1 -0
  179. package/dist/utils/salt-resolver.d.ts +63 -0
  180. package/dist/utils/salt-resolver.d.ts.map +1 -0
  181. package/dist/utils/salt-resolver.js +144 -0
  182. package/dist/utils/salt-resolver.js.map +1 -0
  183. package/dist/utils/scoped-logger.d.ts +43 -0
  184. package/dist/utils/scoped-logger.d.ts.map +1 -0
  185. package/dist/utils/scoped-logger.js +72 -0
  186. package/dist/utils/scoped-logger.js.map +1 -0
  187. package/dist/utils/stage-helpers.d.ts +51 -0
  188. package/dist/utils/stage-helpers.d.ts.map +1 -0
  189. package/dist/utils/stage-helpers.js +143 -0
  190. package/dist/utils/stage-helpers.js.map +1 -0
  191. package/dist/utils/stage-metadata.d.ts +62 -0
  192. package/dist/utils/stage-metadata.d.ts.map +1 -0
  193. package/dist/utils/stage-metadata.js +140 -0
  194. package/dist/utils/stage-metadata.js.map +1 -0
  195. package/dist/utils/timing.d.ts +115 -0
  196. package/dist/utils/timing.d.ts.map +1 -0
  197. package/dist/utils/timing.js +303 -0
  198. package/dist/utils/timing.js.map +1 -0
  199. package/dist/utils/urls.d.ts +20 -0
  200. package/dist/utils/urls.d.ts.map +1 -0
  201. package/dist/utils/urls.js +51 -0
  202. package/dist/utils/urls.js.map +1 -0
  203. package/package.json +72 -0
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ /**
3
+ * Cache utilities for tracker state
4
+ *
5
+ * Provides cache implementations and utility functions.
6
+ * All other state management is handled directly in tracker.ts.
7
+ *
8
+ * Available cache adapters:
9
+ * - FileCache: File-based persistence (Node.js only)
10
+ * - LocalStorageCache: Browser localStorage (web only)
11
+ * - MemoryCache: In-memory, no persistence (universal)
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.MemoryCache = exports.LocalStorageCache = exports.FileCache = void 0;
48
+ exports.txHashCacheKey = txHashCacheKey;
49
+ exports.readCacheStatus = readCacheStatus;
50
+ const fs = __importStar(require("fs"));
51
+ const discovery_1 = require("./discovery");
52
+ /**
53
+ * File-based cache that persists to JSON file.
54
+ * Synchronously loads on construction, persists on every write.
55
+ * Uses a write queue to prevent race conditions from concurrent writes.
56
+ */
57
+ class FileCache {
58
+ constructor(path) {
59
+ this.writeQueue = Promise.resolve();
60
+ this.path = path;
61
+ this.cache = this.load();
62
+ }
63
+ load() {
64
+ try {
65
+ const data = JSON.parse(fs.readFileSync(this.path, "utf8"));
66
+ return new Map(Object.entries(data));
67
+ }
68
+ catch {
69
+ return new Map();
70
+ }
71
+ }
72
+ persistSync() {
73
+ const obj = Object.fromEntries(this.cache);
74
+ fs.writeFileSync(this.path, JSON.stringify(obj, null, 2));
75
+ }
76
+ async persist() {
77
+ // Chain writes to prevent race conditions
78
+ // Create the write promise that may reject on error
79
+ const writePromise = this.writeQueue.then(() => {
80
+ this.persistSync();
81
+ });
82
+ // Update the queue with error recovery to prevent getting stuck
83
+ // This ensures future writes can proceed even if this one fails
84
+ this.writeQueue = writePromise.catch(() => {
85
+ // Silently recover the queue - error is propagated via writePromise
86
+ });
87
+ // Return the original promise so errors propagate to caller
88
+ return writePromise;
89
+ }
90
+ async get(key) {
91
+ return this.cache.get(key) ?? null;
92
+ }
93
+ async set(key, value) {
94
+ this.cache.set(key, value);
95
+ await this.persist();
96
+ }
97
+ async delete(key) {
98
+ this.cache.delete(key);
99
+ await this.persist();
100
+ }
101
+ async clear() {
102
+ this.cache.clear();
103
+ await this.persist();
104
+ }
105
+ async has(key) {
106
+ return this.cache.has(key);
107
+ }
108
+ keys() {
109
+ return this.cache.keys();
110
+ }
111
+ }
112
+ exports.FileCache = FileCache;
113
+ /**
114
+ * Get localStorage if available (browser environment)
115
+ */
116
+ function getLocalStorage() {
117
+ // Check for browser environment with localStorage
118
+ if (typeof globalThis !== "undefined") {
119
+ const global = globalThis;
120
+ if (typeof global.localStorage !== "undefined") {
121
+ return global.localStorage;
122
+ }
123
+ }
124
+ return null;
125
+ }
126
+ /**
127
+ * Browser localStorage-based cache adapter.
128
+ * Persists to localStorage with a configurable key prefix.
129
+ *
130
+ * Limitations:
131
+ * - 5MB storage limit (varies by browser)
132
+ * - Synchronous API (blocks main thread, usually negligible)
133
+ * - String-only storage (JSON serialization handled internally)
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * import { createTracker, LocalStorageCache } from "@gzeoneth/gov-tracker";
138
+ *
139
+ * const tracker = createTracker({
140
+ * l2Provider,
141
+ * l1Provider,
142
+ * cache: new LocalStorageCache("arb-gov:"),
143
+ * });
144
+ * ```
145
+ */
146
+ class LocalStorageCache {
147
+ constructor(prefix = "tracker:") {
148
+ this.prefix = prefix;
149
+ }
150
+ fullKey(key) {
151
+ return `${this.prefix}${key}`;
152
+ }
153
+ async get(key) {
154
+ const storage = getLocalStorage();
155
+ if (!storage)
156
+ return null;
157
+ const data = storage.getItem(this.fullKey(key));
158
+ if (data === null)
159
+ return null;
160
+ try {
161
+ return JSON.parse(data);
162
+ }
163
+ catch {
164
+ return null;
165
+ }
166
+ }
167
+ async set(key, value) {
168
+ const storage = getLocalStorage();
169
+ if (!storage)
170
+ return;
171
+ storage.setItem(this.fullKey(key), JSON.stringify(value));
172
+ }
173
+ async delete(key) {
174
+ const storage = getLocalStorage();
175
+ if (!storage)
176
+ return;
177
+ storage.removeItem(this.fullKey(key));
178
+ }
179
+ async clear() {
180
+ const storage = getLocalStorage();
181
+ if (!storage)
182
+ return;
183
+ const keysToRemove = [];
184
+ for (let i = 0; i < storage.length; i++) {
185
+ const key = storage.key(i);
186
+ if (key?.startsWith(this.prefix)) {
187
+ keysToRemove.push(key);
188
+ }
189
+ }
190
+ keysToRemove.forEach((k) => storage.removeItem(k));
191
+ }
192
+ async has(key) {
193
+ const storage = getLocalStorage();
194
+ if (!storage)
195
+ return false;
196
+ return storage.getItem(this.fullKey(key)) !== null;
197
+ }
198
+ async keys(prefix) {
199
+ const storage = getLocalStorage();
200
+ if (!storage)
201
+ return [];
202
+ const result = [];
203
+ for (let i = 0; i < storage.length; i++) {
204
+ const fullKey = storage.key(i);
205
+ if (fullKey?.startsWith(this.prefix)) {
206
+ const key = fullKey.slice(this.prefix.length);
207
+ if (!prefix || key.startsWith(prefix)) {
208
+ result.push(key);
209
+ }
210
+ }
211
+ }
212
+ return result;
213
+ }
214
+ }
215
+ exports.LocalStorageCache = LocalStorageCache;
216
+ /**
217
+ * In-memory cache adapter with no persistence.
218
+ * Useful for testing, short-lived sessions, or as a fallback.
219
+ *
220
+ * Data is lost when the page is refreshed or the process exits.
221
+ *
222
+ * @example
223
+ * ```typescript
224
+ * import { createTracker, MemoryCache } from "@gzeoneth/gov-tracker";
225
+ *
226
+ * const tracker = createTracker({
227
+ * l2Provider,
228
+ * l1Provider,
229
+ * cache: new MemoryCache(),
230
+ * });
231
+ * ```
232
+ */
233
+ class MemoryCache {
234
+ constructor() {
235
+ this.cache = new Map();
236
+ }
237
+ async get(key) {
238
+ return this.cache.get(key) ?? null;
239
+ }
240
+ async set(key, value) {
241
+ this.cache.set(key, value);
242
+ }
243
+ async delete(key) {
244
+ this.cache.delete(key);
245
+ }
246
+ async clear() {
247
+ this.cache.clear();
248
+ }
249
+ async has(key) {
250
+ return this.cache.has(key);
251
+ }
252
+ keys() {
253
+ return this.cache.keys();
254
+ }
255
+ }
256
+ exports.MemoryCache = MemoryCache;
257
+ /**
258
+ * Generate cache key from transaction hash (primary cache key format)
259
+ */
260
+ function txHashCacheKey(txHash) {
261
+ return `tx:${txHash.toLowerCase()}`;
262
+ }
263
+ /**
264
+ * Read all cache data without requiring RPC providers.
265
+ * Use this for status/dashboard views that only need cached data.
266
+ *
267
+ * @param cachePath - Path to the cache file
268
+ */
269
+ async function readCacheStatus(cachePath) {
270
+ const cache = new FileCache(cachePath);
271
+ // Load watermarks from discovery checkpoint (unified format)
272
+ const discoveryCheckpoint = await cache.get(discovery_1.WATERMARKS_KEY);
273
+ const watermarks = discoveryCheckpoint?.cachedData.discoveryWatermarks ?? {};
274
+ const checkpoints = new Map();
275
+ const allKeys = cache.keys();
276
+ const keys = Array.isArray(allKeys) ? allKeys : Array.from(allKeys);
277
+ for (const key of keys) {
278
+ if (key.startsWith("tx:")) {
279
+ const checkpoint = await cache.get(key);
280
+ if (checkpoint) {
281
+ checkpoints.set(key, checkpoint);
282
+ }
283
+ }
284
+ }
285
+ return { watermarks, checkpoints };
286
+ }
287
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tracker/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * ProposalStageTracker - Main entry point
3
+ *
4
+ * Tracks Arbitrum governance proposal lifecycle stages from
5
+ * either a governor proposal or a timelock operation.
6
+ *
7
+ * This file is the public API that composes focused modules:
8
+ * - tracker/context.ts: Functional TrackingContext for stage tracking
9
+ * - tracker/pipeline.ts: Pure functions that track stages
10
+ * - tracker/discovery.ts: Proposal and timelock discovery
11
+ * - tracker/query.ts: Checkpoint query operations
12
+ * - tracker/execute.ts: Transaction preparation
13
+ */
14
+ import { ethers } from "ethers";
15
+ import { TrackerOptions, TrackingResult, TrackedStage, TrackingCheckpoint, TrackerStats, ChunkingConfig, DiscoveryWatermarks, DiscoveryTargets, PrepareResult, PrepareOptions, ElectionCheckResult, TimelockLink } from "./types";
16
+ import { DiscoveredProposal, DiscoveredTimelockOp } from "./tracker/discovery";
17
+ /**
18
+ * Extract TimelockLink from stages if PROPOSAL_QUEUED is completed
19
+ */
20
+ export declare function extractTimelockLink(stages: TrackedStage[]): TimelockLink | undefined;
21
+ /**
22
+ * Main proposal stage tracker class
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const tracker = new ProposalStageTracker({
27
+ * l2Provider: new ethers.providers.JsonRpcProvider(ARB1_RPC),
28
+ * l1Provider: new ethers.providers.JsonRpcProvider(ETH_RPC),
29
+ * });
30
+ *
31
+ * // Track by transaction hash (recommended)
32
+ * const results = await tracker.trackByTxHash(creationTxHash);
33
+ *
34
+ * for (const stage of results[0].stages) {
35
+ * console.log(`${stage.type}: ${stage.status}`);
36
+ * }
37
+ *
38
+ * // Resume from checkpoint
39
+ * const resumedTracker = createTracker({
40
+ * l2Provider,
41
+ * l1Provider,
42
+ * checkpoint: savedCheckpoint
43
+ * });
44
+ * const fresh = await resumedTracker.trackByTxHash(creationTxHash);
45
+ * ```
46
+ */
47
+ export declare class ProposalStageTracker {
48
+ private l2Provider;
49
+ private l1Provider;
50
+ private novaProvider;
51
+ private onProgress?;
52
+ /** Chunking configuration for log searches */
53
+ readonly chunkingConfig: ChunkingConfig;
54
+ /** Cache adapter for checkpoint persistence */
55
+ private cache?;
56
+ constructor(options: TrackerOptions);
57
+ /**
58
+ * Read all cache data without requiring RPC providers.
59
+ * Use this for status/dashboard views that only need cached data.
60
+ *
61
+ * This is the ONLY way to access cache data outside of a full tracker instance.
62
+ * All cache access goes through this class to maintain single-system ownership.
63
+ *
64
+ * @param cachePath - Path to the cache file (tracker creates FileCache internally)
65
+ */
66
+ static readCacheStatus(cachePath: string): Promise<{
67
+ watermarks: DiscoveryWatermarks;
68
+ checkpoints: Map<string, TrackingCheckpoint>;
69
+ }>;
70
+ /**
71
+ * Load discovery watermarks from cache.
72
+ * Watermarks are stored as a TrackingCheckpoint for unified cache format.
73
+ * Returns empty object if no watermarks are cached.
74
+ */
75
+ loadWatermarks(): Promise<DiscoveryWatermarks>;
76
+ /**
77
+ * Save discovery watermarks to cache.
78
+ * Watermarks are stored as TrackingCheckpoint with proper metadata,
79
+ * following the same pattern as proposal/timelock checkpoints.
80
+ */
81
+ saveWatermarks(watermarks: DiscoveryWatermarks): Promise<void>;
82
+ /**
83
+ * Discover proposals from a governor in a block range.
84
+ *
85
+ * @param governorAddress - Governor contract address
86
+ * @param fromBlock - Start block (exclusive - searches from fromBlock + 1)
87
+ * @param toBlock - End block (inclusive)
88
+ * @returns Array of discovered proposals
89
+ */
90
+ discoverProposals(governorAddress: string, fromBlock: number, toBlock: number): Promise<DiscoveredProposal[]>;
91
+ /**
92
+ * Discover timelock operations from a timelock in a block range.
93
+ *
94
+ * @param timelockAddress - Timelock contract address
95
+ * @param fromBlock - Start block (exclusive - searches from fromBlock + 1)
96
+ * @param toBlock - End block (inclusive)
97
+ * @returns Array of discovered timelock operations
98
+ */
99
+ discoverTimelockOps(timelockAddress: string, fromBlock: number, toBlock: number): Promise<DiscoveredTimelockOp[]>;
100
+ /**
101
+ * Discover all proposals and timelock operations with auto-watermark management.
102
+ *
103
+ * This is the unified discovery API that handles everything internally:
104
+ * - Loads watermarks from cache (or uses provided fromWatermarks)
105
+ * - Discovers from all enabled targets in parallel
106
+ * - Auto-saves updated watermarks to cache
107
+ *
108
+ * @param targets - Which governors/timelocks to scan
109
+ * @param toBlock - End block for discovery
110
+ * @param fromWatermarks - Optional starting watermarks (overrides cached watermarks)
111
+ * @returns Discovered proposals, timelock ops, and updated watermarks
112
+ */
113
+ discoverAll(targets: DiscoveryTargets, toBlock: number, fromWatermarks?: DiscoveryWatermarks): Promise<{
114
+ proposals: DiscoveredProposal[];
115
+ timelockOps: DiscoveredTimelockOp[];
116
+ watermarks: DiscoveryWatermarks;
117
+ }>;
118
+ /**
119
+ * List all checkpoint keys in the cache.
120
+ */
121
+ listCheckpointKeys(): Promise<string[]>;
122
+ /**
123
+ * Get a specific checkpoint from cache by key.
124
+ */
125
+ getCheckpoint(key: string): Promise<TrackingCheckpoint | null>;
126
+ /**
127
+ * Get all checkpoints from cache.
128
+ */
129
+ getAllCheckpoints(): Promise<Map<string, TrackingCheckpoint>>;
130
+ /**
131
+ * Query incomplete checkpoints that should be re-tracked.
132
+ *
133
+ * @param options.maxAgeDays - Skip items older than this (default: 60)
134
+ * @param options.maxErrorCount - Skip items with more consecutive errors (default: 5)
135
+ */
136
+ queryIncompleteCheckpoints(options?: {
137
+ maxAgeDays?: number;
138
+ maxErrorCount?: number;
139
+ }): Promise<Array<{
140
+ key: string;
141
+ checkpoint: TrackingCheckpoint;
142
+ }>>;
143
+ /**
144
+ * Get aggregated cache statistics.
145
+ *
146
+ * @param maxErrorCount - Items with this many or more errors are counted as "errored" (default: 5)
147
+ */
148
+ getStats(maxErrorCount?: number): Promise<TrackerStats>;
149
+ /**
150
+ * Track from transaction hash (primary tracking entry point)
151
+ *
152
+ * Auto-detects whether the transaction contains a governor proposal or
153
+ * timelock operations and tracks accordingly.
154
+ *
155
+ * Returns an array because a single transaction may contain multiple
156
+ * timelock operations (e.g., SC rotation with 4 operations).
157
+ *
158
+ * When cache is configured on the tracker:
159
+ * - Automatically loads existing checkpoint from cache (zero-RPC resume)
160
+ * - Automatically saves checkpoint to cache after tracking
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * const results = await tracker.trackByTxHash("0x...");
165
+ * for (const result of results) {
166
+ * console.log(`Found ${result.stages.length} stages`);
167
+ * }
168
+ * ```
169
+ */
170
+ trackByTxHash(txHash: string): Promise<TrackingResult[]>;
171
+ /**
172
+ * Internal implementation of trackByTxHash.
173
+ *
174
+ * Uses PipelineContext for stateful tracking - no parameter passing between stages.
175
+ */
176
+ private trackByTxHashInternal;
177
+ /**
178
+ * Track governor proposal using TrackingContext (stateful tracking)
179
+ */
180
+ private trackGovernorWithPipeline;
181
+ /**
182
+ * Track timelock operation using TrackingContext (stateful tracking)
183
+ */
184
+ private trackTimelockWithPipeline;
185
+ /**
186
+ * Build TrackingResult from TrackingContext
187
+ */
188
+ private buildResultFromState;
189
+ /**
190
+ * Track from a cached checkpoint.
191
+ *
192
+ * This is a convenience method that extracts the transaction hash from the
193
+ * checkpoint and dispatches to trackByTxHash. Use this when re-tracking
194
+ * items from queryIncompleteCheckpoints().
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const incomplete = await tracker.queryIncompleteCheckpoints({ maxAgeDays: 60 });
199
+ * for (const { checkpoint } of incomplete) {
200
+ * const result = await tracker.trackFromCheckpoint(checkpoint);
201
+ * // ... handle result
202
+ * }
203
+ * ```
204
+ */
205
+ trackFromCheckpoint(checkpoint: TrackingCheckpoint): Promise<TrackingResult>;
206
+ /**
207
+ * Prepare a transaction for a READY stage without sending it.
208
+ *
209
+ * Returns PrepareResult with the prepared transaction data.
210
+ * Consumer is responsible for signing and sending the transaction.
211
+ *
212
+ * @param stage - The stage to prepare
213
+ * @param options - Preparation options
214
+ * @param allStages - Optional array of all stages (used to extract description for salt resolution)
215
+ *
216
+ * @example
217
+ * ```typescript
218
+ * const result = await tracker.prepareTransaction(readyStage);
219
+ * if (result.success) {
220
+ * console.log(`To: ${result.prepared.to}`);
221
+ * console.log(`Data: ${result.prepared.data}`);
222
+ * console.log(`Chain: ${result.prepared.chain}`);
223
+ *
224
+ * // Execute with your own signer
225
+ * const tx = await signer.sendTransaction({
226
+ * to: result.prepared.to,
227
+ * data: result.prepared.data,
228
+ * value: result.prepared.value,
229
+ * });
230
+ * await tx.wait();
231
+ * } else {
232
+ * console.error(result.error);
233
+ * }
234
+ * ```
235
+ *
236
+ * @note Salt is now pre-computed during tracking and stored in stage.data
237
+ */
238
+ prepareTransaction(stage: TrackedStage, options?: PrepareOptions): Promise<PrepareResult>;
239
+ /**
240
+ * Get the current providers
241
+ */
242
+ getProviders(): {
243
+ l1: ethers.providers.Provider;
244
+ l2: ethers.providers.Provider;
245
+ nova?: ethers.providers.Provider;
246
+ };
247
+ /**
248
+ * Check Security Council election status and prepare available actions
249
+ *
250
+ * @param options.nomineeGovernorAddress - Override the nominee election governor address
251
+ * @returns Election status with prepared transactions for available actions
252
+ */
253
+ checkElection(options?: {
254
+ nomineeGovernorAddress?: string;
255
+ }): Promise<ElectionCheckResult>;
256
+ }
257
+ /**
258
+ * Factory function to create a tracker instance
259
+ */
260
+ export declare function createTracker(options: TrackerOptions): ProposalStageTracker;
261
+ //# sourceMappingURL=tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EACL,cAAc,EACd,cAAc,EAGd,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,cAAc,EAEd,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,YAAY,EACb,MAAM,SAAS,CAAC;AA+BjB,OAAO,EAIL,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAU7B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,SAAS,CAsBpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,UAAU,CAAC,CAAqB;IACxC,8CAA8C;IAC9C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,+CAA+C;IAC/C,OAAO,CAAC,KAAK,CAAC,CAAe;gBAEjB,OAAO,EAAE,cAAc;IAsBnC;;;;;;;;OAQG;WACU,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACvD,UAAU,EAAE,mBAAmB,CAAC;QAChC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;KAC9C,CAAC;IAMF;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIpD;;;;OAIG;IACG,cAAc,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE;;;;;;;OAOG;IACG,iBAAiB,CACrB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIhC;;;;;;;OAOG;IACG,mBAAmB,CACvB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAIlC;;;;;;;;;;;;OAYG;IACG,WAAW,CACf,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,mBAAmB,GACnC,OAAO,CAAC;QACT,SAAS,EAAE,kBAAkB,EAAE,CAAC;QAChC,WAAW,EAAE,oBAAoB,EAAE,CAAC;QACpC,UAAU,EAAE,mBAAmB,CAAC;KACjC,CAAC;IAqBF;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI7C;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIpE;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAInE;;;;;OAKG;IACG,0BAA0B,CAC9B,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACnB,GACL,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAIlE;;;;OAIG;IACG,QAAQ,CAAC,aAAa,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAMhE;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA2C9D;;;;OAIG;YACW,qBAAqB;IA6EnC;;OAEG;YACW,yBAAyB;IA4CvC;;OAEG;YACW,yBAAyB;IA8CvC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;;;;;;;;;;;;;OAeG;IACG,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IA4ClF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACG,kBAAkB,CACtB,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC;IAczB;;OAEG;IACH,YAAY,IAAI;QACd,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC9B,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;KAClC;IAUD;;;;;OAKG;IACG,aAAa,CACjB,OAAO,GAAE;QAAE,sBAAsB,CAAC,EAAE,MAAM,CAAA;KAAO,GAChD,OAAO,CAAC,mBAAmB,CAAC;CAwChC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,oBAAoB,CAE3E"}