@@ -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 (
@@ -303,7 +305,7 @@ export class BitGoAPI implements BitGoBase {
303305 * @param method - http method for the new request
304306 * @param url - URL for the new request
305307 */
306- protected getAgentRequest ( method : ( typeof patchedRequestMethods ) [ number ] , url : string ) : superagent . SuperAgentRequest {
308+ protected getAgentRequest ( method : RequestMethods , url : string ) : superagent . SuperAgentRequest {
307309 let req : superagent . SuperAgentRequest = superagent [ method ] ( url ) ;
308310 if ( this . cookiesPropagationEnabled ) {
309311 req = req . withCredentials ( ) ;
@@ -337,7 +339,7 @@ export class BitGoAPI implements BitGoBase {
337339 * headers to any outbound request.
338340 * @param method
339341 */
340- private requestPatch ( method : ( typeof patchedRequestMethods ) [ number ] , url : string ) {
342+ private requestPatch ( method : RequestMethods , url : string ) {
341343 const req = this . getAgentRequest ( method , url ) ;
342344 if ( this . _customProxyAgent ) {
343345 debug ( 'using custom proxy agent' ) ;
@@ -394,8 +396,8 @@ export class BitGoAPI implements BitGoBase {
394396
395397 req . set ( 'BitGo-Auth-Version' , this . _authVersion === 3 ? '3.0' : '2.0' ) ;
396398
399+ const data = serializeRequestData ( req ) ;
397400 if ( this . _token ) {
398- const data = serializeRequestData ( req ) ;
399401 setRequestQueryString ( req ) ;
400402
401403 const requestProperties = this . calculateRequestHeaders ( {
@@ -415,6 +417,13 @@ export class BitGoAPI implements BitGoBase {
415417 req . set ( 'HMAC' , requestProperties . hmac ) ;
416418 }
417419
420+ if ( this . getAdditionalHeadersCb ) {
421+ const additionalHeaders = this . getAdditionalHeadersCb ( method , url , data ) ;
422+ for ( const { key, value } of additionalHeaders ) {
423+ req . set ( key , value ) ;
424+ }
425+ }
426+
418427 /**
419428 * Verify the response before calling the original onfulfilled handler,
420429 * and make sure onrejected is called if a verification error is encountered
0 commit comments