@wu529778790/open-im 1.11.4-beta.18 → 1.11.4-beta.19
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/dist/clawbot/client.js +27 -18
- package/package.json +1 -1
package/dist/clawbot/client.js
CHANGED
|
@@ -262,39 +262,48 @@ async function extractImages(msg) {
|
|
|
262
262
|
log.warn('Image item missing full_url/cdn_url');
|
|
263
263
|
continue;
|
|
264
264
|
}
|
|
265
|
-
// AES key: aeskey 字段是 32 字符 hex(16 字节),需要直接用作 AES-128-CBC key
|
|
266
|
-
const aesKeyHex = imageItem?.aeskey;
|
|
267
265
|
try {
|
|
268
|
-
//
|
|
266
|
+
// 直接从 full_url 下载图片(CDN 返回的是已解密的图片数据)
|
|
269
267
|
const response = await fetch(imageUrl, { signal: AbortSignal.timeout(30_000) });
|
|
270
268
|
if (!response.ok) {
|
|
271
269
|
log.warn(`Image download failed: HTTP ${response.status}`);
|
|
272
270
|
continue;
|
|
273
271
|
}
|
|
274
272
|
const buffer = Buffer.from(await response.arrayBuffer());
|
|
275
|
-
//
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
catch {
|
|
285
|
-
log.info('AES-128 decryption failed, using raw image data');
|
|
286
|
-
decrypted = buffer;
|
|
287
|
-
}
|
|
273
|
+
// 检查是否是有效图片
|
|
274
|
+
const first4 = buffer.subarray(0, 4).toString('hex');
|
|
275
|
+
const isJpeg = first4 === 'ffd8ffe0' || first4 === 'ffd8ffe1';
|
|
276
|
+
const isPng = first4 === '89504e47';
|
|
277
|
+
let finalBuffer;
|
|
278
|
+
if (isJpeg || isPng) {
|
|
279
|
+
// CDN 返回的是有效图片,直接使用
|
|
280
|
+
finalBuffer = buffer;
|
|
288
281
|
}
|
|
289
282
|
else {
|
|
290
|
-
|
|
283
|
+
// CDN 返回的是加密数据,尝试解密
|
|
284
|
+
const aesKeyHex = imageItem?.aeskey;
|
|
285
|
+
if (aesKeyHex && aesKeyHex.length === 32) {
|
|
286
|
+
try {
|
|
287
|
+
const keyBuf = Buffer.from(aesKeyHex, 'hex');
|
|
288
|
+
const iv = keyBuf.subarray(0, 16);
|
|
289
|
+
const decipher = createDecipheriv('aes-128-cbc', keyBuf, iv);
|
|
290
|
+
finalBuffer = Buffer.concat([decipher.update(buffer), decipher.final()]);
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
log.info('AES decryption failed, using raw image data');
|
|
294
|
+
finalBuffer = buffer;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
finalBuffer = buffer;
|
|
299
|
+
}
|
|
291
300
|
}
|
|
292
301
|
// Save to disk
|
|
293
302
|
const targetPath = createMediaTargetPath('.jpg', `clawbot-${Date.now()}`);
|
|
294
303
|
const { writeFile } = await import('node:fs/promises');
|
|
295
304
|
const { mkdir } = await import('node:fs/promises');
|
|
296
305
|
await mkdir('/tmp/t/open-im-images', { recursive: true });
|
|
297
|
-
await writeFile(targetPath,
|
|
306
|
+
await writeFile(targetPath, finalBuffer);
|
|
298
307
|
paths.push(targetPath);
|
|
299
308
|
log.info(`ClawBot image saved: ${targetPath}`);
|
|
300
309
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wu529778790/open-im",
|
|
3
|
-
"version": "1.11.4-beta.
|
|
3
|
+
"version": "1.11.4-beta.19",
|
|
4
4
|
"description": "Your AI coding assistant, in every chat app. Multi-platform IM bridge for Claude Code, Codex, and CodeBuddy.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|