applesauce-wallet-connect
Version:
NIP-47 Nostr Wallet Connect implementation for both clients and services.
28 lines (27 loc) • 1.3 kB
JavaScript
import { EventFactory, blankEventTemplate } from "applesauce-core/factories";
import { includeSingletonTag } from "applesauce-core/operations/tags";
import { setEncryptedContent } from "applesauce-core/operations/encrypted-content";
import { getWalletRequestEncryption } from "../helpers/request.js";
import { WALLET_RESPONSE_KIND } from "../helpers/response.js";
export class WalletResponseFactory extends EventFactory {
static create(request, response) {
const encryption = getWalletRequestEncryption(request);
return new WalletResponseFactory((res) => res(blankEventTemplate(WALLET_RESPONSE_KIND)))
.requestEvent(request.id)
.client(request.pubkey)
.response(response, request.pubkey, encryption === "nip44_v2" ? "nip44" : "nip04");
}
requestEvent(eventId) {
return this.chain((draft) => includeSingletonTag(["e", eventId])(draft));
}
client(pubkey) {
return this.chain((draft) => includeSingletonTag(["p", pubkey])(draft));
}
response(response, recipient, encryption = "nip44") {
let result;
result = this.chain(async (draft) => {
return setEncryptedContent(recipient, JSON.stringify(response), result.signer, encryption)(draft);
});
return result;
}
}