
Product
Announcing Bun and vlt Support in Socket
Bringing supply chain security to the next generation of JavaScript package managers
@protontech/mutex-browser
Advanced tools
This library provides mutual exclusion functionality for the browser. It supports two methods:
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.
Chrome, Safari, Firefox, Edge, IE11
import { createIDBMutex, createCookieMutex } from 'mutex-browser'
const options = {
expiry: 1000
};
const mutex = createCookieMutex(options) or createIDBMutex(options)
const synchronized = async () => {
await mutex.lock('name')
// perform work
await mutex.unlock('name')
}
const options = {
expiry: 10000, // Max time in ms before the lock will expire. Note: The function can't take longer than this.
spinTimeout: 20, // The time in ms before with how long the retry should spin. Note: This will be randomized to prevent starving.
id: 'random-uid', // The id of mutex contender. Must be unique.
// for the cookie lock
keyX: (name) => `${name}_lock_x`, // A function for the name to give to the key X
keyY: (name) => `${name}_lock_y`, // A function for the name to give to the key Y
// for the IndexedDB lock
objectStoreName: 'mutex', // The name of the IndexedDB store.
dbName: 'mutex', // The name of the IndexedDB database.
};
Example available in the example/ folder
IndexedDB lock based on the work of Robert Knight https://github.com/robertknight/idb-mutex.
Mattias Svanström (@mmso) - ProtonMail
FAQs
Acquire a mutex in the browser through IndexedDB or cookies
We found that @protontech/mutex-browser demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Bringing supply chain security to the next generation of JavaScript package managers

Product
A safer, faster way to eliminate vulnerabilities without updating dependencies

Product
Reachability analysis for Ruby is now in beta, helping teams identify which vulnerabilities are truly exploitable in their applications.