@@ -6,6 +6,8 @@ import { IKeyValueAdapter } from "../IKeyValueAdapter.js";
66import { KeyVaultOptions } from "./KeyVaultOptions.js" ;
77import { ArgumentError , KeyVaultReferenceError } from "../common/error.js" ;
88import { SecretClient , parseKeyVaultSecretIdentifier } from "@azure/keyvault-secrets" ;
9+ import { isRestError } from "@azure/core-rest-pipeline" ;
10+ import { AuthenticationError } from "@azure/identity" ;
911
1012export class AzureKeyVaultKeyValueAdapter implements IKeyValueAdapter {
1113 /**
@@ -27,12 +29,20 @@ export class AzureKeyVaultKeyValueAdapter implements IKeyValueAdapter {
2729 if ( ! this . #keyVaultOptions) {
2830 throw new ArgumentError ( "Failed to process the Key Vault reference because Key Vault options are not configured." ) ;
2931 }
30- let sourceId ;
32+ let secretName , vaultUrl , sourceId , version ;
3133 try {
32- const { name : secretName , vaultUrl, sourceId : parsedSourceId , version } = parseKeyVaultSecretIdentifier (
34+ const { name : parsedName , vaultUrl : parsedVaultUrl , sourceId : parsedSourceId , version : parsedVersion } = parseKeyVaultSecretIdentifier (
3335 parseSecretReference ( setting ) . value . secretId
3436 ) ;
37+ secretName = parsedName ;
38+ vaultUrl = parsedVaultUrl ;
3539 sourceId = parsedSourceId ;
40+ version = parsedVersion ;
41+ } catch ( error ) {
42+ throw new KeyVaultReferenceError ( buildKeyVaultReferenceErrorMessage ( "Invalid Key Vault reference." , setting ) , { cause : error } ) ;
43+ }
44+
45+ try {
3646 // precedence: secret clients > credential > secret resolver
3747 const client = this . #getSecretClient( new URL ( vaultUrl ) ) ;
3848 if ( client ) {
@@ -43,7 +53,10 @@ export class AzureKeyVaultKeyValueAdapter implements IKeyValueAdapter {
4353 return [ setting . key , await this . #keyVaultOptions. secretResolver ( new URL ( sourceId ) ) ] ;
4454 }
4555 } catch ( error ) {
46- throw new KeyVaultReferenceError ( buildKeyVaultReferenceErrorMessage ( setting , sourceId ) , { cause : error } ) ;
56+ if ( isRestError ( error ) || error instanceof AuthenticationError ) {
57+ throw new KeyVaultReferenceError ( buildKeyVaultReferenceErrorMessage ( "Failed to resolve Key Vault reference." , setting , sourceId ) , { cause : error } ) ;
58+ }
59+ throw error ;
4760 }
4861
4962 // When code reaches here, it means that the key vault reference cannot be resolved in all possible ways.
@@ -80,6 +93,6 @@ export class AzureKeyVaultKeyValueAdapter implements IKeyValueAdapter {
8093 }
8194}
8295
83- function buildKeyVaultReferenceErrorMessage ( setting : ConfigurationSetting , secretIdentifier ?: string ) : string {
84- return `Failed to resolve Key Vault reference. Key: '${ setting . key } ' Label: '${ setting . label ?? "" } ' ETag: '${ setting . etag ?? "" } ' ${ secretIdentifier ? ` SecretIdentifier: '${ secretIdentifier } '` : "" } ` ;
96+ function buildKeyVaultReferenceErrorMessage ( message : string , setting : ConfigurationSetting , secretIdentifier ?: string ) : string {
97+ return `${ message } Key: '${ setting . key } ' Label: '${ setting . label ?? "" } ' ETag: '${ setting . etag ?? "" } ' ${ secretIdentifier ? ` SecretIdentifier: '${ secretIdentifier } '` : "" } ` ;
8598}
0 commit comments