export type PostLocaleCode = "zh" | "en" | "ja" | "ko" | "vi" | "id" | "ms"; export type PostType = | "image" | "video" | "music" | "ppt" | "pdf" | "link" | "text" | "archive"; export type PostTypeFilter = PostType | "all"; export type AttachmentKind = "image" | "video" | "document"; export type PostLocaleTexts = { text: string; }; export type PostLocalizations = Record; export type Attachment = { id: string; kind: AttachmentKind; url: string; mime: string; filename: string; sizeBytes: number; width?: number; height?: number; durationSec?: number; posterUrl?: string; thumbnailUrl?: string; }; export type Post = { id: string; postType?: PostType | string; categoryId: number; categorySlug: string; language: string; sourceLanguage?: string; text?: string; localizations?: Partial; attachments: Attachment[]; isRecommended: boolean; publishedAt: string; updatedAt?: string; createdAt?: string; tags?: string[]; }; export type PostListResponse = { items: Post[]; nextCursor?: string; }; export type PostDownloadResponse = { ok: true; }; export type PostScope = { kind: "all" } | { kind: "category"; slug: string };