vibehub-cli 1.1.2 → 1.1.4
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 +10 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +18 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/supabase-auth.d.ts +1 -1
- package/dist/lib/supabase-auth.d.ts.map +1 -1
- package/dist/lib/supabase-auth.js +38 -50
- package/dist/lib/supabase-auth.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAqHpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,10 +2,8 @@ import { Command } from 'commander';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
4
|
import path from 'path';
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
6
5
|
import { VibeHubManager } from '../lib/vibehub-manager.js';
|
|
7
|
-
|
|
8
|
-
const __dirname = path.dirname(__filename);
|
|
6
|
+
import { getStoredEmail } from '../lib/auth-helper.js';
|
|
9
7
|
export const initCommand = new Command('init')
|
|
10
8
|
.description('Initialize a new VibeHub repository')
|
|
11
9
|
.option('-f, --force', 'Force initialization even if .vibehub already exists')
|
|
@@ -22,9 +20,16 @@ export const initCommand = new Command('init')
|
|
|
22
20
|
}
|
|
23
21
|
return;
|
|
24
22
|
}
|
|
23
|
+
// Get logged-in user's email (if available)
|
|
24
|
+
const loggedInEmail = await getStoredEmail();
|
|
25
25
|
// Interactive setup
|
|
26
26
|
if (!options.quiet) {
|
|
27
27
|
console.log(chalk.blue('🚀 Initializing VibeHub repository...\n'));
|
|
28
|
+
// Suggest login if not authenticated
|
|
29
|
+
if (!loggedInEmail) {
|
|
30
|
+
console.log(chalk.yellow('💡 Tip: Run \'vibe login\' first to sign in with Google.'));
|
|
31
|
+
console.log(chalk.yellow(' This will auto-fill your email and enable cloud sync.\n'));
|
|
32
|
+
}
|
|
28
33
|
}
|
|
29
34
|
let answers;
|
|
30
35
|
if (options.quiet) {
|
|
@@ -32,7 +37,7 @@ export const initCommand = new Command('init')
|
|
|
32
37
|
answers = {
|
|
33
38
|
projectName: path.basename(cwd),
|
|
34
39
|
description: '',
|
|
35
|
-
author: process.env.USER_EMAIL || 'user@example.com',
|
|
40
|
+
author: loggedInEmail || process.env.USER_EMAIL || 'user@example.com',
|
|
36
41
|
enableAutoSync: true,
|
|
37
42
|
createGitignore: true
|
|
38
43
|
};
|
|
@@ -61,7 +66,7 @@ export const initCommand = new Command('init')
|
|
|
61
66
|
type: 'input',
|
|
62
67
|
name: 'author',
|
|
63
68
|
message: 'Author email:',
|
|
64
|
-
default: process.env.USER_EMAIL || '',
|
|
69
|
+
default: loggedInEmail || process.env.USER_EMAIL || '',
|
|
65
70
|
validate: (input) => {
|
|
66
71
|
if (!input.trim()) {
|
|
67
72
|
return 'Author email is required';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -23,8 +23,24 @@ const program = new Command();
|
|
|
23
23
|
program
|
|
24
24
|
.name('vibe')
|
|
25
25
|
.description('VibeHub - AI-native version control for the modern developer')
|
|
26
|
-
.version(pkg.version)
|
|
27
|
-
|
|
26
|
+
.version(pkg.version)
|
|
27
|
+
.addHelpText('after', `
|
|
28
|
+
|
|
29
|
+
${chalk.bold('Getting Started:')}
|
|
30
|
+
1. ${chalk.cyan('vibe login')} Sign in with Google
|
|
31
|
+
2. ${chalk.cyan('vibe init')} Initialize a new project
|
|
32
|
+
3. ${chalk.cyan('vibe commit')} Create commits
|
|
33
|
+
4. ${chalk.cyan('vibe push')} Push to VibeHub cloud
|
|
34
|
+
|
|
35
|
+
${chalk.bold('More info:')} ${chalk.underline('https://vibehub.co.in/docs')}
|
|
36
|
+
`);
|
|
37
|
+
// Add commands - Authentication first (recommended starting point)
|
|
38
|
+
program.addCommand(loginCommand);
|
|
39
|
+
program.addCommand(logoutCommand);
|
|
40
|
+
program.addCommand(profilesCommand);
|
|
41
|
+
program.addCommand(useCommand);
|
|
42
|
+
program.addCommand(whoamiCommand);
|
|
43
|
+
// Core commands
|
|
28
44
|
program.addCommand(initCommand);
|
|
29
45
|
program.addCommand(cloneCommand);
|
|
30
46
|
program.addCommand(statusCommand);
|
|
@@ -36,12 +52,6 @@ program.addCommand(sessionCommand);
|
|
|
36
52
|
program.addCommand(capturePromptsCommand);
|
|
37
53
|
program.addCommand(setCommand);
|
|
38
54
|
program.addCommand(installCommand);
|
|
39
|
-
// Authentication commands
|
|
40
|
-
program.addCommand(loginCommand);
|
|
41
|
-
program.addCommand(logoutCommand);
|
|
42
|
-
program.addCommand(profilesCommand);
|
|
43
|
-
program.addCommand(useCommand);
|
|
44
|
-
program.addCommand(whoamiCommand);
|
|
45
55
|
// Global error handler
|
|
46
56
|
program.exitOverride();
|
|
47
57
|
try {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import type { ProfileData } from './profile-manager.js';
|
|
|
8
8
|
* 3. Open browser to Supabase OAuth URL with Google provider
|
|
9
9
|
* 4. User authenticates with Google
|
|
10
10
|
* 5. Supabase redirects to localhost:54321/callback with code
|
|
11
|
-
* 6. CLI exchanges code for session tokens
|
|
11
|
+
* 6. CLI exchanges code for session tokens using PKCE
|
|
12
12
|
* 7. Return tokens to caller
|
|
13
13
|
*/
|
|
14
14
|
export declare class SupabaseAuth {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase-auth.d.ts","sourceRoot":"","sources":["../../src/lib/supabase-auth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"supabase-auth.d.ts","sourceRoot":"","sources":["../../src/lib/supabase-auth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA4DxD;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAiB;;IAMjC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IA4G3D;;OAEG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAuB9E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACH,OAAO,CAAC,cAAc;IA+FtB;;OAEG;IACH,OAAO,CAAC,YAAY;CAqFrB;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAGpC"}
|
|
@@ -21,10 +21,27 @@ function generateCodeChallenge(verifier) {
|
|
|
21
21
|
return crypto.createHash('sha256').update(verifier).digest('base64url');
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* Exchange authorization code for tokens using Supabase token endpoint
|
|
25
25
|
*/
|
|
26
|
-
function
|
|
27
|
-
|
|
26
|
+
async function exchangeCodeForTokens(code, codeVerifier, redirectUri) {
|
|
27
|
+
const tokenUrl = `${SUPABASE_URL}/auth/v1/token?grant_type=pkce`;
|
|
28
|
+
const response = await fetch(tokenUrl, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: {
|
|
31
|
+
'Content-Type': 'application/json',
|
|
32
|
+
'apikey': SUPABASE_ANON_KEY,
|
|
33
|
+
},
|
|
34
|
+
body: JSON.stringify({
|
|
35
|
+
auth_code: code,
|
|
36
|
+
code_verifier: codeVerifier,
|
|
37
|
+
redirect_uri: redirectUri,
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
const errorText = await response.text();
|
|
42
|
+
throw new Error(`Token exchange failed: ${errorText}`);
|
|
43
|
+
}
|
|
44
|
+
return response.json();
|
|
28
45
|
}
|
|
29
46
|
/**
|
|
30
47
|
* SupabaseAuth handles browser-based Google OAuth authentication for CLI.
|
|
@@ -35,7 +52,7 @@ function generateState() {
|
|
|
35
52
|
* 3. Open browser to Supabase OAuth URL with Google provider
|
|
36
53
|
* 4. User authenticates with Google
|
|
37
54
|
* 5. Supabase redirects to localhost:54321/callback with code
|
|
38
|
-
* 6. CLI exchanges code for session tokens
|
|
55
|
+
* 6. CLI exchanges code for session tokens using PKCE
|
|
39
56
|
* 7. Return tokens to caller
|
|
40
57
|
*/
|
|
41
58
|
export class SupabaseAuth {
|
|
@@ -49,7 +66,7 @@ export class SupabaseAuth {
|
|
|
49
66
|
return new Promise(async (resolve, reject) => {
|
|
50
67
|
const codeVerifier = generateCodeVerifier();
|
|
51
68
|
const codeChallenge = generateCodeChallenge(codeVerifier);
|
|
52
|
-
const
|
|
69
|
+
const redirectUri = `http://${CALLBACK_HOST}:${CALLBACK_PORT}/callback`;
|
|
53
70
|
// Create callback server
|
|
54
71
|
const server = http.createServer(async (req, res) => {
|
|
55
72
|
try {
|
|
@@ -57,10 +74,9 @@ export class SupabaseAuth {
|
|
|
57
74
|
// Handle the OAuth callback
|
|
58
75
|
if (reqUrl.pathname === '/callback' || reqUrl.pathname === '/') {
|
|
59
76
|
const code = reqUrl.searchParams.get('code');
|
|
60
|
-
const returnedState = reqUrl.searchParams.get('state');
|
|
61
77
|
const error = reqUrl.searchParams.get('error');
|
|
62
78
|
const errorDescription = reqUrl.searchParams.get('error_description');
|
|
63
|
-
//
|
|
79
|
+
// Handle errors
|
|
64
80
|
if (error) {
|
|
65
81
|
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
66
82
|
res.end(this.getErrorHtml(errorDescription || error));
|
|
@@ -75,34 +91,19 @@ export class SupabaseAuth {
|
|
|
75
91
|
reject(new Error('No authorization code received'));
|
|
76
92
|
return;
|
|
77
93
|
}
|
|
78
|
-
//
|
|
79
|
-
if (returnedState !== state) {
|
|
80
|
-
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
81
|
-
res.end(this.getErrorHtml('State mismatch - possible CSRF attack'));
|
|
82
|
-
server.close();
|
|
83
|
-
reject(new Error('State mismatch - possible CSRF attack'));
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
// Send success page to browser
|
|
94
|
+
// Send success page to browser immediately
|
|
87
95
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
88
96
|
res.end(this.getSuccessHtml());
|
|
89
|
-
// Exchange code for
|
|
97
|
+
// Exchange code for tokens using PKCE
|
|
90
98
|
try {
|
|
91
|
-
const
|
|
92
|
-
if (exchangeError || !data.session) {
|
|
93
|
-
server.close();
|
|
94
|
-
reject(new Error(exchangeError?.message || 'Failed to exchange code for session'));
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
const session = data.session;
|
|
98
|
-
const user = data.user;
|
|
99
|
+
const tokenData = await exchangeCodeForTokens(code, codeVerifier, redirectUri);
|
|
99
100
|
// Create profile data
|
|
100
101
|
const profileData = {
|
|
101
|
-
email: user.email || '',
|
|
102
|
-
userId: user.id,
|
|
103
|
-
accessToken:
|
|
104
|
-
refreshToken:
|
|
105
|
-
tokenExpiresAt: new Date(
|
|
102
|
+
email: tokenData.user.email || '',
|
|
103
|
+
userId: tokenData.user.id,
|
|
104
|
+
accessToken: tokenData.access_token,
|
|
105
|
+
refreshToken: tokenData.refresh_token || '',
|
|
106
|
+
tokenExpiresAt: new Date(Date.now() + tokenData.expires_in * 1000).toISOString(),
|
|
106
107
|
createdAt: new Date().toISOString(),
|
|
107
108
|
lastUsedAt: new Date().toISOString()
|
|
108
109
|
};
|
|
@@ -139,28 +140,15 @@ export class SupabaseAuth {
|
|
|
139
140
|
// Start server
|
|
140
141
|
server.listen(CALLBACK_PORT, CALLBACK_HOST, async () => {
|
|
141
142
|
try {
|
|
142
|
-
// Build OAuth URL with PKCE
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
queryParams: {
|
|
149
|
-
code_challenge: codeChallenge,
|
|
150
|
-
code_challenge_method: 'S256',
|
|
151
|
-
state: state
|
|
152
|
-
},
|
|
153
|
-
skipBrowserRedirect: true
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
if (error || !data.url) {
|
|
157
|
-
server.close();
|
|
158
|
-
reject(new Error(error?.message || 'Failed to generate OAuth URL'));
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
143
|
+
// Build OAuth URL with PKCE parameters
|
|
144
|
+
const authUrl = new URL(`${SUPABASE_URL}/auth/v1/authorize`);
|
|
145
|
+
authUrl.searchParams.set('provider', 'google');
|
|
146
|
+
authUrl.searchParams.set('redirect_to', redirectUri);
|
|
147
|
+
authUrl.searchParams.set('code_challenge', codeChallenge);
|
|
148
|
+
authUrl.searchParams.set('code_challenge_method', 'S256');
|
|
161
149
|
// Open browser
|
|
162
150
|
const { default: open } = await import('open');
|
|
163
|
-
await open(
|
|
151
|
+
await open(authUrl.toString());
|
|
164
152
|
// Set timeout for authentication (5 minutes)
|
|
165
153
|
setTimeout(() => {
|
|
166
154
|
server.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase-auth.js","sourceRoot":"","sources":["../../src/lib/supabase-auth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AAGrE,yBAAyB;AACzB,MAAM,YAAY,GAAG,0CAA0C,CAAC;AAChE,MAAM,iBAAiB,GAAG,kNAAkN,CAAC;AAE7O,gCAAgC;AAChC,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC;;GAEG;AACH,SAAS,oBAAoB;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"supabase-auth.js","sourceRoot":"","sources":["../../src/lib/supabase-auth.ts"],"names":[],"mappings":"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"}
|