@@ -33,6 +33,7 @@ import {
3333 CONDITIONS_KEY_NAME ,
3434 CLIENT_FILTERS_KEY_NAME
3535} from "./featureManagement/constants.js" ;
36+ import { FM_PACKAGE_NAME } from "./requestTracing/constants.js" ;
3637import { AzureKeyVaultKeyValueAdapter } from "./keyvault/AzureKeyVaultKeyValueAdapter.js" ;
3738import { RefreshTimer } from "./refresh/RefreshTimer.js" ;
3839import { RequestTracingOptions , getConfigurationSettingWithTrace , listConfigurationSettingsWithTrace , requestTracingEnabled } from "./requestTracing/utils.js" ;
@@ -65,6 +66,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
6566 #isInitialLoadCompleted: boolean = false ;
6667 #isFailoverRequest: boolean = false ;
6768 #featureFlagTracing: FeatureFlagTracingOptions | undefined ;
69+ #fmVersion: string | undefined ;
6870
6971 // Refresh
7072 #refreshInProgress: boolean = false ;
@@ -184,7 +186,8 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
184186 initialLoadCompleted : this . #isInitialLoadCompleted,
185187 replicaCount : this . #clientManager. getReplicaCount ( ) ,
186188 isFailoverRequest : this . #isFailoverRequest,
187- featureFlagTracing : this . #featureFlagTracing
189+ featureFlagTracing : this . #featureFlagTracing,
190+ fmVersion : this . #fmVersion
188191 } ;
189192 }
190193
@@ -226,6 +229,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
226229 * Loads the configuration store for the first time.
227230 */
228231 async load ( ) {
232+ await this . #inspectFmPackage( ) ;
229233 await this . #loadSelectedAndWatchedKeyValues( ) ;
230234 if ( this . #featureFlagEnabled) {
231235 await this . #loadFeatureFlags( ) ;
@@ -316,6 +320,21 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
316320 return new Disposable ( remove ) ;
317321 }
318322
323+ /**
324+ * Inspects the feature management package version.
325+ */
326+ async #inspectFmPackage( ) {
327+ if ( this . #requestTracingEnabled && ! this . #fmVersion) {
328+ try {
329+ // get feature management package version
330+ const fmPackage = await import ( FM_PACKAGE_NAME ) ;
331+ this . #fmVersion = fmPackage ?. VERSION ;
332+ } catch ( error ) {
333+ // ignore the error
334+ }
335+ }
336+ }
337+
319338 async #refreshTasks( ) : Promise < void > {
320339 const refreshTasks : Promise < boolean > [ ] = [ ] ;
321340 if ( this . #refreshEnabled) {
@@ -898,14 +917,13 @@ function getValidKeyValueSelectors(selectors?: SettingSelector[]): SettingSelect
898917
899918function getValidFeatureFlagSelectors ( selectors ?: SettingSelector [ ] ) : SettingSelector [ ] {
900919 if ( selectors === undefined || selectors . length === 0 ) {
901- // selectors must be explicitly provided.
902- throw new Error ( "Feature flag selectors must be provided." ) ;
903- } else {
904- selectors . forEach ( selector => {
905- selector . keyFilter = `${ featureFlagPrefix } ${ selector . keyFilter } ` ;
906- } ) ;
907- return getValidSelectors ( selectors ) ;
920+ // Default selector: key: *, label: \0
921+ return [ { keyFilter : `${ featureFlagPrefix } ${ KeyFilter . Any } ` , labelFilter : LabelFilter . Null } ] ;
908922 }
923+ selectors . forEach ( selector => {
924+ selector . keyFilter = `${ featureFlagPrefix } ${ selector . keyFilter } ` ;
925+ } ) ;
926+ return getValidSelectors ( selectors ) ;
909927}
910928
911929function isFailoverableError ( error : any ) : boolean {
0 commit comments