UNPKG

node-red-contrib-nostr

Version:

Node-RED nodes for seamless Nostr protocol integration. Features robust WebSocket handling, event filtering, and NPUB-based routing. Built with TypeScript for type safety and extensive testing. Perfect for Nostr automation flows.

59 lines (58 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventBuilder = void 0; const sha256_1 = require("@noble/hashes/sha256"); const utils_1 = require("@noble/hashes/utils"); const keys_1 = require("../crypto/keys"); class EventBuilder { static async createEvent(kind, content, privateKey, tags = []) { const pubkey = await this.keyManager.getPublicKey(privateKey); const created_at = Math.floor(Date.now() / 1000); const event = { kind, content, created_at, pubkey, tags, id: '', sig: '' }; // Calculate event ID const serialized = JSON.stringify([ 0, event.pubkey, event.created_at, event.kind, event.tags, event.content ]); event.id = (0, utils_1.bytesToHex)((0, sha256_1.sha256)(Buffer.from(serialized))); // Sign the event event.sig = await this.keyManager.sign(privateKey, event.id); return event; } static async validateEvent(event) { // Verify all required fields exist if (!event.id || !event.pubkey || !event.created_at || !event.kind || !event.tags || !event.content || !event.sig) { return false; } // Verify event ID const serialized = JSON.stringify([ 0, event.pubkey, event.created_at, event.kind, event.tags, event.content ]); const id = (0, utils_1.bytesToHex)((0, sha256_1.sha256)(Buffer.from(serialized))); if (id !== event.id) { return false; } // Verify signature return await this.keyManager.verify(event.pubkey, event.id, event.sig); } } exports.EventBuilder = EventBuilder; EventBuilder.keyManager = new keys_1.KeyManager();