export const MEDIA_LIBRARY_TAGS = ['penis', 'chest', 'selfie', 'topless', 'feet'] as const; export type MediaLibraryTag = (typeof MEDIA_LIBRARY_TAGS)[number]; export const MEDIA_LIBRARY_SAFETY = ['sfw', 'nsfw', 'unknown'] as const; export type MediaLibrarySafety = (typeof MEDIA_LIBRARY_SAFETY)[number]; export interface MediaLibraryClassification { tags: MediaLibraryTag[]; safety: Exclude; description: string; confidence: number; } export interface MediaLibraryAsset { id: string; tags: MediaLibraryTag[]; safety: MediaLibrarySafety; classificationStatus: 'ready' | 'failed'; description: string | null; confidence: number | null; fileName: string; relativePath: string; mimeType: string; sizeBytes: number; width: number; height: number; enabled: boolean; consentConfirmedAt: number; createdAt: number; updatedAt: number; sendCount: number; lastSentAt: number | null; } export type MediaRequestKind = MediaLibraryTag | 'generic'; export interface MediaLibrarySend { id: number; assetId: string; accountId: string; conversationId: string; incomingKey: string; requestKind: MediaRequestKind; status: 'pending' | 'sent' | 'failed' | 'superseded'; requestedAt: number; sentAt: number | null; matrixMediaEventId: string | null; matrixTextEventId: string | null; mxcUri: string | null; error: string | null; }