diff options
author | crupest <crupest@outlook.com> | 2022-04-19 19:37:43 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-04-19 19:37:43 +0800 |
commit | 7187553a32af6a0011e5246080ee2edc2be8215e (patch) | |
tree | 8b3c7607f3019a307fe58820d99269cfbcd6f88c /FrontEnd/src/http | |
parent | b9c770e63da37f3a33e46c69a09f21b4b8d6ad8b (diff) | |
download | timeline-7187553a32af6a0011e5246080ee2edc2be8215e.tar.gz timeline-7187553a32af6a0011e5246080ee2edc2be8215e.tar.bz2 timeline-7187553a32af6a0011e5246080ee2edc2be8215e.zip |
...
Diffstat (limited to 'FrontEnd/src/http')
-rw-r--r-- | FrontEnd/src/http/common.ts | 60 | ||||
-rw-r--r-- | FrontEnd/src/http/token.ts | 8 |
2 files changed, 37 insertions, 31 deletions
diff --git a/FrontEnd/src/http/common.ts b/FrontEnd/src/http/common.ts index 0a27b908..5a8c0346 100644 --- a/FrontEnd/src/http/common.ts +++ b/FrontEnd/src/http/common.ts @@ -1,12 +1,31 @@ -import rawAxios, { AxiosError, AxiosResponse } from "axios"; +import axios, { Axios, AxiosError, AxiosResponse } from "axios"; import { Base64 } from "js-base64"; +import { identity } from "lodash"; import { BehaviorSubject, Observable } from "rxjs"; +export { axios }; + export const apiBaseUrl = "/api"; -export const axios = rawAxios.create(); +export class HttpNetworkError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} -function convertToNetworkError(error: AxiosError): never { +export class HttpForbiddenError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +export class HttpNotFoundError extends Error { + constructor(public innerError?: AxiosError) { + super(); + } +} + +function convertNetworkError(error: AxiosError): never { if (error.isAxiosError && error.response == null) { throw new HttpNetworkError(error); } else { @@ -14,7 +33,7 @@ function convertToNetworkError(error: AxiosError): never { } } -function convertToForbiddenError(error: AxiosError): never { +function convertForbiddenError(error: AxiosError): never { if ( error.isAxiosError && error.response != null && @@ -26,7 +45,7 @@ function convertToForbiddenError(error: AxiosError): never { } } -function convertToNotFoundError(error: AxiosError): never { +function convertNotFoundError(error: AxiosError): never { if ( error.isAxiosError && error.response != null && @@ -38,12 +57,13 @@ function convertToNotFoundError(error: AxiosError): never { } } -rawAxios.interceptors.response.use(undefined, convertToNetworkError); -rawAxios.interceptors.response.use(undefined, convertToForbiddenError); -rawAxios.interceptors.response.use(undefined, convertToNotFoundError); -axios.interceptors.response.use(undefined, convertToNetworkError); -axios.interceptors.response.use(undefined, convertToForbiddenError); -axios.interceptors.response.use(undefined, convertToNotFoundError); +export function configureAxios(axios: Axios): void { + axios.interceptors.response.use(identity, convertNetworkError); + axios.interceptors.response.use(identity, convertForbiddenError); + axios.interceptors.response.use(identity, convertNotFoundError); +} + +configureAxios(axios); const tokenSubject = new BehaviorSubject<string | null>(null); @@ -106,24 +126,6 @@ export function extractErrorCode( return null; } -export class HttpNetworkError extends Error { - constructor(public innerError?: AxiosError) { - super(); - } -} - -export class HttpForbiddenError extends Error { - constructor(public innerError?: AxiosError) { - super(); - } -} - -export class HttpNotFoundError extends Error { - constructor(public innerError?: AxiosError) { - super(); - } -} - export class NotModified {} export interface BlobWithEtag { diff --git a/FrontEnd/src/http/token.ts b/FrontEnd/src/http/token.ts index f8b09d63..3de42d21 100644 --- a/FrontEnd/src/http/token.ts +++ b/FrontEnd/src/http/token.ts @@ -1,14 +1,18 @@ // Don't use axios in common because it will contains // authorization header, which shouldn't be used in token apis. -import axios, { AxiosError } from "axios"; +import originalAxios, { AxiosError } from "axios"; import { apiBaseUrl, convertToIfErrorCodeIs, extractResponseData, + configureAxios, } from "./common"; import { HttpUser } from "./user"; +const axios = originalAxios.create(); +configureAxios(axios); + export interface HttpCreateTokenRequest { username: string; password: string; @@ -42,7 +46,7 @@ export interface IHttpTokenClient { export class HttpTokenClient implements IHttpTokenClient { create(req: HttpCreateTokenRequest): Promise<HttpCreateTokenResponse> { return axios - .post<HttpCreateTokenResponse>(`${apiBaseUrl}/token/create`, req) + .post<HttpCreateTokenResponse>(`${apiBaseUrl}/token/create`, req, {}) .then(extractResponseData) .catch( convertToIfErrorCodeIs(11010101, HttpCreateTokenBadCredentialError) |