terse-cli 0.1.25 → 0.1.27
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 +13 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +39 -1
- package/dist/api.js.map +1 -1
- package/dist/commands/attach.d.ts +3 -0
- package/dist/commands/attach.d.ts.map +1 -0
- package/dist/commands/attach.js +65 -0
- package/dist/commands/attach.js.map +1 -0
- package/dist/commands/auth.d.ts +12 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +166 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/deploy.d.ts +3 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +122 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +282 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/history.d.ts +15 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +103 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/historyPrinters.d.ts +9 -0
- package/dist/commands/historyPrinters.d.ts.map +1 -0
- package/dist/commands/historyPrinters.js +101 -0
- package/dist/commands/historyPrinters.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +98 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/integrate.d.ts +3 -0
- package/dist/commands/integrate.d.ts.map +1 -0
- package/dist/commands/integrate.js +214 -0
- package/dist/commands/integrate.js.map +1 -0
- package/dist/commands/replay.d.ts +3 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +20 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +56 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/test.d.ts +3 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +83 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/index.js +42 -12
- 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/providers/python/PythonProvider.d.ts.map +1 -1
- package/dist/providers/python/PythonProvider.js +10 -1
- package/dist/providers/python/PythonProvider.js.map +1 -1
- package/dist/userConfig.d.ts +5 -0
- package/dist/userConfig.d.ts.map +1 -0
- package/dist/userConfig.js +32 -0
- package/dist/userConfig.js.map +1 -0
- package/package.json +4 -3
package/dist/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SdkRunTriggerEventResponse } from "terse-types";
|
|
1
|
+
import type { GetRunHistoryParams, GetRunHistoryResponse, RunHistoryModelEvent, SdkRunTriggerEventResponse } from "terse-types";
|
|
2
2
|
export declare function readEnvVar(name: string): string | null;
|
|
3
3
|
export declare function readEnvVarFromDir(dir: string, name: string): string | null;
|
|
4
4
|
export declare function readApiKey(): string | null;
|
|
@@ -9,5 +9,17 @@ export declare function readApiKeyOrBail(options?: {
|
|
|
9
9
|
}): string;
|
|
10
10
|
export declare function readRunId(): string | null;
|
|
11
11
|
export declare function fetchWithAuth<T>(urlPath: string, apiKey: string, params?: Record<string, unknown>, type?: "GET" | "POST"): Promise<T>;
|
|
12
|
+
export declare function resolveAgentIdByJobName(jobName: string, apiKey: string): Promise<string | null>;
|
|
13
|
+
export declare function fetchRunHistory(agentId: string, apiKey: string, params?: GetRunHistoryParams): Promise<GetRunHistoryResponse>;
|
|
14
|
+
export type RunChatHistory = {
|
|
15
|
+
events: RunHistoryModelEvent[];
|
|
16
|
+
startTimestamp: string;
|
|
17
|
+
endTimestamp: string;
|
|
18
|
+
status: string;
|
|
19
|
+
triggerEvent: string | null;
|
|
20
|
+
triggerEventType: string | null;
|
|
21
|
+
isTriggerEventTruncated: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare function fetchRunChatHistory(runId: string, apiKey: string): Promise<RunChatHistory>;
|
|
12
24
|
export declare function resolveEventFromRunId(runId: string | null, apiKey: string): Promise<SdkRunTriggerEventResponse | undefined>;
|
|
13
25
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,0BAA0B,EAAmB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAkB,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,0BAA0B,EAAmB,MAAM,aAAa,CAAA;AAgBhK,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,CAWtF;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzC;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,KAAK,GAAG,MAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CA0BtJ;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
|
@@ -4,6 +4,7 @@ import fs from "node:fs";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { ApiRoutes, buildRoute, sdkRunTriggerEventResponseSchema } from "terse-types";
|
|
6
6
|
import { BACKEND_URL } from "./config.js";
|
|
7
|
+
import { getStoredApiKey } from "./userConfig.js";
|
|
7
8
|
let dotenvLoadedFor = null;
|
|
8
9
|
function ensureDotenvLoaded(cwd = process.cwd()) {
|
|
9
10
|
if (dotenvLoadedFor === cwd)
|
|
@@ -26,7 +27,16 @@ export function readEnvVarFromDir(dir, name) {
|
|
|
26
27
|
return parsed[name] || null;
|
|
27
28
|
}
|
|
28
29
|
export function readApiKey() {
|
|
29
|
-
|
|
30
|
+
ensureDotenvLoaded();
|
|
31
|
+
const fromProcessEnv = process.env.TERSE_API_KEY;
|
|
32
|
+
if (fromProcessEnv)
|
|
33
|
+
return fromProcessEnv;
|
|
34
|
+
const fromUserConfig = getStoredApiKey();
|
|
35
|
+
if (fromUserConfig) {
|
|
36
|
+
process.env.TERSE_API_KEY = fromUserConfig;
|
|
37
|
+
return fromUserConfig;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
30
40
|
}
|
|
31
41
|
export function readApiKeyFromDir(dir) {
|
|
32
42
|
return readEnvVarFromDir(dir, "TERSE_API_KEY");
|
|
@@ -69,6 +79,34 @@ export async function fetchWithAuth(urlPath, apiKey, params = {}, type = "GET")
|
|
|
69
79
|
}
|
|
70
80
|
return res.json();
|
|
71
81
|
}
|
|
82
|
+
export async function resolveAgentIdByJobName(jobName, apiKey) {
|
|
83
|
+
const search = encodeURIComponent(jobName);
|
|
84
|
+
const response = await fetchWithAuth(`${ApiRoutes.AGENTS.LIST}?search=${search}&pageSize=100`, apiKey);
|
|
85
|
+
const exact = response.agents.find(agent => agent.name === jobName);
|
|
86
|
+
return exact?.id ?? null;
|
|
87
|
+
}
|
|
88
|
+
export async function fetchRunHistory(agentId, apiKey, params = {}) {
|
|
89
|
+
const usp = new URLSearchParams();
|
|
90
|
+
if (params.q)
|
|
91
|
+
usp.set("q", params.q);
|
|
92
|
+
if (params.start)
|
|
93
|
+
usp.set("start", params.start);
|
|
94
|
+
if (params.end)
|
|
95
|
+
usp.set("end", params.end);
|
|
96
|
+
if (params.status?.length)
|
|
97
|
+
usp.set("status", params.status.join(","));
|
|
98
|
+
if (params.page)
|
|
99
|
+
usp.set("page", String(params.page));
|
|
100
|
+
if (params.pageSize)
|
|
101
|
+
usp.set("pageSize", String(params.pageSize));
|
|
102
|
+
const base = buildRoute(ApiRoutes.RUN_HISTORY.BY_AGENT_ID, { agentId });
|
|
103
|
+
const url = usp.toString() ? `${base}?${usp.toString()}` : base;
|
|
104
|
+
const result = await fetchWithAuth(url, apiKey);
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
export async function fetchRunChatHistory(runId, apiKey) {
|
|
108
|
+
return fetchWithAuth(buildRoute(ApiRoutes.RUN_HISTORY.CHAT_BY_RUN_ID, { runId }), apiKey);
|
|
109
|
+
}
|
|
72
110
|
export async function resolveEventFromRunId(runId, apiKey) {
|
|
73
111
|
if (!runId) {
|
|
74
112
|
return undefined;
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAA;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD1F"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import { resolveProvider } from "../providers/resolveProvider.js";
|
|
6
|
+
import { setStoredApiKey } from "../userConfig.js";
|
|
7
|
+
import { getProjectAttachedUserName, login } from "./auth.js";
|
|
8
|
+
import { generate } from "./generate.js";
|
|
9
|
+
import { listAndPromptIntegrations } from "./integrate.js";
|
|
10
|
+
export async function attach(provider = resolveProvider()) {
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
const projectName = path.basename(cwd);
|
|
13
|
+
const existingUserName = await getProjectAttachedUserName(cwd);
|
|
14
|
+
if (existingUserName) {
|
|
15
|
+
console.log(`\n ${chalk.green.bold("Already set up")} for ${chalk.bold(existingUserName)}.\n`);
|
|
16
|
+
console.log(chalk.dim(" This project already has a valid TERSE_API_KEY, so attach does not need to run again.\n"));
|
|
17
|
+
console.log(" Next steps:\n");
|
|
18
|
+
console.log(` 1. Run ${chalk.cyan("terse integrate")} to connect or review integrations`);
|
|
19
|
+
console.log(` 2. Run ${chalk.cyan("terse generate")} to refresh generated helpers`);
|
|
20
|
+
console.log(` 3. Run ${chalk.cyan("terse deploy")} when you're ready to sync jobs`);
|
|
21
|
+
console.log("");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
console.log(`\n Attaching Terse to existing project ${chalk.bold(projectName)}\n`);
|
|
25
|
+
console.log(chalk.dim(" Your jobs will run on your own infrastructure via TERSE_REMOTE_SERVER_URL. No source code is uploaded to Terse.\n"));
|
|
26
|
+
const result = await login();
|
|
27
|
+
if (result?.apiKey) {
|
|
28
|
+
// Save to user config so the CLI itself works without .env. The user still needs to
|
|
29
|
+
// paste the key into their app's environment for the SDK runtime on their server.
|
|
30
|
+
setStoredApiKey(result.apiKey);
|
|
31
|
+
console.log(`\n Add this to your server's environment (e.g. ${chalk.bold(".env")}) so your app can authenticate at runtime:\n`);
|
|
32
|
+
console.log(`TERSE_API_KEY=${result.apiKey}`);
|
|
33
|
+
console.log("");
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log(chalk.dim(" You can run `terse login` later to authenticate."));
|
|
37
|
+
}
|
|
38
|
+
await listAndPromptIntegrations();
|
|
39
|
+
if (canGenerateFromCurrentDirectory(provider, cwd)) {
|
|
40
|
+
const spinner = ora("Generating code").start();
|
|
41
|
+
try {
|
|
42
|
+
await generate(provider);
|
|
43
|
+
spinner.succeed("Generated code");
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
spinner.warn(`Failed to generate code. Run ${chalk.cyan("terse generate")} manually.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(chalk.yellow(`\n Skipped code generation because this repo is missing ${provider.detectionMarkers.requiredFiles.join(", ")}.`));
|
|
51
|
+
console.log(chalk.dim(` Add your job entrypoint at ${provider.entryFile}, then run ${chalk.cyan("terse generate")} manually.\n`));
|
|
52
|
+
}
|
|
53
|
+
console.log(`\n ${chalk.green.bold("Done!")} Terse is attached to your existing project.\n`);
|
|
54
|
+
console.log(" Next steps:\n");
|
|
55
|
+
console.log(` 1. Install ${chalk.cyan("terse-sdk")} in this repo if you haven't already`);
|
|
56
|
+
console.log(` 2. Add your Terse job definitions to ${chalk.cyan(provider.entryFile)} and import that file from your app startup path`);
|
|
57
|
+
console.log(chalk.dim(` If your self-hosted app keeps jobs in another file, use ${chalk.cyan("--entry-file")} with terse test, terse run, and terse deploy.`));
|
|
58
|
+
console.log(` 3. Set ${chalk.cyan("TERSE_REMOTE_SERVER_URL")} in ${chalk.cyan(".env")} before running ${chalk.cyan("terse deploy")}`);
|
|
59
|
+
console.log(` 4. Run ${chalk.cyan("terse integrate")} to connect integrations`);
|
|
60
|
+
console.log("");
|
|
61
|
+
}
|
|
62
|
+
function canGenerateFromCurrentDirectory(provider, cwd) {
|
|
63
|
+
return provider.detectionMarkers.requiredFiles.every(relativePath => fs.existsSync(path.join(cwd, relativePath)));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function login(): Promise<{
|
|
2
|
+
apiKey: string;
|
|
3
|
+
displayName: string | null;
|
|
4
|
+
} | null>;
|
|
5
|
+
export declare function loginAndPersist(): Promise<{
|
|
6
|
+
apiKey: string;
|
|
7
|
+
displayName: string | null;
|
|
8
|
+
} | null>;
|
|
9
|
+
export declare function getExistingAuthenticatedUserName(): Promise<string | null>;
|
|
10
|
+
export declare function logout(): boolean;
|
|
11
|
+
export declare function getProjectAttachedUserName(targetDir: string): Promise<string | null>;
|
|
12
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAoHA,wBAAsB,KAAK,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CA0C5F;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CAyBtG;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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { confirm } from "@inquirer/prompts";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { exec } from "node:child_process";
|
|
4
|
+
import process from "node:process";
|
|
5
|
+
import ora from "ora";
|
|
6
|
+
import { fetchWithAuth, readApiKeyFromDir } from "../api.js";
|
|
7
|
+
import { BACKEND_URL, WORKOS_CLIENT_ID } from "../config.js";
|
|
8
|
+
import { clearStoredApiKey, getAuthFilePath, getStoredApiKey, setStoredApiKey } from "../userConfig.js";
|
|
9
|
+
const DEVICE_AUTH_URL = "https://api.workos.com/user_management/authorize/device";
|
|
10
|
+
const TOKEN_URL = "https://api.workos.com/user_management/authenticate";
|
|
11
|
+
const DEVICE_CODE_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
|
|
12
|
+
function sleep(ms) {
|
|
13
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
14
|
+
}
|
|
15
|
+
function openInBrowser(url) {
|
|
16
|
+
const platform = process.platform;
|
|
17
|
+
const cmd = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open";
|
|
18
|
+
exec(`${cmd} "${url}"`);
|
|
19
|
+
}
|
|
20
|
+
async function requestDeviceCode() {
|
|
21
|
+
const res = await fetch(DEVICE_AUTH_URL, {
|
|
22
|
+
method: "POST",
|
|
23
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
24
|
+
body: new URLSearchParams({ client_id: WORKOS_CLIENT_ID })
|
|
25
|
+
});
|
|
26
|
+
if (!res.ok) {
|
|
27
|
+
const body = await res.text();
|
|
28
|
+
throw new Error(`Failed to request device code: ${res.status} ${body}`);
|
|
29
|
+
}
|
|
30
|
+
return res.json();
|
|
31
|
+
}
|
|
32
|
+
async function pollForTokens(deviceCode, expiresIn, interval) {
|
|
33
|
+
const deadline = Date.now() + expiresIn * 1000;
|
|
34
|
+
let pollInterval = interval;
|
|
35
|
+
while (Date.now() < deadline) {
|
|
36
|
+
await sleep(pollInterval * 1000);
|
|
37
|
+
const res = await fetch(TOKEN_URL, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
40
|
+
body: new URLSearchParams({
|
|
41
|
+
grant_type: DEVICE_CODE_GRANT_TYPE,
|
|
42
|
+
device_code: deviceCode,
|
|
43
|
+
client_id: WORKOS_CLIENT_ID
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
if (res.ok) {
|
|
47
|
+
return res.json();
|
|
48
|
+
}
|
|
49
|
+
const data = (await res.json());
|
|
50
|
+
switch (data.error) {
|
|
51
|
+
case "authorization_pending":
|
|
52
|
+
break;
|
|
53
|
+
case "slow_down":
|
|
54
|
+
pollInterval += 1;
|
|
55
|
+
break;
|
|
56
|
+
case "access_denied":
|
|
57
|
+
throw new Error("Authorization was denied");
|
|
58
|
+
case "expired_token":
|
|
59
|
+
throw new Error("Authorization expired — please try again");
|
|
60
|
+
default:
|
|
61
|
+
throw new Error(`Authorization failed: ${data.error}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
throw new Error("Authorization timed out — please try again");
|
|
65
|
+
}
|
|
66
|
+
async function exchangeForApiKey(accessToken) {
|
|
67
|
+
const res = await fetch(`${BACKEND_URL}/sdk/auth/device-token-exchange`, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
headers: { "Content-Type": "application/json" },
|
|
70
|
+
body: JSON.stringify({ accessToken })
|
|
71
|
+
});
|
|
72
|
+
if (!res.ok) {
|
|
73
|
+
const body = (await res.json().catch(() => ({})));
|
|
74
|
+
throw new Error(`${res.status} — ${body.error || "Failed to exchange token"}`);
|
|
75
|
+
}
|
|
76
|
+
return res.json();
|
|
77
|
+
}
|
|
78
|
+
export async function login() {
|
|
79
|
+
const spinner = ora("Requesting login code").start();
|
|
80
|
+
let deviceData;
|
|
81
|
+
try {
|
|
82
|
+
deviceData = await requestDeviceCode();
|
|
83
|
+
spinner.stop();
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
spinner.fail("Failed to start login flow");
|
|
87
|
+
console.error(chalk.red(` ${err.message}`));
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
console.log(`\n ${chalk.bold("To sign in, open this URL in your browser:")}\n`);
|
|
91
|
+
console.log(` ${chalk.cyan(deviceData.verification_uri_complete)}\n`);
|
|
92
|
+
console.log(` Or visit ${chalk.cyan(deviceData.verification_uri)} and enter code: ${chalk.bold(deviceData.user_code)}\n`);
|
|
93
|
+
openInBrowser(deviceData.verification_uri_complete);
|
|
94
|
+
const pollSpinner = ora("Waiting for authentication in browser").start();
|
|
95
|
+
let tokenData;
|
|
96
|
+
try {
|
|
97
|
+
tokenData = await pollForTokens(deviceData.device_code, deviceData.expires_in, deviceData.interval);
|
|
98
|
+
pollSpinner.text = "Exchanging token";
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
pollSpinner.fail("Login failed");
|
|
102
|
+
console.error(chalk.red(` ${err.message}`));
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
let exchangeData;
|
|
106
|
+
try {
|
|
107
|
+
exchangeData = await exchangeForApiKey(tokenData.access_token);
|
|
108
|
+
pollSpinner.succeed(`Logged in as ${chalk.bold(exchangeData.user.displayName || exchangeData.user.email)}`);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
pollSpinner.fail("Failed to create API key");
|
|
112
|
+
console.error(chalk.red(` ${err.message}`));
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return { apiKey: exchangeData.apiKey, displayName: exchangeData.user.displayName };
|
|
116
|
+
}
|
|
117
|
+
export async function loginAndPersist() {
|
|
118
|
+
const stored = getStoredApiKey();
|
|
119
|
+
if (stored) {
|
|
120
|
+
const existingName = await fetchDisplayNameForKey(stored);
|
|
121
|
+
if (existingName) {
|
|
122
|
+
const spinner = ora("Checking existing API key").start();
|
|
123
|
+
spinner.succeed(`Already logged in as ${chalk.bold(existingName)}`);
|
|
124
|
+
const shouldContinue = await confirm({ message: "Log in again with a different account?", default: false });
|
|
125
|
+
if (!shouldContinue)
|
|
126
|
+
return { apiKey: stored, displayName: existingName };
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
const spinner = ora("Checking existing API key").start();
|
|
130
|
+
spinner.warn("Existing API key is invalid or expired");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const result = await login();
|
|
134
|
+
if (!result?.apiKey) {
|
|
135
|
+
console.log(chalk.dim(" You can run `terse login` later to authenticate."));
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
setStoredApiKey(result.apiKey);
|
|
139
|
+
console.log(chalk.dim(` Saved credentials to ${getAuthFilePath()}`));
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
export async function getExistingAuthenticatedUserName() {
|
|
143
|
+
const stored = getStoredApiKey();
|
|
144
|
+
if (!stored)
|
|
145
|
+
return null;
|
|
146
|
+
return fetchDisplayNameForKey(stored);
|
|
147
|
+
}
|
|
148
|
+
export function logout() {
|
|
149
|
+
return clearStoredApiKey();
|
|
150
|
+
}
|
|
151
|
+
async function fetchDisplayNameForKey(apiKey) {
|
|
152
|
+
try {
|
|
153
|
+
const me = await fetchWithAuth("/sdk/me", apiKey);
|
|
154
|
+
return me.displayName || me.firstName || me.email || "Unknown user";
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export async function getProjectAttachedUserName(targetDir) {
|
|
161
|
+
const projectKey = readApiKeyFromDir(targetDir);
|
|
162
|
+
if (!projectKey)
|
|
163
|
+
return null;
|
|
164
|
+
return fetchDisplayNameForKey(projectKey);
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAGxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,EAAE,SAAS,CAAC,EAAE,MAAM,iBAyF9F"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { zipSync } from "fflate";
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import ora from "ora";
|
|
6
|
+
import { ApiRoutes, sdkDeployRequestBodySchema } from "terse-types";
|
|
7
|
+
import { fetchWithAuth, readApiKeyOrBail, readEnvVar } from "../api.js";
|
|
8
|
+
import { loadJobRegistry } from "../loadJob.js";
|
|
9
|
+
import { resolveProvider } from "../providers/resolveProvider.js";
|
|
10
|
+
export async function deploy(provider = resolveProvider(), entryFile) {
|
|
11
|
+
const apiKey = readApiKeyOrBail({
|
|
12
|
+
title: "Error: Not authenticated.",
|
|
13
|
+
detail: "Run `terse login` to authenticate, or set TERSE_API_KEY in your environment."
|
|
14
|
+
});
|
|
15
|
+
const registry = await loadJobRegistry(provider, entryFile);
|
|
16
|
+
const jobs = [...registry.values()];
|
|
17
|
+
// If TERSE_REMOTE_SERVER_URL (or legacy TERSE_JOB_URL) is set in .env, deploy
|
|
18
|
+
// in URL mode (user infrastructure). No source code is zipped or uploaded.
|
|
19
|
+
const remoteServerUrl = readEnvVar("TERSE_REMOTE_SERVER_URL") ?? readEnvVar("TERSE_JOB_URL");
|
|
20
|
+
const isUrlMode = !!remoteServerUrl;
|
|
21
|
+
let sourceZipBase64;
|
|
22
|
+
let fileCount = 0;
|
|
23
|
+
let zipSizeBytes = 0;
|
|
24
|
+
if (!isUrlMode) {
|
|
25
|
+
const zipPayload = buildZipPayload(provider);
|
|
26
|
+
sourceZipBase64 = zipPayload.sourceZipBase64;
|
|
27
|
+
fileCount = zipPayload.fileCount;
|
|
28
|
+
zipSizeBytes = zipPayload.zipSizeBytes;
|
|
29
|
+
}
|
|
30
|
+
const spinner = ora(`Deploying ${jobs.length} job${jobs.length === 1 ? "" : "s"}...`).start();
|
|
31
|
+
try {
|
|
32
|
+
const body = sdkDeployRequestBodySchema.parse({
|
|
33
|
+
jobs: jobs.map(job => ({
|
|
34
|
+
jobName: job.name,
|
|
35
|
+
triggers: job.triggers
|
|
36
|
+
})),
|
|
37
|
+
remoteServerUrl: isUrlMode ? remoteServerUrl : undefined,
|
|
38
|
+
sourceZipBase64
|
|
39
|
+
});
|
|
40
|
+
const result = await fetchWithAuth(ApiRoutes.SDK.DEPLOY, apiKey, body, "POST");
|
|
41
|
+
if (!result.success) {
|
|
42
|
+
spinner.fail(chalk.red(`Deploy failed: ${result.error}`));
|
|
43
|
+
if (result.details) {
|
|
44
|
+
console.error(chalk.dim(` ${result.details}`));
|
|
45
|
+
}
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
spinner.succeed(chalk.green(`Deployed ${result.results.length} job${result.results.length === 1 ? "" : "s"}`));
|
|
49
|
+
for (const r of result.results) {
|
|
50
|
+
const verb = r.isUpdate ? "Updated" : "Created";
|
|
51
|
+
console.log(chalk.dim(` ${verb} "${r.jobName}" (${r.automationId})`));
|
|
52
|
+
if (r.triggers) {
|
|
53
|
+
for (const t of r.triggers) {
|
|
54
|
+
if (t.metadata?.webhookUrl) {
|
|
55
|
+
console.log(chalk.cyan(` Webhook URL: ${t.metadata.webhookUrl}`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (isUrlMode) {
|
|
61
|
+
console.log(chalk.dim(` Mode: user infrastructure`));
|
|
62
|
+
console.log(chalk.dim(` Server URL: ${remoteServerUrl}`));
|
|
63
|
+
const signingSecret = result.results.find(r => r.signingSecret)?.signingSecret;
|
|
64
|
+
if (signingSecret) {
|
|
65
|
+
const existingSecret = readEnvVar("TERSE_SIGNING_SECRET");
|
|
66
|
+
if (!existingSecret) {
|
|
67
|
+
console.log(`\n Add this to your ${chalk.bold(".env")} file:\n`);
|
|
68
|
+
console.log(`TERSE_SIGNING_SECRET=${signingSecret}`);
|
|
69
|
+
console.log("");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log(chalk.dim(` Files: ${fileCount}`));
|
|
75
|
+
console.log(chalk.dim(` Zip size: ${(zipSizeBytes / 1024).toFixed(1)} KB`));
|
|
76
|
+
}
|
|
77
|
+
if (result.removed.length > 0) {
|
|
78
|
+
console.log(chalk.yellow(`\nRemoved ${result.removed.length} stale job${result.removed.length === 1 ? "" : "s"} no longer in project:`));
|
|
79
|
+
for (const r of result.removed) {
|
|
80
|
+
console.log(chalk.dim(` - ${r.name} (${r.id})`));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
spinner.fail(chalk.red(`Deploy failed: ${error.message}`));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function collectFiles(dir, baseDir, provider) {
|
|
90
|
+
const entries = {};
|
|
91
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
92
|
+
if (provider.deployExclusions.dirs.has(entry.name))
|
|
93
|
+
continue;
|
|
94
|
+
if (provider.deployExclusions.files.has(entry.name))
|
|
95
|
+
continue;
|
|
96
|
+
const fullPath = path.join(dir, entry.name);
|
|
97
|
+
const relativePath = path.relative(baseDir, fullPath);
|
|
98
|
+
if (entry.isDirectory()) {
|
|
99
|
+
Object.assign(entries, collectFiles(fullPath, baseDir, provider));
|
|
100
|
+
}
|
|
101
|
+
else if (entry.isFile()) {
|
|
102
|
+
entries[relativePath] = new Uint8Array(fs.readFileSync(fullPath));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return entries;
|
|
106
|
+
}
|
|
107
|
+
function buildZipPayload(provider) {
|
|
108
|
+
const cwd = process.cwd();
|
|
109
|
+
const files = collectFiles(cwd, cwd, provider);
|
|
110
|
+
const fileCount = Object.keys(files).length;
|
|
111
|
+
if (fileCount === 0) {
|
|
112
|
+
console.error(chalk.red("No files found to deploy"));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
const zipData = zipSync(files, { level: 6 });
|
|
116
|
+
return {
|
|
117
|
+
sourceZipBase64: Buffer.from(zipData).toString("base64"),
|
|
118
|
+
fileCount,
|
|
119
|
+
zipSizeBytes: zipData.length
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAkBxE,wBAAsB,QAAQ,CAAC,QAAQ,GAAE,gBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAoT5F"}
|