vibehub-cli 1.1.3 → 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.
|
@@ -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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"}
|