alpic 0.0.0-dev.f1a6945 → 0.0.0-dev.f1f9e99
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/README.md +40 -0
- package/bin/run.js +5 -0
- package/dist/__tests__/audit.e2e.test.d.ts +1 -0
- package/dist/__tests__/audit.e2e.test.js +562 -0
- package/dist/__tests__/audit.e2e.test.js.map +1 -0
- package/dist/__tests__/auth.e2e.test.js +38 -18
- package/dist/__tests__/auth.e2e.test.js.map +1 -1
- package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
- package/dist/__tests__/deploy-flags.e2e.test.js +228 -0
- package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
- package/dist/__tests__/deploy.e2e.test.js +34 -66
- package/dist/__tests__/deploy.e2e.test.js.map +1 -1
- package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
- package/dist/__tests__/deployment-inspect.e2e.test.js +119 -0
- package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
- package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
- package/dist/__tests__/deployment-list.e2e.test.js +121 -0
- package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
- package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
- package/dist/__tests__/deployment-logs.e2e.test.js +260 -0
- package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
- package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
- package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +264 -0
- package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
- package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
- package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +144 -0
- package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
- package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
- package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +155 -0
- package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
- package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
- package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +347 -0
- package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
- package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
- package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
- package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
- package/dist/__tests__/fixtures/demo-project/index.js +1 -1
- package/dist/__tests__/fixtures/demo-project/index.js.map +1 -1
- package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
- package/dist/__tests__/git-flags.e2e.test.js +129 -0
- package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
- package/dist/__tests__/git.e2e.test.js +25 -17
- package/dist/__tests__/git.e2e.test.js.map +1 -1
- package/dist/__tests__/link.e2e.test.d.ts +1 -0
- package/dist/__tests__/link.e2e.test.js +284 -0
- package/dist/__tests__/link.e2e.test.js.map +1 -0
- package/dist/__tests__/logs.e2e.test.d.ts +1 -0
- package/dist/__tests__/logs.e2e.test.js +231 -0
- package/dist/__tests__/logs.e2e.test.js.map +1 -0
- package/dist/__tests__/mock-server.d.ts +23 -0
- package/dist/__tests__/mock-server.js +330 -21
- package/dist/__tests__/mock-server.js.map +1 -1
- package/dist/__tests__/publish.e2e.test.d.ts +1 -0
- package/dist/__tests__/publish.e2e.test.js +510 -0
- package/dist/__tests__/publish.e2e.test.js.map +1 -0
- package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
- package/dist/__tests__/tunnel.e2e.test.js +66 -0
- package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
- package/dist/__tests__/utils.d.ts +17 -5
- package/dist/__tests__/utils.js +118 -24
- package/dist/__tests__/utils.js.map +1 -1
- package/dist/api.d.ts +1 -1
- package/dist/api.js +10 -3
- package/dist/api.js.map +1 -1
- package/dist/commands/audit.d.ts +14 -0
- package/dist/commands/audit.js +49 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/deploy.d.ts +8 -2
- package/dist/commands/deploy.js +64 -25
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/deployment/inspect.d.ts +11 -0
- package/dist/commands/deployment/inspect.js +91 -0
- package/dist/commands/deployment/inspect.js.map +1 -0
- package/dist/commands/deployment/list.d.ts +11 -0
- package/dist/commands/deployment/list.js +97 -0
- package/dist/commands/deployment/list.js.map +1 -0
- package/dist/commands/deployment/logs.d.ts +12 -0
- package/dist/commands/deployment/logs.js +50 -0
- package/dist/commands/deployment/logs.js.map +1 -0
- package/dist/commands/environment-variable/add.d.ts +14 -0
- package/dist/commands/environment-variable/add.js +47 -0
- package/dist/commands/environment-variable/add.js.map +1 -0
- package/dist/commands/environment-variable/list.d.ts +9 -0
- package/dist/commands/environment-variable/list.js +45 -0
- package/dist/commands/environment-variable/list.js.map +1 -0
- package/dist/commands/environment-variable/remove.d.ts +11 -0
- package/dist/commands/environment-variable/remove.js +33 -0
- package/dist/commands/environment-variable/remove.js.map +1 -0
- package/dist/commands/environment-variable/update.d.ts +13 -0
- package/dist/commands/environment-variable/update.js +41 -0
- package/dist/commands/environment-variable/update.js.map +1 -0
- package/dist/commands/git/connect.d.ts +3 -2
- package/dist/commands/git/connect.js +29 -28
- package/dist/commands/git/connect.js.map +1 -1
- package/dist/commands/git/disconnect.d.ts +2 -2
- package/dist/commands/git/disconnect.js +20 -26
- package/dist/commands/git/disconnect.js.map +1 -1
- package/dist/commands/git.js +2 -2
- package/dist/commands/git.js.map +1 -1
- package/dist/commands/link.d.ts +17 -0
- package/dist/commands/link.js +101 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.js +4 -22
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logs.d.ts +16 -0
- package/dist/commands/logs.js +96 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/publish.d.ts +15 -0
- package/dist/commands/publish.js +51 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/tunnel.d.ts +10 -0
- package/dist/commands/tunnel.js +132 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/commands/whoami.js +2 -14
- package/dist/commands/whoami.js.map +1 -1
- package/dist/lib/alpic-command.d.ts +2 -0
- package/dist/lib/alpic-command.js +13 -5
- package/dist/lib/alpic-command.js.map +1 -1
- package/dist/lib/archive.d.ts +3 -3
- package/dist/lib/archive.js +21 -19
- package/dist/lib/archive.js.map +1 -1
- package/dist/lib/audit.d.ts +16 -0
- package/dist/lib/audit.js +245 -0
- package/dist/lib/audit.js.map +1 -0
- package/dist/lib/auth/auth.d.ts +3 -0
- package/dist/lib/auth/auth.js +23 -0
- package/dist/lib/auth/auth.js.map +1 -1
- package/dist/lib/auth/oauth/server/index.d.ts +2 -1
- package/dist/lib/auth/oauth/server/index.js +33 -7
- package/dist/lib/auth/oauth/server/index.js.map +1 -1
- package/dist/lib/auth/whoami.d.ts +1 -28
- package/dist/lib/auth/whoami.js +27 -17
- package/dist/lib/auth/whoami.js.map +1 -1
- package/dist/lib/base-workflow.d.ts +10 -0
- package/dist/lib/base-workflow.js +22 -0
- package/dist/lib/base-workflow.js.map +1 -0
- package/dist/lib/config.d.ts +3 -2
- package/dist/lib/config.js +8 -7
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/deployment.d.ts +69 -1
- package/dist/lib/deployment.js +113 -5
- package/dist/lib/deployment.js.map +1 -1
- package/dist/lib/environment-variable.d.ts +37 -0
- package/dist/lib/environment-variable.js +299 -0
- package/dist/lib/environment-variable.js.map +1 -0
- package/dist/lib/git.d.ts +12 -4
- package/dist/lib/git.js +52 -26
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/global-store.d.ts +1 -1
- package/dist/lib/global-store.js +4 -3
- package/dist/lib/global-store.js.map +1 -1
- package/dist/lib/link.d.ts +83 -0
- package/dist/lib/link.js +387 -0
- package/dist/lib/link.js.map +1 -0
- package/dist/lib/logs.d.ts +20 -0
- package/dist/lib/logs.js +87 -0
- package/dist/lib/logs.js.map +1 -0
- package/dist/lib/publish.d.ts +22 -0
- package/dist/lib/publish.js +185 -0
- package/dist/lib/publish.js.map +1 -0
- package/dist/lib/resolve.d.ts +6 -0
- package/dist/lib/resolve.js +26 -0
- package/dist/lib/resolve.js.map +1 -0
- package/dist/lib/table.d.ts +8 -0
- package/dist/lib/table.js +27 -0
- package/dist/lib/table.js.map +1 -0
- package/dist/lib/telemetry.js +1 -1
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +53 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/utils.test.d.ts +1 -0
- package/dist/lib/utils.test.js +27 -0
- package/dist/lib/utils.test.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/package.json +27 -20
- package/dist/lib/project.d.ts +0 -67
- package/dist/lib/project.js +0 -285
- package/dist/lib/project.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,EAAE,YAAY,CAAC;IAEnG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,wBAAwB,GAAG,SAAS,EAAE,CAAC;IAC7C,IAAI,wBAAwB;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,uBAAuB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5D,IAAI,uBAAuB;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,OAAO,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,KAAK,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA4B;IAC3D,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,EAAE,CAAC;IAE5F,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8EAA8E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC;QAC9C,KAAK;QACL,KAAK;QACL,YAAY;QACZ,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC;IAEH,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Credentials } from "../../../global-store.js";
|
|
2
2
|
export declare const getLoginPageUrl: () => string;
|
|
3
|
-
export declare const listenToOAuthCallback: ({ state, nonce, codeVerifier, authorizeUrl, }: {
|
|
3
|
+
export declare const listenToOAuthCallback: ({ state, nonce, codeVerifier, authorizeUrl, isPlain, }: {
|
|
4
4
|
state: string;
|
|
5
5
|
nonce: string;
|
|
6
6
|
codeVerifier: string;
|
|
7
7
|
authorizeUrl?: string;
|
|
8
|
+
isPlain?: boolean;
|
|
8
9
|
}) => Promise<Credentials>;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import * as p from "@clack/prompts";
|
|
2
1
|
import { readFile } from "node:fs/promises";
|
|
3
2
|
import { createServer } from "node:http";
|
|
4
3
|
import path from "node:path";
|
|
5
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
+
import * as p from "@clack/prompts";
|
|
6
6
|
import { oAuthClient } from "../client.js";
|
|
7
7
|
import { LOOPBACK_HOST, LOOPBACK_PORT } from "../constants.js";
|
|
8
8
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
9
|
const ASSETS_DIR = path.join(__dirname, "assets");
|
|
10
|
-
const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSuccess, onError, }) => createServer(async (req, res) => {
|
|
10
|
+
const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSuccess, onError, isPlain, }) => createServer(async (req, res) => {
|
|
11
11
|
const url = req.url ?? "/";
|
|
12
12
|
const pathname = url.split("?")[0] ?? "/";
|
|
13
13
|
if (pathname === "/login") {
|
|
@@ -17,12 +17,16 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
|
|
|
17
17
|
if (authorizeUrl) {
|
|
18
18
|
html = html.replace(/%AUTH_BASE_URL%/g, authorizeUrl);
|
|
19
19
|
}
|
|
20
|
-
res.writeHead(200, {
|
|
20
|
+
res.writeHead(200, {
|
|
21
|
+
"Content-Type": "text/html",
|
|
22
|
+
Connection: "close",
|
|
23
|
+
});
|
|
21
24
|
res.end(html);
|
|
22
25
|
return;
|
|
23
26
|
}
|
|
24
27
|
catch (e) {
|
|
25
|
-
|
|
28
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
29
|
+
isPlain ? console.error(msg) : p.log.error(msg);
|
|
26
30
|
res.writeHead(500).end();
|
|
27
31
|
return;
|
|
28
32
|
}
|
|
@@ -55,7 +59,8 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
|
|
|
55
59
|
expires_at: oAuthClient.getExpiresAt(tokens.expires_in ?? 0),
|
|
56
60
|
sub,
|
|
57
61
|
};
|
|
58
|
-
|
|
62
|
+
const msg = "Authentication successful";
|
|
63
|
+
isPlain ? console.log(msg) : p.log.success(`✅ ${msg}`);
|
|
59
64
|
const successHtmlPath = path.join(ASSETS_DIR, "callback.html");
|
|
60
65
|
let html = await readFile(successHtmlPath, "utf-8");
|
|
61
66
|
html = html
|
|
@@ -67,7 +72,8 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
|
|
|
67
72
|
onSuccess(stored);
|
|
68
73
|
}
|
|
69
74
|
catch (e) {
|
|
70
|
-
|
|
75
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
76
|
+
isPlain ? console.error(msg) : p.log.error(msg);
|
|
71
77
|
const callbackHtmlPath = path.join(ASSETS_DIR, "callback.html");
|
|
72
78
|
let html = await readFile(callbackHtmlPath, "utf-8");
|
|
73
79
|
html = html
|
|
@@ -80,22 +86,42 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
|
|
|
80
86
|
}
|
|
81
87
|
});
|
|
82
88
|
export const getLoginPageUrl = () => `http://${LOOPBACK_HOST}:${LOOPBACK_PORT}/login`;
|
|
83
|
-
|
|
89
|
+
const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
|
|
90
|
+
export const listenToOAuthCallback = ({ state, nonce, codeVerifier, authorizeUrl, isPlain, }) => {
|
|
84
91
|
return new Promise((resolve, reject) => {
|
|
92
|
+
let timeoutHandle;
|
|
85
93
|
const callbackServer = createCallbackServer({
|
|
86
94
|
state,
|
|
87
95
|
nonce,
|
|
88
96
|
codeVerifier,
|
|
89
97
|
authorizeUrl,
|
|
98
|
+
isPlain,
|
|
90
99
|
onSuccess: (storedToken) => {
|
|
100
|
+
clearTimeout(timeoutHandle);
|
|
91
101
|
callbackServer.close();
|
|
92
102
|
resolve(storedToken);
|
|
93
103
|
},
|
|
94
104
|
onError: (err) => {
|
|
105
|
+
clearTimeout(timeoutHandle);
|
|
95
106
|
callbackServer.close();
|
|
96
107
|
reject(err);
|
|
97
108
|
},
|
|
98
109
|
});
|
|
110
|
+
callbackServer.on("error", (err) => {
|
|
111
|
+
clearTimeout(timeoutHandle);
|
|
112
|
+
callbackServer.close();
|
|
113
|
+
if (err.code === "EADDRINUSE") {
|
|
114
|
+
reject(new Error(`Port ${LOOPBACK_PORT} is already in use. Another login may be in progress. Please try again.`));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
reject(err);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
timeoutHandle = setTimeout(() => {
|
|
121
|
+
callbackServer.close();
|
|
122
|
+
reject(new Error("Login timed out after 5 minutes. Please try again."));
|
|
123
|
+
}, LOGIN_TIMEOUT_MS);
|
|
124
|
+
timeoutHandle.unref();
|
|
99
125
|
callbackServer.listen(LOOPBACK_PORT, LOOPBACK_HOST);
|
|
100
126
|
});
|
|
101
127
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/auth/oauth/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/auth/oauth/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
method: "api_key";
|
|
3
|
-
team: {
|
|
4
|
-
id: string;
|
|
5
|
-
name: string;
|
|
6
|
-
};
|
|
7
|
-
} | {
|
|
8
|
-
method: "oauth";
|
|
9
|
-
email: string;
|
|
10
|
-
name: string;
|
|
11
|
-
} | null;
|
|
12
|
-
export declare function getWhoamiInfo(): Promise<{
|
|
13
|
-
method: string;
|
|
14
|
-
team: {
|
|
15
|
-
id: string;
|
|
16
|
-
name: string;
|
|
17
|
-
createdAt: Date;
|
|
18
|
-
hasStripeAccount: boolean;
|
|
19
|
-
hasActiveSubscription: boolean;
|
|
20
|
-
} | undefined;
|
|
21
|
-
email?: undefined;
|
|
22
|
-
name?: undefined;
|
|
23
|
-
} | {
|
|
24
|
-
method: string;
|
|
25
|
-
email: string | undefined;
|
|
26
|
-
name: string | undefined;
|
|
27
|
-
team?: undefined;
|
|
28
|
-
} | null>;
|
|
1
|
+
export declare function getWhoamiInfoMessage(): Promise<string>;
|
package/dist/lib/auth/whoami.js
CHANGED
|
@@ -1,33 +1,43 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
1
2
|
import { api } from "../../api.js";
|
|
2
3
|
import { oAuthClient } from "./oauth/client.js";
|
|
3
|
-
export async function
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return
|
|
7
|
-
method: "api_key",
|
|
8
|
-
team,
|
|
9
|
-
};
|
|
4
|
+
export async function getWhoamiInfoMessage() {
|
|
5
|
+
const info = (await getWhoamiInfoFromApiKey()) ?? (await getWhoamiInfoFromOAuth());
|
|
6
|
+
if (info === null) {
|
|
7
|
+
return "Not logged in. Run `alpic login` or set ALPIC_API_KEY.";
|
|
10
8
|
}
|
|
9
|
+
if (info.method === "api_key") {
|
|
10
|
+
return `Authenticated via API key — Team: ${chalk.green(info.team?.name ?? "unknown")}`;
|
|
11
|
+
}
|
|
12
|
+
let label = chalk.cyan(info.email);
|
|
13
|
+
if (info.name) {
|
|
14
|
+
label = `${chalk.green(info.name)} (${label})`;
|
|
15
|
+
}
|
|
16
|
+
return `Authenticated as ${label}`;
|
|
17
|
+
}
|
|
18
|
+
async function getWhoamiInfoFromApiKey() {
|
|
19
|
+
if (process.env.ALPIC_API_KEY === undefined) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const team = await getApiKeyTeam();
|
|
23
|
+
return {
|
|
24
|
+
method: "api_key",
|
|
25
|
+
team,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function getWhoamiInfoFromOAuth() {
|
|
11
29
|
const token = await oAuthClient.getValidAccessToken();
|
|
12
30
|
if (!token)
|
|
13
31
|
return null;
|
|
14
|
-
const userInfo = await
|
|
32
|
+
const userInfo = await oAuthClient.fetchUserInfo(token);
|
|
15
33
|
if (!userInfo)
|
|
16
34
|
return null;
|
|
17
35
|
return {
|
|
18
36
|
method: "oauth",
|
|
19
|
-
email: userInfo.email,
|
|
37
|
+
email: userInfo.email ?? "unknown",
|
|
20
38
|
name: userInfo.name,
|
|
21
39
|
};
|
|
22
40
|
}
|
|
23
|
-
async function fetchOAuthUserInfo(credentials) {
|
|
24
|
-
try {
|
|
25
|
-
return await oAuthClient.fetchUserInfo(credentials);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
41
|
async function getApiKeyTeam() {
|
|
32
42
|
const teams = await api.teams.list.v1();
|
|
33
43
|
return teams[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/lib/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/lib/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAahD,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,IAAI,GAAG,CAAC,MAAM,uBAAuB,EAAE,CAAC,IAAI,CAAC,MAAM,sBAAsB,EAAE,CAAC,CAAC;IAEnF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,wDAAwD,CAAC;IAClE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,qCAAqC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC;IACjD,CAAC;IAED,OAAO,oBAAoB,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,SAAS;QAClC,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
export type Flags = {
|
|
3
|
+
"non-interactive"?: boolean;
|
|
4
|
+
};
|
|
5
|
+
export declare abstract class BaseWorkflow<F extends Flags = Flags> {
|
|
6
|
+
readonly flags: F;
|
|
7
|
+
constructor(flags: F);
|
|
8
|
+
protected confirm(options: p.ConfirmOptions, defaultValue?: boolean): Promise<boolean | symbol>;
|
|
9
|
+
protected isNonInteractive(): boolean;
|
|
10
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import * as ci from "ci-info";
|
|
3
|
+
export class BaseWorkflow {
|
|
4
|
+
flags;
|
|
5
|
+
constructor(flags) {
|
|
6
|
+
this.flags = flags;
|
|
7
|
+
}
|
|
8
|
+
confirm(options, defaultValue = true) {
|
|
9
|
+
if (this.isNonInteractive()) {
|
|
10
|
+
return Promise.resolve(defaultValue);
|
|
11
|
+
}
|
|
12
|
+
return p.confirm(options);
|
|
13
|
+
}
|
|
14
|
+
isNonInteractive() {
|
|
15
|
+
if (this.flags["non-interactive"])
|
|
16
|
+
return true;
|
|
17
|
+
if (process.env.VITEST)
|
|
18
|
+
return false;
|
|
19
|
+
return ci.isCI ?? false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=base-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-workflow.js","sourceRoot":"","sources":["../../src/lib/base-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAM9B,MAAM,OAAgB,YAAY;IACJ;IAA5B,YAA4B,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAE9B,OAAO,CAAC,OAAyB,EAAE,eAAwB,IAAI;QACvE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAES,gBAAgB;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAErC,OAAO,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;IAC1B,CAAC;CACF"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { ProjectConfig } from "../types.js";
|
|
2
2
|
export declare const config: {
|
|
3
|
-
load: (
|
|
3
|
+
load: () => {
|
|
4
4
|
projectId: string;
|
|
5
5
|
teamId: string;
|
|
6
|
+
teamName: string | undefined;
|
|
6
7
|
projectName: string;
|
|
7
8
|
environmentId: string | undefined;
|
|
8
9
|
environmentName: string | undefined;
|
|
9
10
|
} | null;
|
|
10
|
-
save: (
|
|
11
|
+
save: (projectConfig: ProjectConfig) => void;
|
|
11
12
|
};
|
package/dist/lib/config.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
const getProjectJsonPath = (
|
|
3
|
+
const getProjectJsonPath = () => join(process.cwd(), ".alpic", "project.json");
|
|
4
4
|
export const config = {
|
|
5
|
-
load: (
|
|
6
|
-
const path = getProjectJsonPath(
|
|
5
|
+
load: () => {
|
|
6
|
+
const path = getProjectJsonPath();
|
|
7
7
|
if (!existsSync(path)) {
|
|
8
8
|
return null;
|
|
9
9
|
}
|
|
@@ -17,15 +17,16 @@ export const config = {
|
|
|
17
17
|
return {
|
|
18
18
|
projectId: raw.projectId,
|
|
19
19
|
teamId: raw.teamId,
|
|
20
|
+
teamName: raw.teamName,
|
|
20
21
|
projectName: raw.projectName ?? raw.projectId,
|
|
21
22
|
environmentId: raw.environmentId,
|
|
22
23
|
environmentName: raw.environmentName,
|
|
23
24
|
};
|
|
24
25
|
},
|
|
25
|
-
save: (
|
|
26
|
-
const path = getProjectJsonPath(
|
|
27
|
-
mkdirSync(join(
|
|
28
|
-
writeFileSync(path, JSON.stringify(
|
|
26
|
+
save: (projectConfig) => {
|
|
27
|
+
const path = getProjectJsonPath();
|
|
28
|
+
mkdirSync(join(process.cwd(), ".alpic"), { recursive: true });
|
|
29
|
+
writeFileSync(path, JSON.stringify(projectConfig, null, 2));
|
|
29
30
|
},
|
|
30
31
|
};
|
|
31
32
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,GAAG,EAAE;QACT,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAmE,CAAC;QACxE,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAG1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,aAA4B,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF,CAAC"}
|
package/dist/lib/deployment.d.ts
CHANGED
|
@@ -1,12 +1,76 @@
|
|
|
1
1
|
import type { RouterOutput } from "@alpic-ai/api";
|
|
2
|
+
export declare const colorizeDeploymentStatus: (text: string) => import("chalk").ChalkInstance | ((value: string) => string);
|
|
2
3
|
export declare function formatElapsed(ms: number): string;
|
|
4
|
+
export declare function calculateDeploymentDuration(deployment: {
|
|
5
|
+
startedAt?: Date | null;
|
|
6
|
+
completedAt?: Date | null;
|
|
7
|
+
}): number | null;
|
|
8
|
+
export declare function fetchDeployment(deploymentId: string): Promise<{
|
|
9
|
+
id: string;
|
|
10
|
+
status: "failed" | "ongoing" | "deployed" | "canceled";
|
|
11
|
+
sourceRef: string | null;
|
|
12
|
+
sourceCommitId: string | null;
|
|
13
|
+
sourceCommitMessage: string | null;
|
|
14
|
+
authorUsername: string | null;
|
|
15
|
+
authorAvatarUrl: string | null;
|
|
16
|
+
startedAt: Date | null;
|
|
17
|
+
completedAt: Date | null;
|
|
18
|
+
environmentId: string;
|
|
19
|
+
environmentName: string;
|
|
20
|
+
isCurrent: boolean;
|
|
21
|
+
deploymentPageUrl: string | null;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function fetchLatestDeploymentForEnvironment(environmentId: string): Promise<{
|
|
24
|
+
id: string;
|
|
25
|
+
status: "failed" | "ongoing" | "deployed" | "canceled";
|
|
26
|
+
sourceRef: string | null;
|
|
27
|
+
sourceCommitId: string | null;
|
|
28
|
+
sourceCommitMessage: string | null;
|
|
29
|
+
authorUsername: string | null;
|
|
30
|
+
authorAvatarUrl: string | null;
|
|
31
|
+
startedAt: Date | null;
|
|
32
|
+
completedAt: Date | null;
|
|
33
|
+
environmentId: string;
|
|
34
|
+
environmentName: string;
|
|
35
|
+
isCurrent: boolean;
|
|
36
|
+
deploymentPageUrl: string | null;
|
|
37
|
+
}>;
|
|
38
|
+
export declare function resolveDeploymentId(flags: {
|
|
39
|
+
"deployment-id"?: string;
|
|
40
|
+
"environment-id"?: string;
|
|
41
|
+
}): Promise<string>;
|
|
42
|
+
export declare function waitForDeployment(deployment: RouterOutput["deployments"]["get"]["v1"]): Promise<{
|
|
43
|
+
id: string;
|
|
44
|
+
status: "failed" | "ongoing" | "deployed" | "canceled";
|
|
45
|
+
sourceRef: string | null;
|
|
46
|
+
sourceCommitId: string | null;
|
|
47
|
+
sourceCommitMessage: string | null;
|
|
48
|
+
authorUsername: string | null;
|
|
49
|
+
authorAvatarUrl: string | null;
|
|
50
|
+
startedAt: Date | null;
|
|
51
|
+
completedAt: Date | null;
|
|
52
|
+
environmentId: string;
|
|
53
|
+
environmentName: string;
|
|
54
|
+
isCurrent: boolean;
|
|
55
|
+
deploymentPageUrl: string | null;
|
|
56
|
+
}>;
|
|
57
|
+
type DeploymentLogEntry = {
|
|
58
|
+
timestamp?: Date;
|
|
59
|
+
content?: string;
|
|
60
|
+
};
|
|
61
|
+
export declare function printDeploymentLog(log: DeploymentLogEntry, { noColor }?: {
|
|
62
|
+
noColor?: boolean;
|
|
63
|
+
}): void;
|
|
64
|
+
export declare function followDeploymentLogs(deploymentId: string, initialLogs: DeploymentLogEntry[], { noColor }?: {
|
|
65
|
+
noColor?: boolean;
|
|
66
|
+
}): Promise<void>;
|
|
3
67
|
export declare function deployAndWait({ initial, startedAt, }: {
|
|
4
68
|
initial: RouterOutput["deployments"]["get"]["v1"];
|
|
5
69
|
startedAt: number;
|
|
6
70
|
}): Promise<{
|
|
7
71
|
deployment: {
|
|
8
72
|
id: string;
|
|
9
|
-
status: "
|
|
73
|
+
status: "failed" | "ongoing" | "deployed" | "canceled";
|
|
10
74
|
sourceRef: string | null;
|
|
11
75
|
sourceCommitId: string | null;
|
|
12
76
|
sourceCommitMessage: string | null;
|
|
@@ -14,7 +78,11 @@ export declare function deployAndWait({ initial, startedAt, }: {
|
|
|
14
78
|
authorAvatarUrl: string | null;
|
|
15
79
|
startedAt: Date | null;
|
|
16
80
|
completedAt: Date | null;
|
|
81
|
+
environmentId: string;
|
|
82
|
+
environmentName: string;
|
|
83
|
+
isCurrent: boolean;
|
|
17
84
|
deploymentPageUrl: string | null;
|
|
18
85
|
};
|
|
19
86
|
elapsedMs: number;
|
|
20
87
|
}>;
|
|
88
|
+
export {};
|
package/dist/lib/deployment.js
CHANGED
|
@@ -1,22 +1,128 @@
|
|
|
1
|
+
import { stripVTControlCharacters } from "node:util";
|
|
1
2
|
import * as p from "@clack/prompts";
|
|
2
3
|
import chalk from "chalk";
|
|
3
4
|
import { api } from "../api.js";
|
|
4
|
-
import {
|
|
5
|
+
import { formatLogTimestamp } from "./logs.js";
|
|
6
|
+
import { resolveEnvironmentId } from "./resolve.js";
|
|
7
|
+
import { pollIntervalMs } from "./utils.js";
|
|
8
|
+
export const colorizeDeploymentStatus = (text) => {
|
|
9
|
+
switch (text) {
|
|
10
|
+
case "deployed":
|
|
11
|
+
return chalk.green;
|
|
12
|
+
case "ongoing":
|
|
13
|
+
return chalk.yellow;
|
|
14
|
+
case "failed":
|
|
15
|
+
return chalk.red;
|
|
16
|
+
case "canceled":
|
|
17
|
+
return chalk.gray;
|
|
18
|
+
default:
|
|
19
|
+
return (value) => value;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const FINAL_STATUSES = new Set(["deployed", "failed", "canceled"]);
|
|
23
|
+
const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000;
|
|
5
24
|
export function formatElapsed(ms) {
|
|
6
25
|
const totalSeconds = Math.floor(ms / 1000);
|
|
7
26
|
const minutes = Math.floor(totalSeconds / 60);
|
|
8
27
|
const seconds = totalSeconds % 60;
|
|
9
28
|
return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
|
|
10
29
|
}
|
|
30
|
+
export function calculateDeploymentDuration(deployment) {
|
|
31
|
+
if (!deployment.startedAt || !deployment.completedAt) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return deployment.completedAt.getTime() - deployment.startedAt.getTime();
|
|
35
|
+
}
|
|
36
|
+
export async function fetchDeployment(deploymentId) {
|
|
37
|
+
const spinner = p.spinner();
|
|
38
|
+
spinner.start("Fetching deployment...");
|
|
39
|
+
const deployment = await api.deployments.get.v1({ deploymentId });
|
|
40
|
+
spinner.stop("Deployment found");
|
|
41
|
+
return deployment;
|
|
42
|
+
}
|
|
43
|
+
export async function fetchLatestDeploymentForEnvironment(environmentId) {
|
|
44
|
+
const spinner = p.spinner();
|
|
45
|
+
spinner.start("Fetching latest deployment...");
|
|
46
|
+
const environment = await api.environments.get.v1({ environmentId });
|
|
47
|
+
const deployments = await api.deployments.list.v1({
|
|
48
|
+
projectId: environment.projectId,
|
|
49
|
+
environmentId,
|
|
50
|
+
});
|
|
51
|
+
const latest = deployments[0];
|
|
52
|
+
if (!latest) {
|
|
53
|
+
spinner.stop("No deployments found");
|
|
54
|
+
throw new Error(`No deployments found for environment ${environmentId}.`);
|
|
55
|
+
}
|
|
56
|
+
spinner.stop("Deployment found");
|
|
57
|
+
return latest;
|
|
58
|
+
}
|
|
59
|
+
export async function resolveDeploymentId(flags) {
|
|
60
|
+
if (flags["deployment-id"]) {
|
|
61
|
+
return flags["deployment-id"];
|
|
62
|
+
}
|
|
63
|
+
const environmentId = resolveEnvironmentId(flags);
|
|
64
|
+
const deployment = await fetchLatestDeploymentForEnvironment(environmentId);
|
|
65
|
+
return deployment.id;
|
|
66
|
+
}
|
|
67
|
+
export async function waitForDeployment(deployment) {
|
|
68
|
+
if (FINAL_STATUSES.has(deployment.status)) {
|
|
69
|
+
return deployment;
|
|
70
|
+
}
|
|
71
|
+
const startedAt = deployment.startedAt?.getTime() ?? Date.now();
|
|
72
|
+
const waitStartedAt = Date.now();
|
|
73
|
+
let current = deployment;
|
|
74
|
+
const spinner = p.spinner();
|
|
75
|
+
spinner.start("Waiting for deployment to complete");
|
|
76
|
+
const elapsedInterval = setInterval(() => {
|
|
77
|
+
spinner.message(`Waiting for deployment to complete — ${formatElapsed(Date.now() - startedAt)}`);
|
|
78
|
+
}, 1000);
|
|
79
|
+
try {
|
|
80
|
+
while (!FINAL_STATUSES.has(current.status)) {
|
|
81
|
+
if (Date.now() - waitStartedAt >= FIFTEEN_MINUTES_IN_MS) {
|
|
82
|
+
throw new Error("Deployment did not reach a final state within 15 minutes.");
|
|
83
|
+
}
|
|
84
|
+
current = await api.deployments.get.v1({ deploymentId: current.id });
|
|
85
|
+
if (!FINAL_STATUSES.has(current.status)) {
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs(3_000)));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
spinner.stop(`Deployment is ${colorizeDeploymentStatus(current.status)(current.status)}`);
|
|
90
|
+
return current;
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
clearInterval(elapsedInterval);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const DEPLOYMENT_LOG_POLL_INTERVAL_MS = pollIntervalMs(5_000);
|
|
97
|
+
export function printDeploymentLog(log, { noColor = false } = {}) {
|
|
98
|
+
const ts = formatLogTimestamp(log.timestamp, noColor);
|
|
99
|
+
const rawContent = (log.content ?? "").trimEnd();
|
|
100
|
+
const content = noColor ? stripVTControlCharacters(rawContent) : rawContent;
|
|
101
|
+
process.stdout.write(`${ts} ${content}\n`);
|
|
102
|
+
}
|
|
103
|
+
export async function followDeploymentLogs(deploymentId, initialLogs, { noColor = false } = {}) {
|
|
104
|
+
let printedCount = initialLogs.length;
|
|
105
|
+
while (true) {
|
|
106
|
+
await new Promise((resolve) => setTimeout(resolve, DEPLOYMENT_LOG_POLL_INTERVAL_MS));
|
|
107
|
+
const result = await api.deployments.getLogs.v1({ deploymentId });
|
|
108
|
+
for (const log of result.logs.slice(printedCount)) {
|
|
109
|
+
printDeploymentLog(log, { noColor });
|
|
110
|
+
}
|
|
111
|
+
printedCount = result.logs.length;
|
|
112
|
+
if (!result.hasMoreLogs)
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
11
116
|
export async function deployAndWait({ initial, startedAt, }) {
|
|
12
117
|
const spinner = p.spinner();
|
|
13
118
|
let deployment = initial;
|
|
14
119
|
const deploymentPageUrl = deployment.deploymentPageUrl;
|
|
15
120
|
if (deploymentPageUrl) {
|
|
16
|
-
p.note(`🔗 ${deploymentPageUrl}`, "View deployment details:", {
|
|
121
|
+
p.note(`🔗 ${deploymentPageUrl}`, "View deployment details:", {
|
|
122
|
+
format: (line) => line,
|
|
123
|
+
});
|
|
17
124
|
}
|
|
18
125
|
spinner.start("Deployment in progress");
|
|
19
|
-
const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000; // 15 minutes
|
|
20
126
|
const elapsedInterval = setInterval(() => {
|
|
21
127
|
const elapsed = formatElapsed(Date.now() - startedAt);
|
|
22
128
|
spinner.message(`Deployment in progress — ${elapsed}`);
|
|
@@ -27,9 +133,11 @@ export async function deployAndWait({ initial, startedAt, }) {
|
|
|
27
133
|
if (elapsedMs >= FIFTEEN_MINUTES_IN_MS) {
|
|
28
134
|
throw new Error(`Deployment aborted after 15 minutes. View status: ${deploymentPageUrl}`);
|
|
29
135
|
}
|
|
30
|
-
deployment = await api.deployments.get.v1({
|
|
136
|
+
deployment = await api.deployments.get.v1({
|
|
137
|
+
deploymentId: deployment.id,
|
|
138
|
+
});
|
|
31
139
|
if (deployment.status === "ongoing") {
|
|
32
|
-
await new Promise((resolve) => setTimeout(resolve, 10_000));
|
|
140
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs(10_000)));
|
|
33
141
|
}
|
|
34
142
|
}
|
|
35
143
|
return { deployment, elapsedMs: Date.now() - startedAt };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BaseWorkflow } from "./base-workflow.js";
|
|
2
|
+
export type EnvVar = {
|
|
3
|
+
key: string;
|
|
4
|
+
value: string;
|
|
5
|
+
isSecret: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type EnvironmentVariableWorkflowFlags = {
|
|
8
|
+
"non-interactive"?: boolean;
|
|
9
|
+
key?: string;
|
|
10
|
+
value?: string;
|
|
11
|
+
secret?: boolean;
|
|
12
|
+
"env-file"?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function isValidEnvironmentVariableKey(key: string): boolean;
|
|
15
|
+
export declare function fetchEnvironmentVariables(environmentId: string): Promise<{
|
|
16
|
+
id: string;
|
|
17
|
+
key: string;
|
|
18
|
+
value: string;
|
|
19
|
+
isSecret: boolean;
|
|
20
|
+
createdAt: Date;
|
|
21
|
+
}[]>;
|
|
22
|
+
export declare class EnvironmentVariableWorkflow extends BaseWorkflow<EnvironmentVariableWorkflowFlags> {
|
|
23
|
+
protected isNonInteractive(): boolean;
|
|
24
|
+
add(environmentId: string): Promise<void>;
|
|
25
|
+
update(environmentId: string): Promise<void>;
|
|
26
|
+
remove(environmentId: string): Promise<void>;
|
|
27
|
+
private resolveEnvironmentVariablesForAdd;
|
|
28
|
+
private resolveAddKey;
|
|
29
|
+
private resolveAddValue;
|
|
30
|
+
private resolveAddSecret;
|
|
31
|
+
private resolveUpdateInput;
|
|
32
|
+
private resolveUpdateKey;
|
|
33
|
+
private resolveUpdateValue;
|
|
34
|
+
private resolveUpdateSecret;
|
|
35
|
+
private resolveRemoveKey;
|
|
36
|
+
private promptRemoveKey;
|
|
37
|
+
}
|