@@ -111,7 +111,6 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
111111 #secretRefreshEnabled: boolean = false ;
112112 #secretReferences: ConfigurationSetting [ ] = [ ] ; // cached key vault references
113113 #secretRefreshTimer: RefreshTimer | undefined = undefined ;
114- #resolveSecretsInParallel: boolean = false ;
115114
116115 /**
117116 * Selectors of key-values obtained from @see AzureAppConfigurationOptions.selectors
@@ -203,7 +202,6 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
203202 this . #secretRefreshEnabled = true ;
204203 this . #secretRefreshTimer = new RefreshTimer ( secretRefreshIntervalInMs ) ;
205204 }
206- this . #resolveSecretsInParallel = options . keyVaultOptions . parallelSecretResolutionEnabled ?? false ;
207205 }
208206 this . #adapters. push ( new AzureKeyVaultKeyValueAdapter ( options ?. keyVaultOptions , this . #secretRefreshTimer) ) ;
209207 this . #adapters. push ( new JsonKeyValueAdapter ( ) ) ;
@@ -559,22 +557,19 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
559557 this . #aiConfigurationTracing. reset ( ) ;
560558 }
561559
560+ for ( const adapter of this . #adapters) {
561+ await adapter . preload ?.( loadedSettings . filter ( s => adapter . canProcess ( s ) ) ) ; // dedup and warm the secret cache
562+ }
563+
562564 for ( const setting of loadedSettings ) {
563565 if ( isSecretReference ( setting ) ) {
564566 this . #secretReferences. push ( setting ) ; // cache secret references for resolve/refresh secret separately
565- continue ;
566567 }
567568 // adapt configuration settings to key-values
568569 const [ key , value ] = await this . #processKeyValue( setting ) ;
569570 keyValues . push ( [ key , value ] ) ;
570571 }
571572
572- if ( this . #secretReferences. length > 0 ) {
573- await this . #resolveSecretReferences( this . #secretReferences, ( key , value ) => {
574- keyValues . push ( [ key , value ] ) ;
575- } ) ;
576- }
577-
578573 this . #clearLoadedKeyValues( ) ; // clear existing key-values in case of configuration setting deletion
579574 for ( const [ k , v ] of keyValues ) {
580575 this . #configMap. set ( k , v ) ; // reset the configuration
@@ -672,7 +667,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
672667
673668 if ( needRefresh ) {
674669 for ( const adapter of this . #adapters) {
675- await adapter . onChangeDetected ( ) ;
670+ await adapter . onChangeDetected ?. ( ) ;
676671 }
677672 await this . #loadSelectedKeyValues( ) ;
678673
@@ -716,9 +711,16 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
716711 return Promise . resolve ( false ) ;
717712 }
718713
719- await this . #resolveSecretReferences( this . #secretReferences, ( key , value ) => {
714+ const keyVaultRefAdapter = this . #adapters. find ( adapter => adapter instanceof AzureKeyVaultKeyValueAdapter ) as AzureKeyVaultKeyValueAdapter | undefined ;
715+ if ( keyVaultRefAdapter ) {
716+ // dedup and warm the secret cache
717+ await keyVaultRefAdapter . preload ( this . #secretReferences) ;
718+ }
719+
720+ for ( const setting of this . #secretReferences) {
721+ const [ key , value ] = await this . #processKeyValue( setting ) ;
720722 this . #configMap. set ( key , value ) ;
721- } ) ;
723+ }
722724
723725 this . #secretRefreshTimer. reset ( ) ;
724726 return Promise . resolve ( true ) ;
@@ -894,27 +896,6 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
894896 throw new Error ( ErrorMessages . ALL_FALLBACK_CLIENTS_FAILED ) ;
895897 }
896898
897- async #resolveSecretReferences( secretReferences : ConfigurationSetting [ ] , resultHandler : ( key : string , value : unknown ) => void ) : Promise < void > {
898- if ( this . #resolveSecretsInParallel) {
899- const secretResolutionPromises : Promise < void > [ ] = [ ] ;
900- for ( const setting of secretReferences ) {
901- const secretResolutionPromise = this . #processKeyValue( setting )
902- . then ( ( [ key , value ] ) => {
903- resultHandler ( key , value ) ;
904- } ) ;
905- secretResolutionPromises . push ( secretResolutionPromise ) ;
906- }
907-
908- // Wait for all secret resolution promises to be resolved
909- await Promise . all ( secretResolutionPromises ) ;
910- } else {
911- for ( const setting of secretReferences ) {
912- const [ key , value ] = await this . #processKeyValue( setting ) ;
913- resultHandler ( key , value ) ;
914- }
915- }
916- }
917-
918899 async #processKeyValue( setting : ConfigurationSetting < string > ) : Promise < [ string , unknown ] > {
919900 this . #setAIConfigurationTracing( setting ) ;
920901
0 commit comments