UNPKG

matrix-react-sdk

Version:
47 lines (46 loc) 2.02 kB
export declare const SESSION_LOCK_CONSTANTS: { /** * LocalStorage key for an item which indicates we have the lock. * * The instance which holds the lock writes the current time to this key every few seconds, to indicate it is still * alive and holds the lock. */ STORAGE_ITEM_PING: string; /** * LocalStorage key for an item which holds the unique "session ID" of the instance which currently holds the lock. * * This property doesn't actually form a functional part of the locking algorithm; it is purely diagnostic. */ STORAGE_ITEM_OWNER: string; /** * LocalStorage key for the session ID of the most recent claimant to the lock. * * Each instance writes to this key on startup, so existing instances can detect new ones starting up. */ STORAGE_ITEM_CLAIMANT: string; /** * The number of milliseconds after which we consider a lock claim stale */ LOCK_EXPIRY_TIME_MS: number; }; /** * See if any instances are currently running * * @returns true if any instance is currently active */ export declare function checkSessionLockFree(): boolean; /** * Ensure that only one instance of the application is running at once. * * If there are any other running instances, tells them to stop, and waits for them to do so. * * Once we are the sole instance, sets a background job going to service a lock. Then, if another instance starts up, * `onNewInstance` is called: it should shut the app down to make sure we aren't doing any more work. * * @param onNewInstance - callback to handle another instance starting up. NOTE: this may be called before * `getSessionLock` returns if the lock is stolen before we get a chance to start. * * @returns true if we successfully claimed the lock; false if another instance stole it from under our nose * (in which `onNewInstance` will have been called) */ export declare function getSessionLock(onNewInstance: () => Promise<void>): Promise<boolean>;