@wenbin_wb/dsh-bridge 2.8.7 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,76 @@
4
4
 
5
5
  ---
6
6
 
7
+ ## [v2.10.0] - 2026-09-01
8
+
9
+ > **本次为远程锁屏/解锁流程修复版**:重点修复远程访问场景下锁屏不显示、解锁后无限循环、会话失效后无法恢复等一连串问题,并新增「管理保护」独立开关与 DSH 宿主版本显示。建议升级前备份 `~/.dsh/dsh-bridge/config.json`。
10
+
11
+ ### 🔐 远程锁屏/解锁流程修复
12
+
13
+ - **修复解锁后无限锁屏循环**:DSH 重启或访问会话过期后,旧 cookie 失效,所有接口被代理以 HTTP 401 拦截。此前即使管理密码解锁成功(`authAdminUnlock` 已豁免),解锁后 `getStatus` 依旧 401 → 面板把锁重置回 true → 无限循环。现在检测到访问会话失效(HTTP 401 / transport failure)时,**整页重载回绿色图标登录页**重新输入访问密码获取新会话,不再困在锁屏;带防循环保护(重载一次未恢复则提示手动刷新)。
14
+ - **修复锁屏状态下无法解锁(401)**:锁屏时访问会话可能已失效,`authAdminUnlock` 请求此前也被 HTTP 访问认证拦截,导致锁屏永远解不开;现豁免该端点的访问认证(内部仍校验管理密码,安全不受影响)。
15
+ - **修复关闭「访问认证」后锁屏不显示**:锁屏此前依赖访问认证开关,关闭后远程设备不再锁定(管理保护形同虚设);现管理保护独立生效,关闭访问认证后远程设备仍显示锁屏,仅凭管理密码可解锁。
16
+ - **修复关闭「访问认证」后仍要求密码**:`enabled` 开关豁免管理 gate(否则"关闭访问认证"这个动作本身会被管理保护锁死)。
17
+ - **修复远程首次进入设置页不显示锁屏**:现在远程设备首次进入即显示完整全屏锁屏(输入管理密码后方可操作)。
18
+ - **修复远程目录选择器卡死**:目录浏览被鉴权拦截时内嵌解锁入口,解锁后自动继续;`local_only` 策略下明确提示远程不可解锁。
19
+ - **修复解锁成功后操作丢失**:被拦截的操作暂存队列,解锁成功后自动重放,无需重新点击。
20
+
21
+ ### ✨ 新功能
22
+
23
+ - **新增「管理保护」独立开关**:与访问认证解耦的独立安全开关(安全认证页可切换)。关闭后管理操作免 adminToken,与访问认证开关互不干扰。
24
+ - **面板显示 DSH 宿主版本**:版本条新增灰色 `DSH vX.Y.Z` 标签(服务端惰性探测 `dsh --version` 并缓存,零轮询开销),与插件版本并排展示。
25
+
26
+ ### 🧹 内部优化
27
+
28
+ - 统一 adminToken 缓存为单一来源,删除死代码与重复实现(unlock-manager 未接入 API、组件内冗余 state、重复的 loopback-token 逻辑等)。
29
+
30
+ ---
31
+
32
+ ## [v2.9.0] - 2026-08-31
33
+
34
+ > ⚠️ **升级前必读**:本次为大规模更新(覆盖安全加固、并发模型、代码结构重构),改动量远超以往版本,尽管已通过 165 项自动化测试与多轮实测,仍可能存在未知问题。建议:
35
+ > - 升级前备份 `~/.dsh/dsh-bridge/config.json`(可在面板「运维监控 → 备份恢复」导出);
36
+ > - 升级后重点验证:各 IM 平台收发消息、审批流程、隧道连接;
37
+ > - 如遇异常可回退至 v2.8.7,并欢迎携带日志提交 Issue:https://github.com/wenbin-wb/dsh-bridge/issues
38
+ >
39
+ > **行为变更**:① 群聊自动授权默认关闭(可在平台卡片勾选开启);② 未设置密码时,备份导出/导入、隧道配置等高危操作将要求先设置密码;③ IM 发起的审批只在 IM 决议,Web 发起的只在 Web 弹窗。
40
+
41
+ ### 🛡️ 全面安全加固与代码质量大修(全仓库深度代码审查落地)
42
+
43
+ - **🔐 安全加固**:
44
+ - 访问/管理密码哈希升级:PBKDF2-SHA256 迭代 10,000 → 600,000(OWASP 建议),哈希格式带算法版本前缀,存量旧哈希在下次成功登录时透明升级,无需重设密码;
45
+ - 管理密码解锁防爆破:连续 5 次失败锁定 60 秒;
46
+ - 未设置任何密码时,备份导出/导入、隧道配置与启动、远程目录浏览、添加工作区、插件升级、重启 DSH 等高危操作强制要求先设置密码(**行为变更**);
47
+ - 本机特权 Token 端点(loopback-token)CORS 收敛:仅放行本插件生成的面板来源(回环 / 局域网 IP / 隧道地址),不再使用 `*`,收敛 Firefox/Safari 下的 drive-by 令牌窃取面;
48
+ - 隧道令牌掩码保护:非管理员视图的 `******` 掩码回显不再覆盖真实 Token,未变更字段不上传;
49
+ - 登录页与锁屏页不再向访客泄露救急重置明文命令,改为指向文档;修正 README 救急路径笔误(`~/.dsh-bridge` → `~/.dsh/dsh-bridge`)。
50
+ - **🐞 稳定性修复(含 eslint 静态分析新抓出的 4 个必崩 BUG)**:
51
+ - 修复 iOS 16 等旧移动端浏览器访问面板发送消息报 `AbortSignal.any is not a function (internal)` 的问题:DSH 网页客户端用该 API 组合请求超时/取消信号,而 Safari 17.4 才支持;代理注入页自动补齐兼容垫片(服务端运行在低版本 Node <20.3 时同样自动垫片并告警引导升级);
52
+ - 修复微信入站媒体下载 100% 抛 ReferenceError(`downloadMedia` 缺失 `fetch()` 调用,旧测试未覆盖);
53
+ - 修复 QQ 流式输出失败后补发收尾必崩(`streamMsgId` 作用域错误);
54
+ - 修复前端「查看手动升级命令」渲染崩溃(`UpgradeCommandRow` 组件缺失);
55
+ - 修复插件卸载时 `session/event` 监听器永不解绑(dispose 清理闭包引用错误,幽灵事件持续外发); - 修复微信/QQ 等 IM 端 `/list`、`/sessions`、`/use` 命令报 `cannot get property "sessionProjCache" without inject` 的问题:宿主 cordis 上下文禁止插件读取未在 inject 中声明的属性,会话列表的内存注入点改为安全探测、失败自动回落磁盘存储;
56
+
57
+ - 修复出站 digest 状态 Map 无限增长、自建隧道启动失败僵尸占用、cloudflared 意外退出后状态失真、`/use N` 编号与会话列表显示错位、`/status` 缺 reason 崩溃等问题。
58
+ - **🚦 并发模型修复**:
59
+ - 出站消息统一串行队列:心跳 / 正文 / 审批卡片 / 媒体不再交错乱序,消除 QQ 流式 replace 共享 `_msgSeq` 的并发冲突;
60
+ - 入站消息串行化 + 出站事件绑定发起轮次的会话 peer,杜绝 A 任务进行中 B 来消息导致回复串到 B 窗口的跨用户串扰;
61
+ - 审批发起者校验:群聊中其他成员回复 `/yes` 无法代批工具执行;
62
+ - 群聊自动授权改为显式配置 `groupAutoApprove`(**默认关闭**,行为变更:白名单非空时陌生群不再因 @机器人 一次即获授权);
63
+ - 配置持久化读-改-写整事务化,多平台并发保存不再丢失更新; - **修复 IM 端收不到审批卡片的问题**:DSH 宿主的审批分发是顺序瀑布(web GUI 认领监听器先行否决),桥接审批桥此前永远没有机会执行,导致微信/QQ 等 IM 端工具审批全部以"用户未批准"失败;现以 prepend 方式注册到分发链最外层,并采用严格归属模型:IM 发起的轮次审批只在 IM 决议(不再并行打开 Web 通道,杜绝 Web 端弹窗在 IM 决议后永久残留),Web 发起的轮次则完全交由 GUI 处理;支持任务停止时同步取消待决审批;
64
+ 同步修复飞书:其遗留的专属审批桥(未 prepend、无归属门槛)导致飞书发起的审批永远收不到卡片而 Web 反而弹窗,现已对齐统一归属模型并保留飞书原生按钮卡片 UX(按钮决议同样校验发起者);
65
+
66
+ - 平台配置恢复统一工厂化,消除四段复制与启动期竞态回滚。
67
+ - **🧹 代码质量与工程化**:
68
+ - 引入 eslint(flat config)与 CI:Node 22/24 × Ubuntu/Windows 全矩阵执行 lint + 单元测试;
69
+ - 提交 `package-lock.json` 锁定依赖树,清理 pnpm 残留配置;
70
+ - `conversation-bridge.js`(1642 行)按职责拆分为 `message-split` / `dsh-storage` / `session-catalog` / `commands` 四个模块;
71
+ - 主插件平台装配循环化;删除 7 个废弃 `wechat*` RPC 端点、`BRIDGE_MARK` 等死代码;
72
+ - 微信 context-token 落盘改为防抖合并写(此前每条入站消息同步读写盘);
73
+ - 自建隧道响应增加 32MB 上限(防内存拖垮)+ gzip 压缩异步化(不再阻塞事件循环)。
74
+
75
+ ---
76
+
7
77
  ## [v2.8.7] - 2026-08-30
8
78
 
9
79
  ### 🛜 多网卡智能切换与 macOS 升级与隧道自愈加固