@atproto/oauth-client
Version:
OAuth client for ATPROTO PDS. This package serves as common base for environment-specific implementations (NodeJS, Browser, React-Native).
29 lines • 888 B
JavaScript
const locks = new Map();
function acquireLocalLock(name) {
return new Promise((resolveAcquire) => {
const prev = locks.get(name) ?? Promise.resolve();
const next = prev.then(() => {
return new Promise((resolveRelease) => {
const release = () => {
// Only delete the lock if it is still the current one
if (locks.get(name) === next)
locks.delete(name);
resolveRelease();
};
resolveAcquire(release);
});
});
locks.set(name, next);
});
}
export const requestLocalLock = (name, fn) => {
return acquireLocalLock(name).then(async (release) => {
try {
return await fn();
}
finally {
release();
}
});
};
//# sourceMappingURL=lock.js.map