import DynamicConfig from './DynamicConfig'; import ErrorBoundary from './ErrorBoundary'; import Layer from './Layer'; import type { DeviceInfo, ExpoConstants, ExpoDevice, NativeModules, Platform } from './StatsigIdentity'; import { UUID } from './StatsigIdentity'; import StatsigLogger from './StatsigLogger'; import StatsigNetwork from './StatsigNetwork'; import StatsigSDKOptions, { StatsigOptions } from './StatsigSDKOptions'; import StatsigStore, { EvaluationDetails } from './StatsigStore'; import { StatsigUser } from './StatsigUser'; import { UserCacheKey } from './utils/Hashing'; import type { AsyncStorage } from './utils/StatsigAsyncStorage'; import ConsoleLogger from './utils/ConsoleLogger'; export declare type AppStateEvent = 'change' | 'memoryWarning' | 'blur' | 'focus'; export declare type AppStateStatus = 'active' | 'background' | 'inactive' | 'unknown' | 'extension'; export declare type AppState = { currentState: AppStateStatus; addEventListener: (event: AppStateEvent, handler: (newState: AppStateStatus) => void) => void; removeEventListener: (event: AppStateEvent, handler: (newState: AppStateStatus) => void) => void; }; export declare type _SDKPackageInfo = { sdkType: string; sdkVersion: string; }; declare type LegacyOverrideValue = Record; export interface IStatsig { initializeAsync(): Promise; checkGate(gateName: string, ignoreOverrides?: boolean): boolean; getConfig(configName: string, ignoreOverrides?: boolean): DynamicConfig; getExperiment(experimentName: string, keepDeviceValue?: boolean, ignoreOverrides?: boolean): DynamicConfig; logEvent(eventName: string, value?: string | number | null, metadata?: Record | null): void; updateUser(user: StatsigUser | null): Promise; shutdown(): void; overrideGate(gateName: string, value: boolean): void; overrideConfig(gateName: string, value: Record): void; removeGateOverride(gateName?: string): void; removeConfigOverride(configName?: string): void; getAllOverrides(): StatsigOverrides; getStableID(): string; removeOverride(overrideName?: string | null): void; getOverrides(): Record; } export interface IHasStatsigInternal { getNetwork(): StatsigNetwork; getStore(): StatsigStore; getLogger(): StatsigLogger; getOptions(): StatsigSDKOptions; getCurrentUser(): StatsigUser | null; getCurrentUserCacheKey(): UserCacheKey; getCurrentUserUnitID(idType: string): string | null; getCurrentUserID(): string | null; getSDKKey(): string; getStatsigMetadata(): Record; getErrorBoundary(): ErrorBoundary; getSDKType(): string; getSDKVersion(): string; getConsoleLogger(): ConsoleLogger; getStableID(): string; } export declare type StatsigOverrides = { gates: Record; configs: Record>; layers: Record>; }; export default class StatsigClient implements IHasStatsigInternal, IStatsig { private static reactNativeUUID?; private appState; private currentAppState; private onCacheLoadedForReact; private ready; private initCalled; private pendingInitPromise; private optionalLoggingSetup; private prefetchedUsersByCacheKey; private startTime; private errorBoundary; getErrorBoundary(): ErrorBoundary; private network; getNetwork(): StatsigNetwork; private store; getStore(): StatsigStore; private logger; getLogger(): StatsigLogger; private options; getOptions(): StatsigSDKOptions; private sdkKey; getSDKKey(): string; private identity; getCurrentUser(): StatsigUser | null; getCurrentUserCacheKey(): UserCacheKey; getCurrentUserUnitID(idType: string): string | null; getCurrentUserID(): string | null; private getUnitID; getStatsigMetadata(): Record; getSDKType(): string; getSDKVersion(): string; private consoleLogger; getConsoleLogger(): ConsoleLogger; constructor(sdkKey: string, user?: StatsigUser | null, options?: StatsigOptions | null); private delayedSetup; setInitializeValues(initializeValues: Record): void; initializeAsync(): Promise; prefetchUsers(users: StatsigUser[]): Promise; getEvaluationDetails(): EvaluationDetails; /** * Checks the value of a gate for the current user * @param {string} gateName - the name of the gate to check * @param {boolean} ignoreOverrides = false if this check should ignore local overrides * @returns {boolean} - value of a gate for the user. Gates are "off" (return false) by default * @throws Error if initialize() is not called first, or gateName is not a string */ checkGate(gateName: string, ignoreOverrides?: boolean): boolean; checkGateWithExposureLoggingDisabled(gateName: string, ignoreOverrides?: boolean): boolean; logGateExposure(gateName: string): void; /** * Checks the value of a config for the current user * @param {string} configName - the name of the config to get * @param {boolean} ignoreOverrides = false if this check should ignore local overrides * @returns {DynamicConfig} - value of a config for the user * @throws Error if initialize() is not called first, or configName is not a string */ getConfig(configName: string, ignoreOverrides?: boolean): DynamicConfig; getConfigWithExposureLoggingDisabled(configName: string, ignoreOverrides?: boolean): DynamicConfig; logConfigExposure(configName: string): void; /** * Gets the experiment for a given user * @param {string} experimentName - the name of the experiment to get * @param {boolean} keepDeviceValue = false if this should use "sticky" values persisted in local storage * @param {boolean} ignoreOverrides = false if this check should ignore local overrides * @returns {DynamicConfig} - value of the experiment for the user, represented by a Dynamic Config object * @throws Error if initialize() is not called first, or experimentName is not a string */ getExperiment(experimentName: string, keepDeviceValue?: boolean, ignoreOverrides?: boolean): DynamicConfig; getExperimentWithExposureLoggingDisabled(experimentName: string, keepDeviceValue?: boolean, ignoreOverrides?: boolean): DynamicConfig; logExperimentExposure(experimentName: string, keepDeviceValue: boolean): void; getLayer(layerName: string, keepDeviceValue?: boolean): Layer; getLayerWithExposureLoggingDisabled(layerName: string, keepDeviceValue?: boolean): Layer; logLayerParameterExposure(layerName: string, parameterName: string, keepDeviceValue?: boolean): void; logEvent(eventName: string, value?: string | number | null, metadata?: Record | null): void; updateUserWithValues(user: StatsigUser | null, values: Record): boolean; updateUser(user: StatsigUser | null): Promise; /** * Informs the statsig SDK that the client is closing or shutting down * so the SDK can clean up internal state */ shutdown(): void; getInitializeResponseJson(): { values: string; evaluationDetails: EvaluationDetails; }; /** * Stores a local gate override * @param gateName the gate to override * @param value the value to override the gate to */ overrideGate(gateName: string, value: boolean): void; /** * Stores a local config override * @param configName the config to override * @param value the json value to override the config to */ overrideConfig(configName: string, value: LegacyOverrideValue): void; /** * Stores a local layer override * @param layerName the layer to override * @param value the json value to override the config to */ overrideLayer(layerName: string, value: LegacyOverrideValue): void; /** * Removes the given gate override * @param gateName */ removeGateOverride(gateName?: string): void; /** * Removes the given config override * @param configName */ removeConfigOverride(configName?: string): void; /** * Removes the given layer override * @param layerName */ removeLayerOverride(layerName?: string): void; /** * @deprecated - use removeGateOverride or removeConfig override * Removes the given gate override * @param gateName */ removeOverride(gateName?: string): void; /** * @deprecated - use getAllOverrides to get gate and config overrides * @returns Gate overrides */ getOverrides(): Record; /** * @returns The local gate and config overrides */ getAllOverrides(): StatsigOverrides; /** * @returns The Statsig stable ID used for device level experiments */ getStableID(): string; initializeCalled(): boolean; setSDKPackageInfo(sdkPackageInfo?: _SDKPackageInfo): void; static setAsyncStorage(asyncStorage?: AsyncStorage | null): void; setOnCacheLoadedReactCallback(fn?: (() => void) | null): void; static setReactNativeUUID(uuid?: UUID | null): void; setAppState(appState?: AppState | null): void; setNativeModules(nativeModules?: NativeModules | null): void; setPlatform(platform?: Platform | null): void; setRNDeviceInfo(deviceInfo?: DeviceInfo | null): void; setExpoConstants(expoConstants?: ExpoConstants | null): void; setExpoDevice(expoDevice?: ExpoDevice | null): void; flushEvents(): void; reenableAllLogging(): void; private isCacheValidForFetchMode; private handleOptionalLogging; private handleAppStateChange; private shouldTrimParam; private normalizePrefetchUsers; private normalizeUser; private trimUserObjIfNeeded; private ensureStoreLoaded; private getEvalutionDetailsForError; private fetchAndSaveValues; private checkGateImpl; private logGateExposureImpl; private getConfigImpl; private logConfigExposureImpl; private getExperimentImpl; private logExperimentExposureImpl; private getLayerImpl; private logLayerParameterExposureForLayer; private getEmptyConfig; private fireAndForgetPrefechUsers; } export {};