@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,442 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ /**
41
+ * Monitor CLI - Example SDK Usage
42
+ *
43
+ * NOTE: This is a CLI application that demonstrates SDK usage, not library code.
44
+ * It serves as both a reference implementation and a production-ready tool.
45
+ * Developers should treat this as an application of the SDK, not as part of the SDK API.
46
+ *
47
+ * Demonstrates how to use the governance tracking SDK for:
48
+ * - Discovering proposals and timelock operations
49
+ * - Tracking lifecycle stages
50
+ * - Preparing and executing transactions
51
+ *
52
+ * Usage: npx @gzeoneth/gov-tracker [run|track|election|status] [options]
53
+ */
54
+ const dotenv = __importStar(require("dotenv"));
55
+ dotenv.config();
56
+ const os = __importStar(require("os"));
57
+ const path = __importStar(require("path"));
58
+ const fs = __importStar(require("fs"));
59
+ const debug_1 = __importDefault(require("debug"));
60
+ const commander_1 = require("commander");
61
+ const index_1 = require("../index");
62
+ const json_state_1 = require("./lib/json-state");
63
+ const election_check_1 = require("./lib/election-check");
64
+ const cli_1 = require("./lib/cli");
65
+ /**
66
+ * Get the platform-specific application data directory
67
+ * - Windows: %APPDATA%\gov-tracker
68
+ * - macOS: ~/Library/Application Support/gov-tracker
69
+ * - Linux: ~/.config/gov-tracker (follows XDG Base Directory specification)
70
+ */
71
+ function getAppDataDir() {
72
+ const homeDir = os.homedir();
73
+ const platform = os.platform();
74
+ let baseDir;
75
+ if (platform === "win32") {
76
+ // Windows: Use APPDATA or fallback to %USERPROFILE%\AppData\Roaming
77
+ baseDir = process.env.APPDATA || path.join(homeDir, "AppData", "Roaming");
78
+ }
79
+ else if (platform === "darwin") {
80
+ // macOS: Use Application Support directory
81
+ baseDir = path.join(homeDir, "Library", "Application Support");
82
+ }
83
+ else {
84
+ // Linux and others: Use XDG_CONFIG_HOME or fallback to ~/.config
85
+ baseDir = process.env.XDG_CONFIG_HOME || path.join(homeDir, ".config");
86
+ }
87
+ return path.join(baseDir, "gov-tracker");
88
+ }
89
+ /**
90
+ * Get the default cache path and ensure the directory exists
91
+ */
92
+ function getDefaultCachePath() {
93
+ const appDataDir = getAppDataDir();
94
+ // Create directory if it doesn't exist (synchronously at startup)
95
+ try {
96
+ if (!fs.existsSync(appDataDir)) {
97
+ fs.mkdirSync(appDataDir, { recursive: true });
98
+ }
99
+ }
100
+ catch (_error) {
101
+ // If we can't create the directory, fall back to current directory
102
+ console.warn(`Warning: Could not create app data directory ${appDataDir}, using ./gov-tracker-cache.json`);
103
+ return "./gov-tracker-cache.json";
104
+ }
105
+ return path.join(appDataDir, "gov-tracker-cache.json");
106
+ }
107
+ // Default cache path in OS-specific application data directory
108
+ const DEFAULT_CACHE_PATH = getDefaultCachePath();
109
+ function createProgressCallback() {
110
+ return (progress) => {
111
+ const { stage, currentIndex, totalStages } = progress;
112
+ if (stage.status === "NOT_STARTED")
113
+ return;
114
+ console.log(` [${currentIndex + 1}/${totalStages}] ${(0, index_1.formatStageTitle)(stage.type)} (${stage.chain}): ${stage.status}`);
115
+ };
116
+ }
117
+ const program = new commander_1.Command()
118
+ .name("monitor")
119
+ .description("Monitor Arbitrum governance proposals")
120
+ .version("0.1.0");
121
+ // ============================================================================
122
+ // Run Command
123
+ // ============================================================================
124
+ const runCmd = program
125
+ .command("run")
126
+ .description("Discover, track, and optionally prepare/execute");
127
+ (0, cli_1.addOptions)(runCmd, cli_1.rpcOptions);
128
+ runCmd
129
+ .option("--cache <path>", "Cache file", DEFAULT_CACHE_PATH)
130
+ .option("--start-block <block>", "Start block for discovery (skips cache)")
131
+ .option("--block-lag <blocks>", `Blocks behind tip (default: ${cli_1.DEFAULT_BLOCK_LAG})`, String(cli_1.DEFAULT_BLOCK_LAG))
132
+ .option("--max-age-days <days>", "Max age for re-tracking incomplete proposals (default: 60)", "60")
133
+ .option("--prepare", "Prepare transactions for ready stages (dry-run)")
134
+ .option("--write", "Execute prepared transactions (requires --private-key)")
135
+ .addOption(new commander_1.Option("--private-key <key>", "Private key for execution").env("PRIVATE_KEY"))
136
+ .option("--force", "Force prepare even for completed stages (historical validation)")
137
+ .option("--prepare-pending", "Prepare pending stages (waiting for delays)")
138
+ .option("--loop", "Run in continuous loop")
139
+ .option("--interval <seconds>", "Loop interval in seconds", "60")
140
+ .addOption(new commander_1.Option("--health-check-url <url>", "Health check URL to ping").env("HEALTH_CHECK_URL"))
141
+ .option("--json-output <path>", "Write JSON state for dashboard integration")
142
+ .option("--election", "Also check for Security Council elections each cycle")
143
+ .option("--concurrency <n>", "Number of concurrent tracking operations", "1")
144
+ .option("--l1-chunk-size <size>", `L1 chunk size for log searches (default: ${index_1.CHUNK_SIZES.L1})`, String(index_1.CHUNK_SIZES.L1))
145
+ .option("--l2-chunk-size <size>", `L2 chunk size for log searches (default: ${index_1.CHUNK_SIZES.L2})`, String(index_1.CHUNK_SIZES.L2))
146
+ .option("--verbose", "Enable verbose logging")
147
+ .action(async (opts) => {
148
+ if (opts.verbose)
149
+ debug_1.default.enable("gov-tracker:*");
150
+ (0, cli_1.requirePrivateKeyForWrite)(opts);
151
+ const providers = (0, cli_1.createProvidersFromOptions)(opts);
152
+ const l1ChunkSize = parseInt(opts.l1ChunkSize, 10);
153
+ const l2ChunkSize = parseInt(opts.l2ChunkSize, 10);
154
+ const chunkingConfig = {
155
+ l1ChunkSize,
156
+ l2ChunkSize,
157
+ novaChunkSize: l2ChunkSize,
158
+ delayBetweenChunks: index_1.CHUNK_SIZES.DELAY_MS,
159
+ };
160
+ const tracker = (0, index_1.createTracker)({
161
+ ...providers,
162
+ cachePath: opts.cache,
163
+ chunkingConfig,
164
+ onProgress: createProgressCallback(),
165
+ });
166
+ const signer = opts.write ? (0, cli_1.createSigner)(opts.privateKey) : null;
167
+ const startBlock = opts.startBlock ? parseInt(opts.startBlock, 10) : undefined;
168
+ const blockLag = parseInt(opts.blockLag, 10);
169
+ const maxAgeDays = parseInt(opts.maxAgeDays, 10);
170
+ const intervalMs = parseInt(opts.interval, 10) * 1000;
171
+ const concurrency = parseInt(opts.concurrency, 10);
172
+ if (opts.verbose) {
173
+ if (startBlock !== undefined)
174
+ console.log(`Starting discovery from block ${startBlock}`);
175
+ console.log(`Block lag: ${blockLag} blocks behind tip`);
176
+ console.log(`Max age for re-tracking: ${maxAgeDays} days`);
177
+ console.log(`Max consecutive errors before skip: ${cli_1.MAX_CONSECUTIVE_ERRORS}`);
178
+ if (concurrency > 1)
179
+ console.log(`Concurrency: ${concurrency}`);
180
+ }
181
+ if (signer)
182
+ console.log(`Executing with: ${signer.address}`);
183
+ // Track whether this is the first cycle (for startBlock override)
184
+ let isFirstCycle = true;
185
+ async function runCycle() {
186
+ console.log("Discovering proposals and operations...\n");
187
+ let electionsSkipped = 0;
188
+ // Only use startBlock on the first cycle; subsequent cycles resume from watermarks
189
+ const cycleStartBlock = isFirstCycle ? startBlock : undefined;
190
+ isFirstCycle = false;
191
+ const { result, proposals, timelockOps } = await (0, cli_1.runMonitorCycle)(tracker, providers.l2Provider, {
192
+ prepare: opts.prepare || opts.write || opts.force || opts.preparePending,
193
+ force: opts.force,
194
+ preparePending: opts.preparePending,
195
+ startBlock: cycleStartBlock,
196
+ blockLag,
197
+ maxAgeDays,
198
+ concurrency,
199
+ onTrack: async (r) => {
200
+ // Skip showing complete elections
201
+ if (r.result?.isElection && r.result?.isComplete) {
202
+ electionsSkipped++;
203
+ return {};
204
+ }
205
+ if (r.result) {
206
+ console.log(`\n[${r.key}]`);
207
+ console.log((0, cli_1.formatTrackingResult)(r.result));
208
+ }
209
+ else if (r.error) {
210
+ console.log(`\n[${r.key}] ERROR: ${r.error}`);
211
+ }
212
+ if (r.prepared) {
213
+ console.log(`\n[PREPARED] ${r.key}`);
214
+ console.log((0, cli_1.formatDryRun)(r.prepared));
215
+ if (signer) {
216
+ const execResult = await (0, cli_1.executeTransaction)(r.prepared, signer, providers);
217
+ if (!execResult.success) {
218
+ console.error(` Execution failed: ${execResult.error}`);
219
+ return {};
220
+ }
221
+ console.log(` Executed! Re-tracking to find next stages...`);
222
+ return { shouldRetrack: true };
223
+ }
224
+ }
225
+ return {};
226
+ },
227
+ });
228
+ const stats = await tracker.getStats();
229
+ console.log(`\nFound ${proposals.length} new proposals, ${timelockOps.length} new ops | ` +
230
+ `Incomplete: ${stats.proposals.active} proposals, ${stats.timelocks.active} timelocks | ` +
231
+ `Tracked: ${result.tracked}, Prepared: ${result.prepared}` +
232
+ (electionsSkipped > 0 ? ` (${electionsSkipped} elections skipped)` : ""));
233
+ if (opts.jsonOutput) {
234
+ const checkpoints = await tracker.getAllCheckpoints();
235
+ (0, json_state_1.writeDashboardState)((0, json_state_1.buildDashboardState)(checkpoints), opts.jsonOutput);
236
+ if (opts.verbose)
237
+ console.log(`JSON state written to ${opts.jsonOutput}`);
238
+ }
239
+ if (opts.election) {
240
+ try {
241
+ const electionResult = await (0, election_check_1.checkAndExecuteElection)(providers, signer, {
242
+ write: opts.write,
243
+ verbose: opts.verbose,
244
+ });
245
+ for (const error of electionResult.errors) {
246
+ console.error(`[ELECTION] ${error}`);
247
+ }
248
+ }
249
+ catch (error) {
250
+ console.error(`[ELECTION] Check failed: ${error.message}`);
251
+ }
252
+ }
253
+ }
254
+ if (opts.loop) {
255
+ console.log(`Running in loop mode, checking every ${opts.interval} seconds...`);
256
+ if (opts.healthCheckUrl)
257
+ console.log(`Health check URL: ${opts.healthCheckUrl}`);
258
+ if (opts.jsonOutput)
259
+ console.log(`JSON output: ${opts.jsonOutput}`);
260
+ if (opts.election)
261
+ console.log(`Election checking: enabled`);
262
+ }
263
+ await (0, cli_1.runWithLoop)(runCycle, {
264
+ loop: opts.loop,
265
+ intervalMs,
266
+ healthCheckUrl: opts.healthCheckUrl,
267
+ });
268
+ });
269
+ // ============================================================================
270
+ // Track Command
271
+ // ============================================================================
272
+ const trackCmd = program.command("track").description("Track a specific proposal or operation");
273
+ (0, cli_1.addOptions)(trackCmd, cli_1.rpcOptions);
274
+ trackCmd
275
+ .option("--tx <hash>", "Transaction hash")
276
+ .option("--prepare", "Prepare transactions for ready stages (dry-run)")
277
+ .option("--write", "Execute prepared transactions (requires --private-key)")
278
+ .addOption(new commander_1.Option("--private-key <key>", "Private key for execution").env("PRIVATE_KEY"))
279
+ .option("--force", "Force prepare even for completed stages (historical validation)")
280
+ .option("--prepare-pending", "Prepare pending stages (waiting for delays)")
281
+ .option("--l1-chunk-size <size>", `L1 chunk size for log searches (default: ${index_1.CHUNK_SIZES.L1})`, String(index_1.CHUNK_SIZES.L1))
282
+ .option("--l2-chunk-size <size>", `L2 chunk size for log searches (default: ${index_1.CHUNK_SIZES.L2})`, String(index_1.CHUNK_SIZES.L2))
283
+ .option("--verbose", "Enable verbose logging")
284
+ .action(async (opts) => {
285
+ if (opts.verbose)
286
+ debug_1.default.enable("gov-tracker:*");
287
+ (0, cli_1.requirePrivateKeyForWrite)(opts);
288
+ if (!opts.tx) {
289
+ console.error("Error: --tx is required for tracking");
290
+ process.exit(1);
291
+ }
292
+ console.log(`Tracking from tx: ${opts.tx}\n`);
293
+ try {
294
+ const providers = (0, cli_1.createProvidersFromOptions)(opts);
295
+ const l1ChunkSize = parseInt(opts.l1ChunkSize, 10);
296
+ const l2ChunkSize = parseInt(opts.l2ChunkSize, 10);
297
+ const chunkingConfig = {
298
+ l1ChunkSize,
299
+ l2ChunkSize,
300
+ novaChunkSize: l2ChunkSize,
301
+ delayBetweenChunks: index_1.CHUNK_SIZES.DELAY_MS,
302
+ };
303
+ const tracker = (0, index_1.createTracker)({
304
+ ...providers,
305
+ chunkingConfig,
306
+ onProgress: opts.concurrency === 1 || opts.verbose ? createProgressCallback() : undefined,
307
+ });
308
+ const shouldPrepare = opts.prepare || opts.write || opts.force || opts.preparePending;
309
+ const { results, preparations } = await (0, cli_1.trackAndPrepare)(tracker, opts.tx, {
310
+ prepare: shouldPrepare,
311
+ force: opts.force,
312
+ preparePending: opts.preparePending,
313
+ });
314
+ // Format output
315
+ results.forEach((r, i) => {
316
+ const label = results.length > 1 ? `Operation ${i + 1}/${results.length}` : undefined;
317
+ console.log((0, cli_1.formatTrackingResult)(r, label));
318
+ });
319
+ preparations.forEach((prep) => {
320
+ if (prep.success && prep.prepared) {
321
+ console.log(`\n${(0, cli_1.formatDryRun)(prep.prepared)}`);
322
+ }
323
+ else if (!prep.success) {
324
+ console.log(`\n[PREPARE ERROR] ${prep.error}`);
325
+ }
326
+ });
327
+ // Execute if --write
328
+ if (opts.write && preparations.length > 0) {
329
+ const signer = (0, cli_1.createSigner)(opts.privateKey);
330
+ console.log(`\n=== Executing with ${signer.address} ===`);
331
+ let currentPreparations = preparations;
332
+ let chainDepth = 0;
333
+ const maxChainDepth = 10;
334
+ while (currentPreparations.length > 0 && chainDepth < maxChainDepth) {
335
+ chainDepth++;
336
+ let executedAny = false;
337
+ for (const prep of currentPreparations) {
338
+ if (prep.success && prep.prepared) {
339
+ const result = await (0, cli_1.executeTransaction)(prep.prepared, signer, providers);
340
+ if (!result.success) {
341
+ console.error(`Execution failed: ${result.error}`);
342
+ }
343
+ else {
344
+ executedAny = true;
345
+ }
346
+ }
347
+ }
348
+ if (!executedAny)
349
+ break;
350
+ console.log(`\nRe-tracking to find next stages...`);
351
+ const retracked = await (0, cli_1.trackAndPrepare)(tracker, opts.tx, { prepare: true });
352
+ retracked.results.forEach((r, i) => {
353
+ const label = retracked.results.length > 1
354
+ ? `Operation ${i + 1}/${retracked.results.length}`
355
+ : undefined;
356
+ console.log((0, cli_1.formatTrackingResult)(r, label));
357
+ });
358
+ retracked.preparations.forEach((prep) => {
359
+ if (prep.success && prep.prepared)
360
+ console.log(`\n${(0, cli_1.formatDryRun)(prep.prepared)}`);
361
+ else if (!prep.success)
362
+ console.log(`\n[PREPARE ERROR] ${prep.error}`);
363
+ });
364
+ currentPreparations = retracked.preparations;
365
+ }
366
+ }
367
+ }
368
+ catch (e) {
369
+ console.error(e.message);
370
+ process.exit(1);
371
+ }
372
+ });
373
+ // ============================================================================
374
+ // Status Command
375
+ // ============================================================================
376
+ program
377
+ .command("status")
378
+ .description("Show cached state")
379
+ .option("--cache <path>", "Cache file", DEFAULT_CACHE_PATH)
380
+ .option("--json", "Output as JSON")
381
+ .action(async (opts) => {
382
+ const { watermarks, checkpoints } = await index_1.ProposalStageTracker.readCacheStatus(opts.cache);
383
+ if (opts.json) {
384
+ const checkpointsObj = {};
385
+ for (const [key, checkpoint] of checkpoints) {
386
+ checkpointsObj[key] = checkpoint;
387
+ }
388
+ console.log(JSON.stringify({ watermarks, checkpoints: checkpointsObj }, null, 2));
389
+ }
390
+ else {
391
+ console.log((0, cli_1.formatCacheStatus)(checkpoints));
392
+ }
393
+ });
394
+ // ============================================================================
395
+ // Election Command
396
+ // ============================================================================
397
+ const electionCmd = program
398
+ .command("election")
399
+ .description("Check Security Council election status");
400
+ (0, cli_1.addOptions)(electionCmd, cli_1.rpcOptions);
401
+ electionCmd
402
+ .option("--write", "Create election if ready (requires --private-key)")
403
+ .addOption(new commander_1.Option("--private-key <key>", "Private key for execution").env("PRIVATE_KEY"))
404
+ .option("--verbose", "Enable verbose logging")
405
+ .option("--loop", "Run in continuous loop")
406
+ .option("--interval <seconds>", "Loop interval in seconds", "60")
407
+ .addOption(new commander_1.Option("--health-check-url <url>", "Health check URL to ping").env("HEALTH_CHECK_URL"))
408
+ .action(async (opts) => {
409
+ if (opts.verbose)
410
+ debug_1.default.enable("gov-tracker:*");
411
+ (0, cli_1.requirePrivateKeyForWrite)(opts);
412
+ const providers = (0, cli_1.createProvidersFromOptions)(opts);
413
+ const signer = opts.write ? (0, cli_1.createSigner)(opts.privateKey) : null;
414
+ async function checkElection() {
415
+ try {
416
+ const result = await (0, election_check_1.checkAndExecuteElection)(providers, signer, {
417
+ write: opts.write,
418
+ verbose: true,
419
+ });
420
+ console.log(`\n${(0, election_check_1.formatElectionStatus)(result.status, result.currentElectionStatus)}`);
421
+ for (const error of result.errors) {
422
+ console.error(`[ERROR] ${error}`);
423
+ }
424
+ }
425
+ catch (error) {
426
+ console.error("Election check failed:", error.message);
427
+ }
428
+ }
429
+ const intervalMs = parseInt(opts.interval, 10) * 1000;
430
+ if (opts.loop) {
431
+ console.log(`Running in loop mode, checking every ${opts.interval} seconds...`);
432
+ if (opts.healthCheckUrl)
433
+ console.log(`Health check URL: ${opts.healthCheckUrl}`);
434
+ }
435
+ await (0, cli_1.runWithLoop)(checkElection, {
436
+ loop: opts.loop,
437
+ intervalMs,
438
+ healthCheckUrl: opts.healthCheckUrl,
439
+ });
440
+ });
441
+ program.parse();
442
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/cli/monitor.ts"],"names":[],"mappings":"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"}