@gzeoneth/gov-tracker 0.2.1-1 → 0.2.1-alpha.cli-preview.f8c3a87
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/README.md +91 -68
- package/dist/calldata/index.d.ts +1 -1
- package/dist/calldata/index.d.ts.map +1 -1
- package/dist/calldata/index.js.map +1 -1
- package/dist/calldata/parameter-decoder.d.ts.map +1 -1
- package/dist/calldata/parameter-decoder.js +8 -1
- package/dist/calldata/parameter-decoder.js.map +1 -1
- package/dist/calldata/signature-lookup.d.ts +17 -2
- package/dist/calldata/signature-lookup.d.ts.map +1 -1
- package/dist/calldata/signature-lookup.js +20 -2
- package/dist/calldata/signature-lookup.js.map +1 -1
- package/dist/cli/cli.d.ts +21 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/{monitor.js → cli.js} +130 -74
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/lib/cli.d.ts +6 -1
- package/dist/cli/lib/cli.d.ts.map +1 -1
- package/dist/cli/lib/cli.js +31 -15
- package/dist/cli/lib/cli.js.map +1 -1
- package/dist/cli/lib/concurrency.d.ts +20 -0
- package/dist/cli/lib/concurrency.d.ts.map +1 -0
- package/dist/cli/lib/concurrency.js +32 -0
- package/dist/cli/lib/concurrency.js.map +1 -0
- package/dist/cli/tui/App.d.ts +13 -0
- package/dist/cli/tui/App.d.ts.map +1 -0
- package/dist/cli/tui/App.js +92 -0
- package/dist/cli/tui/App.js.map +1 -0
- package/dist/cli/tui/components/Header.d.ts +20 -0
- package/dist/cli/tui/components/Header.d.ts.map +1 -0
- package/dist/cli/tui/components/Header.js +57 -0
- package/dist/cli/tui/components/Header.js.map +1 -0
- package/dist/cli/tui/components/KeyHelp.d.ts +11 -0
- package/dist/cli/tui/components/KeyHelp.d.ts.map +1 -0
- package/dist/cli/tui/components/KeyHelp.js +82 -0
- package/dist/cli/tui/components/KeyHelp.js.map +1 -0
- package/dist/cli/tui/components/ProposalRow.d.ts +11 -0
- package/dist/cli/tui/components/ProposalRow.d.ts.map +1 -0
- package/dist/cli/tui/components/ProposalRow.js +66 -0
- package/dist/cli/tui/components/ProposalRow.js.map +1 -0
- package/dist/cli/tui/components/StageRow.d.ts +12 -0
- package/dist/cli/tui/components/StageRow.d.ts.map +1 -0
- package/dist/cli/tui/components/StageRow.js +83 -0
- package/dist/cli/tui/components/StageRow.js.map +1 -0
- package/dist/cli/tui/components/StatusBadge.d.ts +12 -0
- package/dist/cli/tui/components/StatusBadge.d.ts.map +1 -0
- package/dist/cli/tui/components/StatusBadge.js +27 -0
- package/dist/cli/tui/components/StatusBadge.js.map +1 -0
- package/dist/cli/tui/components/ViewLayout.d.ts +18 -0
- package/dist/cli/tui/components/ViewLayout.d.ts.map +1 -0
- package/dist/cli/tui/components/ViewLayout.js +21 -0
- package/dist/cli/tui/components/ViewLayout.js.map +1 -0
- package/dist/cli/tui/hooks/index.d.ts +10 -0
- package/dist/cli/tui/hooks/index.d.ts.map +1 -0
- package/dist/cli/tui/hooks/index.js +14 -0
- package/dist/cli/tui/hooks/index.js.map +1 -0
- package/dist/cli/tui/hooks/useCache.d.ts +12 -0
- package/dist/cli/tui/hooks/useCache.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useCache.js +86 -0
- package/dist/cli/tui/hooks/useCache.js.map +1 -0
- package/dist/cli/tui/hooks/useNavigation.d.ts +34 -0
- package/dist/cli/tui/hooks/useNavigation.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useNavigation.js +219 -0
- package/dist/cli/tui/hooks/useNavigation.js.map +1 -0
- package/dist/cli/tui/hooks/useProposals.d.ts +10 -0
- package/dist/cli/tui/hooks/useProposals.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useProposals.js +159 -0
- package/dist/cli/tui/hooks/useProposals.js.map +1 -0
- package/dist/cli/tui/hooks/useStageCalldata.d.ts +17 -0
- package/dist/cli/tui/hooks/useStageCalldata.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useStageCalldata.js +50 -0
- package/dist/cli/tui/hooks/useStageCalldata.js.map +1 -0
- package/dist/cli/tui/hooks/useTracker.d.ts +28 -0
- package/dist/cli/tui/hooks/useTracker.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useTracker.js +165 -0
- package/dist/cli/tui/hooks/useTracker.js.map +1 -0
- package/dist/cli/tui/index.d.ts +14 -0
- package/dist/cli/tui/index.d.ts.map +1 -0
- package/dist/cli/tui/index.js +68 -0
- package/dist/cli/tui/index.js.map +1 -0
- package/dist/cli/tui/ink-wrapper.d.ts +43 -0
- package/dist/cli/tui/ink-wrapper.d.ts.map +1 -0
- package/dist/cli/tui/ink-wrapper.js +41 -0
- package/dist/cli/tui/ink-wrapper.js.map +1 -0
- package/dist/cli/tui/types.d.ts +34 -0
- package/dist/cli/tui/types.d.ts.map +1 -0
- package/dist/cli/tui/types.js +6 -0
- package/dist/cli/tui/types.js.map +1 -0
- package/dist/cli/tui/utils/index.d.ts +4 -0
- package/dist/cli/tui/utils/index.d.ts.map +1 -0
- package/dist/cli/tui/utils/index.js +10 -0
- package/dist/cli/tui/utils/index.js.map +1 -0
- package/dist/cli/tui/utils/terminal.d.ts +18 -0
- package/dist/cli/tui/utils/terminal.d.ts.map +1 -0
- package/dist/cli/tui/utils/terminal.js +26 -0
- package/dist/cli/tui/utils/terminal.js.map +1 -0
- package/dist/cli/tui/utils/text.d.ts +12 -0
- package/dist/cli/tui/utils/text.d.ts.map +1 -0
- package/dist/cli/tui/utils/text.js +28 -0
- package/dist/cli/tui/utils/text.js.map +1 -0
- package/dist/cli/tui/views/CalldataView.d.ts +12 -0
- package/dist/cli/tui/views/CalldataView.d.ts.map +1 -0
- package/dist/cli/tui/views/CalldataView.js +180 -0
- package/dist/cli/tui/views/CalldataView.js.map +1 -0
- package/dist/cli/tui/views/DescriptionView.d.ts +12 -0
- package/dist/cli/tui/views/DescriptionView.d.ts.map +1 -0
- package/dist/cli/tui/views/DescriptionView.js +174 -0
- package/dist/cli/tui/views/DescriptionView.js.map +1 -0
- package/dist/cli/tui/views/ElectionView.d.ts +12 -0
- package/dist/cli/tui/views/ElectionView.d.ts.map +1 -0
- package/dist/cli/tui/views/ElectionView.js +159 -0
- package/dist/cli/tui/views/ElectionView.js.map +1 -0
- package/dist/cli/tui/views/ProposalDetail.d.ts +14 -0
- package/dist/cli/tui/views/ProposalDetail.d.ts.map +1 -0
- package/dist/cli/tui/views/ProposalDetail.js +172 -0
- package/dist/cli/tui/views/ProposalDetail.js.map +1 -0
- package/dist/cli/tui/views/ProposalList.d.ts +17 -0
- package/dist/cli/tui/views/ProposalList.d.ts.map +1 -0
- package/dist/cli/tui/views/ProposalList.js +111 -0
- package/dist/cli/tui/views/ProposalList.js.map +1 -0
- package/dist/cli/tui/views/SimulationView.d.ts +12 -0
- package/dist/cli/tui/views/SimulationView.d.ts.map +1 -0
- package/dist/cli/tui/views/SimulationView.js +93 -0
- package/dist/cli/tui/views/SimulationView.js.map +1 -0
- package/dist/cli/tui/views/StageView.d.ts +12 -0
- package/dist/cli/tui/views/StageView.d.ts.map +1 -0
- package/dist/cli/tui/views/StageView.js +199 -0
- package/dist/cli/tui/views/StageView.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/data/bundled-cache.json +6651 -2485
- package/dist/discovery/governor-discovery.d.ts.map +1 -1
- package/dist/discovery/governor-discovery.js +2 -1
- package/dist/discovery/governor-discovery.js.map +1 -1
- package/dist/index.d.ts +22 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -3
- package/dist/index.js.map +1 -1
- package/dist/stages/l2-to-l1-message.d.ts +5 -0
- package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
- package/dist/stages/l2-to-l1-message.js +73 -7
- package/dist/stages/l2-to-l1-message.js.map +1 -1
- package/dist/stages/timelock.d.ts.map +1 -1
- package/dist/stages/timelock.js +9 -3
- package/dist/stages/timelock.js.map +1 -1
- package/dist/stages/utils.d.ts +5 -2
- package/dist/stages/utils.d.ts.map +1 -1
- package/dist/stages/utils.js +14 -6
- package/dist/stages/utils.js.map +1 -1
- package/dist/tracker/cache.d.ts +27 -0
- package/dist/tracker/cache.d.ts.map +1 -1
- package/dist/tracker/cache.js +46 -2
- package/dist/tracker/cache.js.map +1 -1
- package/dist/tracker/execute.d.ts.map +1 -1
- package/dist/tracker/execute.js +25 -1
- package/dist/tracker/execute.js.map +1 -1
- package/dist/types/stages.d.ts +15 -2
- package/dist/types/stages.d.ts.map +1 -1
- package/dist/types/stages.js.map +1 -1
- package/dist/types/tracking.d.ts +4 -0
- package/dist/types/tracking.d.ts.map +1 -1
- package/dist/utils/sanitize.d.ts +28 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +52 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/package.json +28 -16
- package/dist/cli/monitor.d.ts +0 -3
- package/dist/cli/monitor.d.ts.map +0 -1
- package/dist/cli/monitor.js.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook for loading and decoding calldata from proposal stages
|
|
3
|
+
*/
|
|
4
|
+
import type { TrackedStage } from "../../../types/index.js";
|
|
5
|
+
import type { DecodedCalldata } from "../../../types/calldata.js";
|
|
6
|
+
export interface DecodedAction {
|
|
7
|
+
target: string;
|
|
8
|
+
value: string;
|
|
9
|
+
decoded: DecodedCalldata;
|
|
10
|
+
}
|
|
11
|
+
export interface UseStageCalldataResult {
|
|
12
|
+
actions: DecodedAction[];
|
|
13
|
+
loading: boolean;
|
|
14
|
+
error: string | null;
|
|
15
|
+
}
|
|
16
|
+
export declare function useStageCalldata(firstStage: TrackedStage | undefined): UseStageCalldataResult;
|
|
17
|
+
//# sourceMappingURL=useStageCalldata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStageCalldata.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useStageCalldata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,YAAY,GAAG,SAAS,GAAG,sBAAsB,CA+C7F"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hook for loading and decoding calldata from proposal stages
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useStageCalldata = useStageCalldata;
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const index_js_1 = require("../../../calldata/index.js");
|
|
9
|
+
function useStageCalldata(firstStage) {
|
|
10
|
+
const [actions, setActions] = (0, react_1.useState)([]);
|
|
11
|
+
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
12
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
13
|
+
(0, react_1.useEffect)(() => {
|
|
14
|
+
async function loadCalldata() {
|
|
15
|
+
setLoading(true);
|
|
16
|
+
setError(null);
|
|
17
|
+
try {
|
|
18
|
+
if (!firstStage) {
|
|
19
|
+
setError("No stage data available");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const { calldatas, targets, values } = (0, index_js_1.extractCalldataFromStage)(firstStage);
|
|
23
|
+
if (calldatas.length === 0) {
|
|
24
|
+
setError("No calldata found in proposal");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const chainContext = "arb1";
|
|
28
|
+
const decoded = [];
|
|
29
|
+
for (let i = 0; i < calldatas.length; i++) {
|
|
30
|
+
const result = await (0, index_js_1.decodeCalldata)(calldatas[i], targets[i], 0, chainContext);
|
|
31
|
+
decoded.push({
|
|
32
|
+
target: targets[i],
|
|
33
|
+
value: values[i],
|
|
34
|
+
decoded: result,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
setActions(decoded);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
setLoading(false);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
loadCalldata();
|
|
47
|
+
}, [firstStage]);
|
|
48
|
+
return { actions, loading, error };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=useStageCalldata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStageCalldata.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useStageCalldata.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAmBH,4CA+CC;AAhED,iCAA4C;AAE5C,yDAAsF;AAetF,SAAgB,gBAAgB,CAAC,UAAoC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAkB,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,KAAK,UAAU,YAAY;YACzB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,QAAQ,CAAC,yBAAyB,CAAC,CAAC;oBACpC,OAAO;gBACT,CAAC;gBAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,mCAAwB,EAAC,UAAU,CAAC,CAAC;gBAE5E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,+BAA+B,CAAC,CAAC;oBAC1C,OAAO;gBACT,CAAC;gBAED,MAAM,YAAY,GAAU,MAAM,CAAC;gBACnC,MAAM,OAAO,GAAoB,EAAE,CAAC;gBAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBAC/E,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;wBAClB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;wBAChB,OAAO,EAAE,MAAM;qBAChB,CAAC,CAAC;gBACL,CAAC;gBAED,UAAU,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,YAAY,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live tracking hook for TUI
|
|
3
|
+
*
|
|
4
|
+
* Provides tracking functionality when RPC providers are available.
|
|
5
|
+
*/
|
|
6
|
+
import type { TrackingResult, PreparedTransaction } from "../../../types/index.js";
|
|
7
|
+
import type { ProposalListItem } from "../types.js";
|
|
8
|
+
import type { ProviderBundle } from "../../lib/cli.js";
|
|
9
|
+
export interface UseTrackerResult {
|
|
10
|
+
isTracking: boolean;
|
|
11
|
+
progress: string | null;
|
|
12
|
+
lastResult: TrackingResult | null;
|
|
13
|
+
preparedTxs: PreparedTransaction[];
|
|
14
|
+
error: string | null;
|
|
15
|
+
canTrack: boolean;
|
|
16
|
+
track: (item: ProposalListItem) => Promise<TrackingResult | null>;
|
|
17
|
+
discover: () => Promise<{
|
|
18
|
+
proposals: number;
|
|
19
|
+
timelocks: number;
|
|
20
|
+
}>;
|
|
21
|
+
clearError: () => void;
|
|
22
|
+
}
|
|
23
|
+
export interface UseTrackerOptions {
|
|
24
|
+
providers?: ProviderBundle;
|
|
25
|
+
cachePath: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function useTracker(options: UseTrackerOptions): UseTrackerResult;
|
|
28
|
+
//# sourceMappingURL=useTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTracker.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useTracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,cAAc,EAEd,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClE,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAiIvE"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Live tracking hook for TUI
|
|
4
|
+
*
|
|
5
|
+
* Provides tracking functionality when RPC providers are available.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.useTracker = useTracker;
|
|
42
|
+
const react_1 = require("react");
|
|
43
|
+
const tracker_js_1 = require("../../../tracker.js");
|
|
44
|
+
function useTracker(options) {
|
|
45
|
+
const [isTracking, setIsTracking] = (0, react_1.useState)(false);
|
|
46
|
+
const [progress, setProgress] = (0, react_1.useState)(null);
|
|
47
|
+
const [lastResult, setLastResult] = (0, react_1.useState)(null);
|
|
48
|
+
const [preparedTxs, setPreparedTxs] = (0, react_1.useState)([]);
|
|
49
|
+
const [error, setError] = (0, react_1.useState)(null);
|
|
50
|
+
const canTrack = !!options.providers;
|
|
51
|
+
const createTrackerInstance = (0, react_1.useCallback)(() => {
|
|
52
|
+
if (!options.providers)
|
|
53
|
+
return null;
|
|
54
|
+
return (0, tracker_js_1.createTracker)({
|
|
55
|
+
l1Provider: options.providers.l1Provider,
|
|
56
|
+
l2Provider: options.providers.l2Provider,
|
|
57
|
+
novaProvider: options.providers.novaProvider,
|
|
58
|
+
cachePath: options.cachePath,
|
|
59
|
+
onProgress: (prog) => {
|
|
60
|
+
const { stage, currentIndex, totalStages } = prog;
|
|
61
|
+
setProgress(`[${currentIndex + 1}/${totalStages}] ${stage.type}: ${stage.status}`);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}, [options.providers, options.cachePath]);
|
|
65
|
+
const track = (0, react_1.useCallback)(async (item) => {
|
|
66
|
+
if (!canTrack) {
|
|
67
|
+
setError("No RPC providers configured. Use --l2-rpc and --l1-rpc options.");
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const tracker = createTrackerInstance();
|
|
71
|
+
if (!tracker)
|
|
72
|
+
return null;
|
|
73
|
+
setIsTracking(true);
|
|
74
|
+
setProgress("Starting...");
|
|
75
|
+
setError(null);
|
|
76
|
+
setPreparedTxs([]);
|
|
77
|
+
try {
|
|
78
|
+
let txHash;
|
|
79
|
+
if (item.checkpoint.input.type === "governor") {
|
|
80
|
+
txHash = item.checkpoint.input.creationTxHash;
|
|
81
|
+
}
|
|
82
|
+
else if (item.checkpoint.input.type === "timelock") {
|
|
83
|
+
txHash = item.checkpoint.input.scheduledTxHash;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
throw new Error("Cannot track discovery checkpoint");
|
|
87
|
+
}
|
|
88
|
+
const results = await tracker.trackByTxHash(txHash);
|
|
89
|
+
const result = results[0] ?? null;
|
|
90
|
+
setLastResult(result);
|
|
91
|
+
if (result) {
|
|
92
|
+
const prepared = [];
|
|
93
|
+
for (const stage of result.stages) {
|
|
94
|
+
if (stage.status === "READY" || stage.executable) {
|
|
95
|
+
try {
|
|
96
|
+
const prep = await tracker.prepareTransaction(stage, {
|
|
97
|
+
stages: result.stages,
|
|
98
|
+
});
|
|
99
|
+
if (prep.success) {
|
|
100
|
+
prepared.push(prep.prepared);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Skip stages that can't be prepared
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
setPreparedTxs(prepared);
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
114
|
+
setError(message);
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
setIsTracking(false);
|
|
119
|
+
setProgress(null);
|
|
120
|
+
}
|
|
121
|
+
}, [canTrack, createTrackerInstance]);
|
|
122
|
+
const discover = (0, react_1.useCallback)(async () => {
|
|
123
|
+
if (!canTrack || !options.providers) {
|
|
124
|
+
setError("No RPC providers configured. Use --l2-rpc and --l1-rpc options.");
|
|
125
|
+
return { proposals: 0, timelocks: 0 };
|
|
126
|
+
}
|
|
127
|
+
const tracker = createTrackerInstance();
|
|
128
|
+
if (!tracker)
|
|
129
|
+
return { proposals: 0, timelocks: 0 };
|
|
130
|
+
setIsTracking(true);
|
|
131
|
+
setProgress("Discovering new proposals...");
|
|
132
|
+
setError(null);
|
|
133
|
+
try {
|
|
134
|
+
const toBlock = await options.providers.l2Provider.getBlockNumber();
|
|
135
|
+
const { buildDefaultTargets } = await Promise.resolve().then(() => __importStar(require("../../../constants")));
|
|
136
|
+
const targets = buildDefaultTargets();
|
|
137
|
+
const { proposals, timelockOps } = await tracker.discoverAll(targets, toBlock);
|
|
138
|
+
return { proposals: proposals.length, timelocks: timelockOps.length };
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
142
|
+
setError(message);
|
|
143
|
+
return { proposals: 0, timelocks: 0 };
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
setIsTracking(false);
|
|
147
|
+
setProgress(null);
|
|
148
|
+
}
|
|
149
|
+
}, [canTrack, createTrackerInstance, options.providers]);
|
|
150
|
+
const clearError = (0, react_1.useCallback)(() => {
|
|
151
|
+
setError(null);
|
|
152
|
+
}, []);
|
|
153
|
+
return {
|
|
154
|
+
isTracking,
|
|
155
|
+
progress,
|
|
156
|
+
lastResult,
|
|
157
|
+
preparedTxs,
|
|
158
|
+
error,
|
|
159
|
+
canTrack,
|
|
160
|
+
track,
|
|
161
|
+
discover,
|
|
162
|
+
clearError,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=useTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTracker.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI Module Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Interactive terminal UI for browsing and tracking governance proposals.
|
|
5
|
+
* Requires: ink@3.x, react@17.x (CommonJS compatible versions)
|
|
6
|
+
*/
|
|
7
|
+
import type { ProviderBundle } from "../lib/cli.js";
|
|
8
|
+
export interface TuiOptions {
|
|
9
|
+
cachePath: string;
|
|
10
|
+
providers?: ProviderBundle;
|
|
11
|
+
verbose?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function runTui(options: TuiOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgBD,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TUI Module Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Interactive terminal UI for browsing and tracking governance proposals.
|
|
6
|
+
* Requires: ink@3.x, react@17.x (CommonJS compatible versions)
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.runTui = runTui;
|
|
43
|
+
const ink_wrapper_js_1 = require("./ink-wrapper.js");
|
|
44
|
+
function checkTtySupport() {
|
|
45
|
+
if (!process.stdin.isTTY) {
|
|
46
|
+
console.error("Error: TUI requires an interactive terminal (TTY).");
|
|
47
|
+
console.error("");
|
|
48
|
+
console.error("The TUI cannot run in:");
|
|
49
|
+
console.error(" - Piped input (e.g., echo 'q' | gov-tracker ui)");
|
|
50
|
+
console.error(" - CI/CD environments without TTY allocation");
|
|
51
|
+
console.error(" - Non-interactive shells");
|
|
52
|
+
console.error("");
|
|
53
|
+
console.error("For non-interactive use, try: gov-tracker status");
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function runTui(options) {
|
|
58
|
+
checkTtySupport();
|
|
59
|
+
(0, ink_wrapper_js_1.checkTuiDependencies)();
|
|
60
|
+
const { App } = await Promise.resolve().then(() => __importStar(require("./App.js")));
|
|
61
|
+
const { waitUntilExit } = (0, ink_wrapper_js_1.render)(ink_wrapper_js_1.React.createElement(App, {
|
|
62
|
+
cachePath: options.cachePath,
|
|
63
|
+
providers: options.providers,
|
|
64
|
+
verbose: options.verbose,
|
|
65
|
+
}), { fullScreen: true });
|
|
66
|
+
await waitUntilExit();
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/tui/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBH,wBAgBC;AAtCD,qDAAuE;AAQvE,SAAS,eAAe;IACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,OAAmB;IAC9C,eAAe,EAAE,CAAC;IAClB,IAAA,qCAAoB,GAAE,CAAC;IAEvB,MAAM,EAAE,GAAG,EAAE,GAAG,wDAAa,UAAU,GAAC,CAAC;IAEzC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAA,uBAAM,EAC9B,sBAAK,CAAC,aAAa,CAAC,GAAG,EAAE;QACvB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,EACF,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;IAEF,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ink wrapper to handle module resolution
|
|
3
|
+
*
|
|
4
|
+
* This module provides type-safe wrappers for ink components
|
|
5
|
+
* that work with the project's CommonJS module resolution.
|
|
6
|
+
*/
|
|
7
|
+
declare let React: any;
|
|
8
|
+
export declare function checkTuiDependencies(): void;
|
|
9
|
+
export { React };
|
|
10
|
+
export declare const useState: typeof import("react").useState;
|
|
11
|
+
export declare const useCallback: typeof import("react").useCallback;
|
|
12
|
+
export declare const useMemo: typeof import("react").useMemo;
|
|
13
|
+
export declare const useEffect: typeof import("react").useEffect;
|
|
14
|
+
export declare const render: any;
|
|
15
|
+
export declare const Box: any;
|
|
16
|
+
export declare const Text: any;
|
|
17
|
+
export declare const useInput: (callback: (input: string, key: KeyInput) => void, options?: {
|
|
18
|
+
isActive?: boolean;
|
|
19
|
+
}) => void;
|
|
20
|
+
export declare const useApp: () => {
|
|
21
|
+
exit: (error?: Error) => void;
|
|
22
|
+
};
|
|
23
|
+
export declare const useStdout: () => {
|
|
24
|
+
stdout: NodeJS.WriteStream;
|
|
25
|
+
write: (data: string) => void;
|
|
26
|
+
};
|
|
27
|
+
export interface KeyInput {
|
|
28
|
+
upArrow: boolean;
|
|
29
|
+
downArrow: boolean;
|
|
30
|
+
leftArrow: boolean;
|
|
31
|
+
rightArrow: boolean;
|
|
32
|
+
pageUp: boolean;
|
|
33
|
+
pageDown: boolean;
|
|
34
|
+
return: boolean;
|
|
35
|
+
escape: boolean;
|
|
36
|
+
tab: boolean;
|
|
37
|
+
backspace: boolean;
|
|
38
|
+
delete: boolean;
|
|
39
|
+
ctrl: boolean;
|
|
40
|
+
meta: boolean;
|
|
41
|
+
shift: boolean;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ink-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ink-wrapper.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/ink-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,QAAA,IAAI,KAAK,EAAE,GAAG,CAAC;AAWf,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C;AAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,eAAO,MAAM,QAAQ,EAAsB,cAAc,OAAO,EAAE,QAAQ,CAAC;AAC3E,eAAO,MAAM,WAAW,EAAyB,cAAc,OAAO,EAAE,WAAW,CAAC;AACpF,eAAO,MAAM,OAAO,EAAqB,cAAc,OAAO,EAAE,OAAO,CAAC;AACxE,eAAO,MAAM,SAAS,EAAuB,cAAc,OAAO,EAAE,SAAS,CAAC;AAC9E,eAAO,MAAM,MAAM,KAAc,CAAC;AAClC,eAAO,MAAM,GAAG,KAAW,CAAC;AAC5B,eAAO,MAAM,IAAI,KAAY,CAAC;AAC9B,eAAO,MAAM,QAAQ,EAAoB,CACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI,EAChD,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAC7B,IAAI,CAAC;AACV,eAAO,MAAM,MAAM,EAAkB,MAAM;IAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;CAAE,CAAC;AAC7E,eAAO,MAAM,SAAS,EAAqB,MAAM;IAC/C,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;IAC3B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ink wrapper to handle module resolution
|
|
4
|
+
*
|
|
5
|
+
* This module provides type-safe wrappers for ink components
|
|
6
|
+
* that work with the project's CommonJS module resolution.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.useStdout = exports.useApp = exports.useInput = exports.Text = exports.Box = exports.render = exports.useEffect = exports.useMemo = exports.useCallback = exports.useState = exports.React = void 0;
|
|
10
|
+
exports.checkTuiDependencies = checkTuiDependencies;
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
let ink;
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
let React;
|
|
15
|
+
try {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
17
|
+
ink = require("ink");
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
19
|
+
exports.React = React = require("react");
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Dependencies loaded lazily - will be checked at runtime
|
|
23
|
+
}
|
|
24
|
+
function checkTuiDependencies() {
|
|
25
|
+
if (!ink || !React) {
|
|
26
|
+
console.error("Error: TUI requires 'ink' and 'react' packages.");
|
|
27
|
+
console.error("Install them with: yarn add ink@^3.2.0 react@^17.0.2");
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.useState = React?.useState;
|
|
32
|
+
exports.useCallback = React?.useCallback;
|
|
33
|
+
exports.useMemo = React?.useMemo;
|
|
34
|
+
exports.useEffect = React?.useEffect;
|
|
35
|
+
exports.render = ink?.render;
|
|
36
|
+
exports.Box = ink?.Box;
|
|
37
|
+
exports.Text = ink?.Text;
|
|
38
|
+
exports.useInput = ink?.useInput;
|
|
39
|
+
exports.useApp = ink?.useApp;
|
|
40
|
+
exports.useStdout = ink?.useStdout;
|
|
41
|
+
//# sourceMappingURL=ink-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ink-wrapper.js","sourceRoot":"","sources":["../../../src/cli/tui/ink-wrapper.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAgBH,oDAMC;AApBD,8DAA8D;AAC9D,IAAI,GAAQ,CAAC;AACb,8DAA8D;AAC9D,IAAI,KAAU,CAAC;AAEf,IAAI,CAAC;IACH,iEAAiE;IACjE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrB,iEAAiE;IACjE,gBAAA,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAAC,MAAM,CAAC;IACP,0DAA0D;AAC5D,CAAC;AAED,SAAgB,oBAAoB;IAClC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAGY,QAAA,QAAQ,GAAG,KAAK,EAAE,QAA2C,CAAC;AAC9D,QAAA,WAAW,GAAG,KAAK,EAAE,WAAiD,CAAC;AACvE,QAAA,OAAO,GAAG,KAAK,EAAE,OAAyC,CAAC;AAC3D,QAAA,SAAS,GAAG,KAAK,EAAE,SAA6C,CAAC;AACjE,QAAA,MAAM,GAAG,GAAG,EAAE,MAAM,CAAC;AACrB,QAAA,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC;AACf,QAAA,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC;AACjB,QAAA,QAAQ,GAAG,GAAG,EAAE,QAGpB,CAAC;AACG,QAAA,MAAM,GAAG,GAAG,EAAE,MAAiD,CAAC;AAChE,QAAA,SAAS,GAAG,GAAG,EAAE,SAG7B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI-specific types
|
|
3
|
+
*/
|
|
4
|
+
import type { TrackingCheckpoint, TrackerStats, StageType } from "../../types/index.js";
|
|
5
|
+
export type ViewType = "list" | "detail" | "calldata" | "stage" | "simulation" | "description" | "election";
|
|
6
|
+
export type FilterType = "all" | "active" | "complete" | "timelocks";
|
|
7
|
+
export interface ProposalListItem {
|
|
8
|
+
key: string;
|
|
9
|
+
title: string;
|
|
10
|
+
type: "governor" | "timelock" | "election";
|
|
11
|
+
proposalType?: string;
|
|
12
|
+
status: "active" | "complete" | "failed";
|
|
13
|
+
stageProgress: string;
|
|
14
|
+
currentStage: StageType | null;
|
|
15
|
+
hasExecutable: boolean;
|
|
16
|
+
createdAt: number | null;
|
|
17
|
+
checkpoint: TrackingCheckpoint;
|
|
18
|
+
}
|
|
19
|
+
export interface NavigationState {
|
|
20
|
+
view: ViewType;
|
|
21
|
+
filter: FilterType;
|
|
22
|
+
selectedIndex: number;
|
|
23
|
+
selectedProposal: ProposalListItem | null;
|
|
24
|
+
selectedStageIndex: number;
|
|
25
|
+
calldataActionIndex: number;
|
|
26
|
+
scrollOffset: number;
|
|
27
|
+
searchQuery: string;
|
|
28
|
+
isSearching: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface CacheData {
|
|
31
|
+
checkpoints: Map<string, TrackingCheckpoint>;
|
|
32
|
+
stats: TrackerStats;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAExF,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,OAAO,GACP,YAAY,GACZ,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7C,KAAK,EAAE,YAAY,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/tui/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getVisibleRows = exports.getTerminalSize = exports.truncate = exports.wrapText = void 0;
|
|
4
|
+
var text_js_1 = require("./text.js");
|
|
5
|
+
Object.defineProperty(exports, "wrapText", { enumerable: true, get: function () { return text_js_1.wrapText; } });
|
|
6
|
+
Object.defineProperty(exports, "truncate", { enumerable: true, get: function () { return text_js_1.truncate; } });
|
|
7
|
+
var terminal_js_1 = require("./terminal.js");
|
|
8
|
+
Object.defineProperty(exports, "getTerminalSize", { enumerable: true, get: function () { return terminal_js_1.getTerminalSize; } });
|
|
9
|
+
Object.defineProperty(exports, "getVisibleRows", { enumerable: true, get: function () { return terminal_js_1.getVisibleRows; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/index.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAAtC,mGAAA,QAAQ,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAC3B,6CAAgE;AAAvD,8GAAA,eAAe,OAAA;AAAE,6GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal size utilities for TUI views
|
|
3
|
+
*/
|
|
4
|
+
export interface TerminalSize {
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get current terminal dimensions
|
|
10
|
+
*/
|
|
11
|
+
export declare function getTerminalSize(): TerminalSize;
|
|
12
|
+
/**
|
|
13
|
+
* Calculate visible rows for scrollable content
|
|
14
|
+
* @param reservedLines - Lines used by headers, footers, etc.
|
|
15
|
+
* @param minRows - Minimum rows to show
|
|
16
|
+
*/
|
|
17
|
+
export declare function getVisibleRows(reservedLines: number, minRows?: number): number;
|
|
18
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/terminal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAK9C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,MAAM,CAGzE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Terminal size utilities for TUI views
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getTerminalSize = getTerminalSize;
|
|
7
|
+
exports.getVisibleRows = getVisibleRows;
|
|
8
|
+
/**
|
|
9
|
+
* Get current terminal dimensions
|
|
10
|
+
*/
|
|
11
|
+
function getTerminalSize() {
|
|
12
|
+
return {
|
|
13
|
+
width: process.stdout.columns || 80,
|
|
14
|
+
height: process.stdout.rows || 24,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Calculate visible rows for scrollable content
|
|
19
|
+
* @param reservedLines - Lines used by headers, footers, etc.
|
|
20
|
+
* @param minRows - Minimum rows to show
|
|
21
|
+
*/
|
|
22
|
+
function getVisibleRows(reservedLines, minRows = 5) {
|
|
23
|
+
const { height } = getTerminalSize();
|
|
24
|
+
return Math.max(minRows, height - reservedLines);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/terminal.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAUH,0CAKC;AAOD,wCAGC;AAlBD;;GAEG;AACH,SAAgB,eAAe;IAC7B,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;KAClC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,aAAqB,EAAE,OAAO,GAAG,CAAC;IAC/D,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared text utilities for TUI views
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Wrap text to fit within a given width, breaking at character boundaries
|
|
6
|
+
*/
|
|
7
|
+
export declare function wrapText(text: string, width: number): string[];
|
|
8
|
+
/**
|
|
9
|
+
* Truncate text with ellipsis if it exceeds maxLen
|
|
10
|
+
*/
|
|
11
|
+
export declare function truncate(str: string, maxLen: number): string;
|
|
12
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO9D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG5D"}
|