// Generated by dts-bundle v0.7.3

export default FlareLane;

global {
    interface Window {
        flarelane_state: {
            initialized: boolean;
            initializing: boolean;
        };
        FlareLaneBridge?: any;
        webkit?: {
            messageHandlers?: {
                FlareLaneBridge?: {
                    postMessage: any;
                };
            };
        };
        FlareLaneDeferred?: ((FlareLane: FlareLane) => any)[];
    }
}
export class FlareLane {
    static needEscapeInapp: boolean;
    static setLogLevel(logLevel: LogLevelString): void;
    static initialize(options: InitializeOptions): Promise<void>;
    static _directInitializeFromProxy(): Promise<void>;
    static _proxySubscribe(): Promise<void>;
    static setUserId(userId: string | null): Promise<true | void>;
    static setTags(tags: Record<string, any>): Promise<true | void>;
    static setIsSubscribed(isSubscribed: boolean, callback?: GetIsSubscribeHandler, option?: SubscribeOptions): Promise<void>;
    static getIsSubscribed(callback: GetIsSubscribeHandler): void;
    static getDeviceId(callback: GetDeviceIdHandler): void;
    static setConvertedHandler(callback: ConvertedHandler): void;
    static setIsSubscribedChangeHandler(callback: IsSubscribedChangeHandler): void;
    static trackEvent(type: string, data?: Record<string, string | number>): Promise<void>;
    static setCurrentPath(path: string): void;
    static toggleWidgetSubcontents(element: HTMLElement): void;
}

export type GetIsSubscribeHandler = (isSubscribed: boolean) => any;
export type GetDeviceIdHandler = (deviceId: string | null) => any;
export type ConvertedHandler = (notification: FlareLaneNotifiaction) => any;
export type IsSubscribedChangeHandler = (isSubscribed: boolean) => Promise<any> | any;
export type PostMessageHandler = (data: PostMessageData, removeEventListener: () => void) => void;

export type LogLevelString = 'none' | 'error' | 'verbose';

export type InitializeOptions = {
    projectId: string;
    serviceWorkerPath?: string;
};
export type InitializeDefaultOptions = {
    serviceWorkerPath?: string;
};
export type CombinedOptions = InitializeDefaultOptions & InitializeOptions;
export type Configs = {
    vapidPayload: {
        publicKey: string;
    };
    siteName: string | null;
    siteIcon: string | null;
    siteBadge: string | null;
    originSiteUrl: string | null;
    proxySubdomain: string | null;
    proxySiteUrl: string | null;
    directInit: boolean;
    additionalOrigins: string[];
    hidePromotion: boolean;
    blockedPaths: string[];
    enableWebView: boolean;
    nativePromptConfig: {
        active: true;
        perPageViews: number;
        waitingTimeSecond: number;
    };
    widgetConfig: {
        active: boolean;
        color: string;
        size: number;
        position: 'left' | 'right';
        horizontalMargin: number;
        verticalMargin: number;
        mobileSize: number;
        mobilePosition: 'left' | 'right';
        mobileHorizontalMargin: number;
        mobileVerticalMargin: number;
        hideIfMobile: boolean;
        allowedPaths: string[];
        customImageUrl: string | null;
        mobileCustomImageUrl: string | null;
    };
    popupConfig: {
        active: boolean;
        title: string;
        body: string;
        allowButtonText: string;
        closeButtonText: string;
        color: string;
        retryIntervalDay: number;
        waitingTimeSecond: number;
    };
};
export type AvailablePermissionState = 'granted' | 'default' | 'denied' | 'prompt';
export type DOMPosition = {
    top?: number;
    right?: number;
    bottom?: number;
    left?: number;
};
export type CustomIconSize = {
    desktop?: {
        width: number;
        height: number;
    };
    mobile?: {
        width: number;
        height: number;
    };
};
export type SubscribeOptions = {
    showGrantingPermissionsGuide?: boolean;
    usingUserGestureDom?: boolean;
};
interface ManifestIcon {
    src: string;
    sizes: string;
    type: string;
    purpose?: 'any' | 'maskable' | 'monochrome';
}
interface ManifestRelatedApplication {
    platform: string;
    url: string;
    id?: string;
}
export interface WebAppManifest {
    name?: string;
    short_name?: string;
    description?: string;
    icons?: ManifestIcon[];
    start_url: string;
    display?: 'fullscreen' | 'standalone' | 'minimal-ui' | 'browser';
    background_color?: string;
    theme_color?: string;
    dir?: 'ltr' | 'rtl';
    lang?: string;
    orientation?: 'any' | 'natural' | 'landscape' | 'portrait';
    prefer_related_applications?: boolean;
    related_applications?: ManifestRelatedApplication[];
    scope?: string;
    screenshots?: ManifestIcon[];
}
export {};

export type AvailableNotificationEventKeys = 'converted' | 'foregroundReceived' | 'backgroundReceived';
export type AvailableNotificationEvents = 'CONVERTED' | 'FOREGROUND_RECEIVED' | 'BACKGROUND_RECEIVED';
export type EventTypes = Record<AvailableNotificationEventKeys, AvailableNotificationEvents>;
export type AvailablePostMessageEventTypeKeys = 'initialized' | 'initializeWithOptionsAndConfigs' | 'db' | 'dbWindow' | 'showPopup' | 'setDissmissed' | 'refreshWidgetState' | 'permission' | 'removeWidgetSubscribe' | 'handlerManagerInit';
export type AvailablePostMessageEventType = 'flarelane_initialized' | 'flarelane_initializeWithOptionsAndConfigs' | 'flarelane_db' | 'flarelane_db_window' | 'flarelane_showPopup' | 'flarelane_setDissmissed' | 'flarelane_refreshWidgetState' | 'flarelane_permission' | 'flarelane_removeWidgetSubscribe' | 'flarelane_handlerManagerInit';
export type PostMessageEventTypes = Record<AvailablePostMessageEventTypeKeys, AvailablePostMessageEventType>;
export type PostMessageData = {
    type: AvailablePostMessageEventType;
    data: any;
    id: string;
};
export type AvailableIndirectDBEventKeys = 'get' | 'getAll' | 'put' | 'delete' | 'clearTable';
export type AvailableIndirectDBEvent = 'flarelane_get' | 'flarelane_getAll' | 'flarelane_put' | 'flarelane_delete' | 'flarelane_clearTable';
export type DBEvent = Record<AvailableIndirectDBEventKeys, AvailableIndirectDBEvent>;
export type DBEventData = {
    method: AvailableIndirectDBEvent;
    table: string;
    key?: string;
    value?: any;
};
export type AvailableIndirectPermissionEventKeys = 'getCurrentPermission' | 'getBrowserPermission';
export type AvailableIndirectPermissionEvent = 'flarelane_getCurrentPermission' | 'flarelane_getBrowserPermission';
export type PermissionEventData = {
    method: AvailableIndirectPermissionEvent;
};

export type FlareLaneNotifiaction = {
    isFlareLane: boolean;
    projectId: string;
    notificationId: string;
    deviceId: string;
    title?: string;
    body: string;
    url?: string;
    imageUrl?: string;
    data: Record<string, any>;
    buttons?: {
        label: string;
        link: string;
    }[];
    platform: string;
    webPushConfig: {
        siteName: string | null;
        siteIcon: string | null;
        siteBadge: string | null;
        originSiteUrl: string | null;
    } | null;
};
export type NotificationShowingConfigs = {
    title: string;
    options: {
        body: string;
        data: FlareLaneNotifiaction;
        vibrate: number[];
    };
};
export type NotificationFromShowingEvent = {
    title: string;
    body: string;
    data: FlareLaneNotifiaction;
};

