mutex-browser
This library provides mutual exclusion functionality for the browser. It supports two methods:
- Synchronizing mutex through the fast-mutex algorithm backed by cookie storage.
- Synchronizing mutex through the transactional guarantees of IndexedDB.
The mutex backed by a cookie storage can be useful where IndexedDB or localStorage can not be used, for instance through cross-domain cross-window synchronization. For a single domain where IndexedDB can be used, the second method is recommended.
The library requires the support of Promises, async/await, modules, and cookies or IndexedDB.
Browser support
Chrome, Safari, Firefox, Edge, IE11
Usage
import { createIDBMutex, createCookieMutex } from 'mutex-browser'
const options = {
expiry: 1000
};
const mutex = createCookieMutex(options) or createIDBMutex(options)
const synchronized = async () => {
await mutex.lock('name')
await mutex.unlock('name')
}
Default Options
const options = {
expiry: 10000,
spinTimeout: 20,
id: 'random-uid',
keyX: (name) => `${name}_lock_x`,
keyY: (name) => `${name}_lock_y`,
objectStoreName: 'mutex',
dbName: 'mutex',
};
Example
Example available in the example/ folder
Credits
IndexedDB lock based on the work of Robert Knight https://github.com/robertknight/idb-mutex.
Author
Mattias Svanström (@mmso) - ProtonMail