1
1
/* eslint-disable no-unused-vars */
2
- import axios , { AxiosInstance } from 'axios'
2
+ import axios , { AxiosError , AxiosInstance } from 'axios'
3
+ import { get } from 'lodash'
4
+ import ResponseError from 'modules/Response/ResponseError'
5
+
6
+ function createAuthAxios ( baseURL : string ) : AxiosInstance {
7
+ const instanceAxios = axios . create ( {
8
+ baseURL,
9
+ } )
10
+
11
+ instanceAxios . interceptors . request . use ( ( config ) => {
12
+ const curConfig = { ...config }
13
+
14
+ // ALWAYS READ UPDATED TOKEN
15
+ try {
16
+ curConfig . headers . Authorization = localStorage . getItem ( 'token' )
17
+ } catch ( e ) {
18
+ console . log ( e )
19
+ }
20
+ return curConfig
21
+ } )
22
+
23
+ instanceAxios . interceptors . response . use (
24
+ function onSuccess ( response ) {
25
+ return response
26
+ } ,
27
+ function onError ( error : AxiosError ) {
28
+ const status = get ( error , 'response.status' , null )
29
+ if ( status === 401 ) {
30
+ console . log ( 'Unauhtorized' )
31
+ return Promise . reject ( error )
32
+ }
33
+
34
+ const handleError = error ?. response ?. headers ?. handleError
35
+ if ( ! handleError || ! handleError ( error ) ) {
36
+ console . log ( error . message )
37
+ throw new ResponseError . BadRequest ( error . message )
38
+ }
39
+ return Promise . reject ( error )
40
+ }
41
+ )
42
+
43
+ return instanceAxios
44
+ }
3
45
4
46
class FetchApi {
5
47
private axiosDefault : AxiosInstance
6
48
49
+ private axiosToken : AxiosInstance
50
+
7
51
private baseUri : string
8
52
9
53
constructor ( baseUri : string ) {
10
54
// @ts -ignore
11
55
this . axiosDefault = null
56
+ // @ts -ignore
57
+ this . axiosToken = null
12
58
this . baseUri = baseUri
13
59
}
14
60
@@ -22,6 +68,14 @@ class FetchApi {
22
68
23
69
return this . axiosDefault
24
70
}
71
+
72
+ get withAuth ( ) : AxiosInstance {
73
+ if ( ! this . axiosToken ) {
74
+ this . axiosToken = createAuthAxios ( this . baseUri )
75
+ return this . axiosToken
76
+ }
77
+ return this . axiosToken
78
+ }
25
79
}
26
80
27
81
export default FetchApi
0 commit comments