@toruslabs/broadcast-channel
Version:
A BroadcastChannel that works in New Browsers, Old Browsers, WebWorkers
62 lines (61 loc) • 1.85 kB
TypeScript
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<unknown>;
postMessage: (state: unknown, msg: MessageObject) => Promise<unknown>;
onMessage: (state: unknown, fn: ((msg: MessageObject) => void) | null, time: number) => void;
close: (state: unknown) => void | Promise<void>;
}
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<T> {
name: string;
options: Options;
closed: boolean;
onmessage: ((data: T) => void) | null;
postMessage(message: T): Promise<T>;
addEventListener(type: EventType, listener: (data: T) => void): void;
removeEventListener(type: EventType, listener: (data: T) => void): void;
close(): Promise<void>;
}
export {};