alpic 0.0.0-dev.f91105e → 0.0.0-dev.fa013bb
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/__tests__/auth.e2e.test.js +5 -8
- 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 +87 -0
- package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
- package/dist/__tests__/deploy.e2e.test.js +1 -53
- package/dist/__tests__/deploy.e2e.test.js.map +1 -1
- package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
- package/dist/__tests__/git-flags.e2e.test.js +122 -0
- package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
- package/dist/__tests__/git.e2e.test.js +13 -17
- package/dist/__tests__/git.e2e.test.js.map +1 -1
- package/dist/__tests__/mock-server.js +2 -0
- package/dist/__tests__/mock-server.js.map +1 -1
- package/dist/__tests__/utils.d.ts +10 -4
- package/dist/__tests__/utils.js +50 -5
- package/dist/__tests__/utils.js.map +1 -1
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/commands/deploy.d.ts +6 -0
- package/dist/commands/deploy.js +39 -13
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/git/connect.d.ts +4 -0
- package/dist/commands/git/connect.js +25 -14
- package/dist/commands/git/connect.js.map +1 -1
- package/dist/commands/git/disconnect.d.ts +3 -0
- package/dist/commands/git/disconnect.js +20 -14
- package/dist/commands/git/disconnect.js.map +1 -1
- package/dist/commands/login.js +6 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/env.d.ts +0 -1
- package/dist/env.js +1 -2
- package/dist/env.js.map +1 -1
- package/dist/lib/alpic-command.d.ts +2 -0
- package/dist/lib/alpic-command.js +13 -3
- package/dist/lib/alpic-command.js.map +1 -1
- package/dist/lib/auth/auth.d.ts +1 -1
- package/dist/lib/auth/auth.js +4 -3
- package/dist/lib/auth/auth.js.map +1 -1
- package/dist/lib/auth/oauth/client.d.ts +26 -10
- package/dist/lib/auth/oauth/client.js +97 -53
- package/dist/lib/auth/oauth/client.js.map +1 -1
- package/dist/lib/auth/oauth/server/assets/alpic-mountain.png +0 -0
- package/dist/lib/auth/oauth/server/assets/authorize.html +195 -0
- package/dist/lib/auth/oauth/server/assets/callback.html +88 -0
- package/dist/lib/auth/oauth/server/index.d.ts +8 -0
- package/dist/lib/auth/oauth/server/index.js +102 -0
- package/dist/lib/auth/oauth/server/index.js.map +1 -0
- package/dist/lib/auth/whoami.d.ts +2 -2
- package/dist/lib/auth/whoami.js +3 -3
- 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/deployment.d.ts +3 -3
- package/dist/lib/deployment.js +23 -8
- package/dist/lib/deployment.js.map +1 -1
- package/dist/lib/git.d.ts +9 -1
- package/dist/lib/git.js +44 -15
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/project.d.ts +60 -61
- package/dist/lib/project.js +268 -254
- package/dist/lib/project.js.map +1 -1
- package/package.json +17 -17
- package/dist/lib/auth/oauth/config.d.ts +0 -12
- package/dist/lib/auth/oauth/config.js +0 -39
- package/dist/lib/auth/oauth/config.js.map +0 -1
- package/dist/lib/auth/oauth/server.d.ts +0 -8
- package/dist/lib/auth/oauth/server.js +0 -90
- package/dist/lib/auth/oauth/server.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as p from "@clack/prompts";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { createServer } from "node:http";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { oAuthClient } from "../client.js";
|
|
7
|
+
import { LOOPBACK_HOST, LOOPBACK_PORT } from "../constants.js";
|
|
8
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const ASSETS_DIR = path.join(__dirname, "assets");
|
|
10
|
+
const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSuccess, onError, }) => createServer(async (req, res) => {
|
|
11
|
+
const url = req.url ?? "/";
|
|
12
|
+
const pathname = url.split("?")[0] ?? "/";
|
|
13
|
+
if (pathname === "/login") {
|
|
14
|
+
try {
|
|
15
|
+
const htmlPath = path.join(ASSETS_DIR, "authorize.html");
|
|
16
|
+
let html = await readFile(htmlPath, "utf-8");
|
|
17
|
+
if (authorizeUrl) {
|
|
18
|
+
html = html.replace(/%AUTH_BASE_URL%/g, authorizeUrl);
|
|
19
|
+
}
|
|
20
|
+
res.writeHead(200, { "Content-Type": "text/html", Connection: "close" });
|
|
21
|
+
res.end(html);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
catch (e) {
|
|
25
|
+
p.log.error(e instanceof Error ? e.message : String(e));
|
|
26
|
+
res.writeHead(500).end();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (pathname === "/assets/alpic-mountain.png") {
|
|
31
|
+
const filePath = path.join(ASSETS_DIR, "alpic-mountain.png");
|
|
32
|
+
const content = await readFile(filePath);
|
|
33
|
+
res.writeHead(200, { "Content-Type": "image/png", Connection: "close" });
|
|
34
|
+
res.end(content);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (!url.startsWith("/callback")) {
|
|
38
|
+
res.writeHead(404).end();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const tokens = await oAuthClient.exchangeAuthorizationCode({
|
|
43
|
+
url: new URL(url, `http://${req.headers.host}`),
|
|
44
|
+
codeVerifier,
|
|
45
|
+
state,
|
|
46
|
+
nonce,
|
|
47
|
+
});
|
|
48
|
+
const sub = tokens.claims()?.sub;
|
|
49
|
+
if (!sub || !tokens.refresh_token) {
|
|
50
|
+
throw new Error("ID token did not contain sub");
|
|
51
|
+
}
|
|
52
|
+
const stored = {
|
|
53
|
+
access_token: tokens.access_token,
|
|
54
|
+
refresh_token: tokens.refresh_token,
|
|
55
|
+
expires_at: oAuthClient.getExpiresAt(tokens.expires_in ?? 0),
|
|
56
|
+
sub,
|
|
57
|
+
};
|
|
58
|
+
p.log.success("✅ Authentication successful");
|
|
59
|
+
const successHtmlPath = path.join(ASSETS_DIR, "callback.html");
|
|
60
|
+
let html = await readFile(successHtmlPath, "utf-8");
|
|
61
|
+
html = html
|
|
62
|
+
.replace(/__CALLBACK_STATUS__/g, "success")
|
|
63
|
+
.replace(/__CALLBACK_TITLE__/g, "You are logged in")
|
|
64
|
+
.replace(/__CALLBACK_SUB__/g, "You can close this page.");
|
|
65
|
+
res.writeHead(200, { "Content-Type": "text/html", Connection: "close" });
|
|
66
|
+
res.end(html);
|
|
67
|
+
onSuccess(stored);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
p.log.error(e instanceof Error ? e.message : String(e));
|
|
71
|
+
const callbackHtmlPath = path.join(ASSETS_DIR, "callback.html");
|
|
72
|
+
let html = await readFile(callbackHtmlPath, "utf-8");
|
|
73
|
+
html = html
|
|
74
|
+
.replace(/__CALLBACK_STATUS__/g, "error")
|
|
75
|
+
.replace(/__CALLBACK_TITLE__/g, "An error occurred. You can close this page.")
|
|
76
|
+
.replace(/__CALLBACK_SUB__/g, "");
|
|
77
|
+
res.writeHead(500, { "Content-Type": "text/html", Connection: "close" });
|
|
78
|
+
res.end(html);
|
|
79
|
+
onError(e instanceof Error ? e : new Error(String(e)));
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
export const getLoginPageUrl = () => `http://${LOOPBACK_HOST}:${LOOPBACK_PORT}/login`;
|
|
83
|
+
export const listenToOAuthCallback = ({ state, nonce, codeVerifier, authorizeUrl, }) => {
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
const callbackServer = createCallbackServer({
|
|
86
|
+
state,
|
|
87
|
+
nonce,
|
|
88
|
+
codeVerifier,
|
|
89
|
+
authorizeUrl,
|
|
90
|
+
onSuccess: (storedToken) => {
|
|
91
|
+
callbackServer.close();
|
|
92
|
+
resolve(storedToken);
|
|
93
|
+
},
|
|
94
|
+
onError: (err) => {
|
|
95
|
+
callbackServer.close();
|
|
96
|
+
reject(err);
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
callbackServer.listen(LOOPBACK_PORT, LOOPBACK_HOST);
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/auth/oauth/server/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/auth/whoami.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { api } from "../../api.js";
|
|
2
|
-
import {
|
|
2
|
+
import { oAuthClient } from "./oauth/client.js";
|
|
3
3
|
export async function getWhoamiInfo() {
|
|
4
4
|
if (process.env.ALPIC_API_KEY !== undefined) {
|
|
5
5
|
const team = await getApiKeyTeam();
|
|
@@ -8,7 +8,7 @@ export async function getWhoamiInfo() {
|
|
|
8
8
|
team,
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
|
-
const token = await getValidAccessToken();
|
|
11
|
+
const token = await oAuthClient.getValidAccessToken();
|
|
12
12
|
if (!token)
|
|
13
13
|
return null;
|
|
14
14
|
const userInfo = await fetchOAuthUserInfo(token);
|
|
@@ -22,7 +22,7 @@ export async function getWhoamiInfo() {
|
|
|
22
22
|
}
|
|
23
23
|
async function fetchOAuthUserInfo(credentials) {
|
|
24
24
|
try {
|
|
25
|
-
return
|
|
25
|
+
return await oAuthClient.fetchUserInfo(credentials);
|
|
26
26
|
}
|
|
27
27
|
catch {
|
|
28
28
|
return null;
|
|
@@ -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;AAEnC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/lib/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,IAAI;SACL,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,WAAwB;IACxD,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,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
|
+
yes?: 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.yes)
|
|
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,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;IAC1B,CAAC;CACF"}
|
package/dist/lib/deployment.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { RouterOutput } from "@alpic-ai/api";
|
|
2
2
|
export declare function formatElapsed(ms: number): string;
|
|
3
|
-
export declare function deployAndWait({ initial, startedAt,
|
|
3
|
+
export declare function deployAndWait({ initial, startedAt, }: {
|
|
4
4
|
initial: RouterOutput["deployments"]["get"]["v1"];
|
|
5
5
|
startedAt: number;
|
|
6
|
-
teamId: string;
|
|
7
|
-
projectId: string;
|
|
8
6
|
}): Promise<{
|
|
9
7
|
deployment: {
|
|
10
8
|
id: string;
|
|
@@ -16,6 +14,8 @@ export declare function deployAndWait({ initial, startedAt, teamId, projectId, }
|
|
|
16
14
|
authorAvatarUrl: string | null;
|
|
17
15
|
startedAt: Date | null;
|
|
18
16
|
completedAt: Date | null;
|
|
17
|
+
deploymentPageUrl: string | null;
|
|
19
18
|
};
|
|
20
19
|
elapsedMs: number;
|
|
21
20
|
}>;
|
|
21
|
+
export declare function resolveDeployDir(raw?: string): string;
|
package/dist/lib/deployment.js
CHANGED
|
@@ -1,32 +1,37 @@
|
|
|
1
1
|
import * as p from "@clack/prompts";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
+
import { existsSync, statSync } from "node:fs";
|
|
4
|
+
import { resolve } from "node:path";
|
|
3
5
|
import { api } from "../api.js";
|
|
4
|
-
import { env } from "../env.js";
|
|
5
6
|
export function formatElapsed(ms) {
|
|
6
7
|
const totalSeconds = Math.floor(ms / 1000);
|
|
7
8
|
const minutes = Math.floor(totalSeconds / 60);
|
|
8
9
|
const seconds = totalSeconds % 60;
|
|
9
10
|
return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
|
|
10
11
|
}
|
|
11
|
-
export async function deployAndWait({ initial, startedAt,
|
|
12
|
+
export async function deployAndWait({ initial, startedAt, }) {
|
|
12
13
|
const spinner = p.spinner();
|
|
14
|
+
let deployment = initial;
|
|
15
|
+
const deploymentPageUrl = deployment.deploymentPageUrl;
|
|
16
|
+
if (deploymentPageUrl) {
|
|
17
|
+
p.note(`🔗 ${deploymentPageUrl}`, "View deployment details:", { format: (line) => line });
|
|
18
|
+
}
|
|
13
19
|
spinner.start("Deployment in progress");
|
|
14
|
-
const
|
|
15
|
-
p.note(deploymentPageUrl, "View deployment details:", { format: (line) => line });
|
|
20
|
+
const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000; // 15 minutes
|
|
16
21
|
const elapsedInterval = setInterval(() => {
|
|
17
22
|
const elapsed = formatElapsed(Date.now() - startedAt);
|
|
18
23
|
spinner.message(`Deployment in progress — ${elapsed}`);
|
|
19
24
|
}, 1000);
|
|
20
|
-
const timeoutMs = 15 * 60 * 1000; // 15 minutes
|
|
21
|
-
let deployment = await api.deployments.get.v1({ deploymentId: initial.id });
|
|
22
25
|
try {
|
|
23
26
|
while (deployment.status === "ongoing") {
|
|
24
27
|
const elapsedMs = Date.now() - startedAt;
|
|
25
|
-
if (elapsedMs >=
|
|
28
|
+
if (elapsedMs >= FIFTEEN_MINUTES_IN_MS) {
|
|
26
29
|
throw new Error(`Deployment aborted after 15 minutes. View status: ${deploymentPageUrl}`);
|
|
27
30
|
}
|
|
28
31
|
deployment = await api.deployments.get.v1({ deploymentId: deployment.id });
|
|
29
|
-
|
|
32
|
+
if (deployment.status === "ongoing") {
|
|
33
|
+
await new Promise((resolve) => setTimeout(resolve, 10_000));
|
|
34
|
+
}
|
|
30
35
|
}
|
|
31
36
|
return { deployment, elapsedMs: Date.now() - startedAt };
|
|
32
37
|
}
|
|
@@ -36,4 +41,14 @@ export async function deployAndWait({ initial, startedAt, teamId, projectId, })
|
|
|
36
41
|
clearInterval(elapsedInterval);
|
|
37
42
|
}
|
|
38
43
|
}
|
|
44
|
+
export function resolveDeployDir(raw) {
|
|
45
|
+
const dir = resolve((raw ?? "").trim() || process.cwd());
|
|
46
|
+
if (!existsSync(dir)) {
|
|
47
|
+
throw new Error(`Path does not exist: ${dir}`);
|
|
48
|
+
}
|
|
49
|
+
if (!statSync(dir).isDirectory()) {
|
|
50
|
+
throw new Error(`Path is not a directory: ${dir}`);
|
|
51
|
+
}
|
|
52
|
+
return dir;
|
|
53
|
+
}
|
|
39
54
|
//# sourceMappingURL=deployment.js.map
|
|
@@ -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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"}
|
package/dist/lib/git.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BaseWorkflow } from "./base-workflow.js";
|
|
1
2
|
export type GitRemote = {
|
|
2
3
|
name: string;
|
|
3
4
|
url: string;
|
|
@@ -10,5 +11,12 @@ export type ProjectWithSourceRepository = {
|
|
|
10
11
|
sourceRepository: string | null;
|
|
11
12
|
};
|
|
12
13
|
export declare function confirmLinkAnotherIfAlreadyConnected(project: ProjectWithSourceRepository): Promise<boolean>;
|
|
13
|
-
export
|
|
14
|
+
export type GitFlags = {
|
|
15
|
+
yes?: boolean;
|
|
16
|
+
remoteName?: string;
|
|
17
|
+
};
|
|
18
|
+
export declare class GitWorkflow extends BaseWorkflow<GitFlags> {
|
|
19
|
+
confirmDisconnect(sourceRepository: string, projectName: string): Promise<boolean>;
|
|
20
|
+
selectRemoteSourceRepository(remotes: GitRemote[]): Promise<string | null>;
|
|
21
|
+
}
|
|
14
22
|
export declare function showGitSetupInstructions(): void;
|
package/dist/lib/git.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as p from "@clack/prompts";
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import { execFileSync } from "node:child_process";
|
|
4
|
+
import { BaseWorkflow } from "./base-workflow.js";
|
|
4
5
|
function runGit(args, cwd) {
|
|
5
6
|
return execFileSync("git", args, {
|
|
6
7
|
cwd,
|
|
@@ -63,23 +64,51 @@ export async function confirmLinkAnotherIfAlreadyConnected(project) {
|
|
|
63
64
|
}
|
|
64
65
|
return true;
|
|
65
66
|
}
|
|
66
|
-
export
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
export class GitWorkflow extends BaseWorkflow {
|
|
68
|
+
async confirmDisconnect(sourceRepository, projectName) {
|
|
69
|
+
const confirmed = await this.confirm({
|
|
70
|
+
message: `Are you sure you want to disconnect ${chalk.bold(sourceRepository)} from project ${chalk.bold(projectName)}?`,
|
|
71
|
+
initialValue: false,
|
|
72
|
+
});
|
|
73
|
+
if (p.isCancel(confirmed))
|
|
74
|
+
return false;
|
|
75
|
+
return confirmed === true;
|
|
69
76
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
async selectRemoteSourceRepository(remotes) {
|
|
78
|
+
if (remotes.length === 0) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
if (this.flags.remoteName) {
|
|
82
|
+
const remote = remotes.find((remote) => remote.name === this.flags.remoteName);
|
|
83
|
+
if (!remote) {
|
|
84
|
+
const available = remotes.map((remote) => remote.name).join(", ");
|
|
85
|
+
throw new Error(`Remote "${this.flags.remoteName}" not found. Available remotes: ${available}`);
|
|
86
|
+
}
|
|
87
|
+
return remote.sourceRepository;
|
|
88
|
+
}
|
|
89
|
+
if (this.isNonInteractive()) {
|
|
90
|
+
if (remotes.length !== 1) {
|
|
91
|
+
throw new Error("Multiple remotes found. Use --remote-name to select a specific remote.");
|
|
92
|
+
}
|
|
93
|
+
const singleRemote = remotes.at(0);
|
|
94
|
+
if (!singleRemote) {
|
|
95
|
+
throw new Error("No remote found.");
|
|
96
|
+
}
|
|
97
|
+
return singleRemote.sourceRepository;
|
|
98
|
+
}
|
|
99
|
+
const selected = await p.select({
|
|
100
|
+
message: chalk.bold("Choose the remote source to connect"),
|
|
101
|
+
options: remotes.map((remote) => ({
|
|
102
|
+
value: remote.sourceRepository,
|
|
103
|
+
label: `${remote.sourceRepository} (${remote.name})`,
|
|
104
|
+
hint: remote.url,
|
|
105
|
+
})),
|
|
106
|
+
});
|
|
107
|
+
if (p.isCancel(selected)) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return selected;
|
|
81
111
|
}
|
|
82
|
-
return selected;
|
|
83
112
|
}
|
|
84
113
|
export function showGitSetupInstructions() {
|
|
85
114
|
p.note([
|
package/dist/lib/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,SAAS,MAAM,CAAC,IAAc,EAAE,GAAW;IACzC,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;QAC/B,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;YAAE,SAAS;QACrC,IAAI,IAAI,KAAK,OAAO;YAAE,SAAS;QAE/B,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;QAC7B,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBACf,IAAI;gBACJ,GAAG;gBACH,gBAAgB;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/B,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,OAAoC;IAC7F,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,8BAA8B,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC;QAC9D,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/project.d.ts
CHANGED
|
@@ -1,67 +1,66 @@
|
|
|
1
|
-
import type { RouterOutput } from "@alpic-ai/api";
|
|
1
|
+
import type { RouterOutput, Runtime } from "@alpic-ai/api";
|
|
2
2
|
import type { ProjectConfig } from "../types.js";
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
id: string;
|
|
14
|
-
status: "ongoing" | "deployed" | "failed" | "canceled";
|
|
15
|
-
sourceCommitId: string | null;
|
|
16
|
-
sourceCommitMessage: string | null;
|
|
17
|
-
completedAt: Date | null;
|
|
18
|
-
} | null;
|
|
19
|
-
} | null>;
|
|
20
|
-
export declare function confirmDeployDirectory(deployDir: string): Promise<boolean>;
|
|
21
|
-
export declare function confirmLinkExisting(): Promise<boolean>;
|
|
22
|
-
export declare function confirmLinkToAnotherProject(): Promise<boolean>;
|
|
23
|
-
export declare function selectProjectFromList(projects: RouterOutput["projects"]["list"]["v1"]): Promise<{
|
|
24
|
-
id: string;
|
|
25
|
-
name: string;
|
|
26
|
-
teamId: string;
|
|
27
|
-
sourceRepository: string | null;
|
|
28
|
-
runtime: "python3.13" | "python3.14" | "node22" | "node24";
|
|
29
|
-
transport: "stdio" | "sse" | "streamablehttp" | null;
|
|
30
|
-
rootDirectory: string | null;
|
|
31
|
-
buildCommand: string | null;
|
|
32
|
-
buildOutputDir: string | null;
|
|
33
|
-
installCommand: string | null;
|
|
34
|
-
startCommand: string | null;
|
|
35
|
-
createdAt: Date;
|
|
36
|
-
productionEnvironment: {
|
|
37
|
-
id: string;
|
|
38
|
-
name: string;
|
|
39
|
-
mcpServerUrl: string;
|
|
40
|
-
latestDeployment: {
|
|
41
|
-
id: string;
|
|
42
|
-
status: "ongoing" | "deployed" | "failed" | "canceled";
|
|
43
|
-
sourceCommitId: string | null;
|
|
44
|
-
sourceCommitMessage: string | null;
|
|
45
|
-
completedAt: Date | null;
|
|
46
|
-
} | null;
|
|
47
|
-
} | null;
|
|
48
|
-
environments: {
|
|
3
|
+
import { BaseWorkflow } from "./base-workflow.js";
|
|
4
|
+
export type ProjectFlags = {
|
|
5
|
+
yes?: boolean;
|
|
6
|
+
projectName?: string;
|
|
7
|
+
runtime?: Runtime;
|
|
8
|
+
rootDir?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare class ProjectWorkflow extends BaseWorkflow<ProjectFlags> {
|
|
11
|
+
selectEnvironmentFromList(environments: RouterOutput["projects"]["get"]["v1"]["environments"]): Promise<(typeof environments)[number] | null>;
|
|
12
|
+
selectProjectFromList(projects: RouterOutput["projects"]["list"]["v1"]): Promise<{
|
|
49
13
|
id: string;
|
|
50
14
|
name: string;
|
|
51
|
-
|
|
52
|
-
|
|
15
|
+
teamId: string;
|
|
16
|
+
sourceRepository: string | null;
|
|
17
|
+
runtime: "python3.13" | "python3.14" | "node22" | "node24";
|
|
18
|
+
transport: "stdio" | "sse" | "streamablehttp" | null;
|
|
19
|
+
rootDirectory: string | null;
|
|
20
|
+
buildCommand: string | null;
|
|
21
|
+
buildOutputDir: string | null;
|
|
22
|
+
installCommand: string | null;
|
|
23
|
+
startCommand: string | null;
|
|
53
24
|
createdAt: Date;
|
|
54
|
-
|
|
55
|
-
latestDeployment: {
|
|
25
|
+
productionEnvironment: {
|
|
56
26
|
id: string;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
27
|
+
name: string;
|
|
28
|
+
mcpServerUrl: string;
|
|
29
|
+
latestDeployment: {
|
|
30
|
+
id: string;
|
|
31
|
+
status: "ongoing" | "deployed" | "failed" | "canceled";
|
|
32
|
+
sourceCommitId: string | null;
|
|
33
|
+
sourceCommitMessage: string | null;
|
|
34
|
+
completedAt: Date | null;
|
|
35
|
+
} | null;
|
|
61
36
|
} | null;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
37
|
+
environments: {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
sourceBranch: string | null;
|
|
41
|
+
mcpServerUrl: string;
|
|
42
|
+
createdAt: Date;
|
|
43
|
+
projectId: string;
|
|
44
|
+
latestDeployment: {
|
|
45
|
+
id: string;
|
|
46
|
+
status: "ongoing" | "deployed" | "failed" | "canceled";
|
|
47
|
+
sourceCommitId: string | null;
|
|
48
|
+
sourceCommitMessage: string | null;
|
|
49
|
+
completedAt: Date | null;
|
|
50
|
+
} | null;
|
|
51
|
+
}[];
|
|
52
|
+
} | null>;
|
|
53
|
+
promptRootDirectory(deployDir: string): Promise<string | null>;
|
|
54
|
+
private directoryExists;
|
|
55
|
+
private detectRuntime;
|
|
56
|
+
confirmDeployWithExistingConfig(existingConfig: ProjectConfig): Promise<boolean | null>;
|
|
57
|
+
confirmDeployDirectory(deployDir: string): Promise<boolean>;
|
|
58
|
+
confirmLinkExisting(): Promise<boolean>;
|
|
59
|
+
confirmLinkToAnotherProject(): Promise<boolean>;
|
|
60
|
+
resolveProjectForDeploy(deployDir: string): Promise<(ProjectConfig & {
|
|
61
|
+
environmentId: string;
|
|
62
|
+
}) | null>;
|
|
63
|
+
private resolveEnvironmentForProject;
|
|
64
|
+
private runCreateProjectFlow;
|
|
65
|
+
private runLinkingFlow;
|
|
66
|
+
}
|