@gzeoneth/gov-tracker 0.2.0-0 → 0.2.0-2

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 (101) hide show
  1. package/README.md +3 -0
  2. package/dist/calldata/decoder.d.ts.map +1 -1
  3. package/dist/calldata/decoder.js +14 -8
  4. package/dist/calldata/decoder.js.map +1 -1
  5. package/dist/calldata/parameter-decoder.js +8 -8
  6. package/dist/calldata/parameter-decoder.js.map +1 -1
  7. package/dist/cli/lib/cli.d.ts.map +1 -1
  8. package/dist/cli/lib/cli.js +5 -6
  9. package/dist/cli/lib/cli.js.map +1 -1
  10. package/dist/cli/lib/json-state.d.ts.map +1 -1
  11. package/dist/cli/lib/json-state.js +12 -11
  12. package/dist/cli/lib/json-state.js.map +1 -1
  13. package/dist/cli/monitor.js +2 -2
  14. package/dist/cli/monitor.js.map +1 -1
  15. package/dist/index.d.ts +6 -6
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +24 -20
  18. package/dist/index.js.map +1 -1
  19. package/dist/simulation/simulation-data.js +2 -2
  20. package/dist/simulation/simulation-data.js.map +1 -1
  21. package/dist/stages/{stage-builder.d.ts → builder.d.ts} +11 -7
  22. package/dist/stages/builder.d.ts.map +1 -0
  23. package/dist/stages/{stage-builder.js → builder.js} +12 -3
  24. package/dist/stages/builder.js.map +1 -0
  25. package/dist/stages/l2-to-l1-message.d.ts +3 -3
  26. package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
  27. package/dist/stages/l2-to-l1-message.js +11 -12
  28. package/dist/stages/l2-to-l1-message.js.map +1 -1
  29. package/dist/stages/proposal-created.d.ts +2 -2
  30. package/dist/stages/proposal-created.d.ts.map +1 -1
  31. package/dist/stages/proposal-created.js +4 -4
  32. package/dist/stages/proposal-created.js.map +1 -1
  33. package/dist/stages/proposal-queued.d.ts +2 -2
  34. package/dist/stages/proposal-queued.d.ts.map +1 -1
  35. package/dist/stages/proposal-queued.js +8 -9
  36. package/dist/stages/proposal-queued.js.map +1 -1
  37. package/dist/stages/retryables.d.ts +3 -3
  38. package/dist/stages/retryables.d.ts.map +1 -1
  39. package/dist/stages/retryables.js +14 -15
  40. package/dist/stages/retryables.js.map +1 -1
  41. package/dist/stages/timelock.d.ts +3 -3
  42. package/dist/stages/timelock.d.ts.map +1 -1
  43. package/dist/stages/timelock.js +32 -32
  44. package/dist/stages/timelock.js.map +1 -1
  45. package/dist/stages/{base.d.ts → utils.d.ts} +78 -35
  46. package/dist/stages/utils.d.ts.map +1 -0
  47. package/dist/stages/{base.js → utils.js} +208 -63
  48. package/dist/stages/utils.js.map +1 -0
  49. package/dist/stages/voting.d.ts +2 -2
  50. package/dist/stages/voting.d.ts.map +1 -1
  51. package/dist/stages/voting.js +2 -2
  52. package/dist/stages/voting.js.map +1 -1
  53. package/dist/tracker/cache.d.ts +104 -0
  54. package/dist/tracker/cache.d.ts.map +1 -0
  55. package/dist/tracker/cache.js +287 -0
  56. package/dist/tracker/cache.js.map +1 -0
  57. package/dist/tracker/execute.js +8 -8
  58. package/dist/tracker/execute.js.map +1 -1
  59. package/dist/tracker/pipeline.d.ts +3 -3
  60. package/dist/tracker/pipeline.d.ts.map +1 -1
  61. package/dist/tracker/pipeline.js +38 -35
  62. package/dist/tracker/pipeline.js.map +1 -1
  63. package/dist/tracker/query.js +3 -3
  64. package/dist/tracker/query.js.map +1 -1
  65. package/dist/tracker/state.d.ts +88 -81
  66. package/dist/tracker/state.d.ts.map +1 -1
  67. package/dist/tracker/state.js +241 -264
  68. package/dist/tracker/state.js.map +1 -1
  69. package/dist/tracker.d.ts +4 -4
  70. package/dist/tracker.d.ts.map +1 -1
  71. package/dist/tracker.js +22 -20
  72. package/dist/tracker.js.map +1 -1
  73. package/dist/types/calldata.d.ts +15 -3
  74. package/dist/types/calldata.d.ts.map +1 -1
  75. package/dist/types/calldata.js +7 -0
  76. package/dist/types/calldata.js.map +1 -1
  77. package/dist/types/core.d.ts +12 -0
  78. package/dist/types/core.d.ts.map +1 -1
  79. package/dist/types/core.js +30 -0
  80. package/dist/types/core.js.map +1 -1
  81. package/dist/types/index.d.ts +3 -3
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/dist/types/index.js +7 -1
  84. package/dist/types/index.js.map +1 -1
  85. package/dist/types/stages.d.ts +32 -17
  86. package/dist/types/stages.d.ts.map +1 -1
  87. package/dist/types/stages.js +2 -0
  88. package/dist/types/stages.js.map +1 -1
  89. package/package.json +2 -1
  90. package/dist/stages/base.d.ts.map +0 -1
  91. package/dist/stages/base.js.map +0 -1
  92. package/dist/stages/stage-builder.d.ts.map +0 -1
  93. package/dist/stages/stage-builder.js.map +0 -1
  94. package/dist/tracker/context.d.ts +0 -111
  95. package/dist/tracker/context.d.ts.map +0 -1
  96. package/dist/tracker/context.js +0 -264
  97. package/dist/tracker/context.js.map +0 -1
  98. package/dist/utils/stage-helpers.d.ts +0 -50
  99. package/dist/utils/stage-helpers.d.ts.map +0 -1
  100. package/dist/utils/stage-helpers.js +0 -135
  101. package/dist/utils/stage-helpers.js.map +0 -1
@@ -1,111 +0,0 @@
1
- /**
2
- * TrackingContext - Functional state management for pipeline tracking
3
- *
4
- * This module provides a purely functional approach to tracking context:
5
- * - TrackingContext interface defines the immutable state shape
6
- * - Pure functions transform state and derive values
7
- * - No classes, no mutation, no hidden state
8
- *
9
- * Benefits:
10
- * - Easy testing: just create plain objects
11
- * - Transparent: can log/inspect full state anytime
12
- * - Predictable: same input → same output
13
- * - Composable: mix and match functions freely
14
- * - Debuggable: save/restore state snapshots
15
- */
16
- import { ethers } from "ethers";
17
- import { TrackedStage, TrackingCheckpoint, TrackingInput, StageType, CallScheduledData, ProposalData, ProposalType, ProposalState, OnProgressCallback, ChunkingConfig } from "../types";
18
- /**
19
- * Providers for multi-chain operations
20
- */
21
- export interface Providers {
22
- readonly l2: ethers.providers.Provider;
23
- readonly l1: ethers.providers.Provider;
24
- readonly nova: ethers.providers.Provider;
25
- }
26
- /**
27
- * Options for creating a TrackingContext
28
- */
29
- export interface CreateTrackingContextOptions {
30
- providers: Providers;
31
- input: TrackingInput;
32
- onProgress?: OnProgressCallback;
33
- chunkingConfig?: ChunkingConfig;
34
- checkpoint?: TrackingCheckpoint;
35
- cacheKey?: string;
36
- /** Bootstrap data for timelock-only tracking */
37
- callScheduledData?: CallScheduledData[];
38
- }
39
- /**
40
- * TrackingContext - Immutable state for pipeline tracking
41
- *
42
- * All values are derived from stages. This interface represents
43
- * a snapshot of the pipeline at a point in time.
44
- *
45
- * @example
46
- * ```typescript
47
- * let ctx = createTrackingContext({ providers, input });
48
- * ctx = await addStage(ctx, proposalCreatedStage);
49
- * const opId = getOperationId(ctx);
50
- * ```
51
- */
52
- export interface TrackingContext {
53
- readonly providers: Providers;
54
- readonly chunkingConfig: ChunkingConfig;
55
- readonly onProgress?: OnProgressCallback;
56
- readonly cacheKey?: string;
57
- readonly input: TrackingInput;
58
- readonly callScheduledData?: CallScheduledData[];
59
- readonly stages: TrackedStage[];
60
- readonly stageIndex: number;
61
- }
62
- /**
63
- * Create a new TrackingContext.
64
- */
65
- export declare function createTrackingContext(options: CreateTrackingContextOptions): TrackingContext;
66
- /**
67
- * Add or update a stage. Returns new context.
68
- */
69
- export declare function addStage(ctx: TrackingContext, stage: TrackedStage): Promise<TrackingContext>;
70
- /** Check if a stage is completed (COMPLETED or SKIPPED). */
71
- export declare function isStageCompleted(ctx: TrackingContext, type: StageType): boolean;
72
- /** Get a completed stage for zero-RPC resume. */
73
- export declare function getCompletedStage(ctx: TrackingContext, type: StageType): TrackedStage | undefined;
74
- /** Get a cached stage (any status). */
75
- export declare function getCachedStage(ctx: TrackingContext, type: StageType): TrackedStage | undefined;
76
- /**
77
- * Check if all stages are complete.
78
- */
79
- export declare function isComplete(ctx: TrackingContext): boolean;
80
- export declare const getGovernorAddress: (ctx: TrackingContext) => string | undefined;
81
- export declare const getProposalId: (ctx: TrackingContext) => string | undefined;
82
- export declare function getTimelockAddress(ctx: TrackingContext): string | undefined;
83
- export declare function getOperationId(ctx: TrackingContext): string | undefined;
84
- export declare function getCallScheduledData(ctx: TrackingContext): CallScheduledData[] | undefined;
85
- export declare const getFirstCallScheduledData: (ctx: TrackingContext) => CallScheduledData | undefined;
86
- export declare const getQueueBlockNumber: (ctx: TrackingContext) => number | undefined;
87
- /** Proposal data from PROPOSAL_CREATED stage */
88
- export declare function getProposalData(ctx: TrackingContext): ProposalData | undefined;
89
- export declare function getProposalType(ctx: TrackingContext): ProposalType | undefined;
90
- export declare const getIsElection: (ctx: TrackingContext) => boolean;
91
- export declare const getProposalState: (ctx: TrackingContext) => ProposalState | undefined;
92
- export declare function getVotingEndBlock(ctx: TrackingContext): number | undefined;
93
- export declare function getL2ExecutionTxHash(ctx: TrackingContext): string | undefined;
94
- export declare const getFirstExecutableBlock: (ctx: TrackingContext) => number | undefined;
95
- export declare function getOutboxExecutionTx(ctx: TrackingContext): {
96
- hash: string;
97
- blockNumber: number;
98
- } | undefined;
99
- export declare function getL1ExecutionTxHash(ctx: TrackingContext): string | undefined;
100
- export declare function createCheckpoint(ctx: TrackingContext): TrackingCheckpoint;
101
- export declare function toResult(ctx: TrackingContext): {
102
- input: TrackingInput;
103
- stages: TrackedStage[];
104
- checkpoint: TrackingCheckpoint;
105
- isComplete: boolean;
106
- proposalType: ProposalType | undefined;
107
- proposalData: ProposalData | undefined;
108
- currentState: ProposalState | undefined;
109
- isElection: boolean;
110
- };
111
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tracker/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAa,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,SAAS,EAET,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,cAAc,EAMf,MAAM,UAAU,CAAC;AAclB;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAE9B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAG9B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAG9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAGjD,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,eAAe,CA6B5F;AAqBD;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,eAAe,CAAC,CAU1B;AAMD,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAG/E;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAGjG;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,SAAS,CAE9F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAExD;AAWD,eAAO,MAAM,kBAAkB,GAAI,KAAK,eAAe,uBACgB,CAAC;AACxE,eAAO,MAAM,aAAa,GAAI,KAAK,eAAe,uBACgB,CAAC;AAGnE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAM3E;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAMvE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,iBAAiB,EAAE,GAAG,SAAS,CAM1F;AAED,eAAO,MAAM,yBAAyB,GAAI,KAAK,eAAe,kCAAmC,CAAC;AAClG,eAAO,MAAM,mBAAmB,GAAI,KAAK,eAAe,uBACX,CAAC;AAE9C,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,GAAG,SAAS,CA8B9E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,GAAG,SAAS,CAK9E;AAED,eAAO,MAAM,aAAa,GAAI,KAAK,eAAe,YAGjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,eAAe,KACiB,aAAa,GAAG,SAAS,CAAC;AAEhG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAM1E;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAG7E;AAED,eAAO,MAAM,uBAAuB,GAAI,KAAK,eAAe,uBACsB,CAAC;AAEnF,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,eAAe,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAKnD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAG7E;AAID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,kBAAkB,CAazE;AAcD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe;;;;;;;;;EAW5C"}
@@ -1,264 +0,0 @@
1
- "use strict";
2
- /**
3
- * TrackingContext - Functional state management for pipeline tracking
4
- *
5
- * This module provides a purely functional approach to tracking context:
6
- * - TrackingContext interface defines the immutable state shape
7
- * - Pure functions transform state and derive values
8
- * - No classes, no mutation, no hidden state
9
- *
10
- * Benefits:
11
- * - Easy testing: just create plain objects
12
- * - Transparent: can log/inspect full state anytime
13
- * - Predictable: same input → same output
14
- * - Composable: mix and match functions freely
15
- * - Debuggable: save/restore state snapshots
16
- */
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.getFirstExecutableBlock = exports.getProposalState = exports.getIsElection = exports.getQueueBlockNumber = exports.getFirstCallScheduledData = exports.getProposalId = exports.getGovernorAddress = void 0;
19
- exports.createTrackingContext = createTrackingContext;
20
- exports.addStage = addStage;
21
- exports.isStageCompleted = isStageCompleted;
22
- exports.getCompletedStage = getCompletedStage;
23
- exports.getCachedStage = getCachedStage;
24
- exports.isComplete = isComplete;
25
- exports.getTimelockAddress = getTimelockAddress;
26
- exports.getOperationId = getOperationId;
27
- exports.getCallScheduledData = getCallScheduledData;
28
- exports.getProposalData = getProposalData;
29
- exports.getProposalType = getProposalType;
30
- exports.getVotingEndBlock = getVotingEndBlock;
31
- exports.getL2ExecutionTxHash = getL2ExecutionTxHash;
32
- exports.getOutboxExecutionTx = getOutboxExecutionTx;
33
- exports.getL1ExecutionTxHash = getL1ExecutionTxHash;
34
- exports.createCheckpoint = createCheckpoint;
35
- exports.toResult = toResult;
36
- const ethers_1 = require("ethers");
37
- const logger_1 = require("../utils/logger");
38
- const base_1 = require("../stages/base");
39
- const governor_discovery_1 = require("../discovery/governor-discovery");
40
- const constants_1 = require("../constants");
41
- const { tracker: logTracker } = logger_1.loggers;
42
- // State Creation
43
- /**
44
- * Create a new TrackingContext.
45
- */
46
- function createTrackingContext(options) {
47
- // Initialize stages based on tracking path
48
- const includeProposal = options.input.type === "governor";
49
- const addressForPath = options.input.type === "governor"
50
- ? options.input.governorAddress
51
- : options.input.type === "timelock"
52
- ? options.input.timelockAddress
53
- : "";
54
- const initialStages = (0, base_1.initializeStagesForPath)(addressForPath, includeProposal);
55
- let ctx = {
56
- providers: options.providers,
57
- chunkingConfig: options.chunkingConfig ?? constants_1.DEFAULT_CHUNKING_CONFIG,
58
- onProgress: options.onProgress,
59
- cacheKey: options.cacheKey,
60
- input: options.input,
61
- callScheduledData: options.callScheduledData,
62
- stages: initialStages,
63
- stageIndex: 0,
64
- };
65
- // Load from checkpoint if provided
66
- if (options.checkpoint?.cachedData.completedStages?.length) {
67
- ctx = loadFromCheckpoint(ctx, options.checkpoint);
68
- }
69
- return ctx;
70
- }
71
- /**
72
- * Load stages from a checkpoint.
73
- */
74
- function loadFromCheckpoint(ctx, checkpoint) {
75
- const completedStages = checkpoint.cachedData.completedStages;
76
- if (!completedStages?.length)
77
- return ctx;
78
- logTracker("RESUME: loading %d completed stages from checkpoint", completedStages.length);
79
- let stages = ctx.stages;
80
- for (const stage of completedStages) {
81
- stages = (0, base_1.updateStageInList)(stages, stage);
82
- }
83
- return { ...ctx, stages, stageIndex: completedStages.length };
84
- }
85
- // Stage Management
86
- /**
87
- * Add or update a stage. Returns new context.
88
- */
89
- async function addStage(ctx, stage) {
90
- const newStages = (0, base_1.updateStageInList)(ctx.stages, stage);
91
- const newCtx = {
92
- ...ctx,
93
- stages: newStages,
94
- stageIndex: ctx.stageIndex + 1,
95
- };
96
- await emitProgress(newCtx, stage);
97
- return newCtx;
98
- }
99
- // Stage lookup helper (defined early for use in stage management functions)
100
- const findStage = (ctx, type) => ctx.stages.find((s) => s.type === type);
101
- /** Check if a stage is completed (COMPLETED or SKIPPED). */
102
- function isStageCompleted(ctx, type) {
103
- const s = findStage(ctx, type);
104
- return s?.status === "COMPLETED" || s?.status === "SKIPPED";
105
- }
106
- /** Get a completed stage for zero-RPC resume. */
107
- function getCompletedStage(ctx, type) {
108
- const s = findStage(ctx, type);
109
- return s?.status === "COMPLETED" || s?.status === "SKIPPED" ? s : undefined;
110
- }
111
- /** Get a cached stage (any status). */
112
- function getCachedStage(ctx, type) {
113
- return findStage(ctx, type);
114
- }
115
- /**
116
- * Check if all stages are complete.
117
- */
118
- function isComplete(ctx) {
119
- return (0, base_1.areAllStagesComplete)(ctx.stages);
120
- }
121
- // Stage data helpers
122
- const stageData = (ctx, type) => findStage(ctx, type)?.data;
123
- const execTx = (s) => s?.transactions?.find((tx) => tx.description === "executed");
124
- const chainTx = (s, chain) => s?.transactions?.find((tx) => tx.chain === chain);
125
- // Derived Getters - Input-based
126
- const getGovernorAddress = (ctx) => ctx.input.type === "governor" ? ctx.input.governorAddress : undefined;
127
- exports.getGovernorAddress = getGovernorAddress;
128
- const getProposalId = (ctx) => ctx.input.type === "governor" ? ctx.input.proposalId : undefined;
129
- exports.getProposalId = getProposalId;
130
- // Derived Getters - Multi-source lookups
131
- function getTimelockAddress(ctx) {
132
- if (ctx.input.type === "timelock")
133
- return ctx.input.timelockAddress;
134
- return (stageData(ctx, "PROPOSAL_QUEUED")?.timelockAddress ??
135
- stageData(ctx, "L2_TIMELOCK")?.timelockAddress);
136
- }
137
- function getOperationId(ctx) {
138
- if (ctx.input.type === "timelock")
139
- return ctx.input.operationId;
140
- return (stageData(ctx, "PROPOSAL_QUEUED")?.operationId ??
141
- stageData(ctx, "L2_TIMELOCK")?.operationId);
142
- }
143
- function getCallScheduledData(ctx) {
144
- if (ctx.callScheduledData)
145
- return ctx.callScheduledData;
146
- const qData = stageData(ctx, "PROPOSAL_QUEUED")?.callScheduledData;
147
- if (qData?.length)
148
- return (0, base_1.deserializeCallScheduledDataArray)(qData);
149
- const l2Data = stageData(ctx, "L2_TIMELOCK")?.callScheduledData;
150
- return l2Data?.length ? (0, base_1.deserializeCallScheduledDataArray)(l2Data) : undefined;
151
- }
152
- const getFirstCallScheduledData = (ctx) => getCallScheduledData(ctx)?.[0];
153
- exports.getFirstCallScheduledData = getFirstCallScheduledData;
154
- const getQueueBlockNumber = (ctx) => (0, exports.getFirstCallScheduledData)(ctx)?.blockNumber;
155
- exports.getQueueBlockNumber = getQueueBlockNumber;
156
- /** Proposal data from PROPOSAL_CREATED stage */
157
- function getProposalData(ctx) {
158
- const s = findStage(ctx, "PROPOSAL_CREATED");
159
- if (!s || s.status === "NOT_STARTED")
160
- return undefined;
161
- const data = s.data;
162
- const tx = s.transactions?.[0];
163
- if (!data.proposalId ||
164
- !data.startBlock ||
165
- !data.endBlock ||
166
- !data.proposer ||
167
- !data.targets ||
168
- !data.values ||
169
- !data.signatures ||
170
- !data.calldatas ||
171
- !tx)
172
- return undefined;
173
- return {
174
- proposalId: data.proposalId,
175
- proposer: data.proposer,
176
- description: data.description,
177
- targets: data.targets,
178
- values: data.values.map((v) => ethers_1.BigNumber.from(v)),
179
- signatures: data.signatures,
180
- calldatas: data.calldatas,
181
- startBlock: ethers_1.BigNumber.from(data.startBlock),
182
- endBlock: ethers_1.BigNumber.from(data.endBlock),
183
- creationBlock: tx.blockNumber,
184
- creationTxHash: tx.hash,
185
- };
186
- }
187
- function getProposalType(ctx) {
188
- const data = stageData(ctx, "PROPOSAL_CREATED");
189
- if (data?.proposalType)
190
- return data.proposalType;
191
- const addr = (0, exports.getGovernorAddress)(ctx);
192
- return addr ? (0, governor_discovery_1.detectProposalType)(addr) : undefined;
193
- }
194
- const getIsElection = (ctx) => {
195
- const type = getProposalType(ctx);
196
- return type ? (0, governor_discovery_1.isElectionProposal)(type) : false;
197
- };
198
- exports.getIsElection = getIsElection;
199
- const getProposalState = (ctx) => stageData(ctx, "VOTING_ACTIVE")?.proposalState;
200
- exports.getProposalState = getProposalState;
201
- function getVotingEndBlock(ctx) {
202
- const data = stageData(ctx, "VOTING_ACTIVE");
203
- if (!data?.deadline)
204
- return undefined;
205
- const deadline = parseInt(data.deadline, 10);
206
- const extended = data.extendedDeadline ? parseInt(data.extendedDeadline, 10) : 0;
207
- return extended > deadline ? extended : deadline;
208
- }
209
- function getL2ExecutionTxHash(ctx) {
210
- const s = findStage(ctx, "L2_TIMELOCK");
211
- return s?.status === "COMPLETED" ? execTx(s)?.hash : undefined;
212
- }
213
- const getFirstExecutableBlock = (ctx) => stageData(ctx, "L2_TO_L1_MESSAGE")?.firstExecutableBlock;
214
- exports.getFirstExecutableBlock = getFirstExecutableBlock;
215
- function getOutboxExecutionTx(ctx) {
216
- const s = findStage(ctx, "L2_TO_L1_MESSAGE");
217
- if (s?.status !== "COMPLETED")
218
- return undefined;
219
- const tx = chainTx(s, "ethereum");
220
- return tx ? { hash: tx.hash, blockNumber: tx.blockNumber } : undefined;
221
- }
222
- function getL1ExecutionTxHash(ctx) {
223
- const s = findStage(ctx, "L1_TIMELOCK");
224
- return s?.status === "COMPLETED" ? execTx(s)?.hash : undefined;
225
- }
226
- // Checkpoint & Result
227
- function createCheckpoint(ctx) {
228
- const completedStages = ctx.stages.filter((s) => s.status !== "NOT_STARTED");
229
- const lastProcessedStage = [...ctx.stages].reverse().find((s) => s.status !== "NOT_STARTED")?.type ?? null;
230
- return {
231
- version: 1,
232
- createdAt: Date.now(),
233
- input: ctx.input,
234
- lastProcessedStage,
235
- lastProcessedBlock: { l1: 0, l2: 0, nova: 0 },
236
- cachedData: { completedStages },
237
- metadata: { errorCount: 0, lastTrackedAt: Date.now() },
238
- };
239
- }
240
- async function emitProgress(ctx, s) {
241
- if (!ctx.onProgress)
242
- return;
243
- const idx = ctx.stages.findIndex((x) => x.type === s.type);
244
- await ctx.onProgress({
245
- stage: s,
246
- stages: ctx.stages,
247
- currentIndex: idx >= 0 ? idx : ctx.stageIndex,
248
- totalStages: ctx.stages.length,
249
- isComplete: isComplete(ctx),
250
- });
251
- }
252
- function toResult(ctx) {
253
- return {
254
- input: ctx.input,
255
- stages: ctx.stages,
256
- checkpoint: createCheckpoint(ctx),
257
- isComplete: isComplete(ctx),
258
- proposalType: getProposalType(ctx),
259
- proposalData: getProposalData(ctx),
260
- currentState: (0, exports.getProposalState)(ctx),
261
- isElection: (0, exports.getIsElection)(ctx),
262
- };
263
- }
264
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tracker/context.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- /**
2
- * Stage Helpers
3
- *
4
- * Utility functions for timelock stage operations and validation.
5
- */
6
- import { ethers } from "ethers";
7
- import { TrackedStage, PrepareResult, StageType, Chain, CallScheduledData, TimelockState, OperationState } from "../types";
8
- /** Execution payload data for timelock operations. */
9
- export interface TimelockExecutionPayload {
10
- timelockAddress: string;
11
- operationId: string;
12
- callScheduledData: CallScheduledData[];
13
- isSecurityCouncilOperation?: boolean;
14
- securityCouncilMembers?: string[];
15
- securityCouncilNonce?: string;
16
- }
17
- /** Extract timelock execution payload from a stage. */
18
- export declare function createTimelockStageData(stage: TrackedStage): TimelockExecutionPayload | null;
19
- /** Collect all CallScheduledData from a timelock state. */
20
- export declare function collectAllScheduledData(timelockState: TimelockState): CallScheduledData[];
21
- /** Calculate ETA for a timelock operation. */
22
- export declare function calculateTimelockEta(timelockState: TimelockState, operationState: OperationState, provider: ethers.providers.Provider): Promise<number | undefined>;
23
- /** Build serialized execution payload data for stage storage. */
24
- export declare function buildExecutionPayloadData(timelockAddress: string, operationId: string, allScheduledData: CallScheduledData[]): Record<string, unknown>;
25
- export interface PrepareValidationOptions {
26
- prepareCompleted?: boolean;
27
- expectedTypes?: StageType[];
28
- }
29
- /** Validate stage for preparation. Returns error or null if valid. */
30
- export declare function validateStageForPrepare(stage: TrackedStage, options?: PrepareValidationOptions): PrepareResult | null;
31
- export interface BulkPrepareResult<T extends Chain = Chain> {
32
- total: number;
33
- results: PrepareResult[];
34
- targetChain: T;
35
- }
36
- export interface SimpleBulkResult {
37
- total: number;
38
- results: PrepareResult[];
39
- }
40
- export declare function bulkPrepareError<T extends Chain>(error: string, targetChain: T): BulkPrepareResult<T>;
41
- export declare function simpleBulkError(error: string): SimpleBulkResult;
42
- export declare function validateStageForBulkPrepare<T extends Chain>(stage: TrackedStage, targetChain: T, options?: PrepareValidationOptions): BulkPrepareResult<T> | null;
43
- export declare function validateStageForSimpleBulk(stage: TrackedStage, options?: PrepareValidationOptions): SimpleBulkResult | null;
44
- /** Search for timelock execution event and complete stage. */
45
- export declare function searchAndCompleteTimelockExecution(stage: TrackedStage, timelockAddress: string, operationId: string, provider: ethers.providers.Provider, chain: Chain, fromBlock: number, toBlock?: number, queueTimestamp?: number): Promise<{
46
- stage: TrackedStage;
47
- executionTxHash: string | null;
48
- executionBlock: number | null;
49
- }>;
50
- //# sourceMappingURL=stage-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stage-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/stage-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,135 +0,0 @@
1
- "use strict";
2
- /**
3
- * Stage Helpers
4
- *
5
- * Utility functions for timelock stage operations and validation.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.createTimelockStageData = createTimelockStageData;
9
- exports.collectAllScheduledData = collectAllScheduledData;
10
- exports.calculateTimelockEta = calculateTimelockEta;
11
- exports.buildExecutionPayloadData = buildExecutionPayloadData;
12
- exports.validateStageForPrepare = validateStageForPrepare;
13
- exports.bulkPrepareError = bulkPrepareError;
14
- exports.simpleBulkError = simpleBulkError;
15
- exports.validateStageForBulkPrepare = validateStageForBulkPrepare;
16
- exports.validateStageForSimpleBulk = validateStageForSimpleBulk;
17
- exports.searchAndCompleteTimelockExecution = searchAndCompleteTimelockExecution;
18
- const types_1 = require("../types");
19
- const base_1 = require("../stages/base");
20
- const stage_builder_1 = require("../stages/stage-builder");
21
- const timelock_discovery_1 = require("../discovery/timelock-discovery");
22
- /** Extract timelock execution payload from a stage. */
23
- function createTimelockStageData(stage) {
24
- let stageData = null;
25
- for (const stageType of base_1.TIMELOCK_STAGE_TYPES) {
26
- stageData = (0, types_1.getStageData)(stage, stageType);
27
- if (stageData)
28
- break;
29
- }
30
- if (!stageData?.timelockAddress ||
31
- !stageData?.operationId ||
32
- !stageData?.callScheduledData?.length) {
33
- return null;
34
- }
35
- const payload = {
36
- timelockAddress: stageData.timelockAddress,
37
- operationId: stageData.operationId,
38
- callScheduledData: (0, base_1.deserializeCallScheduledDataArray)(stageData.callScheduledData),
39
- };
40
- if (stageData.isSecurityCouncilOperation) {
41
- payload.isSecurityCouncilOperation = true;
42
- payload.securityCouncilMembers = stageData.securityCouncilMembers;
43
- payload.securityCouncilNonce = stageData.securityCouncilNonce;
44
- }
45
- return payload;
46
- }
47
- // ============================================================================
48
- // Timelock State Helpers
49
- // ============================================================================
50
- /** Collect all CallScheduledData from a timelock state. */
51
- function collectAllScheduledData(timelockState) {
52
- return (timelockState.allScheduledData ??
53
- (timelockState.scheduledData ? [timelockState.scheduledData] : []));
54
- }
55
- /** Calculate ETA for a timelock operation. */
56
- async function calculateTimelockEta(timelockState, operationState, provider) {
57
- if (timelockState.scheduledData) {
58
- return (0, base_1.calculateEtaFromScheduledData)(timelockState.scheduledData.blockNumber, timelockState.scheduledData.delay.toNumber(), provider);
59
- }
60
- const contractTimestamp = operationState.timestamp.toNumber();
61
- return !operationState.isDone && contractTimestamp > 1 ? contractTimestamp : undefined;
62
- }
63
- /** Build serialized execution payload data for stage storage. */
64
- function buildExecutionPayloadData(timelockAddress, operationId, allScheduledData) {
65
- const payload = { timelockAddress, operationId };
66
- if (allScheduledData.length > 0) {
67
- payload.callScheduledData = (0, base_1.serializeCallScheduledDataArray)(allScheduledData);
68
- }
69
- return payload;
70
- }
71
- /** Validate stage for preparation. Returns error or null if valid. */
72
- function validateStageForPrepare(stage, options = {}) {
73
- if (!options.prepareCompleted && stage.status !== "READY") {
74
- return (0, base_1.failPrepare)(`Stage is not ready. Current status: ${stage.status}`);
75
- }
76
- if (options.expectedTypes?.length && !options.expectedTypes.includes(stage.type)) {
77
- return (0, base_1.failPrepare)(`Unexpected stage type: ${stage.type}. Expected: ${options.expectedTypes.join(", ")}`);
78
- }
79
- return null;
80
- }
81
- function bulkPrepareError(error, targetChain) {
82
- return { total: 0, results: [{ success: false, error }], targetChain };
83
- }
84
- function simpleBulkError(error) {
85
- return { total: 0, results: [{ success: false, error }] };
86
- }
87
- function validateStageForBulkPrepare(stage, targetChain, options = {}) {
88
- const error = validateStageForPrepare(stage, options);
89
- return error ? { total: 0, results: [error], targetChain } : null;
90
- }
91
- function validateStageForSimpleBulk(stage, options = {}) {
92
- const error = validateStageForPrepare(stage, options);
93
- return error ? { total: 0, results: [error] } : null;
94
- }
95
- // ============================================================================
96
- // Execution Search Helper
97
- // ============================================================================
98
- /** Search for timelock execution event and complete stage. */
99
- async function searchAndCompleteTimelockExecution(stage, timelockAddress, operationId, provider, chain, fromBlock, toBlock, queueTimestamp) {
100
- const event = await (0, timelock_discovery_1.findCallExecutedEvent)(timelockAddress, operationId, provider, {
101
- startBlock: fromBlock,
102
- endBlock: toBlock,
103
- });
104
- const builder = new stage_builder_1.StageBuilder(stage.type, stage.chain)
105
- .data(stage.data)
106
- .transactions(stage.transactions);
107
- if (stage.timing)
108
- builder.timing(stage.timing);
109
- if (event) {
110
- const execTimestamp = await (0, base_1.getBlockTimestamp)(event.blockNumber, provider);
111
- const chainId = (0, types_1.chainToChainId)(chain) ?? 0;
112
- builder
113
- .status("COMPLETED")
114
- .tx(event.txHash, event.blockNumber, chain, chainId, {
115
- timestamp: execTimestamp,
116
- description: "executed",
117
- })
118
- .timing({ startedAt: queueTimestamp ?? execTimestamp })
119
- .data({ operationId });
120
- return {
121
- stage: builder.build(),
122
- executionTxHash: event.txHash,
123
- executionBlock: event.blockNumber,
124
- };
125
- }
126
- return {
127
- stage: builder
128
- .status("COMPLETED")
129
- .data({ operationId, note: "Execution confirmed by state, event not found" })
130
- .build(),
131
- executionTxHash: null,
132
- executionBlock: null,
133
- };
134
- }
135
- //# sourceMappingURL=stage-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stage-helpers.js","sourceRoot":"","sources":["../../src/utils/stage-helpers.ts"],"names":[],"mappings":"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"}