1
- import axios , { AxiosInstance , AxiosRequestConfig , AxiosResponse } from 'axios' ;
2
- import { BaseApiResponseHandler } from './base_api_response_handler' ;
3
- import { ApiResponse , ApiResponseError , ApiResponseSuccess } from '../types' ;
4
- import { DjangoApiResponseHandler } from './django_service/django_api_response_handler' ;
5
- import DjangoApi from './django_service/django_api' ;
1
+ import axios , { type AxiosInstance , type AxiosRequestConfig , type AxiosResponse } from 'axios'
2
+ import { BaseApiResponseHandler } from './base_api_response_handler'
3
+ import { type ApiResponse , ApiResponseError } from '../types'
4
+ import { DjangoApiResponseHandler } from './django_service/django_api_response_handler'
5
+ import DjangoApi from './django_service/django_api'
6
6
7
7
/**
8
8
* BASE API
@@ -57,7 +57,6 @@ export abstract class BaseApi {
57
57
return this . _axiosInstance
58
58
}
59
59
60
-
61
60
/**
62
61
* HTTP METHODS
63
62
*
@@ -94,48 +93,49 @@ export abstract class BaseApi {
94
93
this . loading = false
95
94
return response
96
95
}
96
+
97
97
/**
98
98
* catchDuplicates
99
99
* A helper/wrapper function to handle retrying requests if necessary.
100
100
* Avoids duplicate requests within a certain time window.
101
101
*/
102
102
async catchDuplicates < T = null > ( requestFunction : ( ) => Promise < AxiosResponse > , urlToCall : string ) : Promise < ApiResponse < T > > {
103
- const now = Date . now ( ) ;
103
+ const now = Date . now ( )
104
104
// this accounts for both the page the URL is called on and the URL itself
105
105
// that way if a user is changing pages, the following ID is different and
106
106
// the request will go through
107
- const pageUrlId = `${ urlToCall } ` ;
107
+ const pageUrlId = `${ urlToCall } `
108
108
109
109
// Check if the request is a duplicate
110
- const lastRequestTime = BaseApi . lastRequestTimestamps [ pageUrlId ] || 0 ;
111
- const timeElapsed = now - lastRequestTime ;
112
- const duplicateCall = timeElapsed < this . minimumDelay ;
113
- const lastSuccessfulResponse = BaseApi . lastSuccessfulResponses [ pageUrlId ] ;
110
+ const lastRequestTime = BaseApi . lastRequestTimestamps [ pageUrlId ] || 0
111
+ const timeElapsed = now - lastRequestTime
112
+ const duplicateCall = timeElapsed < this . minimumDelay
113
+ const lastSuccessfulResponse = BaseApi . lastSuccessfulResponses [ pageUrlId ]
114
114
115
115
if ( duplicateCall && lastSuccessfulResponse ) {
116
- lastSuccessfulResponse . duplicate = true ;
117
- return lastSuccessfulResponse ;
116
+ lastSuccessfulResponse . duplicate = true
117
+ return lastSuccessfulResponse
118
118
}
119
119
120
120
// Update the last request timestamp
121
- BaseApi . lastRequestTimestamps [ pageUrlId ] = now ;
121
+ BaseApi . lastRequestTimestamps [ pageUrlId ] = now
122
122
123
123
// Get the response handler
124
124
const responseHandler =
125
125
this instanceof DjangoApi
126
126
? new DjangoApiResponseHandler < T > ( this , requestFunction ( ) )
127
- : new BaseApiResponseHandler < T > ( this , requestFunction ( ) ) ;
127
+ : new BaseApiResponseHandler < T > ( this , requestFunction ( ) )
128
128
129
129
try {
130
130
// Make the request
131
- const response = await responseHandler . handleResponse ( ) ;
131
+ const response = await responseHandler . handleResponse ( )
132
132
133
133
// Store the response
134
- BaseApi . lastSuccessfulResponses [ pageUrlId ] = response ;
135
- return response ;
134
+ BaseApi . lastSuccessfulResponses [ pageUrlId ] = response
135
+ return response
136
136
} catch ( error ) {
137
- console . error ( `Error in ${ this . name } for URL ${ urlToCall } :` , error ) ;
138
- return new ApiResponseError < T > ( { } as AxiosResponse ) ;
137
+ console . error ( `Error in ${ this . name } for URL ${ urlToCall } :` , error )
138
+ return new ApiResponseError < T > ( { } as AxiosResponse )
139
139
}
140
140
}
141
- }
141
+ }
0 commit comments