From 7463196edfef4f759bdbcd8bd0e27e4467a568b0 Mon Sep 17 00:00:00 2001 From: Kieran Date: Mon, 27 Feb 2023 21:19:26 +0000 Subject: [PATCH] cancel fast zap --- packages/app/src/Element/NoteFooter.tsx | 15 +++++++-------- packages/app/src/Hooks/useWebln.ts | 10 +++++++++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/app/src/Element/NoteFooter.tsx b/packages/app/src/Element/NoteFooter.tsx index 0fa03cb..c2be3ce 100644 --- a/packages/app/src/Element/NoteFooter.tsx +++ b/packages/app/src/Element/NoteFooter.tsx @@ -21,7 +21,7 @@ import Zap from "Icons/Zap"; import Reply from "Icons/Reply"; import { formatShort } from "Number"; import useEventPublisher from "Feed/EventPublisher"; -import { hexToBech32, normalizeReaction } from "Util"; +import { hexToBech32, normalizeReaction, unwrap } from "Util"; import { NoteCreator } from "Element/NoteCreator"; import Reactions from "Element/Reactions"; import SendSats from "Element/SendSats"; @@ -127,15 +127,14 @@ export default function NoteFooter(props: NoteFooterProps) { try { const handler = new LNURL(lnurl); await handler.load(); - - const zap = await publisher.zap(prefs.defaultZapAmount * 1000, ev.PubKey, ev.Id); + const zap = handler.canZap ? await publisher.zap(prefs.defaultZapAmount * 1000, ev.PubKey, ev.Id) : undefined; const invoice = await handler.getInvoice(prefs.defaultZapAmount, undefined, zap); - if (invoice.pr) { - await webln.sendPayment(invoice.pr); - } + await await webln.sendPayment(unwrap(invoice.pr)); } catch (e) { - console.warn("Instant zap failed", e); - setTip(true); + console.warn("Fast zap failed", e); + if (!(e instanceof Error) || e.message !== "User rejected") { + setTip(true); + } } finally { setZapping(false); } diff --git a/packages/app/src/Hooks/useWebln.ts b/packages/app/src/Hooks/useWebln.ts index 4ffc144..e5d0b33 100644 --- a/packages/app/src/Hooks/useWebln.ts +++ b/packages/app/src/Hooks/useWebln.ts @@ -1,11 +1,19 @@ import { useEffect } from "react"; +interface WebLNPaymentResponse { + paymentHash: string; + preimage: string; + route: { + total_amt: number; + total_fees: number; + }; +} declare global { interface Window { webln?: { enabled: boolean; enable: () => Promise; - sendPayment: (pr: string) => Promise; + sendPayment: (pr: string) => Promise; }; } }