Skip to content

feat: 持有房间文件即可把房间搬到其他中继 - #5

Merged
Freecode100Year merged 1 commit into
mainfrom
feat/relay-retarget
Oct 30, 2026
Merged

Freecode100Year merged 1 commit into
mainfrom
feat/relay-retarget

Conversation

@Freecode100Year

Copy link
Copy Markdown
Owner

概要

持有房间文件的人可以把同一个房间搬到其他中继(例如自建 wss://):房间密钥、口令和 roomId 都不变,生成时不需要口令。

中继地址不参与 roomId 派生和口令包装的 AAD,所以只需替换 relays 并重算 CSP connect-src(仍是精确源,不放宽)。

三种方式(输出逐字节相同,均通过 verify-room-file.mjs)

  • 房间文件内:新面板,用文件自身的 currentScript / <style> 字节,通过共用的 html-room/template.js 重新生成整份 HTML。
  • 网页生成器:选择旧文件转换,只在浏览器内读取;没有该面板的旧文件也能转。
  • CLI:node scripts/build-html-room.mjs retarget --in old.html --out new.html --relay wss://…

实现说明

  • 房间 HTML 骨架抽到 html-room/template.js,构建脚本和文件共用。
  • 打包后的脚本里出现的 <script / <style 改写为 \x3C(只出现在字符串字面量里)。

测试

  • 单元测试全部通过,build:check 通过。
  • 新增 browser-tests/retarget.mjs:在中继 A 上建带口令的房间,转到中继 B,两名成员用原口令聊天,全程没有连过 A;同时验证网页转换器和 CLI。
  • 原有浏览器测试全部通过。
  • 已更新 release-integrity.json。

Generated by Claude Code

Room files gain a 更换中继 panel that re-emits the same room (master or
wrapped key untouched, no password needed) with a new relay list and exact
CSP connect-src. The hosted maker converts existing files, and the CLI gains
a retarget command. All three paths produce byte-identical output that
passes verify-room-file.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01PCUwNSXQdqfDSugmFo4qmM
@Freecode100Year

Copy link
Copy Markdown
Owner Author

已随 #8 并入 main

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants