wechaty-puppet-matrix 0.0.54 → 0.0.55

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 (57) hide show
  1. package/dist/cjs/src/matrix/messages/message-image.d.ts +8 -0
  2. package/dist/cjs/src/matrix/messages/message-image.d.ts.map +1 -1
  3. package/dist/cjs/src/matrix/messages/message-image.js +38 -2
  4. package/dist/cjs/src/matrix/messages/message-image.spec.d.ts +3 -0
  5. package/dist/cjs/src/matrix/messages/message-image.spec.d.ts.map +1 -0
  6. package/dist/cjs/src/matrix/messages/message-image.spec.js +66 -0
  7. package/dist/cjs/src/matrix/messages/message-video.d.ts +6 -0
  8. package/dist/cjs/src/matrix/messages/message-video.d.ts.map +1 -1
  9. package/dist/cjs/src/matrix/messages/message-video.js +20 -0
  10. package/dist/cjs/src/matrix/messages/message-video.spec.d.ts +3 -0
  11. package/dist/cjs/src/matrix/messages/message-video.spec.d.ts.map +1 -0
  12. package/dist/cjs/src/matrix/messages/message-video.spec.js +27 -0
  13. package/dist/cjs/src/matrix/service/request.d.ts +9 -0
  14. package/dist/cjs/src/matrix/service/request.d.ts.map +1 -1
  15. package/dist/cjs/src/matrix/service/request.js +56 -32
  16. package/dist/cjs/src/matrix/utils/file-type.d.ts +4 -0
  17. package/dist/cjs/src/matrix/utils/file-type.d.ts.map +1 -0
  18. package/dist/cjs/src/matrix/utils/file-type.js +55 -0
  19. package/dist/cjs/src/matrix/utils/file-type.spec.d.ts +3 -0
  20. package/dist/cjs/src/matrix/utils/file-type.spec.d.ts.map +1 -0
  21. package/dist/cjs/src/matrix/utils/file-type.spec.js +25 -0
  22. package/dist/cjs/src/puppet-matrix.d.ts +1 -0
  23. package/dist/cjs/src/puppet-matrix.d.ts.map +1 -1
  24. package/dist/cjs/src/puppet-matrix.js +16 -1
  25. package/dist/esm/src/matrix/messages/message-image.d.ts +8 -0
  26. package/dist/esm/src/matrix/messages/message-image.d.ts.map +1 -1
  27. package/dist/esm/src/matrix/messages/message-image.js +37 -2
  28. package/dist/esm/src/matrix/messages/message-image.spec.d.ts +3 -0
  29. package/dist/esm/src/matrix/messages/message-image.spec.d.ts.map +1 -0
  30. package/dist/esm/src/matrix/messages/message-image.spec.js +64 -0
  31. package/dist/esm/src/matrix/messages/message-video.d.ts +6 -0
  32. package/dist/esm/src/matrix/messages/message-video.d.ts.map +1 -1
  33. package/dist/esm/src/matrix/messages/message-video.js +19 -0
  34. package/dist/esm/src/matrix/messages/message-video.spec.d.ts +3 -0
  35. package/dist/esm/src/matrix/messages/message-video.spec.d.ts.map +1 -0
  36. package/dist/esm/src/matrix/messages/message-video.spec.js +25 -0
  37. package/dist/esm/src/matrix/service/request.d.ts +9 -0
  38. package/dist/esm/src/matrix/service/request.d.ts.map +1 -1
  39. package/dist/esm/src/matrix/service/request.js +55 -32
  40. package/dist/esm/src/matrix/utils/file-type.d.ts +4 -0
  41. package/dist/esm/src/matrix/utils/file-type.d.ts.map +1 -0
  42. package/dist/esm/src/matrix/utils/file-type.js +47 -0
  43. package/dist/esm/src/matrix/utils/file-type.spec.d.ts +3 -0
  44. package/dist/esm/src/matrix/utils/file-type.spec.d.ts.map +1 -0
  45. package/dist/esm/src/matrix/utils/file-type.spec.js +23 -0
  46. package/dist/esm/src/puppet-matrix.d.ts +1 -0
  47. package/dist/esm/src/puppet-matrix.d.ts.map +1 -1
  48. package/dist/esm/src/puppet-matrix.js +16 -1
  49. package/package.json +1 -1
  50. package/src/matrix/messages/message-image.spec.ts +107 -0
  51. package/src/matrix/messages/message-image.ts +63 -2
  52. package/src/matrix/messages/message-video.spec.ts +37 -0
  53. package/src/matrix/messages/message-video.ts +28 -1
  54. package/src/matrix/service/request.ts +85 -32
  55. package/src/matrix/utils/file-type.spec.ts +29 -0
  56. package/src/matrix/utils/file-type.ts +59 -0
  57. package/src/puppet-matrix.ts +20 -1
@@ -18,6 +18,8 @@ export interface ImageXmlSchema {
18
18
  length: string;
19
19
  cdnbigimgurl: string;
20
20
  hdlength: string;
21
+ hevc_mid_size?: string;
22
+ cdnmidimgurl_size?: string;
21
23
  md5: string;
22
24
  tpurl?: string;
23
25
  tpauthkey?: string;
@@ -25,6 +27,10 @@ export interface ImageXmlSchema {
25
27
  };
26
28
  };
27
29
  }
30
+ export interface ImageFileCandidate {
31
+ file_id: string;
32
+ file_size: string;
33
+ }
28
34
  export interface ImageMessagePayload {
29
35
  aes_key: string;
30
36
  auth_key: string;
@@ -32,6 +38,8 @@ export interface ImageMessagePayload {
32
38
  file_size: string;
33
39
  file_name: string;
34
40
  is_ww: boolean;
41
+ candidates?: ImageFileCandidate[];
35
42
  }
36
43
  export declare function parseImageMessagePayload(rawPayload: MessagePayload): Promise<ImageMessagePayload>;
44
+ export declare function buildImageCandidates(schema: ImageXmlSchema['msg']['img']['$']): ImageFileCandidate[];
37
45
  //# sourceMappingURL=message-image.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-image.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE;QACD,GAAG,EAAE;YACD,CAAC,EAAE;gBACC,MAAM,EAAE,MAAM,CAAA;gBACd,QAAQ,EAAE,MAAM,CAAA;gBAChB,cAAc,EAAE,MAAM,CAAA;gBACtB,WAAW,EAAE,MAAM,CAAA;gBACnB,cAAc,EAAE,MAAM,CAAA;gBACtB,cAAc,EAAE,MAAM,CAAA;gBACtB,aAAa,EAAE,MAAM,CAAA;gBACrB,YAAY,EAAE,MAAM,CAAA;gBACpB,WAAW,EAAE,MAAM,CAAA;gBACnB,WAAW,EAAE,MAAM,CAAA;gBACnB,UAAU,EAAE,MAAM,CAAA;gBAClB,YAAY,EAAE,MAAM,CAAA;gBACpB,MAAM,EAAE,MAAM,CAAA;gBACd,YAAY,EAAE,MAAM,CAAA;gBACpB,QAAQ,EAAE,MAAM,CAAA;gBAChB,GAAG,EAAE,MAAM,CAAA;gBACX,KAAK,CAAC,EAAE,MAAM,CAAA;gBACd,SAAS,CAAC,EAAE,MAAM,CAAA;aACrB,CAAA;SACJ,CAAA;KACJ,CAAA;CACJ;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,wBAAwB,CAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAYxG"}
1
+ {"version":3,"file":"message-image.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE;QACD,GAAG,EAAE;YACD,CAAC,EAAE;gBACC,MAAM,EAAE,MAAM,CAAA;gBACd,QAAQ,EAAE,MAAM,CAAA;gBAChB,cAAc,EAAE,MAAM,CAAA;gBACtB,WAAW,EAAE,MAAM,CAAA;gBACnB,cAAc,EAAE,MAAM,CAAA;gBACtB,cAAc,EAAE,MAAM,CAAA;gBACtB,aAAa,EAAE,MAAM,CAAA;gBACrB,YAAY,EAAE,MAAM,CAAA;gBACpB,WAAW,EAAE,MAAM,CAAA;gBACnB,WAAW,EAAE,MAAM,CAAA;gBACnB,UAAU,EAAE,MAAM,CAAA;gBAClB,YAAY,EAAE,MAAM,CAAA;gBACpB,MAAM,EAAE,MAAM,CAAA;gBACd,YAAY,EAAE,MAAM,CAAA;gBACpB,QAAQ,EAAE,MAAM,CAAA;gBAEhB,aAAa,CAAC,EAAE,MAAM,CAAA;gBACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;gBAC1B,GAAG,EAAE,MAAM,CAAA;gBACX,KAAK,CAAC,EAAE,MAAM,CAAA;gBACd,SAAS,CAAC,EAAE,MAAM,CAAA;aACrB,CAAA;SACJ,CAAA;KACJ,CAAA;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IAKf,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAED,wBAAsB,wBAAwB,CAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgBxG;AAYD,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,kBAAkB,EAAE,CAgCrG"}
@@ -1,16 +1,52 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseImageMessagePayload = parseImageMessagePayload;
4
+ exports.buildImageCandidates = buildImageCandidates;
4
5
  const xml_to_json_js_1 = require("../utils/xml-to-json.js");
5
6
  async function parseImageMessagePayload(rawPayload) {
6
7
  const imageXml = await (0, xml_to_json_js_1.xmlToJson)(rawPayload.msg);
7
8
  const schema = imageXml.msg.img.$;
9
+ const candidates = buildImageCandidates(schema);
10
+ const primary = candidates[0] || { file_id: schema.cdnmidimgurl || schema.tpurl || '', file_size: schema.length };
8
11
  return {
9
12
  is_ww: !!schema.tpurl,
10
13
  aes_key: schema.aeskey,
11
14
  auth_key: schema.tpauthkey || '',
12
- file_id: schema.cdnmidimgurl || schema.tpurl || '',
13
- file_size: schema.length,
15
+ file_id: primary.file_id,
16
+ file_size: primary.file_size,
14
17
  file_name: '',
18
+ candidates: candidates.length ? candidates : [primary],
15
19
  };
16
20
  }
21
+ const isPositiveSize = (size) => !!size && Number(size) > 0;
22
+ function buildImageCandidates(schema) {
23
+ if (schema.tpurl) {
24
+ return [{ file_id: schema.cdnmidimgurl || schema.tpurl, file_size: schema.length }];
25
+ }
26
+ const midUrl = schema.cdnmidimgurl;
27
+ const bigUrl = schema.cdnbigimgurl;
28
+ const list = [
29
+ [midUrl, schema.cdnmidimgurl_size],
30
+ [midUrl, schema.hevc_mid_size],
31
+ ];
32
+ if (isPositiveSize(schema.hdlength)) {
33
+ list.push([midUrl, schema.length], [bigUrl, schema.hdlength]);
34
+ }
35
+ else {
36
+ list.push([bigUrl, schema.length], [midUrl, schema.length]);
37
+ }
38
+ const seen = new Set();
39
+ const candidates = [];
40
+ for (const [fileId, fileSize] of list) {
41
+ if (!fileId || !isPositiveSize(fileSize)) {
42
+ continue;
43
+ }
44
+ const key = `${fileId}|${fileSize}`;
45
+ if (seen.has(key)) {
46
+ continue;
47
+ }
48
+ seen.add(key);
49
+ candidates.push({ file_id: fileId, file_size: fileSize });
50
+ }
51
+ return candidates;
52
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node -r ts-node/register
2
+ export {};
3
+ //# sourceMappingURL=message-image.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-image.spec.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-image.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
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 message_image_js_1 = require("./message-image.js");
6
+ const buildPayload = (imgAttrs) => ({
7
+ msg: `<?xml version="1.0"?>\n<msg>\n\t<img ${imgAttrs}>\n\t</img>\n</msg>\n`,
8
+ });
9
+ (0, tstest_1.test)('parseImageMessagePayload uses hevc_mid_size when downloading mid image', async (t) => {
10
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" length="157626" md5="md5" hevc_mid_size="53274"'));
11
+ t.equal(payload.file_id, 'mid-url', 'should use mid image url');
12
+ t.equal(payload.file_size, '53274', 'size should match the mid image, not the origin length');
13
+ t.equal(payload.is_ww, false, 'should not be ww image');
14
+ });
15
+ (0, tstest_1.test)('parseImageMessagePayload prefers cdnmidimgurl_size', async (t) => {
16
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" length="157626" hevc_mid_size="53274" cdnmidimgurl_size="60000"'));
17
+ t.equal(payload.file_size, '60000', 'cdnmidimgurl_size should win');
18
+ });
19
+ (0, tstest_1.test)('parseImageMessagePayload falls back to length for legacy xml', async (t) => {
20
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" length="12345" hevc_mid_size="0"'));
21
+ t.equal(payload.file_size, '12345', 'length should be used when no mid size is available');
22
+ });
23
+ (0, tstest_1.test)('parseImageMessagePayload falls back to length when mid size attrs are absent', async (t) => {
24
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" length="12345" md5="md5"'));
25
+ t.equal(payload.file_size, '12345', 'length should be used when hevc_mid_size is missing');
26
+ });
27
+ (0, tstest_1.test)('parseImageMessagePayload uses big image url when mid size is missing', async (t) => {
28
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" cdnbigimgurl="big-url" length="157626"'));
29
+ t.equal(payload.file_id, 'big-url', 'should switch to origin image url');
30
+ t.equal(payload.file_size, '157626', 'size should be origin length');
31
+ });
32
+ (0, tstest_1.test)('parseImageMessagePayload keeps mid url for legacy xml with hdlength', async (t) => {
33
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" cdnbigimgurl="big-url" length="12345" hdlength="99999"'));
34
+ t.equal(payload.file_id, 'mid-url', 'legacy xml should still use mid url');
35
+ t.equal(payload.file_size, '12345', 'legacy length is mid image size');
36
+ });
37
+ (0, tstest_1.test)('parseImageMessagePayload keeps length for ww image', async (t) => {
38
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" tpurl="tp-url" tpauthkey="auth" length="888" hevc_mid_size="111"'));
39
+ t.equal(payload.is_ww, true, 'should be ww image');
40
+ t.equal(payload.file_id, 'tp-url', 'should use tpurl');
41
+ t.equal(payload.file_size, '888', 'ww image should keep length');
42
+ });
43
+ (0, tstest_1.test)('parseImageMessagePayload builds fallback candidates for new xml', async (t) => {
44
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" cdnbigimgurl="big-url" length="157626" hevc_mid_size="53274"'));
45
+ t.same(payload.candidates, [
46
+ { file_id: 'mid-url', file_size: '53274' },
47
+ { file_id: 'big-url', file_size: '157626' },
48
+ { file_id: 'mid-url', file_size: '157626' },
49
+ ], 'should try mid size first, then origin, then legacy combination');
50
+ t.equal(payload.file_id, payload.candidates?.[0]?.file_id, 'file_id should be first candidate');
51
+ t.equal(payload.file_size, payload.candidates?.[0]?.file_size, 'file_size should be first candidate');
52
+ });
53
+ (0, tstest_1.test)('parseImageMessagePayload builds fallback candidates for legacy xml', async (t) => {
54
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" cdnbigimgurl="big-url" length="12345" hdlength="99999"'));
55
+ t.same(payload.candidates, [
56
+ { file_id: 'mid-url', file_size: '12345' },
57
+ { file_id: 'big-url', file_size: '99999' },
58
+ ], 'legacy xml should try mid + length, then big + hdlength');
59
+ });
60
+ (0, tstest_1.test)('parseImageMessagePayload dedupes candidates', async (t) => {
61
+ const payload = await (0, message_image_js_1.parseImageMessagePayload)(buildPayload('aeskey="key" cdnmidimgurl="mid-url" length="157626" hevc_mid_size="53274" cdnmidimgurl_size="53274"'));
62
+ t.same(payload.candidates, [
63
+ { file_id: 'mid-url', file_size: '53274' },
64
+ { file_id: 'mid-url', file_size: '157626' },
65
+ ], 'same url + size should only appear once');
66
+ });
@@ -48,6 +48,12 @@ export interface VideoMessagePayload {
48
48
  thumb_width: string;
49
49
  thumb_height: string;
50
50
  file_name: '';
51
+ candidates?: Array<{
52
+ file_id: string;
53
+ file_size: string;
54
+ aes_key?: string;
55
+ }>;
51
56
  }
52
57
  export declare function parseVideoMessagePayload(rawPayload: MessagePayload): Promise<VideoMessagePayload>;
58
+ export declare function buildVideoCandidates(schema: VideoXmlSchema['msg']['videomsg']['$']): VideoMessagePayload['candidates'];
53
59
  //# sourceMappingURL=message-video.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-video.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE;QACD,QAAQ,EAAE;YACN,CAAC,EAAE;gBACC,MAAM,EAAE,MAAM,CAAA;gBACd,WAAW,EAAE,MAAM,CAAA;gBACnB,cAAc,EAAE,MAAM,CAAA;gBACtB,WAAW,EAAE,MAAM,CAAA;gBACnB,MAAM,EAAE,MAAM,CAAA;gBACd,UAAU,EAAE,MAAM,CAAA;gBAClB,cAAc,EAAE,MAAM,CAAA;gBACtB,aAAa,EAAE,MAAM,CAAA;gBACrB,cAAc,EAAE,MAAM,CAAA;gBACtB,YAAY,EAAE,MAAM,CAAA;gBACpB,GAAG,EAAE,MAAM,CAAA;gBACX,MAAM,EAAE,MAAM,CAAA;gBACd,aAAa,EAAE,MAAM,CAAA;gBACrB,MAAM,EAAE,MAAM,CAAA;gBACd,SAAS,EAAE,MAAM,CAAA;gBACjB,cAAc,EAAE,MAAM,CAAA;gBACtB,iBAAiB,EAAE,MAAM,CAAA;gBACzB,iBAAiB,EAAE,MAAM,CAAA;gBACzB,eAAe,EAAE,MAAM,CAAA;gBACvB,IAAI,EAAE,MAAM,CAAA;gBACZ,UAAU,CAAC,EAAE,MAAM,CAAA;gBACnB,SAAS,CAAC,EAAE,MAAM,CAAA;gBAClB,UAAU,CAAC,EAAE,MAAM,CAAA;gBACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;gBACjB,aAAa,CAAC,EAAE,MAAM,CAAA;gBACtB,YAAY,CAAC,EAAE,MAAM,CAAA;gBACrB,aAAa,CAAC,EAAE,MAAM,CAAA;gBACtB,aAAa,CAAC,EAAE,MAAM,CAAA;aACzB,CAAA;SACJ,CAAA;KACJ,CAAA;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,EAAE,CAAA;CACd;AAED,wBAAsB,wBAAwB,CAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAkBxG"}
1
+ {"version":3,"file":"message-video.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE;QACD,QAAQ,EAAE;YACN,CAAC,EAAE;gBACC,MAAM,EAAE,MAAM,CAAA;gBACd,WAAW,EAAE,MAAM,CAAA;gBACnB,cAAc,EAAE,MAAM,CAAA;gBACtB,WAAW,EAAE,MAAM,CAAA;gBACnB,MAAM,EAAE,MAAM,CAAA;gBACd,UAAU,EAAE,MAAM,CAAA;gBAClB,cAAc,EAAE,MAAM,CAAA;gBACtB,aAAa,EAAE,MAAM,CAAA;gBACrB,cAAc,EAAE,MAAM,CAAA;gBACtB,YAAY,EAAE,MAAM,CAAA;gBACpB,GAAG,EAAE,MAAM,CAAA;gBACX,MAAM,EAAE,MAAM,CAAA;gBACd,aAAa,EAAE,MAAM,CAAA;gBACrB,MAAM,EAAE,MAAM,CAAA;gBACd,SAAS,EAAE,MAAM,CAAA;gBACjB,cAAc,EAAE,MAAM,CAAA;gBACtB,iBAAiB,EAAE,MAAM,CAAA;gBACzB,iBAAiB,EAAE,MAAM,CAAA;gBACzB,eAAe,EAAE,MAAM,CAAA;gBACvB,IAAI,EAAE,MAAM,CAAA;gBACZ,UAAU,CAAC,EAAE,MAAM,CAAA;gBACnB,SAAS,CAAC,EAAE,MAAM,CAAA;gBAClB,UAAU,CAAC,EAAE,MAAM,CAAA;gBACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;gBACjB,aAAa,CAAC,EAAE,MAAM,CAAA;gBACtB,YAAY,CAAC,EAAE,MAAM,CAAA;gBACrB,aAAa,CAAC,EAAE,MAAM,CAAA;gBACtB,aAAa,CAAC,EAAE,MAAM,CAAA;aACzB,CAAA;SACJ,CAAA;KACJ,CAAA;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,EAAE,CAAC;IAMd,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E;AAID,wBAAsB,wBAAwB,CAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmBxG;AAED,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAgBvH"}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseVideoMessagePayload = parseVideoMessagePayload;
4
+ exports.buildVideoCandidates = buildVideoCandidates;
4
5
  const xml_to_json_js_1 = require("../utils/xml-to-json.js");
6
+ const isPositiveSize = (size) => !!size && Number(size) > 0;
5
7
  async function parseVideoMessagePayload(rawPayload) {
6
8
  const videoXml = await (0, xml_to_json_js_1.xmlToJson)(rawPayload.msg);
7
9
  const videoSchema = videoXml.msg.videomsg.$;
@@ -18,5 +20,23 @@ async function parseVideoMessagePayload(rawPayload) {
18
20
  thumb_width: videoSchema.cdnthumbwidth || videoSchema.tpthumbwidth || '',
19
21
  thumb_height: videoSchema.cdnthumbheight || videoSchema.tpthumbheight || '',
20
22
  file_name: '',
23
+ candidates: buildVideoCandidates(videoSchema),
21
24
  };
22
25
  }
26
+ function buildVideoCandidates(schema) {
27
+ if (schema.tpvideourl) {
28
+ return undefined;
29
+ }
30
+ const candidates = [];
31
+ if (schema.cdnvideourl && isPositiveSize(schema.length)) {
32
+ candidates.push({ file_id: schema.cdnvideourl, file_size: schema.length });
33
+ }
34
+ if (schema.cdnrawvideourl && isPositiveSize(schema.rawlength)) {
35
+ candidates.push({
36
+ file_id: schema.cdnrawvideourl,
37
+ file_size: schema.rawlength,
38
+ aes_key: schema.cdnrawvideoaeskey || schema.aeskey,
39
+ });
40
+ }
41
+ return candidates.length ? candidates : undefined;
42
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node -r ts-node/register
2
+ export {};
3
+ //# sourceMappingURL=message-video.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-video.spec.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-video.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
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 message_video_js_1 = require("./message-video.js");
6
+ const request_js_1 = require("../service/request.js");
7
+ const buildPayload = (attrs) => ({
8
+ msg: `<?xml version="1.0"?>\n<msg>\n\t<videomsg ${attrs} />\n</msg>\n`,
9
+ });
10
+ (0, tstest_1.test)('parseVideoMessagePayload adds raw video as fallback candidate', async (t) => {
11
+ const payload = await (0, message_video_js_1.parseVideoMessagePayload)(buildPayload('aeskey="key" cdnvideourl="video-url" length="766838" playlength="5" rawlength="769445" cdnrawvideourl="raw-url" cdnrawvideoaeskey="raw-key"'));
12
+ t.equal(payload.file_id, 'video-url', 'primary file_id unchanged');
13
+ t.equal(payload.file_size, '766838', 'primary file_size unchanged');
14
+ t.same(payload.candidates, [
15
+ { file_id: 'video-url', file_size: '766838' },
16
+ { file_id: 'raw-url', file_size: '769445', aes_key: 'raw-key' },
17
+ ], 'raw video should be second candidate with its own aes key');
18
+ });
19
+ (0, tstest_1.test)('parseVideoMessagePayload skips empty raw video', async (t) => {
20
+ const payload = await (0, message_video_js_1.parseVideoMessagePayload)(buildPayload('aeskey="key" cdnvideourl="video-url" length="766838" playlength="5" rawlength="0" cdnrawvideourl="" cdnrawvideoaeskey=""'));
21
+ t.same(payload.candidates, [{ file_id: 'video-url', file_size: '766838' }], 'only cdn video candidate');
22
+ });
23
+ (0, tstest_1.test)('parseSizeMismatch extracts actual size from backend error', async (t) => {
24
+ t.equal((0, request_js_1.parseSizeMismatch)('download plaintext size differs: expected 766838, got 1228708'), '1228708', 'should return actual size');
25
+ t.equal((0, request_js_1.parseSizeMismatch)('timeout'), undefined, 'other errors return undefined');
26
+ t.equal((0, request_js_1.parseSizeMismatch)(undefined), undefined, 'undefined returns undefined');
27
+ });
@@ -137,13 +137,20 @@ export interface BaseEvent {
137
137
  name?: string;
138
138
  robotInfo?: ContactPayload;
139
139
  }
140
+ export interface CdnDownloadCandidate {
141
+ file_id: string;
142
+ file_size: string | number;
143
+ aes_key?: string;
144
+ }
140
145
  export interface ImageMessagePayload {
141
146
  aes_key: string;
142
147
  auth_key: string;
143
148
  file_id: string;
144
149
  file_size?: string | number;
145
150
  file_name?: string;
151
+ candidates?: CdnDownloadCandidate[];
146
152
  }
153
+ export declare function parseSizeMismatch(errmsg?: string): string | undefined;
147
154
  export interface SnsImageMessagePayload {
148
155
  errcode: number;
149
156
  file_key: string;
@@ -185,6 +192,7 @@ export interface VideoMessagePayload {
185
192
  thumb_width: string;
186
193
  thumb_height: string;
187
194
  file_name: '';
195
+ candidates?: CdnDownloadCandidate[];
188
196
  }
189
197
  export declare enum FriendshipType {
190
198
  Unknown = 0,
@@ -344,6 +352,7 @@ declare class Client extends EventEmitter {
344
352
  sendAtText(contactId: string, msg: string, atList: string[], selfId: string | undefined): Promise<MessagePayload | void>;
345
353
  uploadFile(url: string, type: number): Promise<any>;
346
354
  private retryDownload;
355
+ private cdnDownloadWithFallback;
347
356
  downloadImage(imageInfo: ImageMessagePayload): Promise<any>;
348
357
  downloadWWMedia(imageInfo: ImageMessagePayload, type: number): Promise<any>;
349
358
  downloadFile(imageInfo: ImageMessagePayload): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/service/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/service/request.ts"],"names":[],"mappings":"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"}
@@ -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";
@@ -1388,8 +1393,7 @@ class Client extends events_1.EventEmitter {
1388
1393
  },
1389
1394
  });
1390
1395
  }
1391
- async retryDownload(fn) {
1392
- const maxRetries = 5;
1396
+ async retryDownload(fn, maxRetries = 5) {
1393
1397
  const delayMs = 5000;
1394
1398
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
1395
1399
  try {
@@ -1398,6 +1402,9 @@ class Client extends events_1.EventEmitter {
1398
1402
  return res;
1399
1403
  }
1400
1404
  wechaty_puppet_1.log.warn(PRE, 'download attempt %d/%d failed (no url in response): %s', attempt, maxRetries, JSON.stringify(res));
1405
+ if (parseSizeMismatch(res?.errmsg)) {
1406
+ return res;
1407
+ }
1401
1408
  }
1402
1409
  catch (e) {
1403
1410
  wechaty_puppet_1.log.warn(PRE, 'download attempt %d/%d error: %s', attempt, maxRetries, e);
@@ -1408,21 +1415,51 @@ class Client extends events_1.EventEmitter {
1408
1415
  }
1409
1416
  return null;
1410
1417
  }
1418
+ async cdnDownloadWithFallback(label, baseParams, candidates) {
1419
+ const queue = [...candidates];
1420
+ const tried = new Set();
1421
+ const retriesPerCandidate = candidates.length > 1 ? 2 : 5;
1422
+ while (queue.length) {
1423
+ const candidate = queue.shift();
1424
+ const key = `${candidate.file_id}|${candidate.file_size}|${candidate.aes_key || ''}`;
1425
+ if (!candidate.file_id || tried.has(key)) {
1426
+ continue;
1427
+ }
1428
+ tried.add(key);
1429
+ const params = {
1430
+ ...baseParams,
1431
+ file_id: candidate.file_id,
1432
+ file_size: candidate.file_size,
1433
+ ...(candidate.aes_key ? { aes_key: candidate.aes_key } : {}),
1434
+ };
1435
+ const res = await this.retryDownload(() => this.postData({ path: '/cloud/cdn_download', data: params }), retriesPerCandidate);
1436
+ if (res?.url) {
1437
+ if (tried.size > 1) {
1438
+ wechaty_puppet_1.log.info(PRE, '%s succeeded with fallback, file_size: %s', label, candidate.file_size);
1439
+ }
1440
+ return encodeURI(res.url) || '';
1441
+ }
1442
+ const actualSize = parseSizeMismatch(res?.errmsg);
1443
+ if (actualSize) {
1444
+ wechaty_puppet_1.log.warn(PRE, '%s size mismatch (xml %s, actual %s), retry with actual size', label, candidate.file_size, actualSize);
1445
+ queue.unshift({ ...candidate, file_size: actualSize });
1446
+ continue;
1447
+ }
1448
+ wechaty_puppet_1.log.warn(PRE, '%s candidate failed, params: %s', label, JSON.stringify(params));
1449
+ }
1450
+ wechaty_puppet_1.log.error(PRE, '%s failed for all candidates: %s', label, JSON.stringify(candidates));
1451
+ return '';
1452
+ }
1411
1453
  async downloadImage(imageInfo) {
1412
- const params = {
1454
+ const candidates = imageInfo.candidates?.length
1455
+ ? imageInfo.candidates
1456
+ : [{ file_id: imageInfo.file_id, file_size: imageInfo.file_size || '' }];
1457
+ return this.cdnDownloadWithFallback('downloadImage', {
1413
1458
  log_response: true,
1414
1459
  file_type: 2,
1415
- file_id: imageInfo.file_id,
1416
1460
  aes_key: imageInfo.aes_key,
1417
- file_size: imageInfo.file_size,
1418
1461
  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 '';
1462
+ }, candidates);
1426
1463
  }
1427
1464
  async downloadWWMedia(imageInfo, type) {
1428
1465
  const typeNameMap = {
@@ -1446,20 +1483,12 @@ class Client extends events_1.EventEmitter {
1446
1483
  return '';
1447
1484
  }
1448
1485
  async downloadFile(imageInfo) {
1449
- const params = {
1486
+ return this.cdnDownloadWithFallback('downloadFile', {
1450
1487
  log_response: true,
1451
1488
  file_type: 5,
1452
- file_id: imageInfo.file_id.replace('@cdn_', ''),
1453
1489
  aes_key: imageInfo.aes_key,
1454
- file_size: imageInfo.file_size,
1455
1490
  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 '';
1491
+ }, [{ file_id: imageInfo.file_id.replace('@cdn_', ''), file_size: imageInfo.file_size || '' }]);
1463
1492
  }
1464
1493
  async downloadAudio(msgId, voiceInfo, roomId) {
1465
1494
  const params = {
@@ -1537,19 +1566,14 @@ class Client extends events_1.EventEmitter {
1537
1566
  return '';
1538
1567
  }
1539
1568
  async downloadVideo(videoInfo) {
1540
- const params = {
1569
+ const candidates = videoInfo.candidates?.length
1570
+ ? videoInfo.candidates
1571
+ : [{ file_id: videoInfo.file_id, file_size: videoInfo.file_size }];
1572
+ return this.cdnDownloadWithFallback('downloadVideo', {
1541
1573
  file_type: 4,
1542
- file_id: videoInfo.file_id,
1543
1574
  aes_key: videoInfo.aes_key,
1544
- file_size: videoInfo.file_size,
1545
1575
  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 '';
1576
+ }, candidates);
1553
1577
  }
1554
1578
  async sendUrlImg(contactId, url, selfId) {
1555
1579
  try {
@@ -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
+ });
@@ -126,6 +126,7 @@ declare class PuppetMatrix extends PUPPET.Puppet {
126
126
  private _stopPuppetHeart;
127
127
  private _fileBoxFromUrl;
128
128
  private _getMessageImageFileBox;
129
+ private _imageNameByHead;
129
130
  private _getMessageAudioFileBox;
130
131
  private _getMessageVideoFileBox;
131
132
  private _getMessageFileFileBox;