tangled
alpha
login
or
join now
cosmik.network
/
semble
43
fork
atom
A social knowledge tool for researchers built on ATProto
43
fork
atom
overview
issues
13
pulls
pipelines
linting and formatting
Wesley Finck
7 months ago
08dbc941
0d7bac6f
+28
-16
5 changed files
expand all
collapse all
unified
split
.vscode
launch.json
src
webapp
app
auth
complete
page.tsx
content.ts
hooks
useExtensionAuth.tsx
popup.tsx
+1
-1
.vscode/launch.json
···
38
38
"name": "Launch All Services",
39
39
"configurations": [
40
40
"Backend (dev:mock)",
41
41
-
"Webapp Dev",
41
41
+
"Webapp Dev",
42
42
"Webapp Extension Dev"
43
43
],
44
44
"stopAll": true
+4
-4
src/webapp/app/auth/complete/page.tsx
···
54
54
const handleExtensionTokenGeneration = async () => {
55
55
try {
56
56
setMessage('Generating extension tokens...');
57
57
-
57
57
+
58
58
const tokens = await apiClient.generateExtensionTokens();
59
59
await ExtensionService.sendTokensToExtension(tokens);
60
60
ExtensionService.clearExtensionTokensRequested();
61
61
-
61
61
+
62
62
setMessage('Extension tokens generated successfully!');
63
63
-
63
63
+
64
64
// Redirect to library after successful extension token generation
65
65
setTimeout(() => router.push('/library'), 1000);
66
66
} catch (extensionError: any) {
67
67
console.error('Failed to generate extension tokens:', extensionError);
68
68
ExtensionService.clearExtensionTokensRequested();
69
69
setMessage('Login successful, but failed to generate extension tokens');
70
70
-
70
70
+
71
71
// Still redirect to library after a delay
72
72
setTimeout(() => router.push('/library'), 2000);
73
73
}
+9
-7
src/webapp/content.ts
···
7
7
8
8
if (event.data?.type === 'EXTENSION_TOKENS') {
9
9
// Forward tokens to background script
10
10
-
chrome.runtime.sendMessage({
11
11
-
type: 'WEBAPP_TOKENS_RECEIVED',
12
12
-
accessToken: event.data.accessToken,
13
13
-
refreshToken: event.data.refreshToken
14
14
-
}).catch((error) => {
15
15
-
console.error('Failed to forward tokens to background script:', error);
16
16
-
});
10
10
+
chrome.runtime
11
11
+
.sendMessage({
12
12
+
type: 'WEBAPP_TOKENS_RECEIVED',
13
13
+
accessToken: event.data.accessToken,
14
14
+
refreshToken: event.data.refreshToken,
15
15
+
})
16
16
+
.catch((error) => {
17
17
+
console.error('Failed to forward tokens to background script:', error);
18
18
+
});
17
19
}
18
20
});
+4
-2
src/webapp/hooks/useExtensionAuth.tsx
···
54
54
});
55
55
}, []);
56
56
57
57
-
const getStoredRefreshToken = useCallback(async (): Promise<string | null> => {
57
57
+
const getStoredRefreshToken = useCallback(async (): Promise<
58
58
+
string | null
59
59
+
> => {
58
60
return new Promise((resolve) => {
59
61
if (typeof chrome !== 'undefined' && chrome.storage) {
60
62
chrome.storage.local.get(['refreshToken'], (result) => {
···
130
132
131
133
if (typeof chrome !== 'undefined' && chrome.runtime?.onMessage) {
132
134
chrome.runtime.onMessage.addListener(handleAuthStateChange);
133
133
-
135
135
+
134
136
return () => {
135
137
chrome.runtime.onMessage.removeListener(handleAuthStateChange);
136
138
};
+10
-2
src/webapp/popup.tsx
···
3
3
useExtensionAuth,
4
4
} from './hooks/useExtensionAuth';
5
5
import { SaveCardPage } from './components/extension/SaveCardPage';
6
6
-
import { Card, MantineProvider, ScrollArea, Button, Text, Stack } from '@mantine/core';
6
6
+
import {
7
7
+
Card,
8
8
+
MantineProvider,
9
9
+
ScrollArea,
10
10
+
Button,
11
11
+
Text,
12
12
+
Stack,
13
13
+
} from '@mantine/core';
7
14
import '@mantine/core/styles.css';
8
15
import { theme } from '@/styles/theme';
9
16
···
20
27
21
28
if (!isAuthenticated) {
22
29
const handleSignIn = () => {
23
23
-
const appUrl = process.env.PLASMO_PUBLIC_APP_URL || 'http://localhost:3000';
30
30
+
const appUrl =
31
31
+
process.env.PLASMO_PUBLIC_APP_URL || 'http://localhost:3000';
24
32
const loginUrl = `${appUrl}/login?extension-login=true`;
25
33
chrome.tabs.create({ url: loginUrl });
26
34
window.close();