feat: 收口文档桥接与 OnlyOffice/Sidebar 回归

- 为 documents.save/meta/content、blocks.patch 与 sidebar.dataset.list 补齐 Rust 协议映射、共享契约与桥接执行器

- 对齐 BlockNote、Mindmap、OnlyOffice 的保存/路由元信息,并补真实浏览器回归脚本与 OnlyOffice 部署基线

- 忽略 Rust 本地构建产物与 Harness 调试状态文件,避免临时产物进入仓库历史
This commit is contained in:
lix-2026
2026-04-15 03:06:29 +08:00
parent 84a8454fa9
commit b33ffb99e7
51 changed files with 3260 additions and 379 deletions
@@ -0,0 +1,56 @@
import { randomUUID } from "crypto";
export type MindmapRouteMeta = {
requestId: string;
traceId: string;
workspaceId: string | null;
documentId: string;
pageId: string;
mindmapId: string;
attachmentId: string;
ownerUserId: string;
source: "convex";
};
function readHeaderValue(headerList: Headers, ...candidates: string[]): string | null {
for (const candidate of candidates) {
const value = headerList.get(candidate);
if (typeof value === "string" && value.trim()) {
return value.trim();
}
}
return null;
}
function makeFallbackId(prefix: string): string {
return `${prefix}_${randomUUID()}`;
}
export function buildMindmapRouteMeta(
request: Request,
input: {
workspaceId?: string | null;
documentId: string;
mindmapId: string;
ownerUserId: string;
},
): MindmapRouteMeta {
const requestId =
readHeaderValue(request.headers, "x-request-id", "x-mnote-request-id") ??
makeFallbackId("req");
const traceId =
readHeaderValue(request.headers, "x-trace-id", "x-mnote-trace-id", "x-request-id") ??
makeFallbackId("trace");
return {
requestId,
traceId,
workspaceId: input.workspaceId?.trim() || null,
documentId: input.documentId,
pageId: input.documentId,
mindmapId: input.mindmapId,
attachmentId: input.mindmapId,
ownerUserId: input.ownerUserId,
source: "convex",
};
}