@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.
- package/LICENSE +191 -0
- package/README.md +201 -0
- package/dist/abis.d.ts +79 -0
- package/dist/abis.d.ts.map +1 -0
- package/dist/abis.js +159 -0
- package/dist/abis.js.map +1 -0
- package/dist/cli/lib/cli.d.ts +92 -0
- package/dist/cli/lib/cli.d.ts.map +1 -0
- package/dist/cli/lib/cli.js +562 -0
- package/dist/cli/lib/cli.js.map +1 -0
- package/dist/cli/lib/election-check.d.ts +46 -0
- package/dist/cli/lib/election-check.d.ts.map +1 -0
- package/dist/cli/lib/election-check.js +136 -0
- package/dist/cli/lib/election-check.js.map +1 -0
- package/dist/cli/lib/json-state.d.ts +100 -0
- package/dist/cli/lib/json-state.d.ts.map +1 -0
- package/dist/cli/lib/json-state.js +225 -0
- package/dist/cli/lib/json-state.js.map +1 -0
- package/dist/cli/monitor.d.ts +3 -0
- package/dist/cli/monitor.d.ts.map +1 -0
- package/dist/cli/monitor.js +442 -0
- package/dist/cli/monitor.js.map +1 -0
- package/dist/constants.d.ts +235 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +293 -0
- package/dist/constants.js.map +1 -0
- package/dist/discovery/governor-discovery.d.ts +84 -0
- package/dist/discovery/governor-discovery.d.ts.map +1 -0
- package/dist/discovery/governor-discovery.js +310 -0
- package/dist/discovery/governor-discovery.js.map +1 -0
- package/dist/discovery/security-council.d.ts +68 -0
- package/dist/discovery/security-council.d.ts.map +1 -0
- package/dist/discovery/security-council.js +181 -0
- package/dist/discovery/security-council.js.map +1 -0
- package/dist/discovery/timelock-discovery.d.ts +99 -0
- package/dist/discovery/timelock-discovery.d.ts.map +1 -0
- package/dist/discovery/timelock-discovery.js +322 -0
- package/dist/discovery/timelock-discovery.js.map +1 -0
- package/dist/election.d.ts +172 -0
- package/dist/election.d.ts.map +1 -0
- package/dist/election.js +464 -0
- package/dist/election.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +164 -0
- package/dist/index.js.map +1 -0
- package/dist/stages/base.d.ts +127 -0
- package/dist/stages/base.d.ts.map +1 -0
- package/dist/stages/base.js +280 -0
- package/dist/stages/base.js.map +1 -0
- package/dist/stages/l2-to-l1-message.d.ts +108 -0
- package/dist/stages/l2-to-l1-message.d.ts.map +1 -0
- package/dist/stages/l2-to-l1-message.js +422 -0
- package/dist/stages/l2-to-l1-message.js.map +1 -0
- package/dist/stages/proposal-created.d.ts +20 -0
- package/dist/stages/proposal-created.d.ts.map +1 -0
- package/dist/stages/proposal-created.js +62 -0
- package/dist/stages/proposal-created.js.map +1 -0
- package/dist/stages/proposal-queued.d.ts +39 -0
- package/dist/stages/proposal-queued.d.ts.map +1 -0
- package/dist/stages/proposal-queued.js +131 -0
- package/dist/stages/proposal-queued.js.map +1 -0
- package/dist/stages/retryables.d.ts +79 -0
- package/dist/stages/retryables.d.ts.map +1 -0
- package/dist/stages/retryables.js +307 -0
- package/dist/stages/retryables.js.map +1 -0
- package/dist/stages/stage-builder.d.ts +46 -0
- package/dist/stages/stage-builder.d.ts.map +1 -0
- package/dist/stages/stage-builder.js +87 -0
- package/dist/stages/stage-builder.js.map +1 -0
- package/dist/stages/timelock.d.ts +100 -0
- package/dist/stages/timelock.d.ts.map +1 -0
- package/dist/stages/timelock.js +552 -0
- package/dist/stages/timelock.js.map +1 -0
- package/dist/stages/voting.d.ts +18 -0
- package/dist/stages/voting.d.ts.map +1 -0
- package/dist/stages/voting.js +109 -0
- package/dist/stages/voting.js.map +1 -0
- package/dist/tracker/context.d.ts +111 -0
- package/dist/tracker/context.d.ts.map +1 -0
- package/dist/tracker/context.js +264 -0
- package/dist/tracker/context.js.map +1 -0
- package/dist/tracker/discovery.d.ts +89 -0
- package/dist/tracker/discovery.d.ts.map +1 -0
- package/dist/tracker/discovery.js +228 -0
- package/dist/tracker/discovery.js.map +1 -0
- package/dist/tracker/execute.d.ts +44 -0
- package/dist/tracker/execute.d.ts.map +1 -0
- package/dist/tracker/execute.js +126 -0
- package/dist/tracker/execute.js.map +1 -0
- package/dist/tracker/index.d.ts +18 -0
- package/dist/tracker/index.d.ts.map +1 -0
- package/dist/tracker/index.js +70 -0
- package/dist/tracker/index.js.map +1 -0
- package/dist/tracker/pipeline.d.ts +47 -0
- package/dist/tracker/pipeline.d.ts.map +1 -0
- package/dist/tracker/pipeline.js +299 -0
- package/dist/tracker/pipeline.js.map +1 -0
- package/dist/tracker/query.d.ts +45 -0
- package/dist/tracker/query.d.ts.map +1 -0
- package/dist/tracker/query.js +159 -0
- package/dist/tracker/query.js.map +1 -0
- package/dist/tracker/state.d.ts +104 -0
- package/dist/tracker/state.d.ts.map +1 -0
- package/dist/tracker/state.js +287 -0
- package/dist/tracker/state.js.map +1 -0
- package/dist/tracker.d.ts +261 -0
- package/dist/tracker.d.ts.map +1 -0
- package/dist/tracker.js +556 -0
- package/dist/tracker.js.map +1 -0
- package/dist/types/config.d.ts +81 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/core.d.ts +51 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +6 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/cross-chain.d.ts +80 -0
- package/dist/types/cross-chain.d.ts.map +1 -0
- package/dist/types/cross-chain.js +6 -0
- package/dist/types/cross-chain.js.map +1 -0
- package/dist/types/election.d.ts +59 -0
- package/dist/types/election.d.ts.map +1 -0
- package/dist/types/election.js +6 -0
- package/dist/types/election.js.map +1 -0
- package/dist/types/governor.d.ts +71 -0
- package/dist/types/governor.d.ts.map +1 -0
- package/dist/types/governor.js +6 -0
- package/dist/types/governor.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/stages.d.ts +189 -0
- package/dist/types/stages.d.ts.map +1 -0
- package/dist/types/stages.js +23 -0
- package/dist/types/stages.js.map +1 -0
- package/dist/types/timelock.d.ts +108 -0
- package/dist/types/timelock.d.ts.map +1 -0
- package/dist/types/timelock.js +6 -0
- package/dist/types/timelock.js.map +1 -0
- package/dist/types/tracking.d.ts +180 -0
- package/dist/types/tracking.d.ts.map +1 -0
- package/dist/types/tracking.js +6 -0
- package/dist/types/tracking.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/chain.d.ts +18 -0
- package/dist/utils/chain.d.ts.map +1 -0
- package/dist/utils/chain.js +34 -0
- package/dist/utils/chain.js.map +1 -0
- package/dist/utils/log-filters.d.ts +67 -0
- package/dist/utils/log-filters.d.ts.map +1 -0
- package/dist/utils/log-filters.js +116 -0
- package/dist/utils/log-filters.js.map +1 -0
- package/dist/utils/log-search.d.ts +76 -0
- package/dist/utils/log-search.d.ts.map +1 -0
- package/dist/utils/log-search.js +142 -0
- package/dist/utils/log-search.js.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +50 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/operation-id.d.ts +48 -0
- package/dist/utils/operation-id.d.ts.map +1 -0
- package/dist/utils/operation-id.js +102 -0
- package/dist/utils/operation-id.js.map +1 -0
- package/dist/utils/rpc-utils.d.ts +30 -0
- package/dist/utils/rpc-utils.d.ts.map +1 -0
- package/dist/utils/rpc-utils.js +99 -0
- package/dist/utils/rpc-utils.js.map +1 -0
- package/dist/utils/salt-computation.d.ts +78 -0
- package/dist/utils/salt-computation.d.ts.map +1 -0
- package/dist/utils/salt-computation.js +132 -0
- package/dist/utils/salt-computation.js.map +1 -0
- package/dist/utils/salt-resolver.d.ts +63 -0
- package/dist/utils/salt-resolver.d.ts.map +1 -0
- package/dist/utils/salt-resolver.js +144 -0
- package/dist/utils/salt-resolver.js.map +1 -0
- package/dist/utils/scoped-logger.d.ts +43 -0
- package/dist/utils/scoped-logger.d.ts.map +1 -0
- package/dist/utils/scoped-logger.js +72 -0
- package/dist/utils/scoped-logger.js.map +1 -0
- package/dist/utils/stage-helpers.d.ts +51 -0
- package/dist/utils/stage-helpers.d.ts.map +1 -0
- package/dist/utils/stage-helpers.js +143 -0
- package/dist/utils/stage-helpers.js.map +1 -0
- package/dist/utils/stage-metadata.d.ts +62 -0
- package/dist/utils/stage-metadata.d.ts.map +1 -0
- package/dist/utils/stage-metadata.js +140 -0
- package/dist/utils/stage-metadata.js.map +1 -0
- package/dist/utils/timing.d.ts +115 -0
- package/dist/utils/timing.d.ts.map +1 -0
- package/dist/utils/timing.js +303 -0
- package/dist/utils/timing.js.map +1 -0
- package/dist/utils/urls.d.ts +20 -0
- package/dist/utils/urls.d.ts.map +1 -0
- package/dist/utils/urls.js +51 -0
- package/dist/utils/urls.js.map +1 -0
- package/package.json +72 -0
package/dist/tracker.js
ADDED
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ProposalStageTracker - Main entry point
|
|
4
|
+
*
|
|
5
|
+
* Tracks Arbitrum governance proposal lifecycle stages from
|
|
6
|
+
* either a governor proposal or a timelock operation.
|
|
7
|
+
*
|
|
8
|
+
* This file is the public API that composes focused modules:
|
|
9
|
+
* - tracker/context.ts: Functional TrackingContext for stage tracking
|
|
10
|
+
* - tracker/pipeline.ts: Pure functions that track stages
|
|
11
|
+
* - tracker/discovery.ts: Proposal and timelock discovery
|
|
12
|
+
* - tracker/query.ts: Checkpoint query operations
|
|
13
|
+
* - tracker/execute.ts: Transaction preparation
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ProposalStageTracker = void 0;
|
|
17
|
+
exports.extractTimelockLink = extractTimelockLink;
|
|
18
|
+
exports.createTracker = createTracker;
|
|
19
|
+
const ethers_1 = require("ethers");
|
|
20
|
+
const logger_1 = require("./utils/logger");
|
|
21
|
+
const constants_1 = require("./constants");
|
|
22
|
+
const election_1 = require("./election");
|
|
23
|
+
const governor_discovery_1 = require("./discovery/governor-discovery");
|
|
24
|
+
const timelock_discovery_1 = require("./discovery/timelock-discovery");
|
|
25
|
+
const base_1 = require("./stages/base");
|
|
26
|
+
const { tracker: logTracker, discovery: logDiscovery } = logger_1.loggers;
|
|
27
|
+
// Import context and pipeline from tracker modules
|
|
28
|
+
const context_1 = require("./tracker/context");
|
|
29
|
+
const pipeline_1 = require("./tracker/pipeline");
|
|
30
|
+
// Import from focused modules
|
|
31
|
+
const state_1 = require("./tracker/state");
|
|
32
|
+
const discovery_1 = require("./tracker/discovery");
|
|
33
|
+
const discovery_2 = require("./tracker/discovery");
|
|
34
|
+
const query_1 = require("./tracker/query");
|
|
35
|
+
const execute_1 = require("./tracker/execute");
|
|
36
|
+
/**
|
|
37
|
+
* Extract TimelockLink from stages if PROPOSAL_QUEUED is completed
|
|
38
|
+
*/
|
|
39
|
+
function extractTimelockLink(stages) {
|
|
40
|
+
const queuedStage = (0, base_1.findStage)(stages, "PROPOSAL_QUEUED");
|
|
41
|
+
if (!queuedStage || queuedStage.status !== "COMPLETED") {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
const txHash = queuedStage.transactions[0]?.hash;
|
|
45
|
+
const operationId = queuedStage.data.operationId;
|
|
46
|
+
const timelockAddress = queuedStage.data.timelockAddress;
|
|
47
|
+
const queueBlockNumber = queuedStage.transactions[0]?.blockNumber;
|
|
48
|
+
if (!txHash || !operationId || !timelockAddress || !queueBlockNumber) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
txHash,
|
|
53
|
+
operationId,
|
|
54
|
+
timelockAddress,
|
|
55
|
+
queueBlockNumber,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Main proposal stage tracker class
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const tracker = new ProposalStageTracker({
|
|
64
|
+
* l2Provider: new ethers.providers.JsonRpcProvider(ARB1_RPC),
|
|
65
|
+
* l1Provider: new ethers.providers.JsonRpcProvider(ETH_RPC),
|
|
66
|
+
* });
|
|
67
|
+
*
|
|
68
|
+
* // Track by transaction hash (recommended)
|
|
69
|
+
* const results = await tracker.trackByTxHash(creationTxHash);
|
|
70
|
+
*
|
|
71
|
+
* for (const stage of results[0].stages) {
|
|
72
|
+
* console.log(`${stage.type}: ${stage.status}`);
|
|
73
|
+
* }
|
|
74
|
+
*
|
|
75
|
+
* // Resume from checkpoint
|
|
76
|
+
* const resumedTracker = createTracker({
|
|
77
|
+
* l2Provider,
|
|
78
|
+
* l1Provider,
|
|
79
|
+
* checkpoint: savedCheckpoint
|
|
80
|
+
* });
|
|
81
|
+
* const fresh = await resumedTracker.trackByTxHash(creationTxHash);
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
class ProposalStageTracker {
|
|
85
|
+
constructor(options) {
|
|
86
|
+
if (!options.l1Provider) {
|
|
87
|
+
throw new Error("l1Provider is required");
|
|
88
|
+
}
|
|
89
|
+
this.l1Provider = options.l1Provider;
|
|
90
|
+
this.l2Provider =
|
|
91
|
+
options.l2Provider ?? new ethers_1.ethers.providers.JsonRpcProvider(constants_1.DEFAULT_RPC_URLS.ARB_ONE);
|
|
92
|
+
this.novaProvider =
|
|
93
|
+
options.novaProvider ?? new ethers_1.ethers.providers.JsonRpcProvider(constants_1.DEFAULT_RPC_URLS.NOVA);
|
|
94
|
+
this.onProgress = options.onProgress;
|
|
95
|
+
this.chunkingConfig = options.chunkingConfig ?? constants_1.DEFAULT_CHUNKING_CONFIG;
|
|
96
|
+
// Initialize cache: prefer direct cache adapter, fallback to cachePath
|
|
97
|
+
if (options.cache) {
|
|
98
|
+
this.cache = options.cache;
|
|
99
|
+
}
|
|
100
|
+
else if (options.cachePath) {
|
|
101
|
+
this.cache = new state_1.FileCache(options.cachePath);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Static Cache Access
|
|
105
|
+
/**
|
|
106
|
+
* Read all cache data without requiring RPC providers.
|
|
107
|
+
* Use this for status/dashboard views that only need cached data.
|
|
108
|
+
*
|
|
109
|
+
* This is the ONLY way to access cache data outside of a full tracker instance.
|
|
110
|
+
* All cache access goes through this class to maintain single-system ownership.
|
|
111
|
+
*
|
|
112
|
+
* @param cachePath - Path to the cache file (tracker creates FileCache internally)
|
|
113
|
+
*/
|
|
114
|
+
static async readCacheStatus(cachePath) {
|
|
115
|
+
return (0, state_1.readCacheStatus)(cachePath);
|
|
116
|
+
}
|
|
117
|
+
// Watermark Management
|
|
118
|
+
/**
|
|
119
|
+
* Load discovery watermarks from cache.
|
|
120
|
+
* Watermarks are stored as a TrackingCheckpoint for unified cache format.
|
|
121
|
+
* Returns empty object if no watermarks are cached.
|
|
122
|
+
*/
|
|
123
|
+
async loadWatermarks() {
|
|
124
|
+
return (0, discovery_1.loadWatermarks)(this.cache);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Save discovery watermarks to cache.
|
|
128
|
+
* Watermarks are stored as TrackingCheckpoint with proper metadata,
|
|
129
|
+
* following the same pattern as proposal/timelock checkpoints.
|
|
130
|
+
*/
|
|
131
|
+
async saveWatermarks(watermarks) {
|
|
132
|
+
return (0, discovery_1.saveWatermarks)(watermarks, this.cache);
|
|
133
|
+
}
|
|
134
|
+
// Discovery API
|
|
135
|
+
/**
|
|
136
|
+
* Discover proposals from a governor in a block range.
|
|
137
|
+
*
|
|
138
|
+
* @param governorAddress - Governor contract address
|
|
139
|
+
* @param fromBlock - Start block (exclusive - searches from fromBlock + 1)
|
|
140
|
+
* @param toBlock - End block (inclusive)
|
|
141
|
+
* @returns Array of discovered proposals
|
|
142
|
+
*/
|
|
143
|
+
async discoverProposals(governorAddress, fromBlock, toBlock) {
|
|
144
|
+
return (0, discovery_2.discoverProposals)(governorAddress, fromBlock, toBlock, this.l2Provider);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Discover timelock operations from a timelock in a block range.
|
|
148
|
+
*
|
|
149
|
+
* @param timelockAddress - Timelock contract address
|
|
150
|
+
* @param fromBlock - Start block (exclusive - searches from fromBlock + 1)
|
|
151
|
+
* @param toBlock - End block (inclusive)
|
|
152
|
+
* @returns Array of discovered timelock operations
|
|
153
|
+
*/
|
|
154
|
+
async discoverTimelockOps(timelockAddress, fromBlock, toBlock) {
|
|
155
|
+
return (0, discovery_2.discoverTimelockOps)(timelockAddress, fromBlock, toBlock, this.l2Provider);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Discover all proposals and timelock operations with auto-watermark management.
|
|
159
|
+
*
|
|
160
|
+
* This is the unified discovery API that handles everything internally:
|
|
161
|
+
* - Loads watermarks from cache (or uses provided fromWatermarks)
|
|
162
|
+
* - Discovers from all enabled targets in parallel
|
|
163
|
+
* - Auto-saves updated watermarks to cache
|
|
164
|
+
*
|
|
165
|
+
* @param targets - Which governors/timelocks to scan
|
|
166
|
+
* @param toBlock - End block for discovery
|
|
167
|
+
* @param fromWatermarks - Optional starting watermarks (overrides cached watermarks)
|
|
168
|
+
* @returns Discovered proposals, timelock ops, and updated watermarks
|
|
169
|
+
*/
|
|
170
|
+
async discoverAll(targets, toBlock, fromWatermarks) {
|
|
171
|
+
// Load watermarks from cache (or use provided override)
|
|
172
|
+
const watermarks = fromWatermarks ?? (await this.loadWatermarks());
|
|
173
|
+
const result = await (0, discovery_2.discoverAll)(targets, toBlock, this.l2Provider, this.cache, watermarks, { chunkSize: this.chunkingConfig.l2ChunkSize });
|
|
174
|
+
// Auto-save updated watermarks
|
|
175
|
+
await this.saveWatermarks(result.watermarks);
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
// Checkpoint Query API
|
|
179
|
+
/**
|
|
180
|
+
* List all checkpoint keys in the cache.
|
|
181
|
+
*/
|
|
182
|
+
async listCheckpointKeys() {
|
|
183
|
+
return (0, query_1.listCheckpointKeys)(this.cache);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get a specific checkpoint from cache by key.
|
|
187
|
+
*/
|
|
188
|
+
async getCheckpoint(key) {
|
|
189
|
+
return (0, query_1.getCheckpoint)(this.cache, key);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get all checkpoints from cache.
|
|
193
|
+
*/
|
|
194
|
+
async getAllCheckpoints() {
|
|
195
|
+
return (0, query_1.getAllCheckpoints)(this.cache);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Query incomplete checkpoints that should be re-tracked.
|
|
199
|
+
*
|
|
200
|
+
* @param options.maxAgeDays - Skip items older than this (default: 60)
|
|
201
|
+
* @param options.maxErrorCount - Skip items with more consecutive errors (default: 5)
|
|
202
|
+
*/
|
|
203
|
+
async queryIncompleteCheckpoints(options = {}) {
|
|
204
|
+
return (0, query_1.queryIncompleteCheckpoints)(this.cache, options);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get aggregated cache statistics.
|
|
208
|
+
*
|
|
209
|
+
* @param maxErrorCount - Items with this many or more errors are counted as "errored" (default: 5)
|
|
210
|
+
*/
|
|
211
|
+
async getStats(maxErrorCount = 5) {
|
|
212
|
+
return (0, query_1.getStats)(this.cache, maxErrorCount);
|
|
213
|
+
}
|
|
214
|
+
// Main Tracking Entry Points
|
|
215
|
+
/**
|
|
216
|
+
* Track from transaction hash (primary tracking entry point)
|
|
217
|
+
*
|
|
218
|
+
* Auto-detects whether the transaction contains a governor proposal or
|
|
219
|
+
* timelock operations and tracks accordingly.
|
|
220
|
+
*
|
|
221
|
+
* Returns an array because a single transaction may contain multiple
|
|
222
|
+
* timelock operations (e.g., SC rotation with 4 operations).
|
|
223
|
+
*
|
|
224
|
+
* When cache is configured on the tracker:
|
|
225
|
+
* - Automatically loads existing checkpoint from cache (zero-RPC resume)
|
|
226
|
+
* - Automatically saves checkpoint to cache after tracking
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* const results = await tracker.trackByTxHash("0x...");
|
|
231
|
+
* for (const result of results) {
|
|
232
|
+
* console.log(`Found ${result.stages.length} stages`);
|
|
233
|
+
* }
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
async trackByTxHash(txHash) {
|
|
237
|
+
logTracker("trackByTxHash %s", txHash);
|
|
238
|
+
// Cache key for this transaction
|
|
239
|
+
const cacheKey = (0, state_1.txHashCacheKey)(txHash);
|
|
240
|
+
// Load checkpoint from cache for resume
|
|
241
|
+
let checkpoint;
|
|
242
|
+
if (this.cache) {
|
|
243
|
+
checkpoint = (await this.cache.get(cacheKey)) ?? undefined;
|
|
244
|
+
if (checkpoint) {
|
|
245
|
+
logTracker("loaded checkpoint from cache: %s", cacheKey);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
try {
|
|
249
|
+
return await this.trackByTxHashInternal(txHash, cacheKey, checkpoint);
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
// Save checkpoint on error with incremented error count
|
|
253
|
+
if (this.cache) {
|
|
254
|
+
const input = {
|
|
255
|
+
type: "governor",
|
|
256
|
+
governorAddress: "",
|
|
257
|
+
proposalId: "",
|
|
258
|
+
creationTxHash: txHash,
|
|
259
|
+
};
|
|
260
|
+
const prevErrorCount = checkpoint?.metadata?.errorCount ?? 0;
|
|
261
|
+
const errorCheckpoint = checkpoint ?? {
|
|
262
|
+
version: 1,
|
|
263
|
+
createdAt: Date.now(),
|
|
264
|
+
input,
|
|
265
|
+
lastProcessedStage: null,
|
|
266
|
+
lastProcessedBlock: { l1: 0, l2: 0 },
|
|
267
|
+
cachedData: {},
|
|
268
|
+
};
|
|
269
|
+
errorCheckpoint.metadata = { errorCount: prevErrorCount + 1, lastTrackedAt: Date.now() };
|
|
270
|
+
await this.cache.set(cacheKey, errorCheckpoint);
|
|
271
|
+
logTracker("saved checkpoint on error: %s (errorCount=%d)", cacheKey, prevErrorCount + 1);
|
|
272
|
+
}
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Internal implementation of trackByTxHash.
|
|
278
|
+
*
|
|
279
|
+
* Uses PipelineContext for stateful tracking - no parameter passing between stages.
|
|
280
|
+
*/
|
|
281
|
+
async trackByTxHashInternal(txHash, cacheKey, checkpoint) {
|
|
282
|
+
// RESUME PATH: If we have a checkpoint, check what type it is
|
|
283
|
+
if (checkpoint && checkpoint.input.type !== "discovery") {
|
|
284
|
+
logTracker("RESUME: found checkpoint for tx, type=%s", checkpoint.input.type);
|
|
285
|
+
if (checkpoint.input.type === "governor") {
|
|
286
|
+
const input = checkpoint.input;
|
|
287
|
+
const result = await this.trackGovernorWithPipeline(input.governorAddress, input.proposalId, input.creationTxHash, checkpoint, cacheKey);
|
|
288
|
+
return [result];
|
|
289
|
+
}
|
|
290
|
+
else if (checkpoint.input.type === "timelock") {
|
|
291
|
+
const input = checkpoint.input;
|
|
292
|
+
const result = await this.trackTimelockWithPipeline(input.timelockAddress, input.operationId, input.scheduledTxHash, checkpoint, cacheKey);
|
|
293
|
+
return [result];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Try as proposal first
|
|
297
|
+
const proposal = await (0, governor_discovery_1.discoverProposalByTxHash)(txHash, this.l2Provider);
|
|
298
|
+
if (proposal) {
|
|
299
|
+
logDiscovery("found proposal in tx, proposalId=%s", proposal.proposalId);
|
|
300
|
+
const result = await this.trackGovernorWithPipeline(proposal.governorAddress, proposal.proposalId, proposal.creationTxHash, checkpoint, cacheKey);
|
|
301
|
+
return [result];
|
|
302
|
+
}
|
|
303
|
+
// Try as timelock operations (may be batch with multiple ops)
|
|
304
|
+
const callScheduledEvents = await (0, timelock_discovery_1.findCallScheduledByTxHash)(txHash, this.l2Provider);
|
|
305
|
+
if (callScheduledEvents && callScheduledEvents.length > 0) {
|
|
306
|
+
logDiscovery("found %d timelock operation(s) in tx", callScheduledEvents.length);
|
|
307
|
+
// Group by unique operationId (batch operations have multiple calls with same operationId)
|
|
308
|
+
const seenOperationIds = new Set();
|
|
309
|
+
const results = [];
|
|
310
|
+
for (const event of callScheduledEvents) {
|
|
311
|
+
if (seenOperationIds.has(event.operationId))
|
|
312
|
+
continue;
|
|
313
|
+
seenOperationIds.add(event.operationId);
|
|
314
|
+
const result = await this.trackTimelockWithPipeline(event.timelockAddress, event.operationId, txHash, checkpoint, cacheKey, event);
|
|
315
|
+
results.push(result);
|
|
316
|
+
}
|
|
317
|
+
return results;
|
|
318
|
+
}
|
|
319
|
+
logTracker("no proposal or timelock operations found in tx");
|
|
320
|
+
return [];
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Track governor proposal using TrackingContext (stateful tracking)
|
|
324
|
+
*/
|
|
325
|
+
async trackGovernorWithPipeline(governorAddress, proposalId, creationTxHash, checkpoint, cacheKey) {
|
|
326
|
+
const input = {
|
|
327
|
+
type: "governor",
|
|
328
|
+
governorAddress,
|
|
329
|
+
proposalId,
|
|
330
|
+
creationTxHash,
|
|
331
|
+
};
|
|
332
|
+
// Create tracking context
|
|
333
|
+
const initialState = (0, context_1.createTrackingContext)({
|
|
334
|
+
providers: {
|
|
335
|
+
l2: this.l2Provider,
|
|
336
|
+
l1: this.l1Provider,
|
|
337
|
+
nova: this.novaProvider,
|
|
338
|
+
},
|
|
339
|
+
input,
|
|
340
|
+
onProgress: this.onProgress,
|
|
341
|
+
chunkingConfig: this.chunkingConfig,
|
|
342
|
+
checkpoint,
|
|
343
|
+
cacheKey,
|
|
344
|
+
});
|
|
345
|
+
// Run the governor pipeline (stages 1-7)
|
|
346
|
+
const finalState = await (0, pipeline_1.trackGovernorPipeline)(initialState);
|
|
347
|
+
// Build result from state
|
|
348
|
+
const result = this.buildResultFromState(finalState);
|
|
349
|
+
// Save checkpoint to cache
|
|
350
|
+
if (this.cache && cacheKey) {
|
|
351
|
+
result.checkpoint.metadata = { errorCount: 0, lastTrackedAt: Date.now() };
|
|
352
|
+
await this.cache.set(cacheKey, result.checkpoint);
|
|
353
|
+
logTracker("saved checkpoint to cache: %s", cacheKey);
|
|
354
|
+
}
|
|
355
|
+
return result;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Track timelock operation using TrackingContext (stateful tracking)
|
|
359
|
+
*/
|
|
360
|
+
async trackTimelockWithPipeline(timelockAddress, operationId, scheduledTxHash, checkpoint, cacheKey, callScheduledEvent) {
|
|
361
|
+
const input = {
|
|
362
|
+
type: "timelock",
|
|
363
|
+
timelockAddress,
|
|
364
|
+
operationId,
|
|
365
|
+
scheduledTxHash,
|
|
366
|
+
};
|
|
367
|
+
// Create tracking context with bootstrap data
|
|
368
|
+
const initialState = (0, context_1.createTrackingContext)({
|
|
369
|
+
providers: {
|
|
370
|
+
l2: this.l2Provider,
|
|
371
|
+
l1: this.l1Provider,
|
|
372
|
+
nova: this.novaProvider,
|
|
373
|
+
},
|
|
374
|
+
input,
|
|
375
|
+
onProgress: this.onProgress,
|
|
376
|
+
chunkingConfig: this.chunkingConfig,
|
|
377
|
+
checkpoint,
|
|
378
|
+
cacheKey,
|
|
379
|
+
callScheduledData: callScheduledEvent ? [callScheduledEvent] : undefined,
|
|
380
|
+
});
|
|
381
|
+
// Run the timelock pipeline (stages 4-7)
|
|
382
|
+
const finalState = await (0, pipeline_1.trackTimelockPipeline)(initialState);
|
|
383
|
+
// Build result from state
|
|
384
|
+
const result = this.buildResultFromState(finalState);
|
|
385
|
+
// Save checkpoint to cache
|
|
386
|
+
if (this.cache && cacheKey) {
|
|
387
|
+
result.checkpoint.metadata = { errorCount: 0, lastTrackedAt: Date.now() };
|
|
388
|
+
await this.cache.set(cacheKey, result.checkpoint);
|
|
389
|
+
logTracker("saved checkpoint to cache: %s", cacheKey);
|
|
390
|
+
}
|
|
391
|
+
return result;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Build TrackingResult from TrackingContext
|
|
395
|
+
*/
|
|
396
|
+
buildResultFromState(state) {
|
|
397
|
+
const stages = state.stages;
|
|
398
|
+
const checkpoint = (0, context_1.createCheckpoint)(state);
|
|
399
|
+
const timelockLink = extractTimelockLink(stages);
|
|
400
|
+
return {
|
|
401
|
+
input: state.input,
|
|
402
|
+
stages,
|
|
403
|
+
checkpoint,
|
|
404
|
+
isComplete: (0, context_1.isComplete)(state),
|
|
405
|
+
proposalType: (0, context_1.getProposalType)(state),
|
|
406
|
+
proposalData: (0, context_1.getProposalData)(state),
|
|
407
|
+
timelockLink,
|
|
408
|
+
currentState: (0, context_1.getProposalState)(state),
|
|
409
|
+
isElection: (0, context_1.getIsElection)(state),
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Track from a cached checkpoint.
|
|
414
|
+
*
|
|
415
|
+
* This is a convenience method that extracts the transaction hash from the
|
|
416
|
+
* checkpoint and dispatches to trackByTxHash. Use this when re-tracking
|
|
417
|
+
* items from queryIncompleteCheckpoints().
|
|
418
|
+
*
|
|
419
|
+
* @example
|
|
420
|
+
* ```typescript
|
|
421
|
+
* const incomplete = await tracker.queryIncompleteCheckpoints({ maxAgeDays: 60 });
|
|
422
|
+
* for (const { checkpoint } of incomplete) {
|
|
423
|
+
* const result = await tracker.trackFromCheckpoint(checkpoint);
|
|
424
|
+
* // ... handle result
|
|
425
|
+
* }
|
|
426
|
+
* ```
|
|
427
|
+
*/
|
|
428
|
+
async trackFromCheckpoint(checkpoint) {
|
|
429
|
+
const input = checkpoint.input;
|
|
430
|
+
if (input.type === "governor") {
|
|
431
|
+
if (!input.creationTxHash) {
|
|
432
|
+
throw new Error("Governor checkpoint missing creationTxHash");
|
|
433
|
+
}
|
|
434
|
+
const results = await this.trackByTxHash(input.creationTxHash);
|
|
435
|
+
if (results.length === 0) {
|
|
436
|
+
throw new Error(`No proposal found in tx ${input.creationTxHash}`);
|
|
437
|
+
}
|
|
438
|
+
if (results.length > 1) {
|
|
439
|
+
logTracker("WARNING: trackFromCheckpoint found %d results in tx %s, returning first only. " +
|
|
440
|
+
"Use trackByTxHash() to get all results.", results.length, input.creationTxHash);
|
|
441
|
+
}
|
|
442
|
+
return results[0];
|
|
443
|
+
}
|
|
444
|
+
else if (input.type === "timelock") {
|
|
445
|
+
if (!input.scheduledTxHash) {
|
|
446
|
+
throw new Error("Timelock checkpoint missing scheduledTxHash");
|
|
447
|
+
}
|
|
448
|
+
const results = await this.trackByTxHash(input.scheduledTxHash);
|
|
449
|
+
if (results.length === 0) {
|
|
450
|
+
throw new Error(`No timelock operation found in tx ${input.scheduledTxHash}`);
|
|
451
|
+
}
|
|
452
|
+
if (results.length > 1) {
|
|
453
|
+
logTracker("WARNING: trackFromCheckpoint found %d results in tx %s, returning first only. " +
|
|
454
|
+
"Use trackByTxHash() to get all results.", results.length, input.scheduledTxHash);
|
|
455
|
+
}
|
|
456
|
+
return results[0];
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
throw new Error(`Unsupported checkpoint input type: ${input.type}`);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
// Transaction Preparation
|
|
463
|
+
/**
|
|
464
|
+
* Prepare a transaction for a READY stage without sending it.
|
|
465
|
+
*
|
|
466
|
+
* Returns PrepareResult with the prepared transaction data.
|
|
467
|
+
* Consumer is responsible for signing and sending the transaction.
|
|
468
|
+
*
|
|
469
|
+
* @param stage - The stage to prepare
|
|
470
|
+
* @param options - Preparation options
|
|
471
|
+
* @param allStages - Optional array of all stages (used to extract description for salt resolution)
|
|
472
|
+
*
|
|
473
|
+
* @example
|
|
474
|
+
* ```typescript
|
|
475
|
+
* const result = await tracker.prepareTransaction(readyStage);
|
|
476
|
+
* if (result.success) {
|
|
477
|
+
* console.log(`To: ${result.prepared.to}`);
|
|
478
|
+
* console.log(`Data: ${result.prepared.data}`);
|
|
479
|
+
* console.log(`Chain: ${result.prepared.chain}`);
|
|
480
|
+
*
|
|
481
|
+
* // Execute with your own signer
|
|
482
|
+
* const tx = await signer.sendTransaction({
|
|
483
|
+
* to: result.prepared.to,
|
|
484
|
+
* data: result.prepared.data,
|
|
485
|
+
* value: result.prepared.value,
|
|
486
|
+
* });
|
|
487
|
+
* await tx.wait();
|
|
488
|
+
* } else {
|
|
489
|
+
* console.error(result.error);
|
|
490
|
+
* }
|
|
491
|
+
* ```
|
|
492
|
+
*
|
|
493
|
+
* @note Salt is now pre-computed during tracking and stored in stage.data
|
|
494
|
+
*/
|
|
495
|
+
async prepareTransaction(stage, options = {}) {
|
|
496
|
+
return (0, execute_1.prepareTransaction)(stage, {
|
|
497
|
+
l1Provider: this.l1Provider,
|
|
498
|
+
l2Provider: this.l2Provider,
|
|
499
|
+
novaProvider: this.novaProvider,
|
|
500
|
+
}, options);
|
|
501
|
+
}
|
|
502
|
+
// Provider Access
|
|
503
|
+
/**
|
|
504
|
+
* Get the current providers
|
|
505
|
+
*/
|
|
506
|
+
getProviders() {
|
|
507
|
+
return {
|
|
508
|
+
l1: this.l1Provider,
|
|
509
|
+
l2: this.l2Provider,
|
|
510
|
+
nova: this.novaProvider,
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
// Election Support
|
|
514
|
+
/**
|
|
515
|
+
* Check Security Council election status and prepare available actions
|
|
516
|
+
*
|
|
517
|
+
* @param options.nomineeGovernorAddress - Override the nominee election governor address
|
|
518
|
+
* @returns Election status with prepared transactions for available actions
|
|
519
|
+
*/
|
|
520
|
+
async checkElection(options = {}) {
|
|
521
|
+
const nomineeGovernor = options.nomineeGovernorAddress ?? constants_1.ADDRESSES.ELECTION_NOMINEE_GOVERNOR;
|
|
522
|
+
logTracker("checkElection for %s", nomineeGovernor);
|
|
523
|
+
const status = await (0, election_1.checkElectionStatus)(this.l2Provider, this.l1Provider, nomineeGovernor);
|
|
524
|
+
const result = {
|
|
525
|
+
status,
|
|
526
|
+
canCreate: status.canCreateElection,
|
|
527
|
+
canTriggerMember: false,
|
|
528
|
+
prepared: {},
|
|
529
|
+
};
|
|
530
|
+
if (status.canCreateElection) {
|
|
531
|
+
const { transaction } = (0, election_1.prepareElectionCreation)(status, nomineeGovernor);
|
|
532
|
+
result.prepared.createElection = transaction;
|
|
533
|
+
}
|
|
534
|
+
if (status.electionCount > 0) {
|
|
535
|
+
const currentElectionIndex = status.electionCount - 1;
|
|
536
|
+
const electionStatus = await (0, election_1.trackElectionProposal)(currentElectionIndex, this.l2Provider, this.l1Provider);
|
|
537
|
+
result.currentElection = electionStatus;
|
|
538
|
+
result.canTriggerMember = electionStatus.canProceedToMemberPhase;
|
|
539
|
+
if (electionStatus.canProceedToMemberPhase) {
|
|
540
|
+
const memberTx = await (0, election_1.prepareMemberElectionTrigger)(electionStatus, this.l2Provider);
|
|
541
|
+
if (memberTx) {
|
|
542
|
+
result.prepared.triggerMember = memberTx;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
return result;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
exports.ProposalStageTracker = ProposalStageTracker;
|
|
550
|
+
/**
|
|
551
|
+
* Factory function to create a tracker instance
|
|
552
|
+
*/
|
|
553
|
+
function createTracker(options) {
|
|
554
|
+
return new ProposalStageTracker(options);
|
|
555
|
+
}
|
|
556
|
+
//# sourceMappingURL=tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for the tracker
|
|
3
|
+
*/
|
|
4
|
+
import { ethers } from "ethers";
|
|
5
|
+
import { TrackedStage } from "./stages";
|
|
6
|
+
/**
|
|
7
|
+
* Chunking configuration for log searches
|
|
8
|
+
*/
|
|
9
|
+
export interface ChunkingConfig {
|
|
10
|
+
l2ChunkSize: number;
|
|
11
|
+
l1ChunkSize: number;
|
|
12
|
+
novaChunkSize?: number;
|
|
13
|
+
delayBetweenChunks: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Retry configuration for RPC calls
|
|
17
|
+
*/
|
|
18
|
+
export interface RetryConfig {
|
|
19
|
+
maxRetries: number;
|
|
20
|
+
initialDelay: number;
|
|
21
|
+
maxDelay: number;
|
|
22
|
+
backoffMultiplier: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Progress callback for monitoring stage tracking
|
|
26
|
+
*/
|
|
27
|
+
export interface TrackingProgress {
|
|
28
|
+
stage: TrackedStage;
|
|
29
|
+
stages: TrackedStage[];
|
|
30
|
+
currentIndex: number;
|
|
31
|
+
totalStages: number;
|
|
32
|
+
isComplete: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Progress callback function type
|
|
36
|
+
*/
|
|
37
|
+
export type OnProgressCallback = (progress: TrackingProgress) => void | Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Main tracker options
|
|
40
|
+
*/
|
|
41
|
+
export interface TrackerOptions {
|
|
42
|
+
l2Provider: ethers.providers.Provider;
|
|
43
|
+
l1Provider: ethers.providers.Provider;
|
|
44
|
+
novaProvider?: ethers.providers.Provider;
|
|
45
|
+
chunkingConfig?: ChunkingConfig;
|
|
46
|
+
onProgress?: OnProgressCallback;
|
|
47
|
+
/**
|
|
48
|
+
* Path to cache file (Node.js only). Creates a FileCache internally.
|
|
49
|
+
* For browser environments, use the `cache` option instead.
|
|
50
|
+
*/
|
|
51
|
+
cachePath?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Custom cache adapter instance. Use this for browser environments
|
|
54
|
+
* or custom storage backends.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* // Browser with localStorage
|
|
59
|
+
* cache: new LocalStorageCache("arb-gov:")
|
|
60
|
+
*
|
|
61
|
+
* // In-memory (no persistence)
|
|
62
|
+
* cache: new MemoryCache()
|
|
63
|
+
*
|
|
64
|
+
* // Custom adapter
|
|
65
|
+
* cache: new MyRedisCache(redisClient)
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
cache?: CacheAdapter;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Cache adapter interface
|
|
72
|
+
*/
|
|
73
|
+
export interface CacheAdapter {
|
|
74
|
+
get<T>(key: string): Promise<T | null>;
|
|
75
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
76
|
+
delete(key: string): Promise<void>;
|
|
77
|
+
clear(): Promise<void>;
|
|
78
|
+
has(key: string): Promise<boolean>;
|
|
79
|
+
keys(prefix?: string): Promise<string[]> | string[] | IterableIterator<string>;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACzC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;CAChF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|