From d3e5b739c9cc99823f4230b45b47f774d14368ce Mon Sep 17 00:00:00 2001 From: OTime-Coder Date: Fri, 11 Sep 2026 16:35:36 +0800 Subject: [PATCH 1/2] refactor: attach collaboration transport to example servers --- examples/01-content-operations/README.md | 5 +++++ examples/01-content-operations/README.zh-CN.md | 4 ++++ examples/01-content-operations/src/server/server.ts | 6 +----- examples/01-content-operations/test/smoke.test.ts | 7 +++++++ examples/02-file-exchange/README.md | 5 +++++ examples/02-file-exchange/README.zh-CN.md | 4 ++++ examples/02-file-exchange/src/server/server.ts | 6 +----- examples/02-file-exchange/test/smoke.test.ts | 7 +++++++ examples/03-visual-inspection/README.md | 5 +++++ examples/03-visual-inspection/README.zh-CN.md | 4 ++++ examples/03-visual-inspection/src/server/server.ts | 6 +----- examples/03-visual-inspection/test/smoke.test.ts | 7 +++++++ examples/04-worktree/README.md | 5 +++++ examples/04-worktree/README.zh-CN.md | 4 ++++ examples/04-worktree/src/server/server.ts | 6 +----- examples/04-worktree/test/smoke.test.ts | 7 +++++++ examples/slide-gen-cli/README.md | 5 +++++ examples/slide-gen-cli/README.zh-CN.md | 4 ++++ examples/slide-gen-cli/src/server/server.ts | 6 +----- examples/slide-gen-cli/test/server.test.ts | 7 +++++++ 20 files changed, 85 insertions(+), 25 deletions(-) diff --git a/examples/01-content-operations/README.md b/examples/01-content-operations/README.md index b7207a1..dabb11e 100644 --- a/examples/01-content-operations/README.md +++ b/examples/01-content-operations/README.md @@ -15,6 +15,11 @@ CLI ──┐ Web ──┘ ``` +The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport +handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and +Web pages. Authentication for collaboration requests belongs in Transport middleware; Express +middleware does not automatically apply to those requests. + ## Run After entering this example, run every command from the current directory: diff --git a/examples/01-content-operations/README.zh-CN.md b/examples/01-content-operations/README.zh-CN.md index b8edab4..dd12fa8 100644 --- a/examples/01-content-operations/README.zh-CN.md +++ b/examples/01-content-operations/README.zh-CN.md @@ -13,6 +13,10 @@ CLI ──┐ Web ──┘ ``` +Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 +HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport +middleware 中,Express middleware 不会自动应用于这些请求。 + ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/01-content-operations/src/server/server.ts b/examples/01-content-operations/src/server/server.ts index a1cb25c..0117bd1 100644 --- a/examples/01-content-operations/src/server/server.ts +++ b/examples/01-content-operations/src/server/server.ts @@ -67,17 +67,13 @@ export async function startServer( } response.json(unit); }); - app.use("/universer-api", (request, response) => { - request.url = request.originalUrl; - transport.handleRequest(request, response); - }); const webRoot = fileURLToPath(new URL("../web", import.meta.url)); app.use(express.static(webRoot)); app.get("/{*path}", (_request, response) => response.sendFile("index.html", { root: webRoot })); const server = createServer(app); - server.on("upgrade", (request, socket, head) => transport.handleUpgrade(request, socket, head)); + transport.attach(server); await listen(server, 3010); const address = server.address(); if (address === null || typeof address === "string") throw new Error("Server did not start"); diff --git a/examples/01-content-operations/test/smoke.test.ts b/examples/01-content-operations/test/smoke.test.ts index c502477..e330f37 100644 --- a/examples/01-content-operations/test/smoke.test.ts +++ b/examples/01-content-operations/test/smoke.test.ts @@ -16,6 +16,13 @@ afterEach(async () => await server?.close()); it("creates, inspects, executes, and opens Sheet, Doc, and Slide units", async () => { server = await startServer(":memory:"); + + const ticket = await fetch(`${server.origin}/universer-api/user/session-ticket`); + expect(ticket.status).toBe(200); + expect(await ticket.json()).toMatchObject({ ticket: expect.any(String) }); + const fallback = await fetch(`${server.origin}/universer-api/not-an-endpoint`); + expect(fallback.status).toBe(200); + expect(await fallback.text()).toContain('id="sidebar"'); const sheetId = (await run("create", "sheet", "--name", "Demo Sheet")).trim(); const before = await run( diff --git a/examples/02-file-exchange/README.md b/examples/02-file-exchange/README.md index 291aedc..ea4d7e3 100644 --- a/examples/02-file-exchange/README.md +++ b/examples/02-file-exchange/README.md @@ -10,6 +10,11 @@ Collaboration Server and can be opened directly in the Web editor. Office file ⇄ CLI Exchange ⇄ UnitData ⇄ Collaboration Server ⇄ Web ``` +The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport +handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and +Web pages. Authentication for collaboration requests belongs in Transport middleware; Express +middleware does not automatically apply to those requests. + ## Run Run every command from this example directory: diff --git a/examples/02-file-exchange/README.zh-CN.md b/examples/02-file-exchange/README.zh-CN.md index b0ec111..1905a0d 100644 --- a/examples/02-file-exchange/README.zh-CN.md +++ b/examples/02-file-exchange/README.zh-CN.md @@ -9,6 +9,10 @@ Office 文件 ⇄ CLI Exchange ⇄ UnitData ⇄ Collaboration Server ⇄ Web ``` +Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 +HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport +middleware 中,Express middleware 不会自动应用于这些请求。 + ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/02-file-exchange/src/server/server.ts b/examples/02-file-exchange/src/server/server.ts index 14d3a5b..175ca68 100644 --- a/examples/02-file-exchange/src/server/server.ts +++ b/examples/02-file-exchange/src/server/server.ts @@ -69,17 +69,13 @@ export async function startServer( } response.json(unit); }); - app.use("/universer-api", (request, response) => { - request.url = request.originalUrl; - transport.handleRequest(request, response); - }); const webRoot = fileURLToPath(new URL("../web", import.meta.url)); app.use(express.static(webRoot)); app.get("/{*path}", (_request, response) => response.sendFile("index.html", { root: webRoot })); const server = createServer(app); - server.on("upgrade", (request, socket, head) => transport.handleUpgrade(request, socket, head)); + transport.attach(server); await listen(server, 3010); const address = server.address(); if (address === null || typeof address === "string") throw new Error("Server did not start"); diff --git a/examples/02-file-exchange/test/smoke.test.ts b/examples/02-file-exchange/test/smoke.test.ts index c502477..e330f37 100644 --- a/examples/02-file-exchange/test/smoke.test.ts +++ b/examples/02-file-exchange/test/smoke.test.ts @@ -16,6 +16,13 @@ afterEach(async () => await server?.close()); it("creates, inspects, executes, and opens Sheet, Doc, and Slide units", async () => { server = await startServer(":memory:"); + + const ticket = await fetch(`${server.origin}/universer-api/user/session-ticket`); + expect(ticket.status).toBe(200); + expect(await ticket.json()).toMatchObject({ ticket: expect.any(String) }); + const fallback = await fetch(`${server.origin}/universer-api/not-an-endpoint`); + expect(fallback.status).toBe(200); + expect(await fallback.text()).toContain('id="sidebar"'); const sheetId = (await run("create", "sheet", "--name", "Demo Sheet")).trim(); const before = await run( diff --git a/examples/03-visual-inspection/README.md b/examples/03-visual-inspection/README.md index 1c7a0b1..9637f51 100644 --- a/examples/03-visual-inspection/README.md +++ b/examples/03-visual-inspection/README.md @@ -10,6 +10,11 @@ writes PNG files. 02 File Exchange + Render Page + Screenshot → PNG ``` +The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport +handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and +Web pages. Authentication for collaboration requests belongs in Transport middleware; Express +middleware does not automatically apply to those requests. + ## Run After entering this example, run every command from the current directory: diff --git a/examples/03-visual-inspection/README.zh-CN.md b/examples/03-visual-inspection/README.zh-CN.md index 5264d85..a3631b4 100644 --- a/examples/03-visual-inspection/README.zh-CN.md +++ b/examples/03-visual-inspection/README.zh-CN.md @@ -9,6 +9,10 @@ browser-backed Render Runtime,并写出 PNG。 02 File Exchange + Render Page + Screenshot → PNG ``` +Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 +HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport +middleware 中,Express middleware 不会自动应用于这些请求。 + ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/03-visual-inspection/src/server/server.ts b/examples/03-visual-inspection/src/server/server.ts index 34e65d5..436d2c1 100644 --- a/examples/03-visual-inspection/src/server/server.ts +++ b/examples/03-visual-inspection/src/server/server.ts @@ -69,17 +69,13 @@ export async function startServer( } response.json(unit); }); - app.use("/universer-api", (request, response) => { - request.url = request.originalUrl; - transport.handleRequest(request, response); - }); const webRoot = fileURLToPath(new URL("../web", import.meta.url)); app.use(express.static(webRoot)); app.get("/{*path}", (_request, response) => response.sendFile("index.html", { root: webRoot })); const server = createServer(app); - server.on("upgrade", (request, socket, head) => transport.handleUpgrade(request, socket, head)); + transport.attach(server); await listen(server, 3010); const address = server.address(); if (address === null || typeof address === "string") throw new Error("Server did not start"); diff --git a/examples/03-visual-inspection/test/smoke.test.ts b/examples/03-visual-inspection/test/smoke.test.ts index f50bcdc..18782cc 100644 --- a/examples/03-visual-inspection/test/smoke.test.ts +++ b/examples/03-visual-inspection/test/smoke.test.ts @@ -15,6 +15,13 @@ afterEach(async () => await server?.close()); it("keeps 01 and adds screenshots for Sheet, Doc, and Slide", async () => { server = await startServer(":memory:"); + + const ticket = await fetch(`${server.origin}/universer-api/user/session-ticket`); + expect(ticket.status).toBe(200); + expect(await ticket.json()).toMatchObject({ ticket: expect.any(String) }); + const fallback = await fetch(`${server.origin}/universer-api/not-an-endpoint`); + expect(fallback.status).toBe(200); + expect(await fallback.text()).toContain('id="sidebar"'); const sheetId = (await run("create", "sheet", "--name", "Demo Sheet")).trim(); const before = await run( diff --git a/examples/04-worktree/README.md b/examples/04-worktree/README.md index 56b5aba..bcde7c8 100644 --- a/examples/04-worktree/README.md +++ b/examples/04-worktree/README.md @@ -10,6 +10,11 @@ Discard in the Web UI. Trunk (editable in Web) → Worktree draft (editable) → Ready → Web review → Merge / Reopen / Discard ``` +The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport +handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and +Web pages. Authentication for collaboration requests belongs in Transport middleware; Express +middleware does not automatically apply to those requests. + ## Run After entering this example, run every command from the current directory: diff --git a/examples/04-worktree/README.zh-CN.md b/examples/04-worktree/README.zh-CN.md index 4940eeb..301b893 100644 --- a/examples/04-worktree/README.zh-CN.md +++ b/examples/04-worktree/README.zh-CN.md @@ -9,6 +9,10 @@ Ready 后由人通过 Web 审阅,再选择 Merge、Reopen 或 Discard。 Trunk(Web 可编辑)→ Worktree draft(可编辑)→ Ready → Web 审阅 → Merge / Reopen / Discard ``` +Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 +HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport +middleware 中,Express middleware 不会自动应用于这些请求。 + ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/04-worktree/src/server/server.ts b/examples/04-worktree/src/server/server.ts index cc90381..1a01c62 100644 --- a/examples/04-worktree/src/server/server.ts +++ b/examples/04-worktree/src/server/server.ts @@ -103,17 +103,13 @@ export async function startServer( app.get("/api/worktrees", (_request, response) => { response.json(worktrees.list()); }); - app.use("/universer-api", (request, response) => { - request.url = request.originalUrl; - transport.handleRequest(request, response); - }); const webRoot = fileURLToPath(new URL("../web", import.meta.url)); app.use(express.static(webRoot)); app.get("/{*path}", (_request, response) => response.sendFile("index.html", { root: webRoot })); const server = createServer(app); - server.on("upgrade", (request, socket, head) => transport.handleUpgrade(request, socket, head)); + transport.attach(server); await listen(server, port); const address = server.address(); if (address === null || typeof address === "string") throw new Error("Server did not start"); diff --git a/examples/04-worktree/test/smoke.test.ts b/examples/04-worktree/test/smoke.test.ts index 8aebc45..960a8c8 100644 --- a/examples/04-worktree/test/smoke.test.ts +++ b/examples/04-worktree/test/smoke.test.ts @@ -15,6 +15,13 @@ afterEach(async () => await server?.close()); it("keeps 02 and edits Sheet, Doc, and Slide through Worktrees", async () => { server = await startServer(":memory:"); + + const ticket = await fetch(`${server.origin}/universer-api/user/session-ticket`); + expect(ticket.status).toBe(200); + expect(await ticket.json()).toMatchObject({ ticket: expect.any(String) }); + const fallback = await fetch(`${server.origin}/universer-api/not-an-endpoint`); + expect(fallback.status).toBe(200); + expect(await fallback.text()).toContain('id="sidebar"'); const sheetId = (await run("create", "sheet", "--name", "Demo Sheet")).trim(); const sheetWorktree = (await run("worktree", "create", "--unit", sheetId)).trim(); diff --git a/examples/slide-gen-cli/README.md b/examples/slide-gen-cli/README.md index 4366ca1..ac24bfa 100644 --- a/examples/slide-gen-cli/README.md +++ b/examples/slide-gen-cli/README.md @@ -11,6 +11,11 @@ Presentation Brief → deck spec → SVG pages → compile/execute → evidence ↘ optional native enhancement replay ``` +The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport +handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and +Web pages. Authentication for collaboration requests belongs in Transport middleware; Express +middleware does not automatically apply to those requests. + ## Run the Baseline Deck Run from this directory: diff --git a/examples/slide-gen-cli/README.zh-CN.md b/examples/slide-gen-cli/README.zh-CN.md index 75bb488..801b40e 100644 --- a/examples/slide-gen-cli/README.zh-CN.md +++ b/examples/slide-gen-cli/README.zh-CN.md @@ -11,6 +11,10 @@ Presentation Brief → deck spec → SVG pages → compile/execute → evidence ↘ 可选 Native Enhancement replay ``` +Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 +HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport +middleware 中,Express middleware 不会自动应用于这些请求。 + ## 运行 Baseline Deck 在当前目录执行: diff --git a/examples/slide-gen-cli/src/server/server.ts b/examples/slide-gen-cli/src/server/server.ts index 294c870..e8195c9 100644 --- a/examples/slide-gen-cli/src/server/server.ts +++ b/examples/slide-gen-cli/src/server/server.ts @@ -101,17 +101,13 @@ export async function startServer( app.get("/api/worktrees", (_request, response) => { response.json(worktrees.list()); }); - app.use("/universer-api", (request, response) => { - request.url = request.originalUrl; - transport.handleRequest(request, response); - }); const webRoot = fileURLToPath(new URL("../web", import.meta.url)); app.use(express.static(webRoot)); app.get("/{*path}", (_request, response) => response.sendFile("index.html", { root: webRoot })); const server = createServer(app); - server.on("upgrade", (request, socket, head) => transport.handleUpgrade(request, socket, head)); + transport.attach(server); await listen(server, port); const address = server.address(); if (address === null || typeof address === "string") throw new Error("Server did not start"); diff --git a/examples/slide-gen-cli/test/server.test.ts b/examples/slide-gen-cli/test/server.test.ts index b8a1d0b..348ca06 100644 --- a/examples/slide-gen-cli/test/server.test.ts +++ b/examples/slide-gen-cli/test/server.test.ts @@ -18,6 +18,13 @@ it("creates only empty Slide units and keeps unit and Worktree routes available" temporaryRoot = await mkdtemp(join(tmpdir(), "slide-gen-server-")); server = await startServer(join(temporaryRoot, "server.sqlite"), 0); + const ticket = await fetch(`${server.origin}/universer-api/user/session-ticket`); + expect(ticket.status).toBe(200); + expect(await ticket.json()).toMatchObject({ ticket: expect.any(String) }); + const fallback = await fetch(`${server.origin}/universer-api/not-an-endpoint`); + expect(fallback.status).toBe(200); + expect(await fallback.text()).toContain('id="sidebar"'); + const unnamed = await create({}); expect(unnamed).toMatchObject({ name: "Untitled Slide", unitType: "slide", revision: 1 }); From 31a668f0eda729907b210dc889fec02bcee9cca2 Mon Sep 17 00:00:00 2001 From: OTime-Coder Date: Fri, 11 Sep 2026 16:59:26 +0800 Subject: [PATCH 2/2] docs: keep existing example READMEs unchanged --- examples/01-content-operations/README.md | 5 ----- examples/01-content-operations/README.zh-CN.md | 4 ---- examples/02-file-exchange/README.md | 5 ----- examples/02-file-exchange/README.zh-CN.md | 4 ---- examples/03-visual-inspection/README.md | 5 ----- examples/03-visual-inspection/README.zh-CN.md | 4 ---- examples/04-worktree/README.md | 5 ----- examples/04-worktree/README.zh-CN.md | 4 ---- examples/slide-gen-cli/README.md | 5 ----- examples/slide-gen-cli/README.zh-CN.md | 4 ---- 10 files changed, 45 deletions(-) diff --git a/examples/01-content-operations/README.md b/examples/01-content-operations/README.md index dabb11e..b7207a1 100644 --- a/examples/01-content-operations/README.md +++ b/examples/01-content-operations/README.md @@ -15,11 +15,6 @@ CLI ──┐ Web ──┘ ``` -The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport -handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and -Web pages. Authentication for collaboration requests belongs in Transport middleware; Express -middleware does not automatically apply to those requests. - ## Run After entering this example, run every command from the current directory: diff --git a/examples/01-content-operations/README.zh-CN.md b/examples/01-content-operations/README.zh-CN.md index dd12fa8..b8edab4 100644 --- a/examples/01-content-operations/README.zh-CN.md +++ b/examples/01-content-operations/README.zh-CN.md @@ -13,10 +13,6 @@ CLI ──┐ Web ──┘ ``` -Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 -HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport -middleware 中,Express middleware 不会自动应用于这些请求。 - ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/02-file-exchange/README.md b/examples/02-file-exchange/README.md index ea4d7e3..291aedc 100644 --- a/examples/02-file-exchange/README.md +++ b/examples/02-file-exchange/README.md @@ -10,11 +10,6 @@ Collaboration Server and can be opened directly in the Web editor. Office file ⇄ CLI Exchange ⇄ UnitData ⇄ Collaboration Server ⇄ Web ``` -The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport -handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and -Web pages. Authentication for collaboration requests belongs in Transport middleware; Express -middleware does not automatically apply to those requests. - ## Run Run every command from this example directory: diff --git a/examples/02-file-exchange/README.zh-CN.md b/examples/02-file-exchange/README.zh-CN.md index 1905a0d..b0ec111 100644 --- a/examples/02-file-exchange/README.zh-CN.md +++ b/examples/02-file-exchange/README.zh-CN.md @@ -9,10 +9,6 @@ Office 文件 ⇄ CLI Exchange ⇄ UnitData ⇄ Collaboration Server ⇄ Web ``` -Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 -HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport -middleware 中,Express middleware 不会自动应用于这些请求。 - ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/03-visual-inspection/README.md b/examples/03-visual-inspection/README.md index 9637f51..1c7a0b1 100644 --- a/examples/03-visual-inspection/README.md +++ b/examples/03-visual-inspection/README.md @@ -10,11 +10,6 @@ writes PNG files. 02 File Exchange + Render Page + Screenshot → PNG ``` -The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport -handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and -Web pages. Authentication for collaboration requests belongs in Transport middleware; Express -middleware does not automatically apply to those requests. - ## Run After entering this example, run every command from the current directory: diff --git a/examples/03-visual-inspection/README.zh-CN.md b/examples/03-visual-inspection/README.zh-CN.md index a3631b4..5264d85 100644 --- a/examples/03-visual-inspection/README.zh-CN.md +++ b/examples/03-visual-inspection/README.zh-CN.md @@ -9,10 +9,6 @@ browser-backed Render Runtime,并写出 PNG。 02 File Exchange + Render Page + Screenshot → PNG ``` -Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 -HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport -middleware 中,Express middleware 不会自动应用于这些请求。 - ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/04-worktree/README.md b/examples/04-worktree/README.md index bcde7c8..56b5aba 100644 --- a/examples/04-worktree/README.md +++ b/examples/04-worktree/README.md @@ -10,11 +10,6 @@ Discard in the Web UI. Trunk (editable in Web) → Worktree draft (editable) → Ready → Web review → Merge / Reopen / Discard ``` -The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport -handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and -Web pages. Authentication for collaboration requests belongs in Transport middleware; Express -middleware does not automatically apply to those requests. - ## Run After entering this example, run every command from the current directory: diff --git a/examples/04-worktree/README.zh-CN.md b/examples/04-worktree/README.zh-CN.md index 301b893..4940eeb 100644 --- a/examples/04-worktree/README.zh-CN.md +++ b/examples/04-worktree/README.zh-CN.md @@ -9,10 +9,6 @@ Ready 后由人通过 Web 审阅,再选择 Merge、Reopen 或 Discard。 Trunk(Web 可编辑)→ Worktree draft(可编辑)→ Ready → Web 审阅 → Merge / Reopen / Discard ``` -Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 -HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport -middleware 中,Express middleware 不会自动应用于这些请求。 - ## 运行 进入本 example 后,所有命令都在当前目录执行: diff --git a/examples/slide-gen-cli/README.md b/examples/slide-gen-cli/README.md index ac24bfa..4366ca1 100644 --- a/examples/slide-gen-cli/README.md +++ b/examples/slide-gen-cli/README.md @@ -11,11 +11,6 @@ Presentation Brief → deck spec → SVG pages → compile/execute → evidence ↘ optional native enhancement replay ``` -The Server uses `transport.attach(server)` to share its HTTP server with Express. Transport -handles registered collaboration HTTP and WebSocket routes; Express handles business APIs and -Web pages. Authentication for collaboration requests belongs in Transport middleware; Express -middleware does not automatically apply to those requests. - ## Run the Baseline Deck Run from this directory: diff --git a/examples/slide-gen-cli/README.zh-CN.md b/examples/slide-gen-cli/README.zh-CN.md index 801b40e..75bb488 100644 --- a/examples/slide-gen-cli/README.zh-CN.md +++ b/examples/slide-gen-cli/README.zh-CN.md @@ -11,10 +11,6 @@ Presentation Brief → deck spec → SVG pages → compile/execute → evidence ↘ 可选 Native Enhancement replay ``` -Server 通过 `transport.attach(server)` 与 Express 共用 HTTP server。Transport 处理已注册的协同 -HTTP 和 WebSocket 路由,Express 处理业务 API 与 Web 页面。协同请求的鉴权应放在 Transport -middleware 中,Express middleware 不会自动应用于这些请求。 - ## 运行 Baseline Deck 在当前目录执行: