|
|
|
@ -103,58 +103,62 @@ class LightningService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return new Promise((resolve) => { |
|
|
|
return new Promise((resolve) => { |
|
|
|
|
|
|
|
// Close our Radix dialog first; opening bc-modal in the same turn can leave body
|
|
|
|
|
|
|
|
// pointer-events stuck so the payment UI is visible but inert (esp. from Sheet / secondary pane).
|
|
|
|
closeOuterModel?.() |
|
|
|
closeOuterModel?.() |
|
|
|
let checkPaymentInterval: ReturnType<typeof setInterval> | undefined |
|
|
|
window.setTimeout(() => { |
|
|
|
let subCloser: SubCloser | undefined |
|
|
|
let checkPaymentInterval: ReturnType<typeof setInterval> | undefined |
|
|
|
const { setPaid } = launchPaymentModal({ |
|
|
|
let subCloser: SubCloser | undefined |
|
|
|
invoice: pr, |
|
|
|
const { setPaid } = launchPaymentModal({ |
|
|
|
onPaid: (response) => { |
|
|
|
invoice: pr, |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
onPaid: (response) => { |
|
|
|
subCloser?.close() |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
resolve({ preimage: response.preimage, invoice: pr }) |
|
|
|
subCloser?.close() |
|
|
|
}, |
|
|
|
resolve({ preimage: response.preimage, invoice: pr }) |
|
|
|
onCancelled: () => { |
|
|
|
}, |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
onCancelled: () => { |
|
|
|
subCloser?.close() |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
resolve(null) |
|
|
|
subCloser?.close() |
|
|
|
} |
|
|
|
resolve(null) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
if (verify) { |
|
|
|
if (verify) { |
|
|
|
checkPaymentInterval = setInterval(async () => { |
|
|
|
checkPaymentInterval = setInterval(async () => { |
|
|
|
const invoice = new Invoice({ pr, verify }) |
|
|
|
const invoice = new Invoice({ pr, verify }) |
|
|
|
const paid = await invoice.verifyPayment() |
|
|
|
const paid = await invoice.verifyPayment() |
|
|
|
|
|
|
|
|
|
|
|
if (paid && invoice.preimage) { |
|
|
|
if (paid && invoice.preimage) { |
|
|
|
setPaid({ |
|
|
|
setPaid({ |
|
|
|
preimage: invoice.preimage |
|
|
|
preimage: invoice.preimage |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, 1000) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
const filter: Filter = { |
|
|
|
|
|
|
|
kinds: [kinds.Zap], |
|
|
|
|
|
|
|
'#p': [recipient], |
|
|
|
|
|
|
|
since: dayjs().subtract(1, 'minute').unix() |
|
|
|
} |
|
|
|
} |
|
|
|
}, 1000) |
|
|
|
if (event) { |
|
|
|
} else { |
|
|
|
filter['#e'] = [event.id] |
|
|
|
const filter: Filter = { |
|
|
|
} |
|
|
|
kinds: [kinds.Zap], |
|
|
|
subCloser = client.subscribe( |
|
|
|
'#p': [recipient], |
|
|
|
senderRelayList.write.concat(FAST_READ_RELAY_URLS).slice(0, 4), |
|
|
|
since: dayjs().subtract(1, 'minute').unix() |
|
|
|
filter, |
|
|
|
} |
|
|
|
{ |
|
|
|
if (event) { |
|
|
|
onevent: (evt) => { |
|
|
|
filter['#e'] = [event.id] |
|
|
|
const info = getZapInfoFromEvent(evt) |
|
|
|
} |
|
|
|
if (!info) return |
|
|
|
subCloser = client.subscribe( |
|
|
|
|
|
|
|
senderRelayList.write.concat(FAST_READ_RELAY_URLS).slice(0, 4), |
|
|
|
|
|
|
|
filter, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
onevent: (evt) => { |
|
|
|
|
|
|
|
const info = getZapInfoFromEvent(evt) |
|
|
|
|
|
|
|
if (!info) return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (info.invoice === pr) { |
|
|
|
if (info.invoice === pr) { |
|
|
|
setPaid({ preimage: info.preimage ?? '' }) |
|
|
|
setPaid({ preimage: info.preimage ?? '' }) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
) |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
}, 0) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -228,55 +232,57 @@ class LightningService { |
|
|
|
|
|
|
|
|
|
|
|
return new Promise((resolve) => { |
|
|
|
return new Promise((resolve) => { |
|
|
|
closeOuterModel?.() |
|
|
|
closeOuterModel?.() |
|
|
|
let checkPaymentInterval: ReturnType<typeof setInterval> | undefined |
|
|
|
window.setTimeout(() => { |
|
|
|
let subCloser: SubCloser | undefined |
|
|
|
let checkPaymentInterval: ReturnType<typeof setInterval> | undefined |
|
|
|
const { setPaid } = launchPaymentModal({ |
|
|
|
let subCloser: SubCloser | undefined |
|
|
|
invoice: pr, |
|
|
|
const { setPaid } = launchPaymentModal({ |
|
|
|
onPaid: (response) => { |
|
|
|
invoice: pr, |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
onPaid: (response) => { |
|
|
|
subCloser?.close() |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
resolve({ preimage: response.preimage, invoice: pr }) |
|
|
|
subCloser?.close() |
|
|
|
}, |
|
|
|
resolve({ preimage: response.preimage, invoice: pr }) |
|
|
|
onCancelled: () => { |
|
|
|
}, |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
onCancelled: () => { |
|
|
|
subCloser?.close() |
|
|
|
clearInterval(checkPaymentInterval) |
|
|
|
resolve(null) |
|
|
|
subCloser?.close() |
|
|
|
} |
|
|
|
resolve(null) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
if (verify) { |
|
|
|
if (verify) { |
|
|
|
checkPaymentInterval = setInterval(async () => { |
|
|
|
checkPaymentInterval = setInterval(async () => { |
|
|
|
const invoice = new Invoice({ pr, verify }) |
|
|
|
const invoice = new Invoice({ pr, verify }) |
|
|
|
const paid = await invoice.verifyPayment() |
|
|
|
const paid = await invoice.verifyPayment() |
|
|
|
|
|
|
|
|
|
|
|
if (paid && invoice.preimage) { |
|
|
|
if (paid && invoice.preimage) { |
|
|
|
setPaid({ |
|
|
|
setPaid({ |
|
|
|
preimage: invoice.preimage |
|
|
|
preimage: invoice.preimage |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, 1000) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
const filter: Filter = { |
|
|
|
|
|
|
|
kinds: [kinds.Zap], |
|
|
|
|
|
|
|
'#p': [rec], |
|
|
|
|
|
|
|
'#e': [pollEvent.id], |
|
|
|
|
|
|
|
since: dayjs().subtract(1, 'minute').unix() |
|
|
|
} |
|
|
|
} |
|
|
|
}, 1000) |
|
|
|
subCloser = client.subscribe( |
|
|
|
} else { |
|
|
|
senderRelayList.write.concat(FAST_READ_RELAY_URLS).slice(0, 4), |
|
|
|
const filter: Filter = { |
|
|
|
filter, |
|
|
|
kinds: [kinds.Zap], |
|
|
|
{ |
|
|
|
'#p': [rec], |
|
|
|
onevent: (evt) => { |
|
|
|
'#e': [pollEvent.id], |
|
|
|
const info = getZapInfoFromEvent(evt) |
|
|
|
since: dayjs().subtract(1, 'minute').unix() |
|
|
|
if (!info) return |
|
|
|
} |
|
|
|
|
|
|
|
subCloser = client.subscribe( |
|
|
|
|
|
|
|
senderRelayList.write.concat(FAST_READ_RELAY_URLS).slice(0, 4), |
|
|
|
|
|
|
|
filter, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
onevent: (evt) => { |
|
|
|
|
|
|
|
const info = getZapInfoFromEvent(evt) |
|
|
|
|
|
|
|
if (!info) return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (info.invoice === pr) { |
|
|
|
if (info.invoice === pr) { |
|
|
|
setPaid({ preimage: info.preimage ?? '' }) |
|
|
|
setPaid({ preimage: info.preimage ?? '' }) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
) |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
}, 0) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -292,15 +298,17 @@ class LightningService { |
|
|
|
|
|
|
|
|
|
|
|
return new Promise((resolve) => { |
|
|
|
return new Promise((resolve) => { |
|
|
|
closeOuterModel?.() |
|
|
|
closeOuterModel?.() |
|
|
|
launchPaymentModal({ |
|
|
|
window.setTimeout(() => { |
|
|
|
invoice: invoice, |
|
|
|
launchPaymentModal({ |
|
|
|
onPaid: (response) => { |
|
|
|
invoice: invoice, |
|
|
|
resolve({ preimage: response.preimage, invoice: invoice }) |
|
|
|
onPaid: (response) => { |
|
|
|
}, |
|
|
|
resolve({ preimage: response.preimage, invoice: invoice }) |
|
|
|
onCancelled: () => { |
|
|
|
}, |
|
|
|
resolve(null) |
|
|
|
onCancelled: () => { |
|
|
|
} |
|
|
|
resolve(null) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}, 0) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|