feat: Replace aCAPTCHA with official ALTCHA (altcha.org) Proof-of-Work web component widget
This commit is contained in:
+24
@@ -0,0 +1,24 @@
|
||||
class Mutex {
|
||||
private mutex = Promise.resolve();
|
||||
|
||||
lock(): PromiseLike<() => void> {
|
||||
let begin: (unlock: () => void) => void = () => {};
|
||||
|
||||
this.mutex = this.mutex.then(() => new Promise(begin));
|
||||
|
||||
return new Promise((res) => {
|
||||
begin = res;
|
||||
});
|
||||
}
|
||||
|
||||
async dispatch<T>(fn: () => PromiseLike<T>): Promise<T> {
|
||||
const unlock = await this.lock();
|
||||
try {
|
||||
return await Promise.resolve(fn());
|
||||
} finally {
|
||||
unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default Mutex;
|
||||
Reference in New Issue
Block a user