From 5e4e4914832d6bdf12fd96a6908f7af3061808fe Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sun, 16 Oct 2022 17:01:37 +0200 Subject: [PATCH] added axios client; fixed "validate-email" -> "verify-email" --- package.json | 1 + src/AuthContext/AuthContextProvider.tsx | 7 ++++--- src/apis/check-is-domain-disposable.ts | 4 ++-- src/apis/create-alias.ts | 10 ++++------ src/apis/get-aliases.ts | 8 +++----- src/apis/get-server-settings.ts | 8 ++++---- src/apis/helpers/parse-alias.ts | 16 --------------- src/apis/helpers/parse-user.ts | 16 ++------------- src/apis/index.ts | 6 ++++-- src/apis/logout.ts | 5 ++--- src/apis/refresh-token.ts | 5 ++--- src/apis/resend-email-verification-code.ts | 5 ++--- src/apis/signup.ts | 4 ++-- src/apis/update-account.ts | 20 +++++++++++++++++++ .../{validate-email.ts => verify-email.ts} | 11 +++++----- src/constants/axios-client.ts | 4 ++++ src/routes/VerifyEmailRoute.tsx | 10 +++++----- src/server-types.ts | 4 ++++ 18 files changed, 70 insertions(+), 74 deletions(-) delete mode 100644 src/apis/helpers/parse-alias.ts rename src/apis/{validate-email.ts => verify-email.ts} (61%) create mode 100644 src/constants/axios-client.ts diff --git a/package.json b/package.json index a56c005..1e69cb5 100755 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@mui/material": "^5.10.9", "@tanstack/react-query": "^4.12.0", "axios": "^1.1.2", + "axios-case-converter": "^0.11.1", "crypto-js": "^4.1.1", "date-fns": "^2.29.3", "formik": "^2.2.9", diff --git a/src/AuthContext/AuthContextProvider.tsx b/src/AuthContext/AuthContextProvider.tsx index eecdf68..94f842e 100644 --- a/src/AuthContext/AuthContextProvider.tsx +++ b/src/AuthContext/AuthContextProvider.tsx @@ -1,6 +1,6 @@ import {ReactElement, ReactNode, useCallback, useEffect, useMemo} from "react" import {useLocalStorage} from "react-use" -import axios, {AxiosError} from "axios" +import {AxiosError} from "axios" import {useMutation} from "@tanstack/react-query" @@ -11,6 +11,7 @@ import { logout as logoutUser, refreshToken, } from "~/apis" +import {client} from "~/constants/axios-client" import AuthContext, {AuthContextType} from "./AuthContext" @@ -59,7 +60,7 @@ export default function AuthContextProvider({ ) useEffect(() => { - const interceptor = axios.interceptors.response.use( + const interceptor = client.interceptors.response.use( response => response, async (error: AxiosError) => { if (error.isAxiosError) { @@ -80,7 +81,7 @@ export default function AuthContextProvider({ }, ) - return () => axios.interceptors.response.eject(interceptor) + return () => client.interceptors.response.eject(interceptor) }, [logout, refresh]) return {children} diff --git a/src/apis/check-is-domain-disposable.ts b/src/apis/check-is-domain-disposable.ts index fa06fa8..a9c316c 100644 --- a/src/apis/check-is-domain-disposable.ts +++ b/src/apis/check-is-domain-disposable.ts @@ -1,9 +1,9 @@ -import axios from "axios" +import {client} from "~/constants/axios-client" export default async function checkIsDomainDisposable( domain: string, ): Promise { - const {data} = await axios.get(`https://api.mailcheck.ai/domain/${domain}`) + const {data} = await client.get(`https://api.mailcheck.ai/domain/${domain}`) return !data.mx || data.disposable } diff --git a/src/apis/create-alias.ts b/src/apis/create-alias.ts index 6170947..4d3599f 100644 --- a/src/apis/create-alias.ts +++ b/src/apis/create-alias.ts @@ -1,12 +1,10 @@ -import axios from "axios" - import { Alias, AliasType, ImageProxyFormatType, ProxyUserAgentType, } from "~/server-types" -import parseAlias from "~/apis/helpers/parse-alias" +import {client} from "~/constants/axios-client" interface CreateAliasDataOther { isActive?: boolean @@ -40,10 +38,10 @@ export type CreateAliasData = export default async function createAlias( aliasData: CreateAliasData, ): Promise { - const {data} = await axios.post( + const {data} = await client.post( `${import.meta.env.VITE_SERVER_BASE_URL}/alias`, - {}, + aliasData, ) - return parseAlias(data) + return data } diff --git a/src/apis/get-aliases.ts b/src/apis/get-aliases.ts index 2e671b0..70d09f5 100644 --- a/src/apis/get-aliases.ts +++ b/src/apis/get-aliases.ts @@ -1,12 +1,10 @@ -import axios from "axios" - import {Alias} from "~/server-types" -import parseAlias from "~/apis/helpers/parse-alias" +import {client} from "~/constants/axios-client" export default async function getAliases(): Promise> { - const {data} = await axios.get( + const {data} = await client.get( `${import.meta.env.VITE_SERVER_BASE_URL}/alias`, ) - return data.map(parseAlias) + return data } diff --git a/src/apis/get-server-settings.ts b/src/apis/get-server-settings.ts index 63dab47..b48517c 100644 --- a/src/apis/get-server-settings.ts +++ b/src/apis/get-server-settings.ts @@ -1,8 +1,8 @@ -import axios from "axios" - import {ServerSettings} from "~/server-types" +import {client} from "~/constants/axios-client" export default async function getServerSettings(): Promise { - return (await axios.get(`${import.meta.env.VITE_SERVER_BASE_URL}/settings`)) - .data + return ( + await client.get(`${import.meta.env.VITE_SERVER_BASE_URL}/settings`) + ).data } diff --git a/src/apis/helpers/parse-alias.ts b/src/apis/helpers/parse-alias.ts deleted file mode 100644 index 13a06e4..0000000 --- a/src/apis/helpers/parse-alias.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Alias} from "~/server-types" - -export default function parseAlias(alias: any): Alias { - return { - id: alias.id, - domain: alias.domain, - local: alias.local, - isActive: alias.is_active, - encryptedNotes: alias.encrypted_notes, - removeTrackers: alias.remove_trackers, - createMailReport: alias.create_mail_report, - proxyImages: alias.proxy_images, - imageProxyFormat: alias.image_proxy_format, - imageProxyUserAgent: alias.image_proxy_user_agent, - } -} diff --git a/src/apis/helpers/parse-user.ts b/src/apis/helpers/parse-user.ts index 1ece2ed..cf3e5aa 100644 --- a/src/apis/helpers/parse-user.ts +++ b/src/apis/helpers/parse-user.ts @@ -2,19 +2,7 @@ import {User} from "~/server-types" export default function parseUser(user: any): User { return { - id: user.id, - createdAt: new Date(user.created_at), - email: { - address: user.email.address, - isVerified: user.email.is_verified, - }, - preferences: { - aliasRemoveTrackers: user.preferences.alias_remove_trackers, - aliasCreateMailReport: user.preferences.alias_create_mail_report, - aliasProxyImages: user.preferences.alias_proxy_images, - aliasImageProxyFormat: user.preferences.alias_image_proxy_format, - aliasImageProxyUserAgent: - user.preferences.alias_image_proxy_user_agent, - }, + ...user, + createdAt: new Date(user.createdAt), } } diff --git a/src/apis/index.ts b/src/apis/index.ts index dca566b..3256d5b 100644 --- a/src/apis/index.ts +++ b/src/apis/index.ts @@ -4,8 +4,8 @@ export * from "./get-server-settings" export {default as getServerSettings} from "./get-server-settings" export * from "./signup" export {default as signup} from "./signup" -export * from "./validate-email" -export {default as validateEmail} from "./validate-email" +export * from "./verify-email" +export {default as verifyEmail} from "./verify-email" export * from "./resend-email-verification-code" export {default as resendEmailVerificationCode} from "./resend-email-verification-code" export * from "./refresh-token" @@ -16,3 +16,5 @@ export * from "./get-aliases" export {default as getAliases} from "./get-aliases" export * from "./create-alias" export {default as createAlias} from "./create-alias" +export * from "./update-account" +export {default as updateAccount} from "./update-account" diff --git a/src/apis/logout.ts b/src/apis/logout.ts index e949f9a..293532d 100644 --- a/src/apis/logout.ts +++ b/src/apis/logout.ts @@ -1,9 +1,8 @@ -import axios from "axios" - import {MinimumServerResponse} from "~/server-types" +import {client} from "~/constants/axios-client" export default async function logout(): Promise { - const {data} = await axios.post( + const {data} = await client.post( `${import.meta.env.VITE_SERVER_BASE_URL}/auth/logout`, ) diff --git a/src/apis/refresh-token.ts b/src/apis/refresh-token.ts index 7c460d3..f658efe 100644 --- a/src/apis/refresh-token.ts +++ b/src/apis/refresh-token.ts @@ -1,6 +1,5 @@ -import axios from "axios" - import {User} from "~/server-types" +import {client} from "~/constants/axios-client" export interface RefreshTokenResult { user: User @@ -12,7 +11,7 @@ export const REFRESH_TOKEN_URL = `${ }/api/refresh-token` export default async function refreshToken(): Promise { - const {data} = await axios.post(REFRESH_TOKEN_URL) + const {data} = await client.post(REFRESH_TOKEN_URL) return data } diff --git a/src/apis/resend-email-verification-code.ts b/src/apis/resend-email-verification-code.ts index c71553b..78f03c3 100644 --- a/src/apis/resend-email-verification-code.ts +++ b/src/apis/resend-email-verification-code.ts @@ -1,11 +1,10 @@ -import axios from "axios" - import {MinimumServerResponse} from "~/server-types" +import {client} from "~/constants/axios-client" export default async function resendEmailVerificationCode( email: string, ): Promise { - const {data} = await axios.post( + const {data} = await client.post( `${import.meta.env.VITE_SERVER_BASE_URL}/auth/resend-email`, { email, diff --git a/src/apis/signup.ts b/src/apis/signup.ts index 67065b1..7f080d0 100644 --- a/src/apis/signup.ts +++ b/src/apis/signup.ts @@ -1,11 +1,11 @@ -import axios from "axios" +import {client} from "~/constants/axios-client" export interface SignupResult { normalized_email: string } export default async function signup(email: string): Promise { - const {data} = await axios.post( + const {data} = await client.post( `${import.meta.env.VITE_SERVER_BASE_URL}/auth/signup`, { email, diff --git a/src/apis/update-account.ts b/src/apis/update-account.ts index 5da0cb5..d5b9174 100644 --- a/src/apis/update-account.ts +++ b/src/apis/update-account.ts @@ -1,4 +1,24 @@ +import {Language} from "~/server-types" +import {client} from "~/constants/axios-client" +import parseUser from "~/apis/helpers/parse-user" + export interface UpdateAccountData { password: string publicKey: string + encryptedPrivateKey: string + language: Language +} + +export default async function updateAccount( + updateData: Partial, +): Promise { + const {data} = await client.patch( + `${import.meta.env.VITE_SERVER_BASE_URL}/account`, + updateData, + ) + + return { + ...data, + user: parseUser(data.user), + } } diff --git a/src/apis/validate-email.ts b/src/apis/verify-email.ts similarity index 61% rename from src/apis/validate-email.ts rename to src/apis/verify-email.ts index 5f1b627..56743de 100644 --- a/src/apis/validate-email.ts +++ b/src/apis/verify-email.ts @@ -1,18 +1,17 @@ -import axios from "axios" - import {AuthenticationDetails} from "~/server-types" +import {client} from "~/constants/axios-client" import parseUser from "~/apis/helpers/parse-user" -export interface ValidateEmailData { +export interface VerifyEmailData { email: string token: string } -export default async function validateEmail({ +export default async function verifyEmail({ email, token, -}: ValidateEmailData): Promise { - const {data} = await axios.post( +}: VerifyEmailData): Promise { + const {data} = await client.post( `${import.meta.env.VITE_SERVER_BASE_URL}/auth/verify-email`, { email: email, diff --git a/src/constants/axios-client.ts b/src/constants/axios-client.ts new file mode 100644 index 0000000..7844b7e --- /dev/null +++ b/src/constants/axios-client.ts @@ -0,0 +1,4 @@ +import applyCaseMiddleware from "axios-case-converter" +import axios from "axios" + +export const client = applyCaseMiddleware(axios.create()) diff --git a/src/routes/VerifyEmailRoute.tsx b/src/routes/VerifyEmailRoute.tsx index 141f043..bc65bf3 100644 --- a/src/routes/VerifyEmailRoute.tsx +++ b/src/routes/VerifyEmailRoute.tsx @@ -9,7 +9,7 @@ import {Grid, Paper, Typography, useTheme} from "@mui/material" import {useMutation} from "@tanstack/react-query" import {AuthenticationDetails, ServerSettings} from "~/server-types" -import {ValidateEmailData, validateEmail} from "~/apis" +import {VerifyEmailData, verifyEmail} from "~/apis" import {useQueryParams} from "~/hooks" import AuthContext from "~/AuthContext/AuthContext" @@ -39,11 +39,11 @@ export default function VerifyEmailRoute(): ReactElement { return token.split("").every(char => chars.includes(char)) }) - const {mutateAsync: verifyEmail} = useMutation< + const {mutateAsync} = useMutation< AuthenticationDetails, AxiosError, - ValidateEmailData - >(validateEmail, { + VerifyEmailData + >(verifyEmail, { onSuccess: async ({user}) => { setEmail("") await login(user, () => navigate("/auth/complete-account")) @@ -53,7 +53,7 @@ export default function VerifyEmailRoute(): ReactElement { await emailSchema.validate(email) await tokenSchema.validate(token) - await verifyEmail({ + await mutateAsync({ email, token, }) diff --git a/src/server-types.ts b/src/server-types.ts index d1c60be..0714df6 100644 --- a/src/server-types.ts +++ b/src/server-types.ts @@ -18,6 +18,10 @@ export enum AliasType { CUSTOM = "custom", } +export enum Language { + EN_US = "en_US", +} + export interface User { id: string createdAt: Date