diff options
Diffstat (limited to 'src/features/names.js')
| -rw-r--r-- | src/features/names.js | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/features/names.js b/src/features/names.js index fe5ab0a..45b0b36 100644 --- a/src/features/names.js +++ b/src/features/names.js @@ -694,14 +694,25 @@ export function namesFeature(ctx) { try { const a = await hook('arkMakeInvoice', sat, (inv.memo || '').trim().slice(0, 100)); inv.invoice = a.invoice; + inv.expiresAt = a.expiresAt || 0; + // the QR gives way to "expired" when the hour is up + if (inv.expiresAt) setTimeout(() => { if (ui.namesInv === inv) render(); }, Math.max(0, inv.expiresAt - Date.now()) + 500); } catch (e) { inv.error = e.message; } inv.busy = false; render(); } function invoicePane() { const inv = ui.namesInv || (ui.namesInv = {}); + // The server finishes a Lightning receive only while this wallet is + // open to take it: paid with coinos shut, the money goes back to the + // payer. The invoice lasts an hour, and the screen says both. + if (inv.invoice && inv.expiresAt && Date.now() >= inv.expiresAt) + return h('div', { class: 'col', style: 'gap:10px;width:100%;align-items:center' }, + h('div', { class: 'small muted', style: 'text-align:center' }, t('namesInvExpired')), + h('button', { class: 'btn-sm', onClick: () => { ui.namesInv = {}; render(); } }, t('namesInvNew'))); if (inv.invoice) return h('div', { class: 'col', style: 'gap:10px;width:100%;align-items:center' }, + h('div', { class: 'notice small names-inv-open', style: 'width:100%;text-align:center' }, t('namesInvKeepOpen')), h('div', { html: qrSvg(inv.invoice.toUpperCase(), { ec: 'L', mode: 'Alphanumeric' }) }), h('div', { class: 'addr-box break', style: 'width:100%;font-size:11px' }, inv.invoice), h('div', { class: 'row gap6' }, |
