feishu-docs-cli 0.1.0-beta.8 → 1.0.0
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 +70 -13
- package/README.zh.md +53 -13
- package/dist/auth.js +31 -17
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +4 -2
- package/dist/client.js +177 -61
- package/dist/client.js.map +1 -1
- package/dist/commands/authorize.d.ts +3 -0
- package/dist/commands/authorize.js +16 -34
- package/dist/commands/authorize.js.map +1 -1
- package/dist/commands/cp.d.ts +9 -0
- package/dist/commands/cp.js +70 -0
- package/dist/commands/cp.js.map +1 -0
- package/dist/commands/create.js +21 -7
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/delete.js +53 -54
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/login.js +6 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/ls.js +38 -38
- package/dist/commands/ls.js.map +1 -1
- package/dist/commands/mkdir.d.ts +6 -0
- package/dist/commands/mkdir.js +49 -0
- package/dist/commands/mkdir.js.map +1 -0
- package/dist/commands/mv.d.ts +9 -0
- package/dist/commands/mv.js +72 -0
- package/dist/commands/mv.js.map +1 -0
- package/dist/commands/read.d.ts +1 -1
- package/dist/commands/read.js +17 -354
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/search.js +57 -55
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/share.d.ts +1 -1
- package/dist/commands/share.js +164 -91
- package/dist/commands/share.js.map +1 -1
- package/dist/commands/update.js +43 -60
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/wiki.js +8 -20
- package/dist/commands/wiki.js.map +1 -1
- package/dist/parser/block-types.d.ts +0 -1
- package/dist/parser/block-types.js +0 -22
- package/dist/parser/block-types.js.map +1 -1
- package/dist/parser/blocks-to-md.d.ts +10 -18
- package/dist/parser/blocks-to-md.js +341 -450
- package/dist/parser/blocks-to-md.js.map +1 -1
- package/dist/scopes.d.ts +5 -47
- package/dist/scopes.js +9 -54
- package/dist/scopes.js.map +1 -1
- package/dist/services/block-writer.d.ts +3 -2
- package/dist/services/block-writer.js +29 -13
- package/dist/services/block-writer.js.map +1 -1
- package/dist/services/doc-blocks.d.ts +1 -1
- package/dist/services/doc-blocks.js +1 -1
- package/dist/services/doc-blocks.js.map +1 -1
- package/dist/services/doc-enrichment.d.ts +64 -0
- package/dist/services/doc-enrichment.js +397 -0
- package/dist/services/doc-enrichment.js.map +1 -0
- package/dist/services/image-download.d.ts +31 -0
- package/dist/services/image-download.js +127 -0
- package/dist/services/image-download.js.map +1 -0
- package/dist/services/markdown-convert.d.ts +20 -0
- package/dist/services/markdown-convert.js +55 -1
- package/dist/services/markdown-convert.js.map +1 -1
- package/dist/services/wiki-nodes.d.ts +1 -1
- package/dist/services/wiki-nodes.js +2 -3
- package/dist/services/wiki-nodes.js.map +1 -1
- package/dist/types/api-responses.d.ts +34 -0
- package/dist/types/api-responses.js +8 -0
- package/dist/types/api-responses.js.map +1 -0
- package/dist/types/index.d.ts +9 -17
- package/dist/utils/concurrency.d.ts +12 -0
- package/dist/utils/concurrency.js +37 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/errors.d.ts +3 -1
- package/dist/utils/errors.js +11 -7
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/retry.d.ts +49 -0
- package/dist/utils/retry.js +70 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/scope-prompt.d.ts +23 -18
- package/dist/utils/scope-prompt.js +62 -51
- package/dist/utils/scope-prompt.js.map +1 -1
- package/package.json +3 -1
- package/skills/feishu-docs/SKILL.md +37 -2
package/dist/commands/read.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* read command: Read a Feishu document and output as Markdown.
|
|
3
3
|
*/
|
|
4
|
-
import { createClient, fetchWithAuth
|
|
5
|
-
import { writeFile, mkdir } from "node:fs/promises";
|
|
6
|
-
import { tmpdir } from "node:os";
|
|
7
|
-
import { join } from "node:path";
|
|
4
|
+
import { createClient, fetchWithAuth } from "../client.js";
|
|
8
5
|
import { blocksToMarkdown } from "../parser/blocks-to-md.js";
|
|
9
|
-
import { BlockType } from "../parser/block-types.js";
|
|
10
6
|
import { CliError } from "../utils/errors.js";
|
|
11
|
-
import { isPermissionError, promptScopeAuth } from "../utils/scope-prompt.js";
|
|
12
|
-
import { FEATURE_SCOPE_GROUPS } from "../scopes.js";
|
|
13
7
|
import { fetchAllBlocks } from "../services/doc-blocks.js";
|
|
14
8
|
import { getDocumentInfo } from "../services/block-writer.js";
|
|
15
9
|
import { resolveDocument } from "../utils/document-resolver.js";
|
|
10
|
+
import { enrichBlocks } from "../services/doc-enrichment.js";
|
|
16
11
|
/**
|
|
17
12
|
* Fetch raw text content of a document.
|
|
18
13
|
*/
|
|
@@ -20,242 +15,6 @@ async function fetchRawContent(authInfo, documentId) {
|
|
|
20
15
|
const res = await fetchWithAuth(authInfo, `/open-apis/docx/v1/documents/${encodeURIComponent(documentId)}/raw_content`);
|
|
21
16
|
return res?.data?.content || "";
|
|
22
17
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Batch get temporary download URLs for file tokens (images, files).
|
|
25
|
-
*/
|
|
26
|
-
async function batchGetTmpUrls(authInfo, fileTokens) {
|
|
27
|
-
if (fileTokens.length === 0)
|
|
28
|
-
return new Map();
|
|
29
|
-
const res = await fetchWithAuth(authInfo, "/open-apis/drive/v1/medias/batch_get_tmp_download_url", { params: { file_tokens: fileTokens } });
|
|
30
|
-
const urlMap = new Map();
|
|
31
|
-
const data = res?.data;
|
|
32
|
-
const items = (data?.tmp_download_urls || []);
|
|
33
|
-
for (const item of items) {
|
|
34
|
-
urlMap.set(item.file_token, item.tmp_download_url);
|
|
35
|
-
}
|
|
36
|
-
return urlMap;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Extract file tokens from blocks (images, files).
|
|
40
|
-
*/
|
|
41
|
-
function extractFileTokens(blocks) {
|
|
42
|
-
const tokens = [];
|
|
43
|
-
for (const block of blocks) {
|
|
44
|
-
if (block.block_type === BlockType.IMAGE && block.image?.token) {
|
|
45
|
-
tokens.push(block.image.token);
|
|
46
|
-
}
|
|
47
|
-
if (block.block_type === BlockType.FILE && block.file?.token) {
|
|
48
|
-
tokens.push(block.file.token);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return tokens;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Extract bitable tokens from blocks.
|
|
55
|
-
*/
|
|
56
|
-
function extractBitableTokens(blocks) {
|
|
57
|
-
const tokens = [];
|
|
58
|
-
for (const block of blocks) {
|
|
59
|
-
if (block.block_type === BlockType.BITABLE && block.bitable?.token) {
|
|
60
|
-
tokens.push(block.bitable.token);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return tokens;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Extract sheet tokens from blocks.
|
|
67
|
-
*/
|
|
68
|
-
function extractSheetTokens(blocks) {
|
|
69
|
-
const tokens = [];
|
|
70
|
-
for (const block of blocks) {
|
|
71
|
-
if (block.block_type === BlockType.SHEET && block.sheet?.token) {
|
|
72
|
-
tokens.push(block.sheet.token);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return tokens;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Extract board tokens from blocks.
|
|
79
|
-
*/
|
|
80
|
-
function extractBoardTokens(blocks) {
|
|
81
|
-
const tokens = [];
|
|
82
|
-
for (const block of blocks) {
|
|
83
|
-
if (block.block_type === BlockType.BOARD &&
|
|
84
|
-
block.board?.token) {
|
|
85
|
-
tokens.push(block.board.token);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return tokens;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Fetch bitable fields and records, return as renderable data.
|
|
92
|
-
*/
|
|
93
|
-
async function fetchBitableData(authInfo, fullToken) {
|
|
94
|
-
const idx = fullToken.lastIndexOf("_tbl");
|
|
95
|
-
if (idx === -1) {
|
|
96
|
-
process.stderr.write(`feishu-docs: warning: 多维表格 token 格式无法解析: ${fullToken}\n`);
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
const appToken = fullToken.slice(0, idx);
|
|
100
|
-
const tableId = fullToken.slice(idx + 1);
|
|
101
|
-
const [fieldsRes, recordsRes] = await Promise.all([
|
|
102
|
-
fetchWithAuth(authInfo, `/open-apis/bitable/v1/apps/${encodeURIComponent(appToken)}/tables/${encodeURIComponent(tableId)}/fields`, {}),
|
|
103
|
-
fetchWithAuth(authInfo, `/open-apis/bitable/v1/apps/${encodeURIComponent(appToken)}/tables/${encodeURIComponent(tableId)}/records`, { params: { page_size: 100 } }),
|
|
104
|
-
]);
|
|
105
|
-
const fieldsData = fieldsRes.data;
|
|
106
|
-
const recordsData = recordsRes.data;
|
|
107
|
-
const fields = (fieldsData?.items || []).map((f) => f.field_name);
|
|
108
|
-
const records = (recordsData?.items || []).map((r) => {
|
|
109
|
-
return fields.map((name) => {
|
|
110
|
-
const val = r.fields?.[name];
|
|
111
|
-
if (val === undefined || val === null)
|
|
112
|
-
return "";
|
|
113
|
-
if (typeof val === "object")
|
|
114
|
-
return JSON.stringify(val);
|
|
115
|
-
return String(val);
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
return { fields, records };
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Fetch sheet metadata and cell values, return as renderable data.
|
|
122
|
-
*/
|
|
123
|
-
async function fetchSheetData(authInfo, sheetToken) {
|
|
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`, {});
|
|
130
|
-
const metaData = metaRes.data;
|
|
131
|
-
const sheets = (metaData?.sheets || []);
|
|
132
|
-
if (sheets.length === 0)
|
|
133
|
-
return null;
|
|
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" } });
|
|
144
|
-
const valuesData = valuesRes.data;
|
|
145
|
-
const rows = (valuesData?.valueRange?.values ||
|
|
146
|
-
[]);
|
|
147
|
-
if (rows.length === 0)
|
|
148
|
-
return null;
|
|
149
|
-
const maxRows = 101; // first row = header + 100 data rows
|
|
150
|
-
const limitedRows = rows.length > maxRows ? rows.slice(0, maxRows) : rows;
|
|
151
|
-
const fields = limitedRows[0].map((cell) => String(cell ?? ""));
|
|
152
|
-
const records = limitedRows
|
|
153
|
-
.slice(1)
|
|
154
|
-
.map((row) => fields.map((_, i) => String(row[i] ?? "")));
|
|
155
|
-
return { fields, records, title, truncated: rows.length > maxRows };
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Download board/whiteboard as image and save to temp file.
|
|
159
|
-
* Returns the local file path, or null on failure.
|
|
160
|
-
*/
|
|
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;
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Extract unique mention_user user_ids from blocks.
|
|
173
|
-
*/
|
|
174
|
-
function extractMentionUserIds(blocks) {
|
|
175
|
-
const ids = new Set();
|
|
176
|
-
for (const block of blocks) {
|
|
177
|
-
const elementSources = [
|
|
178
|
-
block.text?.elements,
|
|
179
|
-
block.heading1?.elements,
|
|
180
|
-
block.heading2?.elements,
|
|
181
|
-
block.heading3?.elements,
|
|
182
|
-
block.heading4?.elements,
|
|
183
|
-
block.heading5?.elements,
|
|
184
|
-
block.heading6?.elements,
|
|
185
|
-
block.heading7?.elements,
|
|
186
|
-
block.heading8?.elements,
|
|
187
|
-
block.heading9?.elements,
|
|
188
|
-
block.bullet?.elements,
|
|
189
|
-
block.ordered?.elements,
|
|
190
|
-
block.todo?.elements,
|
|
191
|
-
block.quote?.elements,
|
|
192
|
-
];
|
|
193
|
-
for (const elements of elementSources) {
|
|
194
|
-
if (!elements)
|
|
195
|
-
continue;
|
|
196
|
-
for (const el of elements) {
|
|
197
|
-
if (el.mention_user?.user_id) {
|
|
198
|
-
ids.add(el.mention_user.user_id);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return [...ids];
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Batch resolve user IDs to display names.
|
|
207
|
-
* Uses tenant_access_token + contact:user.base:readonly to get name fields.
|
|
208
|
-
*/
|
|
209
|
-
async function resolveUserNames(authInfo, userIds) {
|
|
210
|
-
const nameMap = new Map();
|
|
211
|
-
// Use tenant token for contact API (contact:user.base:readonly is app-identity permission)
|
|
212
|
-
let tenantToken;
|
|
213
|
-
try {
|
|
214
|
-
tenantToken = await getTenantToken(authInfo);
|
|
215
|
-
}
|
|
216
|
-
catch {
|
|
217
|
-
// Fallback: try authen API with user token for current user
|
|
218
|
-
try {
|
|
219
|
-
const self = await fetchWithAuth(authInfo, "/open-apis/authen/v1/user_info", {});
|
|
220
|
-
const selfData = self?.data;
|
|
221
|
-
if (selfData?.open_id && selfData?.name) {
|
|
222
|
-
nameMap.set(selfData.open_id, selfData.name);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
catch {
|
|
226
|
-
// no way to resolve
|
|
227
|
-
}
|
|
228
|
-
return nameMap;
|
|
229
|
-
}
|
|
230
|
-
// Batch query users (up to 50 per request)
|
|
231
|
-
const BATCH = 50;
|
|
232
|
-
for (let i = 0; i < userIds.length; i += BATCH) {
|
|
233
|
-
const batch = userIds.slice(i, i + BATCH);
|
|
234
|
-
try {
|
|
235
|
-
const params = {
|
|
236
|
-
user_id_type: "open_id",
|
|
237
|
-
user_ids: batch,
|
|
238
|
-
};
|
|
239
|
-
const tenantAuthInfo = {
|
|
240
|
-
...authInfo,
|
|
241
|
-
mode: "tenant",
|
|
242
|
-
tenantToken,
|
|
243
|
-
};
|
|
244
|
-
const res = await fetchWithAuth(tenantAuthInfo, "/open-apis/contact/v3/users/batch", { params });
|
|
245
|
-
const items = (res?.data?.user_list ||
|
|
246
|
-
[]);
|
|
247
|
-
for (const user of items) {
|
|
248
|
-
if (user.open_id && user.name) {
|
|
249
|
-
nameMap.set(user.open_id, user.name);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
catch {
|
|
254
|
-
// skip batch errors
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
return nameMap;
|
|
258
|
-
}
|
|
259
18
|
export const meta = {
|
|
260
19
|
options: {
|
|
261
20
|
raw: { type: "boolean", default: false },
|
|
@@ -272,9 +31,9 @@ export async function read(args, globalOpts) {
|
|
|
272
31
|
}
|
|
273
32
|
const { authInfo } = await createClient(globalOpts);
|
|
274
33
|
const doc = await resolveDocument(authInfo, input);
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
34
|
+
const documentId = doc.objToken;
|
|
35
|
+
const docType = doc.objType;
|
|
36
|
+
const docTitle = doc.title;
|
|
278
37
|
if ((doc.parsed.type === "wiki" || doc.parsed.type === "unknown") &&
|
|
279
38
|
docType !== "docx" &&
|
|
280
39
|
doc.title !== undefined) {
|
|
@@ -287,7 +46,7 @@ export async function read(args, globalOpts) {
|
|
|
287
46
|
if (docType === "doc") {
|
|
288
47
|
throw new CliError("INVALID_ARGS", "不支持旧版 doc 格式,请在飞书中升级为 docx");
|
|
289
48
|
}
|
|
290
|
-
// Non-docx types (sheet, bitable, board, etc.)
|
|
49
|
+
// Non-docx types (sheet, bitable, board, etc.) -- output placeholder
|
|
291
50
|
if (docType !== "docx") {
|
|
292
51
|
process.stdout.write(`[${docType}: ${documentId}]\n`);
|
|
293
52
|
return;
|
|
@@ -304,7 +63,9 @@ export async function read(args, globalOpts) {
|
|
|
304
63
|
blocks = await fetchAllBlocks(authInfo, documentId);
|
|
305
64
|
}
|
|
306
65
|
catch (err) {
|
|
307
|
-
if (
|
|
66
|
+
if (err instanceof CliError &&
|
|
67
|
+
(err.errorType === "PERMISSION_DENIED" ||
|
|
68
|
+
err.errorType === "SCOPE_MISSING")) {
|
|
308
69
|
throw new CliError("PERMISSION_DENIED", "读取文档内容权限不足。可能原因:\n" +
|
|
309
70
|
" 1. 应用未在飞书开发者后台开通 docx:document 权限 → 请前往 https://open.feishu.cn/app 开通\n" +
|
|
310
71
|
" 2. 文档未对当前用户/应用开放访问 → 请联系文档拥有者授权\n" +
|
|
@@ -317,112 +78,14 @@ export async function read(args, globalOpts) {
|
|
|
317
78
|
process.stdout.write(JSON.stringify(blocks, null, 2) + "\n");
|
|
318
79
|
return;
|
|
319
80
|
}
|
|
320
|
-
// Default: convert to Markdown
|
|
321
|
-
|
|
322
|
-
const fileTokens = extractFileTokens(blocks);
|
|
323
|
-
let imageUrlMap = new Map();
|
|
324
|
-
let currentAuth = authInfo;
|
|
325
|
-
if (fileTokens.length > 0) {
|
|
326
|
-
try {
|
|
327
|
-
imageUrlMap = await batchGetTmpUrls(currentAuth, fileTokens);
|
|
328
|
-
}
|
|
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
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
// Batch resolve @mention user names
|
|
352
|
-
let userNameMap = new Map();
|
|
353
|
-
const mentionUserIds = extractMentionUserIds(blocks);
|
|
354
|
-
if (mentionUserIds.length > 0) {
|
|
355
|
-
try {
|
|
356
|
-
userNameMap = await resolveUserNames(currentAuth, mentionUserIds);
|
|
357
|
-
}
|
|
358
|
-
catch {
|
|
359
|
-
process.stderr.write("feishu-docs: warning: 解析 @用户 名称失败\n");
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
// Batch resolve bitable data
|
|
363
|
-
const bitableTokens = extractBitableTokens(blocks);
|
|
364
|
-
const bitableDataMap = new Map();
|
|
365
|
-
for (const token of bitableTokens) {
|
|
366
|
-
try {
|
|
367
|
-
const data = await fetchBitableData(currentAuth, token);
|
|
368
|
-
if (data)
|
|
369
|
-
bitableDataMap.set(token, data);
|
|
370
|
-
}
|
|
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
|
-
}
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
// Batch resolve board images
|
|
382
|
-
const boardTokens = extractBoardTokens(blocks);
|
|
383
|
-
const boardImageMap = new Map();
|
|
384
|
-
for (const token of boardTokens) {
|
|
385
|
-
try {
|
|
386
|
-
const filePath = await fetchBoardImage(currentAuth, token);
|
|
387
|
-
if (filePath)
|
|
388
|
-
boardImageMap.set(token, filePath);
|
|
389
|
-
}
|
|
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
|
-
}
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
// Batch resolve sheet data
|
|
401
|
-
const sheetTokens = extractSheetTokens(blocks);
|
|
402
|
-
const sheetDataMap = new Map();
|
|
403
|
-
for (const token of sheetTokens) {
|
|
404
|
-
try {
|
|
405
|
-
const data = await fetchSheetData(currentAuth, token);
|
|
406
|
-
if (data)
|
|
407
|
-
sheetDataMap.set(token, data);
|
|
408
|
-
}
|
|
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
|
-
}
|
|
418
|
-
}
|
|
419
|
-
}
|
|
81
|
+
// Default: convert to Markdown with enrichment
|
|
82
|
+
const enrichment = await enrichBlocks(authInfo, blocks, globalOpts);
|
|
420
83
|
// Add metadata header if requested
|
|
421
84
|
let output = "";
|
|
422
85
|
if (args.withMeta) {
|
|
423
86
|
let meta = {};
|
|
424
87
|
try {
|
|
425
|
-
meta = await getDocumentInfo(
|
|
88
|
+
meta = await getDocumentInfo(authInfo, documentId);
|
|
426
89
|
}
|
|
427
90
|
catch {
|
|
428
91
|
// ignore metadata fetch errors
|
|
@@ -436,11 +99,11 @@ export async function read(args, globalOpts) {
|
|
|
436
99
|
output += "---\n\n";
|
|
437
100
|
}
|
|
438
101
|
output += blocksToMarkdown(blocks, {
|
|
439
|
-
imageUrlMap,
|
|
440
|
-
userNameMap,
|
|
441
|
-
bitableDataMap,
|
|
442
|
-
boardImageMap,
|
|
443
|
-
sheetDataMap,
|
|
102
|
+
imageUrlMap: enrichment.imageUrlMap,
|
|
103
|
+
userNameMap: enrichment.userNameMap,
|
|
104
|
+
bitableDataMap: enrichment.bitableDataMap,
|
|
105
|
+
boardImageMap: enrichment.boardImageMap,
|
|
106
|
+
sheetDataMap: enrichment.sheetDataMap,
|
|
444
107
|
});
|
|
445
108
|
process.stdout.write(output);
|
|
446
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAShE;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,QAAkB,EAClB,UAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,aAAa,CAC7B,QAAQ,EACR,gCAAgC,kBAAkB,CAAC,UAAU,CAAC,cAAc,CAC7E,CAAC;IACF,OAAS,GAAG,EAAE,IAAgC,EAAE,OAAkB,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,QAAkB,EAClB,UAAoB;IAEpB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAE9C,MAAM,GAAG,GAAG,MAAM,aAAa,CAC7B,QAAQ,EACR,uDAAuD,EACvD,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CACxC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,IAAI,GAAG,GAAG,EAAE,IAA2C,CAAC;IAC9D,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,iBAAiB,IAAI,EAAE,CAE3C,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAe;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAe;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAe;IACzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IACE,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,KAAK;YACnC,KAAK,CAAC,KAAiC,EAAE,KAAK,EAC/C,CAAC;YACD,MAAM,CAAC,IAAI,CAAE,KAAK,CAAC,KAAgC,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAcD;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,QAAkB,EAClB,SAAiB;IAEjB,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4CAA4C,SAAS,IAAI,CAC1D,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAEzC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChD,aAAa,CACX,QAAQ,EACR,8BAA8B,kBAAkB,CAAC,QAAQ,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,SAAS,EACzG,EAAE,CACH;QACD,aAAa,CACX,QAAQ,EACR,8BAA8B,kBAAkB,CAAC,QAAQ,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAC1G,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAC/B;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,SAAS,CAAC,IAA2C,CAAC;IACzE,MAAM,WAAW,GAAG,UAAU,CAAC,IAA2C,CAAC;IAC3E,MAAM,MAAM,GACV,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CACzB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3B,MAAM,OAAO,GACX,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAC1B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,GAAG,GAAI,CAAC,CAAC,MAAkC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YACjD,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAC3B,QAAkB,EAClB,UAAkB;IAElB,0EAA0E;IAC1E,4EAA4E;IAC5E,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,gBAAgB,GACpB,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACtE,MAAM,eAAe,GACnB,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtE,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,QAAQ,EACR,qCAAqC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,EACpF,EAAE,CACH,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAA2C,CAAC;IACrE,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAkC,CAAC;IACzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,yDAAyD;IACzD,2EAA2E;IAC3E,MAAM,WAAW,GAAG,eAAe;QACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,eAAe,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;IACpC,oEAAoE;IACpE,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEnD,MAAM,SAAS,GAAG,MAAM,aAAa,CACnC,QAAQ,EACR,qCAAqC,kBAAkB,CAAC,gBAAgB,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,EAAE,EACjH,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAC9C,CAAC;IACF,MAAM,UAAU,GAAG,SAAS,CAAC,IAA2C,CAAC;IACzE,MAAM,IAAI,GAAG,CAAE,UAAU,EAAE,UAAsC,EAAE,MAAM;QACvE,EAAE,CAAgB,CAAC;IACrB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,qCAAqC;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,MAAM,GAAI,WAAW,CAAC,CAAC,CAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CACnB,CAAC;IACF,MAAM,OAAO,GAAG,WAAW;SACxB,KAAK,CAAC,CAAC,CAAC;SACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAE,GAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe,CAC5B,QAAkB,EAClB,UAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,mBAAmB,CACnC,QAAQ,EACR,mCAAmC,kBAAkB,CAAC,UAAU,CAAC,oBAAoB,CACtF,CAAC;IACF,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,UAAU,MAAM,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,MAAe;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,cAAc,GAAG;YACrB,KAAK,CAAC,IAAI,EAAE,QAAQ;YACpB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACxB,KAAK,CAAC,MAAM,EAAE,QAAQ;YACtB,KAAK,CAAC,OAAO,EAAE,QAAQ;YACvB,KAAK,CAAC,IAAI,EAAE,QAAQ;YACpB,KAAK,CAAC,KAAK,EAAE,QAAQ;SACtB,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;oBAC7B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC7B,QAAkB,EAClB,OAAiB;IAEjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,2FAA2F;IAC3F,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,aAAa,CAC9B,QAAQ,EACR,gCAAgC,EAChC,EAAE,CACH,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,EAAE,IAA2C,CAAC;YACnE,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAiB,EAAE,QAAQ,CAAC,IAAc,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2CAA2C;IAC3C,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAsC;gBAChD,YAAY,EAAE,SAAS;gBACvB,QAAQ,EAAE,KAAK;aAChB,CAAC;YACF,MAAM,cAAc,GAAa;gBAC/B,GAAG,QAAQ;gBACX,IAAI,EAAE,QAAiB;gBACvB,WAAW;aACZ,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,aAAa,CAC7B,cAAc,EACd,mCAAmC,EACnC,EAAE,MAAM,EAAE,CACX,CAAC;YACF,MAAM,KAAK,GAAG,CAAE,GAAG,EAAE,IAAgC,EAAE,SAAS;gBAC9D,EAAE,CAAkC,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAgB;IAC/B,OAAO,EAAE;QACP,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;QACxC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3C,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;KACjD;IACD,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,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,mDAAmD,CACpD,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC1B,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;IAEzB,IACE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC;QAC7D,OAAO,KAAK,MAAM;QAClB,GAAG,CAAC,KAAK,KAAK,SAAS,EACvB,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ;YAClB,CAAC,CAAC,IAAI,OAAO,KAAK,QAAQ,KAAK,UAAU,IAAI;YAC7C,CAAC,CAAC,IAAI,OAAO,KAAK,UAAU,GAAG,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAChB,cAAc,EACd,4BAA4B,CAC7B,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,UAAU,KAAK,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,oBAAoB;gBAClB,2EAA2E;gBAC3E,qCAAqC;gBACrC,6DAA6D,CAChE,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,iCAAiC;IACjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,0DAA0D;IAC1D,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,IAAI,WAAW,GAAG,QAAQ,CAAC;IAC3B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,MAAM,eAAe,CACtC,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,EACtC,UAAU,CACX,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;oBAC/D,WAAW,GAAG,SAAS,CAAC;oBACxB,IAAI,CAAC;wBACH,WAAW,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;oBAC/D,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,CAC5C,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kDAAkD,CACnD,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,CAC5C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,IAAI;gBAAE,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uCAAuC,KAAK,IAAI;oBAC9C,2EAA2E,CAC9E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qCAAqC,KAAK,IAAI,CAC/C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC3D,IAAI,QAAQ;gBAAE,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qCAAqC,KAAK,IAAI;oBAC5C,iFAAiF,CACpF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mCAAmC,KAAK,IAAI,CAC7C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqB,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,IAAI;gBAAE,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uCAAuC,KAAK,IAAI;oBAC9C,kFAAkF,CACrF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qCAAqC,KAAK,KAAK,GAAG,KAAK,CACxD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,IAAI,GAA4B,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QACD,MAAM,IAAI,OAAO,CAAC;QAClB,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,UAAU,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;QAC3E,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,aAAa,IAAI,CAAC,UAAU,IAAI,CAAC;QAChE,MAAM,IAAI,UAAU,UAAU,IAAI,CAAC;QACnC,MAAM,IAAI,SAAS,CAAC;IACtB,CAAC;IAED,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE;QACjC,WAAW;QACX,WAAW;QACX,cAAc;QACd,aAAa;QACb,YAAY;KACb,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/search.js
CHANGED
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { createClient, fetchWithAuth } from "../client.js";
|
|
6
6
|
import { CliError } from "../utils/errors.js";
|
|
7
|
-
import {
|
|
8
|
-
import { ensureScopes } from "../utils/scope-prompt.js";
|
|
7
|
+
import { withScopeRecovery } from "../utils/scope-prompt.js";
|
|
9
8
|
const DOC_TYPE_MAP = {
|
|
10
9
|
doc: "文档",
|
|
11
10
|
docx: "新文档",
|
|
@@ -29,62 +28,65 @@ export async function search(args, globalOpts) {
|
|
|
29
28
|
if (!query) {
|
|
30
29
|
throw new CliError("INVALID_ARGS", "缺少搜索关键词。用法: feishu-docs search <query> [--type <type>] [--limit <n>]");
|
|
31
30
|
}
|
|
32
|
-
const { authInfo: rawAuthInfo } = await createClient(globalOpts);
|
|
33
|
-
if (rawAuthInfo.mode === "tenant") {
|
|
34
|
-
throw new CliError("AUTH_REQUIRED", "search 命令需要 user 身份。tenant 模式下无搜索能力", {
|
|
35
|
-
recovery: "运行 feishu-docs login 切换到 user 身份,或设置 FEISHU_USER_TOKEN 环境变量",
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
const authInfo = await ensureScopes(rawAuthInfo, FEATURE_SCOPE_GROUPS.search.scopes, globalOpts);
|
|
39
31
|
const limit = args.limit ? Number(args.limit) : 20;
|
|
40
32
|
if (!Number.isInteger(limit) || limit < 1 || limit > 200) {
|
|
41
33
|
throw new CliError("INVALID_ARGS", "--limit 必须是 1-200 之间的整数");
|
|
42
34
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
35
|
+
// Search API (legacy) may return 99991679 without permission_violations.
|
|
36
|
+
// Provide fallback scope for interactive recovery.
|
|
37
|
+
return withScopeRecovery(async () => {
|
|
38
|
+
const { authInfo } = await createClient(globalOpts);
|
|
39
|
+
if (authInfo.mode === "tenant") {
|
|
40
|
+
throw new CliError("AUTH_REQUIRED", "search 命令需要 user 身份。tenant 模式下无搜索能力", {
|
|
41
|
+
recovery: "运行 feishu-docs login 切换到 user 身份,或设置 FEISHU_USER_TOKEN 环境变量",
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
const docType = args.type || undefined;
|
|
45
|
+
const results = [];
|
|
46
|
+
let offset = 0;
|
|
47
|
+
const pageSize = Math.min(limit, 50);
|
|
48
|
+
while (results.length < limit) {
|
|
49
|
+
const body = {
|
|
50
|
+
search_key: query,
|
|
51
|
+
count: pageSize,
|
|
52
|
+
offset,
|
|
53
|
+
};
|
|
54
|
+
if (docType)
|
|
55
|
+
body.docs_types = [docType];
|
|
56
|
+
const res = await fetchWithAuth(authInfo, "/open-apis/suite/docs-api/search/object", { method: "POST", body });
|
|
57
|
+
const resData = res?.data;
|
|
58
|
+
const items = (resData?.docs_entities || []);
|
|
59
|
+
results.push(...items);
|
|
60
|
+
if (!resData?.has_more || items.length === 0)
|
|
61
|
+
break;
|
|
62
|
+
offset += items.length;
|
|
63
|
+
}
|
|
64
|
+
const trimmed = results.slice(0, limit);
|
|
65
|
+
if (globalOpts.json) {
|
|
66
|
+
process.stdout.write(JSON.stringify({
|
|
67
|
+
success: true,
|
|
68
|
+
query,
|
|
69
|
+
count: trimmed.length,
|
|
70
|
+
items: trimmed.map((item) => ({
|
|
71
|
+
title: item.title,
|
|
72
|
+
token: item.docs_token,
|
|
73
|
+
obj_type: item.docs_type,
|
|
74
|
+
owner_id: item.owner_id,
|
|
75
|
+
})),
|
|
76
|
+
}, null, 2) + "\n");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (trimmed.length === 0) {
|
|
80
|
+
process.stdout.write(`没有找到与 "${query}" 相关的文档\n`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
process.stdout.write(`搜索 "${query}" — 找到 ${trimmed.length} 条结果\n\n`);
|
|
84
|
+
for (const item of trimmed) {
|
|
85
|
+
const title = item.title || "(无标题)";
|
|
86
|
+
const type = DOC_TYPE_MAP[item.docs_type] || item.docs_type || "unknown";
|
|
87
|
+
const token = item.docs_token || "";
|
|
88
|
+
process.stdout.write(` ${title} [${type}] ${token}\n`);
|
|
89
|
+
}
|
|
90
|
+
}, globalOpts, ["drive:drive.search:readonly"]);
|
|
89
91
|
}
|
|
90
92
|
//# sourceMappingURL=search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/share.d.ts
CHANGED