@vigilbase/cli 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLOUDFLARE.md +2 -0
- package/COMMANDS.md +43 -6
- package/LOCAL.md +731 -0
- package/README.md +58 -6
- package/dist/auth/device-auth.d.ts.map +1 -1
- package/dist/auth/device-auth.js +7 -3
- package/dist/auth/device-auth.js.map +1 -1
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/provider.d.ts +18 -0
- package/dist/auth/provider.d.ts.map +1 -0
- package/dist/auth/provider.js +62 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/refresh.d.ts +10 -0
- package/dist/auth/refresh.d.ts.map +1 -0
- package/dist/auth/refresh.js +143 -0
- package/dist/auth/refresh.js.map +1 -0
- package/dist/auth/store.d.ts +27 -2
- package/dist/auth/store.d.ts.map +1 -1
- package/dist/auth/store.js +23 -8
- package/dist/auth/store.js.map +1 -1
- package/dist/auth/token-metadata.d.ts +10 -0
- package/dist/auth/token-metadata.d.ts.map +1 -0
- package/dist/auth/token-metadata.js +22 -0
- package/dist/auth/token-metadata.js.map +1 -0
- package/dist/auth/types.d.ts +8 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -9
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +20 -8
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/helpers.d.ts +15 -0
- package/dist/commands/helpers.d.ts.map +1 -1
- package/dist/commands/helpers.js +2 -2
- package/dist/commands/helpers.js.map +1 -1
- package/dist/commands/index.d.ts +3 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +6 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/local.d.ts +30 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +1520 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/public-tools.d.ts.map +1 -1
- package/dist/commands/public-tools.js +8 -4
- package/dist/commands/public-tools.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +16 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +36 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +9 -0
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/help.d.ts +1 -1
- package/dist/lib/help.d.ts.map +1 -1
- package/dist/lib/help.js +9 -0
- package/dist/lib/help.js.map +1 -1
- package/dist/lib/network.d.ts.map +1 -1
- package/dist/lib/network.js +2 -1
- package/dist/lib/network.js.map +1 -1
- package/dist/lib/one-client.d.ts +3 -2
- package/dist/lib/one-client.d.ts.map +1 -1
- package/dist/lib/one-client.js +46 -2
- package/dist/lib/one-client.js.map +1 -1
- package/dist/lib/security-client.d.ts +1 -1
- package/dist/lib/tui.d.ts +309 -0
- package/dist/lib/tui.d.ts.map +1 -0
- package/dist/lib/tui.js +847 -0
- package/dist/lib/tui.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.d.ts +95 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.js +184 -0
- package/dist/local/cloudflare-checkup/cf/allowlist.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.d.ts +113 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.js +313 -0
- package/dist/local/cloudflare-checkup/cf/auth-lifecycle.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/child-env.d.ts +32 -0
- package/dist/local/cloudflare-checkup/cf/child-env.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/child-env.js +81 -0
- package/dist/local/cloudflare-checkup/cf/child-env.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/install.d.ts +106 -0
- package/dist/local/cloudflare-checkup/cf/install.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/install.js +309 -0
- package/dist/local/cloudflare-checkup/cf/install.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/locate.d.ts +44 -0
- package/dist/local/cloudflare-checkup/cf/locate.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/locate.js +228 -0
- package/dist/local/cloudflare-checkup/cf/locate.js.map +1 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.d.ts +89 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.js +275 -0
- package/dist/local/cloudflare-checkup/cf/run-cf.js.map +1 -0
- package/dist/local/cloudflare-checkup/collector.d.ts +48 -0
- package/dist/local/cloudflare-checkup/collector.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/collector.js +296 -0
- package/dist/local/cloudflare-checkup/collector.js.map +1 -0
- package/dist/local/cloudflare-checkup/contract.d.ts +2793 -0
- package/dist/local/cloudflare-checkup/contract.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/contract.js +1614 -0
- package/dist/local/cloudflare-checkup/contract.js.map +1 -0
- package/dist/local/cloudflare-checkup/email-verification.d.ts +125 -0
- package/dist/local/cloudflare-checkup/email-verification.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/email-verification.js +212 -0
- package/dist/local/cloudflare-checkup/email-verification.js.map +1 -0
- package/dist/local/cloudflare-checkup/errors.d.ts +28 -0
- package/dist/local/cloudflare-checkup/errors.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/errors.js +99 -0
- package/dist/local/cloudflare-checkup/errors.js.map +1 -0
- package/dist/local/cloudflare-checkup/output.d.ts +24 -0
- package/dist/local/cloudflare-checkup/output.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/output.js +89 -0
- package/dist/local/cloudflare-checkup/output.js.map +1 -0
- package/dist/local/cloudflare-checkup/prompts.d.ts +41 -0
- package/dist/local/cloudflare-checkup/prompts.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/prompts.js +140 -0
- package/dist/local/cloudflare-checkup/prompts.js.map +1 -0
- package/dist/local/cloudflare-checkup/rate-budget.d.ts +42 -0
- package/dist/local/cloudflare-checkup/rate-budget.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/rate-budget.js +80 -0
- package/dist/local/cloudflare-checkup/rate-budget.js.map +1 -0
- package/dist/local/cloudflare-checkup/snapshot-file.d.ts +53 -0
- package/dist/local/cloudflare-checkup/snapshot-file.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/snapshot-file.js +186 -0
- package/dist/local/cloudflare-checkup/snapshot-file.js.map +1 -0
- package/dist/local/cloudflare-checkup/submit-client.d.ts +98 -0
- package/dist/local/cloudflare-checkup/submit-client.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/submit-client.js +349 -0
- package/dist/local/cloudflare-checkup/submit-client.js.map +1 -0
- package/dist/local/cloudflare-checkup/terminal-ui.d.ts +171 -0
- package/dist/local/cloudflare-checkup/terminal-ui.d.ts.map +1 -0
- package/dist/local/cloudflare-checkup/terminal-ui.js +404 -0
- package/dist/local/cloudflare-checkup/terminal-ui.js.map +1 -0
- package/package.json +8 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-client.js","sourceRoot":"","sources":["../../../src/local/cloudflare-checkup/submit-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The interactive terminal UI of the one command and `submit`: a step
|
|
3
|
+
* timeline on stderr with inputs for the email and the code, an account
|
|
4
|
+
* picker, Yes/No questions, spinners and a live collection progress bar.
|
|
5
|
+
*
|
|
6
|
+
* It is used only on an interactive terminal (`terminalFeatures`: stdin and
|
|
7
|
+
* stderr are TTYs, TERM is not dumb, CI is not set, no `--json`); everywhere
|
|
8
|
+
* else the commands keep their plain lines and prompts. What it shows follows
|
|
9
|
+
* the same rules as the plain output: the masked address from vigilbase.com,
|
|
10
|
+
* never the address, the code, the token or the session code once entered;
|
|
11
|
+
* account names only through `displayText`; counts, never values, from the
|
|
12
|
+
* snapshot.
|
|
13
|
+
*
|
|
14
|
+
* Every label is built from the session's symbols (`ellipsis`, `join`), so an
|
|
15
|
+
* ASCII-only console (the Linux console, legacy Windows consoles) gets no
|
|
16
|
+
* character outside ASCII.
|
|
17
|
+
*/
|
|
18
|
+
import { type Writer } from '../../lib/format.js';
|
|
19
|
+
import { Tui, type SignalSource, type TtyInput, type TtyOutput } from '../../lib/tui.js';
|
|
20
|
+
import type { CollectProgress } from './collector.js';
|
|
21
|
+
import type { EmailVerificationView } from './email-verification.js';
|
|
22
|
+
/** Sign-in attempts offered after the first one fails. */
|
|
23
|
+
export declare const MAX_SIGN_IN_RETRIES = 2;
|
|
24
|
+
export type CollectionPlan = {
|
|
25
|
+
zones: number;
|
|
26
|
+
plannedReads: number;
|
|
27
|
+
maxRequests: number;
|
|
28
|
+
};
|
|
29
|
+
export type CollectedSummary = {
|
|
30
|
+
zones: number;
|
|
31
|
+
total: number;
|
|
32
|
+
ok: number;
|
|
33
|
+
notCollectable: number;
|
|
34
|
+
denied: number;
|
|
35
|
+
/** Other HTTP errors and reads that could not be collected. */
|
|
36
|
+
failed: number;
|
|
37
|
+
path: string;
|
|
38
|
+
bytes: number;
|
|
39
|
+
/** `2 member emails`, `3 DNS names`, … (counts only). */
|
|
40
|
+
contents: string[];
|
|
41
|
+
inspect: string;
|
|
42
|
+
};
|
|
43
|
+
export type UploadSummary = {
|
|
44
|
+
replayed: boolean;
|
|
45
|
+
passed?: number;
|
|
46
|
+
warnings?: number;
|
|
47
|
+
failed?: number;
|
|
48
|
+
notCollected: number;
|
|
49
|
+
resultsUrl?: string;
|
|
50
|
+
opening: boolean;
|
|
51
|
+
requester: string;
|
|
52
|
+
};
|
|
53
|
+
export type CheckupTuiOptions = {
|
|
54
|
+
mode: 'text' | 'json';
|
|
55
|
+
stdin: TtyInput;
|
|
56
|
+
stderr: TtyOutput;
|
|
57
|
+
/** stdout; when it is not a terminal, the result lines are written there too (plain). */
|
|
58
|
+
stdout?: {
|
|
59
|
+
isTTY?: boolean;
|
|
60
|
+
};
|
|
61
|
+
env: NodeJS.ProcessEnv;
|
|
62
|
+
/** The command's writer, for those plain result lines. */
|
|
63
|
+
writer: Writer;
|
|
64
|
+
platform?: NodeJS.Platform;
|
|
65
|
+
signals?: SignalSource;
|
|
66
|
+
exit?: (code: number) => void;
|
|
67
|
+
frameMs?: number;
|
|
68
|
+
now?: () => number;
|
|
69
|
+
};
|
|
70
|
+
export declare class CheckupTui {
|
|
71
|
+
readonly tui: Tui;
|
|
72
|
+
private readonly writer;
|
|
73
|
+
private readonly now;
|
|
74
|
+
private readonly echoResults;
|
|
75
|
+
private constructor();
|
|
76
|
+
/** The terminal UI, or null for the plain output. */
|
|
77
|
+
static open(options: CheckupTuiOptions): CheckupTui | null;
|
|
78
|
+
/** What Ctrl-C prints at this stage. */
|
|
79
|
+
set cancelMessage(message: string);
|
|
80
|
+
/**
|
|
81
|
+
* A writer for the lines the commands print outside the steps below
|
|
82
|
+
* (warnings, notes): `Warning: …` becomes `▲`, anything else a `│` line,
|
|
83
|
+
* so nothing is written through the live frame.
|
|
84
|
+
*/
|
|
85
|
+
get lines(): Writer;
|
|
86
|
+
intro(): void;
|
|
87
|
+
/** `…`, or `...` on an ASCII-only console: for masked IDs and cut text built outside this class. */
|
|
88
|
+
get ellipsis(): string;
|
|
89
|
+
/** `a · b · c`, or `a - b - c` on an ASCII-only console. */
|
|
90
|
+
join(parts: readonly string[]): string;
|
|
91
|
+
/** `label…` (`label...` in ASCII): an activity in progress, without its ellipsis. */
|
|
92
|
+
private ongoing;
|
|
93
|
+
/** `◒ label…` while `work` runs; `label` has no ellipsis. */
|
|
94
|
+
busy<T>(label: string, work: () => Promise<T>): Promise<T>;
|
|
95
|
+
/** `◒ label…` until stopped; `label` (also in `update`) has no ellipsis. */
|
|
96
|
+
spinner(label: string): {
|
|
97
|
+
update(label: string): void;
|
|
98
|
+
stop(): void;
|
|
99
|
+
};
|
|
100
|
+
/** `◇ title detail` */
|
|
101
|
+
step(title: string, detail?: string): void;
|
|
102
|
+
warning(text: string): void;
|
|
103
|
+
/** A Yes/No question; the answer stays on screen (`◇ question › Yes`). Ctrl-D answers no. */
|
|
104
|
+
confirm(question: string, options: {
|
|
105
|
+
initial: boolean;
|
|
106
|
+
detail?: string;
|
|
107
|
+
}): Promise<boolean>;
|
|
108
|
+
/** A question a flag answered: `◇ question › Yes (--yes)`. */
|
|
109
|
+
answeredByFlag(question: string, flag: string): void;
|
|
110
|
+
/**
|
|
111
|
+
* The verification's inputs: the address is shown while it is typed and
|
|
112
|
+
* sent, then replaced by the masked address vigilbase.com returns; the code
|
|
113
|
+
* is shown while it is typed, then masked (●●●●●●). A notice (a refused
|
|
114
|
+
* address, a wrong code) appears inside the next input, which is drawn in
|
|
115
|
+
* the same place.
|
|
116
|
+
*/
|
|
117
|
+
emailView(): EmailVerificationView;
|
|
118
|
+
private retryClock;
|
|
119
|
+
/**
|
|
120
|
+
* cf's interactive sign-in with the terminal handed over (cf prints and
|
|
121
|
+
* reads directly); after a failed or cancelled sign-in, "Try signing in
|
|
122
|
+
* again?" up to MAX_SIGN_IN_RETRIES times. `check` is whoami afterwards.
|
|
123
|
+
*/
|
|
124
|
+
signIn<T>(run: () => Promise<number>, check: () => Promise<T>): Promise<T>;
|
|
125
|
+
signedIn(summary: string): void;
|
|
126
|
+
/** The account picker; `label` is already safe (`displayText`). Null on Ctrl-D. */
|
|
127
|
+
chooseAccount(accounts: ReadonlyArray<{
|
|
128
|
+
id: string;
|
|
129
|
+
label: string;
|
|
130
|
+
detail: string;
|
|
131
|
+
}>): Promise<string | null>;
|
|
132
|
+
/** `◇ Account Acme Corp a1b2…8f90`, the last line before the collection. */
|
|
133
|
+
account(label: string, detail: string): void;
|
|
134
|
+
/**
|
|
135
|
+
* `◒ Collecting ████░░ zones 1/2 · 40/97 reads · ~20 s left`, redrawn on
|
|
136
|
+
* every progress event. The estimate is the larger of what the request
|
|
137
|
+
* budget allows for the reads left and the pace so far.
|
|
138
|
+
*/
|
|
139
|
+
collecting(plan: CollectionPlan): {
|
|
140
|
+
update(progress: CollectProgress): void;
|
|
141
|
+
stop(): void;
|
|
142
|
+
};
|
|
143
|
+
/** `◇ 84 reads · 72 ok · 10 not collectable · 2 refused`, the saved file and what it contains. */
|
|
144
|
+
collected(summary: CollectedSummary): void;
|
|
145
|
+
/** `◆ Upload 13 KB to vigilbase.com? › Yes / No`; Enter on the initial state means No. */
|
|
146
|
+
confirmUpload(input: {
|
|
147
|
+
bytes: number;
|
|
148
|
+
where: string;
|
|
149
|
+
requester: string;
|
|
150
|
+
flag: string | null;
|
|
151
|
+
}): Promise<boolean>;
|
|
152
|
+
/** The upload and the scoring, which happen in one request. */
|
|
153
|
+
uploading<T>(bytes: number, work: () => Promise<T>): Promise<T>;
|
|
154
|
+
/**
|
|
155
|
+
* `└ ✓ Done. 10 passed · 2 failed`, the results link (underlined, an OSC 8
|
|
156
|
+
* link where supported) and the email note. `plainLines` are the plain
|
|
157
|
+
* result lines, also written to stdout when stdout is not a terminal.
|
|
158
|
+
*/
|
|
159
|
+
uploaded(summary: UploadSummary, plainLines: readonly string[]): void;
|
|
160
|
+
/** Dim lines under the end of the timeline (the logout hint), then the command on a line of its own. */
|
|
161
|
+
footnote(text: string, command?: string): void;
|
|
162
|
+
/** Before an upload error is shown: the `submit` command for the saved snapshot, on a line of its own. */
|
|
163
|
+
uploadLater(command: string): void;
|
|
164
|
+
/**
|
|
165
|
+
* `■ message` with the hint under it, for an error that ends the command;
|
|
166
|
+
* `runCli` then does not print it again. After Ctrl-C nothing more is shown.
|
|
167
|
+
*/
|
|
168
|
+
fail(error: unknown): void;
|
|
169
|
+
close(): void;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=terminal-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-ui.d.ts","sourceRoot":"","sources":["../../../src/local/cloudflare-checkup/terminal-ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The interactive terminal UI of the one command and `submit`: a step
|
|
3
|
+
* timeline on stderr with inputs for the email and the code, an account
|
|
4
|
+
* picker, Yes/No questions, spinners and a live collection progress bar.
|
|
5
|
+
*
|
|
6
|
+
* It is used only on an interactive terminal (`terminalFeatures`: stdin and
|
|
7
|
+
* stderr are TTYs, TERM is not dumb, CI is not set, no `--json`); everywhere
|
|
8
|
+
* else the commands keep their plain lines and prompts. What it shows follows
|
|
9
|
+
* the same rules as the plain output: the masked address from vigilbase.com,
|
|
10
|
+
* never the address, the code, the token or the session code once entered;
|
|
11
|
+
* account names only through `displayText`; counts, never values, from the
|
|
12
|
+
* snapshot.
|
|
13
|
+
*
|
|
14
|
+
* Every label is built from the session's symbols (`ellipsis`, `join`), so an
|
|
15
|
+
* ASCII-only console (the Linux console, legacy Windows consoles) gets no
|
|
16
|
+
* character outside ASCII.
|
|
17
|
+
*/
|
|
18
|
+
import { sanitizeTerminal } from '../../lib/format.js';
|
|
19
|
+
import { Tui, displayWidth, markRendered, terminalFeatures } from '../../lib/tui.js';
|
|
20
|
+
import { LocalCheckupError } from './errors.js';
|
|
21
|
+
import { formatBytes, formatClock, formatDuration } from './output.js';
|
|
22
|
+
import { BUDGET_BURST, estimateBudgetSeconds } from './rate-budget.js';
|
|
23
|
+
const TITLE = 'Vigilbase Cloudflare Checkup';
|
|
24
|
+
/** Sign-in attempts offered after the first one fails. */
|
|
25
|
+
export const MAX_SIGN_IN_RETRIES = 2;
|
|
26
|
+
/** After this long, the upload spinner says vigilbase.com is scoring (the POST answers with the report). */
|
|
27
|
+
const SCORING_AFTER_MS = 1_500;
|
|
28
|
+
const plural = (count, one, many = `${one}s`) => `${count} ${count === 1 ? one : many}`;
|
|
29
|
+
export class CheckupTui {
|
|
30
|
+
tui;
|
|
31
|
+
writer;
|
|
32
|
+
now;
|
|
33
|
+
echoResults;
|
|
34
|
+
constructor(tui, writer, options) {
|
|
35
|
+
this.tui = tui;
|
|
36
|
+
this.writer = writer;
|
|
37
|
+
this.now = options.now ?? Date.now;
|
|
38
|
+
this.echoResults = !options.stdout?.isTTY;
|
|
39
|
+
this.tui.cancelMessage = 'Cancelled. Nothing was uploaded.';
|
|
40
|
+
}
|
|
41
|
+
/** The terminal UI, or null for the plain output. */
|
|
42
|
+
static open(options) {
|
|
43
|
+
const features = terminalFeatures({ mode: options.mode, stdin: options.stdin, stderr: options.stderr, env: options.env, ...(options.platform ? { platform: options.platform } : {}) });
|
|
44
|
+
if (!features)
|
|
45
|
+
return null;
|
|
46
|
+
const tui = new Tui({
|
|
47
|
+
stdin: options.stdin,
|
|
48
|
+
stderr: options.stderr,
|
|
49
|
+
features,
|
|
50
|
+
...(options.signals ? { signals: options.signals } : {}),
|
|
51
|
+
...(options.exit ? { exit: options.exit } : {}),
|
|
52
|
+
...(options.frameMs ? { frameMs: options.frameMs } : {}),
|
|
53
|
+
});
|
|
54
|
+
return new CheckupTui(tui, options.writer, options);
|
|
55
|
+
}
|
|
56
|
+
/** What Ctrl-C prints at this stage. */
|
|
57
|
+
set cancelMessage(message) {
|
|
58
|
+
this.tui.cancelMessage = message;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A writer for the lines the commands print outside the steps below
|
|
62
|
+
* (warnings, notes): `Warning: …` becomes `▲`, anything else a `│` line,
|
|
63
|
+
* so nothing is written through the live frame.
|
|
64
|
+
*/
|
|
65
|
+
get lines() {
|
|
66
|
+
const line = (text = '') => {
|
|
67
|
+
for (const part of this.tui.symbolText(sanitizeTerminal(text)).replace(/\n$/, '').split('\n')) {
|
|
68
|
+
if (part.startsWith('Warning: '))
|
|
69
|
+
this.tui.warn(part.slice('Warning: '.length));
|
|
70
|
+
else if (part.trim() === '')
|
|
71
|
+
this.tui.rail();
|
|
72
|
+
else
|
|
73
|
+
this.tui.info(part);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
return { stdout: line, stderr: line };
|
|
77
|
+
}
|
|
78
|
+
intro() {
|
|
79
|
+
this.tui.print(`${this.tui.style.brand(this.tui.symbols.active)} ${this.tui.style.bold(TITLE)}`);
|
|
80
|
+
this.tui.rail();
|
|
81
|
+
}
|
|
82
|
+
/** `…`, or `...` on an ASCII-only console: for masked IDs and cut text built outside this class. */
|
|
83
|
+
get ellipsis() {
|
|
84
|
+
return this.tui.symbols.ellipsis;
|
|
85
|
+
}
|
|
86
|
+
/** `a · b · c`, or `a - b - c` on an ASCII-only console. */
|
|
87
|
+
join(parts) {
|
|
88
|
+
return this.tui.join(parts);
|
|
89
|
+
}
|
|
90
|
+
/** `label…` (`label...` in ASCII): an activity in progress, without its ellipsis. */
|
|
91
|
+
ongoing(label) {
|
|
92
|
+
return `${label}${this.ellipsis}`;
|
|
93
|
+
}
|
|
94
|
+
/** `◒ label…` while `work` runs; `label` has no ellipsis. */
|
|
95
|
+
busy(label, work) {
|
|
96
|
+
return this.tui.busy(this.ongoing(label), work);
|
|
97
|
+
}
|
|
98
|
+
/** `◒ label…` until stopped; `label` (also in `update`) has no ellipsis. */
|
|
99
|
+
spinner(label) {
|
|
100
|
+
const spinner = this.tui.spinner(this.ongoing(label));
|
|
101
|
+
return { update: (next) => spinner.update(this.ongoing(next)), stop: () => spinner.stop() };
|
|
102
|
+
}
|
|
103
|
+
/** `◇ title detail` */
|
|
104
|
+
step(title, detail) {
|
|
105
|
+
this.tui.step(title, detail);
|
|
106
|
+
}
|
|
107
|
+
warning(text) {
|
|
108
|
+
this.tui.warn(this.tui.symbolText(sanitizeTerminal(text)));
|
|
109
|
+
}
|
|
110
|
+
/** A Yes/No question; the answer stays on screen (`◇ question › Yes`). Ctrl-D answers no. */
|
|
111
|
+
async confirm(question, options) {
|
|
112
|
+
const answer = (await this.tui.confirm({ title: question, initial: options.initial, ...(options.detail ? { detail: options.detail } : {}) })) === true;
|
|
113
|
+
this.tui.answered(question, answer ? 'Yes' : 'No');
|
|
114
|
+
return answer;
|
|
115
|
+
}
|
|
116
|
+
/** A question a flag answered: `◇ question › Yes (--yes)`. */
|
|
117
|
+
answeredByFlag(question, flag) {
|
|
118
|
+
this.tui.answered(question, `Yes ${this.tui.style.dim(`(${flag})`)}`);
|
|
119
|
+
}
|
|
120
|
+
// --------------------------------------------------------------------------
|
|
121
|
+
// Email verification
|
|
122
|
+
// --------------------------------------------------------------------------
|
|
123
|
+
/**
|
|
124
|
+
* The verification's inputs: the address is shown while it is typed and
|
|
125
|
+
* sent, then replaced by the masked address vigilbase.com returns; the code
|
|
126
|
+
* is shown while it is typed, then masked (●●●●●●). A notice (a refused
|
|
127
|
+
* address, a wrong code) appears inside the next input, which is drawn in
|
|
128
|
+
* the same place.
|
|
129
|
+
*/
|
|
130
|
+
emailView() {
|
|
131
|
+
const { tui } = this;
|
|
132
|
+
const { style, symbols } = tui;
|
|
133
|
+
let notice = null;
|
|
134
|
+
let typed = null;
|
|
135
|
+
let sentTo = '';
|
|
136
|
+
let expiresAt = '';
|
|
137
|
+
const takeNotice = () => {
|
|
138
|
+
const pending = notice;
|
|
139
|
+
notice = null;
|
|
140
|
+
return pending;
|
|
141
|
+
};
|
|
142
|
+
const pointer = style.dim(symbols.pointer);
|
|
143
|
+
const masked = symbols.mask.repeat(6);
|
|
144
|
+
return {
|
|
145
|
+
askEmail: async () => {
|
|
146
|
+
typed = await tui.text({ title: 'Work email', notice: takeNotice(), maxLength: 254 });
|
|
147
|
+
return typed;
|
|
148
|
+
},
|
|
149
|
+
requesting: async (work) => {
|
|
150
|
+
const shown = typed;
|
|
151
|
+
tui.show(() => [shown === null
|
|
152
|
+
? `${tui.spin} ${this.ongoing('Sending a code to your work email')}`
|
|
153
|
+
: `${tui.spin} Work email ${pointer} ${shown} ${style.dim(this.ongoing('sending a code'))}`], { animated: true });
|
|
154
|
+
try {
|
|
155
|
+
return await work();
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
tui.clearFrame();
|
|
159
|
+
typed = null;
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
codeSent: (to, expires) => {
|
|
163
|
+
sentTo = sanitizeTerminal(to);
|
|
164
|
+
expiresAt = expires;
|
|
165
|
+
tui.answered('Work email', sentTo);
|
|
166
|
+
},
|
|
167
|
+
askCode: () => tui.code({
|
|
168
|
+
title: `Code sent to ${sentTo}`,
|
|
169
|
+
length: 6,
|
|
170
|
+
hint: this.join(['6 digits', `valid until ${formatClock(expiresAt)}`, 'check spam if it doesn\'t arrive']),
|
|
171
|
+
notice: takeNotice(),
|
|
172
|
+
}),
|
|
173
|
+
verifying: async (work) => {
|
|
174
|
+
tui.show(() => [`${tui.spin} Code sent to ${sentTo} ${pointer} ${masked} ${style.dim(this.ongoing('verifying'))}`], { animated: true });
|
|
175
|
+
try {
|
|
176
|
+
const result = await work();
|
|
177
|
+
tui.clearFrame();
|
|
178
|
+
tui.answered(`Code sent to ${sentTo}`, `${masked} ${style.green(`${symbols.check} verified`)}`);
|
|
179
|
+
tui.rail();
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
tui.clearFrame();
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
notice: (line) => {
|
|
188
|
+
notice = line;
|
|
189
|
+
},
|
|
190
|
+
// The refusal does not say which limit was reached (this address, its
|
|
191
|
+
// domain, this network or all codes), so another address is offered,
|
|
192
|
+
// not suggested.
|
|
193
|
+
rateLimited: async (error) => {
|
|
194
|
+
tui.warn('vigilbase.com is not sending a code right now.');
|
|
195
|
+
tui.note('Codes are limited per address (one checkup every 8 minutes), per domain, network and overall.');
|
|
196
|
+
tui.note(error.retryAfterSec !== undefined ? `Try again at ${this.retryClock(error.retryAfterSec)} (in ${formatDuration(error.retryAfterSec)}).` : 'Try again in a few minutes.');
|
|
197
|
+
return this.confirm('Use a different work email?', { initial: false });
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
retryClock(seconds) {
|
|
202
|
+
return formatClock(new Date(this.now() + seconds * 1000).toISOString());
|
|
203
|
+
}
|
|
204
|
+
// --------------------------------------------------------------------------
|
|
205
|
+
// Cloudflare
|
|
206
|
+
// --------------------------------------------------------------------------
|
|
207
|
+
/**
|
|
208
|
+
* cf's interactive sign-in with the terminal handed over (cf prints and
|
|
209
|
+
* reads directly); after a failed or cancelled sign-in, "Try signing in
|
|
210
|
+
* again?" up to MAX_SIGN_IN_RETRIES times. `check` is whoami afterwards.
|
|
211
|
+
*/
|
|
212
|
+
async signIn(run, check) {
|
|
213
|
+
const { style, symbols } = this.tui;
|
|
214
|
+
for (let attempt = 0;; attempt++) {
|
|
215
|
+
this.tui.print(`${style.cyan(symbols.active)} Cloudflare sign-in ${style.dim(this.ongoing('read-only; your browser will open'))}`);
|
|
216
|
+
const code = await this.tui.handOver(run);
|
|
217
|
+
let problem = 'The Cloudflare sign-in did not complete.';
|
|
218
|
+
if (code === 0) {
|
|
219
|
+
try {
|
|
220
|
+
return await check();
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
if (!(error instanceof LocalCheckupError) || error.code !== 'CF_AUTH_REQUIRED')
|
|
224
|
+
throw error;
|
|
225
|
+
problem = 'cf finished, but the Cloudflare login cannot be used.';
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const stop = new LocalCheckupError('CF_AUTH_REQUIRED', 'The Cloudflare sign-in (cf auth create) did not complete.');
|
|
229
|
+
if (attempt >= MAX_SIGN_IN_RETRIES)
|
|
230
|
+
throw stop;
|
|
231
|
+
this.tui.warn(problem);
|
|
232
|
+
if (!(await this.confirm('Try signing in again?', { initial: true })))
|
|
233
|
+
throw stop;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
signedIn(summary) {
|
|
237
|
+
this.tui.step('Cloudflare sign-in', `${this.tui.style.green(this.tui.symbols.check)} ${sanitizeTerminal(summary)}`);
|
|
238
|
+
}
|
|
239
|
+
/** The account picker; `label` is already safe (`displayText`). Null on Ctrl-D. */
|
|
240
|
+
async chooseAccount(accounts) {
|
|
241
|
+
const id = await this.tui.select({
|
|
242
|
+
title: 'Account',
|
|
243
|
+
hint: `${this.tui.symbols.up}/${this.tui.symbols.down} to choose, Enter to confirm`,
|
|
244
|
+
items: accounts.map((account) => ({ label: account.label, detail: account.detail, value: account.id })),
|
|
245
|
+
});
|
|
246
|
+
const chosen = accounts.find((account) => account.id === id);
|
|
247
|
+
if (chosen)
|
|
248
|
+
this.account(chosen.label, chosen.detail);
|
|
249
|
+
return id;
|
|
250
|
+
}
|
|
251
|
+
/** `◇ Account Acme Corp a1b2…8f90`, the last line before the collection. */
|
|
252
|
+
account(label, detail) {
|
|
253
|
+
this.tui.step('Account', `${label} ${this.tui.style.dim(detail)}`);
|
|
254
|
+
this.tui.rail();
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* `◒ Collecting ████░░ zones 1/2 · 40/97 reads · ~20 s left`, redrawn on
|
|
258
|
+
* every progress event. The estimate is the larger of what the request
|
|
259
|
+
* budget allows for the reads left and the pace so far.
|
|
260
|
+
*/
|
|
261
|
+
collecting(plan) {
|
|
262
|
+
const { tui } = this;
|
|
263
|
+
const started = this.now();
|
|
264
|
+
let state = { zonesDone: 0, zonesTotal: plan.zones, requests: 0 };
|
|
265
|
+
const render = () => {
|
|
266
|
+
const finished = state.zonesDone >= state.zonesTotal;
|
|
267
|
+
const planned = Math.max(plan.plannedReads, state.requests + (finished ? 0 : 1));
|
|
268
|
+
const left = Math.max(0, planned - state.requests);
|
|
269
|
+
const elapsed = Math.max(0, this.now() - started) / 1000;
|
|
270
|
+
const budget = left === 0 ? 0 : estimateBudgetSeconds(plan.maxRequests, left + BUDGET_BURST);
|
|
271
|
+
const pace = state.requests > 0 ? (elapsed / state.requests) * left : 0;
|
|
272
|
+
const eta = left === 0 ? this.ongoing('finishing') : `${formatDuration(Math.max(budget, pace))} left`;
|
|
273
|
+
const head = `${tui.spin} Collecting`;
|
|
274
|
+
const stats = tui.style.dim(this.join([`zones ${state.zonesDone}/${state.zonesTotal}`, `${state.requests}/${planned} reads`, eta]));
|
|
275
|
+
const width = Math.min(24, tui.columns - 1 - displayWidth(head) - displayWidth(stats) - 4);
|
|
276
|
+
return [width >= 6 ? `${head} ${tui.bar(state.requests / planned, width)} ${stats}` : `${head} ${stats}`];
|
|
277
|
+
};
|
|
278
|
+
tui.show(render, { animated: true });
|
|
279
|
+
return {
|
|
280
|
+
update: (next) => {
|
|
281
|
+
state = next;
|
|
282
|
+
tui.draw();
|
|
283
|
+
},
|
|
284
|
+
stop: () => tui.clearFrame(),
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/** `◇ 84 reads · 72 ok · 10 not collectable · 2 refused`, the saved file and what it contains. */
|
|
288
|
+
collected(summary) {
|
|
289
|
+
const { style } = this.tui;
|
|
290
|
+
const parts = [
|
|
291
|
+
`${summary.total} reads`,
|
|
292
|
+
style.green(`${summary.ok} ok`),
|
|
293
|
+
...(summary.notCollectable ? [style.dim(`${summary.notCollectable} not collectable`)] : []),
|
|
294
|
+
...(summary.denied ? [style.yellow(`${summary.denied} refused`)] : []),
|
|
295
|
+
...(summary.failed ? [style.red(`${summary.failed} failed`)] : []),
|
|
296
|
+
];
|
|
297
|
+
this.tui.step(this.join(parts));
|
|
298
|
+
this.tui.note(sanitizeTerminal(this.join([`Saved ${summary.path} (${formatBytes(summary.bytes)})`, plural(summary.zones, 'zone'), 'no credentials'])));
|
|
299
|
+
if (summary.contents.length)
|
|
300
|
+
this.tui.note(`Contains ${this.join(summary.contents)}`);
|
|
301
|
+
this.tui.note('Inspect it:');
|
|
302
|
+
this.tui.command(sanitizeTerminal(summary.inspect));
|
|
303
|
+
this.tui.rail();
|
|
304
|
+
}
|
|
305
|
+
// --------------------------------------------------------------------------
|
|
306
|
+
// Upload
|
|
307
|
+
// --------------------------------------------------------------------------
|
|
308
|
+
/** `◆ Upload 13 KB to vigilbase.com? › Yes / No`; Enter on the initial state means No. */
|
|
309
|
+
async confirmUpload(input) {
|
|
310
|
+
const question = `Upload ${formatBytes(input.bytes)} to ${sanitizeTerminal(input.where)}?`;
|
|
311
|
+
const detail = `Results go to ${sanitizeTerminal(input.requester)}`;
|
|
312
|
+
if (input.flag !== null) {
|
|
313
|
+
this.answeredByFlag(question, input.flag);
|
|
314
|
+
this.tui.note(detail);
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
return this.confirm(question, { initial: false, detail });
|
|
318
|
+
}
|
|
319
|
+
/** The upload and the scoring, which happen in one request. */
|
|
320
|
+
async uploading(bytes, work) {
|
|
321
|
+
this.cancelMessage = 'Cancelled during the upload. If it reached vigilbase.com, the results link is emailed to you.';
|
|
322
|
+
const spinner = this.spinner(`Uploading ${formatBytes(bytes)}`);
|
|
323
|
+
const timer = setTimeout(() => spinner.update('vigilbase.com is scoring the checkup'), SCORING_AFTER_MS);
|
|
324
|
+
timer.unref?.();
|
|
325
|
+
try {
|
|
326
|
+
return await work();
|
|
327
|
+
}
|
|
328
|
+
finally {
|
|
329
|
+
clearTimeout(timer);
|
|
330
|
+
spinner.stop();
|
|
331
|
+
this.cancelMessage = 'Cancelled.';
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* `└ ✓ Done. 10 passed · 2 failed`, the results link (underlined, an OSC 8
|
|
336
|
+
* link where supported) and the email note. `plainLines` are the plain
|
|
337
|
+
* result lines, also written to stdout when stdout is not a terminal.
|
|
338
|
+
*/
|
|
339
|
+
uploaded(summary, plainLines) {
|
|
340
|
+
const { style, symbols } = this.tui;
|
|
341
|
+
const counts = [
|
|
342
|
+
summary.passed !== undefined ? style.green(`${summary.passed} passed`) : null,
|
|
343
|
+
summary.warnings !== undefined && summary.warnings > 0 ? style.yellow(plural(summary.warnings, 'warning')) : null,
|
|
344
|
+
summary.failed !== undefined && summary.failed > 0 ? style.red(`${summary.failed} failed`) : null,
|
|
345
|
+
summary.notCollected > 0 ? style.dim(`${summary.notCollected} reads not collected locally`) : null,
|
|
346
|
+
].filter((part) => part !== null);
|
|
347
|
+
const done = summary.replayed ? 'Already uploaded (same file); nothing changed.' : 'Done.';
|
|
348
|
+
const lines = [`${style.green(symbols.end)} ${style.green(symbols.check)} ${done}${counts.length ? ` ${this.join(counts)}` : ''}`];
|
|
349
|
+
const requester = sanitizeTerminal(summary.requester);
|
|
350
|
+
if (summary.resultsUrl !== undefined) {
|
|
351
|
+
const link = style.underline(this.tui.link(summary.resultsUrl));
|
|
352
|
+
lines.push(` Results: ${link}${summary.opening ? ` ${style.dim('(opening in your browser)')}` : ''}`);
|
|
353
|
+
lines.push(` ${style.dim(`A link has also been emailed to ${requester}.`)}`);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
lines.push(` ${style.dim(`A link to the results has been emailed to ${requester}.`)}`);
|
|
357
|
+
}
|
|
358
|
+
this.tui.rail();
|
|
359
|
+
this.tui.print(...lines);
|
|
360
|
+
if (this.echoResults)
|
|
361
|
+
for (const line of plainLines)
|
|
362
|
+
this.writer.stdout(line);
|
|
363
|
+
}
|
|
364
|
+
/** Dim lines under the end of the timeline (the logout hint), then the command on a line of its own. */
|
|
365
|
+
footnote(text, command) {
|
|
366
|
+
this.tui.footnote(sanitizeTerminal(text));
|
|
367
|
+
if (command !== undefined)
|
|
368
|
+
this.tui.command(sanitizeTerminal(command));
|
|
369
|
+
}
|
|
370
|
+
/** Before an upload error is shown: the `submit` command for the saved snapshot, on a line of its own. */
|
|
371
|
+
uploadLater(command) {
|
|
372
|
+
this.tui.info('The snapshot stays saved. To upload it later without collecting again (it verifies your email again), run:');
|
|
373
|
+
this.tui.command(sanitizeTerminal(command));
|
|
374
|
+
}
|
|
375
|
+
// --------------------------------------------------------------------------
|
|
376
|
+
// The end
|
|
377
|
+
// --------------------------------------------------------------------------
|
|
378
|
+
/**
|
|
379
|
+
* `■ message` with the hint under it, for an error that ends the command;
|
|
380
|
+
* `runCli` then does not print it again. After Ctrl-C nothing more is shown.
|
|
381
|
+
*/
|
|
382
|
+
fail(error) {
|
|
383
|
+
// Errors carrying a server body are left to formatError, which never echoes it.
|
|
384
|
+
if (!(error instanceof Error) || 'body' in error)
|
|
385
|
+
return;
|
|
386
|
+
markRendered(error);
|
|
387
|
+
if (this.tui.isInterrupted)
|
|
388
|
+
return;
|
|
389
|
+
// Messages are written with the Unicode symbols (`0123…cdef`); an ASCII-only console gets `0123...cdef`.
|
|
390
|
+
const message = this.tui.symbolText(sanitizeTerminal(error.message).replace(/\s+/g, ' ').trim());
|
|
391
|
+
const details = [];
|
|
392
|
+
if (error instanceof LocalCheckupError) {
|
|
393
|
+
if (error.retryAfterSec !== undefined && !/Try again/.test(message))
|
|
394
|
+
details.push(`Try again at ${this.retryClock(error.retryAfterSec)}.`);
|
|
395
|
+
details.push(this.tui.symbolText(sanitizeTerminal(error.hint).replace(/\s+/g, ' ').trim().slice(0, 300)), error.code);
|
|
396
|
+
}
|
|
397
|
+
this.tui.rail();
|
|
398
|
+
this.tui.error(message, ...details.filter(Boolean));
|
|
399
|
+
}
|
|
400
|
+
close() {
|
|
401
|
+
this.tui.close();
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=terminal-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-ui.js","sourceRoot":"","sources":["../../../src/local/cloudflare-checkup/terminal-ui.ts"],"names":[],"mappings":"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"}
|