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