story-research-zapwall/lib/articleDraftToParsedArticle.ts
2026-01-10 09:41:57 +01:00

71 lines
2.4 KiB
TypeScript

import type { ArticleDraft } from './articlePublisherTypes'
import type { AlbyInvoice } from '@/types/alby'
import type { Article } from '@/types/nostr'
import { generatePublicationHashId } from './hashIdGenerator'
import { buildObjectId } from './urlGenerator'
export async function buildParsedArticleFromDraft(params: {
draft: ArticleDraft
invoice: AlbyInvoice
authorPubkey: string
}): Promise<{ article: Article; hash: string; version: number; index: number }> {
const categoryTag = mapDraftCategoryToTag(params.draft.category)
const hashId = await generatePublicationHashId(buildPublicationHashInput({ draft: params.draft, authorPubkey: params.authorPubkey, categoryTag }))
const hash = hashId
const version = 0
const index = 0
const id = buildObjectId(hash, index, version)
const article: Article = {
id,
hash,
version,
index,
pubkey: params.authorPubkey,
title: params.draft.title,
preview: params.draft.preview,
content: '',
description: params.draft.preview,
contentDescription: params.draft.preview,
createdAt: Math.floor(Date.now() / 1000),
zapAmount: params.draft.zapAmount,
paid: false,
thumbnailUrl: params.draft.bannerUrl ?? '',
invoice: params.invoice.invoice,
...(params.invoice.paymentHash ? { paymentHash: params.invoice.paymentHash } : {}),
...(params.draft.category ? { category: params.draft.category } : {}),
...(params.draft.seriesId ? { seriesId: params.draft.seriesId } : {}),
...(params.draft.bannerUrl ? { bannerUrl: params.draft.bannerUrl } : {}),
...(params.draft.pages && params.draft.pages.length > 0 ? { pages: params.draft.pages } : {}),
kindType: 'article',
}
return { article, hash, version, index }
}
export function mapDraftCategoryToTag(category: ArticleDraft['category'] | undefined): 'sciencefiction' | 'research' {
if (category === 'scientific-research') {
return 'research'
}
return 'sciencefiction'
}
function buildPublicationHashInput(params: {
draft: ArticleDraft
authorPubkey: string
categoryTag: 'sciencefiction' | 'research'
}): Parameters<typeof generatePublicationHashId>[0] {
return {
pubkey: params.authorPubkey,
title: params.draft.title,
preview: params.draft.preview,
category: params.categoryTag,
...(params.draft.seriesId ? { seriesId: params.draft.seriesId } : {}),
...(params.draft.bannerUrl ? { bannerUrl: params.draft.bannerUrl } : {}),
zapAmount: params.draft.zapAmount,
}
}