UNPKG

@shocknet/clink-sdk

Version:

sdk client for clink

60 lines 2.09 kB
import { nip44, getPublicKey, finalizeEvent } from "nostr-tools"; const { getConversationKey, decrypt, encrypt } = nip44; export const SendNdebitRequest = async (pool, privateKey, relays, pubKey, data, timeoutSeconds) => { const publicKey = getPublicKey(privateKey); const content = encrypt(JSON.stringify(data), getConversationKey(privateKey, pubKey)); const event = newNdebitEvent(content, publicKey, pubKey); const signed = finalizeEvent(event, privateKey); await Promise.all(pool.publish(relays, signed)); return new Promise((res, rej) => { let closer = { close: () => { } }; let timer = null; if (timeoutSeconds) { timer = setTimeout(() => { closer.close(); rej('failed to get ndebit response in time'); }, timeoutSeconds * 1000); } closer = pool.subscribeMany(relays, [newNdebitFilter(publicKey, signed.id)], { onevent: async (e) => { if (timer) clearTimeout(timer); const content = decrypt(e.content, getConversationKey(privateKey, pubKey)); res(JSON.parse(content)); } }); }); }; export const newNdebitFullAccessRequest = (pointer) => { return { pointer: pointer }; }; export const newNdebitPaymentRequest = (invoice, amount, pointer) => { return { bolt11: invoice, amount_sats: amount, pointer: pointer }; }; export const newNdebitBudgetRequest = (frequency, amount, pointer) => { return { amount_sats: amount, frequency: frequency, pointer: pointer }; }; export const newNdebitEvent = (content, fromPub, toPub) => ({ content, created_at: Math.floor(Date.now() / 1000), kind: 21002, pubkey: fromPub, tags: [['p', toPub], ['clink_version', '1']] }); export const newNdebitFilter = (publicKey, eventId) => ({ since: Math.floor(Date.now() / 1000) - 1, kinds: [21002], '#p': [publicKey], '#e': [eventId] }); //# sourceMappingURL=ndebit.js.map