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.
@@ -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' ? JSON.parse(control.content.data) : control.content.data;
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) ? JSON.parse(control.content.data) : 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) ? JSON.parse(control.content.data) : 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 = JSON.parse(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 = JSON.parse(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 = JSON.parse(`{${action.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);
@@ -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' ? JSON.parse(control.content.data) : control.content.data;
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) ? JSON.parse(control.content.data) : 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) ? JSON.parse(control.content.data) : 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 = JSON.parse(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 = JSON.parse(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 = JSON.parse(`{${action.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 == 'string' && e.domain.startsWith('.'))
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 == 'string' && e.domain.startsWith('.'))
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zalo-toolkit",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Unofficial Zalo API for JavaScript",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",