zalo-toolkit 1.1.1 → 1.1.3
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/apis/listen.js +6 -6
- package/dist/cjs/apis/listen.cjs +6 -6
- package/dist/cjs/zalo.cjs +18 -1
- package/dist/zalo.js +18 -1
- package/package.json +1 -1
package/dist/apis/listen.js
CHANGED
|
@@ -263,7 +263,7 @@ export class Listener extends EventEmitter {
|
|
|
263
263
|
// Zalo itself doesn't seem to handle this properly either, so we gonna ignore the join_reject event
|
|
264
264
|
if (control.content.act == 'join_reject')
|
|
265
265
|
continue;
|
|
266
|
-
const groupEventData = typeof control.content.data == 'string' ?
|
|
266
|
+
const groupEventData = typeof control.content.data == 'string' && looksLikeJson(control.content.data) ? safeJsonParse(control.content.data) : control.content.data;
|
|
267
267
|
const groupEvent = initializeGroupEvent(this.ctx.uid, groupEventData, getGroupEventType(control.content.act), control.content.act);
|
|
268
268
|
const { data } = groupEvent;
|
|
269
269
|
if (groupEvent.isSelf && !this.selfListen)
|
|
@@ -279,7 +279,7 @@ export class Listener extends EventEmitter {
|
|
|
279
279
|
// Zalo itself doesn't seem to handle this properly either, so we gonna ignore the req event
|
|
280
280
|
if (control.content.act == 'req' || control.content.act == 'seen_fr_req')
|
|
281
281
|
continue;
|
|
282
|
-
const friendEventData = typeof control.content.data === 'string' && looksLikeJson(control.content.data) ?
|
|
282
|
+
const friendEventData = typeof control.content.data === 'string' && looksLikeJson(control.content.data) ? safeJsonParse(control.content.data) : control.content.data;
|
|
283
283
|
// Handles the case when act is "pin_create" and params is a string
|
|
284
284
|
if (typeof friendEventData == 'object' && 'topic' in friendEventData && typeof friendEventData.topic == 'object' && 'params' in friendEventData.topic) {
|
|
285
285
|
friendEventData.topic.params = JSON.parse(`${friendEventData.topic.params}`);
|
|
@@ -290,7 +290,7 @@ export class Listener extends EventEmitter {
|
|
|
290
290
|
listFriendEvents.push(friendEvent);
|
|
291
291
|
}
|
|
292
292
|
else if (control.content.act_type == 'mute') {
|
|
293
|
-
const muteData = typeof control.content.data == 'string' && looksLikeJson(control.content.data) ?
|
|
293
|
+
const muteData = typeof control.content.data == 'string' && looksLikeJson(control.content.data) ? safeJsonParse(control.content.data) : control.content.data;
|
|
294
294
|
const { systemTime } = muteData;
|
|
295
295
|
listMuteEvents.push({ data: muteData, act: control.content.act });
|
|
296
296
|
if (systemTime) {
|
|
@@ -313,7 +313,7 @@ export class Listener extends EventEmitter {
|
|
|
313
313
|
const { reacts, reactGroups, queueStatus } = parsedData;
|
|
314
314
|
const listReactions = [];
|
|
315
315
|
for (const react of reacts) {
|
|
316
|
-
react.content =
|
|
316
|
+
react.content = safeJsonParse(react.content);
|
|
317
317
|
const reactionObject = new Reaction(this.ctx.uid, react, false);
|
|
318
318
|
if (reactionObject.isSelf && !this.selfListen)
|
|
319
319
|
continue;
|
|
@@ -321,7 +321,7 @@ export class Listener extends EventEmitter {
|
|
|
321
321
|
this.emit('reaction', reactionObject);
|
|
322
322
|
}
|
|
323
323
|
for (const reactGroup of reactGroups) {
|
|
324
|
-
reactGroup.content =
|
|
324
|
+
reactGroup.content = safeJsonParse(reactGroup.content);
|
|
325
325
|
const reactionObject = new Reaction(this.ctx.uid, reactGroup, true);
|
|
326
326
|
if (reactionObject.isSelf && !this.selfListen)
|
|
327
327
|
continue;
|
|
@@ -393,7 +393,7 @@ export class Listener extends EventEmitter {
|
|
|
393
393
|
const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;
|
|
394
394
|
const { actions } = parsedData;
|
|
395
395
|
for (const action of actions) {
|
|
396
|
-
const data =
|
|
396
|
+
const data = safeJsonParse(`{${action.data}}`);
|
|
397
397
|
if (action.act_type == 'typing') {
|
|
398
398
|
if (action.act == 'typing') {
|
|
399
399
|
const typingObject = new UserTyping(data);
|
package/dist/cjs/apis/listen.cjs
CHANGED
|
@@ -266,7 +266,7 @@ class Listener extends stream.EventEmitter {
|
|
|
266
266
|
// Zalo itself doesn't seem to handle this properly either, so we gonna ignore the join_reject event
|
|
267
267
|
if (control.content.act == 'join_reject')
|
|
268
268
|
continue;
|
|
269
|
-
const groupEventData = typeof control.content.data == 'string' ?
|
|
269
|
+
const groupEventData = typeof control.content.data == 'string' && utils.looksLikeJson(control.content.data) ? utils.safeJsonParse(control.content.data) : control.content.data;
|
|
270
270
|
const groupEvent = GroupEvent.initializeGroupEvent(this.ctx.uid, groupEventData, utils.getGroupEventType(control.content.act), control.content.act);
|
|
271
271
|
const { data } = groupEvent;
|
|
272
272
|
if (groupEvent.isSelf && !this.selfListen)
|
|
@@ -282,7 +282,7 @@ class Listener extends stream.EventEmitter {
|
|
|
282
282
|
// Zalo itself doesn't seem to handle this properly either, so we gonna ignore the req event
|
|
283
283
|
if (control.content.act == 'req' || control.content.act == 'seen_fr_req')
|
|
284
284
|
continue;
|
|
285
|
-
const friendEventData = typeof control.content.data === 'string' && utils.looksLikeJson(control.content.data) ?
|
|
285
|
+
const friendEventData = typeof control.content.data === 'string' && utils.looksLikeJson(control.content.data) ? utils.safeJsonParse(control.content.data) : control.content.data;
|
|
286
286
|
// Handles the case when act is "pin_create" and params is a string
|
|
287
287
|
if (typeof friendEventData == 'object' && 'topic' in friendEventData && typeof friendEventData.topic == 'object' && 'params' in friendEventData.topic) {
|
|
288
288
|
friendEventData.topic.params = JSON.parse(`${friendEventData.topic.params}`);
|
|
@@ -293,7 +293,7 @@ class Listener extends stream.EventEmitter {
|
|
|
293
293
|
listFriendEvents.push(friendEvent);
|
|
294
294
|
}
|
|
295
295
|
else if (control.content.act_type == 'mute') {
|
|
296
|
-
const muteData = typeof control.content.data == 'string' && utils.looksLikeJson(control.content.data) ?
|
|
296
|
+
const muteData = typeof control.content.data == 'string' && utils.looksLikeJson(control.content.data) ? utils.safeJsonParse(control.content.data) : control.content.data;
|
|
297
297
|
const { systemTime } = muteData;
|
|
298
298
|
listMuteEvents.push({ data: muteData, act: control.content.act });
|
|
299
299
|
if (systemTime) {
|
|
@@ -316,7 +316,7 @@ class Listener extends stream.EventEmitter {
|
|
|
316
316
|
const { reacts, reactGroups, queueStatus } = parsedData;
|
|
317
317
|
const listReactions = [];
|
|
318
318
|
for (const react of reacts) {
|
|
319
|
-
react.content =
|
|
319
|
+
react.content = utils.safeJsonParse(react.content);
|
|
320
320
|
const reactionObject = new Reaction.Reaction(this.ctx.uid, react, false);
|
|
321
321
|
if (reactionObject.isSelf && !this.selfListen)
|
|
322
322
|
continue;
|
|
@@ -324,7 +324,7 @@ class Listener extends stream.EventEmitter {
|
|
|
324
324
|
this.emit('reaction', reactionObject);
|
|
325
325
|
}
|
|
326
326
|
for (const reactGroup of reactGroups) {
|
|
327
|
-
reactGroup.content =
|
|
327
|
+
reactGroup.content = utils.safeJsonParse(reactGroup.content);
|
|
328
328
|
const reactionObject = new Reaction.Reaction(this.ctx.uid, reactGroup, true);
|
|
329
329
|
if (reactionObject.isSelf && !this.selfListen)
|
|
330
330
|
continue;
|
|
@@ -396,7 +396,7 @@ class Listener extends stream.EventEmitter {
|
|
|
396
396
|
const parsedData = (await utils.decodeEventData(parsed, this.cipherKey)).data;
|
|
397
397
|
const { actions } = parsedData;
|
|
398
398
|
for (const action of actions) {
|
|
399
|
-
const data =
|
|
399
|
+
const data = utils.safeJsonParse(`{${action.data}}`);
|
|
400
400
|
if (action.act_type == 'typing') {
|
|
401
401
|
if (action.act == 'typing') {
|
|
402
402
|
const typingObject = new Typing.UserTyping(data);
|
package/dist/cjs/zalo.cjs
CHANGED
|
@@ -8,6 +8,7 @@ var ZaloApiError = require('./Errors/ZaloApiError.cjs');
|
|
|
8
8
|
var utils = require('./utils.cjs');
|
|
9
9
|
var apis = require('./apis.cjs');
|
|
10
10
|
var listen = require('./apis/listen.cjs');
|
|
11
|
+
var moment = require('moment');
|
|
11
12
|
|
|
12
13
|
function _interopNamespaceDefault(e) {
|
|
13
14
|
var n = Object.create(null);
|
|
@@ -36,9 +37,25 @@ class Zalo {
|
|
|
36
37
|
parseCookies(cookie) {
|
|
37
38
|
var _a;
|
|
38
39
|
const cookieArr = Array.isArray(cookie) ? cookie : cookie.cookies;
|
|
40
|
+
const now = moment();
|
|
41
|
+
const nowPlus7Days = moment().add(7, 'days');
|
|
39
42
|
cookieArr.forEach((e, i) => {
|
|
40
|
-
if (typeof e.domain
|
|
43
|
+
if (typeof e.domain === 'string' && e.domain.startsWith('.')) {
|
|
41
44
|
cookieArr[i].domain = e.domain.slice(1);
|
|
45
|
+
}
|
|
46
|
+
const key = e.key || (e === null || e === void 0 ? void 0 : e.name);
|
|
47
|
+
// 👉 Logic đặc biệt cho zpw_sek
|
|
48
|
+
if (key === 'zpw_sek') {
|
|
49
|
+
const creation = e.creation ? moment(e.creation) : null;
|
|
50
|
+
const lastAccessed = e.lastAccessed ? moment(e.lastAccessed) : null;
|
|
51
|
+
const isDifferentFromNow = (d) => !d || Math.abs(d.diff(now, 'seconds')) > 1;
|
|
52
|
+
if (isDifferentFromNow(creation)) {
|
|
53
|
+
cookieArr[i].creation = nowPlus7Days.toISOString();
|
|
54
|
+
}
|
|
55
|
+
if (isDifferentFromNow(lastAccessed)) {
|
|
56
|
+
cookieArr[i].lastAccessed = nowPlus7Days.toISOString();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
42
59
|
});
|
|
43
60
|
const jar = new ToughCookie__namespace.CookieJar();
|
|
44
61
|
for (const each of cookieArr) {
|
package/dist/zalo.js
CHANGED
|
@@ -6,6 +6,7 @@ import { ZaloApiError } from './Errors/ZaloApiError.js';
|
|
|
6
6
|
import { generateZaloUUID, logger } from './utils.js';
|
|
7
7
|
import { ZaloAPI } from './apis.js';
|
|
8
8
|
import { Listener } from './apis/listen.js';
|
|
9
|
+
import moment from 'moment';
|
|
9
10
|
export class Zalo {
|
|
10
11
|
constructor(options = {}) {
|
|
11
12
|
this.options = options;
|
|
@@ -14,9 +15,25 @@ export class Zalo {
|
|
|
14
15
|
parseCookies(cookie) {
|
|
15
16
|
var _a;
|
|
16
17
|
const cookieArr = Array.isArray(cookie) ? cookie : cookie.cookies;
|
|
18
|
+
const now = moment();
|
|
19
|
+
const nowPlus7Days = moment().add(7, 'days');
|
|
17
20
|
cookieArr.forEach((e, i) => {
|
|
18
|
-
if (typeof e.domain
|
|
21
|
+
if (typeof e.domain === 'string' && e.domain.startsWith('.')) {
|
|
19
22
|
cookieArr[i].domain = e.domain.slice(1);
|
|
23
|
+
}
|
|
24
|
+
const key = e.key || (e === null || e === void 0 ? void 0 : e.name);
|
|
25
|
+
// 👉 Logic đặc biệt cho zpw_sek
|
|
26
|
+
if (key === 'zpw_sek') {
|
|
27
|
+
const creation = e.creation ? moment(e.creation) : null;
|
|
28
|
+
const lastAccessed = e.lastAccessed ? moment(e.lastAccessed) : null;
|
|
29
|
+
const isDifferentFromNow = (d) => !d || Math.abs(d.diff(now, 'seconds')) > 1;
|
|
30
|
+
if (isDifferentFromNow(creation)) {
|
|
31
|
+
cookieArr[i].creation = nowPlus7Days.toISOString();
|
|
32
|
+
}
|
|
33
|
+
if (isDifferentFromNow(lastAccessed)) {
|
|
34
|
+
cookieArr[i].lastAccessed = nowPlus7Days.toISOString();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
20
37
|
});
|
|
21
38
|
const jar = new ToughCookie.CookieJar();
|
|
22
39
|
for (const each of cookieArr) {
|