praetom 0.1.0 → 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/dist/cli/cli.js +11 -1
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/connect.d.ts +13 -0
- package/dist/cli/commands/connect.d.ts.map +1 -0
- package/dist/cli/commands/connect.js +106 -0
- package/dist/cli/commands/connect.js.map +1 -0
- package/dist/cli/commands/discover.d.ts.map +1 -1
- package/dist/cli/commands/discover.js +4 -6
- package/dist/cli/commands/discover.js.map +1 -1
- package/dist/cli/commands/features.d.ts.map +1 -1
- package/dist/cli/commands/features.js +65 -49
- package/dist/cli/commands/features.js.map +1 -1
- package/dist/cli/commands/init.d.ts +16 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +59 -40
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/install.d.ts +20 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +82 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/login.d.ts +1 -1
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +59 -45
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/logout.d.ts.map +1 -1
- package/dist/cli/commands/logout.js +10 -10
- package/dist/cli/commands/logout.js.map +1 -1
- package/dist/cli/commands/rotate.d.ts.map +1 -1
- package/dist/cli/commands/rotate.js +29 -23
- package/dist/cli/commands/rotate.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -12
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/dist/cli/commands/uninstall.js +63 -51
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/commands/usage.d.ts.map +1 -1
- package/dist/cli/commands/usage.js +12 -12
- package/dist/cli/commands/usage.js.map +1 -1
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +22 -25
- package/dist/cli/commands/whoami.js.map +1 -1
- package/dist/cli/util/api.d.ts +9 -0
- package/dist/cli/util/api.d.ts.map +1 -1
- package/dist/cli/util/api.js +14 -1
- package/dist/cli/util/api.js.map +1 -1
- package/dist/cli/util/output.d.ts +55 -0
- package/dist/cli/util/output.d.ts.map +1 -0
- package/dist/cli/util/output.js +170 -0
- package/dist/cli/util/output.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +12 -4
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import boxen from "boxen";
|
|
2
|
+
import { apiRequest, NotAuthenticatedError, workspaceQuery, } from "../util/api.js";
|
|
3
|
+
import { resolveRepo } from "../util/git.js";
|
|
4
|
+
import { colors, logError, result, runTasks } from "../util/output.js";
|
|
5
|
+
/**
|
|
6
|
+
* `praetom install` — open the install pull request for the current
|
|
7
|
+
* repository. Wires `praetom` into the customer's source: adds the
|
|
8
|
+
* dependency to package.json and creates the framework-specific boot
|
|
9
|
+
* wrapper (instrumentation.ts for Next.js, server-entry edits for
|
|
10
|
+
* Express/Fastify, etc.).
|
|
11
|
+
*
|
|
12
|
+
* Was named `praetom init` until we split that verb out as the
|
|
13
|
+
* orchestrator command. The server endpoint is still /api/cli/install.
|
|
14
|
+
*/
|
|
15
|
+
export async function installCommand(ctx) {
|
|
16
|
+
const repo = await resolveRepo(ctx.repo);
|
|
17
|
+
if (!repo) {
|
|
18
|
+
logError(ctx, "Couldn't determine the repository. Pass --repo owner/name, or run this from inside a git checkout with a GitHub remote.");
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const slug = `${repo.owner}/${repo.name}`;
|
|
22
|
+
// Use a holder so TS keeps the union type across the async closure
|
|
23
|
+
// assignment inside runTasks (otherwise it narrows to `never`).
|
|
24
|
+
const out = { response: null };
|
|
25
|
+
try {
|
|
26
|
+
await runTasks(ctx, [
|
|
27
|
+
{
|
|
28
|
+
title: `Installing praetom into ${slug}`,
|
|
29
|
+
task: async (t) => {
|
|
30
|
+
try {
|
|
31
|
+
out.response = await apiRequest("/api/cli/install", {
|
|
32
|
+
method: "POST",
|
|
33
|
+
body: { owner: repo.owner, name: repo.name },
|
|
34
|
+
query: workspaceQuery(ctx),
|
|
35
|
+
});
|
|
36
|
+
t.setTitle(`Installed praetom into ${slug} ${colors.dim(`(${out.response.framework})`)}`);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
if (e instanceof NotAuthenticatedError) {
|
|
40
|
+
throw new Error(`${e.message} Run \`praetom login\` first.`);
|
|
41
|
+
}
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
const r = out.response;
|
|
52
|
+
if (!r)
|
|
53
|
+
return;
|
|
54
|
+
result(ctx, {
|
|
55
|
+
ok: true,
|
|
56
|
+
repo: slug,
|
|
57
|
+
prUrl: r.prUrl,
|
|
58
|
+
prNumber: r.prNumber,
|
|
59
|
+
branch: r.branch,
|
|
60
|
+
framework: r.framework,
|
|
61
|
+
}, () => {
|
|
62
|
+
const body = [
|
|
63
|
+
colors.bold("Pull request opened"),
|
|
64
|
+
` ${r.prUrl}`,
|
|
65
|
+
``,
|
|
66
|
+
`Framework: ${colors.cyan(r.framework)}`,
|
|
67
|
+
`Branch: ${colors.dim(r.branch)}`,
|
|
68
|
+
``,
|
|
69
|
+
`Next:`,
|
|
70
|
+
` 1. Review + merge the pull request.`,
|
|
71
|
+
` 2. Deploy your service.`,
|
|
72
|
+
` 3. Run ${colors.bold("praetom status")} to watch it go live.`,
|
|
73
|
+
].join("\n");
|
|
74
|
+
process.stdout.write(boxen(body, {
|
|
75
|
+
padding: 1,
|
|
76
|
+
margin: { top: 1, bottom: 1, left: 0, right: 0 },
|
|
77
|
+
borderStyle: "round",
|
|
78
|
+
borderColor: "green",
|
|
79
|
+
}) + "\n");
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { RunContext } from "../util/run.js";
|
|
|
4
4
|
*
|
|
5
5
|
* 1. Asks praetom to start a session (returns short user_code +
|
|
6
6
|
* long device_code + verification URL).
|
|
7
|
-
* 2.
|
|
7
|
+
* 2. Opens the browser to the verification URL.
|
|
8
8
|
* 3. The user signs in on praetom.com (if needed), confirms the
|
|
9
9
|
* user_code matches, clicks Approve.
|
|
10
10
|
* 4. We poll praetom every couple seconds until approved, expired, or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAoBjD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EjE"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { writeAuth, DEFAULT_API_BASE } from "../util/auth-file.js";
|
|
3
|
+
import { colors, logError, result, runTasks } from "../util/output.js";
|
|
3
4
|
/**
|
|
4
5
|
* OAuth-style device-authorization handshake. The CLI:
|
|
5
6
|
*
|
|
6
7
|
* 1. Asks praetom to start a session (returns short user_code +
|
|
7
8
|
* long device_code + verification URL).
|
|
8
|
-
* 2.
|
|
9
|
+
* 2. Opens the browser to the verification URL.
|
|
9
10
|
* 3. The user signs in on praetom.com (if needed), confirms the
|
|
10
11
|
* user_code matches, clicks Approve.
|
|
11
12
|
* 4. We poll praetom every couple seconds until approved, expired, or
|
|
@@ -19,33 +20,60 @@ import { writeAuth, DEFAULT_API_BASE } from "../util/auth-file.js";
|
|
|
19
20
|
*/
|
|
20
21
|
export async function loginCommand(ctx) {
|
|
21
22
|
if (ctx.nonInteractive) {
|
|
22
|
-
|
|
23
|
-
if (ctx.json) {
|
|
24
|
-
process.stdout.write(JSON.stringify({ error: "non_interactive" }) + "\n");
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
process.stderr.write(`${msg}\n`);
|
|
28
|
-
}
|
|
23
|
+
logError(ctx, "praetom login: --non-interactive set; can't open a browser. Set PRAETOM_TOKEN in the environment instead.");
|
|
29
24
|
process.exit(2);
|
|
30
25
|
}
|
|
31
26
|
const apiBase = (process.env["PRAETOM_API_BASE"] ?? DEFAULT_API_BASE).replace(/\/+$/, "");
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
const out = { session: null, token: null, prefix: null };
|
|
28
|
+
try {
|
|
29
|
+
await runTasks(ctx, [
|
|
30
|
+
{
|
|
31
|
+
title: "Requesting device code",
|
|
32
|
+
task: async (t) => {
|
|
33
|
+
const start = await fetchJson(`${apiBase}/api/cli/auth/device-start`, { method: "POST" });
|
|
34
|
+
if (!start.ok) {
|
|
35
|
+
throw new Error(start.error);
|
|
36
|
+
}
|
|
37
|
+
out.session = start.value;
|
|
38
|
+
t.setTitle(`Got device code ${colors.dim(`(code ${out.session.user_code})`)}`);
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
title: "Opening your browser",
|
|
43
|
+
task: (t) => {
|
|
44
|
+
if (!out.session)
|
|
45
|
+
throw new Error("missing session");
|
|
46
|
+
openBrowser(out.session.verification_uri_complete);
|
|
47
|
+
t.setTitle(`Opened ${colors.dim(out.session.verification_uri)} ${colors.dim(`(code ${out.session.user_code})`)}`);
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
title: "Waiting for approval",
|
|
52
|
+
task: async (t) => {
|
|
53
|
+
if (!out.session)
|
|
54
|
+
throw new Error("missing session");
|
|
55
|
+
t.setTitle(`Waiting for approval (${out.session.user_code})`);
|
|
56
|
+
const poll = await pollUntilApproved(out.session, apiBase, t);
|
|
57
|
+
out.token = poll.token;
|
|
58
|
+
out.prefix = poll.prefix;
|
|
59
|
+
t.setTitle(`Approved ${colors.dim(`(token prefix ${poll.prefix}…)`)}`);
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
]);
|
|
37
63
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
process.stdout.write(`\nVisit: ${session.verification_uri}\n` +
|
|
41
|
-
`Code: ${session.user_code}\n\n` +
|
|
42
|
-
`Opening your browser...\n`);
|
|
64
|
+
catch {
|
|
65
|
+
process.exit(1);
|
|
43
66
|
}
|
|
44
|
-
|
|
45
|
-
|
|
67
|
+
if (!out.token || !out.prefix)
|
|
68
|
+
return;
|
|
69
|
+
await writeAuth(out.token, apiBase);
|
|
70
|
+
result(ctx, { signedIn: true, prefix: out.prefix }, () => {
|
|
71
|
+
process.stdout.write(`\n${colors.green("✓")} Signed in. ${colors.dim(`Token (prefix ${out.prefix}…) saved to ~/.config/praetom/auth.json.`)}\n`);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async function pollUntilApproved(session, apiBase, t) {
|
|
46
75
|
const intervalMs = Math.max(1, session.interval) * 1000;
|
|
47
76
|
const deadline = Date.now() + session.expires_in * 1000;
|
|
48
|
-
let lastDot = Date.now();
|
|
49
77
|
while (Date.now() < deadline) {
|
|
50
78
|
await sleep(intervalMs);
|
|
51
79
|
const poll = await fetchJson(`${apiBase}/api/cli/auth/device-poll`, {
|
|
@@ -54,41 +82,24 @@ export async function loginCommand(ctx) {
|
|
|
54
82
|
contentType: "application/json",
|
|
55
83
|
});
|
|
56
84
|
if (!poll.ok) {
|
|
57
|
-
|
|
58
|
-
process.exit(1);
|
|
85
|
+
throw new Error(poll.error);
|
|
59
86
|
}
|
|
60
87
|
const r = poll.value;
|
|
61
88
|
if (r.status === "approved") {
|
|
62
|
-
|
|
63
|
-
if (ctx.json) {
|
|
64
|
-
process.stdout.write(JSON.stringify({ signedIn: true, prefix: r.prefix }) + "\n");
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
process.stdout.write(`\nSigned in. Token (prefix ${r.prefix}…) saved to ~/.config/praetom/auth.json.\n`);
|
|
68
|
-
}
|
|
69
|
-
return;
|
|
89
|
+
return { token: r.token, prefix: r.prefix };
|
|
70
90
|
}
|
|
71
91
|
if (r.status === "expired") {
|
|
72
|
-
|
|
73
|
-
process.exit(1);
|
|
92
|
+
throw new Error("Code expired before approval. Run `praetom login` again.");
|
|
74
93
|
}
|
|
75
94
|
if (r.status === "consumed") {
|
|
76
|
-
|
|
77
|
-
process.exit(1);
|
|
95
|
+
throw new Error("This code was already approved and the token was claimed by another `praetom login`. Run `praetom login` again.");
|
|
78
96
|
}
|
|
79
97
|
if (r.status === "error") {
|
|
80
|
-
|
|
81
|
-
process.exit(1);
|
|
82
|
-
}
|
|
83
|
-
// status === "pending" — print a dot every 5s so the user knows
|
|
84
|
-
// we're still waiting.
|
|
85
|
-
if (!ctx.json && Date.now() - lastDot > 5000) {
|
|
86
|
-
process.stdout.write(".");
|
|
87
|
-
lastDot = Date.now();
|
|
98
|
+
throw new Error(r.error);
|
|
88
99
|
}
|
|
100
|
+
t.setTitle(`Waiting for approval (${session.user_code}) ${colors.dim(`(${secondsLeft(deadline)}s left)`)}`);
|
|
89
101
|
}
|
|
90
|
-
|
|
91
|
-
process.exit(1);
|
|
102
|
+
throw new Error("Timed out waiting for approval. Run `praetom login` again.");
|
|
92
103
|
}
|
|
93
104
|
async function fetchJson(url, init = {}) {
|
|
94
105
|
const headers = {
|
|
@@ -135,4 +146,7 @@ function openBrowser(url) {
|
|
|
135
146
|
function sleep(ms) {
|
|
136
147
|
return new Promise((r) => setTimeout(r, ms));
|
|
137
148
|
}
|
|
149
|
+
function secondsLeft(deadline) {
|
|
150
|
+
return Math.max(0, Math.round((deadline - Date.now()) / 1000));
|
|
151
|
+
}
|
|
138
152
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAelE"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { deleteAuth, authFilePath } from "../util/auth-file.js";
|
|
2
|
+
import { colors, logInfo, logSuccess, result } from "../util/output.js";
|
|
2
3
|
export async function logoutCommand(ctx) {
|
|
3
4
|
const removed = await deleteAuth();
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
5
|
+
const path = authFilePath();
|
|
6
|
+
result(ctx, { removed, path }, () => {
|
|
7
|
+
if (removed) {
|
|
8
|
+
logSuccess(ctx, `Removed ${colors.dim(path)}`);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
logInfo(ctx, `No auth file at ${colors.dim(path)}`);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAe;IACjD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAE5B,MAAM,CACJ,GAAG,EACH,EAAE,OAAO,EAAE,IAAI,EAAE,EACjB,GAAG,EAAE;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,GAAG,EAAE,WAAW,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,EAAE,mBAAmB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/rotate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/rotate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAajD,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+ClE"}
|
|
@@ -1,33 +1,39 @@
|
|
|
1
1
|
import { apiRequest, workspaceQuery } from "../util/api.js";
|
|
2
2
|
import { resolveRepo } from "../util/git.js";
|
|
3
|
+
import { colors, logError, result, runTasks } from "../util/output.js";
|
|
3
4
|
export async function rotateCommand(ctx) {
|
|
4
5
|
const repo = await resolveRepo(ctx.repo);
|
|
5
6
|
if (!repo) {
|
|
6
|
-
|
|
7
|
+
logError(ctx, "Couldn't determine the repository. Pass --repo owner/name, or run this from inside a git checkout with a GitHub remote.");
|
|
8
|
+
process.exit(1);
|
|
7
9
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
const slug = `${repo.owner}/${repo.name}`;
|
|
11
|
+
const out = { response: null };
|
|
12
|
+
try {
|
|
13
|
+
await runTasks(ctx, [
|
|
14
|
+
{
|
|
15
|
+
title: `Rotating ingest token for ${slug}`,
|
|
16
|
+
task: async (t) => {
|
|
17
|
+
out.response = await apiRequest("/api/cli/rotate", {
|
|
18
|
+
method: "POST",
|
|
19
|
+
body: { owner: repo.owner, name: repo.name },
|
|
20
|
+
query: workspaceQuery(ctx),
|
|
21
|
+
});
|
|
22
|
+
t.setTitle(`Rotated ingest token for ${slug} ${colors.dim(`(${out.response.filesCommitted} file${out.response.filesCommitted === 1 ? "" : "s"} updated)`)}`);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
10
26
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
body: { owner: repo.owner, name: repo.name },
|
|
14
|
-
query: workspaceQuery(ctx),
|
|
15
|
-
});
|
|
16
|
-
if (ctx.json) {
|
|
17
|
-
process.stdout.write(JSON.stringify({ repo: `${repo.owner}/${repo.name}`, ...result }) + "\n");
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
process.stdout.write(`\nIngest token rotated. ${result.filesCommitted} file(s) updated.\n` +
|
|
21
|
-
`Pull request opened: ${result.prUrl}\n\n` +
|
|
22
|
-
`Merge and deploy to swap the token live. \`praetom status\` will reflect it.\n`);
|
|
23
|
-
}
|
|
24
|
-
function fail(ctx, message) {
|
|
25
|
-
if (ctx.json) {
|
|
26
|
-
process.stdout.write(JSON.stringify({ ok: false, error: message }) + "\n");
|
|
27
|
+
catch {
|
|
28
|
+
process.exit(1);
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
const r = out.response;
|
|
31
|
+
if (!r)
|
|
32
|
+
return;
|
|
33
|
+
result(ctx, { repo: slug, ...r }, () => {
|
|
34
|
+
process.stdout.write(`\n${colors.green("✓")} Ingest token rotated. ${colors.dim(`${r.filesCommitted} file(s) updated.`)}\n` +
|
|
35
|
+
`${colors.dim("Pull request:")} ${r.prUrl}\n\n` +
|
|
36
|
+
`${colors.dim("Merge and deploy to swap the token live. `praetom status` will reflect it.")}\n`);
|
|
37
|
+
});
|
|
32
38
|
}
|
|
33
39
|
//# sourceMappingURL=rotate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../../src/cli/commands/rotate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../../src/cli/commands/rotate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAUvE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAe;IACjD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,QAAQ,CACN,GAAG,EACH,yHAAyH,CAC1H,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAEpE,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,GAAG,EAAE;YAClB;gBACE,KAAK,EAAE,6BAA6B,IAAI,EAAE;gBAC1C,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAChB,GAAG,CAAC,QAAQ,GAAG,MAAM,UAAU,CAAiB,iBAAiB,EAAE;wBACjE,MAAM,EAAE,MAAM;wBACd,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;wBAC5C,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC;qBAC3B,CAAC,CAAC;oBACH,CAAC,CAAC,QAAQ,CACR,4BAA4B,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,QAAQ,GAAG,CAAC,QAAQ,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE,CAClJ,CAAC;gBACJ,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;IACvB,IAAI,CAAC,CAAC;QAAE,OAAO;IAEf,MAAM,CACJ,GAAG,EACH,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EACpB,GAAG,EAAE;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc,mBAAmB,CAAC,IAAI;YACpG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM;YAC/C,GAAG,MAAM,CAAC,GAAG,CAAC,4EAA4E,CAAC,IAAI,CAClG,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA0BjD,wBAAsB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { apiRequest, workspaceQuery } from "../util/api.js";
|
|
2
2
|
import { resolveRepo } from "../util/git.js";
|
|
3
|
+
import { colors, logInfo, result } from "../util/output.js";
|
|
3
4
|
export async function statusCommand(ctx) {
|
|
4
5
|
const repo = await resolveRepo(ctx.repo);
|
|
5
6
|
const query = {
|
|
@@ -8,19 +9,44 @@ export async function statusCommand(ctx) {
|
|
|
8
9
|
if (repo)
|
|
9
10
|
query.repo = `${repo.owner}/${repo.name}`;
|
|
10
11
|
const res = await apiRequest("/api/cli/installs", { query });
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
result(ctx, res, () => {
|
|
13
|
+
if (res.installs.length === 0) {
|
|
14
|
+
const scope = repo ? `${repo.owner}/${repo.name}` : res.workspaceSlug;
|
|
15
|
+
logInfo(ctx, `No installs recorded for ${colors.dim(scope)}.`);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
for (const row of res.installs) {
|
|
19
|
+
const dot = statusDot(row.status);
|
|
20
|
+
const word = statusWord(row.status);
|
|
21
|
+
process.stdout.write(`${dot} ${colors.bold(`${row.owner}/${row.name}`)} ${word} ${colors.dim(`PR #${row.prNumber}`)} ${colors.cyan(row.framework)}\n` +
|
|
22
|
+
` ${colors.dim(row.prUrl)}\n` +
|
|
23
|
+
` ${colors.dim(describeTimeline(row))}\n\n`);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function statusDot(status) {
|
|
28
|
+
switch (status) {
|
|
29
|
+
case "live":
|
|
30
|
+
return colors.green("●");
|
|
31
|
+
case "registered":
|
|
32
|
+
return colors.blue("●");
|
|
33
|
+
case "install_pending":
|
|
34
|
+
return colors.yellow("●");
|
|
35
|
+
case "stalled":
|
|
36
|
+
return colors.red("●");
|
|
19
37
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
}
|
|
39
|
+
function statusWord(status) {
|
|
40
|
+
const padded = pad(status, 16);
|
|
41
|
+
switch (status) {
|
|
42
|
+
case "live":
|
|
43
|
+
return colors.green(padded);
|
|
44
|
+
case "registered":
|
|
45
|
+
return colors.blue(padded);
|
|
46
|
+
case "install_pending":
|
|
47
|
+
return colors.yellow(padded);
|
|
48
|
+
case "stalled":
|
|
49
|
+
return colors.red(padded);
|
|
24
50
|
}
|
|
25
51
|
}
|
|
26
52
|
function describeTimeline(row) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAuB5D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAe;IACjD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,KAAK,GAAuC;QAChD,GAAG,cAAc,CAAC,GAAG,CAAC;KACvB,CAAC;IACF,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAmB,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/E,MAAM,CACJ,GAAG,EACH,GAAyC,EACzC,GAAG,EAAE;QACH,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;YACtE,OAAO,CAAC,GAAG,EAAE,4BAA4B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;gBACjI,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;gBAC9B,KAAK,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,CAC/C,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAqB;IACtC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,KAAK,iBAAiB;YACpB,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAqB;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,iBAAiB;YACpB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAe;IACvC,MAAM,KAAK,GAAa,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,GAAG,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,GAAG,CAAC,gBAAgB;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC5E,IAAI,GAAG,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACnE,IAAI,GAAG,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,GAAG,CAAC,GAAkB;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS;IAC/B,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAoBjD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FrE"}
|