@buildspacestudio/cli 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/commands/app.d.ts +2 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +350 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/auth.d.ts +2 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +389 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +102 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +2 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +343 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/env.d.ts +2 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +204 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +118 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +106 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +75 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/app.d.ts +28 -0
- package/dist/lib/app.d.ts.map +1 -0
- package/dist/lib/app.js +132 -0
- package/dist/lib/app.js.map +1 -0
- package/dist/lib/args.d.ts +3 -0
- package/dist/lib/args.d.ts.map +1 -0
- package/dist/lib/args.js +16 -0
- package/dist/lib/args.js.map +1 -0
- package/dist/lib/auth.d.ts +9 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +21 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config.d.ts +23 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +72 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/git.d.ts +8 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +63 -0
- package/dist/lib/git.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { listEnvVars, resolveAppBySlug } from "../lib/api.js";
|
|
4
|
+
import { hasFlag, readFlag } from "../lib/args.js";
|
|
5
|
+
import { buildCloneUrl, getGitAuthorizationHeader, resolveStoredAuth } from "../lib/auth.js";
|
|
6
|
+
import { runGit } from "../lib/git.js";
|
|
7
|
+
const APP_SLUG_PATTERN = /^[a-z0-9-]+$/;
|
|
8
|
+
function printUsage() {
|
|
9
|
+
console.log("Usage: buildspace init --app <slug> [--dir <path>]");
|
|
10
|
+
console.log("");
|
|
11
|
+
console.log("Options:");
|
|
12
|
+
console.log(" --app <slug> App slug to clone");
|
|
13
|
+
console.log(" --dir <path> Clone destination directory (optional)");
|
|
14
|
+
}
|
|
15
|
+
function validateSlug(slug) {
|
|
16
|
+
return APP_SLUG_PATTERN.test(slug);
|
|
17
|
+
}
|
|
18
|
+
async function diagnoseGitBaseUrl(gitBaseUrl) {
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(gitBaseUrl, { method: "GET", redirect: "manual" });
|
|
21
|
+
const serverHeader = response.headers.get("server") ?? "";
|
|
22
|
+
const vercelError = response.headers.get("x-vercel-error") ?? "";
|
|
23
|
+
if (serverHeader.toLowerCase().includes("vercel") || vercelError.length > 0) {
|
|
24
|
+
console.error("Detected Vercel on the configured git URL.");
|
|
25
|
+
console.error(`Configured git URL (${gitBaseUrl}) is likely still pointed to Vercel, not Railway.`);
|
|
26
|
+
console.error("Fix by moving the git domain to the Railway runtime service.");
|
|
27
|
+
console.error("Temporary workaround:");
|
|
28
|
+
console.error(" buildspace config set-url --url https://buildspace.studio --git-url https://api.buildspace.studio");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (response.status === 404 && gitBaseUrl.includes("api.buildspace.studio")) {
|
|
32
|
+
console.error("Git routes may not be deployed on your runtime service yet.");
|
|
33
|
+
console.error("Deploy latest runtime code to Railway, then retry.");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (response.status === 503) {
|
|
37
|
+
const bodyText = await response.text();
|
|
38
|
+
if (bodyText.toLowerCase().includes("git starter template is not configured")) {
|
|
39
|
+
console.error("Git starter template is not configured.");
|
|
40
|
+
console.error("Set BUILDSPACE_STARTER_TEMPLATE_OWNER and BUILDSPACE_STARTER_TEMPLATE_REPO, then retry.");
|
|
41
|
+
}
|
|
42
|
+
if (bodyText.toLowerCase().includes("git hosting is not configured")) {
|
|
43
|
+
console.error("Runtime git hosting is not configured.");
|
|
44
|
+
console.error("Set GitHub App env vars on the runtime Railway service, then redeploy.");
|
|
45
|
+
console.error("Required env vars: BUILDSPACE_GITHUB_APP_ID, BUILDSPACE_GITHUB_APP_PRIVATE_KEY, BUILDSPACE_GITHUB_ORG");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
console.error("Unable to validate git URL automatically.");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function runInitCommand(args) {
|
|
54
|
+
if (hasFlag(args, "--help", "-h", "help")) {
|
|
55
|
+
printUsage();
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
const appSlug = readFlag(args, "--app")?.trim();
|
|
59
|
+
const directory = readFlag(args, "--dir")?.trim();
|
|
60
|
+
if (!appSlug) {
|
|
61
|
+
console.error("Missing required --app <slug>.");
|
|
62
|
+
printUsage();
|
|
63
|
+
return 1;
|
|
64
|
+
}
|
|
65
|
+
if (!validateSlug(appSlug)) {
|
|
66
|
+
console.error("Invalid app slug. Use lowercase letters, numbers, and hyphens.");
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
const auth = await resolveStoredAuth();
|
|
70
|
+
const cloneUrl = buildCloneUrl(auth.gitBaseUrl, appSlug);
|
|
71
|
+
const authHeader = getGitAuthorizationHeader(auth.pat);
|
|
72
|
+
const gitArgs = [
|
|
73
|
+
"-c",
|
|
74
|
+
`http.extraHeader=${authHeader}`,
|
|
75
|
+
"-c",
|
|
76
|
+
"credential.helper=",
|
|
77
|
+
"-c",
|
|
78
|
+
"credential.interactive=never",
|
|
79
|
+
"clone",
|
|
80
|
+
cloneUrl,
|
|
81
|
+
...(directory ? [directory] : []),
|
|
82
|
+
];
|
|
83
|
+
console.log(`Cloning ${cloneUrl}...`);
|
|
84
|
+
try {
|
|
85
|
+
await runGit(gitArgs);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
await diagnoseGitBaseUrl(auth.gitBaseUrl);
|
|
89
|
+
throw new Error("Failed to clone BuildSpace app repository");
|
|
90
|
+
}
|
|
91
|
+
const cloneDir = directory ?? appSlug;
|
|
92
|
+
console.log("Clone complete.");
|
|
93
|
+
// Auto-pull dev env vars into .env.local
|
|
94
|
+
try {
|
|
95
|
+
const lookup = await resolveAppBySlug(appSlug, auth);
|
|
96
|
+
const devEnv = lookup.environments.find((e) => e.type === "dev");
|
|
97
|
+
if (devEnv) {
|
|
98
|
+
const vars = await listEnvVars(lookup.app.id, devEnv.id, auth, { reveal: true });
|
|
99
|
+
const pullableVars = vars.filter((v) => v.source === "system" || !v.isSecret);
|
|
100
|
+
if (pullableVars.length > 0) {
|
|
101
|
+
const lines = [
|
|
102
|
+
`# BuildSpace env vars — dev — pulled ${new Date().toISOString()}`,
|
|
103
|
+
"",
|
|
104
|
+
...pullableVars.map((v) => `${v.key}=${v.value ?? v.valuePreview}`),
|
|
105
|
+
"",
|
|
106
|
+
];
|
|
107
|
+
const envFilePath = join(cloneDir, ".env.local");
|
|
108
|
+
await writeFile(envFilePath, lines.join("\n"), "utf8");
|
|
109
|
+
console.log(`Pulled ${pullableVars.length} dev env var(s) to ${envFilePath}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
console.log("Could not pull env vars automatically. Run 'buildspace env pull' manually.");
|
|
115
|
+
}
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { runAppCommand } from "./commands/app.js";
|
|
3
|
+
import { runAuthCommand } from "./commands/auth.js";
|
|
4
|
+
import { runConfigCommand } from "./commands/config.js";
|
|
5
|
+
import { runDeployCommand } from "./commands/deploy.js";
|
|
6
|
+
import { runEnvCommand } from "./commands/env.js";
|
|
7
|
+
import { runInitCommand } from "./commands/init.js";
|
|
8
|
+
function printHelp() {
|
|
9
|
+
console.log("BuildSpace CLI");
|
|
10
|
+
console.log("");
|
|
11
|
+
console.log("Usage: buildspace <command> [options]");
|
|
12
|
+
console.log("");
|
|
13
|
+
console.log("Commands:");
|
|
14
|
+
console.log(" app Manage apps, hosting, and active app selection");
|
|
15
|
+
console.log(" auth Login and manage BuildSpace PATs");
|
|
16
|
+
console.log(" config Manage CLI base URLs and settings");
|
|
17
|
+
console.log(" init Clone a BuildSpace app repository by slug");
|
|
18
|
+
console.log(" deploy Deploy app, status, and logs");
|
|
19
|
+
console.log(" env Manage environment variables for your app");
|
|
20
|
+
console.log("");
|
|
21
|
+
console.log("Run `buildspace <command> --help` for command help.");
|
|
22
|
+
}
|
|
23
|
+
function main() {
|
|
24
|
+
const args = process.argv.slice(2);
|
|
25
|
+
const command = args[0];
|
|
26
|
+
switch (command) {
|
|
27
|
+
case "auth":
|
|
28
|
+
return runAuthCommand(args.slice(1));
|
|
29
|
+
case "app":
|
|
30
|
+
return runAppCommand(args.slice(1));
|
|
31
|
+
case "config":
|
|
32
|
+
return runConfigCommand(args.slice(1));
|
|
33
|
+
case "init":
|
|
34
|
+
return runInitCommand(args.slice(1));
|
|
35
|
+
case "deploy":
|
|
36
|
+
return runDeployCommand(args.slice(1));
|
|
37
|
+
case "env":
|
|
38
|
+
return runEnvCommand(args.slice(1));
|
|
39
|
+
case undefined:
|
|
40
|
+
case "help":
|
|
41
|
+
case "--help":
|
|
42
|
+
case "-h":
|
|
43
|
+
printHelp();
|
|
44
|
+
return 0;
|
|
45
|
+
default:
|
|
46
|
+
console.error(`Unknown command: ${command}`);
|
|
47
|
+
printHelp();
|
|
48
|
+
return 1;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
Promise.resolve(main())
|
|
52
|
+
.then((exitCode) => {
|
|
53
|
+
process.exitCode = exitCode;
|
|
54
|
+
})
|
|
55
|
+
.catch((error) => {
|
|
56
|
+
const message = error instanceof Error ? error.message : "Unexpected CLI failure";
|
|
57
|
+
console.error(`Error: ${message}`);
|
|
58
|
+
process.exitCode = 1;
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { ResolvedAuth } from "./auth.js";
|
|
2
|
+
export interface AppSummary {
|
|
3
|
+
createdAt?: string | Date;
|
|
4
|
+
description?: string | null;
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
userCount?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AppLookupResult {
|
|
11
|
+
app: AppSummary;
|
|
12
|
+
environments: Array<{
|
|
13
|
+
id: string;
|
|
14
|
+
type: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export interface CreatedAppResult {
|
|
18
|
+
app: AppSummary & {
|
|
19
|
+
category?: string | null;
|
|
20
|
+
};
|
|
21
|
+
environments: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
type: string;
|
|
24
|
+
}>;
|
|
25
|
+
keys: Array<{
|
|
26
|
+
environment: string;
|
|
27
|
+
key: string;
|
|
28
|
+
type: string;
|
|
29
|
+
}>;
|
|
30
|
+
setupWarnings?: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface EnvVar {
|
|
33
|
+
id: string;
|
|
34
|
+
isSecret: boolean;
|
|
35
|
+
key: string;
|
|
36
|
+
source: "system" | "creator";
|
|
37
|
+
status: "active" | "revoked";
|
|
38
|
+
value?: string;
|
|
39
|
+
valuePreview: string;
|
|
40
|
+
}
|
|
41
|
+
export interface HostingDeploymentSummary {
|
|
42
|
+
createdAt: string;
|
|
43
|
+
deploymentUrl: string | null;
|
|
44
|
+
errorMessage: string | null;
|
|
45
|
+
id: string;
|
|
46
|
+
status: string;
|
|
47
|
+
trigger: string;
|
|
48
|
+
}
|
|
49
|
+
export interface HostingEnvironmentState {
|
|
50
|
+
deployments?: HostingDeploymentSummary[];
|
|
51
|
+
envId: string;
|
|
52
|
+
envType: string;
|
|
53
|
+
hosting: {
|
|
54
|
+
config: Record<string, unknown>;
|
|
55
|
+
id: string;
|
|
56
|
+
lastError: string | null;
|
|
57
|
+
managedDomain: string | null;
|
|
58
|
+
provider: string;
|
|
59
|
+
providerEnvironmentId: string | null;
|
|
60
|
+
providerProjectId: string | null;
|
|
61
|
+
providerProjectName: string | null;
|
|
62
|
+
publicUrl: string | null;
|
|
63
|
+
status: string;
|
|
64
|
+
} | null;
|
|
65
|
+
}
|
|
66
|
+
export interface HostingStateResult {
|
|
67
|
+
appName: string;
|
|
68
|
+
appSlug: string;
|
|
69
|
+
environments: HostingEnvironmentState[];
|
|
70
|
+
}
|
|
71
|
+
type ApiAuth = Pick<ResolvedAuth, "apiBaseUrl" | "pat">;
|
|
72
|
+
export declare function listApps(auth: ApiAuth): Promise<AppSummary[]>;
|
|
73
|
+
export declare function resolveAppBySlug(slug: string, auth: ApiAuth): Promise<AppLookupResult>;
|
|
74
|
+
export declare function createApp(input: {
|
|
75
|
+
allowedRedirectUris?: string[];
|
|
76
|
+
category?: string;
|
|
77
|
+
description?: string;
|
|
78
|
+
name: string;
|
|
79
|
+
slug?: string;
|
|
80
|
+
}, auth: ApiAuth): Promise<CreatedAppResult>;
|
|
81
|
+
export declare function deleteApp(input: {
|
|
82
|
+
appId: string;
|
|
83
|
+
confirmSlug: string;
|
|
84
|
+
deleteNote?: string;
|
|
85
|
+
}, auth: ApiAuth): Promise<void>;
|
|
86
|
+
export declare function getHostingState(appId: string, auth: ApiAuth): Promise<HostingStateResult>;
|
|
87
|
+
export declare function enableHosting(input: {
|
|
88
|
+
appId: string;
|
|
89
|
+
envType: "dev" | "prod";
|
|
90
|
+
}, auth: ApiAuth): Promise<{
|
|
91
|
+
success?: boolean;
|
|
92
|
+
warnings?: string[];
|
|
93
|
+
}>;
|
|
94
|
+
export declare function disableHosting(input: {
|
|
95
|
+
appId: string;
|
|
96
|
+
envType: "dev" | "prod";
|
|
97
|
+
}, auth: ApiAuth): Promise<{
|
|
98
|
+
success?: boolean;
|
|
99
|
+
}>;
|
|
100
|
+
export declare function listEnvVars(appId: string, envId: string, auth: ApiAuth, options?: {
|
|
101
|
+
reveal?: boolean;
|
|
102
|
+
}): Promise<EnvVar[]>;
|
|
103
|
+
export declare function setEnvVar(appId: string, envId: string, key: string, value: string, isSecret: boolean | undefined, auth: ApiAuth): Promise<EnvVar>;
|
|
104
|
+
export declare function unsetEnvVar(appId: string, envId: string, key: string, auth: ApiAuth): Promise<void>;
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
async function apiRequest(auth, path, options, skipJsonContentType = false) {
|
|
2
|
+
const url = `${auth.apiBaseUrl}${path}`;
|
|
3
|
+
const response = await fetch(url, {
|
|
4
|
+
...options,
|
|
5
|
+
headers: {
|
|
6
|
+
Authorization: `Bearer ${auth.pat}`,
|
|
7
|
+
...(skipJsonContentType ? {} : { "Content-Type": "application/json" }),
|
|
8
|
+
...options?.headers,
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
const body = ((await response.json().catch(() => ({}))) ?? {});
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
const message = typeof body.error === "string" ? body.error : `HTTP ${response.status}`;
|
|
14
|
+
throw new Error(message);
|
|
15
|
+
}
|
|
16
|
+
return body;
|
|
17
|
+
}
|
|
18
|
+
export async function listApps(auth) {
|
|
19
|
+
const result = await apiRequest(auth, "/api/v1/apps", {
|
|
20
|
+
method: "GET",
|
|
21
|
+
});
|
|
22
|
+
return result.apps;
|
|
23
|
+
}
|
|
24
|
+
export function resolveAppBySlug(slug, auth) {
|
|
25
|
+
return apiRequest(auth, `/api/v1/apps/lookup?slug=${encodeURIComponent(slug)}`, {
|
|
26
|
+
method: "GET",
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export function createApp(input, auth) {
|
|
30
|
+
return apiRequest(auth, "/api/v1/apps", {
|
|
31
|
+
method: "POST",
|
|
32
|
+
body: JSON.stringify(input),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export async function deleteApp(input, auth) {
|
|
36
|
+
await apiRequest(auth, `/api/v1/apps/${input.appId}`, {
|
|
37
|
+
method: "DELETE",
|
|
38
|
+
body: JSON.stringify({ confirmSlug: input.confirmSlug, deleteNote: input.deleteNote }),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export async function getHostingState(appId, auth) {
|
|
42
|
+
const result = await apiRequest(auth, `/api/v1/apps/${appId}/hosting`, { method: "GET" });
|
|
43
|
+
return result.hosting;
|
|
44
|
+
}
|
|
45
|
+
export function enableHosting(input, auth) {
|
|
46
|
+
return apiRequest(auth, `/api/v1/apps/${input.appId}/hosting/enable`, {
|
|
47
|
+
method: "POST",
|
|
48
|
+
body: JSON.stringify({ envType: input.envType }),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export function disableHosting(input, auth) {
|
|
52
|
+
return apiRequest(auth, `/api/v1/apps/${input.appId}/hosting/disable`, {
|
|
53
|
+
method: "POST",
|
|
54
|
+
body: JSON.stringify({ envType: input.envType }),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export async function listEnvVars(appId, envId, auth, options) {
|
|
58
|
+
const params = new URLSearchParams({ envId });
|
|
59
|
+
if (options?.reveal) {
|
|
60
|
+
params.set("reveal", "true");
|
|
61
|
+
}
|
|
62
|
+
const result = await apiRequest(auth, `/api/v1/apps/${appId}/env?${params.toString()}`, { method: "GET" });
|
|
63
|
+
return result.vars;
|
|
64
|
+
}
|
|
65
|
+
export async function setEnvVar(appId, envId, key, value, isSecret, auth) {
|
|
66
|
+
const result = await apiRequest(auth, `/api/v1/apps/${appId}/env`, {
|
|
67
|
+
method: "POST",
|
|
68
|
+
body: JSON.stringify({ envId, key, value, isSecret }),
|
|
69
|
+
});
|
|
70
|
+
return result.envVar;
|
|
71
|
+
}
|
|
72
|
+
export async function unsetEnvVar(appId, envId, key, auth) {
|
|
73
|
+
await apiRequest(auth, `/api/v1/apps/${appId}/env/${encodeURIComponent(key)}?envId=${envId}`, { method: "DELETE" });
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type AppLookupResult } from "./api.js";
|
|
2
|
+
import type { ResolvedAuth } from "./auth.js";
|
|
3
|
+
import { type ActiveAppConfig } from "./config.js";
|
|
4
|
+
export type AppResolutionSource = "active" | "flag" | "git";
|
|
5
|
+
export interface ResolvedAppContext extends AppLookupResult {
|
|
6
|
+
source: AppResolutionSource;
|
|
7
|
+
}
|
|
8
|
+
export declare function isValidAppSlug(value: string): boolean;
|
|
9
|
+
export declare function parseAppSlugFromRemote(remoteUrl: string): string | null;
|
|
10
|
+
export declare function inferAppSlugFromGitRemote(): Promise<string | null>;
|
|
11
|
+
export declare function setActiveApp(app: {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
slug: string;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
export declare function clearActiveApp(): Promise<void>;
|
|
17
|
+
export declare function getActiveApp(): Promise<ActiveAppConfig | null>;
|
|
18
|
+
export declare function resolveAppSlugInput(args: string[]): Promise<{
|
|
19
|
+
slug: string;
|
|
20
|
+
source: AppResolutionSource;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function resolveAppContext(args: string[], auth: ResolvedAuth): Promise<ResolvedAppContext>;
|
|
23
|
+
export declare function validateAppForSelection(slug: string, auth: ResolvedAuth): Promise<AppLookupResult>;
|
|
24
|
+
export declare function listAppsWithActive(auth: ResolvedAuth): Promise<{
|
|
25
|
+
apps: import("./api.js").AppSummary[];
|
|
26
|
+
activeApp: ActiveAppConfig | null;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/lib/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAA8B,MAAM,UAAU,CAAC;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,aAAa,CAAC;AAO5E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5D,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBvE;AAWD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxE;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjG;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAWpD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAGpE;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC,CAuBD;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAmB7B;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,4BAMvE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,YAAY;;;GAM1D"}
|
package/dist/lib/app.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { listApps, resolveAppBySlug } from "./api.js";
|
|
2
|
+
import { readFlag } from "./args.js";
|
|
3
|
+
import { readConfig, writeConfig } from "./config.js";
|
|
4
|
+
import { runGit, runGitCapture } from "./git.js";
|
|
5
|
+
const APP_SLUG_PATTERN = /^[a-z0-9-]+$/;
|
|
6
|
+
const SCP_REMOTE_SLUG_REGEX = /[:/]([^/:]+)\.git$/;
|
|
7
|
+
const TRAILING_SLASH_REGEX = /\/+$/;
|
|
8
|
+
export function isValidAppSlug(value) {
|
|
9
|
+
return APP_SLUG_PATTERN.test(value);
|
|
10
|
+
}
|
|
11
|
+
export function parseAppSlugFromRemote(remoteUrl) {
|
|
12
|
+
const trimmed = remoteUrl.trim();
|
|
13
|
+
if (trimmed.length === 0) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const parsed = new URL(trimmed);
|
|
18
|
+
const path = parsed.pathname.replace(TRAILING_SLASH_REGEX, "");
|
|
19
|
+
const repoSegment = path.split("/").pop();
|
|
20
|
+
if (!repoSegment?.endsWith(".git")) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return repoSegment.slice(0, -4);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
const match = trimmed.match(SCP_REMOTE_SLUG_REGEX);
|
|
27
|
+
return match?.[1] ?? null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function isGitRepo() {
|
|
31
|
+
try {
|
|
32
|
+
await runGit(["rev-parse", "--is-inside-work-tree"], { quiet: true });
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function inferAppSlugFromGitRemote() {
|
|
40
|
+
const insideGitRepo = await isGitRepo();
|
|
41
|
+
if (!insideGitRepo) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const originUrl = await runGitCapture(["config", "--get", "remote.origin.url"]);
|
|
46
|
+
const slug = parseAppSlugFromRemote(originUrl);
|
|
47
|
+
return slug && isValidAppSlug(slug) ? slug : null;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function setActiveApp(app) {
|
|
54
|
+
const config = await readConfig();
|
|
55
|
+
const activeApp = {
|
|
56
|
+
id: app.id,
|
|
57
|
+
name: app.name,
|
|
58
|
+
slug: app.slug,
|
|
59
|
+
selectedAt: new Date().toISOString(),
|
|
60
|
+
};
|
|
61
|
+
await writeConfig({
|
|
62
|
+
...config,
|
|
63
|
+
activeApp,
|
|
64
|
+
updatedAt: new Date().toISOString(),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export async function clearActiveApp() {
|
|
68
|
+
const config = await readConfig();
|
|
69
|
+
if (!config.activeApp) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
await writeConfig({
|
|
73
|
+
...config,
|
|
74
|
+
activeApp: undefined,
|
|
75
|
+
updatedAt: new Date().toISOString(),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export async function getActiveApp() {
|
|
79
|
+
const config = await readConfig();
|
|
80
|
+
return config.activeApp ?? null;
|
|
81
|
+
}
|
|
82
|
+
export async function resolveAppSlugInput(args) {
|
|
83
|
+
const explicit = readFlag(args, "--app")?.trim();
|
|
84
|
+
if (explicit) {
|
|
85
|
+
if (!isValidAppSlug(explicit)) {
|
|
86
|
+
throw new Error("Invalid app slug. Use lowercase letters, numbers, and hyphens.");
|
|
87
|
+
}
|
|
88
|
+
return { slug: explicit, source: "flag" };
|
|
89
|
+
}
|
|
90
|
+
const gitSlug = await inferAppSlugFromGitRemote();
|
|
91
|
+
if (gitSlug) {
|
|
92
|
+
return { slug: gitSlug, source: "git" };
|
|
93
|
+
}
|
|
94
|
+
const activeApp = await getActiveApp();
|
|
95
|
+
if (activeApp?.slug) {
|
|
96
|
+
return { slug: activeApp.slug, source: "active" };
|
|
97
|
+
}
|
|
98
|
+
throw new Error("Could not determine app. Pass --app <slug>, run from inside a BuildSpace app directory, or select one with `buildspace app use <slug>`.");
|
|
99
|
+
}
|
|
100
|
+
export async function resolveAppContext(args, auth) {
|
|
101
|
+
const { slug, source } = await resolveAppSlugInput(args);
|
|
102
|
+
try {
|
|
103
|
+
const result = await resolveAppBySlug(slug, auth);
|
|
104
|
+
return {
|
|
105
|
+
...result,
|
|
106
|
+
source,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (source === "active") {
|
|
111
|
+
const activeApp = await getActiveApp();
|
|
112
|
+
if (activeApp?.slug === slug) {
|
|
113
|
+
await clearActiveApp();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function validateAppForSelection(slug, auth) {
|
|
120
|
+
if (!isValidAppSlug(slug)) {
|
|
121
|
+
throw new Error("Invalid app slug. Use lowercase letters, numbers, and hyphens.");
|
|
122
|
+
}
|
|
123
|
+
return resolveAppBySlug(slug, auth);
|
|
124
|
+
}
|
|
125
|
+
export async function listAppsWithActive(auth) {
|
|
126
|
+
const [apps, activeApp] = await Promise.all([listApps(auth), getActiveApp()]);
|
|
127
|
+
return {
|
|
128
|
+
apps,
|
|
129
|
+
activeApp,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/lib/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAapE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnE"}
|
package/dist/lib/args.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function readFlag(args, flag) {
|
|
2
|
+
const exactIndex = args.indexOf(flag);
|
|
3
|
+
if (exactIndex >= 0) {
|
|
4
|
+
return args[exactIndex + 1] ?? null;
|
|
5
|
+
}
|
|
6
|
+
const prefix = `${flag}=`;
|
|
7
|
+
const prefixed = args.find((value) => value.startsWith(prefix));
|
|
8
|
+
if (!prefixed) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
return prefixed.slice(prefix.length);
|
|
12
|
+
}
|
|
13
|
+
export function hasFlag(args, ...flags) {
|
|
14
|
+
return flags.some((flag) => args.includes(flag));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/lib/args.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,IAAc,EAAE,IAAY;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,GAAG,KAAe;IACxD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ResolvedAuth {
|
|
2
|
+
apiBaseUrl: string;
|
|
3
|
+
gitBaseUrl: string;
|
|
4
|
+
pat: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function resolveStoredAuth(): Promise<ResolvedAuth>;
|
|
7
|
+
export declare function getGitAuthorizationHeader(pat: string): string;
|
|
8
|
+
export declare function buildCloneUrl(gitBaseUrl: string, appSlug: string): string;
|
|
9
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,CAAC,CAa/D;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE"}
|
package/dist/lib/auth.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { readConfig, resolveApiBaseUrl, resolveGitBaseUrl } from "./config.js";
|
|
2
|
+
export async function resolveStoredAuth() {
|
|
3
|
+
const config = await readConfig();
|
|
4
|
+
const pat = config.pat?.trim();
|
|
5
|
+
if (!pat) {
|
|
6
|
+
throw new Error("No BuildSpace token configured. Run `buildspace auth set` first.");
|
|
7
|
+
}
|
|
8
|
+
return {
|
|
9
|
+
apiBaseUrl: resolveApiBaseUrl(config),
|
|
10
|
+
pat,
|
|
11
|
+
gitBaseUrl: resolveGitBaseUrl(config),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function getGitAuthorizationHeader(pat) {
|
|
15
|
+
const credentials = Buffer.from(`buildspace:${pat}`).toString("base64");
|
|
16
|
+
return `Authorization: Basic ${credentials}`;
|
|
17
|
+
}
|
|
18
|
+
export function buildCloneUrl(gitBaseUrl, appSlug) {
|
|
19
|
+
return `${gitBaseUrl}/${appSlug}.git`;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQ/E,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAE/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO;QACL,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC;QACrC,GAAG;QACH,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxE,OAAO,wBAAwB,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB,EAAE,OAAe;IAC/D,OAAO,GAAG,UAAU,IAAI,OAAO,MAAM,CAAC;AACxC,CAAC"}
|