# DESIGN-001 Core Concepts
# 终端 (Terminal)
终端是驿站的核心实体,类比聊天软件中的"设备"概念。每个浏览器实例或设备是一个独立终端。
| 属性 | 说明 |
|---|---|
| terminal_id | 唯一标识(UUID) |
| account_id | 所属账号 |
| name | 终端名称(用户自定义,如"手机浏览器"、“工作电脑”) |
| device_info | 设备信息(UA、OS 等) |
| permission | 权限等级:admin / user |
| is_primary | 主终端标志(首个注册,固定 admin) |
| is_temporary | 浏览器终端默认 true,关闭/断线后自动注销 |
| status | 在线状态:online / offline / deregistered |
| created_at | 创建时间 |
临时终端:所有浏览器创建的终端(含主终端)默认为临时终端(is_temporary: true),WebSocket 断线后自动标记为 deregistered。重开浏览器且 localStorage 有 terminal_token → 恢复旧终端(标记 online)。若 token 丢失且账号无 admin → 自动创建新 admin。终端名称从 User-Agent 自动生成(如 “Chrome/Windows”),可事后改名。
# 权限模型
| 权限 | 能力 | 约束 |
|---|---|---|
| admin | 管理账号下所有终端(添加/删除/重命名)、修改其他终端权限 | 每个账号至少保留一个 admin 终端(主终端);主终端不可删除/降级 |
| user | 文件传输、查看历史、创建群组、加入/退出群组 | 不能管理终端或修改权限 |
主终端:账号注册时自动创建的第一个终端,固定为 admin。主终端不可被删除,不可降级为 user。其他终端默认为 user,可由 admin 提升。所有终端(含 user)均可创建群组。
# 传输模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| P2P 直传 | WebRTC DataChannel,文件不经服务器 | 同局域网或网络条件好时 |
| 中继传输 | 文件经服务器中转 | P2P 不可达时(NAT 穿透失败) |
| 离线排队 | 文件暂存服务器,接收方上线后自动传输 | 接收方离线时 |
传输协商流程:发送方发起 → 接收方在线?→ 是:尝试 P2P → 超时降级中继 / 否:文件暂存服务器(24h TTL),上线后自动拉取。
并发模型:同一对终端间串行传输,不同终端对可并行。
# 群组
群组是终端的集合,用于广播传输。任何终端均可创建群组,创建者自动成为群主。广播传输时逐个处理:在线成员立即传输,离线成员排队(24h TTL)。
| 属性 | 说明 |
|---|---|
| group_id | 唯一标识 |
| account_id | 所属账号 |
| name | 群组名称 |
| members | 终端列表 |
| created_by | 创建者终端 |
| created_at | 创建时间 |
最后更新: 2026-07-31 19:58:33 +0800 在 GitHub 上编辑此页