feishu-docs-cli 0.1.0-beta.5 → 0.1.0-beta.7
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/README.md +23 -9
- package/README.zh.md +23 -9
- package/dist/cli.js +12 -0
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +4 -0
- package/dist/client.js +34 -0
- package/dist/client.js.map +1 -1
- package/dist/commands/delete.js +4 -1
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/ls.js +4 -16
- package/dist/commands/ls.js.map +1 -1
- package/dist/commands/read.js +104 -58
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/search.js +5 -2
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/share.js +17 -35
- package/dist/commands/share.js.map +1 -1
- package/dist/commands/update.js +8 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/wiki.js +20 -6
- package/dist/commands/wiki.js.map +1 -1
- package/dist/parser/blocks-to-md.d.ts +1 -1
- package/dist/parser/blocks-to-md.js +102 -12
- package/dist/parser/blocks-to-md.js.map +1 -1
- package/dist/scopes.d.ts +22 -2
- package/dist/scopes.js +22 -4
- package/dist/scopes.js.map +1 -1
- package/dist/utils/scope-prompt.d.ts +34 -0
- package/dist/utils/scope-prompt.js +123 -0
- package/dist/utils/scope-prompt.js.map +1 -0
- package/dist/utils/version.d.ts +12 -0
- package/dist/utils/version.js +128 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -48,15 +48,27 @@ Requires Node.js >= 18.3.
|
|
|
48
48
|
3. After creation, go to the app's **Credentials & Basic Info** page. Copy the **App ID** (`cli_xxx`) and **App Secret** — you'll need them for environment variables
|
|
49
49
|
4. Go to **Permissions & Scopes**, search and add the following scopes:
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
**Base scopes** (no admin review needed — requested automatically during `feishu-docs login`):
|
|
52
|
+
|
|
53
|
+
| Scope | Description |
|
|
54
|
+
|-------|-------------|
|
|
55
|
+
| `wiki:wiki` | Knowledge base read/write |
|
|
56
|
+
| `docx:document` | Document read/write |
|
|
57
|
+
| `docx:document.block:convert` | Markdown to block conversion (create/update) |
|
|
58
|
+
| `sheets:spreadsheet:readonly` | Embedded spreadsheet read (read command) |
|
|
59
|
+
| `board:whiteboard:node:read` | Whiteboard export as image (read command) |
|
|
60
|
+
| `bitable:app:readonly` | Embedded bitable/table read (read command) |
|
|
61
|
+
|
|
62
|
+
**Feature scopes** (require admin review — requested on-demand via `feishu-docs authorize`):
|
|
63
|
+
|
|
64
|
+
| Scope | Description | Commands |
|
|
52
65
|
|-------|-------------|----------|
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
59
|
-
| `bitable:app:readonly` | Bitable read access | Optional |
|
|
66
|
+
| `drive:drive` | Cloud file management & permissions | ls, delete, share, create --folder |
|
|
67
|
+
| `contact:contact.base:readonly` | User lookup by email/phone | share add |
|
|
68
|
+
| `drive:drive.search:readonly` | Document search | search |
|
|
69
|
+
| `wiki:wiki.space:create` | Create knowledge bases | wiki create-space |
|
|
70
|
+
| `wiki:wiki.space.node` | Edit knowledge base nodes | wiki rename, move, copy |
|
|
71
|
+
| `wiki:wiki.space.member` | Manage knowledge base members | wiki add-member, remove-member |
|
|
60
72
|
|
|
61
73
|
5. Go to **Security Settings**, add the OAuth callback URL to the **Redirect URLs** allowlist:
|
|
62
74
|
- Default: `http://localhost:3456/callback`
|
|
@@ -232,6 +244,7 @@ feishu-docs whoami # Show current auth status
|
|
|
232
244
|
| `--json` | Output JSON format |
|
|
233
245
|
| `--lark` | Use Lark (international) domain |
|
|
234
246
|
| `--help` | Show help |
|
|
247
|
+
| `-v, --version` | Show version |
|
|
235
248
|
|
|
236
249
|
## Auth Modes
|
|
237
250
|
|
|
@@ -341,7 +354,8 @@ dist/ # Compiled output (git-ignored)
|
|
|
341
354
|
## Limitations
|
|
342
355
|
|
|
343
356
|
- **Supported**: docx (new documents)
|
|
344
|
-
- **
|
|
357
|
+
- **Embedded content**: sheet (rendered as table), bitable (rendered as table), board/whiteboard (exported as image)
|
|
358
|
+
- **Link only**: mindnote
|
|
345
359
|
- **Not supported**: doc (legacy format)
|
|
346
360
|
- Markdown conversion is lossy (colors, merged cells, layouts are dropped). Use `--blocks` for lossless JSON.
|
|
347
361
|
- Image write is not supported (read returns temporary URLs valid ~24h)
|
package/README.zh.md
CHANGED
|
@@ -47,15 +47,27 @@ npm install -g github:cliff-byte/feishu-docs-cli
|
|
|
47
47
|
2. 创建完成后,进入应用的 **凭证与基础信息** 页面,复制 **App ID**(`cli_xxx`)和 **App Secret** — 后续配置环境变量需要用到
|
|
48
48
|
3. 进入 **权限管理**,搜索并添加以下权限:
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
**基础权限**(免审核 — 执行 `feishu-docs login` 时自动申请):
|
|
51
|
+
|
|
52
|
+
| 权限 | 说明 |
|
|
53
|
+
|------|------|
|
|
54
|
+
| `wiki:wiki` | 知识库读写 |
|
|
55
|
+
| `docx:document` | 文档读写 |
|
|
56
|
+
| `docx:document.block:convert` | Markdown 转 Block(创建/更新需要) |
|
|
57
|
+
| `sheets:spreadsheet:readonly` | 嵌入式电子表格只读(read 命令) |
|
|
58
|
+
| `board:whiteboard:node:read` | 画板导出为图片(read 命令) |
|
|
59
|
+
| `bitable:app:readonly` | 嵌入式多维表格只读(read 命令) |
|
|
60
|
+
|
|
61
|
+
**功能权限**(需管理员审核 — 通过 `feishu-docs authorize` 按需申请):
|
|
62
|
+
|
|
63
|
+
| 权限 | 说明 | 相关命令 |
|
|
51
64
|
|------|------|----------|
|
|
52
|
-
| `
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `bitable:app:readonly` | 多维表格只读 | 可选 |
|
|
65
|
+
| `drive:drive` | 云空间文件管理和权限管理 | ls、delete、share、create --folder |
|
|
66
|
+
| `contact:contact.base:readonly` | 通过邮件/手机号查找用户 | share add |
|
|
67
|
+
| `drive:drive.search:readonly` | 搜索云文档 | search |
|
|
68
|
+
| `wiki:wiki.space:create` | 创建知识库 | wiki create-space |
|
|
69
|
+
| `wiki:wiki.space.node` | 编辑知识库节点 | wiki rename、move、copy |
|
|
70
|
+
| `wiki:wiki.space.member` | 管理知识库成员 | wiki add-member、remove-member |
|
|
59
71
|
|
|
60
72
|
4. 进入 **安全设置**,在 **重定向 URL** 白名单中添加 OAuth 回调地址:
|
|
61
73
|
- 默认值:`http://localhost:3456/callback`
|
|
@@ -231,6 +243,7 @@ feishu-docs whoami # 查看当前认证状态
|
|
|
231
243
|
| `--json` | JSON 格式输出 |
|
|
232
244
|
| `--lark` | 使用 Lark(国际版)域名 |
|
|
233
245
|
| `--help` | 显示帮助 |
|
|
246
|
+
| `-v, --version` | 显示版本号 |
|
|
234
247
|
|
|
235
248
|
## 认证模式
|
|
236
249
|
|
|
@@ -340,7 +353,8 @@ dist/ # 编译输出(不提交到 git)
|
|
|
340
353
|
## 限制
|
|
341
354
|
|
|
342
355
|
- **支持**:docx(新版文档)
|
|
343
|
-
-
|
|
356
|
+
- **嵌入内容**:电子表格(渲染为表格)、多维表格(渲染为表格)、画板/白板(导出为图片)
|
|
357
|
+
- **仅链接**:思维笔记(mindnote)
|
|
344
358
|
- **不支持**:doc(旧版格式)
|
|
345
359
|
- Markdown 转换有损(颜色、合并单元格、布局会丢失)。使用 `--blocks` 获取无损 JSON。
|
|
346
360
|
- 不支持图片写入(读取返回约 24 小时有效的临时 URL)
|
package/dist/cli.js
CHANGED
|
@@ -19,6 +19,7 @@ import { meta as lsMeta } from "./commands/ls.js";
|
|
|
19
19
|
import { meta as wikiMeta } from "./commands/wiki.js";
|
|
20
20
|
import { meta as installSkillMeta } from "./commands/install-skill.js";
|
|
21
21
|
import { handleError, CliError } from "./utils/errors.js";
|
|
22
|
+
import { getLocalVersion, checkForUpdates } from "./utils/version.js";
|
|
22
23
|
const HELP_TEXT = `feishu-docs - AI Agent 飞书云文档 CLI 工具
|
|
23
24
|
|
|
24
25
|
用法: feishu-docs <command> [options]
|
|
@@ -68,6 +69,7 @@ Agent:
|
|
|
68
69
|
--json 输出 JSON 格式
|
|
69
70
|
--lark 使用海外 Lark 域名
|
|
70
71
|
--help 显示帮助信息
|
|
72
|
+
-v, --version 显示版本号
|
|
71
73
|
`;
|
|
72
74
|
const GLOBAL_OPTIONS = {
|
|
73
75
|
auth: { type: "string", default: "auto" },
|
|
@@ -137,10 +139,16 @@ function parseAndRun(def, argv) {
|
|
|
137
139
|
return { handler: def.handler, args, globalOpts };
|
|
138
140
|
}
|
|
139
141
|
export async function run(argv) {
|
|
142
|
+
if (argv.includes("--version") || argv.includes("-v")) {
|
|
143
|
+
process.stdout.write(`feishu-docs ${getLocalVersion()}\n`);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
140
146
|
if (argv.length === 0 || argv.includes("--help") || argv.includes("-h")) {
|
|
141
147
|
process.stdout.write(HELP_TEXT);
|
|
142
148
|
return;
|
|
143
149
|
}
|
|
150
|
+
// Non-blocking update check (runs in background, never throws)
|
|
151
|
+
const updateCheck = checkForUpdates();
|
|
144
152
|
const command = argv[0];
|
|
145
153
|
const restArgs = argv.slice(1);
|
|
146
154
|
const def = COMMANDS[command];
|
|
@@ -171,5 +179,9 @@ export async function run(argv) {
|
|
|
171
179
|
catch (err) {
|
|
172
180
|
handleError(err, globalOpts.json);
|
|
173
181
|
}
|
|
182
|
+
finally {
|
|
183
|
+
// Wait for background update check to complete (never throws)
|
|
184
|
+
await updateCheck;
|
|
185
|
+
}
|
|
174
186
|
}
|
|
175
187
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -22,3 +22,7 @@ export declare function getTenantToken(authInfo: AuthInfo): Promise<string>;
|
|
|
22
22
|
* Direct fetch wrapper that correctly passes user/tenant token.
|
|
23
23
|
*/
|
|
24
24
|
export declare function fetchWithAuth(authInfo: AuthInfo, path: string, options?: FetchOptions): Promise<ApiResponse>;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch binary data with auth (for APIs that return file streams).
|
|
27
|
+
*/
|
|
28
|
+
export declare function fetchBinaryWithAuth(authInfo: AuthInfo, path: string): Promise<ArrayBuffer>;
|
package/dist/client.js
CHANGED
|
@@ -189,4 +189,38 @@ export async function fetchWithAuth(authInfo, path, options = {}) {
|
|
|
189
189
|
}
|
|
190
190
|
return body;
|
|
191
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Fetch binary data with auth (for APIs that return file streams).
|
|
194
|
+
*/
|
|
195
|
+
export async function fetchBinaryWithAuth(authInfo, path) {
|
|
196
|
+
const base = getApiBase(authInfo);
|
|
197
|
+
const bearer = await resolveBearer(authInfo);
|
|
198
|
+
const url = new URL(path, base);
|
|
199
|
+
const controller = new AbortController();
|
|
200
|
+
const timeoutId = setTimeout(() => controller.abort(), 60_000);
|
|
201
|
+
let res;
|
|
202
|
+
try {
|
|
203
|
+
res = await fetch(url.toString(), {
|
|
204
|
+
method: "GET",
|
|
205
|
+
headers: { Authorization: bearer },
|
|
206
|
+
signal: controller.signal,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
const error = err;
|
|
211
|
+
if (error.name === "AbortError") {
|
|
212
|
+
throw new CliError("API_ERROR", "API 请求超时(60秒)", {
|
|
213
|
+
retryable: true,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
throw err;
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
clearTimeout(timeoutId);
|
|
220
|
+
}
|
|
221
|
+
if (!res.ok) {
|
|
222
|
+
throw new CliError("API_ERROR", `下载失败: HTTP ${res.status} ${res.statusText}`);
|
|
223
|
+
}
|
|
224
|
+
return res.arrayBuffer();
|
|
225
|
+
}
|
|
192
226
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/delete.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { createClient, fetchWithAuth } from "../client.js";
|
|
5
5
|
import { CliError } from "../utils/errors.js";
|
|
6
|
+
import { FEATURE_SCOPE_GROUPS } from "../scopes.js";
|
|
7
|
+
import { ensureScopes } from "../utils/scope-prompt.js";
|
|
6
8
|
import { resolveDocument } from "../utils/document-resolver.js";
|
|
7
9
|
import { mapToDriveType } from "../utils/drive-types.js";
|
|
8
10
|
/**
|
|
@@ -31,7 +33,8 @@ export async function del(args, globalOpts) {
|
|
|
31
33
|
if (!input) {
|
|
32
34
|
throw new CliError("INVALID_ARGS", "缺少文档 URL 或 token。用法: feishu-docs delete <url|token>");
|
|
33
35
|
}
|
|
34
|
-
const { authInfo } = await createClient(globalOpts);
|
|
36
|
+
const { authInfo: rawAuthInfo } = await createClient(globalOpts);
|
|
37
|
+
const authInfo = await ensureScopes(rawAuthInfo, FEATURE_SCOPE_GROUPS.drive.scopes, globalOpts);
|
|
35
38
|
const doc = await resolveDocument(authInfo, input);
|
|
36
39
|
if (doc.objType === "doc") {
|
|
37
40
|
throw new CliError("NOT_SUPPORTED", "旧版 doc 类型不支持此操作,请在飞书客户端中将文档升级为 docx 格式");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAQzD;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,QAAkB,EAClB,OAAe,EACf,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAC7B,QAAQ,EACR,6BAA6B,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAChE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAC3D,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,EAAE,IAA2C,CAAC;QAC9D,OAAO,CAAE,IAAI,EAAE,KAA+B,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAgB;IAC/B,OAAO,EAAE;QACP,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;QAC5C,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;KAC/C;IACD,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,IAAiB,EACjB,UAAsB;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAY,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,qDAAqD,CACtD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/ls.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
import { createClient, fetchWithAuth } from "../client.js";
|
|
5
5
|
import { CliError } from "../utils/errors.js";
|
|
6
6
|
import { validateToken } from "../utils/validate.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { FEATURE_SCOPE_GROUPS } from "../scopes.js";
|
|
8
|
+
import { ensureScopes } from "../utils/scope-prompt.js";
|
|
9
9
|
export const meta = {
|
|
10
10
|
options: {
|
|
11
11
|
type: { type: "string" },
|
|
@@ -25,20 +25,8 @@ const TYPE_LABELS = {
|
|
|
25
25
|
slides: "幻灯片",
|
|
26
26
|
};
|
|
27
27
|
export async function ls(args, globalOpts) {
|
|
28
|
-
const { authInfo } = await createClient(globalOpts);
|
|
29
|
-
|
|
30
|
-
// (FEISHU_USER_TOKEN) where no stored scope info is available — the API
|
|
31
|
-
// call itself will surface a permission error in that case.
|
|
32
|
-
if (authInfo.mode === "user") {
|
|
33
|
-
const stored = await loadTokens();
|
|
34
|
-
if (stored) {
|
|
35
|
-
const required = [...FEATURE_SCOPE_GROUPS.drive.scopes];
|
|
36
|
-
const missing = getMissingScopes(stored.tokens.scope, required);
|
|
37
|
-
if (missing.length > 0) {
|
|
38
|
-
throw new CliError("AUTH_REQUIRED", buildScopeHint(missing));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
28
|
+
const { authInfo: rawAuthInfo } = await createClient(globalOpts);
|
|
29
|
+
const authInfo = await ensureScopes(rawAuthInfo, FEATURE_SCOPE_GROUPS.drive.scopes, globalOpts);
|
|
42
30
|
const folderToken = args.positionals[0] || undefined;
|
|
43
31
|
if (folderToken)
|
|
44
32
|
validateToken(folderToken, "folder_token");
|
package/dist/commands/ls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/commands/ls.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/read.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* read command: Read a Feishu document and output as Markdown.
|
|
3
3
|
*/
|
|
4
|
-
import { createClient, fetchWithAuth, getTenantToken } from "../client.js";
|
|
4
|
+
import { createClient, fetchWithAuth, fetchBinaryWithAuth, getTenantToken, } from "../client.js";
|
|
5
|
+
import { writeFile, mkdir } from "node:fs/promises";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { join } from "node:path";
|
|
5
8
|
import { blocksToMarkdown } from "../parser/blocks-to-md.js";
|
|
6
9
|
import { BlockType } from "../parser/block-types.js";
|
|
7
10
|
import { CliError } from "../utils/errors.js";
|
|
11
|
+
import { isPermissionError, promptScopeAuth } from "../utils/scope-prompt.js";
|
|
12
|
+
import { FEATURE_SCOPE_GROUPS } from "../scopes.js";
|
|
8
13
|
import { fetchAllBlocks } from "../services/doc-blocks.js";
|
|
9
14
|
import { getDocumentInfo } from "../services/block-writer.js";
|
|
10
15
|
import { resolveDocument } from "../utils/document-resolver.js";
|
|
@@ -116,15 +121,26 @@ async function fetchBitableData(authInfo, fullToken) {
|
|
|
116
121
|
* Fetch sheet metadata and cell values, return as renderable data.
|
|
117
122
|
*/
|
|
118
123
|
async function fetchSheetData(authInfo, sheetToken) {
|
|
119
|
-
|
|
124
|
+
// Sheet tokens embedded in docs have format: {spreadsheetToken}_{sheetId}
|
|
125
|
+
// The sheets API needs just the spreadsheet token; sheetId selects the tab.
|
|
126
|
+
const underscoreIdx = sheetToken.lastIndexOf("_");
|
|
127
|
+
const spreadsheetToken = underscoreIdx > 0 ? sheetToken.slice(0, underscoreIdx) : sheetToken;
|
|
128
|
+
const embeddedSheetId = underscoreIdx > 0 ? sheetToken.slice(underscoreIdx + 1) : undefined;
|
|
129
|
+
const metaRes = await fetchWithAuth(authInfo, `/open-apis/sheets/v2/spreadsheets/${encodeURIComponent(spreadsheetToken)}/metainfo`, {});
|
|
120
130
|
const metaData = metaRes.data;
|
|
121
131
|
const sheets = (metaData?.sheets || []);
|
|
122
132
|
if (sheets.length === 0)
|
|
123
133
|
return null;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
|
|
134
|
+
// Prefer the embedded sheet id; fall back to first sheet
|
|
135
|
+
// Note: metainfo API returns camelCase field names (sheetId, not sheet_id)
|
|
136
|
+
const targetSheet = embeddedSheetId
|
|
137
|
+
? sheets.find((s) => s.sheetId === embeddedSheetId) || sheets[0]
|
|
138
|
+
: sheets[0];
|
|
139
|
+
const sheetId = targetSheet.sheetId;
|
|
140
|
+
// Suppress title when it equals sheetId (default meaningless title)
|
|
141
|
+
const rawTitle = targetSheet.title || "";
|
|
142
|
+
const title = rawTitle === sheetId ? "" : rawTitle;
|
|
143
|
+
const valuesRes = await fetchWithAuth(authInfo, `/open-apis/sheets/v2/spreadsheets/${encodeURIComponent(spreadsheetToken)}/values/${encodeURIComponent(sheetId)}`, { params: { valueRenderOption: "ToString" } });
|
|
128
144
|
const valuesData = valuesRes.data;
|
|
129
145
|
const rows = (valuesData?.valueRange?.values ||
|
|
130
146
|
[]);
|
|
@@ -139,38 +155,18 @@ async function fetchSheetData(authInfo, sheetToken) {
|
|
|
139
155
|
return { fields, records, title, truncated: rows.length > maxRows };
|
|
140
156
|
}
|
|
141
157
|
/**
|
|
142
|
-
*
|
|
158
|
+
* Download board/whiteboard as image and save to temp file.
|
|
159
|
+
* Returns the local file path, or null on failure.
|
|
143
160
|
*/
|
|
144
|
-
async function
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (shapeText?.data) {
|
|
154
|
-
const texts = shapeText.data
|
|
155
|
-
.map((d) => d.text || "")
|
|
156
|
-
.filter(Boolean);
|
|
157
|
-
if (texts.length > 0)
|
|
158
|
-
textItems.push(texts.join(""));
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (node.type === "connector") {
|
|
162
|
-
const connCaptions = node.connector
|
|
163
|
-
?.captions;
|
|
164
|
-
if (connCaptions?.data) {
|
|
165
|
-
const texts = connCaptions.data
|
|
166
|
-
.map((d) => d.text || "")
|
|
167
|
-
.filter(Boolean);
|
|
168
|
-
if (texts.length > 0)
|
|
169
|
-
textItems.push(texts.join(""));
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
return textItems;
|
|
161
|
+
async function fetchBoardImage(authInfo, boardToken) {
|
|
162
|
+
const buf = await fetchBinaryWithAuth(authInfo, `/open-apis/board/v1/whiteboards/${encodeURIComponent(boardToken)}/download_as_image`);
|
|
163
|
+
if (buf.byteLength === 0)
|
|
164
|
+
return null;
|
|
165
|
+
const dir = join(tmpdir(), "feishu-docs");
|
|
166
|
+
await mkdir(dir, { recursive: true });
|
|
167
|
+
const filePath = join(dir, `board-${boardToken}.png`);
|
|
168
|
+
await writeFile(filePath, Buffer.from(buf));
|
|
169
|
+
return filePath;
|
|
174
170
|
}
|
|
175
171
|
/**
|
|
176
172
|
* Extract unique mention_user user_ids from blocks.
|
|
@@ -303,22 +299,53 @@ export async function read(args, globalOpts) {
|
|
|
303
299
|
return;
|
|
304
300
|
}
|
|
305
301
|
// Fetch all blocks
|
|
306
|
-
|
|
302
|
+
let blocks;
|
|
303
|
+
try {
|
|
304
|
+
blocks = await fetchAllBlocks(authInfo, documentId);
|
|
305
|
+
}
|
|
306
|
+
catch (err) {
|
|
307
|
+
if (isPermissionError(err)) {
|
|
308
|
+
throw new CliError("PERMISSION_DENIED", "读取文档内容权限不足。可能原因:\n" +
|
|
309
|
+
" 1. 应用未在飞书开发者后台开通 docx:document 权限 → 请前往 https://open.feishu.cn/app 开通\n" +
|
|
310
|
+
" 2. 文档未对当前用户/应用开放访问 → 请联系文档拥有者授权\n" +
|
|
311
|
+
'开通权限后,运行 feishu-docs authorize --scope "docx:document" 重新授权');
|
|
312
|
+
}
|
|
313
|
+
throw err;
|
|
314
|
+
}
|
|
307
315
|
// --blocks mode: output raw JSON
|
|
308
316
|
if (args.blocks) {
|
|
309
317
|
process.stdout.write(JSON.stringify(blocks, null, 2) + "\n");
|
|
310
318
|
return;
|
|
311
319
|
}
|
|
312
320
|
// Default: convert to Markdown
|
|
313
|
-
// Batch resolve image/file URLs
|
|
321
|
+
// Batch resolve image/file URLs (needs drive:drive scope)
|
|
314
322
|
const fileTokens = extractFileTokens(blocks);
|
|
315
323
|
let imageUrlMap = new Map();
|
|
324
|
+
let currentAuth = authInfo;
|
|
316
325
|
if (fileTokens.length > 0) {
|
|
317
326
|
try {
|
|
318
|
-
imageUrlMap = await batchGetTmpUrls(
|
|
327
|
+
imageUrlMap = await batchGetTmpUrls(currentAuth, fileTokens);
|
|
319
328
|
}
|
|
320
|
-
catch {
|
|
321
|
-
|
|
329
|
+
catch (err) {
|
|
330
|
+
if (isPermissionError(err)) {
|
|
331
|
+
const authorized = await promptScopeAuth([...FEATURE_SCOPE_GROUPS.drive.scopes], globalOpts);
|
|
332
|
+
if (authorized) {
|
|
333
|
+
const { authInfo: refreshed } = await createClient(globalOpts);
|
|
334
|
+
currentAuth = refreshed;
|
|
335
|
+
try {
|
|
336
|
+
imageUrlMap = await batchGetTmpUrls(currentAuth, fileTokens);
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
process.stderr.write("feishu-docs: warning: 获取图片/文件链接失败,链接将为空\n");
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
process.stderr.write("feishu-docs: warning: 跳过图片/文件链接获取(权限不足),将使用占位符\n");
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
process.stderr.write("feishu-docs: warning: 获取图片/文件链接失败,链接将为空\n");
|
|
348
|
+
}
|
|
322
349
|
}
|
|
323
350
|
}
|
|
324
351
|
// Batch resolve @mention user names
|
|
@@ -326,7 +353,7 @@ export async function read(args, globalOpts) {
|
|
|
326
353
|
const mentionUserIds = extractMentionUserIds(blocks);
|
|
327
354
|
if (mentionUserIds.length > 0) {
|
|
328
355
|
try {
|
|
329
|
-
userNameMap = await resolveUserNames(
|
|
356
|
+
userNameMap = await resolveUserNames(currentAuth, mentionUserIds);
|
|
330
357
|
}
|
|
331
358
|
catch {
|
|
332
359
|
process.stderr.write("feishu-docs: warning: 解析 @用户 名称失败\n");
|
|
@@ -337,25 +364,37 @@ export async function read(args, globalOpts) {
|
|
|
337
364
|
const bitableDataMap = new Map();
|
|
338
365
|
for (const token of bitableTokens) {
|
|
339
366
|
try {
|
|
340
|
-
const data = await fetchBitableData(
|
|
367
|
+
const data = await fetchBitableData(currentAuth, token);
|
|
341
368
|
if (data)
|
|
342
369
|
bitableDataMap.set(token, data);
|
|
343
370
|
}
|
|
344
|
-
catch {
|
|
345
|
-
|
|
371
|
+
catch (err) {
|
|
372
|
+
if (isPermissionError(err)) {
|
|
373
|
+
process.stderr.write(`feishu-docs: warning: 获取多维表格数据权限不足: ${token}\n` +
|
|
374
|
+
' 请在飞书开发者后台开通权限后运行 feishu-docs authorize --scope "bitable:app:readonly"\n');
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
process.stderr.write(`feishu-docs: warning: 获取多维表格数据失败: ${token}\n`);
|
|
378
|
+
}
|
|
346
379
|
}
|
|
347
380
|
}
|
|
348
|
-
// Batch resolve board
|
|
381
|
+
// Batch resolve board images
|
|
349
382
|
const boardTokens = extractBoardTokens(blocks);
|
|
350
|
-
const
|
|
383
|
+
const boardImageMap = new Map();
|
|
351
384
|
for (const token of boardTokens) {
|
|
352
385
|
try {
|
|
353
|
-
const
|
|
354
|
-
if (
|
|
355
|
-
|
|
386
|
+
const filePath = await fetchBoardImage(currentAuth, token);
|
|
387
|
+
if (filePath)
|
|
388
|
+
boardImageMap.set(token, filePath);
|
|
356
389
|
}
|
|
357
|
-
catch {
|
|
358
|
-
|
|
390
|
+
catch (err) {
|
|
391
|
+
if (isPermissionError(err)) {
|
|
392
|
+
process.stderr.write(`feishu-docs: warning: 获取画板图片权限不足: ${token}\n` +
|
|
393
|
+
' 请在飞书开发者后台开通权限后运行 feishu-docs authorize --scope "board:whiteboard:node:read"\n');
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
process.stderr.write(`feishu-docs: warning: 获取画板图片失败: ${token}\n`);
|
|
397
|
+
}
|
|
359
398
|
}
|
|
360
399
|
}
|
|
361
400
|
// Batch resolve sheet data
|
|
@@ -363,12 +402,19 @@ export async function read(args, globalOpts) {
|
|
|
363
402
|
const sheetDataMap = new Map();
|
|
364
403
|
for (const token of sheetTokens) {
|
|
365
404
|
try {
|
|
366
|
-
const data = await fetchSheetData(
|
|
405
|
+
const data = await fetchSheetData(currentAuth, token);
|
|
367
406
|
if (data)
|
|
368
407
|
sheetDataMap.set(token, data);
|
|
369
408
|
}
|
|
370
|
-
catch {
|
|
371
|
-
|
|
409
|
+
catch (err) {
|
|
410
|
+
if (isPermissionError(err)) {
|
|
411
|
+
process.stderr.write(`feishu-docs: warning: 获取电子表格数据权限不足: ${token}\n` +
|
|
412
|
+
' 请在飞书开发者后台开通权限后运行 feishu-docs authorize --scope "sheets:spreadsheet:readonly"\n');
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
416
|
+
process.stderr.write(`feishu-docs: warning: 获取电子表格数据失败: ${token} (${msg})\n`);
|
|
417
|
+
}
|
|
372
418
|
}
|
|
373
419
|
}
|
|
374
420
|
// Add metadata header if requested
|
|
@@ -376,7 +422,7 @@ export async function read(args, globalOpts) {
|
|
|
376
422
|
if (args.withMeta) {
|
|
377
423
|
let meta = {};
|
|
378
424
|
try {
|
|
379
|
-
meta = await getDocumentInfo(
|
|
425
|
+
meta = await getDocumentInfo(currentAuth, documentId);
|
|
380
426
|
}
|
|
381
427
|
catch {
|
|
382
428
|
// ignore metadata fetch errors
|
|
@@ -393,7 +439,7 @@ export async function read(args, globalOpts) {
|
|
|
393
439
|
imageUrlMap,
|
|
394
440
|
userNameMap,
|
|
395
441
|
bitableDataMap,
|
|
396
|
-
|
|
442
|
+
boardImageMap,
|
|
397
443
|
sheetDataMap,
|
|
398
444
|
});
|
|
399
445
|
process.stdout.write(output);
|