@shocknet/clink-sdk
Version:
sdk client for clink
38 lines • 1.45 kB
JavaScript
import { nip44, finalizeEvent } from "nostr-tools";
const { getConversationKey, decrypt } = nip44;
export const sendRequest = async (pool, pair, relays, toPub, e, kindExpected, timeoutSeconds, moreCb) => {
const signed = finalizeEvent(e, pair.privateKey);
await Promise.all(pool.publish(relays, signed));
return new Promise((res, rej) => {
let resolved = false;
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, [newFilter(pair.publicKey, signed.id, kindExpected)], {
onevent: async (e) => {
if (timer)
clearTimeout(timer);
const content = decrypt(e.content, getConversationKey(pair.privateKey, toPub));
if (!resolved) {
resolved = true;
res(JSON.parse(content));
}
else {
moreCb?.(JSON.parse(content));
}
}
});
});
};
export const newFilter = (publicKey, eventId, kindExpected) => ({
since: Math.floor(Date.now() / 1000) - 1,
kinds: [kindExpected],
'#p': [publicKey],
'#e': [eventId]
});
//# sourceMappingURL=sender.js.map