11// Copyright (c) Microsoft Corporation.
22// Licensed under the MIT license.
33
4- import { KeyVaultOptions } from "./keyVaultOptions.js" ;
4+ import { KeyVaultOptions , MIN_SECRET_REFRESH_INTERVAL_IN_MS } from "./keyVaultOptions.js" ;
55import { RefreshTimer } from "../refresh/refreshTimer.js" ;
66import { ArgumentError } from "../common/errors.js" ;
77import { SecretClient , KeyVaultSecretIdentifier } from "@azure/keyvault-secrets" ;
@@ -10,6 +10,7 @@ import { KeyVaultReferenceErrorMessages } from "../common/errorMessages.js";
1010export class AzureKeyVaultSecretProvider {
1111 #keyVaultOptions: KeyVaultOptions | undefined ;
1212 #secretRefreshTimer: RefreshTimer | undefined ;
13+ #minSecretRefreshTimer: RefreshTimer ;
1314 #secretClients: Map < string , SecretClient > ; // map key vault hostname to corresponding secret client
1415 #cachedSecretValues: Map < string , any > = new Map < string , any > ( ) ; // map secret identifier to secret value
1516
@@ -24,6 +25,7 @@ export class AzureKeyVaultSecretProvider {
2425 }
2526 this . #keyVaultOptions = keyVaultOptions ;
2627 this . #secretRefreshTimer = refreshTimer ;
28+ this . #minSecretRefreshTimer = new RefreshTimer ( MIN_SECRET_REFRESH_INTERVAL_IN_MS ) ;
2729 this . #secretClients = new Map ( ) ;
2830 for ( const client of this . #keyVaultOptions?. secretClients ?? [ ] ) {
2931 const clientUrl = new URL ( client . vaultUrl ) ;
@@ -47,7 +49,10 @@ export class AzureKeyVaultSecretProvider {
4749 }
4850
4951 clearCache ( ) : void {
50- this . #cachedSecretValues. clear ( ) ;
52+ if ( this . #minSecretRefreshTimer. canRefresh ( ) ) {
53+ this . #cachedSecretValues. clear ( ) ;
54+ this . #minSecretRefreshTimer. reset ( ) ;
55+ }
5156 }
5257
5358 async #getSecretValueFromKeyVault( secretIdentifier : KeyVaultSecretIdentifier ) : Promise < unknown > {
0 commit comments