wechaty-puppet-matrix 0.0.54 → 0.0.56

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.
Files changed (76) hide show
  1. package/dist/cjs/src/engine-schema.d.ts +1 -0
  2. package/dist/cjs/src/engine-schema.d.ts.map +1 -1
  3. package/dist/cjs/src/matrix/messages/message-contact-card.d.ts +16 -0
  4. package/dist/cjs/src/matrix/messages/message-contact-card.d.ts.map +1 -0
  5. package/dist/cjs/src/matrix/messages/message-contact-card.js +25 -0
  6. package/dist/cjs/src/matrix/messages/message-emotion.d.ts +7 -0
  7. package/dist/cjs/src/matrix/messages/message-emotion.d.ts.map +1 -1
  8. package/dist/cjs/src/matrix/messages/message-emotion.js +20 -0
  9. package/dist/cjs/src/matrix/messages/message-image.d.ts +8 -0
  10. package/dist/cjs/src/matrix/messages/message-image.d.ts.map +1 -1
  11. package/dist/cjs/src/matrix/messages/message-image.js +38 -2
  12. package/dist/cjs/src/matrix/messages/message-image.spec.d.ts +3 -0
  13. package/dist/cjs/src/matrix/messages/message-image.spec.d.ts.map +1 -0
  14. package/dist/cjs/src/matrix/messages/message-image.spec.js +66 -0
  15. package/dist/cjs/src/matrix/messages/message-video.d.ts +6 -0
  16. package/dist/cjs/src/matrix/messages/message-video.d.ts.map +1 -1
  17. package/dist/cjs/src/matrix/messages/message-video.js +20 -0
  18. package/dist/cjs/src/matrix/messages/message-video.spec.d.ts +3 -0
  19. package/dist/cjs/src/matrix/messages/message-video.spec.d.ts.map +1 -0
  20. package/dist/cjs/src/matrix/messages/message-video.spec.js +27 -0
  21. package/dist/cjs/src/matrix/service/request.d.ts +21 -0
  22. package/dist/cjs/src/matrix/service/request.d.ts.map +1 -1
  23. package/dist/cjs/src/matrix/service/request.js +194 -32
  24. package/dist/cjs/src/matrix/utils/file-type.d.ts +4 -0
  25. package/dist/cjs/src/matrix/utils/file-type.d.ts.map +1 -0
  26. package/dist/cjs/src/matrix/utils/file-type.js +55 -0
  27. package/dist/cjs/src/matrix/utils/file-type.spec.d.ts +3 -0
  28. package/dist/cjs/src/matrix/utils/file-type.spec.d.ts.map +1 -0
  29. package/dist/cjs/src/matrix/utils/file-type.spec.js +25 -0
  30. package/dist/cjs/src/puppet-matrix.d.ts +3 -0
  31. package/dist/cjs/src/puppet-matrix.d.ts.map +1 -1
  32. package/dist/cjs/src/puppet-matrix.js +121 -33
  33. package/dist/esm/src/engine-schema.d.ts +1 -0
  34. package/dist/esm/src/engine-schema.d.ts.map +1 -1
  35. package/dist/esm/src/matrix/messages/message-contact-card.d.ts +16 -0
  36. package/dist/esm/src/matrix/messages/message-contact-card.d.ts.map +1 -0
  37. package/dist/esm/src/matrix/messages/message-contact-card.js +22 -0
  38. package/dist/esm/src/matrix/messages/message-emotion.d.ts +7 -0
  39. package/dist/esm/src/matrix/messages/message-emotion.d.ts.map +1 -1
  40. package/dist/esm/src/matrix/messages/message-emotion.js +19 -0
  41. package/dist/esm/src/matrix/messages/message-image.d.ts +8 -0
  42. package/dist/esm/src/matrix/messages/message-image.d.ts.map +1 -1
  43. package/dist/esm/src/matrix/messages/message-image.js +37 -2
  44. package/dist/esm/src/matrix/messages/message-image.spec.d.ts +3 -0
  45. package/dist/esm/src/matrix/messages/message-image.spec.d.ts.map +1 -0
  46. package/dist/esm/src/matrix/messages/message-image.spec.js +64 -0
  47. package/dist/esm/src/matrix/messages/message-video.d.ts +6 -0
  48. package/dist/esm/src/matrix/messages/message-video.d.ts.map +1 -1
  49. package/dist/esm/src/matrix/messages/message-video.js +19 -0
  50. package/dist/esm/src/matrix/messages/message-video.spec.d.ts +3 -0
  51. package/dist/esm/src/matrix/messages/message-video.spec.d.ts.map +1 -0
  52. package/dist/esm/src/matrix/messages/message-video.spec.js +25 -0
  53. package/dist/esm/src/matrix/service/request.d.ts +21 -0
  54. package/dist/esm/src/matrix/service/request.d.ts.map +1 -1
  55. package/dist/esm/src/matrix/service/request.js +193 -32
  56. package/dist/esm/src/matrix/utils/file-type.d.ts +4 -0
  57. package/dist/esm/src/matrix/utils/file-type.d.ts.map +1 -0
  58. package/dist/esm/src/matrix/utils/file-type.js +47 -0
  59. package/dist/esm/src/matrix/utils/file-type.spec.d.ts +3 -0
  60. package/dist/esm/src/matrix/utils/file-type.spec.d.ts.map +1 -0
  61. package/dist/esm/src/matrix/utils/file-type.spec.js +23 -0
  62. package/dist/esm/src/puppet-matrix.d.ts +3 -0
  63. package/dist/esm/src/puppet-matrix.d.ts.map +1 -1
  64. package/dist/esm/src/puppet-matrix.js +121 -33
  65. package/package.json +1 -1
  66. package/src/engine-schema.ts +1 -0
  67. package/src/matrix/messages/message-contact-card.ts +48 -0
  68. package/src/matrix/messages/message-emotion.ts +36 -0
  69. package/src/matrix/messages/message-image.spec.ts +107 -0
  70. package/src/matrix/messages/message-image.ts +63 -2
  71. package/src/matrix/messages/message-video.spec.ts +37 -0
  72. package/src/matrix/messages/message-video.ts +28 -1
  73. package/src/matrix/service/request.ts +274 -32
  74. package/src/matrix/utils/file-type.spec.ts +29 -0
  75. package/src/matrix/utils/file-type.ts +59 -0
  76. package/src/puppet-matrix.ts +150 -35
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.FriendshipType = exports.WechatMessageType = exports.NotifyTypeEnum = void 0;
40
+ exports.parseSizeMismatch = parseSizeMismatch;
40
41
  const axios_1 = __importDefault(require("axios"));
41
42
  const wechaty_puppet_1 = require("@juzi/wechaty-puppet");
42
43
  const events_1 = require("events");
@@ -136,6 +137,10 @@ var WechatMessageType;
136
137
  WechatMessageType[WechatMessageType["Sys"] = 10000] = "Sys";
137
138
  WechatMessageType[WechatMessageType["SysTemplate"] = 10002] = "SysTemplate";
138
139
  })(WechatMessageType || (exports.WechatMessageType = WechatMessageType = {}));
140
+ function parseSizeMismatch(errmsg) {
141
+ const match = typeof errmsg === 'string' ? errmsg.match(/size differs: expected \d+, got (\d+)/) : null;
142
+ return match && Number(match[1]) > 0 ? match[1] : undefined;
143
+ }
139
144
  var FriendshipType;
140
145
  (function (FriendshipType) {
141
146
  FriendshipType[FriendshipType["Unknown"] = 0] = "Unknown";
@@ -366,6 +371,12 @@ const genImageSnsXml = (wxid, contentDesc, mediaList, location) => {
366
371
  </TimelineObject>`;
367
372
  return xmlTemplate;
368
373
  };
374
+ function pickClientMsgId(res) {
375
+ const item = res?.list?.[0] || res;
376
+ const v = item?.clientMsgId ?? item?.client_msg_id ?? item?.clientMsgid;
377
+ const n = typeof v === 'string' ? parseInt(v, 10) : v;
378
+ return typeof n === 'number' && !isNaN(n) ? n : undefined;
379
+ }
369
380
  class Client extends events_1.EventEmitter {
370
381
  options;
371
382
  connectionStatus = { status: 'disconnected' };
@@ -1341,6 +1352,7 @@ class Client extends events_1.EventEmitter {
1341
1352
  });
1342
1353
  return {
1343
1354
  id: res?.list?.[0].newMsgId || '',
1355
+ clientMsgId: pickClientMsgId(res),
1344
1356
  timeStamp: res?.list?.[0].createTime || '',
1345
1357
  msgType: res?.list?.[0].type || '',
1346
1358
  talkerId: selfId || '',
@@ -1366,6 +1378,7 @@ class Client extends events_1.EventEmitter {
1366
1378
  });
1367
1379
  return {
1368
1380
  id: res?.list?.[0].newMsgId || '',
1381
+ clientMsgId: pickClientMsgId(res),
1369
1382
  timeStamp: res?.list?.[0].createTime || '',
1370
1383
  msgType: res?.list?.[0].type || '',
1371
1384
  talkerId: selfId || '',
@@ -1388,8 +1401,7 @@ class Client extends events_1.EventEmitter {
1388
1401
  },
1389
1402
  });
1390
1403
  }
1391
- async retryDownload(fn) {
1392
- const maxRetries = 5;
1404
+ async retryDownload(fn, maxRetries = 5) {
1393
1405
  const delayMs = 5000;
1394
1406
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
1395
1407
  try {
@@ -1398,6 +1410,9 @@ class Client extends events_1.EventEmitter {
1398
1410
  return res;
1399
1411
  }
1400
1412
  wechaty_puppet_1.log.warn(PRE, 'download attempt %d/%d failed (no url in response): %s', attempt, maxRetries, JSON.stringify(res));
1413
+ if (parseSizeMismatch(res?.errmsg)) {
1414
+ return res;
1415
+ }
1401
1416
  }
1402
1417
  catch (e) {
1403
1418
  wechaty_puppet_1.log.warn(PRE, 'download attempt %d/%d error: %s', attempt, maxRetries, e);
@@ -1408,21 +1423,51 @@ class Client extends events_1.EventEmitter {
1408
1423
  }
1409
1424
  return null;
1410
1425
  }
1426
+ async cdnDownloadWithFallback(label, baseParams, candidates) {
1427
+ const queue = [...candidates];
1428
+ const tried = new Set();
1429
+ const retriesPerCandidate = candidates.length > 1 ? 2 : 5;
1430
+ while (queue.length) {
1431
+ const candidate = queue.shift();
1432
+ const key = `${candidate.file_id}|${candidate.file_size}|${candidate.aes_key || ''}`;
1433
+ if (!candidate.file_id || tried.has(key)) {
1434
+ continue;
1435
+ }
1436
+ tried.add(key);
1437
+ const params = {
1438
+ ...baseParams,
1439
+ file_id: candidate.file_id,
1440
+ file_size: candidate.file_size,
1441
+ ...(candidate.aes_key ? { aes_key: candidate.aes_key } : {}),
1442
+ };
1443
+ const res = await this.retryDownload(() => this.postData({ path: '/cloud/cdn_download', data: params }), retriesPerCandidate);
1444
+ if (res?.url) {
1445
+ if (tried.size > 1) {
1446
+ wechaty_puppet_1.log.info(PRE, '%s succeeded with fallback, file_size: %s', label, candidate.file_size);
1447
+ }
1448
+ return encodeURI(res.url) || '';
1449
+ }
1450
+ const actualSize = parseSizeMismatch(res?.errmsg);
1451
+ if (actualSize) {
1452
+ wechaty_puppet_1.log.warn(PRE, '%s size mismatch (xml %s, actual %s), retry with actual size', label, candidate.file_size, actualSize);
1453
+ queue.unshift({ ...candidate, file_size: actualSize });
1454
+ continue;
1455
+ }
1456
+ wechaty_puppet_1.log.warn(PRE, '%s candidate failed, params: %s', label, JSON.stringify(params));
1457
+ }
1458
+ wechaty_puppet_1.log.error(PRE, '%s failed for all candidates: %s', label, JSON.stringify(candidates));
1459
+ return '';
1460
+ }
1411
1461
  async downloadImage(imageInfo) {
1412
- const params = {
1462
+ const candidates = imageInfo.candidates?.length
1463
+ ? imageInfo.candidates
1464
+ : [{ file_id: imageInfo.file_id, file_size: imageInfo.file_size || '' }];
1465
+ return this.cdnDownloadWithFallback('downloadImage', {
1413
1466
  log_response: true,
1414
1467
  file_type: 2,
1415
- file_id: imageInfo.file_id,
1416
1468
  aes_key: imageInfo.aes_key,
1417
- file_size: imageInfo.file_size,
1418
1469
  file_name: `/微信图片_${(0, date_fns_1.format)(new Date(), 'yyyyMMddHHmmss')}.png`,
1419
- };
1420
- const res = await this.retryDownload(() => this.postData({ path: '/cloud/cdn_download', data: params }));
1421
- if (res?.url) {
1422
- return encodeURI(res.url) || '';
1423
- }
1424
- wechaty_puppet_1.log.error(PRE, 'downloadImage failed after %d retries, params: %s', 5, JSON.stringify(params));
1425
- return '';
1470
+ }, candidates);
1426
1471
  }
1427
1472
  async downloadWWMedia(imageInfo, type) {
1428
1473
  const typeNameMap = {
@@ -1446,20 +1491,12 @@ class Client extends events_1.EventEmitter {
1446
1491
  return '';
1447
1492
  }
1448
1493
  async downloadFile(imageInfo) {
1449
- const params = {
1494
+ return this.cdnDownloadWithFallback('downloadFile', {
1450
1495
  log_response: true,
1451
1496
  file_type: 5,
1452
- file_id: imageInfo.file_id.replace('@cdn_', ''),
1453
1497
  aes_key: imageInfo.aes_key,
1454
- file_size: imageInfo.file_size,
1455
1498
  file_name: '/' + sanitizeFilename(imageInfo.file_name),
1456
- };
1457
- const res = await this.retryDownload(() => this.postData({ path: '/cloud/cdn_download', data: params }));
1458
- if (res?.url) {
1459
- return encodeURI(res.url) || '';
1460
- }
1461
- wechaty_puppet_1.log.error(PRE, 'downloadFile failed after %d retries, params: %s', 5, JSON.stringify(params));
1462
- return '';
1499
+ }, [{ file_id: imageInfo.file_id.replace('@cdn_', ''), file_size: imageInfo.file_size || '' }]);
1463
1500
  }
1464
1501
  async downloadAudio(msgId, voiceInfo, roomId) {
1465
1502
  const params = {
@@ -1537,19 +1574,14 @@ class Client extends events_1.EventEmitter {
1537
1574
  return '';
1538
1575
  }
1539
1576
  async downloadVideo(videoInfo) {
1540
- const params = {
1577
+ const candidates = videoInfo.candidates?.length
1578
+ ? videoInfo.candidates
1579
+ : [{ file_id: videoInfo.file_id, file_size: videoInfo.file_size }];
1580
+ return this.cdnDownloadWithFallback('downloadVideo', {
1541
1581
  file_type: 4,
1542
- file_id: videoInfo.file_id,
1543
1582
  aes_key: videoInfo.aes_key,
1544
- file_size: videoInfo.file_size,
1545
1583
  file_name: `/微信视频_${(0, date_fns_1.format)(new Date(), 'yyyyMMddHHmmss')}.mp4`,
1546
- };
1547
- const res = await this.retryDownload(() => this.postData({ path: '/cloud/cdn_download', data: params }));
1548
- if (res?.url) {
1549
- return encodeURI(res.url) || '';
1550
- }
1551
- wechaty_puppet_1.log.error(PRE, 'downloadVideo failed after %d retries, params: %s', 5, JSON.stringify(params));
1552
- return '';
1584
+ }, candidates);
1553
1585
  }
1554
1586
  async sendUrlImg(contactId, url, selfId) {
1555
1587
  try {
@@ -1571,6 +1603,7 @@ class Client extends events_1.EventEmitter {
1571
1603
  });
1572
1604
  return {
1573
1605
  id: res?.newMsgId || '',
1606
+ clientMsgId: pickClientMsgId(res),
1574
1607
  timeStamp: res?.createTime || '',
1575
1608
  msgType: WechatMessageType.Image,
1576
1609
  talkerId: selfId || '',
@@ -1604,6 +1637,7 @@ class Client extends events_1.EventEmitter {
1604
1637
  });
1605
1638
  return {
1606
1639
  id: res?.newMsgId || '',
1640
+ clientMsgId: pickClientMsgId(res),
1607
1641
  timeStamp: res?.createTime || (0, date_fns_1.getUnixTime)(new Date()),
1608
1642
  msgType: WechatMessageType.Video,
1609
1643
  talkerId: selfId || '',
@@ -1635,6 +1669,7 @@ class Client extends events_1.EventEmitter {
1635
1669
  });
1636
1670
  return {
1637
1671
  id: res?.newMsgId || '',
1672
+ clientMsgId: pickClientMsgId(res),
1638
1673
  timeStamp: res?.createTime || '',
1639
1674
  msgType: WechatMessageType.File,
1640
1675
  talkerId: selfId || '',
@@ -1662,6 +1697,7 @@ class Client extends events_1.EventEmitter {
1662
1697
  });
1663
1698
  return {
1664
1699
  id: res?.newMsgId || '',
1700
+ clientMsgId: pickClientMsgId(res),
1665
1701
  timeStamp: res?.createTime || '',
1666
1702
  msgType: WechatMessageType.Text,
1667
1703
  talkerId: selfId || '',
@@ -1698,6 +1734,7 @@ class Client extends events_1.EventEmitter {
1698
1734
  });
1699
1735
  return {
1700
1736
  id: res?.newMsgId || '',
1737
+ clientMsgId: pickClientMsgId(res),
1701
1738
  timeStamp: res?.createTime || '',
1702
1739
  msgType: WechatMessageType.MiniProgram,
1703
1740
  talkerId: selfId || '',
@@ -1724,6 +1761,7 @@ class Client extends events_1.EventEmitter {
1724
1761
  });
1725
1762
  return {
1726
1763
  id: res?.newMsgId || '',
1764
+ clientMsgId: pickClientMsgId(res),
1727
1765
  timeStamp: res?.createTime || '',
1728
1766
  msgType: WechatMessageType.App,
1729
1767
  talkerId: selfId || '',
@@ -1878,6 +1916,7 @@ class Client extends events_1.EventEmitter {
1878
1916
  });
1879
1917
  return {
1880
1918
  id: res?.newMsgId || '',
1919
+ clientMsgId: pickClientMsgId(res),
1881
1920
  timeStamp: res?.createTime || '',
1882
1921
  msgType: WechatMessageType.App,
1883
1922
  talkerId: selfId || '',
@@ -1891,6 +1930,129 @@ class Client extends events_1.EventEmitter {
1891
1930
  wechaty_puppet_1.log.error(PRE, 'sendContactCard(%s, %s): %s', contactId, xml, error);
1892
1931
  }
1893
1932
  }
1933
+ async sendContact({ toId, shareId, shareNickname, shareHeadImg, }, selfId) {
1934
+ try {
1935
+ const res = await this.postData({
1936
+ path: '/msg/send_share_card',
1937
+ data: {
1938
+ to_username: toId,
1939
+ share_username: shareId,
1940
+ share_nickname: shareNickname || '',
1941
+ share_head_img: shareHeadImg || '',
1942
+ },
1943
+ });
1944
+ return {
1945
+ id: res?.newMsgId || '',
1946
+ clientMsgId: pickClientMsgId(res),
1947
+ timeStamp: res?.createTime || '',
1948
+ msgType: WechatMessageType.ShareCard,
1949
+ talkerId: selfId || '',
1950
+ text: shareId,
1951
+ msg: shareId,
1952
+ fromWxid: (0, is_type_js_1.isRoomId)(toId) ? toId : '',
1953
+ listenerId: toId,
1954
+ };
1955
+ }
1956
+ catch (error) {
1957
+ wechaty_puppet_1.log.error(PRE, 'sendContact(%s, %s): %s', toId, shareId, error);
1958
+ }
1959
+ }
1960
+ async sendEmojiMd5(toId, md5, size, selfId) {
1961
+ try {
1962
+ const res = await this.postData({
1963
+ path: '/msg/send_emoji_md5',
1964
+ data: {
1965
+ to_username: toId,
1966
+ file_md5: md5,
1967
+ file_size: size,
1968
+ },
1969
+ });
1970
+ wechaty_puppet_1.log.verbose(PRE, 'sendEmojiMd5 res: %s', JSON.stringify(res));
1971
+ return this.emojiResult(res, toId, md5, selfId);
1972
+ }
1973
+ catch (error) {
1974
+ wechaty_puppet_1.log.error(PRE, 'sendEmojiMd5(%s, %s): %s', toId, md5, error);
1975
+ }
1976
+ }
1977
+ async sendEmojiUrl(toId, url, selfId) {
1978
+ try {
1979
+ const res = await this.postData({
1980
+ path: '/msg/send_emoji_url',
1981
+ data: {
1982
+ to_username: toId,
1983
+ url,
1984
+ },
1985
+ });
1986
+ wechaty_puppet_1.log.verbose(PRE, 'sendEmojiUrl res: %s', JSON.stringify(res));
1987
+ return this.emojiResult(res, toId, url, selfId);
1988
+ }
1989
+ catch (error) {
1990
+ wechaty_puppet_1.log.error(PRE, 'sendEmojiUrl(%s, %s): %s', toId, url, error);
1991
+ }
1992
+ }
1993
+ emojiResult(res, toId, text, selfId) {
1994
+ const item = res?.emojiItem?.[0] || res?.list?.[0] || res;
1995
+ const id = item?.newMsgId || item?.msgId;
1996
+ if (!id || (item?.ret !== undefined && item.ret !== 0)) {
1997
+ wechaty_puppet_1.log.warn(PRE, 'send emoji failed: %s', JSON.stringify(res));
1998
+ return;
1999
+ }
2000
+ return {
2001
+ clientMsgId: pickClientMsgId(item),
2002
+ fromWxid: (0, is_type_js_1.isRoomId)(toId) ? toId : '',
2003
+ id: String(id),
2004
+ listenerId: toId,
2005
+ msg: text,
2006
+ msgType: WechatMessageType.Emoticon,
2007
+ talkerId: selfId || '',
2008
+ text,
2009
+ timeStamp: item?.createTime || '',
2010
+ };
2011
+ }
2012
+ async sendPat(toId, pattedId) {
2013
+ try {
2014
+ const res = await this.postData({
2015
+ path: '/msg/send_pat',
2016
+ data: {
2017
+ to_username: toId,
2018
+ patted_username: pattedId,
2019
+ },
2020
+ });
2021
+ wechaty_puppet_1.log.verbose(PRE, 'sendPat res: %s', JSON.stringify(res));
2022
+ if (!res || res.errcode || (res.baseResponse?.ret !== undefined && res.baseResponse.ret !== 0)) {
2023
+ wechaty_puppet_1.log.warn(PRE, 'sendPat(%s, %s) failed: %s', toId, pattedId, JSON.stringify(res));
2024
+ return false;
2025
+ }
2026
+ return true;
2027
+ }
2028
+ catch (error) {
2029
+ wechaty_puppet_1.log.error(PRE, 'sendPat(%s, %s): %s', toId, pattedId, error);
2030
+ return false;
2031
+ }
2032
+ }
2033
+ async revokeMsg(toId, msgId, clientMsgId) {
2034
+ try {
2035
+ const res = await this.postData({
2036
+ path: '/msg/revoke_msg',
2037
+ data: {
2038
+ to_username: toId,
2039
+ msg_id: msgId,
2040
+ client_msg_id: clientMsgId || 0,
2041
+ },
2042
+ });
2043
+ wechaty_puppet_1.log.verbose(PRE, 'revokeMsg res: %s', JSON.stringify(res));
2044
+ const ret = res?.baseResponse?.ret;
2045
+ if (ret !== undefined && ret !== 0) {
2046
+ wechaty_puppet_1.log.warn(PRE, 'revokeMsg(%s, %s) failed: %s', toId, msgId, JSON.stringify(res?.baseResponse));
2047
+ return false;
2048
+ }
2049
+ return !!res;
2050
+ }
2051
+ catch (error) {
2052
+ wechaty_puppet_1.log.error(PRE, 'revokeMsg(%s, %s): %s', toId, msgId, error);
2053
+ return false;
2054
+ }
2055
+ }
1894
2056
  async sendAnnouncement(roomId, content) {
1895
2057
  try {
1896
2058
  const res = await this.postData({
@@ -0,0 +1,4 @@
1
+ export declare function detectImageExt(head: Buffer): string | undefined;
2
+ export declare function fetchRemoteHead(url: string, bytes?: number, timeoutMs?: number): Promise<Buffer | undefined>;
3
+ export declare function replaceExt(fileName: string, ext: string): string;
4
+ //# sourceMappingURL=file-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-type.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/utils/file-type.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0BhE;AAKD,wBAAsB,eAAe,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAa7G;AAKD,wBAAgB,UAAU,CAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIjE"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectImageExt = detectImageExt;
7
+ exports.fetchRemoteHead = fetchRemoteHead;
8
+ exports.replaceExt = replaceExt;
9
+ const axios_1 = __importDefault(require("axios"));
10
+ function detectImageExt(head) {
11
+ if (head.length >= 3 && head[0] === 0xff && head[1] === 0xd8 && head[2] === 0xff) {
12
+ return 'jpg';
13
+ }
14
+ if (head.length >= 8 && head.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))) {
15
+ return 'png';
16
+ }
17
+ if (head.length >= 6 && ['GIF87a', 'GIF89a'].includes(head.subarray(0, 6).toString('ascii'))) {
18
+ return 'gif';
19
+ }
20
+ if (head.length >= 12 && head.subarray(0, 4).toString('ascii') === 'RIFF' && head.subarray(8, 12).toString('ascii') === 'WEBP') {
21
+ return 'webp';
22
+ }
23
+ if (head.length >= 2 && head[0] === 0x42 && head[1] === 0x4d) {
24
+ return 'bmp';
25
+ }
26
+ if (head.length >= 12 && head.subarray(4, 8).toString('ascii') === 'ftyp') {
27
+ const brand = head.subarray(8, 12).toString('ascii');
28
+ if (['heic', 'heix', 'hevc', 'hevx', 'mif1', 'msf1'].includes(brand)) {
29
+ return 'heic';
30
+ }
31
+ if (['avif', 'avis'].includes(brand)) {
32
+ return 'avif';
33
+ }
34
+ }
35
+ return undefined;
36
+ }
37
+ async function fetchRemoteHead(url, bytes = 32, timeoutMs = 5000) {
38
+ try {
39
+ const res = await axios_1.default.get(url, {
40
+ headers: { Range: `bytes=0-${bytes - 1}` },
41
+ responseType: 'arraybuffer',
42
+ timeout: timeoutMs,
43
+ maxContentLength: 50 * 1024 * 1024,
44
+ });
45
+ return Buffer.from(res.data).subarray(0, bytes);
46
+ }
47
+ catch {
48
+ return undefined;
49
+ }
50
+ }
51
+ function replaceExt(fileName, ext) {
52
+ const dot = fileName.lastIndexOf('.');
53
+ const base = dot > 0 ? fileName.slice(0, dot) : fileName;
54
+ return `${base}.${ext}`;
55
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node -r ts-node/register
2
+ export {};
3
+ //# sourceMappingURL=file-type.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-type.spec.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/utils/file-type.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env -S node -r ts-node/register
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const tstest_1 = require("tstest");
5
+ const file_type_js_1 = require("./file-type.js");
6
+ const hex = (s) => Buffer.from(s, 'hex');
7
+ (0, tstest_1.test)('detectImageExt recognizes common image headers', async (t) => {
8
+ t.equal((0, file_type_js_1.detectImageExt)(hex('ffd8fffe00104c61766335392e33372e')), 'jpg', 'jpeg');
9
+ t.equal((0, file_type_js_1.detectImageExt)(hex('89504e470d0a1a0a0000000d49484452')), 'png', 'png');
10
+ t.equal((0, file_type_js_1.detectImageExt)(Buffer.from('GIF89a......')), 'gif', 'gif');
11
+ t.equal((0, file_type_js_1.detectImageExt)(Buffer.concat([Buffer.from('RIFF'), hex('00000000'), Buffer.from('WEBPVP8 ')])), 'webp', 'webp');
12
+ t.equal((0, file_type_js_1.detectImageExt)(hex('424d000000000000')), 'bmp', 'bmp');
13
+ t.equal((0, file_type_js_1.detectImageExt)(Buffer.concat([hex('00000018'), Buffer.from('ftypheic'), hex('00000000')])), 'heic', 'heic');
14
+ t.equal((0, file_type_js_1.detectImageExt)(Buffer.concat([hex('0000001c'), Buffer.from('ftypavif'), hex('00000000')])), 'avif', 'avif');
15
+ });
16
+ (0, tstest_1.test)('detectImageExt returns undefined for unknown or short data', async (t) => {
17
+ t.equal((0, file_type_js_1.detectImageExt)(hex('0000001c667479706d703432')), undefined, 'mp4 is not an image');
18
+ t.equal((0, file_type_js_1.detectImageExt)(Buffer.from('<html>')), undefined, 'html');
19
+ t.equal((0, file_type_js_1.detectImageExt)(Buffer.alloc(0)), undefined, 'empty');
20
+ });
21
+ (0, tstest_1.test)('replaceExt replaces or appends extension', async (t) => {
22
+ t.equal((0, file_type_js_1.replaceExt)('微信图片_20261105234022.png', 'jpg'), '微信图片_20261105234022.jpg', 'replace');
23
+ t.equal((0, file_type_js_1.replaceExt)('image', 'gif'), 'image.gif', 'append');
24
+ t.equal((0, file_type_js_1.replaceExt)('.hidden', 'jpg'), '.hidden.jpg', 'dotfile');
25
+ });
@@ -62,6 +62,7 @@ declare class PuppetMatrix extends PUPPET.Puppet {
62
62
  private _friendshipSearch;
63
63
  private _findRoomIdForWxid;
64
64
  messageContact(messageId: string): Promise<string>;
65
+ private _findFriendByCard;
65
66
  messageChannel(messageId: string): Promise<PUPPET.payloads.Channel>;
66
67
  messageFile(messageId: string): Promise<FileBoxInterface>;
67
68
  messageImage(messageId: string): Promise<FileBoxInterface>;
@@ -76,6 +77,7 @@ declare class PuppetMatrix extends PUPPET.Puppet {
76
77
  messageSendText(conversationId: string, text: string, mentionIdList?: string[]): Promise<string | void>;
77
78
  messageSendUrl(conversationId: string, urlLinkPayload: PUPPET.payloads.UrlLink): Promise<string | void>;
78
79
  messageSendPost(conversationId: string, postPayload: PUPPET.payloads.Post): Promise<void>;
80
+ sendPat(conversationId: string, contactId?: string): Promise<boolean>;
79
81
  messageRecall(messageId: string): Promise<boolean>;
80
82
  messageForward(toUserName: string, messageId: string): Promise<void>;
81
83
  roomAdd(roomId: string, contactId: string): Promise<void>;
@@ -126,6 +128,7 @@ declare class PuppetMatrix extends PUPPET.Puppet {
126
128
  private _stopPuppetHeart;
127
129
  private _fileBoxFromUrl;
128
130
  private _getMessageImageFileBox;
131
+ private _imageNameByHead;
129
132
  private _getMessageAudioFileBox;
130
133
  private _getMessageVideoFileBox;
131
134
  private _getMessageFileFileBox;
@@ -1 +1 @@
1
- {"version":3,"file":"puppet-matrix.d.ts","sourceRoot":"","sources":["../../../src/puppet-matrix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"puppet-matrix.d.ts","sourceRoot":"","sources":["../../../src/puppet-matrix.ts"],"names":[],"mappings":"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"}