@@ -45,6 +45,7 @@ import {
4545 CONDITIONS_KEY_NAME ,
4646 CLIENT_FILTERS_KEY_NAME
4747} from "./featureManagement/constants.js" ;
48+ import { FM_PACKAGE_NAME } from "./requestTracing/constants.js" ;
4849import { AzureKeyVaultKeyValueAdapter } from "./keyvault/AzureKeyVaultKeyValueAdapter.js" ;
4950import { RefreshTimer } from "./refresh/RefreshTimer.js" ;
5051import {
@@ -84,6 +85,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
8485 #isInitialLoadCompleted: boolean = false ;
8586 #isFailoverRequest: boolean = false ;
8687 #featureFlagTracing: FeatureFlagTracingOptions | undefined ;
88+ #fmVersion: string | undefined ;
8789
8890 // Refresh
8991 #refreshInProgress: boolean = false ;
@@ -203,7 +205,8 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
203205 initialLoadCompleted : this . #isInitialLoadCompleted,
204206 replicaCount : this . #clientManager. getReplicaCount ( ) ,
205207 isFailoverRequest : this . #isFailoverRequest,
206- featureFlagTracing : this . #featureFlagTracing
208+ featureFlagTracing : this . #featureFlagTracing,
209+ fmVersion : this . #fmVersion
207210 } ;
208211 }
209212
@@ -245,6 +248,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
245248 * Loads the configuration store for the first time.
246249 */
247250 async load ( ) {
251+ await this . #inspectFmPackage( ) ;
248252 await this . #loadSelectedAndWatchedKeyValues( ) ;
249253 if ( this . #featureFlagEnabled) {
250254 await this . #loadFeatureFlags( ) ;
@@ -335,6 +339,21 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
335339 return new Disposable ( remove ) ;
336340 }
337341
342+ /**
343+ * Inspects the feature management package version.
344+ */
345+ async #inspectFmPackage( ) {
346+ if ( this . #requestTracingEnabled && ! this . #fmVersion) {
347+ try {
348+ // get feature management package version
349+ const fmPackage = await import ( FM_PACKAGE_NAME ) ;
350+ this . #fmVersion = fmPackage ?. VERSION ;
351+ } catch ( error ) {
352+ // ignore the error
353+ }
354+ }
355+ }
356+
338357 async #refreshTasks( ) : Promise < void > {
339358 const refreshTasks : Promise < boolean > [ ] = [ ] ;
340359 if ( this . #refreshEnabled) {
@@ -972,14 +991,13 @@ function getValidKeyValueSelectors(selectors?: SettingSelector[]): SettingSelect
972991
973992function getValidFeatureFlagSelectors ( selectors ?: SettingSelector [ ] ) : SettingSelector [ ] {
974993 if ( selectors === undefined || selectors . length === 0 ) {
975- // selectors must be explicitly provided.
976- throw new Error ( "Feature flag selectors must be provided." ) ;
977- } else {
978- selectors . forEach ( selector => {
979- selector . keyFilter = `${ featureFlagPrefix } ${ selector . keyFilter } ` ;
980- } ) ;
981- return getValidSettingSelectors ( selectors ) ;
994+ // Default selector: key: *, label: \0
995+ return [ { keyFilter : `${ featureFlagPrefix } ${ KeyFilter . Any } ` , labelFilter : LabelFilter . Null } ] ;
982996 }
997+ selectors . forEach ( selector => {
998+ selector . keyFilter = `${ featureFlagPrefix } ${ selector . keyFilter } ` ;
999+ } ) ;
1000+ return getValidSettingSelectors ( selectors ) ;
9831001}
9841002
9851003function isFailoverableError ( error : any ) : boolean {
0 commit comments