forked from bai/curriculum-project-hub
fix: let agents download Feishu message resources
This commit is contained in:
+10
-10
@@ -6,7 +6,7 @@
|
||||
* reactions, file download/upload, and the card action callback.
|
||||
*/
|
||||
import * as lark from "@larksuiteoapi/node-sdk";
|
||||
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
||||
import { readFile, mkdir } from "node:fs/promises";
|
||||
import { dirname } from "node:path";
|
||||
import type { FastifyBaseLogger } from "fastify";
|
||||
import { DEFAULT_MAX_MESSAGE_LENGTH, splitAtBoundary } from "./textStream.js";
|
||||
@@ -487,20 +487,20 @@ export async function downloadMessageFile(
|
||||
messageId: string,
|
||||
fileKey: string,
|
||||
savePath: string,
|
||||
resourceType: "image" | "file",
|
||||
): Promise<void> {
|
||||
await mkdir(dirname(savePath), { recursive: true });
|
||||
try {
|
||||
const res = await withRetry(async () => {
|
||||
return rt.client.request({
|
||||
method: "GET",
|
||||
url: `/open-apis/im/v1/messages/${messageId}/resources/${fileKey}`,
|
||||
params: { type: "file" },
|
||||
responseType: "arraybuffer",
|
||||
}) as Promise<{ data: Buffer }>;
|
||||
await withRetry(async () => {
|
||||
const resource = await rt.client.im.v1.messageResource.get({
|
||||
params: { type: resourceType },
|
||||
path: { message_id: messageId, file_key: fileKey },
|
||||
});
|
||||
await resource.writeFile(savePath);
|
||||
});
|
||||
await writeFile(savePath, res.data);
|
||||
} catch (e) {
|
||||
rt.logger.warn({ messageId, fileKey, err: e instanceof Error ? e.message : String(e) }, "downloadMessageFile failed");
|
||||
rt.logger.error({ err: e, messageId, fileKey, resourceType, savePath }, "downloadMessageFile failed");
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user