substr/models/article.ts
2024-10-21 15:43:58 +02:00

48 lines
1.1 KiB
TypeScript

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,
});
}
}