20 lines
1.1 KiB
TypeScript
20 lines
1.1 KiB
TypeScript
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<SavedResource> {
|
|
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<SavedResource> {
|
|
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 === '网络连接失败';
|
|
}
|