@d0v3riz/baileys 6.7.6 → 6.7.8

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.
Files changed (73) hide show
  1. package/README.md +0 -10
  2. package/lib/Defaults/baileys-version.json +1 -1
  3. package/lib/Defaults/index.d.ts +1 -231
  4. package/lib/Defaults/index.js +1 -17
  5. package/lib/Socket/Client/index.d.ts +2 -3
  6. package/lib/Socket/Client/index.js +2 -3
  7. package/lib/Socket/Client/{web-socket-client.d.ts → websocket.d.ts} +1 -1
  8. package/lib/Socket/Client/{web-socket-client.js → websocket.js} +2 -2
  9. package/lib/Socket/business.d.ts +10 -1
  10. package/lib/Socket/chats.d.ts +4 -1
  11. package/lib/Socket/chats.js +39 -11
  12. package/lib/Socket/groups.d.ts +3 -1
  13. package/lib/Socket/index.d.ts +17 -10
  14. package/lib/Socket/index.js +2 -2
  15. package/lib/Socket/messages-recv.d.ts +11 -2
  16. package/lib/Socket/messages-recv.js +127 -118
  17. package/lib/Socket/messages-send.d.ts +9 -2
  18. package/lib/Socket/messages-send.js +26 -9
  19. package/lib/Socket/socket.d.ts +3 -1
  20. package/lib/Socket/socket.js +9 -14
  21. package/lib/Store/make-cache-manager-store.d.ts +2 -1
  22. package/lib/Store/make-in-memory-store.js +8 -10
  23. package/lib/Store/make-ordered-dictionary.js +2 -2
  24. package/lib/Types/Auth.d.ts +1 -6
  25. package/lib/Types/Call.d.ts +1 -1
  26. package/lib/Types/Chat.d.ts +10 -7
  27. package/lib/Types/Contact.d.ts +1 -1
  28. package/lib/Types/Events.d.ts +4 -0
  29. package/lib/Types/Label.d.ts +11 -0
  30. package/lib/Types/Message.d.ts +5 -2
  31. package/lib/Types/Socket.d.ts +3 -3
  32. package/lib/Utils/auth-utils.js +1 -7
  33. package/lib/Utils/chat-utils.d.ts +5 -4
  34. package/lib/Utils/chat-utils.js +41 -20
  35. package/lib/Utils/crypto.d.ts +1 -0
  36. package/lib/Utils/decode-wa-message.js +1 -0
  37. package/lib/Utils/event-buffer.js +14 -8
  38. package/lib/Utils/generics.d.ts +10 -5
  39. package/lib/Utils/generics.js +35 -7
  40. package/lib/Utils/history.d.ts +2 -2
  41. package/lib/Utils/history.js +1 -1
  42. package/lib/Utils/link-preview.js +24 -1
  43. package/lib/Utils/make-mutex.js +1 -0
  44. package/lib/Utils/messages-media.d.ts +2 -1
  45. package/lib/Utils/messages-media.js +8 -15
  46. package/lib/Utils/messages.d.ts +1 -0
  47. package/lib/Utils/messages.js +7 -11
  48. package/lib/Utils/noise-handler.d.ts +2 -2
  49. package/lib/Utils/noise-handler.js +5 -10
  50. package/lib/Utils/process-message.js +3 -1
  51. package/lib/Utils/signal.js +2 -0
  52. package/lib/Utils/use-multi-file-auth-state.js +1 -0
  53. package/lib/Utils/validate-connection.d.ts +0 -1
  54. package/lib/Utils/validate-connection.js +10 -44
  55. package/lib/WABinary/constants.js +5 -5
  56. package/lib/WABinary/decode.d.ts +1 -0
  57. package/lib/WABinary/encode.d.ts +1 -0
  58. package/lib/WABinary/encode.js +7 -5
  59. package/lib/WABinary/generic-utils.d.ts +1 -0
  60. package/lib/WABinary/jid-utils.d.ts +2 -2
  61. package/lib/WABinary/jid-utils.js +1 -1
  62. package/lib/WAM/BinaryInfo.d.ts +3 -2
  63. package/lib/WAM/constants.d.ts +3 -2
  64. package/lib/WAM/encode.d.ts +1 -0
  65. package/lib/WAM/encode.js +2 -2
  66. package/package.json +5 -6
  67. package/lib/Defaults/phonenumber-mcc.json +0 -223
  68. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  69. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  70. package/lib/Socket/registration.d.ts +0 -234
  71. package/lib/Socket/registration.js +0 -166
  72. /package/lib/Socket/Client/{abstract-socket-client.d.ts → types.d.ts} +0 -0
  73. /package/lib/Socket/Client/{abstract-socket-client.js → types.js} +0 -0
package/README.md CHANGED
@@ -89,16 +89,6 @@ connectToWhatsApp()
89
89
 
90
90
  If the connection is successful, you will see a QR code printed on your terminal screen, scan it with WhatsApp on your phone and you'll be logged in!
91
91
 
92
- **Note:** install `qrcode-terminal` using `yarn add qrcode-terminal` to auto-print the QR to the terminal.
93
-
94
- **Note:** the code to support the legacy version of WA Web (pre multi-device) has been removed in v5. Only the standard multi-device connection is now supported. This is done as WA seems to have completely dropped support for the legacy version.
95
-
96
- ## Connecting native mobile api
97
-
98
- Baileys also supports the native mobile API, which allows users to authenticate as a standalone WhatsApp client using their phone number.
99
-
100
- Run the [example](Example/example.ts) file with ``--mobile`` cli flag to use the native mobile API.
101
-
102
92
  ## Configuring the Connection
103
93
 
104
94
  You can configure the connection by passing a `SocketConfig` object.
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": [2, 2413, 1]
2
+ "version": [2, 3000, 1015901307]
3
3
  }
@@ -1,247 +1,17 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { proto } from '../../WAProto';
3
4
  import type { MediaType, SocketConfig } from '../Types';
4
5
  export declare const UNAUTHORIZED_CODES: number[];
5
- export declare const PHONENUMBER_MCC: {
6
- "93": number;
7
- "355": number;
8
- "213": number;
9
- "1-684": number;
10
- "376": number;
11
- "244": number;
12
- "1-264": number;
13
- "1-268": number;
14
- "54": number;
15
- "374": number;
16
- "297": number;
17
- "61": number;
18
- "43": number;
19
- "994": number;
20
- "1-242": number;
21
- "973": number;
22
- "880": number;
23
- "1-246": number;
24
- "375": number;
25
- "32": number;
26
- "501": number;
27
- "229": number;
28
- "1-441": number;
29
- "975": number;
30
- "591": number;
31
- "387": number;
32
- "267": number;
33
- "55": number;
34
- "1-284": number;
35
- "673": number;
36
- "359": number;
37
- "226": number;
38
- "257": number;
39
- "855": number;
40
- "237": number;
41
- "238": number;
42
- "1-345": number;
43
- "236": number;
44
- "235": number;
45
- "56": number;
46
- "86": number;
47
- "57": number;
48
- "269": number;
49
- "682": number;
50
- "506": number;
51
- "385": number;
52
- "53": number;
53
- "357": number;
54
- "420": number;
55
- "243": number;
56
- "45": number;
57
- "253": number;
58
- "1-767": number;
59
- "1-809": number;
60
- "1-849": number;
61
- "1-829": number;
62
- "593": number;
63
- "20": number;
64
- "503": number;
65
- "240": number;
66
- "291": number;
67
- "372": number;
68
- "251": number;
69
- "500": number;
70
- "298": number;
71
- "679": number;
72
- "358": number;
73
- "33": number;
74
- "689": number;
75
- "241": number;
76
- "220": number;
77
- "995": number;
78
- "49": number;
79
- "233": number;
80
- "350": number;
81
- "30": number;
82
- "299": number;
83
- "1-473": number;
84
- "1-671": number;
85
- "502": number;
86
- "224": number;
87
- "592": number;
88
- "509": number;
89
- "504": number;
90
- "852": number;
91
- "36": number;
92
- "354": number;
93
- "91": number;
94
- "62": number;
95
- "98": number;
96
- "964": number;
97
- "353": number;
98
- "972": number;
99
- "39": number;
100
- "225": number;
101
- "1-876": number;
102
- "81": number;
103
- "962": number;
104
- "254": number;
105
- "686": number;
106
- "383": number;
107
- "965": number;
108
- "371": number;
109
- "961": number;
110
- "266": number;
111
- "231": number;
112
- "218": number;
113
- "423": number;
114
- "370": number;
115
- "352": number;
116
- "389": number;
117
- "261": number;
118
- "265": number;
119
- "60": number;
120
- "960": number;
121
- "223": number;
122
- "356": number;
123
- "692": number;
124
- "222": number;
125
- "230": number;
126
- "52": number;
127
- "691": number;
128
- "373": number;
129
- "377": number;
130
- "976": number;
131
- "382": number;
132
- "1-664": number;
133
- "212": number;
134
- "258": number;
135
- "95": number;
136
- "264": number;
137
- "674": number;
138
- "977": number;
139
- "31": number;
140
- "687": number;
141
- "64": number;
142
- "505": number;
143
- "227": number;
144
- "234": number;
145
- "683": number;
146
- "1-670": number;
147
- "47": number;
148
- "968": number;
149
- "92": number;
150
- "680": number;
151
- "970": number;
152
- "507": number;
153
- "675": number;
154
- "595": number;
155
- "51": number;
156
- "63": number;
157
- "48": number;
158
- "351": number;
159
- "1-787, 1-939": number;
160
- "974": number;
161
- "242": number;
162
- "40": number;
163
- "7": number;
164
- "250": number;
165
- "290": number;
166
- "1-869": number;
167
- "1-758": number;
168
- "508": number;
169
- "1-784": number;
170
- "685": number;
171
- "378": number;
172
- "239": number;
173
- "966": number;
174
- "221": number;
175
- "381": number;
176
- "248": number;
177
- "232": number;
178
- "65": number;
179
- "386": number;
180
- "677": number;
181
- "27": number;
182
- "211": number;
183
- "34": number;
184
- "94": number;
185
- "249": number;
186
- "597": number;
187
- "268": number;
188
- "46": number;
189
- "41": number;
190
- "963": number;
191
- "886": number;
192
- "992": number;
193
- "255": number;
194
- "66": number;
195
- "228": number;
196
- "690": number;
197
- "676": number;
198
- "1-868": number;
199
- "216": number;
200
- "90": number;
201
- "993": number;
202
- "1-649": number;
203
- "688": number;
204
- "1-340": number;
205
- "256": number;
206
- "380": number;
207
- "971": number;
208
- "44": number;
209
- "1": number;
210
- "598": number;
211
- "998": number;
212
- "678": number;
213
- "379": number;
214
- "58": number;
215
- "681": number;
216
- "967": number;
217
- "260": number;
218
- "263": number;
219
- "670": number;
220
- "245": number;
221
- "856": number;
222
- "599": number;
223
- "850": number;
224
- "262": number;
225
- "82": number;
226
- "84": number;
227
- };
228
6
  export declare const DEFAULT_ORIGIN = "https://web.whatsapp.com";
229
- export declare const MOBILE_ENDPOINT = "g.whatsapp.net";
230
- export declare const MOBILE_PORT = 443;
231
7
  export declare const DEF_CALLBACK_PREFIX = "CB:";
232
8
  export declare const DEF_TAG_PREFIX = "TAG:";
233
9
  export declare const PHONE_CONNECTION_CB = "CB:Pong";
234
10
  export declare const WA_DEFAULT_EPHEMERAL: number;
235
- export declare const MOBILE_TOKEN: Buffer;
236
- export declare const MOBILE_REGISTRATION_ENDPOINT = "https://v.whatsapp.net/v2";
237
- export declare const MOBILE_USERAGENT: string;
238
- export declare const REGISTRATION_PUBLIC_KEY: Buffer;
239
11
  export declare const NOISE_MODE = "Noise_XX_25519_AESGCM_SHA256\0\0\0\0";
240
12
  export declare const DICT_VERSION = 2;
241
13
  export declare const KEY_BUNDLE_TYPE: Buffer;
242
14
  export declare const NOISE_WA_HEADER: Buffer;
243
- export declare const PROTOCOL_VERSION: number[];
244
- export declare const MOBILE_NOISE_HEADER: Buffer;
245
15
  /** from: https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url */
246
16
  export declare const URL_REGEX: RegExp;
247
17
  export declare const WA_CERT_DETAILS: {
@@ -3,38 +3,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DEFAULT_CACHE_TTLS = exports.INITIAL_PREKEY_COUNT = exports.MIN_PREKEY_COUNT = exports.MEDIA_KEYS = exports.MEDIA_HKDF_KEY_MAPPING = exports.MEDIA_PATH_MAP = exports.DEFAULT_CONNECTION_CONFIG = exports.PROCESSABLE_HISTORY_TYPES = exports.WA_CERT_DETAILS = exports.URL_REGEX = exports.MOBILE_NOISE_HEADER = exports.PROTOCOL_VERSION = exports.NOISE_WA_HEADER = exports.KEY_BUNDLE_TYPE = exports.DICT_VERSION = exports.NOISE_MODE = exports.REGISTRATION_PUBLIC_KEY = exports.MOBILE_USERAGENT = exports.MOBILE_REGISTRATION_ENDPOINT = exports.MOBILE_TOKEN = exports.WA_DEFAULT_EPHEMERAL = exports.PHONE_CONNECTION_CB = exports.DEF_TAG_PREFIX = exports.DEF_CALLBACK_PREFIX = exports.MOBILE_PORT = exports.MOBILE_ENDPOINT = exports.DEFAULT_ORIGIN = exports.PHONENUMBER_MCC = exports.UNAUTHORIZED_CODES = void 0;
7
- const crypto_1 = require("crypto");
6
+ exports.DEFAULT_CACHE_TTLS = exports.INITIAL_PREKEY_COUNT = exports.MIN_PREKEY_COUNT = exports.MEDIA_KEYS = exports.MEDIA_HKDF_KEY_MAPPING = exports.MEDIA_PATH_MAP = exports.DEFAULT_CONNECTION_CONFIG = exports.PROCESSABLE_HISTORY_TYPES = exports.WA_CERT_DETAILS = exports.URL_REGEX = exports.NOISE_WA_HEADER = exports.KEY_BUNDLE_TYPE = exports.DICT_VERSION = exports.NOISE_MODE = exports.WA_DEFAULT_EPHEMERAL = exports.PHONE_CONNECTION_CB = exports.DEF_TAG_PREFIX = exports.DEF_CALLBACK_PREFIX = exports.DEFAULT_ORIGIN = exports.UNAUTHORIZED_CODES = void 0;
8
7
  const WAProto_1 = require("../../WAProto");
9
8
  const libsignal_1 = require("../Signal/libsignal");
10
9
  const Utils_1 = require("../Utils");
11
10
  const logger_1 = __importDefault(require("../Utils/logger"));
12
11
  const baileys_version_json_1 = require("./baileys-version.json");
13
- const phonenumber_mcc_json_1 = __importDefault(require("./phonenumber-mcc.json"));
14
12
  exports.UNAUTHORIZED_CODES = [401, 403, 419];
15
- exports.PHONENUMBER_MCC = phonenumber_mcc_json_1.default;
16
13
  exports.DEFAULT_ORIGIN = 'https://web.whatsapp.com';
17
- exports.MOBILE_ENDPOINT = 'g.whatsapp.net';
18
- exports.MOBILE_PORT = 443;
19
14
  exports.DEF_CALLBACK_PREFIX = 'CB:';
20
15
  exports.DEF_TAG_PREFIX = 'TAG:';
21
16
  exports.PHONE_CONNECTION_CB = 'CB:Pong';
22
17
  exports.WA_DEFAULT_EPHEMERAL = 7 * 24 * 60 * 60;
23
- const WA_VERSION = '2.24.6.77';
24
- const WA_VERSION_HASH = (0, crypto_1.createHash)('md5').update(WA_VERSION).digest('hex');
25
- exports.MOBILE_TOKEN = Buffer.from('0a1mLfGUIBVrMKF1RdvLI5lkRBvof6vn0fD2QRSM' + WA_VERSION_HASH);
26
- exports.MOBILE_REGISTRATION_ENDPOINT = 'https://v.whatsapp.net/v2';
27
- exports.MOBILE_USERAGENT = `WhatsApp/${WA_VERSION} iOS/15.3.1 Device/Apple-iPhone_7`;
28
- exports.REGISTRATION_PUBLIC_KEY = Buffer.from([
29
- 5, 142, 140, 15, 116, 195, 235, 197, 215, 166, 134, 92, 108, 60, 132, 56, 86, 176, 97, 33, 204, 232, 234, 119, 77,
30
- 34, 251, 111, 18, 37, 18, 48, 45,
31
- ]);
32
18
  exports.NOISE_MODE = 'Noise_XX_25519_AESGCM_SHA256\0\0\0\0';
33
19
  exports.DICT_VERSION = 2;
34
20
  exports.KEY_BUNDLE_TYPE = Buffer.from([5]);
35
21
  exports.NOISE_WA_HEADER = Buffer.from([87, 65, 6, exports.DICT_VERSION]); // last is "DICT_VERSION"
36
- exports.PROTOCOL_VERSION = [5, 2];
37
- exports.MOBILE_NOISE_HEADER = Buffer.concat([Buffer.from('WA'), Buffer.from(exports.PROTOCOL_VERSION)]);
38
22
  /** from: https://stackoverflow.com/questions/3809401/what-is-a-good-regular-expression-to-match-a-url */
39
23
  exports.URL_REGEX = /(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;
40
24
  exports.WA_CERT_DETAILS = {
@@ -1,3 +1,2 @@
1
- export * from './abstract-socket-client';
2
- export * from './mobile-socket-client';
3
- export * from './web-socket-client';
1
+ export * from './types';
2
+ export * from './websocket';
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./abstract-socket-client"), exports);
18
- __exportStar(require("./mobile-socket-client"), exports);
19
- __exportStar(require("./web-socket-client"), exports);
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./websocket"), exports);
@@ -1,5 +1,5 @@
1
1
  import WebSocket from '@d0v3riz/ws';
2
- import { AbstractSocketClient } from './abstract-socket-client';
2
+ import { AbstractSocketClient } from './types';
3
3
  export declare class WebSocketClient extends AbstractSocketClient {
4
4
  protected socket: WebSocket | null;
5
5
  get isOpen(): boolean;
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WebSocketClient = void 0;
7
7
  const ws_1 = __importDefault(require("@d0v3riz/ws"));
8
8
  const Defaults_1 = require("../../Defaults");
9
- const abstract_socket_client_1 = require("./abstract-socket-client");
10
- class WebSocketClient extends abstract_socket_client_1.AbstractSocketClient {
9
+ const types_1 = require("./types");
10
+ class WebSocketClient extends types_1.AbstractSocketClient {
11
11
  constructor() {
12
12
  super(...arguments);
13
13
  this.socket = null;
@@ -1,5 +1,6 @@
1
1
  /// <reference types="long" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import { GetCatalogOptions, ProductCreate, ProductUpdate, SocketConfig } from '../Types';
4
5
  import { BinaryNode } from '../WABinary';
5
6
  export declare const makeBusinessSocket: (config: SocketConfig) => {
@@ -34,6 +35,13 @@ export declare const makeBusinessSocket: (config: SocketConfig) => {
34
35
  [_: string]: string;
35
36
  }>;
36
37
  sendPeerDataOperationMessage: (pdoMessage: import("../Types").WAProto.Message.IPeerDataOperationRequestMessage) => Promise<string>;
38
+ createParticipantNodes: (jids: string[], message: import("../Types").WAProto.IMessage, extraAttrs?: {
39
+ [key: string]: string;
40
+ } | undefined) => Promise<{
41
+ nodes: BinaryNode[];
42
+ shouldIncludeDeviceIdentity: boolean;
43
+ }>;
44
+ getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<import("../WABinary").JidWithDevice[]>;
37
45
  updateMediaMessage: (message: import("../Types").WAProto.IWebMessageInfo) => Promise<import("../Types").WAProto.IWebMessageInfo>;
38
46
  sendMessage: (jid: string, content: import("../Types").AnyMessageContent, options?: import("../Types").MiscMessageGenerationOptions) => Promise<import("../Types").WAProto.WebMessageInfo | undefined>;
39
47
  groupMetadata: (jid: string) => Promise<import("../Types").GroupMetadata>;
@@ -100,6 +108,7 @@ export declare const makeBusinessSocket: (config: SocketConfig) => {
100
108
  resyncAppState: (collections: readonly ("critical_block" | "critical_unblock_low" | "regular_high" | "regular_low" | "regular")[], isInitialSync: boolean) => Promise<void>;
101
109
  chatModify: (mod: import("../Types").ChatModification, jid: string) => Promise<void>;
102
110
  cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: string | number | undefined) => Promise<void>;
111
+ addLabel: (jid: string, labels: import("../Types/Label").LabelActionBody) => Promise<void>;
103
112
  addChatLabel: (jid: string, labelId: string) => Promise<void>;
104
113
  removeChatLabel: (jid: string, labelId: string) => Promise<void>;
105
114
  addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
@@ -109,7 +118,7 @@ export declare const makeBusinessSocket: (config: SocketConfig) => {
109
118
  fromMe?: boolean | undefined;
110
119
  }[], star: boolean) => Promise<void>;
111
120
  type: "md";
112
- ws: any;
121
+ ws: import("./Client").WebSocketClient;
113
122
  ev: import("../Types").BaileysEventEmitter & {
114
123
  process(handler: (events: Partial<import("../Types").BaileysEventMap>) => void | Promise<void>): () => void;
115
124
  buffer(): void;
@@ -1,7 +1,9 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { Boom } from '@hapi/boom';
3
4
  import { proto } from '../../WAProto';
4
5
  import { ChatModification, MessageUpsertType, SocketConfig, WABusinessProfile, WAMediaUpload, WAPatchCreate, WAPresence, WAPrivacyCallValue, WAPrivacyGroupAddValue, WAPrivacyOnlineValue, WAPrivacyValue, WAReadReceiptsValue } from '../Types';
6
+ import { LabelActionBody } from '../Types/Label';
5
7
  import { BinaryNode } from '../WABinary';
6
8
  export declare const makeChatsSocket: (config: SocketConfig) => {
7
9
  processingMutex: {
@@ -41,6 +43,7 @@ export declare const makeChatsSocket: (config: SocketConfig) => {
41
43
  resyncAppState: (collections: readonly ("critical_block" | "critical_unblock_low" | "regular_high" | "regular_low" | "regular")[], isInitialSync: boolean) => Promise<void>;
42
44
  chatModify: (mod: ChatModification, jid: string) => Promise<void>;
43
45
  cleanDirtyBits: (type: 'account_sync' | 'groups', fromTimestamp?: number | string) => Promise<void>;
46
+ addLabel: (jid: string, labels: LabelActionBody) => Promise<void>;
44
47
  addChatLabel: (jid: string, labelId: string) => Promise<void>;
45
48
  removeChatLabel: (jid: string, labelId: string) => Promise<void>;
46
49
  addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
@@ -50,7 +53,7 @@ export declare const makeChatsSocket: (config: SocketConfig) => {
50
53
  fromMe?: boolean;
51
54
  }[], star: boolean) => Promise<void>;
52
55
  type: "md";
53
- ws: any;
56
+ ws: import("./Client").WebSocketClient;
54
57
  ev: import("../Types").BaileysEventEmitter & {
55
58
  process(handler: (events: Partial<import("../Types").BaileysEventMap>) => void | Promise<void>): () => void;
56
59
  buffer(): void;
@@ -183,11 +183,19 @@ const makeChatsSocket = (config) => {
183
183
  };
184
184
  /** update the profile picture for yourself or a group */
185
185
  const updateProfilePicture = async (jid, content) => {
186
+ let targetJid;
187
+ if (!jid) {
188
+ throw new boom_1.Boom('Illegal no-jid profile update. Please specify either your ID or the ID of the chat you wish to update');
189
+ }
190
+ if ((0, WABinary_1.jidNormalizedUser)(jid) !== (0, WABinary_1.jidNormalizedUser)(authState.creds.me.id)) {
191
+ targetJid = (0, WABinary_1.jidNormalizedUser)(jid); // in case it is someone other than us
192
+ }
186
193
  const { img } = await (0, Utils_1.generateProfilePicture)(content);
187
194
  await query({
188
195
  tag: 'iq',
189
196
  attrs: {
190
- to: (0, WABinary_1.jidNormalizedUser)(jid),
197
+ target: targetJid,
198
+ to: WABinary_1.S_WHATSAPP_NET,
191
199
  type: 'set',
192
200
  xmlns: 'w:profile:picture'
193
201
  },
@@ -202,10 +210,18 @@ const makeChatsSocket = (config) => {
202
210
  };
203
211
  /** remove the profile picture for yourself or a group */
204
212
  const removeProfilePicture = async (jid) => {
213
+ let targetJid;
214
+ if (!jid) {
215
+ throw new boom_1.Boom('Illegal no-jid profile update. Please specify either your ID or the ID of the chat you wish to update');
216
+ }
217
+ if ((0, WABinary_1.jidNormalizedUser)(jid) !== (0, WABinary_1.jidNormalizedUser)(authState.creds.me.id)) {
218
+ targetJid = (0, WABinary_1.jidNormalizedUser)(jid); // in case it is someone other than us
219
+ }
205
220
  await query({
206
221
  tag: 'iq',
207
222
  attrs: {
208
- to: (0, WABinary_1.jidNormalizedUser)(jid),
223
+ target: targetJid,
224
+ to: WABinary_1.S_WHATSAPP_NET,
209
225
  type: 'set',
210
226
  xmlns: 'w:profile:picture'
211
227
  }
@@ -611,7 +627,7 @@ const makeChatsSocket = (config) => {
611
627
  };
612
628
  /** sending non-abt props may fix QR scan fail if server expects */
613
629
  const fetchProps = async () => {
614
- var _a, _b;
630
+ var _a, _b, _c;
615
631
  const resultNode = await query({
616
632
  tag: 'iq',
617
633
  attrs: {
@@ -629,8 +645,10 @@ const makeChatsSocket = (config) => {
629
645
  const propsNode = (0, WABinary_1.getBinaryNodeChild)(resultNode, 'props');
630
646
  let props = {};
631
647
  if (propsNode) {
632
- authState.creds.lastPropHash = (_b = propsNode === null || propsNode === void 0 ? void 0 : propsNode.attrs) === null || _b === void 0 ? void 0 : _b.hash;
633
- ev.emit('creds.update', authState.creds);
648
+ if ((_b = propsNode.attrs) === null || _b === void 0 ? void 0 : _b.hash) { // on some clients, the hash is returning as undefined
649
+ authState.creds.lastPropHash = (_c = propsNode === null || propsNode === void 0 ? void 0 : propsNode.attrs) === null || _c === void 0 ? void 0 : _c.hash;
650
+ ev.emit('creds.update', authState.creds);
651
+ }
634
652
  props = (0, WABinary_1.reduceBinaryNodeToDictionary)(propsNode, 'prop');
635
653
  }
636
654
  logger.debug('fetched props');
@@ -656,6 +674,16 @@ const makeChatsSocket = (config) => {
656
674
  }
657
675
  }, jid);
658
676
  };
677
+ /**
678
+ * Adds label
679
+ */
680
+ const addLabel = (jid, labels) => {
681
+ return chatModify({
682
+ addLabel: {
683
+ ...labels
684
+ }
685
+ }, jid);
686
+ };
659
687
  /**
660
688
  * Adds label for the chats
661
689
  */
@@ -803,14 +831,13 @@ const makeChatsSocket = (config) => {
803
831
  sendPresenceUpdate(markOnlineOnConnect ? 'available' : 'unavailable')
804
832
  .catch(error => onUnexpectedError(error, 'presence update requests'));
805
833
  }
806
- if (receivedPendingNotifications) {
807
- // if we don't have the app state key
834
+ if (receivedPendingNotifications && // if we don't have the app state key
808
835
  // we keep buffering events until we finally have
809
836
  // the key and can sync the messages
810
- if (!((_a = authState.creds) === null || _a === void 0 ? void 0 : _a.myAppStateKeyId) && !config.mobile) {
811
- ev.buffer();
812
- needToFlushWithAppStateSync = true;
813
- }
837
+ // todo scrutinize
838
+ !((_a = authState.creds) === null || _a === void 0 ? void 0 : _a.myAppStateKeyId)) {
839
+ ev.buffer();
840
+ needToFlushWithAppStateSync = true;
814
841
  }
815
842
  });
816
843
  return {
@@ -842,6 +869,7 @@ const makeChatsSocket = (config) => {
842
869
  resyncAppState,
843
870
  chatModify,
844
871
  cleanDirtyBits,
872
+ addLabel,
845
873
  addChatLabel,
846
874
  removeChatLabel,
847
875
  addMessageLabel,
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { proto } from '../../WAProto';
3
4
  import { GroupMetadata, ParticipantAction, SocketConfig } from '../Types';
4
5
  import { BinaryNode } from '../WABinary';
@@ -81,6 +82,7 @@ export declare const makeGroupsSocket: (config: SocketConfig) => {
81
82
  resyncAppState: (collections: readonly ("critical_block" | "critical_unblock_low" | "regular_high" | "regular_low" | "regular")[], isInitialSync: boolean) => Promise<void>;
82
83
  chatModify: (mod: import("../Types").ChatModification, jid: string) => Promise<void>;
83
84
  cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: string | number | undefined) => Promise<void>;
85
+ addLabel: (jid: string, labels: import("../Types/Label").LabelActionBody) => Promise<void>;
84
86
  addChatLabel: (jid: string, labelId: string) => Promise<void>;
85
87
  removeChatLabel: (jid: string, labelId: string) => Promise<void>;
86
88
  addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
@@ -90,7 +92,7 @@ export declare const makeGroupsSocket: (config: SocketConfig) => {
90
92
  fromMe?: boolean | undefined;
91
93
  }[], star: boolean) => Promise<void>;
92
94
  type: "md";
93
- ws: any;
95
+ ws: import("./Client").WebSocketClient;
94
96
  ev: import("../Types").BaileysEventEmitter & {
95
97
  process(handler: (events: Partial<import("../Types").BaileysEventMap>) => void | Promise<void>): () => void;
96
98
  buffer(): void;
@@ -1,9 +1,8 @@
1
1
  /// <reference types="long" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import { UserFacingSocketConfig } from '../Types';
4
5
  declare const makeWASocket: (config: UserFacingSocketConfig) => {
5
- register: (code: string) => Promise<import("./registration").ExistsResponse>;
6
- requestRegistrationCode: (registrationOptions?: import("./registration").RegistrationOptions | undefined) => Promise<import("./registration").ExistsResponse>;
7
6
  logger: import("pino").Logger<import("pino").LoggerOptions>;
8
7
  getOrderDetails: (orderId: string, tokenBase64: string) => Promise<import("../Types").OrderDetails>;
9
8
  getCatalog: ({ jid, limit, cursor }: import("../Types").GetCatalogOptions) => Promise<{
@@ -18,12 +17,12 @@ declare const makeWASocket: (config: UserFacingSocketConfig) => {
18
17
  deleted: number;
19
18
  }>;
20
19
  productUpdate: (productId: string, update: import("../Types").ProductUpdate) => Promise<import("../Types").Product>;
21
- sendMessageAck: ({ tag, attrs, content }: import("../index").BinaryNode) => Promise<void>;
22
- sendRetryRequest: (node: import("../index").BinaryNode, forceIncludeKeys?: boolean) => Promise<void>;
20
+ sendMessageAck: ({ tag, attrs, content }: import("..").BinaryNode) => Promise<void>;
21
+ sendRetryRequest: (node: import("..").BinaryNode, forceIncludeKeys?: boolean) => Promise<void>;
23
22
  rejectCall: (callId: string, callFrom: string) => Promise<void>;
24
23
  fetchMessageHistory: (count: number, oldestMsgKey: import("../Types").WAProto.IMessageKey, oldestMsgTimestamp: number | import("long").Long) => Promise<string>;
25
24
  requestPlaceholderResend: (messageKey: import("../Types").WAProto.IMessageKey) => Promise<string | undefined>;
26
- getPrivacyTokens: (jids: string[]) => Promise<import("../index").BinaryNode>;
25
+ getPrivacyTokens: (jids: string[]) => Promise<import("..").BinaryNode>;
27
26
  assertSessions: (jids: string[], force: boolean) => Promise<boolean>;
28
27
  relayMessage: (jid: string, message: import("../Types").WAProto.IMessage, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, useCachedGroupMetadata, statusJidList }: import("../Types").MessageRelayOptions) => Promise<string>;
29
28
  sendReceipt: (jid: string, participant: string | undefined, messageIds: string[], type: import("../Types").MessageReceiptType) => Promise<void>;
@@ -35,6 +34,13 @@ declare const makeWASocket: (config: UserFacingSocketConfig) => {
35
34
  [_: string]: string;
36
35
  }>;
37
36
  sendPeerDataOperationMessage: (pdoMessage: import("../Types").WAProto.Message.IPeerDataOperationRequestMessage) => Promise<string>;
37
+ createParticipantNodes: (jids: string[], message: import("../Types").WAProto.IMessage, extraAttrs?: {
38
+ [key: string]: string;
39
+ } | undefined) => Promise<{
40
+ nodes: import("..").BinaryNode[];
41
+ shouldIncludeDeviceIdentity: boolean;
42
+ }>;
43
+ getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<import("..").JidWithDevice[]>;
38
44
  updateMediaMessage: (message: import("../Types").WAProto.IWebMessageInfo) => Promise<import("../Types").WAProto.IWebMessageInfo>;
39
45
  sendMessage: (jid: string, content: import("../Types").AnyMessageContent, options?: import("../Types").MiscMessageGenerationOptions) => Promise<import("../Types").WAProto.WebMessageInfo | undefined>;
40
46
  groupMetadata: (jid: string) => Promise<import("../Types").GroupMetadata>;
@@ -51,7 +57,7 @@ declare const makeWASocket: (config: UserFacingSocketConfig) => {
51
57
  groupParticipantsUpdate: (jid: string, participants: string[], action: import("../Types").ParticipantAction) => Promise<{
52
58
  status: string;
53
59
  jid: string;
54
- content: import("../index").BinaryNode;
60
+ content: import("..").BinaryNode;
55
61
  }[]>;
56
62
  groupUpdateDescription: (jid: string, description?: string | undefined) => Promise<void>;
57
63
  groupInviteCode: (jid: string) => Promise<string | undefined>;
@@ -101,6 +107,7 @@ declare const makeWASocket: (config: UserFacingSocketConfig) => {
101
107
  resyncAppState: (collections: readonly ("critical_block" | "critical_unblock_low" | "regular_high" | "regular_low" | "regular")[], isInitialSync: boolean) => Promise<void>;
102
108
  chatModify: (mod: import("../Types").ChatModification, jid: string) => Promise<void>;
103
109
  cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: string | number | undefined) => Promise<void>;
110
+ addLabel: (jid: string, labels: import("../Types/Label").LabelActionBody) => Promise<void>;
104
111
  addChatLabel: (jid: string, labelId: string) => Promise<void>;
105
112
  removeChatLabel: (jid: string, labelId: string) => Promise<void>;
106
113
  addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
@@ -110,7 +117,7 @@ declare const makeWASocket: (config: UserFacingSocketConfig) => {
110
117
  fromMe?: boolean | undefined;
111
118
  }[], star: boolean) => Promise<void>;
112
119
  type: "md";
113
- ws: any;
120
+ ws: import("./Client").WebSocketClient;
114
121
  ev: import("../Types").BaileysEventEmitter & {
115
122
  process(handler: (events: Partial<import("../Types").BaileysEventMap>) => void | Promise<void>): () => void;
116
123
  buffer(): void;
@@ -125,11 +132,11 @@ declare const makeWASocket: (config: UserFacingSocketConfig) => {
125
132
  signalRepository: import("../Types").SignalRepository;
126
133
  user: import("../Types").Contact | undefined;
127
134
  generateMessageTag: () => string;
128
- query: (node: import("../index").BinaryNode, timeoutMs?: number | undefined) => Promise<import("../index").BinaryNode>;
135
+ query: (node: import("..").BinaryNode, timeoutMs?: number | undefined) => Promise<import("..").BinaryNode>;
129
136
  waitForMessage: <T_2>(msgId: string, timeoutMs?: number | undefined) => Promise<T_2>;
130
137
  waitForSocketOpen: () => Promise<void>;
131
138
  sendRawMessage: (data: Uint8Array | Buffer) => Promise<void>;
132
- sendNode: (frame: import("../index").BinaryNode) => Promise<void>;
139
+ sendNode: (frame: import("..").BinaryNode) => Promise<void>;
133
140
  logout: (msg?: string | undefined) => Promise<void>;
134
141
  end: (error: Error | undefined) => void;
135
142
  onUnexpectedError: (err: Error | import("@hapi/boom").Boom<any>, msg: string) => void;
@@ -137,6 +144,6 @@ declare const makeWASocket: (config: UserFacingSocketConfig) => {
137
144
  uploadPreKeysToServerIfRequired: () => Promise<void>;
138
145
  requestPairingCode: (phoneNumber: string) => Promise<string>;
139
146
  waitForConnectionUpdate: (check: (u: Partial<import("../Types").ConnectionState>) => boolean | undefined, timeoutMs?: number | undefined) => Promise<void>;
140
- sendWAMBuffer: (wamBuffer: Buffer) => Promise<import("../index").BinaryNode>;
147
+ sendWAMBuffer: (wamBuffer: Buffer) => Promise<import("..").BinaryNode>;
141
148
  };
142
149
  export default makeWASocket;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const Defaults_1 = require("../Defaults");
4
- const registration_1 = require("./registration");
4
+ const business_1 = require("./business");
5
5
  // export the last socket layer
6
- const makeWASocket = (config) => ((0, registration_1.makeRegistrationSocket)({
6
+ const makeWASocket = (config) => ((0, business_1.makeBusinessSocket)({
7
7
  ...Defaults_1.DEFAULT_CONNECTION_CONFIG,
8
8
  ...config
9
9
  }));