src/App/authActions.ts
import superagent from 'superagent';
import { Dispatch } from 'react';
import { AppProps, GoogleBody } from './AppTypes';
export const gotToken = (doc: string): unknown => ({
type: 'GOT_TOKEN',
data: doc,
});
export const authError = (e: Error): unknown => ({
type: 'AUTH_ERROR',
error: e,
});
export const logout = (dispatch: Dispatch<unknown>): void => dispatch({ type: 'LOGOUT' });
async function authFunc(body: GoogleBody, props: AppProps): Promise<string | Error> {
const { auth } = props;
if (auth.isAuthenticated) return 'authenticated';
let data;
try {
data = await superagent.post(`${process.env.BackendUrl}/user/auth/google`)
.set({ Accept: 'application/json' }).send(body);
} catch (e: any) {
props.dispatch(authError(e));
return Promise.reject(e);
}
if (!data.body) {
props.dispatch(authError(new Error('authentication failed')));
return 'authentication failed';
}
props.dispatch(gotToken(data.body));
return 'authenticated';
}
export default authFunc;