@@ -3,9 +3,12 @@ import axios, { AxiosError, AxiosInstance } from 'axios'
3
3
import { get } from 'lodash'
4
4
import ResponseError from 'modules/Response/ResponseError'
5
5
6
+ const AXIOS_TIMEOUT = process . env . AXIOS_TIMEOUT || 5000
7
+
6
8
function createAuthAxios ( baseURL : string ) : AxiosInstance {
7
9
const instanceAxios = axios . create ( {
8
10
baseURL,
11
+ timeout : Number ( AXIOS_TIMEOUT ) ,
9
12
} )
10
13
11
14
instanceAxios . interceptors . request . use ( ( config ) => {
@@ -25,14 +28,30 @@ function createAuthAxios(baseURL: string): AxiosInstance {
25
28
return response
26
29
} ,
27
30
function onError ( error : AxiosError ) {
28
- const status = get ( error , 'response.status' , null )
29
- if ( status === 401 ) {
31
+ const statusCode = get ( error , 'response.status' , null )
32
+ const message = get ( error , 'response.data.message' , null )
33
+
34
+ if ( statusCode === 401 ) {
30
35
console . log ( 'Unauhtorized' )
31
- return Promise . reject ( error )
36
+ throw new ResponseError . Unauthorized ( message )
37
+ }
38
+
39
+ if ( statusCode === 400 ) {
40
+ console . log ( 'Bad Request' )
41
+ throw new ResponseError . BadRequest ( message )
42
+ }
43
+
44
+ if ( statusCode === 404 ) {
45
+ console . log ( 'Not Found' )
46
+ throw new ResponseError . NotFound ( message )
32
47
}
33
48
34
49
const handleError = error ?. response ?. headers ?. handleError
35
50
if ( ! handleError || ! handleError ( error ) ) {
51
+ if ( error . code === 'ECONNREFUSED' ) {
52
+ throw new ResponseError . InternalServer ( 'service unavailable' )
53
+ }
54
+
36
55
console . log ( error . message )
37
56
throw new ResponseError . BadRequest ( error . message )
38
57
}
@@ -46,6 +65,7 @@ function createAuthAxios(baseURL: string): AxiosInstance {
46
65
function createDefaultAxios ( baseURL : string ) : AxiosInstance {
47
66
const instanceAxios = axios . create ( {
48
67
baseURL,
68
+ timeout : Number ( AXIOS_TIMEOUT ) ,
49
69
} )
50
70
51
71
instanceAxios . interceptors . response . use (
@@ -73,6 +93,10 @@ function createDefaultAxios(baseURL: string): AxiosInstance {
73
93
74
94
const handleError = error ?. response ?. headers ?. handleError
75
95
if ( ! handleError || ! handleError ( error ) ) {
96
+ if ( error . code === 'ECONNREFUSED' ) {
97
+ throw new ResponseError . InternalServer ( 'service unavailable' )
98
+ }
99
+
76
100
console . log ( error . message )
77
101
throw new ResponseError . BadRequest ( error . message )
78
102
}
0 commit comments