@rebasepro/cli 0.9.1-canary.ff338b5 → 0.10.1-canary.18115ba

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.
@@ -100,6 +100,16 @@ export declare function initOutputMode(rawArgs: string[]): boolean;
100
100
  export declare function isJsonMode(): boolean;
101
101
  /** Force the mode (tests only — production latches it via `initOutputMode`). */
102
102
  export declare function setJsonModeForTest(value: boolean): void;
103
+ /**
104
+ * Write one JSON value to stdout, followed by a newline.
105
+ *
106
+ * Indented, because the overwhelmingly common reader is a person or an agent
107
+ * looking at a terminal — JSON mode is entered automatically whenever stdout is
108
+ * not a TTY, so `rebase cloud deployments list` piped anywhere at all produced
109
+ * a project's entire deployment history as one unwrapped line. `JSON.parse`
110
+ * does not care about the whitespace; everything else does.
111
+ */
112
+ export declare function printJson(value: unknown): void;
103
113
  /**
104
114
  * The one output primitive every new command uses: in JSON mode emit `json`
105
115
  * (and nothing else); otherwise run `human`. Keeping the two behind a single
@@ -0,0 +1,117 @@
1
+ /** How a probe's outcome should be read. */
2
+ export type Verdict =
3
+ /** Behaving as a healthy deployment should. */
4
+ "ok"
5
+ /** Reachable and legal, but worth a human look (e.g. a public read). */
6
+ | "warn"
7
+ /** Broken, or wired up wrong. */
8
+ | "fail"
9
+ /** We could not classify the response. */
10
+ | "unknown";
11
+ export interface ProbeReading {
12
+ verdict: Verdict;
13
+ /** What this status code *means for this endpoint*, in one sentence. */
14
+ meaning: string;
15
+ }
16
+ export interface ProbeSpec {
17
+ id: string;
18
+ /** Column label in human output. */
19
+ label: string;
20
+ method: "GET" | "POST";
21
+ /** Path relative to the project origin. */
22
+ path: (opts: ProbeTargets) => string;
23
+ body?: unknown;
24
+ /** One-line statement of what a healthy deployment answers here. */
25
+ healthy: string;
26
+ interpret: (status: number | null) => ProbeReading;
27
+ /**
28
+ * Read the response body as well. Set only where the body carries a fact the
29
+ * status code cannot — today, the function listing.
30
+ */
31
+ needsBody?: boolean;
32
+ /**
33
+ * Sharpen the status-code reading using the parsed body. Returning null
34
+ * keeps {@link interpret}'s verdict.
35
+ */
36
+ refine?: (body: unknown, targets: ProbeTargets) => ProbeReading | null;
37
+ }
38
+ export interface ProbeTargets {
39
+ /** Collection used for the unauthenticated-read probe. */
40
+ collection: string;
41
+ /** Function to confirm exists, if the caller named one. */
42
+ fn?: string;
43
+ }
44
+ /**
45
+ * The probe set, in the order a failure cascades: if `health` is down, nothing
46
+ * below it is meaningful, so it is checked first and reported first.
47
+ */
48
+ export declare const PROBES: ProbeSpec[];
49
+ /** The function names out of a listing body, or null when it is not one. */
50
+ export declare function functionNames(body: unknown): string[] | null;
51
+ export interface ProbeResult {
52
+ id: string;
53
+ label: string;
54
+ method: string;
55
+ url: string;
56
+ status: number | null;
57
+ ms: number;
58
+ verdict: Verdict;
59
+ meaning: string;
60
+ healthy: string;
61
+ /**
62
+ * Whether the STATUS CODE alone looked healthy. False means the code itself
63
+ * was wrong; true with a failing `verdict` means the code was fine and the
64
+ * body carried the bad news (a named function that did not load). The
65
+ * summary uses this so it never tells you to expect a 200 you already got.
66
+ */
67
+ statusOk: boolean;
68
+ }
69
+ /**
70
+ * Run one probe. A transport failure is a `null` status, never a thrown error:
71
+ * "nothing answered" is a diagnosis in its own right and the other probes still
72
+ * need to run.
73
+ */
74
+ export declare function runProbe(origin: string, spec: ProbeSpec, targets: ProbeTargets): Promise<ProbeResult>;
75
+ /** The worst verdict across probes — what the command's exit code keys off. */
76
+ export declare function overallVerdict(results: ProbeResult[]): Verdict;
77
+ export interface ParsedLogLine {
78
+ ts: string | null;
79
+ pod: string | null;
80
+ text: string;
81
+ }
82
+ export declare function parseLogLine(line: string): ParsedLogLine;
83
+ /**
84
+ * Lines an operator scanning for a fault wants to see.
85
+ *
86
+ * Matches the structured `severity` field first, then the shapes that show up
87
+ * in unstructured output. `refus`/`denied` are in the list because a permission
88
+ * failure often logs at info level and is exactly what one is hunting for.
89
+ */
90
+ export declare function isErrorLine(text: string): boolean;
91
+ export interface RequestLogEntry {
92
+ status: number | null;
93
+ method: string;
94
+ path: string;
95
+ latencyMs: number | null;
96
+ }
97
+ /**
98
+ * Pull an HTTP request record out of a log line, or null when it is not one.
99
+ *
100
+ * Only structured request lines are recognised. Guessing at prose would produce
101
+ * a table with invented columns, which is worse than a short one.
102
+ */
103
+ export declare function parseRequestLine(text: string): RequestLogEntry | null;
104
+ /**
105
+ * Startup lines: what the server *decided* it was going to do. Which storage
106
+ * backend it bound, which functions it loaded, whether auth tables were found.
107
+ * This is the fastest way to tell a misconfiguration from a runtime fault.
108
+ */
109
+ export declare function isBootLine(text: string): boolean;
110
+ /** Render a number of seconds back as the compact duration a user would type. */
111
+ export declare function formatDuration(seconds: number): string;
112
+ /**
113
+ * Parse a duration like `15m`, `2h`, `90s`, `1d` (or a bare number of seconds)
114
+ * into seconds. Returns null when it is not a duration.
115
+ */
116
+ export declare function parseSince(input: string | undefined): number | null;
117
+ export declare function debugCommand(action: string | undefined, rawArgs: string[]): Promise<void>;
@@ -18,6 +18,10 @@ export interface DeploymentRow {
18
18
  triggered_by_user_id?: string;
19
19
  gitCommitHash?: string;
20
20
  gitCommitMessage?: string;
21
+ deployMessage?: string;
22
+ deploy_message?: string;
23
+ frameworkVersion?: string;
24
+ framework_version?: string;
21
25
  }
22
26
  /**
23
27
  * The backend's rule EXACTLY: a rollback is honoured only for a successful
@@ -33,6 +37,18 @@ export declare function triggerInfo(dep: DeploymentRow): {
33
37
  };
34
38
  /** Shape one deployment row into the stable JSON view the CLI publishes. */
35
39
  export declare function deploymentView(dep: DeploymentRow): Record<string, unknown>;
40
+ /**
41
+ * Rows shown when `--limit` is not given.
42
+ *
43
+ * History is unbounded and grows one row per deploy, so "all of it" is the
44
+ * wrong default in both directions: a wall of near-identical lines in a
45
+ * terminal, and — since JSON mode is entered automatically for any non-TTY
46
+ * stdout — a project's entire history dumped at anything that pipes the
47
+ * command. Recent deploys are what the question is almost always about.
48
+ */
49
+ export declare const DEFAULT_DEPLOYMENTS_LIMIT = 20;
50
+ /** `--limit N`, bounded. A garbage value is a refusal, never a silent default. */
51
+ export declare function parseDeploymentsLimit(raw: number | undefined): number;
36
52
  export declare function deploymentsListCommand(rawArgs: string[]): Promise<void>;
37
53
  export declare function rollbackCommand(rawArgs: string[]): Promise<void>;
38
54
  export declare function cancelCommand(rawArgs: string[]): Promise<void>;
@@ -4,3 +4,5 @@ export declare function parseEnvAssignment(operands: string[]): {
4
4
  key: string;
5
5
  value: string;
6
6
  } | null;
7
+ /** The prefix that makes `key` a build-time variable, or undefined. */
8
+ export declare function buildTimeEnvPrefix(key: string): string | undefined;
@@ -1,6 +1,44 @@
1
+ /** The control plane's verdict on what a tenant's uploads actually do. */
2
+ interface StorageState {
3
+ effective?: {
4
+ kind?: string;
5
+ summary?: string;
6
+ storageType?: string;
7
+ missing?: string[];
8
+ };
9
+ source?: string;
10
+ configured?: string;
11
+ overridden?: boolean;
12
+ }
13
+ /**
14
+ * One line describing this project's storage — or `undefined` when the control
15
+ * plane could not be asked, which prints as a blank rather than a guess.
16
+ *
17
+ * `status` used to render the `storages` row and nothing else, so a project
18
+ * whose bucket is configured through its own `STORAGE_TYPE`/`S3_*` variables —
19
+ * the supported path, and the one `mergeStorageEnv` deliberately lets WIN over
20
+ * the row — was reported as `Storage: none` while its pod logged `Initialized
21
+ * storage backends count: 1` against a live bucket. Storage is the thing an app
22
+ * refuses to boot without, so that false negative sends someone off to
23
+ * provision a bucket they already have. The row is not the answer; the tenant's
24
+ * resolved environment is, and the control plane computes it with the same two
25
+ * functions the build log uses.
26
+ */
27
+ export declare function describeStorageState(state: StorageState | undefined): string | undefined;
28
+ /**
29
+ * One line describing the database.
30
+ *
31
+ * `connectionStatus` is written `"untested"` at creation and only ever changed
32
+ * by `rebase cloud db test`, so `managed (untested)` was reporting the absence
33
+ * of a manual test as though it were the database's condition — on a project
34
+ * that had just deployed against it. A never-tested database says only its
35
+ * type; the verdict appears once there is one.
36
+ */
37
+ export declare function describeDatabaseState(db: Record<string, unknown> | undefined): string | undefined;
1
38
  export declare function statusCommand(rawArgs: string[]): Promise<void>;
2
39
  export declare function metricsCommand(rawArgs: string[]): Promise<void>;
3
40
  export declare function webhooksCommand(subcommand: string | undefined, rawArgs: string[]): Promise<void>;
4
41
  export declare function storageCommand(action: string | undefined, rawArgs: string[]): Promise<void>;
5
42
  export declare function clustersCommand(rawArgs: string[]): Promise<void>;
6
43
  export declare function billingCommand(rawArgs: string[]): Promise<void>;
44
+ export {};
@@ -24,6 +24,8 @@ export interface InitOptions {
24
24
  introspect?: boolean;
25
25
  /** Starter template preset. */
26
26
  preset: TemplatePreset;
27
+ /** Whether `preset` came from an explicit --template rather than the default. */
28
+ explicitPreset?: boolean;
27
29
  /** Which parts of Rebase to scaffold. */
28
30
  flavor: TemplateFlavor;
29
31
  /** Detected package manager (pnpm or npm). */
@@ -51,5 +53,15 @@ export interface BuildQuestionsParams {
51
53
  * types registered by the installed version of inquirer.
52
54
  */
53
55
  export declare function buildInitQuestions(params: BuildQuestionsParams): Record<string, unknown>[];
56
+ /**
57
+ * The `cd` a user must type to enter the new project.
58
+ *
59
+ * Not the project's basename: `init apps/my-app` has to say `cd apps/my-app`,
60
+ * and `init .` returns "" because they are already in the project.
61
+ */
62
+ export declare function formatCdTarget(cwd: string, targetDirectory: string): string;
63
+ /** Help for `rebase init` — the flags were previously only discoverable by
64
+ * triggering the non-TTY error. */
65
+ export declare function printInitHelp(): void;
54
66
  export declare function createRebaseApp(rawArgs: string[]): Promise<void>;
55
67
  export declare function configureEnvFile(targetDirectory: string, databaseUrl?: string): Promise<void>;