Skip to content

Commit 3d3d7d7

Browse files
committed
add login workflow
1 parent d0b3988 commit 3d3d7d7

File tree

1 file changed

+35
-5
lines changed

1 file changed

+35
-5
lines changed

apps/playground/src/components/Header/ActionsDropdown/LoginDialog.tsx

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ export const LoginDialog = ({ isOpen, setIsOpen }: LoginDialogProps) => {
2828
const apiBaseUrl = useAppStore((store) => store.settings.apiBaseUrl);
2929
const isAuthorized = useAppStore((store) => !!store.auth);
3030
const updateSettings = useAppStore((store) => store.updateSettings);
31+
const login = useAppStore((store) => store.login);
3132

3233
const addNotification = useNotificationsStore((store) => store.addNotification);
3334

34-
const login = (credentials: $LoginCredentials): ResultAsync<{ accessToken: string }, string> => {
35+
const getAdminToken = (credentials: $LoginCredentials): ResultAsync<{ accessToken: string }, string> => {
3536
return asyncResultify(async () => {
3637
try {
3738
const response = await axios.post(`${apiBaseUrl}/v1/auth/login`, credentials, {
@@ -46,17 +47,46 @@ export const LoginDialog = ({ isOpen, setIsOpen }: LoginDialogProps) => {
4647
return ok(await z.object({ accessToken: z.jwt() }).parseAsync(response.data));
4748
} catch (error) {
4849
console.error(error);
49-
return err('Login Failed: Unknown Error');
50+
return err('Unknown Error');
51+
}
52+
});
53+
};
54+
55+
const getLimitedToken = (adminToken: string): ResultAsync<{ accessToken: string }, string> => {
56+
return asyncResultify(async () => {
57+
try {
58+
const response = await axios.get(`${apiBaseUrl}/v1/auth/create-instrument-token`, {
59+
headers: {
60+
Accept: 'application/json',
61+
Authorization: `Bearer ${adminToken}`
62+
},
63+
validateStatus: () => true
64+
});
65+
if (response.status !== 200) {
66+
return err(`${response.status}: ${response.statusText}`);
67+
}
68+
return ok(await z.object({ accessToken: z.jwt() }).parseAsync(response.data));
69+
} catch (error) {
70+
console.error(error);
71+
return err('Unknown Error');
5072
}
5173
});
5274
};
5375

5476
const handleSubmit = async ({ apiBaseUrl, ...credentials }: $LoginData) => {
5577
updateSettings({ apiBaseUrl });
56-
const loginResult = await login(credentials);
57-
if (loginResult.isErr()) {
58-
addNotification({ type: 'error', message: loginResult.error });
78+
const adminTokenResult = await getAdminToken(credentials);
79+
if (adminTokenResult.isErr()) {
80+
addNotification({ type: 'error', title: 'Login Failed', message: adminTokenResult.error });
81+
return;
5982
}
83+
const limitedTokenResult = await getLimitedToken(adminTokenResult.value.accessToken);
84+
if (limitedTokenResult.isErr()) {
85+
addNotification({ type: 'error', title: 'Failed to Get Limited Token', message: limitedTokenResult.error });
86+
return;
87+
}
88+
89+
login(limitedTokenResult.value.accessToken);
6090

6191
addNotification({ type: 'success' });
6292
};

0 commit comments

Comments
 (0)