@@ -9,7 +9,7 @@ import { IKeyValueAdapter } from "./IKeyValueAdapter";
99import { JsonKeyValueAdapter } from "./JsonKeyValueAdapter" ;
1010import { DEFAULT_REFRESH_INTERVAL_IN_MS , MIN_REFRESH_INTERVAL_IN_MS } from "./RefreshOptions" ;
1111import { Disposable } from "./common/disposable" ;
12- import { FEATURE_FLAGS_KEY_NAME , FEATURE_MANAGEMENT_KEY_NAME } from "./featureManagement/constants" ;
12+ import { FEATURE_FLAGS_KEY_NAME , FEATURE_MANAGEMENT_KEY_NAME , TELEMETRY_KEY_NAME , METADATA_KEY_NAME , ETAG_KEY_NAME , FEATURE_FLAG_ID_KEY_NAME , FEATURE_FLAG_REFERENCE_KEY_NAME } from "./featureManagement/constants" ;
1313import { AzureKeyVaultKeyValueAdapter } from "./keyvault/AzureKeyVaultKeyValueAdapter" ;
1414import { RefreshTimer } from "./refresh/RefreshTimer" ;
1515import { getConfigurationSettingWithTrace , listConfigurationSettingsWithTrace , requestTracingEnabled } from "./requestTracing/utils" ;
@@ -36,6 +36,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
3636 #sortedTrimKeyPrefixes: string [ ] | undefined ;
3737 readonly #requestTracingEnabled: boolean ;
3838 #client: AppConfigurationClient ;
39+ #clientEndpoint: string | undefined ;
3940 #options: AzureAppConfigurationOptions | undefined ;
4041 #isInitialLoadCompleted: boolean = false ;
4142
@@ -57,9 +58,11 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
5758
5859 constructor (
5960 client : AppConfigurationClient ,
61+ clientEndpoint : string | undefined ,
6062 options : AzureAppConfigurationOptions | undefined
6163 ) {
6264 this . #client = client ;
65+ this . #clientEndpoint = clientEndpoint ;
6366 this . #options = options ;
6467
6568 // Enable request tracing if not opt-out
@@ -273,15 +276,15 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
273276 pageEtags . push ( page . etag ?? "" ) ;
274277 for ( const setting of page . items ) {
275278 if ( isFeatureFlag ( setting ) ) {
276- featureFlagsMap . set ( setting . key , setting . value ) ;
279+ featureFlagsMap . set ( setting . key , setting ) ;
277280 }
278281 }
279282 }
280283 selector . pageEtags = pageEtags ;
281284 }
282285
283286 // parse feature flags
284- const featureFlags = Array . from ( featureFlagsMap . values ( ) ) . map ( rawFlag => JSON . parse ( rawFlag ) ) ;
287+ const featureFlags = Array . from ( featureFlagsMap . values ( ) ) . map ( setting => this . #parseFeatureflag ( setting ) ) ;
285288
286289 // feature_management is a reserved key, and feature_flags is an array of feature flags
287290 this . #configMap. set ( FEATURE_MANAGEMENT_KEY_NAME , { [ FEATURE_FLAGS_KEY_NAME ] : featureFlags } ) ;
@@ -532,6 +535,40 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
532535 }
533536 return response ;
534537 }
538+
539+ #parseFeatureflag( setting : ConfigurationSetting < string > ) : any {
540+ const rawFlag = setting . value ;
541+ if ( rawFlag === undefined ) {
542+ throw new Error ( "The value of configuration setting cannot be undefined." ) ;
543+ }
544+ const featureFlag = JSON . parse ( rawFlag ) ;
545+
546+ if ( featureFlag [ TELEMETRY_KEY_NAME ] ) {
547+ const metadata = featureFlag [ TELEMETRY_KEY_NAME ] [ METADATA_KEY_NAME ] ;
548+ featureFlag [ TELEMETRY_KEY_NAME ] [ METADATA_KEY_NAME ] = {
549+ ETAG_KEY_NAME : setting . etag ,
550+ FEATURE_FLAG_ID_KEY_NAME : "1" ,
551+ FEATURE_FLAG_REFERENCE_KEY_NAME : this . #createFeatureFlagReference( setting ) ,
552+ ...( metadata || { } )
553+ } ;
554+ }
555+
556+ console . log ( featureFlag ) ;
557+
558+ return featureFlag ;
559+ }
560+
561+ #calculateFeatureFlagId( setting : ConfigurationSetting < string > ) : string {
562+ return ""
563+ }
564+
565+ #createFeatureFlagReference( setting : ConfigurationSetting < string > ) : string {
566+ let featureFlagReference = `${ this . #clientEndpoint} kv/${ setting . key } ` ;
567+ if ( setting . label && setting . label . trim ( ) . length !== 0 ) {
568+ featureFlagReference += `?label=${ setting . label } ` ;
569+ }
570+ return featureFlagReference ;
571+ }
535572}
536573
537574function getValidSelectors ( selectors : SettingSelector [ ] ) : SettingSelector [ ] {
@@ -575,4 +612,4 @@ function getValidFeatureFlagSelectors(selectors?: SettingSelector[]): SettingSel
575612 } else {
576613 return getValidSelectors ( selectors ) ;
577614 }
578- }
615+ }
0 commit comments