export interface User { id: string; handle: string; displayName: string; avatarUrl?: string | null; bio?: string | null; headerUrl?: string | null; followersCount?: number; followingCount?: number; postsCount?: number; website?: string | null; createdAt?: string; movedTo?: string | null; isRemote?: boolean; profileUrl?: string | null; isBot?: boolean; isSwarm?: boolean; // Whether this user is from a Synapsis swarm node nodeDomain?: string | null; // Domain of the node this user is from (for swarm users) did?: string; canReceiveDms?: boolean; dmPrivacy?: 'everyone' | 'following' | 'none'; botOwner?: { id: string; handle: string; displayName?: string | null; avatarUrl?: string | null; } | null; } export interface MediaItem { id: string; url: string; altText?: string | null; mimeType?: string | null; } export interface Attachment { id: string; url: string; altText?: string | null; } export interface Post { id: string; content: string; createdAt: string; likesCount: number; repostsCount: number; repliesCount: number; author: User; media?: MediaItem[]; linkPreviewUrl?: string | null; linkPreviewTitle?: string | null; linkPreviewDescription?: string | null; linkPreviewImage?: string | null; replyTo?: Post | null; replyToId?: string | null; // Swarm reply info (when replying to a post on another node) swarmReplyToId?: string | null; swarmReplyToContent?: string | null; swarmReplyToAuthor?: { handle: string; displayName?: string | null; avatarUrl?: string | null; nodeDomain?: string | null; } | null; isLiked?: boolean; isReposted?: boolean; bot?: { id: string; name: string; handle: string; ownerId: string; } | null; nodeDomain?: string | null; // Domain of the node this post came from (for swarm posts) isSwarm?: boolean; // Whether this is a swarm post from another node originalPostId?: string; // Original post ID on the source node (for swarm posts) }