@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,108 @@
1
+ /**
2
+ * Timelock-related types for Arbitrum Governance
3
+ */
4
+ import { BigNumber } from "ethers";
5
+ /**
6
+ * Timelock operation state
7
+ */
8
+ export type TimelockOperationState = "UNKNOWN" | "PENDING" | "READY" | "DONE";
9
+ /**
10
+ * Serialized CallScheduledData for JSON storage
11
+ */
12
+ export interface SerializedCallScheduledData {
13
+ operationId: string;
14
+ index: string;
15
+ target: string;
16
+ value: string;
17
+ data: string;
18
+ predecessor: string;
19
+ delay: string;
20
+ blockNumber: number;
21
+ txHash: string;
22
+ logIndex: number;
23
+ timelockAddress: string;
24
+ }
25
+ /**
26
+ * Parsed CallScheduled event data
27
+ */
28
+ export interface CallScheduledData {
29
+ operationId: string;
30
+ index: BigNumber;
31
+ target: string;
32
+ value: BigNumber;
33
+ data: string;
34
+ predecessor: string;
35
+ delay: BigNumber;
36
+ blockNumber: number;
37
+ txHash: string;
38
+ logIndex: number;
39
+ timelockAddress: string;
40
+ }
41
+ /**
42
+ * Parsed CallExecuted event data
43
+ */
44
+ export interface CallExecutedData {
45
+ operationId: string;
46
+ index: BigNumber;
47
+ target: string;
48
+ value: BigNumber;
49
+ data: string;
50
+ blockNumber: number;
51
+ txHash: string;
52
+ logIndex: number;
53
+ }
54
+ /**
55
+ * Parameters for a timelock operation
56
+ */
57
+ export interface TimelockParams {
58
+ target: string;
59
+ value: BigNumber;
60
+ data: string;
61
+ predecessor: string;
62
+ salt: string;
63
+ }
64
+ /**
65
+ * Parameters for a batch timelock operation
66
+ */
67
+ export interface TimelockBatchParams {
68
+ targets: string[];
69
+ values: BigNumber[];
70
+ payloads: string[];
71
+ predecessor: string;
72
+ salt: string;
73
+ }
74
+ /**
75
+ * Combined state of a timelock operation
76
+ */
77
+ export interface TimelockState {
78
+ operationId: string;
79
+ state: TimelockOperationState;
80
+ eta?: number;
81
+ isReady: boolean;
82
+ isDone: boolean;
83
+ scheduledData?: CallScheduledData;
84
+ allScheduledData?: CallScheduledData[];
85
+ executedData?: CallExecutedData;
86
+ isBatch?: boolean;
87
+ }
88
+ /**
89
+ * Operation state from timelock contract state checks
90
+ */
91
+ export interface OperationState {
92
+ isOperation: boolean;
93
+ isPending: boolean;
94
+ isReady: boolean;
95
+ isDone: boolean;
96
+ state: string;
97
+ timestamp: BigNumber;
98
+ }
99
+ /**
100
+ * Link from proposal to timelock operation
101
+ */
102
+ export interface TimelockLink {
103
+ txHash: string;
104
+ operationId: string;
105
+ timelockAddress: string;
106
+ queueBlockNumber: number;
107
+ }
108
+ //# sourceMappingURL=timelock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelock.d.ts","sourceRoot":"","sources":["../../src/types/timelock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Timelock-related types for Arbitrum Governance
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=timelock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timelock.js","sourceRoot":"","sources":["../../src/types/timelock.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Tracking context, results, checkpoint, and execution types
3
+ */
4
+ import { BigNumber } from "ethers";
5
+ import { ChainType, StageType } from "./core";
6
+ import { TrackedStage } from "./stages";
7
+ import { CallScheduledData } from "./timelock";
8
+ import { ProposalType, ProposalData, ProposalState } from "./governor";
9
+ import { TimelockState, TimelockLink } from "./timelock";
10
+ export interface PrepareOptions {
11
+ salt?: string;
12
+ predecessor?: string;
13
+ skipSaltValidation?: boolean;
14
+ skipRetryableValueCalculation?: boolean;
15
+ force?: boolean;
16
+ /** Proposal description (needed for salt derivation if not in stage data) */
17
+ description?: string;
18
+ }
19
+ export type PrepareResult = {
20
+ success: true;
21
+ prepared: PreparedTransaction;
22
+ } | {
23
+ success: false;
24
+ error: string;
25
+ };
26
+ export interface PreparedTransaction {
27
+ to: string;
28
+ data: string;
29
+ value: string;
30
+ chain: ChainType;
31
+ description: string;
32
+ operationId?: string;
33
+ hashValidation?: {
34
+ isValid: boolean;
35
+ error?: string;
36
+ };
37
+ }
38
+ export interface ExecutionResult {
39
+ success: boolean;
40
+ txHash: string;
41
+ blockNumber: number;
42
+ gasUsed: BigNumber;
43
+ error?: string;
44
+ prepared?: PreparedTransaction;
45
+ }
46
+ /**
47
+ * Input for tracking from a governor proposal
48
+ */
49
+ export interface GovernorTrackingInput {
50
+ type: "governor";
51
+ governorAddress: string;
52
+ proposalId: string;
53
+ creationTxHash: string;
54
+ }
55
+ /**
56
+ * Input for tracking from a timelock operation
57
+ */
58
+ export interface TimelockTrackingInput {
59
+ type: "timelock";
60
+ timelockAddress: string;
61
+ operationId: string;
62
+ scheduledTxHash: string;
63
+ }
64
+ /**
65
+ * Input for discovery metadata checkpoint
66
+ */
67
+ export interface DiscoveryTrackingInput {
68
+ type: "discovery";
69
+ id: "watermarks";
70
+ }
71
+ /**
72
+ * Union type for all tracking entry points
73
+ */
74
+ export type TrackingInput = GovernorTrackingInput | TimelockTrackingInput | DiscoveryTrackingInput;
75
+ /**
76
+ * Common context for stage tracking operations
77
+ */
78
+ export interface StageTrackingContext {
79
+ fromBlock?: number;
80
+ toBlock?: number;
81
+ direction?: "forward" | "backward";
82
+ cachedData?: {
83
+ txHash?: string;
84
+ operationId?: string;
85
+ callScheduledData?: CallScheduledData | CallScheduledData[];
86
+ executionTxHash?: string;
87
+ };
88
+ checkpoint?: TrackingCheckpoint;
89
+ }
90
+ /**
91
+ * Hints for the next stage in the pipeline
92
+ */
93
+ export interface NextStageHints {
94
+ fromBlock?: number;
95
+ timelockAddress?: string;
96
+ operationId?: string;
97
+ callScheduledData?: CallScheduledData | CallScheduledData[];
98
+ executionTxHash?: string;
99
+ firstExecutableBlock?: number;
100
+ messagePosition?: string;
101
+ }
102
+ /**
103
+ * Result structure for stage tracking functions
104
+ */
105
+ export interface StageTrackResult {
106
+ stage: TrackedStage;
107
+ hints: NextStageHints;
108
+ }
109
+ /**
110
+ * Extend StageTrackResult with additional stage-specific data
111
+ */
112
+ export type StageTrackResultWith<TExtra> = StageTrackResult & TExtra;
113
+ /**
114
+ * Discovery target keys (shared between watermarks and targets)
115
+ */
116
+ export type DiscoveryKey = "constitutionalGovernor" | "nonConstitutionalGovernor" | "electionNomineeGovernor" | "electionMemberGovernor" | "l2ConstitutionalTimelock" | "l2NonConstitutionalTimelock";
117
+ /** Discovery watermarks for incremental block scanning */
118
+ export type DiscoveryWatermarks = Partial<Record<DiscoveryKey, number>>;
119
+ /** Discovery targets configuration */
120
+ export type DiscoveryTargets = Partial<Record<DiscoveryKey, boolean>>;
121
+ /**
122
+ * Checkpoint for resuming tracking
123
+ */
124
+ export interface TrackingCheckpoint {
125
+ version: 1;
126
+ createdAt: number;
127
+ input: TrackingInput;
128
+ lastProcessedStage: StageType | null;
129
+ lastProcessedBlock: {
130
+ l1: number;
131
+ l2: number;
132
+ nova?: number;
133
+ };
134
+ cachedData: {
135
+ completedStages?: TrackedStage[];
136
+ discoveryWatermarks?: DiscoveryWatermarks;
137
+ };
138
+ metadata?: {
139
+ errorCount: number;
140
+ lastTrackedAt: number;
141
+ };
142
+ }
143
+ /**
144
+ * Aggregated cache statistics
145
+ */
146
+ export interface TrackerStats {
147
+ total: number;
148
+ proposals: {
149
+ total: number;
150
+ complete: number;
151
+ active: number;
152
+ errored: number;
153
+ };
154
+ timelocks: {
155
+ total: number;
156
+ complete: number;
157
+ active: number;
158
+ errored: number;
159
+ };
160
+ elections: {
161
+ total: number;
162
+ complete: number;
163
+ };
164
+ }
165
+ /**
166
+ * Full tracking result
167
+ */
168
+ export interface TrackingResult {
169
+ input: TrackingInput;
170
+ stages: TrackedStage[];
171
+ checkpoint: TrackingCheckpoint;
172
+ isComplete: boolean;
173
+ proposalType?: ProposalType;
174
+ proposalData?: ProposalData;
175
+ timelockState?: TimelockState;
176
+ timelockLink?: TimelockLink;
177
+ currentState?: ProposalState;
178
+ isElection?: boolean;
179
+ }
180
+ //# sourceMappingURL=tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.d.ts","sourceRoot":"","sources":["../../src/types/tracking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Tracking context, results, checkpoint, and execution types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking.js","sourceRoot":"","sources":["../../src/types/tracking.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type definitions for Arbitrum Governance Stage Tracking SDK
3
+ * Re-exports from domain modules in ./types/
4
+ */
5
+ export * from "./types/index";
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,eAAe,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * Type definitions for Arbitrum Governance Stage Tracking SDK
19
+ * Re-exports from domain modules in ./types/
20
+ */
21
+ __exportStar(require("./types/index"), exports);
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;GAGG;AACH,gDAA8B"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Chain and address utilities
3
+ */
4
+ import { ethers } from "ethers";
5
+ import { ChainType } from "../types";
6
+ /**
7
+ * Get chain type from provider network.
8
+ */
9
+ export declare function getChainType(provider: ethers.providers.Provider): Promise<ChainType>;
10
+ /**
11
+ * Case-insensitive address comparison.
12
+ */
13
+ export declare function addressEquals(a: string, b: string): boolean;
14
+ /**
15
+ * Check if an address is in a set of addresses (case-insensitive).
16
+ */
17
+ export declare function isAddressIn(address: string, addresses: readonly string[]): boolean;
18
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/utils/chain.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAK1F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAGlF"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /**
3
+ * Chain and address utilities
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getChainType = getChainType;
7
+ exports.addressEquals = addressEquals;
8
+ exports.isAddressIn = isAddressIn;
9
+ const constants_1 = require("../constants");
10
+ /**
11
+ * Get chain type from provider network.
12
+ */
13
+ async function getChainType(provider) {
14
+ const network = await provider.getNetwork();
15
+ if (network.chainId === constants_1.CHAIN_IDS.NOVA)
16
+ return "NOVA";
17
+ if (network.chainId === constants_1.CHAIN_IDS.ARB_ONE)
18
+ return "L2";
19
+ return "L1";
20
+ }
21
+ /**
22
+ * Case-insensitive address comparison.
23
+ */
24
+ function addressEquals(a, b) {
25
+ return a.toLowerCase() === b.toLowerCase();
26
+ }
27
+ /**
28
+ * Check if an address is in a set of addresses (case-insensitive).
29
+ */
30
+ function isAddressIn(address, addresses) {
31
+ const normalized = address.toLowerCase();
32
+ return addresses.some((a) => a.toLowerCase() === normalized);
33
+ }
34
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/utils/chain.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,oCAKC;AAKD,sCAEC;AAKD,kCAGC;AAzBD,4CAAyC;AAEzC;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,QAAmC;IACpE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,OAAO,KAAK,qBAAS,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IACtD,IAAI,OAAO,CAAC,OAAO,KAAK,qBAAS,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAe,EAAE,SAA4B;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Utilities for filtering and parsing transaction receipt logs
3
+ *
4
+ * These helpers reduce duplication across discovery and stage modules
5
+ * that need to find specific events in transaction receipts.
6
+ */
7
+ import { ethers } from "ethers";
8
+ type Log = ethers.providers.Log;
9
+ /**
10
+ * Filter options for finding logs in a receipt
11
+ */
12
+ export interface LogFilterOptions {
13
+ /** Event topic (topics[0]) to match */
14
+ topic?: string;
15
+ /** Contract address to match */
16
+ address?: string;
17
+ }
18
+ /**
19
+ * Filter logs from a receipt by topic and/or address
20
+ *
21
+ * @example
22
+ * // Find all CallScheduled events
23
+ * const logs = filterLogs(receipt.logs, { topic: EVENT_TOPICS.CALL_SCHEDULED });
24
+ *
25
+ * @example
26
+ * // Find L2ToL1Tx events from ArbSys
27
+ * const logs = filterLogs(receipt.logs, { topic: l2ToL1Topic, address: ARB_SYS });
28
+ */
29
+ export declare function filterLogs(logs: Log[], options: LogFilterOptions): Log[];
30
+ /**
31
+ * Parse logs with a parser function, silently skipping parse failures
32
+ *
33
+ * @example
34
+ * const events = parseLogsSafe(logs, parseCallScheduledEvent);
35
+ */
36
+ export declare function parseLogsSafe<T>(logs: Log[], parser: (log: Log) => T | null): T[];
37
+ /**
38
+ * Find and parse logs in one operation
39
+ *
40
+ * Combines filterLogs and parseLogsSafe for the common pattern of
41
+ * filtering logs by topic/address and parsing them.
42
+ *
43
+ * @example
44
+ * const events = findAndParseLogs(
45
+ * receipt.logs,
46
+ * { topic: EVENT_TOPICS.CALL_SCHEDULED },
47
+ * parseCallScheduledEvent
48
+ * );
49
+ */
50
+ export declare function findAndParseLogs<T>(logs: Log[], options: LogFilterOptions, parser: (log: Log) => T | null): T[];
51
+ /**
52
+ * Find first matching log and parse it
53
+ *
54
+ * @example
55
+ * const event = findFirstLog(
56
+ * receipt.logs,
57
+ * { topic: EVENT_TOPICS.PROPOSAL_CREATED },
58
+ * parseProposalCreatedEvent
59
+ * );
60
+ */
61
+ export declare function findFirstLog<T>(logs: Log[], options: LogFilterOptions, parser: (log: Log) => T | null): T | null;
62
+ /**
63
+ * Count logs by address after filtering by topic
64
+ */
65
+ export declare function countLogsByAddress(logs: Log[], options: Omit<LogFilterOptions, "address">): Map<string, number>;
66
+ export {};
67
+ //# sourceMappingURL=log-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-filters.d.ts","sourceRoot":"","sources":["../../src/utils/log-filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,KAAK,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,gBAAgB,GAAG,GAAG,EAAE,CAUxE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAajF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,GAC7B,CAAC,EAAE,CAGL;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,GAC7B,CAAC,GAAG,IAAI,CAeV;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GACzC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAWrB"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * Utilities for filtering and parsing transaction receipt logs
4
+ *
5
+ * These helpers reduce duplication across discovery and stage modules
6
+ * that need to find specific events in transaction receipts.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.filterLogs = filterLogs;
10
+ exports.parseLogsSafe = parseLogsSafe;
11
+ exports.findAndParseLogs = findAndParseLogs;
12
+ exports.findFirstLog = findFirstLog;
13
+ exports.countLogsByAddress = countLogsByAddress;
14
+ const chain_1 = require("./chain");
15
+ /**
16
+ * Filter logs from a receipt by topic and/or address
17
+ *
18
+ * @example
19
+ * // Find all CallScheduled events
20
+ * const logs = filterLogs(receipt.logs, { topic: EVENT_TOPICS.CALL_SCHEDULED });
21
+ *
22
+ * @example
23
+ * // Find L2ToL1Tx events from ArbSys
24
+ * const logs = filterLogs(receipt.logs, { topic: l2ToL1Topic, address: ARB_SYS });
25
+ */
26
+ function filterLogs(logs, options) {
27
+ return logs.filter((log) => {
28
+ if (options.topic && log.topics[0] !== options.topic) {
29
+ return false;
30
+ }
31
+ if (options.address && !(0, chain_1.addressEquals)(log.address, options.address)) {
32
+ return false;
33
+ }
34
+ return true;
35
+ });
36
+ }
37
+ /**
38
+ * Parse logs with a parser function, silently skipping parse failures
39
+ *
40
+ * @example
41
+ * const events = parseLogsSafe(logs, parseCallScheduledEvent);
42
+ */
43
+ function parseLogsSafe(logs, parser) {
44
+ const results = [];
45
+ for (const log of logs) {
46
+ try {
47
+ const parsed = parser(log);
48
+ if (parsed !== null) {
49
+ results.push(parsed);
50
+ }
51
+ }
52
+ catch {
53
+ // Skip logs that fail to parse
54
+ }
55
+ }
56
+ return results;
57
+ }
58
+ /**
59
+ * Find and parse logs in one operation
60
+ *
61
+ * Combines filterLogs and parseLogsSafe for the common pattern of
62
+ * filtering logs by topic/address and parsing them.
63
+ *
64
+ * @example
65
+ * const events = findAndParseLogs(
66
+ * receipt.logs,
67
+ * { topic: EVENT_TOPICS.CALL_SCHEDULED },
68
+ * parseCallScheduledEvent
69
+ * );
70
+ */
71
+ function findAndParseLogs(logs, options, parser) {
72
+ const filtered = filterLogs(logs, options);
73
+ return parseLogsSafe(filtered, parser);
74
+ }
75
+ /**
76
+ * Find first matching log and parse it
77
+ *
78
+ * @example
79
+ * const event = findFirstLog(
80
+ * receipt.logs,
81
+ * { topic: EVENT_TOPICS.PROPOSAL_CREATED },
82
+ * parseProposalCreatedEvent
83
+ * );
84
+ */
85
+ function findFirstLog(logs, options, parser) {
86
+ for (const log of logs) {
87
+ if (options.topic && log.topics[0] !== options.topic)
88
+ continue;
89
+ if (options.address && !(0, chain_1.addressEquals)(log.address, options.address))
90
+ continue;
91
+ try {
92
+ const parsed = parser(log);
93
+ if (parsed !== null) {
94
+ return parsed;
95
+ }
96
+ }
97
+ catch {
98
+ // Continue to next log
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ /**
104
+ * Count logs by address after filtering by topic
105
+ */
106
+ function countLogsByAddress(logs, options) {
107
+ const counts = new Map();
108
+ for (const log of logs) {
109
+ if (options.topic && log.topics[0] !== options.topic)
110
+ continue;
111
+ const addr = log.address.toLowerCase();
112
+ counts.set(addr, (counts.get(addr) ?? 0) + 1);
113
+ }
114
+ return counts;
115
+ }
116
+ //# sourceMappingURL=log-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-filters.js","sourceRoot":"","sources":["../../src/utils/log-filters.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA4BH,gCAUC;AAQD,sCAaC;AAeD,4CAOC;AAYD,oCAmBC;AAKD,gDAcC;AAhID,mCAAwC;AAcxC;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,IAAW,EAAE,OAAyB;IAC/D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,IAAA,qBAAa,EAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAI,IAAW,EAAE,MAA8B;IAC1E,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAC9B,IAAW,EACX,OAAyB,EACzB,MAA8B;IAE9B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,IAAW,EACX,OAAyB,EACzB,MAA8B;IAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK;YAAE,SAAS;QAC/D,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,IAAA,qBAAa,EAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;YAAE,SAAS;QAE9E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,IAAW,EACX,OAA0C;IAE1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK;YAAE,SAAS;QAE/D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}