terse-cli 0.1.36 → 0.1.38
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/dist/api.d.ts.map +1 -1
- package/dist/api.js +9 -9
- package/dist/api.js.map +1 -1
- package/dist/assertProjectRoot.d.ts +1 -1
- package/dist/assertProjectRoot.d.ts.map +1 -1
- package/dist/assertProjectRoot.js +5 -4
- package/dist/assertProjectRoot.js.map +1 -1
- package/dist/cliError.d.ts +22 -0
- package/dist/cliError.d.ts.map +1 -0
- package/dist/cliError.js +67 -0
- package/dist/cliError.js.map +1 -0
- package/dist/cliHelpers.d.ts +20 -0
- package/dist/cliHelpers.d.ts.map +1 -0
- package/dist/cliHelpers.js +69 -0
- package/dist/cliHelpers.js.map +1 -0
- package/dist/commands/attach.d.ts +2 -1
- package/dist/commands/attach.d.ts.map +1 -1
- package/dist/commands/attach.js +7 -5
- package/dist/commands/attach.js.map +1 -1
- package/dist/commands/auth.d.ts +2 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +20 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +14 -14
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/generate.d.ts +1 -5
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +13 -16
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/history.d.ts +1 -1
- package/dist/commands/history.d.ts.map +1 -1
- package/dist/commands/history.js +4 -3
- package/dist/commands/history.js.map +1 -1
- package/dist/commands/improvements.d.ts +4 -0
- package/dist/commands/improvements.d.ts.map +1 -0
- package/dist/commands/improvements.js +246 -0
- package/dist/commands/improvements.js.map +1 -0
- package/dist/commands/init.d.ts +2 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +11 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/integrate.d.ts +32 -2
- package/dist/commands/integrate.d.ts.map +1 -1
- package/dist/commands/integrate.js +228 -5
- package/dist/commands/integrate.js.map +1 -1
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +5 -6
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +14 -17
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/test.d.ts +47 -0
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +214 -58
- package/dist/commands/test.js.map +1 -1
- package/dist/index.js +183 -14
- package/dist/index.js.map +1 -1
- package/dist/jsonOutput.d.ts +19 -0
- package/dist/jsonOutput.d.ts.map +1 -0
- package/dist/jsonOutput.js +25 -0
- package/dist/jsonOutput.js.map +1 -0
- package/dist/loadJob.d.ts +2 -1
- package/dist/loadJob.d.ts.map +1 -1
- package/dist/loadJob.js +16 -13
- package/dist/loadJob.js.map +1 -1
- package/dist/nonInteractive.d.ts +18 -0
- package/dist/nonInteractive.d.ts.map +1 -0
- package/dist/nonInteractive.js +57 -0
- package/dist/nonInteractive.js.map +1 -0
- package/dist/projectConfig.d.ts.map +1 -1
- package/dist/projectConfig.js +17 -10
- package/dist/projectConfig.js.map +1 -1
- package/dist/providers/python/PythonProvider.d.ts.map +1 -1
- package/dist/providers/python/PythonProvider.js +24 -14
- package/dist/providers/python/PythonProvider.js.map +1 -1
- package/dist/providers/resolveProvider.d.ts.map +1 -1
- package/dist/providers/resolveProvider.js +7 -9
- package/dist/providers/resolveProvider.js.map +1 -1
- package/dist/providers/shared/entryFileGuidance.d.ts.map +1 -1
- package/dist/providers/shared/entryFileGuidance.js +7 -12
- package/dist/providers/shared/entryFileGuidance.js.map +1 -1
- package/dist/providers/typescript/TypeScriptProvider.d.ts.map +1 -1
- package/dist/providers/typescript/TypeScriptProvider.js +30 -27
- package/dist/providers/typescript/TypeScriptProvider.js.map +1 -1
- package/dist/replay.d.ts +3 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +20 -0
- package/dist/replay.js.map +1 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +12 -36
- package/dist/run.js.map +1 -1
- package/dist/sampleEventCache.d.ts +9 -0
- package/dist/sampleEventCache.d.ts.map +1 -0
- package/dist/sampleEventCache.js +47 -0
- package/dist/sampleEventCache.js.map +1 -0
- package/dist/sampleEventId.d.ts +13 -0
- package/dist/sampleEventId.d.ts.map +1 -0
- package/dist/sampleEventId.js +20 -0
- package/dist/sampleEventId.js.map +1 -0
- package/dist/shared/ToolDisplayUtils.js +1 -1
- package/dist/shared/ToolDisplayUtils.js.map +1 -1
- package/dist/urls.d.ts +3 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.js +27 -0
- package/dist/urls.js.map +1 -0
- package/package.json +3 -3
- package/dist/commands/deployTheme.d.ts +0 -28
- package/dist/commands/deployTheme.d.ts.map +0 -1
- package/dist/commands/deployTheme.js +0 -68
- package/dist/commands/deployTheme.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -3
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -47
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -1
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -2
- package/dist/commands/serve.js.map +0 -1
- package/dist/commands/terseCliTheme.d.ts +0 -28
- package/dist/commands/terseCliTheme.d.ts.map +0 -1
- package/dist/commands/terseCliTheme.js +0 -68
- package/dist/commands/terseCliTheme.js.map +0 -1
- package/dist/perf.d.ts +0 -9
- package/dist/perf.d.ts.map +0 -1
- package/dist/perf.js +0 -59
- package/dist/perf.js.map +0 -1
- package/dist/providers/codegen.test.d.ts +0 -2
- package/dist/providers/codegen.test.d.ts.map +0 -1
- package/dist/providers/codegen.test.js +0 -45
- package/dist/providers/codegen.test.js.map +0 -1
- package/dist/providers/python/PythonProvider.test.d.ts +0 -2
- package/dist/providers/python/PythonProvider.test.d.ts.map +0 -1
- package/dist/providers/python/PythonProvider.test.js +0 -169
- package/dist/providers/python/PythonProvider.test.js.map +0 -1
- package/dist/providers/typescript/prepareCodegenData.test.d.ts +0 -2
- package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +0 -1
- package/dist/providers/typescript/prepareCodegenData.test.js +0 -54
- package/dist/providers/typescript/prepareCodegenData.test.js.map +0 -1
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,0BAA0B,EAAmB,MAAM,aAAa,CAAA;AAMhK,iIAAiI;AACjI,qBAAa,QAAS,SAAQ,KAAK;IAE3B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAD7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAK7C;AAaD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1E;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAa1C;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAStF;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzC;AAED,KAAK,0BAA0B,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;AA+B3D,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,IAAI,GAAE,0BAAkC,GAAG,OAAO,CAAC,CAAC,CAAC,CAc/L;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,IAAI,GAAE,0BAAkC,GAAG,OAAO,CAAC,CAAC,CAAC,CAclK;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKrG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAavI;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,MAAM,EAAE,oBAAoB,EAAE,CAAA;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,uBAAuB,EAAE,OAAO,CAAA;CACnC,CAAA;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAEhG;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAajI"}
|
package/dist/api.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
1
|
import dotenv from "dotenv";
|
|
3
2
|
import fs from "node:fs";
|
|
4
3
|
import path from "node:path";
|
|
5
4
|
import { ApiRoutes, buildRoute, sdkRunTriggerEventResponseSchema } from "terse-types";
|
|
5
|
+
import { CliError, ErrorCode } from "./cliError.js";
|
|
6
6
|
import { BACKEND_URL } from "./config.js";
|
|
7
7
|
import { getStoredApiKey } from "./userConfig.js";
|
|
8
8
|
/** Thrown by `fetchWithAuth` on any non-2xx. Exposes `status` and the parsed body so callers can branch on specific failures. */
|
|
@@ -56,11 +56,11 @@ export function readApiKeyOrBail(options) {
|
|
|
56
56
|
const apiKey = readApiKey();
|
|
57
57
|
if (apiKey)
|
|
58
58
|
return apiKey;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
throw new CliError("not_authenticated", options?.title?.trim() || "Not authenticated. Run `terse login` first.", {
|
|
60
|
+
detail: options?.detail?.trim() || "Run `terse login` to authenticate, or set TERSE_API_KEY in your environment.",
|
|
61
|
+
actionRequired: true,
|
|
62
|
+
exitCode: ErrorCode.BAD_ARGUMENTS
|
|
63
|
+
});
|
|
64
64
|
}
|
|
65
65
|
export function readRunId() {
|
|
66
66
|
return readEnvVar("TERSE_RUN_ID");
|
|
@@ -145,9 +145,9 @@ export async function resolveEventFromRunId(runId, apiKey) {
|
|
|
145
145
|
return sdkRunTriggerEventResponseSchema.parse(response);
|
|
146
146
|
}
|
|
147
147
|
catch (error) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
throw new CliError("run_trigger_event_fetch_failed", `Could not fetch the trigger event for run ${runId}.`, {
|
|
149
|
+
detail: error instanceof Error ? error.message : String(error)
|
|
150
|
+
});
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { LanguageProvider } from "./providers/LanguageProvider.js";
|
|
2
2
|
/**
|
|
3
3
|
* Verify the CWD is the root of a Terse project for the active language provider.
|
|
4
|
-
*
|
|
4
|
+
* Throws a CliError with guidance if not.
|
|
5
5
|
*/
|
|
6
6
|
export declare function assertProjectRoot(provider: LanguageProvider, markers?: {
|
|
7
7
|
requiredFiles: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertProjectRoot.d.ts","sourceRoot":"","sources":["../src/assertProjectRoot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,GAAE;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAA4B,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"assertProjectRoot.d.ts","sourceRoot":"","sources":["../src/assertProjectRoot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,GAAE;IAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAA4B,GAAG,IAAI,CASvJ"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
1
|
import fs from "node:fs";
|
|
3
2
|
import path from "node:path";
|
|
3
|
+
import { CliError } from "./cliError.js";
|
|
4
4
|
/**
|
|
5
5
|
* Verify the CWD is the root of a Terse project for the active language provider.
|
|
6
|
-
*
|
|
6
|
+
* Throws a CliError with guidance if not.
|
|
7
7
|
*/
|
|
8
8
|
export function assertProjectRoot(provider, markers = provider.projectMarkers) {
|
|
9
9
|
const cwd = process.cwd();
|
|
10
10
|
const missingFiles = markers.requiredFiles.filter(relativePath => !fs.existsSync(path.join(cwd, relativePath)));
|
|
11
11
|
if (missingFiles.length > 0) {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
throw new CliError("not_project_root", `Current directory is not a ${markers.description}.`, {
|
|
13
|
+
detail: `Missing: ${missingFiles.join(", ")}.`
|
|
14
|
+
});
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=assertProjectRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertProjectRoot.js","sourceRoot":"","sources":["../src/assertProjectRoot.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"assertProjectRoot.js","sourceRoot":"","sources":["../src/assertProjectRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA0B,EAAE,UAA4D,QAAQ,CAAC,cAAc;IAC7I,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IAE/G,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,8BAA8B,OAAO,CAAC,WAAW,GAAG,EAAE;YACzF,MAAM,EAAE,YAAY,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;SACjD,CAAC,CAAA;IACN,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare class CliError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly opts: CliErrorOpts;
|
|
4
|
+
constructor(code: string, message: string, opts?: CliErrorOpts);
|
|
5
|
+
get exitCode(): ErrorCode;
|
|
6
|
+
}
|
|
7
|
+
export type CliErrorOpts = {
|
|
8
|
+
exitCode?: ErrorCode;
|
|
9
|
+
actionRequired?: boolean;
|
|
10
|
+
url?: string;
|
|
11
|
+
detail?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare enum ErrorCode {
|
|
14
|
+
GENERIC_ERROR = 1,
|
|
15
|
+
BAD_ARGUMENTS = 2
|
|
16
|
+
}
|
|
17
|
+
export declare function isCliError(err: unknown): err is CliError;
|
|
18
|
+
export declare function formatCliErrorText(err: CliError): string;
|
|
19
|
+
export declare function formatCliErrorJson(err: CliError): string;
|
|
20
|
+
export declare function setErrorOutputJson(enabled: boolean): void;
|
|
21
|
+
export declare function emitCliError(err: CliError): void;
|
|
22
|
+
//# sourceMappingURL=cliError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliError.d.ts","sourceRoot":"","sources":["../src/cliError.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAS,SAAQ,KAAK;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;gBAEf,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB;IAOlE,IAAI,QAAQ,IAAI,SAAS,CAExB;CACJ;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,oBAAY,SAAS;IACjB,aAAa,IAAI;IACjB,aAAa,IAAI;CACpB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,QAAQ,CAExD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAUxD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAsBxD;AAQD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEzD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAMhD"}
|
package/dist/cliError.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
export class CliError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
opts;
|
|
5
|
+
constructor(code, message, opts = {}) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "CliError";
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.opts = opts;
|
|
10
|
+
}
|
|
11
|
+
get exitCode() {
|
|
12
|
+
return this.opts.exitCode ?? (this.opts.actionRequired ? ErrorCode.BAD_ARGUMENTS : ErrorCode.GENERIC_ERROR);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export var ErrorCode;
|
|
16
|
+
(function (ErrorCode) {
|
|
17
|
+
ErrorCode[ErrorCode["GENERIC_ERROR"] = 1] = "GENERIC_ERROR";
|
|
18
|
+
ErrorCode[ErrorCode["BAD_ARGUMENTS"] = 2] = "BAD_ARGUMENTS";
|
|
19
|
+
})(ErrorCode || (ErrorCode = {}));
|
|
20
|
+
export function isCliError(err) {
|
|
21
|
+
return err instanceof CliError || (typeof err === "object" && err !== null && err.name === "CliError");
|
|
22
|
+
}
|
|
23
|
+
export function formatCliErrorText(err) {
|
|
24
|
+
const lines = [];
|
|
25
|
+
if (err.opts.actionRequired) {
|
|
26
|
+
lines.push(chalk.yellow(`ACTION REQUIRED: ${err.message}`));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
lines.push(chalk.red(`Error: ${err.message}`));
|
|
30
|
+
}
|
|
31
|
+
if (err.opts.url)
|
|
32
|
+
lines.push(chalk.cyan(` ${err.opts.url}`));
|
|
33
|
+
if (err.opts.detail)
|
|
34
|
+
lines.push(chalk.dim(` ${err.opts.detail}`));
|
|
35
|
+
return lines.join("\n") + "\n";
|
|
36
|
+
}
|
|
37
|
+
export function formatCliErrorJson(err) {
|
|
38
|
+
const error = {
|
|
39
|
+
code: err.code,
|
|
40
|
+
message: err.message,
|
|
41
|
+
actionRequired: Boolean(err.opts.actionRequired)
|
|
42
|
+
};
|
|
43
|
+
if (err.opts.url) {
|
|
44
|
+
error.url = err.opts.url;
|
|
45
|
+
}
|
|
46
|
+
if (err.opts.detail) {
|
|
47
|
+
error.detail = err.opts.detail;
|
|
48
|
+
}
|
|
49
|
+
return JSON.stringify({ error }) + "\n";
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Set via index.ts when the invoked subcommand is in JSON output mode so the
|
|
53
|
+
* top-level error handler can emit a structured envelope instead of prose.
|
|
54
|
+
*/
|
|
55
|
+
let jsonMode = false;
|
|
56
|
+
export function setErrorOutputJson(enabled) {
|
|
57
|
+
jsonMode = enabled;
|
|
58
|
+
}
|
|
59
|
+
export function emitCliError(err) {
|
|
60
|
+
if (jsonMode) {
|
|
61
|
+
process.stdout.write(formatCliErrorJson(err));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
process.stderr.write(formatCliErrorText(err));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=cliError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliError.js","sourceRoot":"","sources":["../src/cliError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,OAAO,QAAS,SAAQ,KAAK;IACtB,IAAI,CAAQ;IACZ,IAAI,CAAc;IAE3B,YAAY,IAAY,EAAE,OAAe,EAAE,OAAqB,EAAE;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IAC/G,CAAC;CACJ;AASD,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,2DAAiB,CAAA;IACjB,2DAAiB,CAAA;AACrB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,UAAU,UAAU,CAAC,GAAY;IACnC,OAAO,GAAG,YAAY,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAK,GAAyB,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;AACjI,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAa;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAC/D,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAClD,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAC7D,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAClE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAa;IAC5C,MAAM,KAAK,GAMP;QACA,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;KACnD,CAAA;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACf,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAA;IAC5B,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAA;IAClC,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,IAAI,QAAQ,GAAG,KAAK,CAAA;AAEpB,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IAC/C,QAAQ,GAAG,OAAO,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAa;IACtC,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type NonInteractiveOpts = {
|
|
2
|
+
nonInteractive?: boolean;
|
|
3
|
+
};
|
|
4
|
+
/**
|
|
5
|
+
* True when the CLI should avoid any interactive prompt.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isNonInteractive(opts?: NonInteractiveOpts): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Supports parsing a series of key=value flags from the CLI.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseKeyValueFlags(values: string[] | undefined): Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* Read a JSON object from stdin and return it as a string map. Used by
|
|
14
|
+
* `terse integrate connect --fields-stdin` so passwords and tokens never touch
|
|
15
|
+
* argv.
|
|
16
|
+
*/
|
|
17
|
+
export declare function readFieldsFromStdin(): Promise<Record<string, string>>;
|
|
18
|
+
export declare function collectKeyValue(value: string, previous: string[]): string[];
|
|
19
|
+
export declare function parseIntFlag(value: string): number;
|
|
20
|
+
//# sourceMappingURL=cliHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliHelpers.d.ts","sourceRoot":"","sources":["../src/cliHelpers.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAGnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUvF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6B3E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE3E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { InvalidArgumentError } from "commander";
|
|
2
|
+
import { CliError } from "./cliError.js";
|
|
3
|
+
/**
|
|
4
|
+
* True when the CLI should avoid any interactive prompt.
|
|
5
|
+
*/
|
|
6
|
+
export function isNonInteractive(opts) {
|
|
7
|
+
if (opts?.nonInteractive)
|
|
8
|
+
return true;
|
|
9
|
+
return !process.stdin.isTTY || !process.stdout.isTTY;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Supports parsing a series of key=value flags from the CLI.
|
|
13
|
+
*/
|
|
14
|
+
export function parseKeyValueFlags(values) {
|
|
15
|
+
const out = {};
|
|
16
|
+
values?.forEach(raw => {
|
|
17
|
+
const eq = raw.indexOf("=");
|
|
18
|
+
if (eq <= 0) {
|
|
19
|
+
throw new CliError("invalid_field", `Invalid --field value "${raw}"`, { detail: "Expected key=value" });
|
|
20
|
+
}
|
|
21
|
+
out[raw.slice(0, eq)] = raw.slice(eq + 1);
|
|
22
|
+
});
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Read a JSON object from stdin and return it as a string map. Used by
|
|
27
|
+
* `terse integrate connect --fields-stdin` so passwords and tokens never touch
|
|
28
|
+
* argv.
|
|
29
|
+
*/
|
|
30
|
+
export async function readFieldsFromStdin() {
|
|
31
|
+
const chunks = [];
|
|
32
|
+
for await (const chunk of process.stdin) {
|
|
33
|
+
chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
|
|
34
|
+
}
|
|
35
|
+
const raw = Buffer.concat(chunks).toString("utf-8").trim();
|
|
36
|
+
if (!raw)
|
|
37
|
+
return {};
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = JSON.parse(raw);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
throw new CliError("invalid_fields_stdin", "Could not parse JSON from stdin", {
|
|
44
|
+
detail: err instanceof Error ? err.message : String(err)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
48
|
+
throw new CliError("invalid_fields_stdin", "Expected a JSON object on stdin", { detail: 'Example: {"password":"..."}' });
|
|
49
|
+
}
|
|
50
|
+
const out = {};
|
|
51
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
52
|
+
if (typeof v !== "string") {
|
|
53
|
+
throw new CliError("invalid_fields_stdin", `Field "${k}" must be a string`);
|
|
54
|
+
}
|
|
55
|
+
out[k] = v;
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
export function collectKeyValue(value, previous) {
|
|
60
|
+
return [...previous, value];
|
|
61
|
+
}
|
|
62
|
+
export function parseIntFlag(value) {
|
|
63
|
+
const n = Number.parseInt(value, 10);
|
|
64
|
+
if (!Number.isFinite(n) || n <= 0) {
|
|
65
|
+
throw new InvalidArgumentError(`Expected a positive integer, got "${value}".`);
|
|
66
|
+
}
|
|
67
|
+
return n;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=cliHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliHelpers.js","sourceRoot":"","sources":["../src/cliHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type NonInteractiveOpts } from "../cliHelpers.js";
|
|
1
2
|
import type { LanguageProvider } from "../providers/LanguageProvider.js";
|
|
2
|
-
export declare function attach(provider?: LanguageProvider): Promise<void>;
|
|
3
|
+
export declare function attach(provider?: LanguageProvider, opts?: NonInteractiveOpts): Promise<void>;
|
|
3
4
|
//# sourceMappingURL=attach.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAA;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ErH"}
|
package/dist/commands/attach.js
CHANGED
|
@@ -2,14 +2,16 @@ import { intro, log, outro } from "@clack/prompts";
|
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import path from "node:path";
|
|
5
|
+
import { isNonInteractive } from "../cliHelpers.js";
|
|
5
6
|
import { createSpinner, logNextSteps } from "../cliUi.js";
|
|
6
7
|
import { PROJECT_CONFIG_FILENAME, createRemoteProject, readProjectConfig, writeProjectConfig } from "../projectConfig.js";
|
|
7
8
|
import { resolveProvider } from "../providers/resolveProvider.js";
|
|
8
9
|
import { setStoredApiKey } from "../userConfig.js";
|
|
9
|
-
import { getProjectAttachedUserName,
|
|
10
|
+
import { getProjectAttachedUserName, loginAndPersist } from "./auth.js";
|
|
10
11
|
import { generate } from "./generate.js";
|
|
11
12
|
import { listAndPromptIntegrations } from "./integrate.js";
|
|
12
|
-
export async function attach(provider = resolveProvider()) {
|
|
13
|
+
export async function attach(provider = resolveProvider(), opts) {
|
|
14
|
+
const nonInteractive = isNonInteractive(opts);
|
|
13
15
|
intro("terse attach");
|
|
14
16
|
const cwd = process.cwd();
|
|
15
17
|
const projectName = path.basename(cwd);
|
|
@@ -27,7 +29,7 @@ export async function attach(provider = resolveProvider()) {
|
|
|
27
29
|
}
|
|
28
30
|
log.info(`Attaching Terse to existing project ${chalk.bold(projectName)}`);
|
|
29
31
|
log.info("Self-hosted mode keeps your jobs on your own infrastructure via TERSE_REMOTE_SERVER_URL. No source code is uploaded to Terse.");
|
|
30
|
-
const result = await
|
|
32
|
+
const result = await loginAndPersist(opts);
|
|
31
33
|
if (result?.apiKey) {
|
|
32
34
|
setStoredApiKey(result.apiKey);
|
|
33
35
|
log.info(`Add ${chalk.cyan("TERSE_API_KEY")} to your server environment so your app can authenticate at runtime.`);
|
|
@@ -53,12 +55,12 @@ export async function attach(provider = resolveProvider()) {
|
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
57
|
log.info("Reviewing integrations");
|
|
56
|
-
await listAndPromptIntegrations({ showLifecycle: false });
|
|
58
|
+
await listAndPromptIntegrations({ showLifecycle: false, nonInteractive });
|
|
57
59
|
if (canGenerateFromCurrentDirectory(provider, cwd)) {
|
|
58
60
|
const s = createSpinner();
|
|
59
61
|
s.start("Generating code");
|
|
60
62
|
try {
|
|
61
|
-
await generate(provider
|
|
63
|
+
await generate(provider);
|
|
62
64
|
s.stop("Generated code");
|
|
63
65
|
}
|
|
64
66
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAEzH,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAE,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/auth.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { type NonInteractiveOpts } from "../cliHelpers.js";
|
|
1
2
|
export declare function login(): Promise<{
|
|
2
3
|
apiKey: string;
|
|
3
4
|
displayName: string | null;
|
|
4
5
|
} | null>;
|
|
5
|
-
export declare function loginAndPersist(): Promise<{
|
|
6
|
+
export declare function loginAndPersist(opts?: NonInteractiveOpts): Promise<{
|
|
6
7
|
apiKey: string;
|
|
7
8
|
displayName: string | null;
|
|
8
9
|
} | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAA;AAqF5E,wBAAsB,KAAK,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CAuC5F;AAED,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CAyC/H;AAED,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI/E;AAED,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAWD,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI1F"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -2,6 +2,8 @@ import { log } from "@clack/prompts";
|
|
|
2
2
|
import { confirm } from "@inquirer/prompts";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
import { fetchWithAuth, readApiKeyFromDir } from "../api.js";
|
|
5
|
+
import { CliError, ErrorCode } from "../cliError.js";
|
|
6
|
+
import { isNonInteractive } from "../cliHelpers.js";
|
|
5
7
|
import { createSpinner } from "../cliUi.js";
|
|
6
8
|
import { BACKEND_URL, WORKOS_CLIENT_ID } from "../config.js";
|
|
7
9
|
import { openUrlInBrowser } from "../openBrowser.js";
|
|
@@ -108,7 +110,8 @@ export async function login() {
|
|
|
108
110
|
return null;
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
|
-
export async function loginAndPersist() {
|
|
113
|
+
export async function loginAndPersist(opts) {
|
|
114
|
+
const nonInteractive = isNonInteractive(opts);
|
|
112
115
|
const stored = getStoredApiKey();
|
|
113
116
|
if (stored) {
|
|
114
117
|
const s = createSpinner();
|
|
@@ -116,14 +119,30 @@ export async function loginAndPersist() {
|
|
|
116
119
|
const existingName = await fetchDisplayNameForKey(stored);
|
|
117
120
|
if (existingName) {
|
|
118
121
|
s.stop(`Already logged in as ${existingName}`);
|
|
122
|
+
if (nonInteractive)
|
|
123
|
+
return { apiKey: stored, displayName: existingName };
|
|
119
124
|
const shouldContinue = await confirm({ message: "Log in again with a different account?", default: false });
|
|
120
125
|
if (!shouldContinue)
|
|
121
126
|
return { apiKey: stored, displayName: existingName };
|
|
122
127
|
}
|
|
123
128
|
else {
|
|
124
129
|
s.stop("Existing API key is invalid or expired");
|
|
130
|
+
if (nonInteractive) {
|
|
131
|
+
throw new CliError("not_authenticated", "Stored credentials are invalid or expired.", {
|
|
132
|
+
detail: 'Run "terse login" to refresh them.',
|
|
133
|
+
actionRequired: true,
|
|
134
|
+
exitCode: ErrorCode.BAD_ARGUMENTS
|
|
135
|
+
});
|
|
136
|
+
}
|
|
125
137
|
}
|
|
126
138
|
}
|
|
139
|
+
else if (nonInteractive) {
|
|
140
|
+
throw new CliError("not_authenticated", "Not authenticated.", {
|
|
141
|
+
detail: 'Run "terse login" first, then retry.',
|
|
142
|
+
actionRequired: true,
|
|
143
|
+
exitCode: ErrorCode.BAD_ARGUMENTS
|
|
144
|
+
});
|
|
145
|
+
}
|
|
127
146
|
const result = await login();
|
|
128
147
|
if (!result?.apiKey) {
|
|
129
148
|
log.info("You can run `terse login` later to authenticate.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvG,MAAM,eAAe,GAAG,yDAAyD,CAAA;AACjF,MAAM,SAAS,GAAG,qDAAqD,CAAA;AACvE,MAAM,sBAAsB,GAAG,8CAA8C,CAAA;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAIxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,UAAQ,iBA4HlH"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -6,6 +6,7 @@ import fs from "node:fs";
|
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
import { ApiRoutes, sdkDeployRequestBodySchema } from "terse-types";
|
|
8
8
|
import { ApiError, fetchWithAuthAndSession, readApiKeyOrBail } from "../api.js";
|
|
9
|
+
import { CliError } from "../cliError.js";
|
|
9
10
|
import { getCliVersion } from "../cliVersion.js";
|
|
10
11
|
import { FRONTEND_URL } from "../config.js";
|
|
11
12
|
import { loadJobRegistry } from "../loadJob.js";
|
|
@@ -24,16 +25,9 @@ export async function deploy(provider = resolveProvider(), entryFile, hasRetried
|
|
|
24
25
|
// Self-hosted mode is driven entirely by terse.config.json (selfHosted + remoteServerUrl).
|
|
25
26
|
const remoteServerUrl = config.remoteServerUrl?.trim() || undefined;
|
|
26
27
|
if (config.selfHosted && !remoteServerUrl) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
console.error(chalk.dim(` {`));
|
|
31
|
-
console.error(chalk.dim(` "projectId": "${projectId}",`));
|
|
32
|
-
console.error(chalk.dim(` "name": "${config.name}",`));
|
|
33
|
-
console.error(chalk.dim(` "selfHosted": true,`));
|
|
34
|
-
console.error(chalk.dim(` "remoteServerUrl": "https://your-app.example.com"`));
|
|
35
|
-
console.error(chalk.dim(` }\n`));
|
|
36
|
-
process.exit(1);
|
|
28
|
+
throw new CliError("remote_server_url_missing", "Self-hosted mode is enabled but no server URL is configured.", {
|
|
29
|
+
detail: `Set \`remoteServerUrl\` in \`${PROJECT_CONFIG_FILENAME}\` to the URL where your Terse SDK is running.\n\nExample:\n {\n "projectId": "${projectId}",\n "name": "${config.name}",\n "selfHosted": true,\n "remoteServerUrl": "https://your-app.example.com"\n }`
|
|
30
|
+
});
|
|
37
31
|
}
|
|
38
32
|
const isUrlMode = !!remoteServerUrl;
|
|
39
33
|
let sourceZipBase64;
|
|
@@ -116,9 +110,16 @@ export async function deploy(provider = resolveProvider(), entryFile, hasRetried
|
|
|
116
110
|
return deploy(provider, entryFile, true);
|
|
117
111
|
}
|
|
118
112
|
if (isProjectGoneError(error)) {
|
|
119
|
-
|
|
113
|
+
throw new CliError("project_not_found", `The project linked in ${PROJECT_CONFIG_FILENAME} no longer exists.`, {
|
|
114
|
+
detail: `This usually means it was deleted from the dashboard, or this config came from another machine.\nRun \`terse attach\` to link this directory to an existing project.`
|
|
115
|
+
});
|
|
120
116
|
}
|
|
121
|
-
|
|
117
|
+
if (error instanceof CliError) {
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
throw new CliError("deploy_failed", "Deploy failed.", {
|
|
121
|
+
detail: error instanceof Error ? error.message : String(error)
|
|
122
|
+
});
|
|
122
123
|
}
|
|
123
124
|
finally {
|
|
124
125
|
session.close();
|
|
@@ -168,8 +169,7 @@ function buildZipPayload(provider) {
|
|
|
168
169
|
const files = collectFiles(cwd, cwd, provider);
|
|
169
170
|
const fileCount = Object.keys(files).length;
|
|
170
171
|
if (fileCount === 0) {
|
|
171
|
-
|
|
172
|
-
process.exit(1);
|
|
172
|
+
throw new CliError("no_files_to_deploy", "No files found to deploy");
|
|
173
173
|
}
|
|
174
174
|
const zipData = zipSync(files, { level: 6 });
|
|
175
175
|
return {
|