@capuchoo/cli 0.8.0 → 0.9.1
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 +211 -23
- package/dist/cli/members.d.ts +23 -0
- package/dist/cli/members.d.ts.map +1 -0
- package/dist/cli/members.js +38 -0
- package/dist/cli/members.js.map +1 -0
- package/dist/cli/onboarding.d.ts +41 -0
- package/dist/cli/onboarding.d.ts.map +1 -0
- package/dist/cli/onboarding.js +94 -0
- package/dist/cli/onboarding.js.map +1 -0
- package/dist/cli/team.d.ts +16 -0
- package/dist/cli/team.d.ts.map +1 -0
- package/dist/cli/team.js +32 -0
- package/dist/cli/team.js.map +1 -0
- package/dist/commands/app/grant.d.ts +11 -0
- package/dist/commands/app/grant.d.ts.map +1 -0
- package/dist/commands/app/grant.js +31 -0
- package/dist/commands/app/grant.js.map +1 -0
- package/dist/commands/app/revoke.d.ts +13 -0
- package/dist/commands/app/revoke.d.ts.map +1 -0
- package/dist/commands/app/revoke.js +40 -0
- package/dist/commands/app/revoke.js.map +1 -0
- package/dist/commands/app/roles.d.ts +7 -0
- package/dist/commands/app/roles.d.ts.map +1 -0
- package/dist/commands/app/roles.js +30 -0
- package/dist/commands/app/roles.js.map +1 -0
- package/dist/commands/auth/issue.d.ts +12 -0
- package/dist/commands/auth/issue.d.ts.map +1 -0
- package/dist/commands/auth/issue.js +52 -0
- package/dist/commands/auth/issue.js.map +1 -0
- package/dist/commands/auth/keys.d.ts +7 -0
- package/dist/commands/auth/keys.d.ts.map +1 -0
- package/dist/commands/auth/keys.js +39 -0
- package/dist/commands/auth/keys.js.map +1 -0
- package/dist/commands/auth/login.d.ts +20 -0
- package/dist/commands/auth/login.d.ts.map +1 -1
- package/dist/commands/auth/login.js +90 -11
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/revoke.d.ts +13 -0
- package/dist/commands/auth/revoke.d.ts.map +1 -0
- package/dist/commands/auth/revoke.js +48 -0
- package/dist/commands/auth/revoke.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +87 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/menu.d.ts +3 -0
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +70 -15
- package/dist/commands/menu.js.map +1 -1
- package/dist/commands/org/invite.d.ts +14 -0
- package/dist/commands/org/invite.d.ts.map +1 -0
- package/dist/commands/org/invite.js +52 -0
- package/dist/commands/org/invite.js.map +1 -0
- package/dist/commands/org/members.d.ts +10 -0
- package/dist/commands/org/members.d.ts.map +1 -0
- package/dist/commands/org/members.js +49 -0
- package/dist/commands/org/members.js.map +1 -0
- package/dist/pipeline/app-identity.d.ts +35 -0
- package/dist/pipeline/app-identity.d.ts.map +1 -0
- package/dist/pipeline/app-identity.js +109 -0
- package/dist/pipeline/app-identity.js.map +1 -0
- package/dist/pipeline/capacitor-support.d.ts +1 -1
- package/dist/pipeline/capacitor-support.js +1 -1
- package/dist/services/cloud.d.ts +69 -1
- package/dist/services/cloud.d.ts.map +1 -1
- package/dist/services/cloud.js +67 -1
- package/dist/services/cloud.js.map +1 -1
- package/dist/utils/http.d.ts +5 -0
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +13 -2
- package/dist/utils/http.js.map +1 -1
- package/oclif.manifest.json +292 -2
- package/package.json +5 -5
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Flags } from "@oclif/core";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { BaseCommand } from "../../base-command.js";
|
|
4
|
+
import { membershipRows } from "../../cli/members.js";
|
|
5
|
+
import { selectOne, whileWaiting } from "../../cli/prompts.js";
|
|
6
|
+
import { requireCloud } from "../../cli/team.js";
|
|
7
|
+
export default class OrgMembers extends BaseCommand {
|
|
8
|
+
static description = "List the people in an organization";
|
|
9
|
+
static examples = ["<%= config.bin %> org members"];
|
|
10
|
+
static flags = {
|
|
11
|
+
org: Flags.string({ description: "Organization by name or id" }),
|
|
12
|
+
};
|
|
13
|
+
async run() {
|
|
14
|
+
const { flags } = await this.parse(OrgMembers);
|
|
15
|
+
const cloud = requireCloud(this);
|
|
16
|
+
const organizations = await whileWaiting("Reading organizations...", cloud.organizations());
|
|
17
|
+
if (organizations.length === 0)
|
|
18
|
+
this.error("This account is in no organizations.");
|
|
19
|
+
const wanted = flags.org?.trim().toLowerCase();
|
|
20
|
+
const organization = wanted
|
|
21
|
+
? organizations.find((org) => org.name.toLowerCase() === wanted || org.id.toLowerCase() === wanted)
|
|
22
|
+
: organizations.length === 1
|
|
23
|
+
? organizations[0]
|
|
24
|
+
: await selectOne("Which organization?", organizations.map((org) => ({ value: org, label: org.name, hint: org.role })), "--org");
|
|
25
|
+
if (!organization) {
|
|
26
|
+
this.error(`No organization called "${flags.org}". ` +
|
|
27
|
+
`Available: ${organizations.map((org) => org.name).join(", ")}.`);
|
|
28
|
+
}
|
|
29
|
+
const members = await whileWaiting("Reading members...", cloud.orgMembers(organization.id));
|
|
30
|
+
const rows = membershipRows(members);
|
|
31
|
+
this.log("");
|
|
32
|
+
this.log(` ${chalk.bold(organization.name)} ${chalk.dim(`- you are ${organization.role}`)}`);
|
|
33
|
+
this.log("");
|
|
34
|
+
if (rows.length === 0) {
|
|
35
|
+
this.log(chalk.dim(" No members."));
|
|
36
|
+
this.log("");
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const width = Math.max(...rows.map((row) => row.email.length));
|
|
40
|
+
for (const row of rows) {
|
|
41
|
+
const elevated = row.role === "owner" || row.role === "admin";
|
|
42
|
+
this.log(` ${row.email.padEnd(width)} ${elevated ? chalk.yellow(row.role) : chalk.dim(row.role)}`);
|
|
43
|
+
}
|
|
44
|
+
this.log("");
|
|
45
|
+
this.log(chalk.dim(" Owners and admins have admin rights on every app in the organization."));
|
|
46
|
+
this.log("");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../src/commands/org/members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Where a detected value came from, so a prompt can say why it is suggesting it. */
|
|
2
|
+
export interface Detected {
|
|
3
|
+
value: string;
|
|
4
|
+
source: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AppIdentity {
|
|
7
|
+
appId?: Detected;
|
|
8
|
+
appName?: Detected;
|
|
9
|
+
}
|
|
10
|
+
export interface ProjectFiles {
|
|
11
|
+
/** `capacitor.config.ts` / `.js` / `.json`. */
|
|
12
|
+
capacitorConfig?: string | undefined;
|
|
13
|
+
/** `android/app/build.gradle`. */
|
|
14
|
+
buildGradle?: string | undefined;
|
|
15
|
+
/** The production flavour's env file. */
|
|
16
|
+
envFile?: string | undefined;
|
|
17
|
+
packageJson?: string | undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The bundle identifier and name this project already declares.
|
|
21
|
+
*
|
|
22
|
+
* Order is by authority: `applicationId` in Gradle is what actually ships in the
|
|
23
|
+
* APK and what a device reports, so it wins over the Capacitor config, which
|
|
24
|
+
* wins over an env file that only affects a build.
|
|
25
|
+
*/
|
|
26
|
+
export declare function detectIdentity(files: ProjectFiles): AppIdentity;
|
|
27
|
+
/**
|
|
28
|
+
* Bundle ids found in the project that disagree with the chosen one.
|
|
29
|
+
*
|
|
30
|
+
* The device reports whatever is compiled into the binary, so a Gradle
|
|
31
|
+
* `applicationId` that differs from the linked app is a mismatch the server
|
|
32
|
+
* answers with "App not found" - and only on a device.
|
|
33
|
+
*/
|
|
34
|
+
export declare function conflictingIds(files: ProjectFiles, chosen: string): Detected[];
|
|
35
|
+
//# sourceMappingURL=app-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-identity.d.ts","sourceRoot":"","sources":["../../src/pipeline/app-identity.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AA8BD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAgD/D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAqB9E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A string literal for `key`, including the fallback in
|
|
3
|
+
* `key: process.env.X ?? "literal"`.
|
|
4
|
+
*/
|
|
5
|
+
function literalFor(source, key) {
|
|
6
|
+
const line = new RegExp(`\\b${key}\\s*:\\s*([^,\\n]+)`).exec(source);
|
|
7
|
+
if (!line)
|
|
8
|
+
return null;
|
|
9
|
+
// The last quoted string on the line: for a `??` chain that is the fallback,
|
|
10
|
+
// and for a plain assignment it is the value itself.
|
|
11
|
+
const quoted = [...line[1].matchAll(/["'`]([^"'`]+)["'`]/g)];
|
|
12
|
+
return quoted.length > 0 ? quoted[quoted.length - 1][1] : null;
|
|
13
|
+
}
|
|
14
|
+
function envValue(source, key) {
|
|
15
|
+
for (const line of source.split(/\r?\n/)) {
|
|
16
|
+
if (line.trimStart().startsWith("#"))
|
|
17
|
+
continue;
|
|
18
|
+
const match = new RegExp(`^\\s*${key}\\s*=\\s*(.*)$`).exec(line);
|
|
19
|
+
if (match) {
|
|
20
|
+
const value = match[1].trim().replace(/^(['"])(.*)\1$/, "$2");
|
|
21
|
+
if (value)
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const BUNDLE_ID = /^[a-z][\w]*(\.[a-z][\w]*)+$/i;
|
|
28
|
+
/**
|
|
29
|
+
* The bundle identifier and name this project already declares.
|
|
30
|
+
*
|
|
31
|
+
* Order is by authority: `applicationId` in Gradle is what actually ships in the
|
|
32
|
+
* APK and what a device reports, so it wins over the Capacitor config, which
|
|
33
|
+
* wins over an env file that only affects a build.
|
|
34
|
+
*/
|
|
35
|
+
export function detectIdentity(files) {
|
|
36
|
+
const identity = {};
|
|
37
|
+
const idCandidates = [];
|
|
38
|
+
if (files.buildGradle) {
|
|
39
|
+
const match = /\bapplicationId\s+["']([^"']+)["']/.exec(files.buildGradle);
|
|
40
|
+
if (match)
|
|
41
|
+
idCandidates.push({ value: match[1], source: "android/app/build.gradle" });
|
|
42
|
+
}
|
|
43
|
+
if (files.capacitorConfig) {
|
|
44
|
+
const value = literalFor(files.capacitorConfig, "appId");
|
|
45
|
+
if (value)
|
|
46
|
+
idCandidates.push({ value, source: "capacitor.config" });
|
|
47
|
+
}
|
|
48
|
+
if (files.envFile) {
|
|
49
|
+
const value = envValue(files.envFile, "VITE_APP_ID");
|
|
50
|
+
if (value)
|
|
51
|
+
idCandidates.push({ value, source: "the production env file" });
|
|
52
|
+
}
|
|
53
|
+
const appId = idCandidates.find((candidate) => BUNDLE_ID.test(candidate.value));
|
|
54
|
+
if (appId)
|
|
55
|
+
identity.appId = appId;
|
|
56
|
+
const nameCandidates = [];
|
|
57
|
+
if (files.capacitorConfig) {
|
|
58
|
+
const value = literalFor(files.capacitorConfig, "appName");
|
|
59
|
+
if (value)
|
|
60
|
+
nameCandidates.push({ value, source: "capacitor.config" });
|
|
61
|
+
}
|
|
62
|
+
if (files.envFile) {
|
|
63
|
+
const value = envValue(files.envFile, "VITE_APP_NAME");
|
|
64
|
+
if (value)
|
|
65
|
+
nameCandidates.push({ value, source: "the production env file" });
|
|
66
|
+
}
|
|
67
|
+
if (files.packageJson) {
|
|
68
|
+
try {
|
|
69
|
+
const parsed = JSON.parse(files.packageJson);
|
|
70
|
+
if (parsed.name)
|
|
71
|
+
nameCandidates.push({ value: parsed.name, source: "package.json" });
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// A malformed package.json is not this function's problem.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const appName = nameCandidates[0];
|
|
78
|
+
if (appName)
|
|
79
|
+
identity.appName = appName;
|
|
80
|
+
return identity;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Bundle ids found in the project that disagree with the chosen one.
|
|
84
|
+
*
|
|
85
|
+
* The device reports whatever is compiled into the binary, so a Gradle
|
|
86
|
+
* `applicationId` that differs from the linked app is a mismatch the server
|
|
87
|
+
* answers with "App not found" - and only on a device.
|
|
88
|
+
*/
|
|
89
|
+
export function conflictingIds(files, chosen) {
|
|
90
|
+
const found = [];
|
|
91
|
+
if (files.buildGradle) {
|
|
92
|
+
const match = /\bapplicationId\s+["']([^"']+)["']/.exec(files.buildGradle);
|
|
93
|
+
if (match && match[1] !== chosen) {
|
|
94
|
+
found.push({ value: match[1], source: "android/app/build.gradle" });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (files.capacitorConfig) {
|
|
98
|
+
const value = literalFor(files.capacitorConfig, "appId");
|
|
99
|
+
if (value && value !== chosen)
|
|
100
|
+
found.push({ value, source: "capacitor.config" });
|
|
101
|
+
}
|
|
102
|
+
if (files.envFile) {
|
|
103
|
+
const value = envValue(files.envFile, "VITE_APP_ID");
|
|
104
|
+
if (value && value !== chosen)
|
|
105
|
+
found.push({ value, source: "the production env file" });
|
|
106
|
+
}
|
|
107
|
+
return found;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=app-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-identity.js","sourceRoot":"","sources":["../../src/pipeline/app-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* manager believes `latest` is, and pnpm caches registry metadata - so minutes
|
|
24
24
|
* after a release it installs the previous version and says nothing.
|
|
25
25
|
*/
|
|
26
|
-
export declare const RUNTIME_VERSION = "0.6.
|
|
26
|
+
export declare const RUNTIME_VERSION = "0.6.1";
|
|
27
27
|
/** Capacitor majors this toolchain installs for. */
|
|
28
28
|
export declare const SUPPORTED_MAJORS: readonly [7, 8];
|
|
29
29
|
export type CapacitorMajor = (typeof SUPPORTED_MAJORS)[number];
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* manager believes `latest` is, and pnpm caches registry metadata - so minutes
|
|
24
24
|
* after a release it installs the previous version and says nothing.
|
|
25
25
|
*/
|
|
26
|
-
export const RUNTIME_VERSION = "0.6.
|
|
26
|
+
export const RUNTIME_VERSION = "0.6.1";
|
|
27
27
|
/** Capacitor majors this toolchain installs for. */
|
|
28
28
|
export const SUPPORTED_MAJORS = [7, 8];
|
|
29
29
|
/**
|
package/dist/services/cloud.d.ts
CHANGED
|
@@ -1,4 +1,26 @@
|
|
|
1
|
-
import type { CloudApp, CloudChannel, CloudOrganization, CloudRelease, Environment, UserProfile } from "@capuchoo/core";
|
|
1
|
+
import type { AppRole, CloudApp, CloudChannel, CloudOrganization, CloudRelease, Environment, UserProfile } from "@capuchoo/core";
|
|
2
|
+
export type OrgRole = "owner" | "admin" | "member";
|
|
3
|
+
export type { AppRole } from "@capuchoo/core";
|
|
4
|
+
/** A row of organization_members or app_permissions, joined with its user. */
|
|
5
|
+
export interface Membership {
|
|
6
|
+
user_id: string;
|
|
7
|
+
role: string;
|
|
8
|
+
users?: {
|
|
9
|
+
id: string;
|
|
10
|
+
email: string;
|
|
11
|
+
full_name?: string | null;
|
|
12
|
+
} | null;
|
|
13
|
+
}
|
|
14
|
+
export interface ApiKeySummary {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
key_prefix?: string;
|
|
18
|
+
app_id?: string | null;
|
|
19
|
+
/** Role ceiling, or null when the key carries the account's own rights. */
|
|
20
|
+
role?: string | null;
|
|
21
|
+
created_at?: string;
|
|
22
|
+
last_used_at?: string | null;
|
|
23
|
+
}
|
|
2
24
|
/**
|
|
3
25
|
* The Capuchoo API client.
|
|
4
26
|
*
|
|
@@ -27,7 +49,53 @@ export declare class CloudClient {
|
|
|
27
49
|
* sends you looking in the wrong place with confidence.
|
|
28
50
|
*/
|
|
29
51
|
whoami(): Promise<UserProfile | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Exchanges an email and password for a session token.
|
|
54
|
+
*
|
|
55
|
+
* Static because it runs before any credential exists: the whole point is to
|
|
56
|
+
* get one. `authenticate` accepts the returned Supabase JWT wherever it accepts
|
|
57
|
+
* an API key.
|
|
58
|
+
*/
|
|
59
|
+
static login(endpoint: string, email: string, password: string, timeoutMs?: number): Promise<{
|
|
60
|
+
token: string;
|
|
61
|
+
user: {
|
|
62
|
+
id: string;
|
|
63
|
+
email: string;
|
|
64
|
+
};
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Mints an API key for the signed-in account.
|
|
68
|
+
*
|
|
69
|
+
* A JWT expires; a key does not, so the CLI stores the key and forgets the
|
|
70
|
+
* token. Unscoped by default - the key acts as the account, and the app roles
|
|
71
|
+
* are what restrict it.
|
|
72
|
+
*/
|
|
73
|
+
createApiKey(input: {
|
|
74
|
+
name: string;
|
|
75
|
+
appId?: string | undefined;
|
|
76
|
+
/** Ceiling on what the key may do. Omitted means the account's own rights. */
|
|
77
|
+
role?: AppRole | undefined;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
key: string;
|
|
80
|
+
}>;
|
|
30
81
|
organizations(): Promise<CloudOrganization[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Keys belonging to this account. The plain key is never returned again.
|
|
84
|
+
*
|
|
85
|
+
* Unwrapped here: this endpoint answers `{ success, keys }` while the member
|
|
86
|
+
* and permission lists answer bare arrays.
|
|
87
|
+
*/
|
|
88
|
+
apiKeys(): Promise<ApiKeySummary[]>;
|
|
89
|
+
revokeApiKey(id: string): Promise<void>;
|
|
90
|
+
orgMembers(organizationId: string): Promise<Membership[]>;
|
|
91
|
+
/** Adds by email; the server resolves it. Guarded by requireOrgAdmin. */
|
|
92
|
+
addOrgMember(organizationId: string, email: string, role: OrgRole): Promise<unknown>;
|
|
93
|
+
setOrgMemberRole(organizationId: string, userId: string, role: OrgRole): Promise<unknown>;
|
|
94
|
+
removeOrgMember(organizationId: string, userId: string): Promise<void>;
|
|
95
|
+
appPermissions(cloudAppId: string): Promise<Membership[]>;
|
|
96
|
+
/** Grants by email. Guarded by requireAppAdmin. */
|
|
97
|
+
grantAppRole(cloudAppId: string, email: string, role: AppRole): Promise<unknown>;
|
|
98
|
+
revokeAppRole(cloudAppId: string, userId: string): Promise<void>;
|
|
31
99
|
apps(): Promise<CloudApp[]>;
|
|
32
100
|
createApp(input: {
|
|
33
101
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/services/cloud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAI5C,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;;;;;;;;;OAYG;IACG,MAAM,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAW3C,aAAa,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI7C,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI3B,SAAS,CAAC,KAAK,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KACzB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIrB,gFAAgF;IAChF,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,kBAAkB,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIvE;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;KAC1B,GAAG,OAAO,CAAC,YAAY,CAAC;IAIzB,sFAAsF;IACtF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKvE;;;;;;OAMG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB7E,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;KACnB;IAiBD,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;KACnB;CAiBF"}
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/services/cloud.ts"],"names":[],"mappings":"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"}
|
package/dist/services/cloud.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HttpError, del, get, post, uploadArtifact } from "../utils/http.js";
|
|
1
|
+
import { HttpError, del, get, post, put, uploadArtifact } from "../utils/http.js";
|
|
2
2
|
/**
|
|
3
3
|
* The Capuchoo API client.
|
|
4
4
|
*
|
|
@@ -41,9 +41,75 @@ export class CloudClient {
|
|
|
41
41
|
throw error;
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Exchanges an email and password for a session token.
|
|
46
|
+
*
|
|
47
|
+
* Static because it runs before any credential exists: the whole point is to
|
|
48
|
+
* get one. `authenticate` accepts the returned Supabase JWT wherever it accepts
|
|
49
|
+
* an API key.
|
|
50
|
+
*/
|
|
51
|
+
static async login(endpoint, email, password, timeoutMs) {
|
|
52
|
+
const response = await post("/api/auth/login", { email, password }, { endpoint, apiKey: "", timeoutMs });
|
|
53
|
+
if (!response.token)
|
|
54
|
+
throw new Error("The backend accepted the sign-in but returned no token");
|
|
55
|
+
return {
|
|
56
|
+
token: response.token,
|
|
57
|
+
user: { id: response.user?.id ?? "", email: response.user?.email ?? email },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Mints an API key for the signed-in account.
|
|
62
|
+
*
|
|
63
|
+
* A JWT expires; a key does not, so the CLI stores the key and forgets the
|
|
64
|
+
* token. Unscoped by default - the key acts as the account, and the app roles
|
|
65
|
+
* are what restrict it.
|
|
66
|
+
*/
|
|
67
|
+
createApiKey(input) {
|
|
68
|
+
return post("/api/api-keys", {
|
|
69
|
+
name: input.name,
|
|
70
|
+
...(input.appId ? { app_id: input.appId } : {}),
|
|
71
|
+
...(input.role ? { role: input.role } : {}),
|
|
72
|
+
}, this.options);
|
|
73
|
+
}
|
|
44
74
|
organizations() {
|
|
45
75
|
return get("/api/organizations", this.options);
|
|
46
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Keys belonging to this account. The plain key is never returned again.
|
|
79
|
+
*
|
|
80
|
+
* Unwrapped here: this endpoint answers `{ success, keys }` while the member
|
|
81
|
+
* and permission lists answer bare arrays.
|
|
82
|
+
*/
|
|
83
|
+
async apiKeys() {
|
|
84
|
+
const response = await get("/api/api-keys", this.options);
|
|
85
|
+
return Array.isArray(response) ? response : (response.keys ?? []);
|
|
86
|
+
}
|
|
87
|
+
revokeApiKey(id) {
|
|
88
|
+
return del(`/api/api-keys/${id}`, this.options);
|
|
89
|
+
}
|
|
90
|
+
orgMembers(organizationId) {
|
|
91
|
+
return get(`/api/organizations/${organizationId}/members`, this.options);
|
|
92
|
+
}
|
|
93
|
+
/** Adds by email; the server resolves it. Guarded by requireOrgAdmin. */
|
|
94
|
+
addOrgMember(organizationId, email, role) {
|
|
95
|
+
return post(`/api/organizations/${organizationId}/members`, { email, role }, this.options);
|
|
96
|
+
}
|
|
97
|
+
setOrgMemberRole(organizationId, userId, role) {
|
|
98
|
+
return put(`/api/organizations/${organizationId}/members/${userId}`, { role }, this.options);
|
|
99
|
+
}
|
|
100
|
+
removeOrgMember(organizationId, userId) {
|
|
101
|
+
return del(`/api/organizations/${organizationId}/members/${userId}`, this.options);
|
|
102
|
+
}
|
|
103
|
+
appPermissions(cloudAppId) {
|
|
104
|
+
return get(`/api/apps/${cloudAppId}/permissions`, this.options);
|
|
105
|
+
}
|
|
106
|
+
/** Grants by email. Guarded by requireAppAdmin. */
|
|
107
|
+
grantAppRole(cloudAppId, email, role) {
|
|
108
|
+
return post(`/api/apps/${cloudAppId}/permissions`, { email, role }, this.options);
|
|
109
|
+
}
|
|
110
|
+
revokeAppRole(cloudAppId, userId) {
|
|
111
|
+
return del(`/api/apps/${cloudAppId}/permissions/${userId}`, this.options);
|
|
112
|
+
}
|
|
47
113
|
apps() {
|
|
48
114
|
return get("/api/apps", this.options);
|
|
49
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/services/cloud.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/services/cloud.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/http.d.ts
CHANGED
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
* the previous `fs.createReadStream` plus `maxBodyLength: Infinity` combination
|
|
8
8
|
* worked, but only because the limit was disabled.
|
|
9
9
|
*/
|
|
10
|
+
/** A request that never came back. Distinguishable so a caller can retry it. */
|
|
11
|
+
export declare class TimeoutError extends Error {
|
|
12
|
+
constructor(url: string, timeoutMs: number);
|
|
13
|
+
}
|
|
10
14
|
export declare class HttpError extends Error {
|
|
11
15
|
readonly status: number;
|
|
12
16
|
readonly body: unknown;
|
|
@@ -19,6 +23,7 @@ export interface HttpOptions {
|
|
|
19
23
|
}
|
|
20
24
|
export declare function get<T>(pathname: string, options: HttpOptions): Promise<T>;
|
|
21
25
|
export declare function post<T>(pathname: string, body: unknown, options: HttpOptions): Promise<T>;
|
|
26
|
+
export declare function put<T>(pathname: string, body: unknown, options: HttpOptions): Promise<T>;
|
|
22
27
|
/** A 204 is the success case here, so the caller gets nothing back. */
|
|
23
28
|
export declare function del(pathname: string, options: HttpOptions): Promise<void>;
|
|
24
29
|
export interface UploadResult {
|
package/dist/utils/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;CAM3D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,gFAAgF;AAChF,qBAAa,YAAa,SAAQ,KAAK;gBACzB,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAI3C;AAED,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;CAM3D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoFD,wBAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzF;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAExF;AAED,uEAAuE;AACvE,wBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,YAAY,CAAC,CA8CvB"}
|
package/dist/utils/http.js
CHANGED
|
@@ -10,6 +10,13 @@ import path from "node:path";
|
|
|
10
10
|
* the previous `fs.createReadStream` plus `maxBodyLength: Infinity` combination
|
|
11
11
|
* worked, but only because the limit was disabled.
|
|
12
12
|
*/
|
|
13
|
+
/** A request that never came back. Distinguishable so a caller can retry it. */
|
|
14
|
+
export class TimeoutError extends Error {
|
|
15
|
+
constructor(url, timeoutMs) {
|
|
16
|
+
super(`${url} did not respond within ${Math.round(timeoutMs / 1000)}s`);
|
|
17
|
+
this.name = "TimeoutError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
13
20
|
export class HttpError extends Error {
|
|
14
21
|
status;
|
|
15
22
|
body;
|
|
@@ -58,7 +65,8 @@ function messageFrom(body, fallback) {
|
|
|
58
65
|
}
|
|
59
66
|
async function request(method, url, options) {
|
|
60
67
|
const controller = new AbortController();
|
|
61
|
-
const
|
|
68
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
69
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
62
70
|
try {
|
|
63
71
|
const response = await fetch(url, {
|
|
64
72
|
method,
|
|
@@ -81,7 +89,7 @@ async function request(method, url, options) {
|
|
|
81
89
|
if (error instanceof HttpError)
|
|
82
90
|
throw error;
|
|
83
91
|
if (error instanceof Error && error.name === "AbortError") {
|
|
84
|
-
throw new
|
|
92
|
+
throw new TimeoutError(url, timeoutMs);
|
|
85
93
|
}
|
|
86
94
|
// A DNS or TLS failure surfaces as an opaque "fetch failed"; say which host.
|
|
87
95
|
if (error instanceof TypeError) {
|
|
@@ -99,6 +107,9 @@ export function get(pathname, options) {
|
|
|
99
107
|
export function post(pathname, body, options) {
|
|
100
108
|
return request("POST", `${options.endpoint}${pathname}`, { ...options, body });
|
|
101
109
|
}
|
|
110
|
+
export function put(pathname, body, options) {
|
|
111
|
+
return request("PUT", `${options.endpoint}${pathname}`, { ...options, body });
|
|
112
|
+
}
|
|
102
113
|
/** A 204 is the success case here, so the caller gets nothing back. */
|
|
103
114
|
export async function del(pathname, options) {
|
|
104
115
|
await request("DELETE", `${options.endpoint}${pathname}`, options);
|
package/dist/utils/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;GAQG;AAEH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAS;IACf,IAAI,CAAU;IAEvB,YAAY,OAAe,EAAE,MAAc,EAAE,IAAa;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAQD,KAAK,UAAU,QAAQ,CAAC,QAAkB;IACxC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,SAAS,WAAW,CAAC,IAAa,EAAE,QAAgB;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAA+B,CAAC;QAE/C,sEAAsE;QACtE,6EAA6E;QAC7E,0EAA0E;QAC1E,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;aAClC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACzB,IAAI,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;aACjC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACzB,IAAI,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEnF,IAAI,QAAQ,IAAI,MAAM;YAAE,OAAO,GAAG,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,MAAyC,EACzC,GAAW,EACX,OAAyC;IAEzC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"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"}
|