zalo-toolkit 1.1.4 → 1.1.6

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,4 +1,6 @@
1
1
  import { EventEmitter } from 'stream';
2
+ import WebSocket from 'ws';
3
+ import type { ZaloAPI } from '../apis.js';
2
4
  import { type DeliveredMessage } from '../models/DeliveredMessage.js';
3
5
  import { type FriendEvent } from '../models/FriendEvent.js';
4
6
  import { type GroupEvent } from '../models/GroupEvent.js';
@@ -9,8 +11,7 @@ import { Reaction } from '../models/Reaction.js';
9
11
  import { type SeenMessage } from '../models/SeenMessage.js';
10
12
  import { type Typing } from '../models/Typing.js';
11
13
  import { Undo } from '../models/Undo.js';
12
- import type { ZaloAPI } from '../apis.js';
13
- import WebSocket from 'ws';
14
+ import { type HiddenConversationEvent } from '../models/ConversationEvent.js';
14
15
  type MessageEventData = Message | GroupMessage;
15
16
  type UploadEventData = {
16
17
  fileUrl: string;
@@ -31,6 +32,7 @@ export type OnUndoMessageCallback = (undos: Undo[]) => void | Promise<void>;
31
32
  export type OnUpdateQueueStatus = (queueStatus: TypeQueueStatus, timestamp: number) => void | Promise<void>;
32
33
  export type OnLabelEventCallback = () => void | Promise<void>;
33
34
  export type OnFriendEventCallback = (friendEvents: FriendEvent[]) => void | Promise<void>;
35
+ export type OnHiddenConversationCallback = (hiddenEvents: HiddenConversationEvent[]) => void | Promise<void>;
34
36
  type SocketEventMap = {
35
37
  [key in keyof typeof SocketEvent]: any[];
36
38
  };
@@ -68,6 +70,7 @@ export declare class Listener extends EventEmitter<ListenerEvents> {
68
70
  private onUpdateQueueStatusCallback;
69
71
  private onLabelEventCallback;
70
72
  private onFriendEventCallback;
73
+ private onHiddenConversationCallback;
71
74
  private cipherKey?;
72
75
  private selfListen;
73
76
  private pingInterval?;
@@ -105,6 +108,7 @@ export declare class Listener extends EventEmitter<ListenerEvents> {
105
108
  onUpdateQueueStatus(cb: OnUpdateQueueStatus): void;
106
109
  onLabelEvent(cb: OnLabelEventCallback): void;
107
110
  onFriendEvent(cb: OnFriendEventCallback): void;
111
+ onHiddenConversation(cb: OnHiddenConversationCallback): void;
108
112
  start(): void;
109
113
  stop(): void;
110
114
  getSocketUrl(shouldRotate?: boolean, forceFirstEndpoint?: boolean): string;
@@ -1,4 +1,7 @@
1
+ import { last } from 'lodash';
1
2
  import { EventEmitter } from 'stream';
3
+ import WebSocket from 'ws';
4
+ import { ZaloApiError } from '../Errors/ZaloApiError.js';
2
5
  import { GroupDeliveredMessage, UserDeliveredMessage } from '../models/DeliveredMessage.js';
3
6
  import { initializeFriendEvent } from '../models/FriendEvent.js';
4
7
  import { initializeGroupEvent } from '../models/GroupEvent.js';
@@ -8,11 +11,9 @@ import { Reaction } from '../models/Reaction.js';
8
11
  import { GroupSeenMessage, UserSeenMessage } from '../models/SeenMessage.js';
9
12
  import { GroupTyping, UserTyping } from '../models/Typing.js';
10
13
  import { Undo } from '../models/Undo.js';
11
- import { decodeEventData, FibonacciRetry, getFriendEventType, getGroupEventType, hasOwn, logger, looksLikeJson, makeURL, safeJsonParse } from '../utils.js';
12
14
  import { ConfigSocket } from '../socket/config-socket.js';
13
- import { ZaloApiError } from '../Errors/ZaloApiError.js';
14
- import WebSocket from 'ws';
15
- import { last } from 'lodash';
15
+ import { decodeEventData, FibonacciRetry, getFriendEventType, getGroupEventType, hasOwn, logger, looksLikeJson, makeURL, safeJsonParse } from '../utils.js';
16
+ import { initializeHiddenConversationEvent } from '../models/ConversationEvent.js';
16
17
  export class Listener extends EventEmitter {
17
18
  constructor(api) {
18
19
  super();
@@ -79,6 +80,7 @@ export class Listener extends EventEmitter {
79
80
  this.onUpdateQueueStatusCallback = () => { };
80
81
  this.onLabelEventCallback = () => { };
81
82
  this.onFriendEventCallback = () => { };
83
+ this.onHiddenConversationCallback = () => { };
82
84
  }
83
85
  onConnected(cb) {
84
86
  this.onConnectedCallback = cb;
@@ -116,6 +118,9 @@ export class Listener extends EventEmitter {
116
118
  onFriendEvent(cb) {
117
119
  this.onFriendEventCallback = cb;
118
120
  }
121
+ onHiddenConversation(cb) {
122
+ this.onHiddenConversationCallback = cb;
123
+ }
119
124
  start() {
120
125
  if (this.ws)
121
126
  throw new ZaloApiError('Already started');
@@ -182,7 +187,7 @@ export class Listener extends EventEmitter {
182
187
  this.ping();
183
188
  }, 3 * 60 * 1000);
184
189
  }
185
- if (version == 1 && cmd == 501 && subCmd == 0) {
190
+ if (version == 1 && cmd == 501) {
186
191
  const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;
187
192
  const { msgs, queueStatus } = parsedData;
188
193
  const listUndo = [];
@@ -209,7 +214,7 @@ export class Listener extends EventEmitter {
209
214
  this.onMessageCallback(listMessages);
210
215
  this.onUpdateQueueStatusCallback(queueStatus, timestamp);
211
216
  }
212
- if (version == 1 && cmd == 521 && subCmd == 0) {
217
+ if (version == 1 && cmd == 521) {
213
218
  const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;
214
219
  const { groupMsgs, queueStatus } = parsedData;
215
220
  const listUndo = [];
@@ -246,6 +251,7 @@ export class Listener extends EventEmitter {
246
251
  const listGroupEvents = [];
247
252
  const listMuteEvents = [];
248
253
  const listFriendEvents = [];
254
+ const listHiddenEvents = [];
249
255
  let hasLabelEvent = false;
250
256
  for (const control of controls) {
251
257
  if (control.content.act_type == 'file_done') {
@@ -300,10 +306,16 @@ export class Listener extends EventEmitter {
300
306
  else if (control.content.act_type == 'label_convers') {
301
307
  hasLabelEvent = true;
302
308
  }
309
+ else if (control.content.act_type == 'hidden_chat') {
310
+ const hiddenEventData = typeof control.content.data === 'string' && looksLikeJson(control.content.data) ? safeJsonParse(control.content.data) : control.content.data;
311
+ const hiddenEvent = initializeHiddenConversationEvent(this.ctx.uid, hiddenEventData);
312
+ listHiddenEvents.push(hiddenEvent);
313
+ }
303
314
  }
304
315
  this.onGroupEventCallback(listGroupEvents);
305
316
  this.onMuteCallback(listMuteEvents);
306
317
  this.onFriendEventCallback(listFriendEvents);
318
+ this.onHiddenConversationCallback(listHiddenEvents);
307
319
  if (hasLabelEvent) {
308
320
  this.onLabelEventCallback();
309
321
  }
@@ -1,6 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var lodash = require('lodash');
3
4
  var stream = require('stream');
5
+ var WebSocket = require('ws');
6
+ var ZaloApiError = require('../Errors/ZaloApiError.cjs');
4
7
  var DeliveredMessage = require('../models/DeliveredMessage.cjs');
5
8
  var FriendEvent = require('../models/FriendEvent.cjs');
6
9
  var GroupEvent = require('../models/GroupEvent.cjs');
@@ -10,11 +13,9 @@ var Reaction = require('../models/Reaction.cjs');
10
13
  var SeenMessage = require('../models/SeenMessage.cjs');
11
14
  var Typing = require('../models/Typing.cjs');
12
15
  var Undo = require('../models/Undo.cjs');
13
- var utils = require('../utils.cjs');
14
16
  var configSocket = require('../socket/config-socket.cjs');
15
- var ZaloApiError = require('../Errors/ZaloApiError.cjs');
16
- var WebSocket = require('ws');
17
- var lodash = require('lodash');
17
+ var utils = require('../utils.cjs');
18
+ var ConversationEvent = require('../models/ConversationEvent.cjs');
18
19
 
19
20
  class Listener extends stream.EventEmitter {
20
21
  constructor(api) {
@@ -82,6 +83,7 @@ class Listener extends stream.EventEmitter {
82
83
  this.onUpdateQueueStatusCallback = () => { };
83
84
  this.onLabelEventCallback = () => { };
84
85
  this.onFriendEventCallback = () => { };
86
+ this.onHiddenConversationCallback = () => { };
85
87
  }
86
88
  onConnected(cb) {
87
89
  this.onConnectedCallback = cb;
@@ -119,6 +121,9 @@ class Listener extends stream.EventEmitter {
119
121
  onFriendEvent(cb) {
120
122
  this.onFriendEventCallback = cb;
121
123
  }
124
+ onHiddenConversation(cb) {
125
+ this.onHiddenConversationCallback = cb;
126
+ }
122
127
  start() {
123
128
  if (this.ws)
124
129
  throw new ZaloApiError.ZaloApiError('Already started');
@@ -185,7 +190,7 @@ class Listener extends stream.EventEmitter {
185
190
  this.ping();
186
191
  }, 3 * 60 * 1000);
187
192
  }
188
- if (version == 1 && cmd == 501 && subCmd == 0) {
193
+ if (version == 1 && cmd == 501) {
189
194
  const parsedData = (await utils.decodeEventData(parsed, this.cipherKey)).data;
190
195
  const { msgs, queueStatus } = parsedData;
191
196
  const listUndo = [];
@@ -212,7 +217,7 @@ class Listener extends stream.EventEmitter {
212
217
  this.onMessageCallback(listMessages);
213
218
  this.onUpdateQueueStatusCallback(queueStatus, timestamp);
214
219
  }
215
- if (version == 1 && cmd == 521 && subCmd == 0) {
220
+ if (version == 1 && cmd == 521) {
216
221
  const parsedData = (await utils.decodeEventData(parsed, this.cipherKey)).data;
217
222
  const { groupMsgs, queueStatus } = parsedData;
218
223
  const listUndo = [];
@@ -249,6 +254,7 @@ class Listener extends stream.EventEmitter {
249
254
  const listGroupEvents = [];
250
255
  const listMuteEvents = [];
251
256
  const listFriendEvents = [];
257
+ const listHiddenEvents = [];
252
258
  let hasLabelEvent = false;
253
259
  for (const control of controls) {
254
260
  if (control.content.act_type == 'file_done') {
@@ -303,10 +309,16 @@ class Listener extends stream.EventEmitter {
303
309
  else if (control.content.act_type == 'label_convers') {
304
310
  hasLabelEvent = true;
305
311
  }
312
+ else if (control.content.act_type == 'hidden_chat') {
313
+ const hiddenEventData = typeof control.content.data === 'string' && utils.looksLikeJson(control.content.data) ? utils.safeJsonParse(control.content.data) : control.content.data;
314
+ const hiddenEvent = ConversationEvent.initializeHiddenConversationEvent(this.ctx.uid, hiddenEventData);
315
+ listHiddenEvents.push(hiddenEvent);
316
+ }
306
317
  }
307
318
  this.onGroupEventCallback(listGroupEvents);
308
319
  this.onMuteCallback(listMuteEvents);
309
320
  this.onFriendEventCallback(listFriendEvents);
321
+ this.onHiddenConversationCallback(listHiddenEvents);
310
322
  if (hasLabelEvent) {
311
323
  this.onLabelEventCallback();
312
324
  }
@@ -18,6 +18,7 @@ var SeenMessage = require('./models/SeenMessage.cjs');
18
18
  var Typing = require('./models/Typing.cjs');
19
19
  var Undo = require('./models/Undo.cjs');
20
20
  var ZBusiness = require('./models/ZBusiness.cjs');
21
+ var ConversationEvent = require('./models/ConversationEvent.cjs');
21
22
  var zalo = require('./zalo.cjs');
22
23
  var Listen = require('./models/Listen.cjs');
23
24
  var reviewPendingMemberRequest = require('./apis/reviewPendingMemberRequest.cjs');
@@ -102,6 +103,7 @@ Object.defineProperty(exports, "BusinessCategory", {
102
103
  get: function () { return ZBusiness.BusinessCategory; }
103
104
  });
104
105
  exports.BusinessCategoryName = ZBusiness.BusinessCategoryName;
106
+ exports.initializeHiddenConversationEvent = ConversationEvent.initializeHiddenConversationEvent;
105
107
  exports.Zalo = zalo.Zalo;
106
108
  Object.defineProperty(exports, "CloseReason", {
107
109
  enumerable: true,
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ function initializeHiddenConversationEvent(uid, data) {
4
+ return {
5
+ type: 'hidden_chat',
6
+ data,
7
+ threadId: uid,
8
+ };
9
+ }
10
+
11
+ exports.initializeHiddenConversationEvent = initializeHiddenConversationEvent;
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var Enum = require('./Enum.cjs');
4
+
3
5
  exports.Reactions = void 0;
4
6
  (function (Reactions) {
5
7
  Reactions["HEART"] = "/-heart";
@@ -63,7 +65,7 @@ class Reaction {
63
65
  this.data = data;
64
66
  this.threadId = isGroup || data.uidFrom == "0" ? data.idTo : data.uidFrom;
65
67
  this.isSelf = data.uidFrom == "0";
66
- this.isGroup = isGroup;
68
+ this.type = isGroup ? Enum.ThreadType.Group : Enum.ThreadType.User;
67
69
  if (data.idTo == "0")
68
70
  data.idTo = uid;
69
71
  if (data.uidFrom == "0")
@@ -1,11 +1,13 @@
1
1
  'use strict';
2
2
 
3
+ var Enum = require('./Enum.cjs');
4
+
3
5
  class Undo {
4
6
  constructor(uid, data, isGroup) {
5
7
  this.data = data;
6
8
  this.threadId = isGroup || data.uidFrom == "0" ? data.idTo : data.uidFrom;
7
9
  this.isSelf = data.uidFrom == "0";
8
- this.isGroup = isGroup;
10
+ this.type = isGroup ? Enum.ThreadType.Group : Enum.ThreadType.User;
9
11
  if (data.idTo == "0")
10
12
  data.idTo = uid;
11
13
  if (data.uidFrom == "0")
@@ -0,0 +1,14 @@
1
+ export type THiddenConversationItem = {
2
+ thread_id: string;
3
+ is_group: boolean;
4
+ };
5
+ export type THiddenConversationEvent = {
6
+ add_items: THiddenConversationItem[];
7
+ del_items: THiddenConversationItem[];
8
+ };
9
+ export type HiddenConversationEvent = {
10
+ type: 'hidden_chat';
11
+ data: THiddenConversationEvent;
12
+ threadId: string;
13
+ };
14
+ export declare function initializeHiddenConversationEvent(uid: string, data: THiddenConversationEvent): HiddenConversationEvent;
@@ -0,0 +1,7 @@
1
+ export function initializeHiddenConversationEvent(uid, data) {
2
+ return {
3
+ type: 'hidden_chat',
4
+ data,
5
+ threadId: uid,
6
+ };
7
+ }
@@ -1,3 +1,4 @@
1
+ import { ThreadType } from "./Enum.js";
1
2
  export declare enum Reactions {
2
3
  HEART = "/-heart",
3
4
  LIKE = "/-strong",
@@ -80,6 +81,6 @@ export declare class Reaction {
80
81
  data: TReaction;
81
82
  threadId: string;
82
83
  isSelf: boolean;
83
- isGroup: boolean;
84
+ type: ThreadType;
84
85
  constructor(uid: string, data: TReaction, isGroup: boolean);
85
86
  }
@@ -1,3 +1,4 @@
1
+ import { ThreadType } from "./Enum.js";
1
2
  export var Reactions;
2
3
  (function (Reactions) {
3
4
  Reactions["HEART"] = "/-heart";
@@ -61,7 +62,7 @@ export class Reaction {
61
62
  this.data = data;
62
63
  this.threadId = isGroup || data.uidFrom == "0" ? data.idTo : data.uidFrom;
63
64
  this.isSelf = data.uidFrom == "0";
64
- this.isGroup = isGroup;
65
+ this.type = isGroup ? ThreadType.Group : ThreadType.User;
65
66
  if (data.idTo == "0")
66
67
  data.idTo = uid;
67
68
  if (data.uidFrom == "0")
@@ -1,3 +1,4 @@
1
+ import { ThreadType } from "./Enum.js";
1
2
  export type TUndoContent = {
2
3
  globalMsgId: number;
3
4
  cliMsgId: number;
@@ -29,6 +30,6 @@ export declare class Undo {
29
30
  data: TUndo;
30
31
  threadId: string;
31
32
  isSelf: boolean;
32
- isGroup: boolean;
33
+ type: ThreadType;
33
34
  constructor(uid: string, data: TUndo, isGroup: boolean);
34
35
  }
@@ -1,9 +1,10 @@
1
+ import { ThreadType } from "./Enum.js";
1
2
  export class Undo {
2
3
  constructor(uid, data, isGroup) {
3
4
  this.data = data;
4
5
  this.threadId = isGroup || data.uidFrom == "0" ? data.idTo : data.uidFrom;
5
6
  this.isSelf = data.uidFrom == "0";
6
- this.isGroup = isGroup;
7
+ this.type = isGroup ? ThreadType.Group : ThreadType.User;
7
8
  if (data.idTo == "0")
8
9
  data.idTo = uid;
9
10
  if (data.uidFrom == "0")
@@ -17,3 +17,4 @@ export * from "./Undo.js";
17
17
  export * from "./User.js";
18
18
  export * from "./ZBusiness.js";
19
19
  export * from "./Label.js";
20
+ export * from "./ConversationEvent.js";
@@ -17,3 +17,4 @@ export * from "./Undo.js";
17
17
  export * from "./User.js";
18
18
  export * from "./ZBusiness.js";
19
19
  export * from "./Label.js";
20
+ export * from "./ConversationEvent.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zalo-toolkit",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "Unofficial Zalo API for JavaScript",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",