import { BUILD_ENV_TYPE } from "@toruslabs/constants"; export type MethodType = "idb" | "native" | "localstorage" | "simulate" | "server"; export interface ListenerObject { time: number; fn: (data: unknown) => void; } export type AddEventListeners = { message: ListenerObject[]; internal: ListenerObject[]; }; export type EventType = keyof AddEventListeners; export interface MessageObject { time: number; type: EventType; data: unknown; } export interface Method { type: MethodType; canBeUsed: (options: Options) => boolean; microSeconds: () => number; create: (name: string, options: Options) => unknown | Promise; postMessage: (state: unknown, msg: MessageObject) => Promise; onMessage: (state: unknown, fn: ((msg: MessageObject) => void) | null, time: number) => void; close: (state: unknown) => void | Promise; } interface IdbOptions { ttl?: number; fallbackInterval?: number; onclose?: () => void; } interface LocalStorageOptions { removeTimeout?: number; } interface ServerOptions { build_env?: BUILD_ENV_TYPE; api_url?: string; socket_url?: string; removeTimeout?: number; timeout?: number; allowed_origin?: string; } export interface Options { type?: MethodType; methods?: Method; prepareDelay?: number; webWorkerSupport?: boolean; idb?: IdbOptions; localstorage?: LocalStorageOptions; server?: ServerOptions; } export interface IBroadcastChannel { name: string; options: Options; closed: boolean; onmessage: ((data: T) => void) | null; postMessage(message: T): Promise; addEventListener(type: EventType, listener: (data: T) => void): void; removeEventListener(type: EventType, listener: (data: T) => void): void; close(): Promise; } export {};