aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/index.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-07-30 08:43:47 -0700
committerAdam Soltys <[email protected]>2026-07-30 08:43:47 -0700
commit6713f8d4e55db8d5344684b08b062cc9129ef6b0 (patch)
tree2e547aedcef6b4c7f8de8e82a561a62c6781ce54 /src/features/index.js
parent962223b0628133ebcd27ff6c89d6aa616a936142 (diff)
downloadcoinosv3-6713f8d4e55db8d5344684b08b062cc9129ef6b0.tar.gz
coinosv3-6713f8d4e55db8d5344684b08b062cc9129ef6b0.zip
Add NIP-57 Lightning zaps (npub / lightning address / lnurl)
Send a Lightning zap to a nostr npub, a lightning address (name@domain), or an lnurl. New src/lnurl.js does the resolution half — target → LNURL-pay params → signed kind-9734 zap request → callback → bolt11 — and the new zaps feature (src/features/zaps.js) drives the amount/comment UI, then hands the invoice to the existing Boltz submarine-swap flow via a new swaps.startLnPay hook, so there's one tested pay/review/confirm/success path. Routing: a bolt11 is still caught by swaps; an npub still prefers an instant free Ark zap when Ark can serve it, and only falls through to a Lightning zap otherwise — ark's "no Ark address" screen also offers an explicit "Zap over Lightning" fallback (gated on the zaps feature's canLnZap). A real zap receipt is attributed only when the server advertises allowsNostr and we know the recipient's pubkey; otherwise it degrades to a plain LNURL-pay. Nostr seam gains nostrSign (finalize without publishing), nostrProfile (kind-0 with lud16/lud06), and nostrRelays. Lightning addresses are debounced in matchSendText since their regex matches mid-typing. Verified: unit tests for parse/encode/zap-request; a live resolve→signed 9734→payable mainnet bolt11 against coinos; and an in-browser DOM smoke (zap form + LNURL params over CORS + allowsNostr hint + handoff). Co-Authored-By: Claude Opus 4.8 <[email protected]>
Diffstat (limited to 'src/features/index.js')
-rw-r--r--src/features/index.js7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/features/index.js b/src/features/index.js
index e63e816..e52b172 100644
--- a/src/features/index.js
+++ b/src/features/index.js
@@ -7,11 +7,14 @@
import { giftsFeature } from './gifts.js';
import { swapsFeature } from './swaps.js';
import { arkFeature } from './ark.js';
+import { zapsFeature } from './zaps.js';
import { spFeature } from './sp.js';
import { syncFeature } from './sync.js';
// NB order is meaningful where hooks stack: gifts' receive takeover and
-// balance line come before ark's, matching the pre-plugin layout.
+// balance line come before ark's, matching the pre-plugin layout. zaps sits
+// after ark so an npub prefers an instant Ark zap and only falls through to a
+// Lightning zap when Ark can't serve it.
export function buildFeatures(ctx) {
- return [giftsFeature(ctx), swapsFeature(ctx), arkFeature(ctx), spFeature(ctx), syncFeature(ctx)];
+ return [giftsFeature(ctx), swapsFeature(ctx), arkFeature(ctx), zapsFeature(ctx), spFeature(ctx), syncFeature(ctx)];
}