@@ -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" ;
@@ -73,6 +74,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
7374 #isInitialLoadCompleted: boolean = false ;
7475 #isFailoverRequest: boolean = false ;
7576 #featureFlagTracing: FeatureFlagTracingOptions | undefined ;
77+ #fmVersion: string | undefined ;
7678
7779 // Refresh
7880 #refreshInProgress: boolean = false ;
@@ -198,7 +200,8 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
198200 replicaCount : this . #clientManager. getReplicaCount ( ) ,
199201 isFailoverRequest : this . #isFailoverRequest,
200202 isCdnUsed : this . #isCdnUsed,
201- featureFlagTracing : this . #featureFlagTracing
203+ featureFlagTracing : this . #featureFlagTracing,
204+ fmVersion : this . #fmVersion
202205 } ;
203206 }
204207
@@ -241,6 +244,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
241244 * @internal
242245 */
243246 async load ( ) {
247+ await this . #inspectFmPackage( ) ;
244248 await this . #loadSelectedAndWatchedKeyValues( ) ;
245249
246250 if ( this . #featureFlagEnabled) {
@@ -357,6 +361,21 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
357361 return new Disposable ( remove ) ;
358362 }
359363
364+ /**
365+ * Inspects the feature management package version.
366+ */
367+ async #inspectFmPackage( ) {
368+ if ( this . #requestTracingEnabled && ! this . #fmVersion) {
369+ try {
370+ // get feature management package version
371+ const fmPackage = await import ( FM_PACKAGE_NAME ) ;
372+ this . #fmVersion = fmPackage ?. VERSION ;
373+ } catch ( error ) {
374+ // ignore the error
375+ }
376+ }
377+ }
378+
360379 async #refreshTasks( ) : Promise < void > {
361380 const refreshTasks : Promise < boolean > [ ] = [ ] ;
362381 if ( this . #refreshEnabled) {
@@ -975,14 +994,13 @@ function getValidKeyValueSelectors(selectors?: SettingSelector[]): SettingSelect
975994
976995function getValidFeatureFlagSelectors ( selectors ?: SettingSelector [ ] ) : SettingSelector [ ] {
977996 if ( selectors === undefined || selectors . length === 0 ) {
978- // selectors must be explicitly provided.
979- throw new Error ( "Feature flag selectors must be provided." ) ;
980- } else {
981- selectors . forEach ( selector => {
982- selector . keyFilter = `${ featureFlagPrefix } ${ selector . keyFilter } ` ;
983- } ) ;
984- return getValidSelectors ( selectors ) ;
997+ // Default selector: key: *, label: \0
998+ return [ { keyFilter : `${ featureFlagPrefix } ${ KeyFilter . Any } ` , labelFilter : LabelFilter . Null } ] ;
985999 }
1000+ selectors . forEach ( selector => {
1001+ selector . keyFilter = `${ featureFlagPrefix } ${ selector . keyFilter } ` ;
1002+ } ) ;
1003+ return getValidSelectors ( selectors ) ;
9861004}
9871005
9881006function isFailoverableError ( error : any ) : boolean {
0 commit comments