broadcast-channel
Version:
A BroadcastChannel that works in New Browsers, Old Browsers, WebWorkers, NodeJs, Deno and iframes
62 lines (51 loc) • 1.95 kB
TypeScript
import {
BroadcastChannel,
OnMessageHandler
} from './broadcast-channel';
export type LeaderElectionOptions = {
/**
* Normally, when the leading JavaScript process dies, it will send an I-am-dead
* message to the other LeaderElectors, so that they can elect a new leader.
* On rare cases, when the JavaScript process exits ungracefully, it can happen
* that the other electors do not get a dead-message.
* So we have to also run the election cycle in an interval to ensure
* we never stuck on a state where noone is leader and noone is trying to get elected.
*/
fallbackInterval?: number;
/**
* This timer value is used when resolving which instance should be leader.
* In case when your application elects more than one leader increase this value.
*/
responseTime?: number;
};
export declare class LeaderElector {
/**
* The broadcastChannel with which the
* leader elector was created.
*/
readonly broadcastChannel: BroadcastChannel;
/**
* IMPORTANT: The leader election is lazy,
* it will not start before you call awaitLeadership()
* so isLeader will never become true then.
*/
readonly isLeader: boolean;
/**
* Returns true if this or another instance is leader.
* False if there is no leader at the moment
* and we must wait for the election.
*/
hasLeader(): Promise<boolean>;
readonly isDead: boolean;
readonly token: string;
applyOnce(isFromFallbackInterval?: boolean): Promise<boolean>;
awaitLeadership(): Promise<void>;
die(): Promise<void>;
/**
* Add an event handler that is run
* when it is detected that there are duplicate leaders
*/
onduplicate: OnMessageHandler<any>;
}
type CreateFunction = (broadcastChannel: BroadcastChannel, options?: LeaderElectionOptions) => LeaderElector;
export const createLeaderElection: CreateFunction;