wechaty-puppet-matrix 0.0.50 → 0.0.51
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/cjs/src/matrix/messages/message-appmsg.d.ts.map +1 -1
- package/dist/cjs/src/matrix/messages/message-appmsg.js +30 -6
- package/dist/cjs/src/matrix/messages/message-appmsg.spec.d.ts +3 -0
- package/dist/cjs/src/matrix/messages/message-appmsg.spec.d.ts.map +1 -0
- package/dist/cjs/src/matrix/messages/message-appmsg.spec.js +36 -0
- package/dist/esm/src/matrix/messages/message-appmsg.d.ts.map +1 -1
- package/dist/esm/src/matrix/messages/message-appmsg.js +30 -6
- package/dist/esm/src/matrix/messages/message-appmsg.spec.d.ts +3 -0
- package/dist/esm/src/matrix/messages/message-appmsg.spec.d.ts.map +1 -0
- package/dist/esm/src/matrix/messages/message-appmsg.spec.js +34 -0
- package/package.json +1 -1
- package/src/matrix/messages/message-appmsg.spec.ts +43 -0
- package/src/matrix/messages/message-appmsg.ts +32 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-appmsg.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAe,sBAAsB,CAAA;AAoEvD,oBAAY,cAAc;IACxB,IAAI,IAAI;IACR,GAAG,IAAI;IACP,KAAK,IAAI;IACT,KAAK,IAAI;IACT,GAAG,IAAI;IACP,MAAM,IAAI;IACV,IAAI,IAAI;IACR,KAAK,IAAI;IACT,WAAW,IAAI;IACf,QAAQ,KAAK;IACb,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,UAAU,KAAK;IACf,qBAAqB,KAAK;IAC1B,WAAW,KAAK;IAChB,WAAW,KAAK;IAChB,cAAc,KAAK;IACnB,QAAQ,KAAK;IACb,SAAS,KAAK;IACd,QAAQ,KAAK;IACb,SAAS,OAAO;IAChB,YAAY,OAAO;IACnB,UAAU,SAAS;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,QAAQ,EAAE,MAAM,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,GAAG,EAAE,MAAM,CAAC;YACZ,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAA;SACd,CAAA;KACF,CAAC;IACF,SAAS,CAAC,EAAE,EAAE,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B;
|
|
1
|
+
{"version":3,"file":"message-appmsg.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,13 +29,37 @@ var AppMessageType;
|
|
|
29
29
|
AppMessageType[AppMessageType["RedEnvelopes"] = 2001] = "RedEnvelopes";
|
|
30
30
|
AppMessageType[AppMessageType["ReaderType"] = 100001] = "ReaderType";
|
|
31
31
|
})(AppMessageType || (exports.AppMessageType = AppMessageType = {}));
|
|
32
|
+
function isUrlPayload(messageContent) {
|
|
33
|
+
try {
|
|
34
|
+
const url = new URL(messageContent);
|
|
35
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
32
41
|
async function parseAppmsgMessagePayload(messageContent) {
|
|
42
|
+
if (isUrlPayload(messageContent)) {
|
|
43
|
+
return {
|
|
44
|
+
title: messageContent,
|
|
45
|
+
type: AppMessageType.Url,
|
|
46
|
+
url: messageContent,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
33
49
|
const appMsgXml = await (0, xml_to_json_js_1.xmlToJson)(messageContent);
|
|
34
|
-
const
|
|
50
|
+
const appmsg = appMsgXml?.msg?.appmsg;
|
|
51
|
+
if (!appmsg) {
|
|
52
|
+
return {
|
|
53
|
+
title: messageContent,
|
|
54
|
+
type: AppMessageType.Text,
|
|
55
|
+
url: '',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const { title, des, url, thumburl, type, md5, recorditem } = appmsg;
|
|
35
59
|
let appattach;
|
|
36
60
|
let channel;
|
|
37
|
-
const tmp =
|
|
38
|
-
const channeltmp =
|
|
61
|
+
const tmp = appmsg.appattach;
|
|
62
|
+
const channeltmp = appmsg.finderFeed;
|
|
39
63
|
if (tmp) {
|
|
40
64
|
appattach = {
|
|
41
65
|
is_ww: !!tmp?.tpurl,
|
|
@@ -72,10 +96,10 @@ async function parseAppmsgMessagePayload(messageContent) {
|
|
|
72
96
|
des,
|
|
73
97
|
md5,
|
|
74
98
|
recorditem,
|
|
75
|
-
refermsg:
|
|
99
|
+
refermsg: appmsg.refermsg,
|
|
76
100
|
thumburl,
|
|
77
|
-
title,
|
|
101
|
+
title: title || '',
|
|
78
102
|
type: parseInt(type, 10),
|
|
79
|
-
url,
|
|
103
|
+
url: url || '',
|
|
80
104
|
};
|
|
81
105
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-appmsg.spec.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
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_appmsg_js_1 = require("./message-appmsg.js");
|
|
6
|
+
(0, tstest_1.test)('parseAppmsgMessagePayload handles plain url payload', async (t) => {
|
|
7
|
+
const url = 'https://coscon-1350254031.cos.ap-shanghai.myqcloud.com/wx.coscon.cc/channel/media/aa2ebcaa5cdc_1781411162.xlsx';
|
|
8
|
+
const payload = await (0, message_appmsg_js_1.parseAppmsgMessagePayload)(url);
|
|
9
|
+
t.equal(payload.type, message_appmsg_js_1.AppMessageType.Url, 'plain url should be parsed as url app message');
|
|
10
|
+
t.equal(payload.title, url, 'plain url should be used as title fallback');
|
|
11
|
+
t.equal(payload.url, url, 'plain url should be used as url');
|
|
12
|
+
});
|
|
13
|
+
(0, tstest_1.test)('parseAppmsgMessagePayload handles xml appmsg payload', async (t) => {
|
|
14
|
+
const payload = await (0, message_appmsg_js_1.parseAppmsgMessagePayload)(`
|
|
15
|
+
<msg>
|
|
16
|
+
<appmsg>
|
|
17
|
+
<title>report.xlsx</title>
|
|
18
|
+
<des></des>
|
|
19
|
+
<type>6</type>
|
|
20
|
+
<url></url>
|
|
21
|
+
<appattach>
|
|
22
|
+
<totallen>123</totallen>
|
|
23
|
+
<attachid>attach-id</attachid>
|
|
24
|
+
<fileext>xlsx</fileext>
|
|
25
|
+
<cdnattachurl>https://example.com/report.xlsx</cdnattachurl>
|
|
26
|
+
<aeskey>key</aeskey>
|
|
27
|
+
<encryver>1</encryver>
|
|
28
|
+
<islargefilemsg>0</islargefilemsg>
|
|
29
|
+
</appattach>
|
|
30
|
+
</appmsg>
|
|
31
|
+
</msg>
|
|
32
|
+
`);
|
|
33
|
+
t.equal(payload.type, message_appmsg_js_1.AppMessageType.Attach, 'xml type should be parsed');
|
|
34
|
+
t.equal(payload.title, 'report.xlsx', 'xml title should be parsed');
|
|
35
|
+
t.equal(payload.appattach?.totallen, 123, 'attachment length should be parsed');
|
|
36
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-appmsg.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAe,sBAAsB,CAAA;AAoEvD,oBAAY,cAAc;IACxB,IAAI,IAAI;IACR,GAAG,IAAI;IACP,KAAK,IAAI;IACT,KAAK,IAAI;IACT,GAAG,IAAI;IACP,MAAM,IAAI;IACV,IAAI,IAAI;IACR,KAAK,IAAI;IACT,WAAW,IAAI;IACf,QAAQ,KAAK;IACb,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,UAAU,KAAK;IACf,qBAAqB,KAAK;IAC1B,WAAW,KAAK;IAChB,WAAW,KAAK;IAChB,cAAc,KAAK;IACnB,QAAQ,KAAK;IACb,SAAS,KAAK;IACd,QAAQ,KAAK;IACb,SAAS,OAAO;IAChB,YAAY,OAAO;IACnB,UAAU,SAAS;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,QAAQ,EAAE,MAAM,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,GAAG,EAAE,MAAM,CAAC;YACZ,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAA;SACd,CAAA;KACF,CAAC;IACF,SAAS,CAAC,EAAE,EAAE,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B;
|
|
1
|
+
{"version":3,"file":"message-appmsg.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAe,sBAAsB,CAAA;AAoEvD,oBAAY,cAAc;IACxB,IAAI,IAAI;IACR,GAAG,IAAI;IACP,KAAK,IAAI;IACT,KAAK,IAAI;IACT,GAAG,IAAI;IACP,MAAM,IAAI;IACV,IAAI,IAAI;IACR,KAAK,IAAI;IACT,WAAW,IAAI;IACf,QAAQ,KAAK;IACb,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,UAAU,KAAK;IACf,qBAAqB,KAAK;IAC1B,WAAW,KAAK;IAChB,WAAW,KAAK;IAChB,cAAc,KAAK;IACnB,QAAQ,KAAK;IACb,SAAS,KAAK;IACd,QAAQ,KAAK;IACb,SAAS,OAAO;IAChB,YAAY,OAAO;IACnB,UAAU,SAAS;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,QAAQ,EAAE,MAAM,CAAA;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,YAAY,EAAE,MAAM,CAAC;YACrB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,GAAG,EAAE,MAAM,CAAC;YACZ,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAA;SACd,CAAA;KACF,CAAC;IACF,SAAS,CAAC,EAAE,EAAE,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B;AAWD,wBAAsB,yBAAyB,CAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoEnG"}
|
|
@@ -25,13 +25,37 @@ export var AppMessageType;
|
|
|
25
25
|
AppMessageType[AppMessageType["RedEnvelopes"] = 2001] = "RedEnvelopes";
|
|
26
26
|
AppMessageType[AppMessageType["ReaderType"] = 100001] = "ReaderType";
|
|
27
27
|
})(AppMessageType || (AppMessageType = {}));
|
|
28
|
+
function isUrlPayload(messageContent) {
|
|
29
|
+
try {
|
|
30
|
+
const url = new URL(messageContent);
|
|
31
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
28
37
|
export async function parseAppmsgMessagePayload(messageContent) {
|
|
38
|
+
if (isUrlPayload(messageContent)) {
|
|
39
|
+
return {
|
|
40
|
+
title: messageContent,
|
|
41
|
+
type: AppMessageType.Url,
|
|
42
|
+
url: messageContent,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
29
45
|
const appMsgXml = await xmlToJson(messageContent);
|
|
30
|
-
const
|
|
46
|
+
const appmsg = appMsgXml?.msg?.appmsg;
|
|
47
|
+
if (!appmsg) {
|
|
48
|
+
return {
|
|
49
|
+
title: messageContent,
|
|
50
|
+
type: AppMessageType.Text,
|
|
51
|
+
url: '',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const { title, des, url, thumburl, type, md5, recorditem } = appmsg;
|
|
31
55
|
let appattach;
|
|
32
56
|
let channel;
|
|
33
|
-
const tmp =
|
|
34
|
-
const channeltmp =
|
|
57
|
+
const tmp = appmsg.appattach;
|
|
58
|
+
const channeltmp = appmsg.finderFeed;
|
|
35
59
|
if (tmp) {
|
|
36
60
|
appattach = {
|
|
37
61
|
is_ww: !!tmp?.tpurl,
|
|
@@ -68,10 +92,10 @@ export async function parseAppmsgMessagePayload(messageContent) {
|
|
|
68
92
|
des,
|
|
69
93
|
md5,
|
|
70
94
|
recorditem,
|
|
71
|
-
refermsg:
|
|
95
|
+
refermsg: appmsg.refermsg,
|
|
72
96
|
thumburl,
|
|
73
|
-
title,
|
|
97
|
+
title: title || '',
|
|
74
98
|
type: parseInt(type, 10),
|
|
75
|
-
url,
|
|
99
|
+
url: url || '',
|
|
76
100
|
};
|
|
77
101
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-appmsg.spec.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env -S node -r ts-node/register
|
|
2
|
+
import { test } from 'tstest';
|
|
3
|
+
import { AppMessageType, parseAppmsgMessagePayload, } from './message-appmsg.js';
|
|
4
|
+
test('parseAppmsgMessagePayload handles plain url payload', async (t) => {
|
|
5
|
+
const url = 'https://coscon-1350254031.cos.ap-shanghai.myqcloud.com/wx.coscon.cc/channel/media/aa2ebcaa5cdc_1781411162.xlsx';
|
|
6
|
+
const payload = await parseAppmsgMessagePayload(url);
|
|
7
|
+
t.equal(payload.type, AppMessageType.Url, 'plain url should be parsed as url app message');
|
|
8
|
+
t.equal(payload.title, url, 'plain url should be used as title fallback');
|
|
9
|
+
t.equal(payload.url, url, 'plain url should be used as url');
|
|
10
|
+
});
|
|
11
|
+
test('parseAppmsgMessagePayload handles xml appmsg payload', async (t) => {
|
|
12
|
+
const payload = await parseAppmsgMessagePayload(`
|
|
13
|
+
<msg>
|
|
14
|
+
<appmsg>
|
|
15
|
+
<title>report.xlsx</title>
|
|
16
|
+
<des></des>
|
|
17
|
+
<type>6</type>
|
|
18
|
+
<url></url>
|
|
19
|
+
<appattach>
|
|
20
|
+
<totallen>123</totallen>
|
|
21
|
+
<attachid>attach-id</attachid>
|
|
22
|
+
<fileext>xlsx</fileext>
|
|
23
|
+
<cdnattachurl>https://example.com/report.xlsx</cdnattachurl>
|
|
24
|
+
<aeskey>key</aeskey>
|
|
25
|
+
<encryver>1</encryver>
|
|
26
|
+
<islargefilemsg>0</islargefilemsg>
|
|
27
|
+
</appattach>
|
|
28
|
+
</appmsg>
|
|
29
|
+
</msg>
|
|
30
|
+
`);
|
|
31
|
+
t.equal(payload.type, AppMessageType.Attach, 'xml type should be parsed');
|
|
32
|
+
t.equal(payload.title, 'report.xlsx', 'xml title should be parsed');
|
|
33
|
+
t.equal(payload.appattach?.totallen, 123, 'attachment length should be parsed');
|
|
34
|
+
});
|
package/package.json
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env -S node -r ts-node/register
|
|
2
|
+
import { test } from 'tstest'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
AppMessageType,
|
|
6
|
+
parseAppmsgMessagePayload,
|
|
7
|
+
} from './message-appmsg.js'
|
|
8
|
+
|
|
9
|
+
test('parseAppmsgMessagePayload handles plain url payload', async t => {
|
|
10
|
+
const url = 'https://coscon-1350254031.cos.ap-shanghai.myqcloud.com/wx.coscon.cc/channel/media/aa2ebcaa5cdc_1781411162.xlsx'
|
|
11
|
+
|
|
12
|
+
const payload = await parseAppmsgMessagePayload(url)
|
|
13
|
+
|
|
14
|
+
t.equal(payload.type, AppMessageType.Url, 'plain url should be parsed as url app message')
|
|
15
|
+
t.equal(payload.title, url, 'plain url should be used as title fallback')
|
|
16
|
+
t.equal(payload.url, url, 'plain url should be used as url')
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
test('parseAppmsgMessagePayload handles xml appmsg payload', async t => {
|
|
20
|
+
const payload = await parseAppmsgMessagePayload(`
|
|
21
|
+
<msg>
|
|
22
|
+
<appmsg>
|
|
23
|
+
<title>report.xlsx</title>
|
|
24
|
+
<des></des>
|
|
25
|
+
<type>6</type>
|
|
26
|
+
<url></url>
|
|
27
|
+
<appattach>
|
|
28
|
+
<totallen>123</totallen>
|
|
29
|
+
<attachid>attach-id</attachid>
|
|
30
|
+
<fileext>xlsx</fileext>
|
|
31
|
+
<cdnattachurl>https://example.com/report.xlsx</cdnattachurl>
|
|
32
|
+
<aeskey>key</aeskey>
|
|
33
|
+
<encryver>1</encryver>
|
|
34
|
+
<islargefilemsg>0</islargefilemsg>
|
|
35
|
+
</appattach>
|
|
36
|
+
</appmsg>
|
|
37
|
+
</msg>
|
|
38
|
+
`)
|
|
39
|
+
|
|
40
|
+
t.equal(payload.type, AppMessageType.Attach, 'xml type should be parsed')
|
|
41
|
+
t.equal(payload.title, 'report.xlsx', 'xml title should be parsed')
|
|
42
|
+
t.equal(payload.appattach?.totallen, 123, 'attachment length should be parsed')
|
|
43
|
+
})
|
|
@@ -159,14 +159,40 @@ export interface AppMessagePayload {
|
|
|
159
159
|
channel?: ChannelsMsgPayload
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
function isUrlPayload (messageContent: string): boolean {
|
|
163
|
+
try {
|
|
164
|
+
const url = new URL(messageContent)
|
|
165
|
+
return url.protocol === 'http:' || url.protocol === 'https:'
|
|
166
|
+
} catch {
|
|
167
|
+
return false
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
162
171
|
export async function parseAppmsgMessagePayload (messageContent: string): Promise<AppMessagePayload> {
|
|
172
|
+
if (isUrlPayload(messageContent)) {
|
|
173
|
+
return {
|
|
174
|
+
title: messageContent,
|
|
175
|
+
type: AppMessageType.Url,
|
|
176
|
+
url: messageContent,
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
163
180
|
const appMsgXml: AppMsgXmlSchema = await xmlToJson(messageContent)
|
|
164
|
-
const
|
|
181
|
+
const appmsg = appMsgXml?.msg?.appmsg
|
|
182
|
+
if (!appmsg) {
|
|
183
|
+
return {
|
|
184
|
+
title: messageContent,
|
|
185
|
+
type: AppMessageType.Text,
|
|
186
|
+
url: '',
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const { title, des, url, thumburl, type, md5, recorditem } = appmsg
|
|
165
191
|
|
|
166
192
|
let appattach: AppAttachPayload | undefined
|
|
167
193
|
let channel: ChannelsMsgPayload | undefined
|
|
168
|
-
const tmp =
|
|
169
|
-
const channeltmp =
|
|
194
|
+
const tmp = appmsg.appattach
|
|
195
|
+
const channeltmp = appmsg.finderFeed
|
|
170
196
|
if (tmp) {
|
|
171
197
|
appattach = {
|
|
172
198
|
is_ww: !!tmp?.tpurl,
|
|
@@ -204,10 +230,10 @@ export async function parseAppmsgMessagePayload (messageContent: string): Promis
|
|
|
204
230
|
des,
|
|
205
231
|
md5,
|
|
206
232
|
recorditem,
|
|
207
|
-
refermsg:
|
|
233
|
+
refermsg: appmsg.refermsg,
|
|
208
234
|
thumburl,
|
|
209
|
-
title,
|
|
235
|
+
title: title || '',
|
|
210
236
|
type: parseInt(type, 10),
|
|
211
|
-
url,
|
|
237
|
+
url: url || '',
|
|
212
238
|
}
|
|
213
239
|
}
|