@@ -339,12 +339,12 @@ export interface AzureClientOptions extends ClientOptions {
339
339
* A function that returns an access token for Microsoft Entra (formerly known as Azure Active Directory),
340
340
* which will be invoked on every request.
341
341
*/
342
- azureADTokenProvider ?: ( ( ) => string ) | undefined ;
342
+ azureADTokenProvider ?: ( ( ) => Promise < string > ) | undefined ;
343
343
}
344
344
345
345
/** API Client for interfacing with the Azure OpenAI API. */
346
346
export class AzureOpenAI extends OpenAI {
347
- private _azureADTokenProvider : ( ( ) => string ) | undefined ;
347
+ private _azureADTokenProvider : ( ( ) => Promise < string > ) | undefined ;
348
348
apiVersion : string = '' ;
349
349
/**
350
350
* API Client for interfacing with the Azure OpenAI API.
@@ -451,9 +451,9 @@ export class AzureOpenAI extends OpenAI {
451
451
return super . buildRequest ( options ) ;
452
452
}
453
453
454
- private _getAzureADToken ( ) : string | undefined {
454
+ private async _getAzureADToken ( ) : Promise < string | undefined > {
455
455
if ( typeof this . _azureADTokenProvider === 'function' ) {
456
- const token = this . _azureADTokenProvider ( ) ;
456
+ const token = await this . _azureADTokenProvider ( ) ;
457
457
if ( ! token || typeof token !== 'string' ) {
458
458
throw new Errors . OpenAIError (
459
459
`Expected 'azureADTokenProvider' argument to return a string but it returned ${ token } ` ,
@@ -465,17 +465,23 @@ export class AzureOpenAI extends OpenAI {
465
465
}
466
466
467
467
protected override authHeaders ( opts : Core . FinalRequestOptions ) : Core . Headers {
468
+ return { } ;
469
+ }
470
+
471
+ protected override async prepareOptions ( opts : Core . FinalRequestOptions < unknown > ) : Promise < void > {
468
472
if ( opts . headers ?. [ 'Authorization' ] || opts . headers ?. [ 'api-key' ] ) {
469
- return { } ;
473
+ return super . prepareOptions ( opts ) ;
470
474
}
471
- const token = this . _getAzureADToken ( ) ;
475
+ const token = await this . _getAzureADToken ( ) ;
476
+ opts . headers ??= { } ;
472
477
if ( token ) {
473
- return { Authorization : `Bearer ${ token } ` } ;
474
- }
475
- if ( this . apiKey !== API_KEY_SENTINEL ) {
476
- return { 'api-key' : this . apiKey } ;
478
+ opts . headers [ 'Authorization' ] = `Bearer ${ token } ` ;
479
+ } else if ( this . apiKey !== API_KEY_SENTINEL ) {
480
+ opts . headers [ 'api-key' ] = this . apiKey ;
481
+ } else {
482
+ throw new Errors . OpenAIError ( 'Unable to handle auth' ) ;
477
483
}
478
- throw new Errors . OpenAIError ( 'Unable to handle auth' ) ;
484
+ return super . prepareOptions ( opts ) ;
479
485
}
480
486
}
481
487
0 commit comments