@kardoe/quickback 0.4.2 → 0.4.3
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/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +108 -12
- package/dist/commands/login.js.map +1 -1
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +4 -1
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/auth.d.ts +15 -6
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +21 -6
- package/dist/lib/auth.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/login.d.ts
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Uses OAuth 2.0 Device Authorization Grant (RFC 8628) for CLI authentication.
|
|
5
5
|
* Works in headless environments (SSH, containers) and is more secure than URL-based tokens.
|
|
6
|
+
*
|
|
7
|
+
* After authentication, the CLI:
|
|
8
|
+
* 1. Lists user's organizations
|
|
9
|
+
* 2. Prompts to select one (or auto-selects if only one)
|
|
10
|
+
* 3. Sets the active organization on the session
|
|
11
|
+
*
|
|
12
|
+
* The session is stored in Better Auth's sessions table and appears
|
|
13
|
+
* in the Manage Devices page where users can revoke it.
|
|
6
14
|
*/
|
|
7
15
|
export declare function login(): Promise<void>;
|
|
8
16
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAkDH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA4G3C"}
|
package/dist/commands/login.js
CHANGED
|
@@ -3,10 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Uses OAuth 2.0 Device Authorization Grant (RFC 8628) for CLI authentication.
|
|
5
5
|
* Works in headless environments (SSH, containers) and is more secure than URL-based tokens.
|
|
6
|
+
*
|
|
7
|
+
* After authentication, the CLI:
|
|
8
|
+
* 1. Lists user's organizations
|
|
9
|
+
* 2. Prompts to select one (or auto-selects if only one)
|
|
10
|
+
* 3. Sets the active organization on the session
|
|
11
|
+
*
|
|
12
|
+
* The session is stored in Better Auth's sessions table and appears
|
|
13
|
+
* in the Manage Devices page where users can revoke it.
|
|
6
14
|
*/
|
|
7
15
|
import { exec } from 'child_process';
|
|
8
16
|
import pc from 'picocolors';
|
|
9
17
|
import ora from 'ora';
|
|
18
|
+
import prompts from 'prompts';
|
|
10
19
|
import { storeCredentials } from '../lib/auth.js';
|
|
11
20
|
const AUTH_URL = process.env.QUICKBACK_AUTH_URL || 'https://api.quickback.dev';
|
|
12
21
|
const CLIENT_ID = 'quickback-cli';
|
|
@@ -32,23 +41,71 @@ export async function login() {
|
|
|
32
41
|
// Step 3: Poll for Better Auth token
|
|
33
42
|
const pollSpinner = ora('Waiting for authorization...').start();
|
|
34
43
|
const betterAuthToken = await pollForToken(deviceCode.device_code, deviceCode.interval);
|
|
35
|
-
// Step 4: Exchange for
|
|
44
|
+
// Step 4: Exchange for session token (stored in DB, appears in Manage Devices)
|
|
36
45
|
pollSpinner.text = 'Completing authentication...';
|
|
37
|
-
const
|
|
46
|
+
const sessionToken = await exchangeToken(betterAuthToken.access_token);
|
|
38
47
|
pollSpinner.stop();
|
|
39
|
-
|
|
48
|
+
console.log(pc.green('\n✓ Login successful!'));
|
|
49
|
+
console.log(pc.gray(`Welcome, ${sessionToken.user?.name || sessionToken.user?.email || 'user'}!`));
|
|
50
|
+
// Step 5: List and select organization
|
|
51
|
+
let activeOrganization;
|
|
52
|
+
const orgSpinner = ora('Loading organizations...').start();
|
|
53
|
+
try {
|
|
54
|
+
const organizations = await listOrganizations(sessionToken.access_token);
|
|
55
|
+
orgSpinner.stop();
|
|
56
|
+
if (organizations.length > 0) {
|
|
57
|
+
if (organizations.length === 1) {
|
|
58
|
+
// Auto-select if only one organization
|
|
59
|
+
activeOrganization = organizations[0];
|
|
60
|
+
console.log(pc.gray(`\nUsing organization: ${pc.bold(activeOrganization.name)}`));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Prompt user to select
|
|
64
|
+
console.log();
|
|
65
|
+
const response = await prompts({
|
|
66
|
+
type: 'select',
|
|
67
|
+
name: 'organization',
|
|
68
|
+
message: 'Select an organization:',
|
|
69
|
+
choices: organizations.map(org => ({
|
|
70
|
+
title: org.name,
|
|
71
|
+
description: org.slug,
|
|
72
|
+
value: org,
|
|
73
|
+
})),
|
|
74
|
+
});
|
|
75
|
+
if (response.organization) {
|
|
76
|
+
activeOrganization = response.organization;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Set active organization on the session
|
|
80
|
+
if (activeOrganization) {
|
|
81
|
+
const setOrgSpinner = ora('Setting active organization...').start();
|
|
82
|
+
await setActiveOrganization(sessionToken.access_token, activeOrganization.id);
|
|
83
|
+
setOrgSpinner.stop();
|
|
84
|
+
console.log(pc.green(`✓ Active organization: ${activeOrganization.name}`));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (orgError) {
|
|
89
|
+
orgSpinner.stop();
|
|
90
|
+
// Don't fail login if org listing fails - user can still use CLI
|
|
91
|
+
console.log(pc.yellow('\nCould not load organizations. You can set one later with: quickback org use <slug>'));
|
|
92
|
+
}
|
|
93
|
+
// Step 6: Store credentials with organization info
|
|
40
94
|
await storeCredentials({
|
|
41
|
-
token:
|
|
42
|
-
user:
|
|
43
|
-
expiresAt: new Date(Date.now() +
|
|
95
|
+
token: sessionToken.access_token,
|
|
96
|
+
user: sessionToken.user,
|
|
97
|
+
expiresAt: sessionToken.session?.expiresAt || new Date(Date.now() + sessionToken.expires_in * 1000).toISOString(),
|
|
98
|
+
organization: activeOrganization ? {
|
|
99
|
+
id: activeOrganization.id,
|
|
100
|
+
name: activeOrganization.name,
|
|
101
|
+
slug: activeOrganization.slug,
|
|
102
|
+
} : undefined,
|
|
44
103
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (cliToken.user?.tier === 'pro') {
|
|
48
|
-
console.log(pc.cyan('You have access to Pro templates.'));
|
|
104
|
+
if (sessionToken.user?.tier === 'pro') {
|
|
105
|
+
console.log(pc.cyan('\nYou have access to Pro templates.'));
|
|
49
106
|
}
|
|
50
107
|
else {
|
|
51
|
-
console.log(pc.gray('
|
|
108
|
+
console.log(pc.gray('\nUpgrade to Pro for premium templates: https://quickback.dev/pricing'));
|
|
52
109
|
}
|
|
53
110
|
console.log();
|
|
54
111
|
}
|
|
@@ -145,7 +202,10 @@ async function pollForToken(deviceCode, interval) {
|
|
|
145
202
|
});
|
|
146
203
|
}
|
|
147
204
|
/**
|
|
148
|
-
* Exchange Better Auth access token for
|
|
205
|
+
* Exchange Better Auth access token for session info
|
|
206
|
+
*
|
|
207
|
+
* The device authorization flow creates a session in the database.
|
|
208
|
+
* This endpoint returns that session token so it appears in Manage Devices.
|
|
149
209
|
*/
|
|
150
210
|
async function exchangeToken(accessToken) {
|
|
151
211
|
const response = await fetch(`${AUTH_URL}/cli/exchange`, {
|
|
@@ -162,6 +222,42 @@ async function exchangeToken(accessToken) {
|
|
|
162
222
|
}
|
|
163
223
|
return response.json();
|
|
164
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* List user's organizations
|
|
227
|
+
*/
|
|
228
|
+
async function listOrganizations(sessionToken) {
|
|
229
|
+
const response = await fetch(`${AUTH_URL}/auth/v1/organization/list`, {
|
|
230
|
+
method: 'GET',
|
|
231
|
+
headers: {
|
|
232
|
+
'Authorization': `Bearer ${sessionToken}`,
|
|
233
|
+
'Content-Type': 'application/json',
|
|
234
|
+
'User-Agent': 'quickback-cli',
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
if (!response.ok) {
|
|
238
|
+
throw new Error('Failed to list organizations');
|
|
239
|
+
}
|
|
240
|
+
const data = await response.json();
|
|
241
|
+
return data.organizations || [];
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Set the active organization for the session
|
|
245
|
+
*/
|
|
246
|
+
async function setActiveOrganization(sessionToken, organizationId) {
|
|
247
|
+
const response = await fetch(`${AUTH_URL}/auth/v1/organization/set-active`, {
|
|
248
|
+
method: 'POST',
|
|
249
|
+
headers: {
|
|
250
|
+
'Authorization': `Bearer ${sessionToken}`,
|
|
251
|
+
'Content-Type': 'application/json',
|
|
252
|
+
'User-Agent': 'quickback-cli',
|
|
253
|
+
},
|
|
254
|
+
body: JSON.stringify({ organizationId }),
|
|
255
|
+
});
|
|
256
|
+
if (!response.ok) {
|
|
257
|
+
const error = await response.json().catch(() => ({}));
|
|
258
|
+
throw new Error(error.message || 'Failed to set active organization');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
165
261
|
/**
|
|
166
262
|
* Format user code with dash for readability (e.g., ABCD-1234)
|
|
167
263
|
*/
|
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,GAAG,CAAC;QAChB,KAAK,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAChC,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5D,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAQ5E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,GAAG,CAAC;QAChB,KAAK,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAChC,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5D,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAQ5E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BhF;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAQhF;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
|
package/dist/lib/api-client.js
CHANGED
|
@@ -36,7 +36,10 @@ export async function callCompiler(input) {
|
|
|
36
36
|
if (response.status === 403 && error.hint) {
|
|
37
37
|
throw new Error(`${error.error}\n${error.hint}`);
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
// Include detailed error info for debugging
|
|
40
|
+
const errorMsg = error.error || error.message || 'Compilation failed';
|
|
41
|
+
const details = error.details ? `\nDetails: ${JSON.stringify(error.details, null, 2)}` : '';
|
|
42
|
+
throw new Error(errorMsg + details);
|
|
40
43
|
}
|
|
41
44
|
return response.json();
|
|
42
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gCAAgC,CAAC;AA4DlF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,CAAC,CAAC;IAErD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA2C,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAoB;IACrD,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IAErC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAc,CAAC;QAEhD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gCAAgC,CAAC;AA4DlF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,CAAC,CAAC;IAErD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA2C,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAoB;IACrD,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IAErC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAc,CAAC;QAEhD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,oBAAoB,CAAC;QACtE,MAAM,OAAO,GAAI,KAAa,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,CAAE,KAAa,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA6B,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC;IAElD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAkD,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/lib/auth.d.ts
CHANGED
|
@@ -4,12 +4,11 @@
|
|
|
4
4
|
* Handles storing and retrieving auth tokens for the CLI.
|
|
5
5
|
* Tokens are stored in ~/.quickback/credentials.json
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* remain URL-encoded (with %2F, %3D, etc.) when passed in Authorization headers.
|
|
7
|
+
* The CLI uses Device Authorization flow which creates a real Better Auth session.
|
|
8
|
+
* The session token is stored in Better Auth's sessions table, so:
|
|
9
|
+
* - It appears in the Manage Devices page
|
|
10
|
+
* - Users can revoke CLI sessions from the UI
|
|
11
|
+
* - The session can be scoped to an organization
|
|
13
12
|
*/
|
|
14
13
|
interface Credentials {
|
|
15
14
|
token: string;
|
|
@@ -18,6 +17,12 @@ interface Credentials {
|
|
|
18
17
|
id: string;
|
|
19
18
|
email: string;
|
|
20
19
|
name?: string;
|
|
20
|
+
tier?: 'free' | 'pro';
|
|
21
|
+
};
|
|
22
|
+
organization?: {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
slug: string;
|
|
21
26
|
};
|
|
22
27
|
}
|
|
23
28
|
/**
|
|
@@ -44,5 +49,9 @@ export declare function getStoredUser(): Promise<Credentials['user'] | null>;
|
|
|
44
49
|
* Check if user is logged in
|
|
45
50
|
*/
|
|
46
51
|
export declare function isLoggedIn(): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Get stored organization info
|
|
54
|
+
*/
|
|
55
|
+
export declare function getStoredOrganization(): Promise<Credentials['organization'] | null>;
|
|
47
56
|
export {};
|
|
48
57
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;KACvB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8B7D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAazE;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAazF"}
|
package/dist/lib/auth.js
CHANGED
|
@@ -4,12 +4,11 @@
|
|
|
4
4
|
* Handles storing and retrieving auth tokens for the CLI.
|
|
5
5
|
* Tokens are stored in ~/.quickback/credentials.json
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* remain URL-encoded (with %2F, %3D, etc.) when passed in Authorization headers.
|
|
7
|
+
* The CLI uses Device Authorization flow which creates a real Better Auth session.
|
|
8
|
+
* The session token is stored in Better Auth's sessions table, so:
|
|
9
|
+
* - It appears in the Manage Devices page
|
|
10
|
+
* - Users can revoke CLI sessions from the UI
|
|
11
|
+
* - The session can be scoped to an organization
|
|
13
12
|
*/
|
|
14
13
|
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
|
|
15
14
|
import { homedir } from 'os';
|
|
@@ -92,4 +91,20 @@ export async function isLoggedIn() {
|
|
|
92
91
|
const token = await getStoredToken();
|
|
93
92
|
return token !== null;
|
|
94
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Get stored organization info
|
|
96
|
+
*/
|
|
97
|
+
export async function getStoredOrganization() {
|
|
98
|
+
try {
|
|
99
|
+
if (!existsSync(CREDENTIALS_FILE)) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const data = readFileSync(CREDENTIALS_FILE, 'utf-8');
|
|
103
|
+
const credentials = JSON.parse(data);
|
|
104
|
+
return credentials.organization || null;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
95
110
|
//# sourceMappingURL=auth.js.map
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAkB9D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,yCAAyC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,4BAA4B;QAC5B,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC3B,0BAA0B;gBAC1B,MAAM,gBAAgB,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAwB;IAC7D,iCAAiC;IACjC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,OAAO,WAAW,CAAC,YAAY,IAAI,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|