Files
einundzwanzig-verein/resources/js/nostrZap.js
2024-10-01 14:38:34 +02:00

63 lines
1.9 KiB
JavaScript

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 relayUrl = env === 'production' ? 'wss://simple-relay.steuernsindraub21.xyz' : 'wss://simple-relay.steuernsindraub21.xyz';
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);
const zapEndpoint = 'https://getalby.com/lnurlp/portaleinundzwanzig/callback';
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");
}
},
});