Skip to content

Commit 7d5ab30

Browse files
committed
add handler to receive token from iframe message
1 parent ca32c32 commit 7d5ab30

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/commons/application/Application.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const Application: React.FC = () => {
8282
return true;
8383
};
8484

85-
const message = Messages.WebviewStarted();
85+
const message = Messages.WebviewStarted(null);
8686
sendToWebview(message);
8787

8888
window.addEventListener('message', event => {
@@ -96,6 +96,12 @@ const Application: React.FC = () => {
9696
case 'WebviewStarted':
9797
console.log('Received WebviewStarted message, will set vsc');
9898
dispatch(VscodeActions.setVscode());
99+
100+
if (message.token) {
101+
const token = JSON.parse(message.token.trim());
102+
console.log(`FRONTEND: WebviewStarted: ${token}`);
103+
dispatch(SessionActions.setTokens({accessToken: token.accessToken, refreshToken: token.refreshToken}));
104+
}
99105
break;
100106
case 'Text':
101107
const code = message.code;

src/features/vscode/messages.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,32 @@ type BaseMessage<T extends string, P extends object> = {
44
} & P;
55

66
function createMessages<T extends Record<string, (...args: any[]) => object>>(
7-
creators: T
7+
creators: T,
88
): {
9-
[K in Extract<keyof T, string>]: (...args: Parameters<T[K]>) => BaseMessage<K, ReturnType<T[K]>>;
9+
[K in Extract<keyof T, string>]: (
10+
...args: Parameters<T[K]>
11+
) => BaseMessage<K, ReturnType<T[K]>>;
1012
} {
1113
return Object.fromEntries(
1214
Object.entries(creators).map(([key, creator]) => [
1315
key,
1416
(...args: any[]) => ({
1517
type: key,
16-
...creator(...args)
17-
})
18-
])
18+
...creator(...args),
19+
}),
20+
]),
1921
) as any;
2022
}
2123

2224
const Messages = createMessages({
23-
WebviewStarted: () => ({}),
25+
WebviewStarted: (token: string | null) => ({ token }),
2426
IsVsc: () => ({}),
2527
NewEditor: (assessmentName: string, questionId: number, code: string) => ({
2628
assessmentName,
2729
questionId,
28-
code
30+
code,
2931
}),
30-
Text: (code: string) => ({ code })
32+
Text: (code: string) => ({ code }),
3133
});
3234

3335
export default Messages;
@@ -40,19 +42,19 @@ export type MessageTypes = {
4042
// Define MessageType as a union of all message types
4143
export type MessageType = MessageTypes[keyof MessageTypes];
4244

43-
export const FRONTEND_ELEMENT_ID = 'frontend';
45+
export const FRONTEND_ELEMENT_ID = "frontend";
4446

4547
export function sendToWebview(message: MessageType) {
46-
window.parent.postMessage(message, '*');
48+
window.parent.postMessage(message, "*");
4749
}
4850
export function sendToFrontend(document: Document, message: MessageType) {
4951
const iframe: HTMLIFrameElement = document.getElementById(
50-
FRONTEND_ELEMENT_ID
52+
FRONTEND_ELEMENT_ID,
5153
) as HTMLIFrameElement;
5254
const contentWindow = iframe.contentWindow;
5355
if (!contentWindow) {
5456
return;
5557
}
5658
// TODO: Don't hardcode this!
57-
contentWindow.postMessage(message, 'http://localhost:8000');
59+
contentWindow.postMessage(message, "http://localhost:8000");
5860
}

0 commit comments

Comments
 (0)