import { Decision, FeatureFlagDecision, HackleEvent, HackleRemoteConfig, Properties, User, VariationKey } from "../../core/internal/model/model"; import { HackleExperiment, HackleInAppMessageListener, HackleInAppMessageView, HacklePage } from "../../public/model"; import { PropertyOperations } from "../property/PropertyOperations"; import { BrowserHackleClient, PageView } from "../index.browser"; import { HackleAppInvocationProcessor } from "./invocator/HackleAppInvocationProcessor"; import { HackleSubscriptionOperations } from "../subscription/HackleSubscriptionOperations"; import { BrowserPropertyProvider } from "../property/BrowserPropertyProvider"; import { PageManager } from "../../core/internal/page/PageManager"; export interface HackleApp { getAppSdkKey: () => string; getAppMode?: () => string; getInvocationType: () => string; invoke?: (stringified: string) => string | null; getWebViewConfig?: () => string; getInAppMessageViewId?: () => string; } declare global { interface Window { _hackleApp?: HackleApp; } } export declare enum HackleAppMode { native = "native", web_view_wrapper = "web_view_wrapper" } export declare function isHackleWebApp(_window: Window): _window is Window & { _hackleApp: HackleApp; }; export declare class NativeAppHackleClient implements BrowserHackleClient { private readonly invocationProcessor; private readonly browserPropertyProvider; private readonly pageManager; constructor(invocationProcessor: HackleAppInvocationProcessor, browserPropertyProvider: BrowserPropertyProvider, pageManager: PageManager); getSessionId(): string; getUser(): User; setUser(user: User): Promise; setUserId(userId: string | number | undefined | null): Promise; setDeviceId(deviceId: string): Promise; setUserProperty(key: string, value: any): Promise; setUserProperties(properties: Properties): Promise; updateUserProperties(operations: PropertyOperations): Promise; updatePushSubscriptions(operations: HackleSubscriptionOperations): Promise; updateSmsSubscriptions(operations: HackleSubscriptionOperations): Promise; updateKakaoSubscriptions(operations: HackleSubscriptionOperations): Promise; resetUser(): Promise; setPhoneNumber(phoneNumber: string): Promise; unsetPhoneNumber(): Promise; variation(experimentKey: number, user?: User | string, defaultVariation?: VariationKey): string; variationDetail(experimentKey: number, user?: User | string, defaultVariation?: VariationKey): Decision; isFeatureOn(featureKey: number, user?: User | string): boolean; featureFlagDetail(featureKey: number, user?: User | string): FeatureFlagDecision; track(event: HackleEvent | string, user?: User | string): void; trackPageView(option?: PageView | undefined): void; setCurrentPage(page: HacklePage): void; remoteConfig(user?: string | User | undefined): HackleRemoteConfig; onReady(block: () => void, timeout?: number | undefined): void; showUserExplorer(): void; hideUserExplorer(): void; setInAppMessageListener(_listener: HackleInAppMessageListener | null): void; fetch(): Promise; onInitialized(config?: { timeout?: number | undefined; } | undefined): Promise<{ success: boolean; }>; close(): void; getExperiment(experimentKey: number): HackleExperiment | undefined; private convertEvent; private convertUser; private defaultUser; private getCurrentInAppMessageView; getDisplayedInAppMessageView(): HackleInAppMessageView | null; isOptOutTracking(): boolean; setOptOutTracking(optOut: boolean): void; } export declare class WebViewHackleClient implements BrowserHackleClient { private readonly browser; private readonly app; constructor(browser: BrowserHackleClient, app: BrowserHackleClient); getSessionId(): string; getUser(): User; syncUser(): Promise; setUser(user: User): Promise; setUserId(userId: string | number | undefined | null): Promise; setDeviceId(deviceId: string): Promise; setUserProperty(key: string, value: any): Promise; setUserProperties(properties: Properties): Promise; updateUserProperties(operations: PropertyOperations): Promise; updatePushSubscriptions(operations: HackleSubscriptionOperations): Promise; updateSmsSubscriptions(operations: HackleSubscriptionOperations): Promise; updateKakaoSubscriptions(operations: HackleSubscriptionOperations): Promise; resetUser(): Promise; setPhoneNumber(phoneNumber: string): Promise; unsetPhoneNumber(): Promise; variation(experimentKey: number, user?: User | string, defaultVariation?: VariationKey): string; variationDetail(experimentKey: number, user?: User | string, defaultVariation?: VariationKey): Decision; isFeatureOn(featureKey: number, user?: User | string): boolean; featureFlagDetail(featureKey: number, user?: User | string): FeatureFlagDecision; track(event: HackleEvent | string, user?: User | string): void; trackPageView(option?: PageView | undefined): void; setCurrentPage(page: HacklePage): void; remoteConfig(user?: string | User | undefined): HackleRemoteConfig; onReady(block: () => void, timeout?: number | undefined): void; showUserExplorer(): void; hideUserExplorer(): void; fetch(): Promise; onInitialized(config?: { timeout?: number | undefined; } | undefined): Promise<{ success: boolean; }>; close(): void; setInAppMessageListener(listener: HackleInAppMessageListener | null): void; getExperiment(experimentKey: number): HackleExperiment | undefined; getDisplayedInAppMessageView(): HackleInAppMessageView | null; isOptOutTracking(): boolean; setOptOutTracking(optOut: boolean): void; }