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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alpic",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.fa013bb",
|
|
4
4
|
"description": "The command-line interface for Alpic",
|
|
5
5
|
"homepage": "https://alpic.ai",
|
|
6
6
|
"preferGlobal": true,
|
|
@@ -25,34 +25,33 @@
|
|
|
25
25
|
"author": "Alpic",
|
|
26
26
|
"license": "ISC",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@clack/prompts": "^1.0.
|
|
29
|
-
"@oclif/core": "^4.8.
|
|
30
|
-
"@orpc/client": "^1.13.
|
|
31
|
-
"@orpc/contract": "^1.13.
|
|
32
|
-
"@orpc/openapi-client": "^1.13.
|
|
28
|
+
"@clack/prompts": "^1.0.1",
|
|
29
|
+
"@oclif/core": "^4.8.2",
|
|
30
|
+
"@orpc/client": "^1.13.5",
|
|
31
|
+
"@orpc/contract": "^1.13.5",
|
|
32
|
+
"@orpc/openapi-client": "^1.13.5",
|
|
33
33
|
"@t3-oss/env-core": "^0.13.10",
|
|
34
34
|
"chalk": "^5.6.2",
|
|
35
35
|
"ci-info": "^4.4.0",
|
|
36
36
|
"jwt-decode": "^4.0.0",
|
|
37
37
|
"open": "^11.0.0",
|
|
38
38
|
"openid-client": "^6.8.2",
|
|
39
|
-
"posthog-node": "^5.
|
|
40
|
-
"tar": "^7.
|
|
39
|
+
"posthog-node": "^5.26.0",
|
|
40
|
+
"tar": "^7.5.9",
|
|
41
41
|
"xdg-app-paths": "^8.3.0",
|
|
42
42
|
"zod": "^4.3.6",
|
|
43
|
-
"@alpic-ai/api": "0.0.0-dev.
|
|
43
|
+
"@alpic-ai/api": "0.0.0-dev.fa013bb"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@orpc/openapi": "^1.13.
|
|
47
|
-
"@orpc/server": "^1.13.
|
|
48
|
-
"@orpc/zod": "^1.13.
|
|
46
|
+
"@orpc/openapi": "^1.13.5",
|
|
47
|
+
"@orpc/server": "^1.13.5",
|
|
48
|
+
"@orpc/zod": "^1.13.5",
|
|
49
49
|
"@total-typescript/tsconfig": "^1.0.4",
|
|
50
50
|
"@types/express": "^5.0.6",
|
|
51
|
-
"@types/node": "^25.
|
|
52
|
-
"biome": "^0.3.3",
|
|
51
|
+
"@types/node": "^25.3.3",
|
|
53
52
|
"express": "^5.2.1",
|
|
54
|
-
"jsdom": "^28.
|
|
55
|
-
"node-pty": "1.
|
|
53
|
+
"jsdom": "^28.1.0",
|
|
54
|
+
"node-pty": "1.1.0",
|
|
56
55
|
"selfsigned": "^5.5.0",
|
|
57
56
|
"shx": "^0.4.0",
|
|
58
57
|
"ts-node": "^10.9.2",
|
|
@@ -72,7 +71,8 @@
|
|
|
72
71
|
}
|
|
73
72
|
},
|
|
74
73
|
"scripts": {
|
|
75
|
-
"build": "shx rm -rf dist && tsc",
|
|
74
|
+
"build": "shx rm -rf dist && tsc && pnpm run build:assets",
|
|
75
|
+
"build:assets": "shx cp -r src/lib/auth/oauth/server/assets dist/lib/auth/oauth/server/",
|
|
76
76
|
"format": "biome check --write --error-on-warnings",
|
|
77
77
|
"test": "pnpm run test:unit && pnpm run test:type && pnpm run test:format",
|
|
78
78
|
"test:unit": "vitest run",
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import * as openid from "openid-client";
|
|
2
|
-
export declare function getOAuthConfig(issuer: string): Promise<openid.Configuration>;
|
|
3
|
-
export declare function getIssuer(): Promise<string>;
|
|
4
|
-
interface OAuthProtectedResourceConfig {
|
|
5
|
-
resource: string;
|
|
6
|
-
authorization_servers: string[];
|
|
7
|
-
bearer_methods_supported: string[];
|
|
8
|
-
scopes_supported: string[];
|
|
9
|
-
resource_documentation: string;
|
|
10
|
-
}
|
|
11
|
-
export declare function getOAuthProtectedResourceConfig(): Promise<OAuthProtectedResourceConfig>;
|
|
12
|
-
export {};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import * as openid from "openid-client";
|
|
2
|
-
import { env } from "../../../env.js";
|
|
3
|
-
let cachedConfig;
|
|
4
|
-
export async function getOAuthConfig(issuer) {
|
|
5
|
-
if (cachedConfig) {
|
|
6
|
-
return cachedConfig;
|
|
7
|
-
}
|
|
8
|
-
const issuerUrl = new URL(issuer);
|
|
9
|
-
try {
|
|
10
|
-
cachedConfig = await openid.discovery(issuerUrl, env.ALPIC_COGNITO_CLIENT_ID);
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
throw new Error("Failed to discover OAuth config");
|
|
14
|
-
}
|
|
15
|
-
return cachedConfig;
|
|
16
|
-
}
|
|
17
|
-
export async function getIssuer() {
|
|
18
|
-
const config = await getOAuthProtectedResourceConfig();
|
|
19
|
-
const issuer = config.authorization_servers[0];
|
|
20
|
-
if (!issuer) {
|
|
21
|
-
throw new Error("No authorization server in OAuth protected resource config");
|
|
22
|
-
}
|
|
23
|
-
return issuer;
|
|
24
|
-
}
|
|
25
|
-
let cached;
|
|
26
|
-
export async function getOAuthProtectedResourceConfig() {
|
|
27
|
-
if (cached) {
|
|
28
|
-
return cached;
|
|
29
|
-
}
|
|
30
|
-
const baseUrl = env.ALPIC_API_BASE_URL;
|
|
31
|
-
const response = await fetch(`${baseUrl}/.well-known/oauth-protected-resource`);
|
|
32
|
-
if (!response.ok) {
|
|
33
|
-
throw new Error(`Failed to load service config from ${baseUrl} (${response.status} ${response.statusText})`);
|
|
34
|
-
}
|
|
35
|
-
const data = (await response.json());
|
|
36
|
-
cached = data;
|
|
37
|
-
return data;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,IAAI,YAAkC,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc;IACjD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,MAAM,+BAA+B,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAUD,IAAI,MAAoC,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,+BAA+B;IACnD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,uCAAuC,CAAC,CAAC;IAEhF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;IAC/G,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiC,CAAC;IACrE,MAAM,GAAG,IAAI,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as openid from "openid-client";
|
|
2
|
-
import type { Credentials } from "../../global-store.js";
|
|
3
|
-
export declare const listenToOAuthCallback: ({ state, nonce, codeVerifier, config, }: {
|
|
4
|
-
state: string;
|
|
5
|
-
nonce: string;
|
|
6
|
-
codeVerifier: string;
|
|
7
|
-
config: openid.Configuration;
|
|
8
|
-
}) => Promise<Credentials>;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import * as p from "@clack/prompts";
|
|
2
|
-
import * as openid from "openid-client";
|
|
3
|
-
import { createServer } from "node:http";
|
|
4
|
-
import { getExpiresAt } from "./client.js";
|
|
5
|
-
import { LOOPBACK_HOST, LOOPBACK_PORT } from "./constants.js";
|
|
6
|
-
const createCallbackServer = ({ state, nonce, codeVerifier, config, onSuccess, onError, }) => createServer(async (req, res) => {
|
|
7
|
-
const url = req.url ?? "/";
|
|
8
|
-
if (!url.startsWith("/callback")) {
|
|
9
|
-
p.log.message(`Ignoring request to ${url}`);
|
|
10
|
-
res.writeHead(404).end();
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
const callbackUrl = new URL(url, `http://${req.headers.host}`);
|
|
14
|
-
try {
|
|
15
|
-
const tokens = await openid.authorizationCodeGrant(config, callbackUrl, {
|
|
16
|
-
pkceCodeVerifier: codeVerifier,
|
|
17
|
-
expectedState: state,
|
|
18
|
-
expectedNonce: nonce,
|
|
19
|
-
});
|
|
20
|
-
const sub = tokens.claims()?.sub;
|
|
21
|
-
if (!sub || !tokens.refresh_token) {
|
|
22
|
-
throw new Error("ID token did not contain sub");
|
|
23
|
-
}
|
|
24
|
-
const stored = {
|
|
25
|
-
access_token: tokens.access_token,
|
|
26
|
-
refresh_token: tokens.refresh_token,
|
|
27
|
-
expires_at: getExpiresAt(tokens.expires_in ?? 0),
|
|
28
|
-
sub,
|
|
29
|
-
};
|
|
30
|
-
p.log.success("✅ Authentication successful");
|
|
31
|
-
res.writeHead(200, { "Content-Type": "text/html" });
|
|
32
|
-
res.end(html("Logged in", "You can close this window.", true));
|
|
33
|
-
onSuccess(stored);
|
|
34
|
-
}
|
|
35
|
-
catch (e) {
|
|
36
|
-
p.log.error(e instanceof Error ? e.message : String(e));
|
|
37
|
-
res.writeHead(500, { "Content-Type": "text/html" });
|
|
38
|
-
res.end(html("Login failed", "Token exchange error. Try again.", false));
|
|
39
|
-
onError(e instanceof Error ? e : new Error(String(e)));
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
export const listenToOAuthCallback = ({ state, nonce, codeVerifier, config, }) => {
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
const callbackServer = createCallbackServer({
|
|
45
|
-
state,
|
|
46
|
-
nonce,
|
|
47
|
-
codeVerifier,
|
|
48
|
-
config,
|
|
49
|
-
onSuccess: (storedToken) => {
|
|
50
|
-
callbackServer.close();
|
|
51
|
-
resolve(storedToken);
|
|
52
|
-
},
|
|
53
|
-
onError: (err) => {
|
|
54
|
-
callbackServer.close();
|
|
55
|
-
reject(err);
|
|
56
|
-
},
|
|
57
|
-
});
|
|
58
|
-
callbackServer.listen(LOOPBACK_PORT, LOOPBACK_HOST);
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
function html(title, body, success) {
|
|
62
|
-
const bg = success ? "#ecfdf5" : "#fef2f2";
|
|
63
|
-
const border = success ? "#10b981" : "#ef4444";
|
|
64
|
-
const color = success ? "#065f46" : "#991b1b";
|
|
65
|
-
const logoSvg = `<svg width="120" height="24" viewBox="0 0 213 42" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18.139 41.4181H1.58758C0.877981 41.4181 0.302734 40.8443 0.302734 40.1347V16.4957C0.302734 15.3182 1.73285 14.7794 2.48612 15.6845C7.8891 22.1765 15.4029 32.6359 19.2489 39.5848C19.7114 40.4205 19.0941 41.4181 18.139 41.4181Z" fill="#0A0E1C"/><path d="M34.9934 41.4181H23.8233C23.3366 41.4181 22.8936 41.144 22.6686 40.7125C18.5795 32.8689 8.1012 17.5927 0.638233 9.39174C0.420845 9.15285 0.302734 8.84629 0.302734 8.5233V1.58783C0.302734 0.878225 0.876486 0.302979 1.58609 0.302979H6.87182C7.19145 0.302979 7.48677 0.406983 7.71702 0.628672C14.4657 7.1264 32.6261 34.0831 35.8013 40.2463C36.1263 40.8771 35.703 41.4181 34.9934 41.4181Z" fill="#0A0E1C"/><path d="M41.4179 22.479C41.4177 26.1486 41.4178 34.7435 41.4178 40.0835C41.4178 41.3801 39.7105 41.8673 39.0235 40.7677C32.9779 31.091 20.3757 11.3903 13.1298 2.51663C12.4214 1.64905 13.0384 0.302979 14.1585 0.302979H25.3523C25.7594 0.302979 26.1363 0.487723 26.3781 0.815243C28.4729 3.65265 38.6422 17.4716 41.2512 21.8598C41.3654 22.052 41.4179 22.2554 41.4179 22.479Z" fill="#0A0E1C"/><path d="M40.133 0.302979H31.6871C30.6461 0.302979 30.0373 1.47597 30.6363 2.32725L39.0823 14.3294C39.8043 15.3554 41.4179 14.8446 41.4179 13.59V1.58783C41.4179 0.878225 40.8426 0.302979 40.133 0.302979Z" fill="#0A0E1C"/><path d="M69.4252 40.871H61.9757L75.539 0.850139H84.1548L97.737 40.871H90.2875L87.0895 31.0026H72.6044L69.4252 40.871ZM74.4856 25.1792H85.2083L79.9974 9.05754H79.6964L74.4856 25.1792Z" fill="#0A0E1C"/><path d="M102.282 40.871V0.850139H109.261V34.7936H126.229V40.871H102.282Z" fill="#0A0E1C"/><path d="M131.757 40.871V0.850139H146.204C155.065 0.850139 159.786 6.45853 159.786 14.0992C159.786 21.7985 155.008 27.3483 146.11 27.3483H138.736V40.871H131.757ZM138.736 21.3882H145.17C150.362 21.3882 152.676 18.3593 152.676 14.0992C152.676 9.83919 150.362 6.90798 145.132 6.90798H138.736V21.3882Z" fill="#0A0E1C"/><path d="M172.298 0.850139V40.871H165.319V0.850139H172.298Z" fill="#0A0E1C"/><path d="M212.303 14.3533H205.267C204.458 9.56561 200.79 6.81027 196.106 6.81027C189.804 6.81027 185.364 11.8324 185.364 20.8606C185.364 30.045 189.842 34.9108 196.087 34.9108C200.696 34.9108 204.383 32.2727 205.267 27.5828L212.303 27.6219C211.231 35.2626 205.154 41.4181 195.993 41.4181C185.835 41.4181 178.348 33.7774 178.348 20.8606C178.348 7.92413 185.929 0.302979 195.993 0.302979C204.534 0.302979 211.118 5.46191 212.303 14.3533Z" fill="#0A0E1C"/></svg>`;
|
|
66
|
-
return `<!DOCTYPE html>
|
|
67
|
-
<html>
|
|
68
|
-
<head>
|
|
69
|
-
<meta charset="utf-8">
|
|
70
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
71
|
-
<title>${title}</title>
|
|
72
|
-
<style>
|
|
73
|
-
* { box-sizing: border-box; }
|
|
74
|
-
body { margin: 0; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2rem; font-family: system-ui, -apple-system, sans-serif; background: #f8fafc; }
|
|
75
|
-
.logo { flex-shrink: 0; }
|
|
76
|
-
.alert { max-width: 360px; padding: 1.25rem 1.5rem; border-radius: 8px; border-left: 4px solid ${border}; background: ${bg}; color: ${color}; }
|
|
77
|
-
.alert h1 { margin: 0 0 0.5rem; font-size: 1.125rem; font-weight: 600; }
|
|
78
|
-
.alert p { margin: 0; font-size: 0.9375rem; line-height: 1.5; opacity: 0.95; }
|
|
79
|
-
</style>
|
|
80
|
-
</head>
|
|
81
|
-
<body>
|
|
82
|
-
<div class="logo" aria-hidden="true">${logoSvg}</div>
|
|
83
|
-
<div class="alert">
|
|
84
|
-
<h1>${title}</h1>
|
|
85
|
-
<p>${body}</p>
|
|
86
|
-
</div>
|
|
87
|
-
</body>
|
|
88
|
-
</html>`;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/server.ts"],"names":[],"mappings":"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"}
|