@@ -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