diff --git a/docs/root-signing/index.html b/docs/root-signing/index.html index b3faa81..b6d56be 100644 --- a/docs/root-signing/index.html +++ b/docs/root-signing/index.html @@ -216,16 +216,34 @@ return; } show('signButton'); + // The wallet answers DApp requests one at a time and waits without limit for each, so a request it never + // shows blocks every later one. Each step is named on the page, so a stalled wallet says where it stopped. + const step = (text) => { + $('signResult').textContent = text; + $('signResult').className = 'note'; + show('signResult'); + }; + const waitFor = (promise, text) => { + step(text); + const stalled = setTimeout(() => { + $('signResult').textContent = text + ' Cîzdan bersiv nade: geroka DApp bi tevahî bigire, rûpelê dîsa veke û carekê bitikîne.'; + $('signResult').className = 'note warn'; + }, 45000); + return promise.finally(() => clearTimeout(stalled)); + }; $('signButton').onclick = async () => { + $('signButton').disabled = true; try { - const extension = await injected.enable('Pezkuwi root signing'); - const accounts = await extension.accounts.get(); + const extension = await waitFor(injected.enable('Pezkuwi root signing'), 'Bi cîzdanê ve tê girêdan…'); + const accounts = await waitFor(extension.accounts.get(), 'Hesab têne xwendin…'); const mine = accounts.map((a) => ({ address: a.address, keyId: null, public: pz.decodeAddress(a.address) })); for (const account of mine) account.keyId = hex(await sha256(account.public)); const holder = mine.find((a) => holders.has(a.keyId)); if (!holder) throw new Error('Di vê cîzdanê de hesabekî xwediyê kokê tune.'); - const { signature } = await extension.signer.signRaw({ address: holder.address, data: pzu.u8aToHex(message), type: 'bytes' }); + const { signature } = await waitFor( + extension.signer.signRaw({ address: holder.address, data: pzu.u8aToHex(message), type: 'bytes' }), + 'Li benda îmzeyê ye: di cîzdanê de peyamê piştrast bike…'); let sig = pzu.hexToU8a(signature); if (sig.length === 65 && sig[0] === 1) sig = sig.slice(1); // MultiSignature: 0x01 = sr25519 const context = classify(holder.keyId, sig); @@ -250,6 +268,8 @@ $('signResult').textContent = e.message || String(e); $('signResult').className = 'note bad'; show('signResult'); + } finally { + $('signButton').disabled = false; } }; } catch (e) {