@whispering233/ai-editor-server 0.0.36 → 0.0.39
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/client-dist/assets/{index-DvsPl_zn.js → index-Ci5pwR7m.js} +173 -173
- package/client-dist/assets/{index-DMxsNVkh.css → index-DAzWamd7.css} +1 -1
- package/client-dist/index.html +2 -2
- package/dist/backup.d.ts +135 -25
- package/dist/backup.d.ts.map +1 -1
- package/dist/backup.js +348 -68
- package/dist/backup.js.map +1 -1
- package/dist/cloud/auto-push.d.ts +39 -0
- package/dist/cloud/auto-push.d.ts.map +1 -0
- package/dist/cloud/auto-push.js +145 -0
- package/dist/cloud/auto-push.js.map +1 -0
- package/dist/cloud/device.d.ts +3 -0
- package/dist/cloud/device.d.ts.map +1 -0
- package/dist/cloud/device.js +15 -0
- package/dist/cloud/device.js.map +1 -0
- package/dist/cloud/state.d.ts +59 -0
- package/dist/cloud/state.d.ts.map +1 -0
- package/dist/cloud/state.js +162 -0
- package/dist/cloud/state.js.map +1 -0
- package/dist/cloud/sync.d.ts +102 -0
- package/dist/cloud/sync.d.ts.map +1 -0
- package/dist/cloud/sync.js +447 -0
- package/dist/cloud/sync.js.map +1 -0
- package/dist/cloud/webdav.d.ts +69 -0
- package/dist/cloud/webdav.d.ts.map +1 -0
- package/dist/cloud/webdav.js +326 -0
- package/dist/cloud/webdav.js.map +1 -0
- package/dist/device-name.d.ts +3 -0
- package/dist/device-name.d.ts.map +1 -0
- package/dist/device-name.js +13 -0
- package/dist/device-name.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/error.d.ts +8 -2
- package/dist/middleware/error.d.ts.map +1 -1
- package/dist/middleware/error.js +18 -1
- package/dist/middleware/error.js.map +1 -1
- package/dist/middleware/project.d.ts.map +1 -1
- package/dist/middleware/project.js +23 -1
- package/dist/middleware/project.js.map +1 -1
- package/dist/routes/cloud.d.ts +9 -0
- package/dist/routes/cloud.d.ts.map +1 -0
- package/dist/routes/cloud.js +206 -0
- package/dist/routes/cloud.js.map +1 -0
- package/dist/routes/outline.js +2 -2
- package/dist/routes/outline.js.map +1 -1
- package/dist/routes/project.d.ts.map +1 -1
- package/dist/routes/project.js +22 -7
- package/dist/routes/project.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** 单次请求超时(毫秒):云端操作是用户可见的同步动作,30s 足够且能及时报错 */
|
|
2
|
+
export declare const DEFAULT_WEBDAV_TIMEOUT_MS = 30000;
|
|
3
|
+
/** WebDAV 目录条目(`list()` 元素) */
|
|
4
|
+
export interface DavEntry {
|
|
5
|
+
/** 服务端返回的原始 href(未解码;排查用) */
|
|
6
|
+
href: string;
|
|
7
|
+
/** 末段名称(已解码,如 `20260813-101530123-自动-苹果本-人物32-设定58-章120.zip`) */
|
|
8
|
+
name: string;
|
|
9
|
+
/**
|
|
10
|
+
* 解码后的**基路径相对**路径(如 `书-proj-x/file.zip`):base 带路径前缀时
|
|
11
|
+
*(如 `https://host/dav/ai-editor`)服务端 href 多出的 `dav/ai-editor` 段会被剥掉
|
|
12
|
+
*(由 `list()` 归一,`parsePropfind` 保留服务端原样)
|
|
13
|
+
*/
|
|
14
|
+
path: string;
|
|
15
|
+
isCollection: boolean;
|
|
16
|
+
/** 字节数(集合或未提供 → null) */
|
|
17
|
+
size: number | null;
|
|
18
|
+
/** `getlastmodified` 原样(HTTP 日期;未提供 → null) */
|
|
19
|
+
lastModified: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface WebdavClientOptions {
|
|
22
|
+
/** WebDAV 根 URL(含用户自定义前缀,如 `https://dav.jianguoyun.com/dav/ai-editor`) */
|
|
23
|
+
url: string;
|
|
24
|
+
username: string;
|
|
25
|
+
password: string;
|
|
26
|
+
/** 单次请求超时(缺省 `DEFAULT_WEBDAV_TIMEOUT_MS`;测试注入小值) */
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface WebdavClient {
|
|
30
|
+
/** 列目录(`Depth: 1`):目录不存在(404)→ null;**结果不含目录自身**;按 path 升序 */
|
|
31
|
+
list(relPath: string): Promise<DavEntry[] | null>;
|
|
32
|
+
/** 创建目录(幂等):true = 本次创建;false = 已存在(405) */
|
|
33
|
+
mkcol(relPath: string): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* 幂等确保**工作区**存在:先建用户云盘根(`options.url`),再建工作根 `<云盘根>/ai-editor`。
|
|
36
|
+
* 返回 `true` = 本次创建了工作根(对外 `/cloud/test` 的 `created` 语义)。用户把地址填成一个
|
|
37
|
+
* 还不存在的路径时也能自愈(父目录缺失会抛错,由调用方转成可读文案)。
|
|
38
|
+
*/
|
|
39
|
+
ensureWorkingRoot(): Promise<boolean>;
|
|
40
|
+
/** 上传(PUT):覆盖同名文件 */
|
|
41
|
+
put(relPath: string, body: Uint8Array): Promise<void>;
|
|
42
|
+
/** 下载(GET):文件不存在(404)→ null */
|
|
43
|
+
get(relPath: string): Promise<Uint8Array | null>;
|
|
44
|
+
/** 同目录/跨目录改名(MOVE):用于「临时名 → 正式名」的原子落盘与书名改名时的目录迁移 */
|
|
45
|
+
move(fromRelPath: string, toRelPath: string): Promise<void>;
|
|
46
|
+
/** 删除文件/目录(幂等:404 视为已删) */
|
|
47
|
+
remove(relPath: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* 删除**目录**(幂等):比 `remove` 多两件事——集合用带尾斜杠的 URL,并带 `Depth: infinity`
|
|
50
|
+
* (RFC 4918 §9.6.1:对集合的 DELETE 需要它;部分服务器(坚果云实测)缺了会拒绝/重定向导致残留)。
|
|
51
|
+
* 两种形态都失败时抛错(调用方自行决定是否忽略)。
|
|
52
|
+
*/
|
|
53
|
+
removeDir(relPath: string): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 解析 PROPFIND 响应(**窄解析**:只取 response 块内的 href / resourcetype / getcontentlength /
|
|
57
|
+
* getlastmodified)。宽容命名空间前缀;坏块(无 href)跳过;URL 编码与 XML 实体都还原。
|
|
58
|
+
*/
|
|
59
|
+
export declare function parsePropfind(xml: string): DavEntry[];
|
|
60
|
+
/** 创建 WebDAV 客户端(每个云端操作会话一个;无内部状态) */
|
|
61
|
+
/**
|
|
62
|
+
* 应用在用户云盘根**下面**固定使用的子目录名(工作根)。**唯一拼接点就在本函数**:
|
|
63
|
+
* `cloud.json` 的 `webdav.url` 与设置页里,都只表达「用户的云盘根」(如 `https://dav.jianguoyun.com/dav`),
|
|
64
|
+
* 用户不需要知道我们怎么放东西;实际读写一律发生在 `<云盘根>/ai-editor/…` 下。
|
|
65
|
+
* 好处:设计语义留在应用侧(用户云盘根不被书目录污染),配置里也不出现我们的目录约定。
|
|
66
|
+
*/
|
|
67
|
+
export declare const CLOUD_WORK_DIR = "ai-editor";
|
|
68
|
+
export declare function createWebdavClient(options: WebdavClientOptions): WebdavClient;
|
|
69
|
+
//# sourceMappingURL=webdav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webdav.d.ts","sourceRoot":"","sources":["../../src/cloud/webdav.ts"],"names":[],"mappings":"AAqBA,6CAA6C;AAC7C,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAWhD,+BAA+B;AAC/B,MAAM,WAAW,QAAQ;IACvB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb;;;;KAIC;IACD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,4CAA4C;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC;;;;OAIG;IACH,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,qBAAqB;IACrB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,+BAA+B;IAC/B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACjD,oDAAoD;IACpD,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,2BAA2B;IAC3B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAkDD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmBrD;AAYD,sCAAsC;AACtC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAmN7E"}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
// 最小 WebDAV 客户端(PROPFIND / MKCOL / PUT / DELETE + 窄 XML 解析)
|
|
2
|
+
//
|
|
3
|
+
// 为什么手写不引依赖(`docs/design/40-cloud-sync.md` §2):只需要四个动词与四种响应字段,
|
|
4
|
+
// 引 SDK 或 XML 解析器会带进体积与第二套错误模型。出站请求走**全局 fetch**
|
|
5
|
+
// (服务启动时已安装 undici dispatcher:环境代理 + 连接族退避),**本模块不得自建 agent**。
|
|
6
|
+
//
|
|
7
|
+
// 路径约定:调用方传**解码后的相对路径**(如 `books/斗破苍穹-proj-x` 或 `""` = 根),
|
|
8
|
+
// 编码在本模块内逐段完成(`encodeURIComponent`);href 解码亦在此收口——中文书名/空格
|
|
9
|
+
// 对调用方透明,且请求编码与解析解码口径一致。
|
|
10
|
+
//
|
|
11
|
+
// 错误映射(→ HttpError;码表 `docs/api/error-code.md`):
|
|
12
|
+
// - 401/403 → 502 `CLOUD_AUTH_FAILED`(凭据无效/被吊销/权限不足)
|
|
13
|
+
// - 507 或 403 且响应体提示配额 → 502 `CLOUD_QUOTA_EXCEEDED`
|
|
14
|
+
// - 其余 4xx/5xx、超时、网络错误 → 502 `CLOUD_UNREACHABLE`
|
|
15
|
+
// - 404 **不抛错**:`list()` 返回 null(目录不存在,由调用方决定 MKCOL),`remove()` 幂等返回
|
|
16
|
+
//
|
|
17
|
+
// 范围:卡 2 只实现上述四个动词(配置/连通性测试用)。GET(下载)与 MOVE(原子改名)在
|
|
18
|
+
// 推送/拉取卡片按同一 `davFetch` 模板补——不在本卡预先实现未被调用的代码。
|
|
19
|
+
import { HttpError } from "../middleware/error.js";
|
|
20
|
+
/** 单次请求超时(毫秒):云端操作是用户可见的同步动作,30s 足够且能及时报错 */
|
|
21
|
+
export const DEFAULT_WEBDAV_TIMEOUT_MS = 30_000;
|
|
22
|
+
/** PROPFIND 请求体(只取我们需要的三种属性;命名空间前缀 `d:` 是通行写法) */
|
|
23
|
+
const PROPFIND_BODY = '<?xml version="1.0" encoding="utf-8"?><d:propfind xmlns:d="DAV:"><d:prop><d:resourcetype/><d:getcontentlength/><d:getlastmodified/></d:prop></d:propfind>';
|
|
24
|
+
/** XML 名称的宽容前缀(服务器可能用 `d:` / `D:` / `ns0:` 或不带前缀) */
|
|
25
|
+
const NS = "(?:[A-Za-z_][\\w.-]*:)?";
|
|
26
|
+
const RESPONSE_BLOCK_RE = new RegExp(`<${NS}response\\b[^>]*>([\\s\\S]*?)</${NS}response>`, "g");
|
|
27
|
+
const COLLECTION_RE = new RegExp(`<${NS}collection\\b`);
|
|
28
|
+
/** XML 实体反转义(只处理 href 里可能出现的五种 + 数字实体) */
|
|
29
|
+
function decodeXmlEntities(text) {
|
|
30
|
+
return text
|
|
31
|
+
.replace(/</g, "<")
|
|
32
|
+
.replace(/>/g, ">")
|
|
33
|
+
.replace(/"/g, '"')
|
|
34
|
+
.replace(/'/g, "'")
|
|
35
|
+
.replace(/&/g, "&");
|
|
36
|
+
}
|
|
37
|
+
/** 取块内某标签的文本(不存在 → null;trim 后为空 → "") */
|
|
38
|
+
function tagText(block, tag) {
|
|
39
|
+
const re = new RegExp(`<${NS}${tag}\\b[^>]*>([\\s\\S]*?)</${NS}${tag}>`);
|
|
40
|
+
const m = re.exec(block);
|
|
41
|
+
return m === null ? null : decodeXmlEntities((m[1] ?? "").trim());
|
|
42
|
+
}
|
|
43
|
+
/** 路径段解码(百分号编码的 UTF-8;非法编码 → 原样返回,不抛错) */
|
|
44
|
+
function decodeSegment(segment) {
|
|
45
|
+
try {
|
|
46
|
+
return decodeURIComponent(segment);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return segment;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** 把 href 归一为解码后的相对路径段(去空段、去首尾斜杠、绝对 URL 取 pathname) */
|
|
53
|
+
function hrefSegments(href) {
|
|
54
|
+
let path = href;
|
|
55
|
+
if (/^https?:\/\//i.test(href)) {
|
|
56
|
+
try {
|
|
57
|
+
path = new URL(href).pathname;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// 解析失败:按原串处理(下面的分段仍能给出可读结果)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
path = path.split(/[?#]/)[0] ?? path;
|
|
64
|
+
return path
|
|
65
|
+
.split("/")
|
|
66
|
+
.filter((s) => s !== "")
|
|
67
|
+
.map(decodeSegment);
|
|
68
|
+
}
|
|
69
|
+
/** 相对路径归一(去空段) */
|
|
70
|
+
function normalizeRel(relPath) {
|
|
71
|
+
return relPath.split("/").filter((s) => s !== "");
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 解析 PROPFIND 响应(**窄解析**:只取 response 块内的 href / resourcetype / getcontentlength /
|
|
75
|
+
* getlastmodified)。宽容命名空间前缀;坏块(无 href)跳过;URL 编码与 XML 实体都还原。
|
|
76
|
+
*/
|
|
77
|
+
export function parsePropfind(xml) {
|
|
78
|
+
const out = [];
|
|
79
|
+
for (const match of xml.matchAll(RESPONSE_BLOCK_RE)) {
|
|
80
|
+
const block = match[1] ?? "";
|
|
81
|
+
const href = tagText(block, "href");
|
|
82
|
+
if (href === null || href === "")
|
|
83
|
+
continue;
|
|
84
|
+
const segments = hrefSegments(href);
|
|
85
|
+
const sizeText = tagText(block, "getcontentlength");
|
|
86
|
+
out.push({
|
|
87
|
+
href,
|
|
88
|
+
name: segments.length === 0 ? "" : segments[segments.length - 1],
|
|
89
|
+
path: segments.join("/"),
|
|
90
|
+
isCollection: COLLECTION_RE.test(block),
|
|
91
|
+
size: sizeText !== null && /^\d+$/.test(sizeText) ? Number(sizeText) : null,
|
|
92
|
+
lastModified: tagText(block, "getlastmodified"),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** 列表结果排序(**代码单元序**,非 locale 序):确定、与文件系统 `ls` 口径一致 */
|
|
96
|
+
return out.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 列出目录时的自身条目判定:传入的 `path` 已剥掉 base 段(见客户端的 toBaseRelativeSegments)
|
|
100
|
+
* → 退化为与 relPath 直接比较;保留 `endsWith` 兜底(服务器返回与请求不一致的前缀时)。
|
|
101
|
+
*/
|
|
102
|
+
function isSelf(entryPath, relPath) {
|
|
103
|
+
const rel = normalizeRel(relPath).join("/");
|
|
104
|
+
if (rel === "")
|
|
105
|
+
return entryPath === ""; // 根:href 解码后无段(`/` 或 base 段被剥光)
|
|
106
|
+
return entryPath === rel || entryPath.endsWith(`/${rel}`);
|
|
107
|
+
}
|
|
108
|
+
/** 创建 WebDAV 客户端(每个云端操作会话一个;无内部状态) */
|
|
109
|
+
/**
|
|
110
|
+
* 应用在用户云盘根**下面**固定使用的子目录名(工作根)。**唯一拼接点就在本函数**:
|
|
111
|
+
* `cloud.json` 的 `webdav.url` 与设置页里,都只表达「用户的云盘根」(如 `https://dav.jianguoyun.com/dav`),
|
|
112
|
+
* 用户不需要知道我们怎么放东西;实际读写一律发生在 `<云盘根>/ai-editor/…` 下。
|
|
113
|
+
* 好处:设计语义留在应用侧(用户云盘根不被书目录污染),配置里也不出现我们的目录约定。
|
|
114
|
+
*/
|
|
115
|
+
export const CLOUD_WORK_DIR = "ai-editor";
|
|
116
|
+
export function createWebdavClient(options) {
|
|
117
|
+
// 拼工作根(唯一处):无论前端传什么(云盘根 / 带尾斜杠 / 恰好已经带了 `ai-editor`),
|
|
118
|
+
// 都在其后追加一段 `ai-editor` —— 不做「截断再拼回」的迁移分支,保持单一路径。
|
|
119
|
+
const baseWithoutWork = options.url.replace(/\/+$/, "");
|
|
120
|
+
const base = `${baseWithoutWork}/${CLOUD_WORK_DIR}`;
|
|
121
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_WEBDAV_TIMEOUT_MS;
|
|
122
|
+
const authHeader = `Basic ${Buffer.from(`${options.username}:${options.password}`, "utf8").toString("base64")}`;
|
|
123
|
+
// base 的路径段(解码后):带路径前缀的 base(`.../dav/ai-editor`)下,服务端 href 会多出这些段,
|
|
124
|
+
// 列表结果统一剥掉它们 → `path` 始终是「相对 base」的(与 JSDoc 一致,自身条目判定也简化)
|
|
125
|
+
const baseSegments = (() => {
|
|
126
|
+
try {
|
|
127
|
+
return normalizeRel(new URL(base).pathname).map(decodeSegment);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
})();
|
|
133
|
+
/** href 解码段 → base 相对段(前缀匹配则剥离;不匹配则原样保留,容错反代重写 href) */
|
|
134
|
+
function toBaseRelativeSegments(segments) {
|
|
135
|
+
if (baseSegments.length === 0)
|
|
136
|
+
return segments;
|
|
137
|
+
const head = segments.slice(0, baseSegments.length).join("/");
|
|
138
|
+
return head === baseSegments.join("/") ? segments.slice(baseSegments.length) : segments;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 相对路径 → 绝对 URL(逐段编码)。
|
|
142
|
+
* `withTrailingSlash`:集合操作(PROPFIND/MKCOL)带尾斜杠——RFC 4918 下集合以 `/` 结尾,
|
|
143
|
+
* 部分服务器对缺斜杠的集合请求会 301 重定向(依赖 fetch 跟随不如直接写对)。
|
|
144
|
+
*/
|
|
145
|
+
function urlOf(relPath, withTrailingSlash = false) {
|
|
146
|
+
const encoded = normalizeRel(relPath).map(encodeURIComponent).join("/");
|
|
147
|
+
if (encoded === "")
|
|
148
|
+
return `${base}/`;
|
|
149
|
+
return `${base}/${encoded}${withTrailingSlash ? "/" : ""}`;
|
|
150
|
+
}
|
|
151
|
+
/** 发请求(网络错误/超时 → 502 CLOUD_UNREACHABLE) */
|
|
152
|
+
async function davFetch(method, target, extra) {
|
|
153
|
+
try {
|
|
154
|
+
return await fetch(target, {
|
|
155
|
+
method,
|
|
156
|
+
headers: { Authorization: authHeader, ...(extra?.headers ?? {}) },
|
|
157
|
+
...(extra?.body === undefined ? {} : { body: extra.body }),
|
|
158
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
163
|
+
// undici 的顶层错误常是笼统的 `fetch failed`,真正的诊断信息在 `cause.code`
|
|
164
|
+
// (ECONNREFUSED/ENOTFOUND/ETIMEDOUT…)——把它带上,让「测试连接」的提示可行动。
|
|
165
|
+
// 多地址轮询全失败时 undici 抛 AggregateError(`cause.errors[]`,本身没有 `code`)——
|
|
166
|
+
// 那时逐个取 `errors[].code`,否则文案又退化成无信息量的 `fetch failed`(卡 5 复核登记的坑)。
|
|
167
|
+
const causeCode = describeErrorCause(err.cause);
|
|
168
|
+
const detail = causeCode !== null && !reason.includes(causeCode) ? `${reason}(${causeCode})` : reason;
|
|
169
|
+
throw new HttpError(502, "CLOUD_UNREACHABLE", `无法连接云盘(${method}):${detail}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** 响应体片段(错误提示用;读失败不掩盖原始状态码) */
|
|
173
|
+
async function bodySnippet(res) {
|
|
174
|
+
try {
|
|
175
|
+
const text = await res.text();
|
|
176
|
+
return text.replace(/\s+/g, " ").trim().slice(0, 200);
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return "";
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* 底层错误的「可读原因」:优先 `cause.code`(`ECONNREFUSED`/`ENOTFOUND`/`ETIMEDOUT`…);
|
|
184
|
+
* `cause` 是 `AggregateError`(多地址/多族轮询全失败)时取 `cause.errors[].code` 并**去重合并展示**
|
|
185
|
+
* (如 `ECONNREFUSED/ETIMEDOUT`——比只报第一个更有诊断价值)。取不到 → null(调用方回退顶层 message)。
|
|
186
|
+
*/
|
|
187
|
+
function describeErrorCause(cause) {
|
|
188
|
+
const direct = cause?.code;
|
|
189
|
+
if (typeof direct === "string" && direct !== "")
|
|
190
|
+
return direct;
|
|
191
|
+
const errors = cause?.errors;
|
|
192
|
+
if (Array.isArray(errors)) {
|
|
193
|
+
const codes = errors
|
|
194
|
+
.map((e) => e?.code)
|
|
195
|
+
.filter((c) => typeof c === "string" && c !== "");
|
|
196
|
+
if (codes.length > 0)
|
|
197
|
+
return [...new Set(codes)].join("/"); // 多地址同因(ECONNREFUSED×2)合并展示
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
/** 非预期状态码 → 按码表抛错(配额判定需要在 403 时看响应体) */
|
|
202
|
+
async function throwMapped(res, what) {
|
|
203
|
+
const detail = await bodySnippet(res);
|
|
204
|
+
const suffix = detail === "" ? "" : `:${detail}`;
|
|
205
|
+
// 第四个参数 = 上游原始状态码(对外仍是 502/… 的映射码;调用方靠它区分错因,如「名字被拒」)
|
|
206
|
+
if (res.status === 507 || (res.status === 403 && /quota|insufficient|配额|空间|流量|容量/i.test(detail))) {
|
|
207
|
+
throw new HttpError(502, "CLOUD_QUOTA_EXCEEDED", `云盘空间或上传流量不足(${what})${suffix}`, res.status);
|
|
208
|
+
}
|
|
209
|
+
if (res.status === 401 || res.status === 403) {
|
|
210
|
+
throw new HttpError(502, "CLOUD_AUTH_FAILED", `云盘认证失败(${what},HTTP ${res.status})——请检查 WebDAV 地址与用户名/应用密码`, res.status);
|
|
211
|
+
}
|
|
212
|
+
throw new HttpError(502, "CLOUD_UNREACHABLE", `云盘返回 HTTP ${res.status}(${what})${suffix}`, res.status);
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
async list(relPath) {
|
|
216
|
+
const res = await davFetch("PROPFIND", urlOf(relPath, true), {
|
|
217
|
+
headers: { Depth: "1", "Content-Type": "application/xml; charset=utf-8" },
|
|
218
|
+
body: PROPFIND_BODY,
|
|
219
|
+
});
|
|
220
|
+
if (res.status === 404)
|
|
221
|
+
return null; // 目录不存在(是否创建由调用方决定)
|
|
222
|
+
if (res.status !== 207 && !res.ok)
|
|
223
|
+
await throwMapped(res, `列目录 ${urlOf(relPath, true)}`);
|
|
224
|
+
const xml = await res.text();
|
|
225
|
+
const parsed = parsePropfind(xml);
|
|
226
|
+
// **空 multistatus = 路径不存在**(不是「存在但为空」):Depth:1 的 PROPFIND 对**存在的**集合
|
|
227
|
+
// 必然至少返回集合自身一个条目(我们随后会把它过滤掉,故「存在但空目录」也可能得到 `[]`——
|
|
228
|
+
// 区别就在这里:先看**原始**条目数)。部分服务器(坚果云实测)对不存在的集合回 207 + 空 body
|
|
229
|
+
// 而不是 404;若把它当「存在但空」,调用方会跳过 MKCOL,后续 PUT 才报 404 ObjectNotFound。
|
|
230
|
+
if (parsed.length === 0)
|
|
231
|
+
return null;
|
|
232
|
+
return parsed
|
|
233
|
+
.map((entry) => ({
|
|
234
|
+
...entry,
|
|
235
|
+
path: toBaseRelativeSegments(entry.path === "" ? [] : entry.path.split("/")).join("/"),
|
|
236
|
+
}))
|
|
237
|
+
.filter((entry) => !isSelf(entry.path, relPath));
|
|
238
|
+
},
|
|
239
|
+
async ensureWorkingRoot() {
|
|
240
|
+
// 用户云盘根:可能是用户随手写的还不存在的路径 → 幂等创建(已存在 405/301/302 视为无需创建)
|
|
241
|
+
const rootRes = await davFetch("MKCOL", baseWithoutWork);
|
|
242
|
+
if (!rootRes.ok && rootRes.status !== 405 && rootRes.status !== 301 && rootRes.status !== 302) {
|
|
243
|
+
await throwMapped(rootRes, `创建云盘根目录 ${baseWithoutWork}`);
|
|
244
|
+
}
|
|
245
|
+
// 工作根 `<云盘根>/ai-editor`
|
|
246
|
+
const workRes = await davFetch("MKCOL", `${base}/`);
|
|
247
|
+
if (workRes.ok)
|
|
248
|
+
return true;
|
|
249
|
+
if (workRes.status === 405 || workRes.status === 301 || workRes.status === 302)
|
|
250
|
+
return false;
|
|
251
|
+
await throwMapped(workRes, `创建工作目录 ${base}`);
|
|
252
|
+
return false;
|
|
253
|
+
},
|
|
254
|
+
async mkcol(relPath) {
|
|
255
|
+
// **不带尾斜杠**:RFC 4918 §9.3.1 的示例形态。带尾斜杠时部分服务器(实测坚果云)会回
|
|
256
|
+
// 405「已存在」却并不创建 → 调用方以为目录就绪,后续 PUT 才 404(误导性极强的错位)。
|
|
257
|
+
const target = urlOf(relPath, false);
|
|
258
|
+
const res = await davFetch("MKCOL", target);
|
|
259
|
+
if (res.ok)
|
|
260
|
+
return true;
|
|
261
|
+
// 405 = 目标已存在(RFC 4918);301/302 = 部分服务器对已存在目录的规范化跳转
|
|
262
|
+
if (res.status === 405 || res.status === 301 || res.status === 302)
|
|
263
|
+
return false;
|
|
264
|
+
await throwMapped(res, `创建目录 ${target}`);
|
|
265
|
+
return false;
|
|
266
|
+
},
|
|
267
|
+
async put(relPath, body) {
|
|
268
|
+
const res = await davFetch("PUT", urlOf(relPath), {
|
|
269
|
+
body,
|
|
270
|
+
headers: { "Content-Type": "application/zip" },
|
|
271
|
+
});
|
|
272
|
+
if (!res.ok)
|
|
273
|
+
await throwMapped(res, `上传 ${urlOf(relPath)}`);
|
|
274
|
+
},
|
|
275
|
+
async get(relPath) {
|
|
276
|
+
const res = await davFetch("GET", urlOf(relPath));
|
|
277
|
+
if (res.status === 404)
|
|
278
|
+
return null;
|
|
279
|
+
if (!res.ok)
|
|
280
|
+
await throwMapped(res, `下载 ${urlOf(relPath)}`);
|
|
281
|
+
return new Uint8Array(await res.arrayBuffer());
|
|
282
|
+
},
|
|
283
|
+
async move(fromRelPath, toRelPath) {
|
|
284
|
+
// RFC 4918:MOVE 的目标写在 `Destination` 头(绝对 URL)。
|
|
285
|
+
// `Overwrite: T`(默认):**同一份备份重复推送**(用户连点、或上次推完清理失败再推)时
|
|
286
|
+
// 正式名已存在,覆盖它才是幂等语义;跨机器同名冲突由推送侧的 head 判定拦在前面,
|
|
287
|
+
// 不靠 MOVE 报 412 兜底(那会让「重推同一份」永远失败)。
|
|
288
|
+
const res = await davFetch("MOVE", urlOf(fromRelPath), {
|
|
289
|
+
headers: { Destination: urlOf(toRelPath), Overwrite: "T" },
|
|
290
|
+
});
|
|
291
|
+
if (res.ok)
|
|
292
|
+
return;
|
|
293
|
+
// 兜底:部分云盘(坚果云实测)即使带 `Overwrite: T` 也因「目标已存在」回 409 DuplicateName——
|
|
294
|
+
// 此时删掉目标再重试一次(目标是被覆盖的那一份,删掉不会损失别的东西)。
|
|
295
|
+
if (res.status === 409 || res.status === 412) {
|
|
296
|
+
await this.remove(toRelPath).catch(() => undefined);
|
|
297
|
+
const retry = await davFetch("MOVE", urlOf(fromRelPath), {
|
|
298
|
+
headers: { Destination: urlOf(toRelPath), Overwrite: "T" },
|
|
299
|
+
});
|
|
300
|
+
if (retry.ok)
|
|
301
|
+
return;
|
|
302
|
+
await throwMapped(retry, `改名 ${urlOf(fromRelPath)} → ${urlOf(toRelPath)}`);
|
|
303
|
+
}
|
|
304
|
+
await throwMapped(res, `改名 ${urlOf(fromRelPath)} → ${urlOf(toRelPath)}`);
|
|
305
|
+
},
|
|
306
|
+
async remove(relPath) {
|
|
307
|
+
const res = await davFetch("DELETE", urlOf(relPath));
|
|
308
|
+
if (res.status === 404)
|
|
309
|
+
return; // 幂等:已不存在即视为已删
|
|
310
|
+
if (!res.ok)
|
|
311
|
+
await throwMapped(res, `删除 ${urlOf(relPath)}`);
|
|
312
|
+
},
|
|
313
|
+
async removeDir(relPath) {
|
|
314
|
+
// 集合删除:先试「带尾斜杠 + Depth: infinity」(RFC 形态),失败再退回无斜杠形态
|
|
315
|
+
const withSlash = urlOf(relPath, true);
|
|
316
|
+
const first = await davFetch("DELETE", withSlash, { headers: { Depth: "infinity" } });
|
|
317
|
+
if (first.ok || first.status === 404)
|
|
318
|
+
return;
|
|
319
|
+
const second = await davFetch("DELETE", urlOf(relPath));
|
|
320
|
+
if (second.ok || second.status === 404)
|
|
321
|
+
return;
|
|
322
|
+
await throwMapped(second, `删除目录 ${urlOf(relPath)}`);
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=webdav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webdav.js","sourceRoot":"","sources":["../../src/cloud/webdav.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-name.d.ts","sourceRoot":"","sources":["../src/device-name.ts"],"names":[],"mappings":"AAUA,+CAA+C;AAC/C,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// 生效设备名(备份文件名第 3 段「来源设备」的来源)
|
|
2
|
+
//
|
|
3
|
+
// 缺省 = 本机 hostname 派生(shared `deviceNameFromHostname`:去域名后缀、`-` 与非法字符转 `_`、
|
|
4
|
+
// 截 16 字符),保证备份文件名里的设备段始终非空且合法(禁 `-`)。
|
|
5
|
+
// 云端存档启用后,用户在设置页配置的 `device`(`cloud.json`)优先——覆盖逻辑由云端模块接入
|
|
6
|
+
// (见 `docs/design/40-cloud-sync.md` §7)。
|
|
7
|
+
import { hostname } from "node:os";
|
|
8
|
+
import { deviceNameFromHostname } from "@whispering233/ai-editor-shared";
|
|
9
|
+
/** 本机缺省设备名(纯派生,无 IO;每次调用重算,hostname 变更无需重启) */
|
|
10
|
+
export function defaultDeviceName() {
|
|
11
|
+
return deviceNameFromHostname(hostname());
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=device-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-name.js","sourceRoot":"","sources":["../src/device-name.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,EAAE;AACF,4EAA4E;AAC5E,uCAAuC;AACvC,0DAA0D;AAC1D,yCAAyC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,+CAA+C;AAC/C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,sBAAsB,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAkBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAWzE,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAkBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAWzE,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAajC,qCAAqC;AACrC,eAAO,MAAM,YAAY,OAAO,CAAC;AAuBjC,MAAM,WAAW,kBAAkB;IAClC,iCAAiC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACf;;;MAGE;IACD,GAAG,CAAC,EAAE,OAAO,CAAC;IACf,sCAAsC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACvB,yDAAyD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,IAAI,CAAC;QAAE,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,UAAU,CAAC;IACpB,6BAA6B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC7D,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,mBAAmB;IAClB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMzD;AAmCD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAyK9G;AAcD,gDAAgD;AAChD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW/D;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAK1E"}
|
package/dist/index.js
CHANGED
|
@@ -32,6 +32,8 @@ import { closeProject, detectProject, originCheckMiddleware, projectMiddleware,
|
|
|
32
32
|
import { projectRoutes, setProjectRoot } from "./routes/project.js";
|
|
33
33
|
import { readLastProject } from "./last-project.js";
|
|
34
34
|
import { outlineRoutes } from "./routes/outline.js";
|
|
35
|
+
import { initCloudState } from "./cloud/state.js";
|
|
36
|
+
import { cloudRoutes } from "./routes/cloud.js";
|
|
35
37
|
import { namesRoutes } from "./routes/names.js"; // 批量名称解析(工具调用人类可读化)
|
|
36
38
|
import { proposalRoutes } from "./routes/proposal.js";
|
|
37
39
|
import { trashRoutes } from "./routes/trash.js";
|
|
@@ -131,6 +133,9 @@ export async function startServer(projectRoot, options = {}) {
|
|
|
131
133
|
// 五类别 chat/request/stream/usage/http;文件不存在/非法 JSON/结构不符 → 全关;
|
|
132
134
|
// 不阻断启动。运行中改配置文件不生效——热加载 YAGNI)
|
|
133
135
|
initDebugConfig(root);
|
|
136
|
+
// 云端存档状态初始化(卡 2):创作根是 `cloud.json` 的定位依据(注入后 `cloud/state.ts` 才能
|
|
137
|
+
// 读写配置;未注入 → 一律视为未配置——仅影响测试/降级路径,不阻断启动)
|
|
138
|
+
initCloudState(root);
|
|
134
139
|
// 出站 HTTP dispatcher(嵌入 pi 运行时的必需环节,见 http-dispatcher.ts 文件头):
|
|
135
140
|
// 装 undici dispatcher 以拿到 pi CLI 同款行为(IPv6 黑洞链路的 autoSelectFamily 退避 +
|
|
136
141
|
// 环境代理支持 + 可配 HTTP 空闲超时);不装 → 部分网络下 provider 请求稳定 ETIMEDOUT。
|
|
@@ -182,6 +187,8 @@ export async function startServer(projectRoot, options = {}) {
|
|
|
182
187
|
// 关系路由(S3.4):查询(k 跳)/创建(判重)/物理删
|
|
183
188
|
app.route("/api/v1/relation", relationRoutes);
|
|
184
189
|
app.route("/api/v1/reference", referenceRoutes); // 参考资料专属端点(scan)
|
|
190
|
+
// 云端存档路由(卡 2):账号配置 + 连通性测试(不要求项目已打开)
|
|
191
|
+
app.route("/api/v1/cloud", cloudRoutes);
|
|
185
192
|
// Delta 路由(S5.3):追加 / 按节点查询 / compute 状态计算
|
|
186
193
|
app.route("/api/v1/delta", deltaRoutes);
|
|
187
194
|
// 对话路由(U3):会话列表 / 消息历史(按项目隔离;POST SSE 端点属后续切片)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { ContentfulStatusCode } from "hono/utils/http-status";
|
|
|
2
2
|
import type { ErrorHandler } from "hono";
|
|
3
3
|
import type { ErrorCode } from "@whispering233/ai-editor-shared";
|
|
4
4
|
/** 服务端补充错误码(不在 shared ErrorCode 枚举内) */
|
|
5
|
-
export declare const SERVER_ERROR_CODES: readonly ["INTERNAL_ERROR", "FORBIDDEN", "NOT_FOUND", "NO_PROJECT_OPEN", "PROJECT_ALREADY_EXISTS", "LLM_API_KEY_MISSING"];
|
|
5
|
+
export declare const SERVER_ERROR_CODES: readonly ["INTERNAL_ERROR", "FORBIDDEN", "NOT_FOUND", "NO_PROJECT_OPEN", "PROJECT_ALREADY_EXISTS", "LLM_API_KEY_MISSING", "CLOUD_NOT_CONFIGURED", "CLOUD_AUTH_FAILED", "CLOUD_UNREACHABLE", "CLOUD_QUOTA_EXCEEDED", "CLOUD_CONFLICT", "CLOUD_BACKUP_TOO_LARGE", "CLOUD_FILE_NOT_FOUND"];
|
|
6
6
|
export type ServerErrorCode = (typeof SERVER_ERROR_CODES)[number];
|
|
7
7
|
export type ApiErrorCode = ErrorCode | ServerErrorCode;
|
|
8
8
|
/** 成功响应包裹 */
|
|
@@ -26,7 +26,13 @@ export declare function fail(code: ApiErrorCode, message: string, fields?: strin
|
|
|
26
26
|
export declare class HttpError extends Error {
|
|
27
27
|
readonly status: ContentfulStatusCode;
|
|
28
28
|
readonly code: ApiErrorCode;
|
|
29
|
-
|
|
29
|
+
/**
|
|
30
|
+
* 上游(云盘)返回的原始 HTTP 状态码——仅当本错误是**上游错误的映射**时才有值
|
|
31
|
+
* (例如云盘 400 被映射成对外 502 `CLOUD_UNREACHABLE`)。调用方据此区分「云盘不接受这个请求」
|
|
32
|
+
* 与「网络/认证问题」:`ensureBookDir` 就靠它决定「名字被拒 → 换短名重试」。
|
|
33
|
+
*/
|
|
34
|
+
readonly upstreamStatus?: number;
|
|
35
|
+
constructor(status: ContentfulStatusCode, code: ApiErrorCode, message: string, upstreamStatus?: number);
|
|
30
36
|
}
|
|
31
37
|
/**
|
|
32
38
|
* 统一错误处理(Hono 4 onError 处理器,**必须注册为 app.onError 而非 app.use**):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/middleware/error.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,wCAAwC;AACxC,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/middleware/error.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,wCAAwC;AACxC,eAAO,MAAM,kBAAkB,yRAgBrB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,eAAe,CAAC;AAEvD,aAAa;AACb,wBAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAEzD;AAED,oDAAoD;AACpD,wBAAgB,IAAI,CAClB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,CAEvF;AAED;;;GAGG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;gBACrB,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;CAOvG;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAgB3C"}
|
package/dist/middleware/error.js
CHANGED
|
@@ -14,6 +14,15 @@ export const SERVER_ERROR_CODES = [
|
|
|
14
14
|
"NO_PROJECT_OPEN",
|
|
15
15
|
"PROJECT_ALREADY_EXISTS",
|
|
16
16
|
"LLM_API_KEY_MISSING", // S7.6:POST /chat 未配置 DeepSeek key——400
|
|
17
|
+
// 云端存档(卡 2):码表说明见 docs/api/error-code.md;CONFLICT / FILE_NOT_FOUND / BACKUP_TOO_LARGE
|
|
18
|
+
// 在推送/拉取卡片(卡 4/5)随功能引入
|
|
19
|
+
"CLOUD_NOT_CONFIGURED", // 409:webdav 三项未齐就调用需要云端的动作
|
|
20
|
+
"CLOUD_AUTH_FAILED", // 502:上游 401/403(凭据/权限)
|
|
21
|
+
"CLOUD_UNREACHABLE", // 502:网络/DNS/TLS/超时/上游 5xx
|
|
22
|
+
"CLOUD_QUOTA_EXCEEDED", // 502:上游 507 或配额提示
|
|
23
|
+
"CLOUD_CONFLICT", // 409:推送时云端 head ≠ 本机 lastPushedFileName(另一台机器写过)
|
|
24
|
+
"CLOUD_BACKUP_TOO_LARGE", // 400:备份包超过云盘单文件上限(推送前本地判定)
|
|
25
|
+
"CLOUD_FILE_NOT_FOUND", // 404:拉取指定的云端备份不存在(已被保留策略清理或手动删除)
|
|
17
26
|
];
|
|
18
27
|
/** 成功响应包裹 */
|
|
19
28
|
export function ok(data) {
|
|
@@ -30,11 +39,19 @@ export function fail(code, message, fields) {
|
|
|
30
39
|
export class HttpError extends Error {
|
|
31
40
|
status;
|
|
32
41
|
code;
|
|
33
|
-
|
|
42
|
+
/**
|
|
43
|
+
* 上游(云盘)返回的原始 HTTP 状态码——仅当本错误是**上游错误的映射**时才有值
|
|
44
|
+
* (例如云盘 400 被映射成对外 502 `CLOUD_UNREACHABLE`)。调用方据此区分「云盘不接受这个请求」
|
|
45
|
+
* 与「网络/认证问题」:`ensureBookDir` 就靠它决定「名字被拒 → 换短名重试」。
|
|
46
|
+
*/
|
|
47
|
+
upstreamStatus;
|
|
48
|
+
constructor(status, code, message, upstreamStatus) {
|
|
34
49
|
super(message);
|
|
35
50
|
this.name = "HttpError";
|
|
36
51
|
this.status = status;
|
|
37
52
|
this.code = code;
|
|
53
|
+
if (upstreamStatus !== undefined)
|
|
54
|
+
this.upstreamStatus = upstreamStatus;
|
|
38
55
|
}
|
|
39
56
|
}
|
|
40
57
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/middleware/error.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,EAAE;AACF,6EAA6E;AAC7E,wDAAwD;AACxD,uEAAuE;AACvE,sFAAsF;AACtF,wDAAwD;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAK/B,wCAAwC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,wBAAwB;IACxB,qBAAqB,EAAE,wCAAwC;
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/middleware/error.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,EAAE;AACF,6EAA6E;AAC7E,wDAAwD;AACxD,uEAAuE;AACvE,sFAAsF;AACtF,wDAAwD;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAK/B,wCAAwC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,wBAAwB;IACxB,qBAAqB,EAAE,wCAAwC;IAChE,sFAAsF;IACtF,uBAAuB;IACtB,sBAAsB,EAAE,4BAA4B;IACpD,mBAAmB,EAAE,wBAAwB;IAC7C,mBAAmB,EAAE,2BAA2B;IAChD,sBAAsB,EAAE,mBAAmB;IAC3C,gBAAgB,EAAE,kDAAkD;IACpE,wBAAwB,EAAE,4BAA4B;IACtD,sBAAsB,EAAE,kCAAkC;CAClD,CAAC;AAKX,aAAa;AACb,MAAM,UAAU,EAAE,CAAI,IAAO;IAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,IAAI,CAClB,IAAkB,EAClB,OAAe,EACf,MAAiB;IAEjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAuB;IAC7B,IAAI,CAAe;IAC5B;;;;OAIG;IACM,cAAc,CAAU;IACjC,YAAY,MAA4B,EAAE,IAAkB,EAAE,OAAe,EAAE,cAAuB;QACpG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,cAAc,KAAK,SAAS;YAAE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzE,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAChB,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YACjC,4EAA4E;YACvE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CACX,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,CAAC,EACpE,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7F,CAAC,CAAC;AACJ,CAAC"}
|