@glubean/cli 0.7.0 → 0.8.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/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +24 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/load.d.ts +65 -0
- package/dist/commands/load.d.ts.map +1 -0
- package/dist/commands/load.js +462 -0
- package/dist/commands/load.js.map +1 -0
- package/dist/commands/login.d.ts +14 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +110 -49
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/run.d.ts +14 -2
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +216 -122
- package/dist/commands/run.js.map +1 -1
- package/dist/lib/auth.d.ts +57 -0
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +134 -1
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/config.d.ts +17 -6
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +9 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +6 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +6 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/print-plan.d.ts.map +1 -1
- package/dist/lib/print-plan.js +4 -0
- package/dist/lib/print-plan.js.map +1 -1
- package/dist/lib/upload.d.ts +88 -10
- package/dist/lib/upload.d.ts.map +1 -1
- package/dist/lib/upload.js +117 -188
- package/dist/lib/upload.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +57 -7
- package/dist/main.js.map +1 -1
- package/package.json +6 -6
- package/dist/lib/env.d.ts +0 -29
- package/dist/lib/env.d.ts.map +0 -1
- package/dist/lib/env.js +0 -59
- package/dist/lib/env.js.map +0 -1
package/dist/commands/login.js
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* glubean login —
|
|
2
|
+
* glubean login — Sign the CLI in to Glubean Cloud via the device-authorization
|
|
3
|
+
* grant (RFC 8628). The CLI requests a code from the AUTH plane (server-hono),
|
|
4
|
+
* opens the browser to approve it, polls until a `glb_` token is minted, and
|
|
5
|
+
* saves it to ~/.glubean/credentials.json for `--upload`.
|
|
6
|
+
*
|
|
7
|
+
* Login talks to the AUTH url (server-hono); uploads talk to the platform API
|
|
8
|
+
* (`GLUBEAN_API_URL`) — two separate planes. The open platform is token-only and
|
|
9
|
+
* has no login of its own.
|
|
3
10
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { resolveApiUrl, writeCredentials } from "../lib/auth.js";
|
|
11
|
+
import { execFile } from "node:child_process";
|
|
12
|
+
import { resolveApiUrl, resolveAuthUrl, writeCredentials, } from "../lib/auth.js";
|
|
13
|
+
import { DEFAULT_API_URL, DEFAULT_AUTH_URL } from "../lib/constants.js";
|
|
6
14
|
const colors = {
|
|
7
15
|
reset: "\x1b[0m",
|
|
8
16
|
green: "\x1b[32m",
|
|
@@ -10,66 +18,119 @@ const colors = {
|
|
|
10
18
|
dim: "\x1b[2m",
|
|
11
19
|
bold: "\x1b[1m",
|
|
12
20
|
yellow: "\x1b[33m",
|
|
21
|
+
cyan: "\x1b[36m",
|
|
13
22
|
};
|
|
23
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
24
|
+
/** Best-effort: open a URL in the default browser. Failures are ignored — the
|
|
25
|
+
* CLI always prints the URL so the user can open it manually. */
|
|
26
|
+
function openBrowser(url) {
|
|
27
|
+
try {
|
|
28
|
+
if (process.platform === "darwin") {
|
|
29
|
+
execFile("open", [url]);
|
|
30
|
+
}
|
|
31
|
+
else if (process.platform === "win32") {
|
|
32
|
+
execFile("cmd", ["/c", "start", "", url]);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
execFile("xdg-open", [url]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// ignored — the URL is printed regardless
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function persist(token, options, apiUrl, authUrl, defaultProject) {
|
|
43
|
+
// --project wins; otherwise persist the project the grant bound the token to
|
|
44
|
+
// (the org's default), so `glubean run --upload` works without --project.
|
|
45
|
+
const projectId = options.project ?? defaultProject;
|
|
46
|
+
const savedPath = await writeCredentials({
|
|
47
|
+
token,
|
|
48
|
+
projectId,
|
|
49
|
+
apiUrl: apiUrl !== DEFAULT_API_URL ? apiUrl : undefined,
|
|
50
|
+
authUrl: authUrl !== DEFAULT_AUTH_URL ? authUrl : undefined,
|
|
51
|
+
});
|
|
52
|
+
console.log(`${colors.green}Logged in${colors.reset} ${colors.dim}→ credentials saved to ${savedPath}${colors.reset}`);
|
|
53
|
+
if (projectId) {
|
|
54
|
+
console.log(`${colors.dim}Default project: ${projectId}${colors.reset}`);
|
|
55
|
+
console.log(`\n${colors.dim}Run tests and upload: glubean run --upload${colors.reset}`);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.log(`\n${colors.dim}Run tests and upload: glubean run --upload --project <id> (or set GLUBEAN_PROJECT_ID).${colors.reset}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
14
61
|
export async function loginCommand(options) {
|
|
62
|
+
const authUrl = (await resolveAuthUrl(options)).replace(/\/+$/, "");
|
|
15
63
|
const apiUrl = await resolveApiUrl(options);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
console.log(` ${colors.dim}This token grants access to all your projects.${colors.reset}`);
|
|
22
|
-
console.log(` ${colors.dim}For per-project tokens, use project settings → API keys.${colors.reset}`);
|
|
23
|
-
console.log();
|
|
24
|
-
token = await password({
|
|
25
|
-
message: "Paste your token (gb_...)",
|
|
26
|
-
mask: "*",
|
|
27
|
-
});
|
|
64
|
+
// Non-interactive escape hatch: persist a token the user already created in the
|
|
65
|
+
// dashboard (Project → Tokens). The upload preflight validates it later.
|
|
66
|
+
if (options.token) {
|
|
67
|
+
await persist(options.token, options, apiUrl, authUrl);
|
|
68
|
+
return;
|
|
28
69
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
// Validate token via whoami
|
|
34
|
-
console.log(`${colors.dim}Validating...${colors.reset}`);
|
|
70
|
+
// 1) Start the device grant.
|
|
71
|
+
let grant;
|
|
35
72
|
try {
|
|
36
|
-
const resp = await fetch(`${
|
|
37
|
-
|
|
73
|
+
const resp = await fetch(`${authUrl}/cli/device/code`, {
|
|
74
|
+
method: "POST",
|
|
75
|
+
headers: { "content-type": "application/json" },
|
|
38
76
|
});
|
|
39
77
|
if (!resp.ok) {
|
|
40
|
-
|
|
41
|
-
console.error(`${colors.
|
|
78
|
+
console.error(`${colors.red}Could not start login (${resp.status}) at ${authUrl}.${colors.reset}`);
|
|
79
|
+
console.error(`${colors.dim}Check --auth-url / GLUBEAN_AUTH_URL points at the Glubean auth server.${colors.reset}`);
|
|
42
80
|
process.exit(1);
|
|
43
81
|
}
|
|
44
|
-
|
|
45
|
-
const identity = whoami.kind === "user"
|
|
46
|
-
? `user ${whoami.userId}`
|
|
47
|
-
: `project ${whoami.projectName ?? whoami.projectId}`;
|
|
48
|
-
console.log(`${colors.green}Authenticated as ${identity}${colors.reset}`);
|
|
82
|
+
grant = (await resp.json());
|
|
49
83
|
}
|
|
50
84
|
catch (err) {
|
|
51
|
-
console.error(`${colors.red}
|
|
85
|
+
console.error(`${colors.red}Cannot reach ${authUrl}: ${err instanceof Error ? err.message : err}${colors.reset}`);
|
|
52
86
|
process.exit(1);
|
|
53
87
|
}
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
});
|
|
61
|
-
if (projectId === "")
|
|
62
|
-
projectId = undefined;
|
|
88
|
+
// 2) Show the code + open the browser.
|
|
89
|
+
const openUrl = grant.verification_uri_complete ?? grant.verification_uri;
|
|
90
|
+
console.log(`\n${colors.bold}Authorize the Glubean CLI${colors.reset}`);
|
|
91
|
+
console.log(` ${colors.dim}Open:${colors.reset} ${colors.cyan}${grant.verification_uri}${colors.reset}`);
|
|
92
|
+
console.log(` ${colors.dim}Code:${colors.reset} ${colors.bold}${grant.user_code}${colors.reset}\n`);
|
|
93
|
+
if (options.noBrowser) {
|
|
94
|
+
console.log(`${colors.dim}Open the URL above and enter the code.${colors.reset}`);
|
|
63
95
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
96
|
+
else {
|
|
97
|
+
console.log(`${colors.dim}Opening your browser…${colors.reset}`);
|
|
98
|
+
openBrowser(openUrl);
|
|
99
|
+
}
|
|
100
|
+
// 3) Poll until approved / denied / expired (or the grant times out).
|
|
101
|
+
const intervalMs = Math.max(1, grant.interval) * 1000;
|
|
102
|
+
const deadline = Date.now() + Math.max(1, grant.expires_in) * 1000;
|
|
103
|
+
console.log(`${colors.dim}Waiting for approval…${colors.reset}`);
|
|
104
|
+
while (Date.now() < deadline) {
|
|
105
|
+
await sleep(intervalMs);
|
|
106
|
+
let poll;
|
|
107
|
+
try {
|
|
108
|
+
const resp = await fetch(`${authUrl}/cli/device/token`, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
headers: { "content-type": "application/json" },
|
|
111
|
+
body: JSON.stringify({ device_code: grant.device_code }),
|
|
112
|
+
});
|
|
113
|
+
if (!resp.ok)
|
|
114
|
+
continue; // transient — keep polling
|
|
115
|
+
poll = (await resp.json());
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
continue; // transient network blip — keep polling
|
|
119
|
+
}
|
|
120
|
+
if (poll.status === "approved" && poll.token) {
|
|
121
|
+
await persist(poll.token, options, apiUrl, authUrl, poll.projectId);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (poll.status === "denied") {
|
|
125
|
+
console.error(`${colors.red}Login denied in the browser.${colors.reset}`);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
if (poll.status === "expired") {
|
|
129
|
+
console.error(`${colors.red}The login code expired. Run 'glubean login' again.${colors.reset}`);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
72
132
|
}
|
|
73
|
-
console.
|
|
133
|
+
console.error(`${colors.red}Timed out waiting for approval. Run 'glubean login' again.${colors.reset}`);
|
|
134
|
+
process.exit(1);
|
|
74
135
|
}
|
|
75
136
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/run.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { GlubeanFileKind } from "@glubean/scanner";
|
|
1
2
|
interface RunOptions {
|
|
2
3
|
filter?: string;
|
|
3
4
|
pick?: string;
|
|
@@ -44,6 +45,13 @@ interface RunOptions {
|
|
|
44
45
|
upload?: boolean;
|
|
45
46
|
uploadReceiptJson?: string;
|
|
46
47
|
project?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Upload TARGET (the API/system under test the runs belong to). Resolved from
|
|
50
|
+
* the profile's `upload.targetId` (or `GLUBEAN_TARGET_ID`). When unset, the
|
|
51
|
+
* upload routes to the project's default target (resolved server-side at
|
|
52
|
+
* upload time). Runs live under a target — see auth.ts `resolveTargetId`.
|
|
53
|
+
*/
|
|
54
|
+
target?: string;
|
|
47
55
|
token?: string;
|
|
48
56
|
/** Env var name holding this profile's upload token (from upload.tokenEnv). */
|
|
49
57
|
tokenEnv?: string;
|
|
@@ -108,6 +116,10 @@ interface RunOptions {
|
|
|
108
116
|
*/
|
|
109
117
|
thresholds?: import("@glubean/sdk").ThresholdConfig;
|
|
110
118
|
}
|
|
119
|
+
export declare function findProjectConfig(startDir: string): Promise<{
|
|
120
|
+
rootDir: string;
|
|
121
|
+
configPath?: string;
|
|
122
|
+
}>;
|
|
111
123
|
/**
|
|
112
124
|
* Map a file path to its Glubean kind by extension.
|
|
113
125
|
* - `.test.ts` → "test"
|
|
@@ -120,7 +132,7 @@ interface RunOptions {
|
|
|
120
132
|
* Returns undefined for non-Glubean files. The suite.kinds filter in
|
|
121
133
|
* resolveTestFiles uses this to keep only files whose kind matches.
|
|
122
134
|
*/
|
|
123
|
-
export type GlubeanFileKind
|
|
135
|
+
export type { GlubeanFileKind };
|
|
124
136
|
export declare function classifyGlubeanFile(filePath: string): GlubeanFileKind | undefined;
|
|
125
137
|
/**
|
|
126
138
|
* Per-suite resolution helper exposed for main.ts. Resolves a suite's
|
|
@@ -174,6 +186,7 @@ export declare function discoverTests(filePath: string): Promise<DiscoveredTest[
|
|
|
174
186
|
export declare const __testing: {
|
|
175
187
|
matchesTags: (testItem: DiscoveredTest, tags: string[], mode?: "or" | "and" | undefined) => boolean;
|
|
176
188
|
matchesExcludeTags: (testItem: DiscoveredTest, excludeTags: string[]) => boolean;
|
|
189
|
+
isGlubeanTestFile: (name: string) => boolean;
|
|
177
190
|
};
|
|
178
191
|
declare function matchesTags(testItem: DiscoveredTest, tags: string[], mode?: "or" | "and"): boolean;
|
|
179
192
|
/**
|
|
@@ -183,5 +196,4 @@ declare function matchesTags(testItem: DiscoveredTest, tags: string[], mode?: "o
|
|
|
183
196
|
*/
|
|
184
197
|
declare function matchesExcludeTags(testItem: DiscoveredTest, excludeTags: string[]): boolean;
|
|
185
198
|
export declare function runCommand(target: string | string[], options?: RunOptions): Promise<void>;
|
|
186
|
-
export {};
|
|
187
199
|
//# sourceMappingURL=run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|