@@ -44,6 +44,7 @@ import {
4444 AccessTokenOptions ,
4545 AddAccessTokenOptions ,
4646 AddAccessTokenResponse ,
47+ AdditionalHeadersCallback ,
4748 AuthenticateOptions ,
4849 AuthenticateWithAuthCodeOptions ,
4950 BitGoAPIOptions ,
@@ -67,6 +68,7 @@ import {
6768 RegisterPushTokenOptions ,
6869 RemoveAccessTokenOptions ,
6970 RequestHeaders ,
71+ RequestMethods ,
7072 SplitSecret ,
7173 SplitSecretOptions ,
7274 TokenIssuance ,
@@ -94,8 +96,6 @@ const PendingApprovals = require('./v1/pendingapprovals');
9496const TravelRule = require ( './v1/travelRule' ) ;
9597const TransactionBuilder = require ( './v1/transactionBuilder' ) ;
9698
97- const patchedRequestMethods = [ 'get' , 'post' , 'put' , 'del' , 'patch' , 'options' ] as const ;
98-
9999export class BitGoAPI implements BitGoBase {
100100 // v1 types
101101 protected _keychains : any ;
@@ -130,8 +130,10 @@ export class BitGoAPI implements BitGoBase {
130130 protected _validate : boolean ;
131131 public readonly cookiesPropagationEnabled : boolean ;
132132 private _customProxyAgent ?: Agent ;
133+ private getAdditionalHeadersCb ?: AdditionalHeadersCallback ;
133134
134135 constructor ( params : BitGoAPIOptions = { } ) {
136+ this . getAdditionalHeadersCb = params . getAdditionalHeadersCb ;
135137 this . cookiesPropagationEnabled = false ;
136138 if (
137139 ! common . validateParams (
@@ -302,7 +304,7 @@ export class BitGoAPI implements BitGoBase {
302304 * @param method - http method for the new request
303305 * @param url - URL for the new request
304306 */
305- protected getAgentRequest ( method : ( typeof patchedRequestMethods ) [ number ] , url : string ) : superagent . SuperAgentRequest {
307+ protected getAgentRequest ( method : RequestMethods , url : string ) : superagent . SuperAgentRequest {
306308 let req : superagent . SuperAgentRequest = superagent [ method ] ( url ) ;
307309 if ( this . cookiesPropagationEnabled ) {
308310 req = req . withCredentials ( ) ;
@@ -336,7 +338,7 @@ export class BitGoAPI implements BitGoBase {
336338 * headers to any outbound request.
337339 * @param method
338340 */
339- private requestPatch ( method : ( typeof patchedRequestMethods ) [ number ] , url : string ) {
341+ private requestPatch ( method : RequestMethods , url : string ) {
340342 const req = this . getAgentRequest ( method , url ) ;
341343 if ( this . _customProxyAgent ) {
342344 debug ( 'using custom proxy agent' ) ;
@@ -414,6 +416,14 @@ export class BitGoAPI implements BitGoBase {
414416 req . set ( 'HMAC' , requestProperties . hmac ) ;
415417 }
416418
419+ if ( this . getAdditionalHeadersCb ) {
420+ const data = serializeRequestData ( req ) ;
421+ const additionalHeaders = this . getAdditionalHeadersCb ( method , url , data ) ;
422+ for ( const { key, value } of additionalHeaders ) {
423+ req . set ( key , value ) ;
424+ }
425+ }
426+
417427 /**
418428 * Verify the response before calling the original onfulfilled handler,
419429 * and make sure onrejected is called if a verification error is encountered
0 commit comments