@@ -210,22 +210,29 @@ class Agent extends EmbeddedDocument {
210
210
* @return {Object } request The configured axios instance to use for a request.
211
211
*/
212
212
request ( data , parameters = { } ) {
213
+ const id = uuidv4 ( ) ;
213
214
const interceptor = instance . interceptors . request . use (
214
215
( { httpAgent, httpsAgent, ...request } ) => {
215
216
instance . interceptors . request . eject ( interceptor ) ;
216
217
return new Promise ( ( resolve , reject ) =>
217
218
this . push ( {
218
- request : this . handleRequest ( request ) ,
219
+ request : this . handleRequest ( request , id ) ,
219
220
resolve,
220
221
reject
221
222
} )
222
223
) ;
223
224
}
224
225
) ;
225
226
226
- instance . interceptors . response . use (
227
- response => this . handleResponse ( response ) ,
228
- error => this . handleError ( error )
227
+ const response = instance . interceptors . response . use (
228
+ response => {
229
+ instance . interceptors . response . eject ( response ) ;
230
+ return this . handleResponse ( response , id ) ;
231
+ } ,
232
+ error => {
233
+ instance . interceptors . response . eject ( response ) ;
234
+ return this . handleError ( error , id ) ;
235
+ }
229
236
) ;
230
237
231
238
return instance (
@@ -246,17 +253,22 @@ class Agent extends EmbeddedDocument {
246
253
* @description handles request data before it is sent to the resource. This function
247
254
* will eventually be used to cancel the request and return the configuration body.
248
255
* This function will test the url for an http proticol and reject if none exist.
249
- * @param {Object } response The axios response
256
+ * @param {Object } response The axios response.
257
+ * @param {String } id the request id.
250
258
* @return {Promise } the request configuration object
251
259
*/
252
- handleResponse ( response ) {
260
+ handleResponse ( response , id ) {
261
+ const token = _ . get ( response , 'config.headers.Authorization' ) ;
262
+ if ( token ) {
263
+ this . connection . deactivate ( token , id ) ;
264
+ }
253
265
if ( typeof response . data !== 'object' ) {
254
266
return Promise . reject ( {
255
267
message : 'The Data API is currently unavailable' ,
256
268
code : '1630'
257
269
} ) ;
258
270
} else {
259
- this . connection . extend ( response . config . headers . Authorization ) ;
271
+ this . connection . extend ( token ) ;
260
272
return response ;
261
273
}
262
274
}
@@ -268,10 +280,12 @@ class Agent extends EmbeddedDocument {
268
280
* @description handles request data before it is sent to the resource. This function
269
281
* will eventually be used to cancel the request and return the configuration body.
270
282
* This function will test the url for an http proticol and reject if none exist.
271
- * @param {Object } config The axios request configuration
283
+ * @param {Object } config The axios request configuration.
284
+ * @param {String } id the request id.
272
285
* @return {Promise } the request configuration object
273
286
*/
274
- handleRequest ( config ) {
287
+ handleRequest ( config , id ) {
288
+ config . id = id ;
275
289
return config . url . startsWith ( 'http' )
276
290
? omit ( config , [ 'params.request' , 'data.request' ] )
277
291
: Promise . reject ( {
@@ -362,9 +376,17 @@ class Agent extends EmbeddedDocument {
362
376
* function will add an expired property to the error response if it recieves a invalid
363
377
* token response.
364
378
* @param {Object } error The error recieved from the requested resource.
379
+ * @param {String } id the request id.
365
380
* @return {Promise } A promise rejection containing a code and a message
366
381
*/
367
- handleError ( error ) {
382
+ handleError ( error , id ) {
383
+ const token = _ . get ( error , 'config.headers.Authorization' ) ;
384
+ if ( token ) {
385
+ this . connection . deactivate ( token , id ) ;
386
+ }
387
+
388
+ this . connection . confirm ( ) ;
389
+
368
390
if ( error . code ) {
369
391
return Promise . reject ( { code : error . code , message : error . message } ) ;
370
392
} else if (
@@ -377,9 +399,7 @@ class Agent extends EmbeddedDocument {
377
399
} ) ;
378
400
} else {
379
401
if ( error . response . data . messages [ 0 ] . code === '952' )
380
- this . connection . clear (
381
- _ . get ( error , 'response.config.headers.Authorization' )
382
- ) ;
402
+ this . connection . clear ( token ) ;
383
403
return Promise . reject ( error . response . data . messages [ 0 ] ) ;
384
404
}
385
405
}
@@ -464,7 +484,8 @@ class Agent extends EmbeddedDocument {
464
484
Object . assign (
465
485
this . mutate ( pending . request , ( value , key ) =>
466
486
key . replace ( / { { dot} } / g, '.' )
467
- )
487
+ ) ,
488
+ { id : pending . id }
468
489
) ,
469
490
_ . isEmpty ( this . agent ) ? { } : this . localize ( )
470
491
)
0 commit comments