import DynamicConfig from './DynamicConfig'; import Layer, { LogParameterFunction } from './Layer'; import { IHasStatsigInternal, StatsigOverrides } from './StatsigClient'; import { StatsigUser } from './StatsigUser'; import { EvaluationReason } from './utils/EvaluationReason'; import { UserCacheKey } from './utils/Hashing'; export type EvaluationDetails = { time: number; reason: EvaluationReason; }; type APIFeatureGate = { name: string; value: boolean; rule_id: string; group_name?: string; id_type?: string; secondary_exposures: []; }; export type StoreGateFetchResult = { gate: APIFeatureGate; evaluationDetails: EvaluationDetails; }; type APIDynamicConfig = { name: string; value: { [key: string]: unknown; }; rule_id: string; group_name?: string; id_type?: string; secondary_exposures: []; is_device_based?: boolean; is_user_in_experiment?: boolean; is_experiment_active?: boolean; allocated_experiment_name: string | null; undelegated_secondary_exposures?: []; explicit_parameters?: string[]; }; type APIInitializeData = { dynamic_configs: Record; feature_gates: Record; layer_configs: Record; has_updates?: boolean; time: number; hash_used?: 'djb2' | 'sha256' | 'none'; derived_fields?: Record; }; export type APIInitializeDataWithPrefetchedUsers = APIInitializeData & { prefetched_user_values?: Record; }; export type UserCacheValues = APIInitializeDataWithPrefetchedUsers & { sticky_experiments: Record; evaluation_time?: number; user_hash?: string; stableIDUsed?: string; bootstrapMetadata?: BootstrapMetadata; }; export type BootstrapMetadata = { generatorSDKInfo?: Record; lcut?: number; user?: Record; }; export default class StatsigStore { private sdkInternal; private overrides; private loaded; private values; private userValues; private stickyDeviceExperiments; private userCacheKey; private reason; private userPersistentStorageAdapter; private userPersistentStorageData; constructor(sdkInternal: IHasStatsigInternal, initializeValues: Record | null); load(): void; loadAsync(): Promise; updateUser(isUserPrefetched: boolean): number | null; getInitializeResponseJson(): string; private loadFromAsyncStorage; bootstrap(initializeValues: Record): void; private loadFromLocalStorage; private partialLoadFromPersistentStorageAdapter; private saveStickyExperimentsToPersistentStorageAdapter; isLoaded(): boolean; getLastUpdateTime(user: StatsigUser | null, stableID: string): number | null; getPreviousDerivedFields(user: StatsigUser | null, stableID: string): Record | undefined; getPreviousHashUsed(user: StatsigUser | null, stableID: string): string | undefined; private parseCachedValues; private getUserValues; private setUserValueFromCache; private removeFromStorage; private loadOverrides; setEvaluationReason(evalReason: EvaluationReason): void; getBootstrapMetadata(): BootstrapMetadata | null; save(user: StatsigUser | null, response: Record, stableID: string, prefetchUsers?: Record): Promise; /** * Persists the init values to storage, but DOES NOT update the state of the store. */ saveWithoutUpdatingClientState(user: StatsigUser | null, response: Record, stableID: string, prefetchUsers?: Record): Promise; getDeltasMergeFunction(mergedValues: Record): (user: UserCacheValues, key: UserCacheKey) => UserCacheValues; saveInitDeltas(user: StatsigUser | null, response: Record, updateState: boolean, stableID: string, prefetchUsers?: Record): Promise; private refetchAndSaveValues; private getStableID; /** * Merges the provided init configs into the provided config map, according to the provided merge function */ mergeInitializeResponseIntoUserMap(data: APIInitializeDataWithPrefetchedUsers, configMap: Record, requestedUserCacheKey: UserCacheKey, user: StatsigUser | null, mergeFn: (user: UserCacheValues, key: UserCacheKey) => UserCacheValues, stableID: string, prefetchUsers?: Record): void; private getDefaultUserCacheValues; private mergeUserCacheValues; /** * Writes the provided values to storage, truncating down to * MAX_USER_VALUE_CACHED number entries. * @returns The truncated entry list */ private writeValuesToStorage; checkGate(gateName: string, ignoreOverrides?: boolean): StoreGateFetchResult; getConfig(configName: string, ignoreOverrides?: boolean): DynamicConfig; getExperiment(expName: string, keepDeviceValue?: boolean, ignoreOverrides?: boolean): DynamicConfig; getLayer(logParameterFunction: LogParameterFunction | null, layerName: string, keepDeviceValue: boolean): Layer; overrideConfig(configName: string, value: Record): void; overrideLayer(layerName: string, value: Record): void; overrideGate(gateName: string, value: boolean): void; removeGateOverride(gateName?: string): void; removeConfigOverride(configName?: string): void; removeLayerOverride(layerName?: string): void; getAllOverrides(): StatsigOverrides; private saveOverrides; private getLatestValue; private getPossiblyStickyValue; private createDynamicConfig; private getStickyValue; private attemptToSaveStickyValue; private removeStickyValue; private saveStickyValuesToStorage; getGlobalEvaluationDetails(): EvaluationDetails; private getEvaluationDetails; private resetUserValues; private getHashedSpecName; private convertAPIDataToCacheValues; private setItemToStorage; private makeOnConfigDefaultValueFallback; } export {};