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.
@@ -1 +1 @@
1
- {"version":3,"file":"message-appmsg.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.ts"],"names":[],"mappings":"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"}
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"}
@@ -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 { title, des, url, thumburl, type, md5, recorditem } = appMsgXml?.msg.appmsg;
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 = appMsgXml?.msg.appmsg.appattach;
38
- const channeltmp = appMsgXml.msg.appmsg.finderFeed;
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: appMsgXml.msg.appmsg.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,3 @@
1
+ #!/usr/bin/env -S node -r ts-node/register
2
+ export {};
3
+ //# sourceMappingURL=message-appmsg.spec.d.ts.map
@@ -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":"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"}
1
+ {"version":3,"file":"message-appmsg.d.ts","sourceRoot":"","sources":["../../../../../src/matrix/messages/message-appmsg.ts"],"names":[],"mappings":"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"}
@@ -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 { title, des, url, thumburl, type, md5, recorditem } = appMsgXml?.msg.appmsg;
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 = appMsgXml?.msg.appmsg.appattach;
34
- const channeltmp = appMsgXml.msg.appmsg.finderFeed;
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: appMsgXml.msg.appmsg.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,3 @@
1
+ #!/usr/bin/env -S node -r ts-node/register
2
+ export {};
3
+ //# sourceMappingURL=message-appmsg.spec.d.ts.map
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wechaty-puppet-matrix",
3
- "version": "0.0.50",
3
+ "version": "0.0.51",
4
4
  "description": "Puppet matrix for Wechaty",
5
5
  "type": "module",
6
6
  "typings": "./dist/esm/src/mod.d.ts",
@@ -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 { title, des, url, thumburl, type, md5, recorditem } = appMsgXml?.msg.appmsg
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 = appMsgXml?.msg.appmsg.appattach
169
- const channeltmp = appMsgXml.msg.appmsg.finderFeed
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: appMsgXml.msg.appmsg.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
  }