import type { ParsedChannelLink } from '@/lib/channelLink'; import type { AccountInvitation } from './account'; import type { ArchiveEntry, ChannelInfo, ChannelSettingsPatch, CreateOptions, FileUploadOptions, WorkspaceEvent } from './types'; /** * 常驻空间的 Worker 边界;业务结构来自后端,资源加解密由 @webdrop/core 处理。 * 便捷分享有自己的边界,见 shareApi.ts。 */ export interface WorkspaceApi { /** 新建空间:本地生成 id 与密钥、算 PoW、POST channels(api.md) */ createChannel(opts: CreateOptions, captchaToken?: string): Promise; /** 使用现有空间 settings 接口更新空间设置。 */ updateChannelSettings(patch: ChannelSettingsPatch): Promise; renameDevice(endpointHash: string, name: string): Promise; releaseDevice(endpointHash: string): Promise; /** 通过链接加入:先 GET 空间信息预览,再 POST seats */ joinChannel(link: ParsedChannelLink, password?: string): Promise; inviteUser(username: string): Promise; listInvitations(): Promise; revokeInvitation(username: string): Promise; listSaved(): Promise; /** 仅从本机删除保存的链接和终端密钥,不会删服务端空间 */ forget(id: string): Promise; /** 订阅某个空间的事件流(对应追加日志的推送),返回取消订阅函数 */ connect(channelId: string, onEvent: (e: WorkspaceEvent) => void): () => void; sendText(text: string, threadId?: string): Promise; sendFiles(files: File[], options?: FileUploadOptions, threadId?: string, folderId?: string): Promise; createThread(name: string, groupId?: string): Promise; createGroup(name: string): Promise; renameGroup(id: string, name: string): Promise; groupThread(id: string, groupId?: string): Promise; renameThread(threadId: string, name: string): Promise; setChannelHistory(threadId: string, chatHistory: boolean, filesHistory: boolean): Promise; createFolder(threadId: string, name: string, parentId?: string): Promise; renameFolder(folderId: string, threadId: string, name: string): Promise; moveItems(itemIds: string[], threadId: string, folderId?: string): Promise; /** 修改 = 追加一个替代旧条目的新版本,后写者胜 */ editText(id: string, text: string, threadId?: string): Promise; resolveConflict(id: string, choice: 'mine' | 'theirs'): Promise; remove(id: string): Promise; setSnapshot(text: string): Promise; /** 取文件内容(GATED 条目会计一次下载,见 api.md);带 versionId 取旧版本 */ getBlob(id: string, versionId?: string): Promise; listArchive(id: string): Promise; /** 标记「别的设备的修改」已看过(本地状态) */ markSeen(id: string): Promise; }