configcat-common
Version:
ConfigCat is a configuration as a service that lets you manage your features and configurations without actually deploying new code.
210 lines • 11.7 kB
TypeScript
import type { IConfigCache } from "./ConfigCatCache";
import type { ConfigCatClientOptions, OptionsBase, OptionsForPollingMode } from "./ConfigCatClientOptions";
import { PollingMode } from "./ConfigCatClientOptions";
import type { IConfigFetcher } from "./ConfigFetcher";
import type { IConfigService } from "./ConfigServiceBase";
import { ClientCacheState, RefreshResult } from "./ConfigServiceBase";
import type { IEventEmitter } from "./EventEmitter";
import type { HookEvents, IProvidesHooks } from "./Hooks";
import type { IConfig, SettingValue } from "./ProjectConfig";
import type { IEvaluationDetails, IRolloutEvaluator, SettingTypeOf } from "./RolloutEvaluator";
import type { User } from "./User";
/** ConfigCat SDK client. */
export interface IConfigCatClient extends IProvidesHooks {
/**
* Returns the value of a feature flag or setting identified by `key`.
* @remarks
* It is important to provide an argument for the `defaultValue` parameter that matches the type of the feature flag or setting you are evaluating.
* Please refer to {@link https://configcat.com/docs/sdk-reference/js/#setting-type-mapping | this table} for the corresponding types.
* @param key Key of the feature flag or setting.
* @param defaultValue In case of failure, this value will be returned. Only the following types are allowed: `string`, `boolean`, `number`, `null` and `undefined`.
* @param user The User Object to use for evaluating targeting rules and percentage options.
* @returns A promise that fulfills with the value of the feature flag or setting.
* @throws {Error} `key` is empty.
* @throws {TypeError} `defaultValue` is not of an allowed type.
*/
getValueAsync<T extends SettingValue>(key: string, defaultValue: T, user?: User): Promise<SettingTypeOf<T>>;
/**
* Returns the value along with evaluation details of a feature flag or setting identified by `key`.
* @remarks
* It is important to provide an argument for the `defaultValue` parameter that matches the type of the feature flag or setting you are evaluating.
* Please refer to {@link https://configcat.com/docs/sdk-reference/js/#setting-type-mapping | this table} for the corresponding types.
* @param key Key of the feature flag or setting.
* @param defaultValue In case of failure, this value will be returned. Only the following types are allowed: `string`, `boolean`, `number`, `null` and `undefined`.
* @param user The User Object to use for evaluating targeting rules and percentage options.
* @returns A promise that fulfills with the value along with the details of evaluation of the feature flag or setting.
* @throws {Error} `key` is empty.
* @throws {TypeError} `defaultValue` is not of an allowed type.
*/
getValueDetailsAsync<T extends SettingValue>(key: string, defaultValue: T, user?: User): Promise<IEvaluationDetails<SettingTypeOf<T>>>;
/**
* Returns all setting keys.
* @returns A promise that fulfills with the array of keys.
*/
getAllKeysAsync(): Promise<string[]>;
/**
* Returns the keys and values of all feature flags and settings.
* @param user The User Object to use for evaluating targeting rules and percentage options.
* @returns A promise that fulfills with the array of key-value pairs.
*/
getAllValuesAsync(user?: User): Promise<SettingKeyValue[]>;
/**
* Returns the values along with evaluation details of all feature flags and settings.
* @param user The User Object to use for evaluating targeting rules and percentage options.
* @returns A promise that fulfills with the array of values along with evaluation details.
*/
getAllValueDetailsAsync(user?: User): Promise<IEvaluationDetails[]>;
/** Returns the key of a setting and it's value identified by the given Variation ID (analytics) */
/**
* Returns the key of a setting and its value identified by the specified `variationId`.
* @param variationId Variation ID (analytics).
* @returns A promise that fulfills with the key-value pair.
*/
getKeyAndValueAsync(variationId: string): Promise<SettingKeyValue | null>;
/**
* Refreshes the locally cached config by fetching the latest version from the remote server.
* @returns A promise that fulfills with the refresh result.
*/
forceRefreshAsync(): Promise<RefreshResult>;
/**
* Waits for the client initialization.
* @returns A promise that fulfills with the client's initialization state.
*/
waitForReady(): Promise<ClientCacheState>;
/**
* Captures the current state of the client.
* The resulting snapshot can be used to synchronously evaluate feature flags and settings based on the captured state.
*/
snapshot(): IConfigCatClientSnapshot;
/**
* Sets the default user.
* @param defaultUser The default User Object to use for evaluating targeting rules and percentage options.
*/
setDefaultUser(defaultUser: User): void;
/**
* Clears the default user.
*/
clearDefaultUser(): void;
/**
* Returns `true` when the client is configured not to initiate HTTP requests, otherwise `false`.
*/
readonly isOffline: boolean;
/**
* Configures the client to allow HTTP requests.
*/
setOnline(): void;
/**
* Configures the client to not initiate HTTP requests and work using the locally cached config only.
*/
setOffline(): void;
/**
* Releases all resources used by the client.
*/
dispose(): void;
}
/** Represents the state of `IConfigCatClient` captured at a specific point in time. */
export interface IConfigCatClientSnapshot {
readonly cacheState: ClientCacheState;
/** The latest config which has been fetched from the remote server. */
readonly fetchedConfig: IConfig | null;
/**
* Returns the available setting keys.
* (In case the client is configured to use flag override, this will also include the keys provided by the flag override).
*/
getAllKeys(): ReadonlyArray<string>;
/**
* Returns the value of a feature flag or setting identified by `key` synchronously, based on the snapshot.
* @remarks
* It is important to provide an argument for the `defaultValue` parameter that matches the type of the feature flag or setting you are evaluating.
* Please refer to {@link https://configcat.com/docs/sdk-reference/js/#setting-type-mapping | this table} for the corresponding types.
* @param key Key of the feature flag or setting.
* @param defaultValue In case of failure, this value will be returned. Only the following types are allowed: `string`, `boolean`, `number`, `null` and `undefined`.
* @param user The User Object to use for evaluating targeting rules and percentage options.
* @returns The cached value of the feature flag or setting.
* @throws {Error} `key` is empty.
* @throws {TypeError} `defaultValue` is not of an allowed type.
*/
getValue<T extends SettingValue>(key: string, defaultValue: T, user?: User): SettingTypeOf<T>;
/**
* Returns the value along with evaluation details of a feature flag or setting identified by `key` synchronously, based on the snapshot.
* @remarks
* It is important to provide an argument for the `defaultValue` parameter that matches the type of the feature flag or setting you are evaluating.
* Please refer to {@link https://configcat.com/docs/sdk-reference/js/#setting-type-mapping | this table} for the corresponding types.
* @param key Key of the feature flag or setting.
* @param defaultValue In case of failure, this value will be returned. Only the following types are allowed: `string`, `boolean`, `number`, `null` and `undefined`.
* @param user The User Object to use for evaluating targeting rules and percentage options.
* @returns The cached value along with the details of evaluation of the feature flag or setting.
* @throws {Error} `key` is empty.
* @throws {TypeError} `defaultValue` is not of an allowed type.
*/
getValueDetails<T extends SettingValue>(key: string, defaultValue: T, user?: User): IEvaluationDetails<SettingTypeOf<T>>;
}
export interface IConfigCatKernel {
configFetcher: IConfigFetcher;
sdkType: string;
sdkVersion: string;
defaultCacheFactory?: (options: OptionsBase) => IConfigCache;
eventEmitterFactory?: () => IEventEmitter;
}
export declare class ConfigCatClientCache {
private readonly instances;
getOrCreate(options: ConfigCatClientOptions, configCatKernel: IConfigCatKernel): [ConfigCatClient, boolean];
remove(sdkKey: string, cacheToken: object): boolean;
clear(): ConfigCatClient[];
}
export declare class ConfigCatClient implements IConfigCatClient {
private readonly cacheToken?;
protected configService?: IConfigService;
protected evaluator: IRolloutEvaluator;
private readonly options;
private readonly hooks;
private defaultUser?;
private readonly suppressFinalize;
private static get instanceCache();
static get<TMode extends PollingMode>(sdkKey: string, pollingMode: TMode, options: OptionsForPollingMode<TMode> | undefined | null, configCatKernel: IConfigCatKernel): IConfigCatClient;
constructor(options: ConfigCatClientOptions, configCatKernel: IConfigCatKernel, cacheToken?: object | undefined);
private static finalize;
private static close;
dispose(): void;
static disposeAll(): void;
getValueAsync<T extends SettingValue>(key: string, defaultValue: T, user?: User): Promise<SettingTypeOf<T>>;
getValueDetailsAsync<T extends SettingValue>(key: string, defaultValue: T, user?: User): Promise<IEvaluationDetails<SettingTypeOf<T>>>;
getAllKeysAsync(): Promise<string[]>;
getAllValuesAsync(user?: User): Promise<SettingKeyValue[]>;
getAllValueDetailsAsync(user?: User): Promise<IEvaluationDetails[]>;
getKeyAndValueAsync(variationId: string): Promise<SettingKeyValue | null>;
forceRefreshAsync(): Promise<RefreshResult>;
setDefaultUser(defaultUser: User): void;
clearDefaultUser(): void;
get isOffline(): boolean;
setOnline(): void;
setOffline(): void;
waitForReady(): Promise<ClientCacheState>;
snapshot(): IConfigCatClientSnapshot;
private getSettingsAsync;
/** @inheritdoc */
addListener: <TEventName extends keyof HookEvents>(eventName: TEventName, listener: (...args: HookEvents[TEventName]) => void) => this;
/** @inheritdoc */
on<TEventName extends keyof HookEvents>(eventName: TEventName, listener: (...args: HookEvents[TEventName]) => void): this;
/** @inheritdoc */
once<TEventName extends keyof HookEvents>(eventName: TEventName, listener: (...args: HookEvents[TEventName]) => void): this;
/** @inheritdoc */
removeListener<TEventName extends keyof HookEvents>(eventName: TEventName, listener: (...args: HookEvents[TEventName]) => void): this;
/** @inheritdoc */
off: <TEventName extends keyof HookEvents>(eventName: TEventName, listener: (...args: HookEvents[TEventName]) => void) => this;
/** @inheritdoc */
removeAllListeners(eventName?: keyof HookEvents): this;
/** @inheritdoc */
listeners(eventName: keyof HookEvents): Function[];
/** @inheritdoc */
listenerCount(eventName: keyof HookEvents): number;
/** @inheritdoc */
eventNames(): Array<keyof HookEvents>;
}
/** Setting key-value pair. */
export declare class SettingKeyValue<TValue extends SettingValue = SettingValue> {
settingKey: string;
settingValue: TValue;
constructor(settingKey: string, settingValue: TValue);
}
//# sourceMappingURL=ConfigCatClient.d.ts.map