import type { NostrEvent } from '../../../types/api/nostrSignEvent'; export function validateEvent(event: NostrEvent): boolean { if (!(event instanceof Object)) return false; if (typeof event.kind !== 'number') return false; if (typeof event.content !== 'string') return false; if (typeof event.created_at !== 'number') return false; // ignore pubkey checks because if the pubkey is not set we add it to the event. same for the ID. if (!Array.isArray(event.tags)) return false; for (let i = 0; i < event.tags.length; i += 1) { const tag = event.tags[i]; if (!Array.isArray(tag)) return false; for (let j = 0; j < tag.length; j += 1) { if (typeof tag[j] === 'object') return false; } } return true; } export function serializeEvent(event: NostrEvent): string { if (!validateEvent(event)) throw new Error("can't serialize event with wrong or missing properties"); // https://github.com/nostr-protocol/nips/blob/master/01.md return JSON.stringify([0, event.pubkey, event.created_at, event.kind, event.tags, event.content]); }