mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-nostr.git
synced 2025-12-13 05:26:47 +00:00
79 lines
2.4 KiB
JavaScript
79 lines
2.4 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 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");
|
|
}
|
|
|
|
},
|
|
|
|
});
|