import { nip19 } from "@nostr/tools"; import { NEvent } from "../nostr.ts"; import { render as renderMarkdown } from "@deno/gfm"; export default class Article { event: NEvent; constructor(event: NEvent) { this.event = event; } get identifier(): string { const tag = this.event.tags.find((t) => t[0] === "d"); return tag ? tag[1] : ""; } get title(): string { const tag = this.event.tags.find((t) => t[0] === "title"); return tag ? tag[1] : "Untitled"; } get summary(): string { const tag = this.event.tags.find((t) => t[0] === "summary"); return tag ? tag[1] : ""; } get publishedAt(): number { const tag = this.event.tags.find((t) => t[0] === "published_at"); return tag ? parseInt(tag[1]) : this.event.created_at; } get updatedAt(): number { return this.event.created_at; } get html(): string { return renderMarkdown(this.event.content); } get naddr(): string { return nip19.naddrEncode({ identifier: this.identifier, pubkey: this.event.pubkey, kind: this.event.kind, }); } }