import type { ChannelInfo, ShareInfo } from '../generated/api'; import type { SavedResource } from '../database'; /** Server-owned fields only: preserve local credentials, drafts, and user edit timestamps. */ export function channelCache(raw: ChannelInfo): Partial { return { name: raw.settings.name ?? undefined, creatorAccount: raw.creator_account ?? undefined, createdAt: raw.created_at, expiresAt: raw.expires_at, seats: raw.settings.seats, maxDownloads: raw.settings.file_max_downloads, ttlSeconds: raw.settings.ttl_seconds, channelMetadata: raw }; } export function shareCache(raw: ShareInfo): Partial { if (raw.state !== 'draft' && raw.state !== 'sealed') throw new Error('分享状态无效'); return { createdAt: raw.sealed_at ?? raw.created_at, expiresAt: raw.expires_at, state: raw.state, ttlSeconds: raw.settings.ttl_seconds, maxVisitors: raw.settings.max_visitors, maxDownloads: raw.settings.file_max_downloads || null, shareMetadata: raw }; } export function isOfflineFailure(error: unknown): boolean { return error instanceof Error && error.message === '网络连接失败'; }