export function getResolver(timeout = 5000) { const resolver = {}; resolver.id = generateId(8); resolver.completed = false; resolver.resolved = false; resolver.rejected = false; resolver.promise = new Promise((resolve, reject) => { resolver.reject = () => { resolver.completed = true; resolver.rejected = true; reject(); }; resolver.resolve = (data) => { resolver.completed = true; resolver.resolved = true; resolve(data); }; }); resolver.timeout = setTimeout(() => { if (!resolver.completed) { resolver.reject(); } }, timeout); return resolver; } export function wait(ms = 16, value) { return new Promise((resolve) => { setTimeout(() => { resolve(value); }, ms); }); } function dec2hex(dec) { return dec.toString(16).padStart(2, "0"); } export function generateId(length) { const arr = new Uint8Array(length / 2); crypto.getRandomValues(arr); return Array.from(arr, dec2hex).join(''); }