import NDK, {NDKEvent} from "@nostr-dev-kit/ndk"; import { nip57, } from "nostr-tools"; export default (livewireComponent) => ({ invoice: livewireComponent.entangle('invoice', true), async zap(message, sender, amountToPay, env) { const config = { production: { relayUrl: 'wss://simple-relay.codingarena.top', }, staging: { relayUrl: 'wss://simple-test-relay.codingarena.top', }, local: { relayUrl: 'wss://simple-test-relay.codingarena.top', }, }; const relayUrl = config[env]?.relayUrl || config['local'].relayUrl; const ndk = new NDK({ explicitRelayUrls: [ relayUrl ], enableOutboxModel: false, }); // Now connect to specified relays await ndk.connect(); const event = await ndk.fetchEvent({ kinds: [32121], authors: ['daf83d92768b5d0005373f83e30d4203c0b747c170449e02fea611a0da125ee6'] }); const amount = amountToPay * 1000; console.log('event', event); // Fetch the callback URL const callbackResponse = await fetch('https://pay.einundzwanzig.space/BTC/UILNURL/pay/lnaddress/verein'); const callbackData = await callbackResponse.json(); const zapEndpoint = callbackData.callback; livewireComponent.call('updateZapEndpoint', zapEndpoint); const zapEvent = nip57.makeZapRequest({ profile: sender, event: event.id, amount: amount, relays: [relayUrl], comment: message, }); console.log('zapEvent', zapEvent); const signedEvent = await window.nostr.signEvent(zapEvent); console.log('signedEvent', signedEvent); let url = `${zapEndpoint}?amount=${amount}&nostr=${encodeURIComponent( JSON.stringify(signedEvent) )}`; url = `${url}&comment=${encodeURIComponent(message)}`; console.log('url', url); const res = await fetch(url); const { pr: invoice, reason, status } = await res.json(); if (invoice) { console.log('invoice', invoice); this.invoice = invoice; } else if (status === "ERROR") { throw new Error(reason ?? "Unable to fetch invoice"); } else { throw new Error("Other error"); } }, });