@shocknet/clink-sdk
Version:
sdk client for clink
60 lines • 2.09 kB
JavaScript
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