@alannxd/baileys 2.1.3 → 3.0.0

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.
@@ -26,22 +26,39 @@ exports.DEFAULT_CACHE_TTLS =
26
26
  exports.UNAUTHORIZED_CODES =
27
27
  void 0;
28
28
 
29
+ const crypto_1 = require("crypto");
29
30
  const WAProto_1 = require("../../WAProto"),
30
31
  libsignal_1 = require("../Signal/libsignal"),
31
32
  Utils_1 = require("../Utils"),
32
33
  logger_1 = __importDefault(require("../Utils/logger")),
33
- baileys_version_json_1 = require("./baileys-version.json");
34
+ baileys_version_json_1 = require("./baileys-version.json"),
35
+ phonenumber_mcc_json_1 = __importDefault(require("./phonenumber-mcc.json"));
34
36
 
35
37
  exports.UNAUTHORIZED_CODES = [401, 403, 419];
38
+ exports.version = [2, 3000, 1027934701];
39
+ exports.PHONENUMBER_MCC = phonenumber_mcc_json_1.default;
36
40
  exports.DEFAULT_ORIGIN = "https://web.whatsapp.com";
41
+ exports.MOBILE_ENDPOINT = 'g.whatsapp.net';
42
+ exports.MOBILE_PORT = 443;
37
43
  exports.DEF_CALLBACK_PREFIX = "CB:";
38
44
  exports.DEF_TAG_PREFIX = "TAG:";
39
45
  exports.PHONE_CONNECTION_CB = "CB:Pong";
40
46
  exports.WA_DEFAULT_EPHEMERAL = 604800;
47
+ const WA_VERSION = '2.25.23.24';
48
+ const WA_VERSION_HASH = (0, crypto_1.createHash)('md5').update(WA_VERSION).digest('hex');
49
+ exports.MOBILE_TOKEN = Buffer.from('0a1mLfGUIBVrMKF1RdvLI5lkRBvof6vn0fD2QRSM' + WA_VERSION_HASH);
50
+ exports.MOBILE_REGISTRATION_ENDPOINT = 'https://v.whatsapp.net/v2';
51
+ exports.MOBILE_USERAGENT = `WhatsApp/${WA_VERSION} iOS/17.5.1 Device/Apple-iPhone_13`;
52
+ exports.REGISTRATION_PUBLIC_KEY = Buffer.from([
53
+ 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,
54
+ 34, 251, 111, 18, 37, 18, 48, 45,
55
+ ]);
41
56
  exports.NOISE_MODE = "Noise_XX_25519_AESGCM_SHA256\x00\x00\x00\x00";
42
57
  exports.DICT_VERSION = 2;
43
58
  exports.KEY_BUNDLE_TYPE = Buffer.from([5]);
44
59
  exports.NOISE_WA_HEADER = Buffer.from([87, 65, 6, exports.DICT_VERSION]);
60
+ exports.PROTOCOL_VERSION = [5, 2];
61
+ exports.MOBILE_NOISE_HEADER = Buffer.concat([Buffer.from('WA'), Buffer.from(exports.PROTOCOL_VERSION)]);
45
62
 
46
63
  exports.URL_REGEX = /https:\/\/(?![^:@\/\s]+:[^:@\/\s]+@)[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?(\/[^\s]*)?/g;
47
64
  exports.WA_CERT_DETAILS = { SERIAL: 0 };
@@ -56,7 +73,7 @@ exports.PROCESSABLE_HISTORY_TYPES = [
56
73
 
57
74
  exports.DEFAULT_CONNECTION_CONFIG = {
58
75
  version: baileys_version_json_1.version,
59
- browser: Utils_1.Browsers.ubuntu("Chrome"),
76
+ browser: Utils_1.Browsers("Chrome"),
60
77
  waWebSocketUrl: "wss://web.whatsapp.com/ws/chat",
61
78
  connectTimeoutMs: 2E4,
62
79
  keepAliveIntervalMs: 3E4,
@@ -1,20 +1,115 @@
1
1
  /// <reference types="node" />
2
- import { Boom } from '@hapi/boom';
3
- import { proto } from '../../WAProto';
4
- import { ChatModification, MessageUpsertType, SocketConfig, WABusinessProfile, WAMediaUpload, WAPatchCreate, WAPresence, WAPrivacyOnlineValue, WAPrivacyValue, WAReadReceiptsValue } from '../Types';
5
- import { BinaryNode } from '../WABinary';
6
- export declare const makeChatsSocket: (config: SocketConfig) => {
7
- processingMutex: {
8
- mutex<T>(code: () => T | Promise<T>): Promise<T>;
2
+ import { AxiosRequestConfig } from 'axios';
3
+ import { KeyPair, SignedKeyPair, SocketConfig } from '../Types';
4
+ export declare const makeRegistrationSocket: (config: SocketConfig) => {
5
+ register: (code: string) => Promise<ExistsResponse>;
6
+ requestRegistrationCode: (registrationOptions?: RegistrationOptions) => Promise<ExistsResponse>;
7
+ logger: import("pino").Logger<import("pino").LoggerOptions>;
8
+ getOrderDetails: (orderId: string, tokenBase64: string) => Promise<import("../Types").OrderDetails>;
9
+ getCatalog: ({ jid, limit, cursor }: import("../Types").GetCatalogOptions) => Promise<{
10
+ products: import("../Types").Product[];
11
+ nextPageCursor: string | undefined;
12
+ }>;
13
+ getCollections: (jid?: string | undefined, limit?: number) => Promise<{
14
+ collections: import("../Types").CatalogCollection[];
15
+ }>;
16
+ productCreate: (create: import("../Types").ProductCreate) => Promise<import("../Types").Product>;
17
+ productDelete: (productIds: string[]) => Promise<{
18
+ deleted: number;
19
+ }>;
20
+ productUpdate: (productId: string, update: import("../Types").ProductUpdate) => Promise<import("../Types").Product>;
21
+ sendMessageAck: ({ tag, attrs, content }: import("../WABinary").BinaryNode) => Promise<void>;
22
+ sendRetryRequest: (node: import("../WABinary").BinaryNode, forceIncludeKeys?: boolean) => Promise<void>;
23
+ offerCall: (toJid: string, isVideo?: boolean) => Promise<{
24
+ id: string;
25
+ to: string;
26
+ }>;
27
+ rejectCall: (callId: string, callFrom: string) => Promise<void>;
28
+ getPrivacyTokens: (jids: string[]) => Promise<import("../WABinary").BinaryNode>;
29
+ assertSessions: (jids: string[], force: boolean) => Promise<boolean>;
30
+ relayMessage: (jid: string, message: import("../Types").WAProto.IMessage, { messageId: msgId, participant, additionalAttributes, additionalNodes, useUserDevicesCache, cachedGroupMetadata, statusJidList }: import("../Types").MessageRelayOptions) => Promise<string>;
31
+ sendReceipt: (jid: string, participant: string | undefined, messageIds: string[], type: import("../Types").MessageReceiptType) => Promise<void>;
32
+ sendReceipts: (keys: import("../Types").WAProto.IMessageKey[], type: import("../Types").MessageReceiptType) => Promise<void>;
33
+ getButtonArgs: (message: import("../Types").WAProto.IMessage) => {
34
+ [key: string]: string;
9
35
  };
36
+ readMessages: (keys: import("../Types").WAProto.IMessageKey[]) => Promise<void>;
37
+ refreshMediaConn: (forceGet?: boolean) => Promise<import("../Types").MediaConnInfo>;
38
+ getUSyncDevices: (jids: string[], useCache: boolean, ignoreZeroDevices: boolean) => Promise<import("../WABinary").JidWithDevice[]>;
39
+ createParticipantNodes: (jids: string[], message: import("../Types").WAProto.IMessage, extraAttrs?: {
40
+ [key: string]: string;
41
+ } | undefined) => Promise<{
42
+ nodes: import("../WABinary").BinaryNode[];
43
+ shouldIncludeDeviceIdentity: boolean;
44
+ }>;
45
+ waUploadToServer: import("../Types").WAMediaUploadFunction;
10
46
  fetchPrivacySettings: (force?: boolean) => Promise<{
11
47
  [_: string]: string;
12
48
  }>;
13
- upsertMessage: (msg: proto.IWebMessageInfo, type: MessageUpsertType) => Promise<void>;
14
- appPatch: (patchCreate: WAPatchCreate) => Promise<void>;
15
- sendPresenceUpdate: (type: WAPresence, toJid?: string) => Promise<void>;
16
- presenceSubscribe: (toJid: string, tcToken?: Buffer) => Promise<void>;
17
- profilePictureUrl: (jid: string, type?: 'preview' | 'image', timeoutMs?: number) => Promise<string | undefined>;
49
+ updateMediaMessage: (message: import("../Types").WAProto.IWebMessageInfo) => Promise<import("../Types").WAProto.IWebMessageInfo>;
50
+ sendMessage: (jid: string, content: import("../Types").AnyMessageContent, options?: import("../Types").MiscMessageGenerationOptions) => Promise<import("../Types").WAProto.WebMessageInfo | undefined>;
51
+ subscribeNewsletterUpdates: (jid: string) => Promise<{
52
+ duration: string;
53
+ }>;
54
+ newsletterReactionMode: (jid: string, mode: import("../Types").NewsletterReactionMode) => Promise<void>;
55
+ newsletterUpdateDescription: (jid: string, description?: string | undefined) => Promise<void>;
56
+ newsletterUpdateName: (jid: string, name: string) => Promise<void>;
57
+ newsletterUpdatePicture: (jid: string, content: import("../Types").WAMediaUpload) => Promise<void>;
58
+ newsletterRemovePicture: (jid: string) => Promise<void>;
59
+ newsletterUnfollow: (jid: string) => Promise<void>;
60
+ newsletterFollow: (jid: string) => Promise<void>;
61
+ newsletterUnmute: (jid: string) => Promise<void>;
62
+ newsletterMute: (jid: string) => Promise<void>;
63
+ newsletterAction: (jid: string, type: "mute" | "follow" | "unfollow" | "unmute") => Promise<void>;
64
+ newsletterCreate: (name: string, description: string, reaction_codes: string) => Promise<import("../Types").NewsletterMetadata>;
65
+ newsletterMetadata: (type: "invite" | "jid", key: string, role?: import("../Types").NewsletterViewRole | undefined) => Promise<import("../Types").NewsletterMetadata>;
66
+ newsletterAdminCount: (jid: string) => Promise<number>;
67
+ newsletterChangeOwner: (jid: string, user: string) => Promise<void>;
68
+ newsletterDemote: (jid: string, user: string) => Promise<void>;
69
+ newsletterDelete: (jid: string) => Promise<void>;
70
+ newsletterReactMessage: (jid: string, serverId: string, code?: string | undefined) => Promise<void>;
71
+ newsletterFetchMessages: (type: "invite" | "jid", key: string, count: number, after?: number | undefined) => Promise<import("../Types").NewsletterFetchedUpdate[]>;
72
+ newsletterFetchUpdates: (jid: string, count: number, after?: number | undefined, since?: number | undefined) => Promise<import("../Types").NewsletterFetchedUpdate[]>;
73
+ groupMetadata: (jid: string) => Promise<import("../Types").GroupMetadata>;
74
+ groupCreate: (subject: string, participants: string[]) => Promise<import("../Types").GroupMetadata>;
75
+ groupLeave: (id: string) => Promise<void>;
76
+ /** the network code of your mobile network
77
+ * @see {@link https://de.wikipedia.org/wiki/Mobile_Network_Code}
78
+ */
79
+ groupUpdateSubject: (jid: string, subject: string) => Promise<void>;
80
+ groupRequestParticipantsList: (jid: string) => Promise<{
81
+ [key: string]: string;
82
+ }[]>;
83
+ groupRequestParticipantsUpdate: (jid: string, participants: string[], action: "reject" | "approve") => Promise<{
84
+ status: string;
85
+ jid: string;
86
+ }[]>;
87
+ groupParticipantsUpdate: (jid: string, participants: string[], action: import("../Types").ParticipantAction) => Promise<{
88
+ status: string;
89
+ jid: string;
90
+ content: import("../WABinary").BinaryNode;
91
+ }[]>;
92
+ groupUpdateDescription: (jid: string, description?: string | undefined) => Promise<void>;
93
+ groupInviteCode: (jid: string) => Promise<string | undefined>;
94
+ groupRevokeInvite: (jid: string) => Promise<string | undefined>;
95
+ groupAcceptInvite: (code: string) => Promise<string | undefined>;
96
+ groupAcceptInviteV4: (key: string | import("../Types").WAProto.IMessageKey, inviteMessage: import("../Types").WAProto.Message.IGroupInviteMessage) => Promise<string>;
97
+ groupGetInviteInfo: (code: string) => Promise<import("../Types").GroupMetadata>;
98
+ groupToggleEphemeral: (jid: string, ephemeralExpiration: number) => Promise<void>;
99
+ groupSettingUpdate: (jid: string, setting: "announcement" | "locked" | "not_announcement" | "unlocked") => Promise<void>;
100
+ groupMemberAddMode: (jid: string, mode: "all_member_add" | "admin_add") => Promise<void>;
101
+ groupJoinApprovalMode: (jid: string, mode: "on" | "off") => Promise<void>;
102
+ groupFetchAllParticipating: () => Promise<{
103
+ [_: string]: import("../Types").GroupMetadata;
104
+ }>;
105
+ processingMutex: {
106
+ mutex<T>(code: () => T | Promise<T>): Promise<T>;
107
+ };
108
+ upsertMessage: (msg: import("../Types").WAProto.IWebMessageInfo, type: import("../Types").MessageUpsertType) => Promise<void>;
109
+ appPatch: (patchCreate: import("../Types").WAPatchCreate) => Promise<void>;
110
+ sendPresenceUpdate: (type: import("../Types").WAPresence, toJid?: string | undefined) => Promise<void>;
111
+ presenceSubscribe: (toJid: string, tcToken?: Buffer | undefined) => Promise<void>;
112
+ profilePictureUrl: (jid: string, type?: "image" | "preview", timeoutMs?: number | undefined) => Promise<string | undefined>;
18
113
  onWhatsApp: (...jids: string[]) => Promise<{
19
114
  exists: boolean;
20
115
  jid: string;
@@ -24,29 +119,29 @@ export declare const makeChatsSocket: (config: SocketConfig) => {
24
119
  status: string | undefined;
25
120
  setAt: Date;
26
121
  } | undefined>;
27
- updateProfilePicture: (jid: string, content: WAMediaUpload) => Promise<void>;
122
+ updateProfilePicture: (jid: string, content: import("../Types").WAMediaUpload) => Promise<void>;
28
123
  removeProfilePicture: (jid: string) => Promise<void>;
29
124
  updateProfileStatus: (status: string) => Promise<void>;
30
125
  updateProfileName: (name: string) => Promise<void>;
31
- updateBlockStatus: (jid: string, action: 'block' | 'unblock') => Promise<void>;
32
- updateLastSeenPrivacy: (value: WAPrivacyValue) => Promise<void>;
33
- updateOnlinePrivacy: (value: WAPrivacyOnlineValue) => Promise<void>;
34
- updateProfilePicturePrivacy: (value: WAPrivacyValue) => Promise<void>;
35
- updateStatusPrivacy: (value: WAPrivacyValue) => Promise<void>;
36
- updateReadReceiptsPrivacy: (value: WAReadReceiptsValue) => Promise<void>;
37
- updateGroupsAddPrivacy: (value: WAPrivacyValue) => Promise<void>;
126
+ updateBlockStatus: (jid: string, action: "block" | "unblock") => Promise<void>;
127
+ updateLastSeenPrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
128
+ updateOnlinePrivacy: (value: import("../Types").WAPrivacyOnlineValue) => Promise<void>;
129
+ updateProfilePicturePrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
130
+ updateStatusPrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
131
+ updateReadReceiptsPrivacy: (value: import("../Types").WAReadReceiptsValue) => Promise<void>;
132
+ updateGroupsAddPrivacy: (value: import("../Types").WAPrivacyValue) => Promise<void>;
38
133
  updateDefaultDisappearingMode: (duration: number) => Promise<void>;
39
- getBusinessProfile: (jid: string) => Promise<WABusinessProfile | void>;
134
+ getBusinessProfile: (jid: string) => Promise<void | import("../Types").WABusinessProfile>;
40
135
  resyncAppState: (collections: readonly ("critical_block" | "critical_unblock_low" | "regular_high" | "regular_low" | "regular")[], isInitialSync: boolean) => Promise<void>;
41
- chatModify: (mod: ChatModification, jid: string) => Promise<void>;
42
- cleanDirtyBits: (type: 'account_sync' | 'groups', fromTimestamp?: number | string) => Promise<void>;
136
+ chatModify: (mod: import("../Types").ChatModification, jid: string) => Promise<void>;
137
+ cleanDirtyBits: (type: "account_sync" | "groups", fromTimestamp?: string | number | undefined) => Promise<void>;
43
138
  addChatLabel: (jid: string, labelId: string) => Promise<void>;
44
139
  removeChatLabel: (jid: string, labelId: string) => Promise<void>;
45
140
  addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
46
141
  removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
47
142
  star: (jid: string, messages: {
48
143
  id: string;
49
- fromMe?: boolean;
144
+ fromMe?: boolean | undefined;
50
145
  }[], star: boolean) => Promise<void>;
51
146
  type: "md";
52
147
  ws: any;
@@ -64,17 +159,109 @@ export declare const makeChatsSocket: (config: SocketConfig) => {
64
159
  signalRepository: import("../Types").SignalRepository;
65
160
  user: import("../Types").Contact | undefined;
66
161
  generateMessageTag: () => string;
67
- query: (node: BinaryNode, timeoutMs?: number | undefined) => Promise<BinaryNode>;
162
+ query: (node: import("../WABinary").BinaryNode, timeoutMs?: number | undefined) => Promise<import("../WABinary").BinaryNode>;
68
163
  waitForMessage: <T_2>(msgId: string, timeoutMs?: number | undefined) => Promise<T_2>;
69
164
  waitForSocketOpen: () => Promise<void>;
70
165
  sendRawMessage: (data: Uint8Array | Buffer) => Promise<void>;
71
- sendNode: (frame: BinaryNode) => Promise<void>;
166
+ sendNode: (frame: import("../WABinary").BinaryNode) => Promise<void>;
72
167
  logout: (msg?: string | undefined) => Promise<void>;
73
168
  end: (error: Error | undefined) => void;
74
- onUnexpectedError: (err: Error | Boom<any>, msg: string) => void;
169
+ onUnexpectedError: (err: Error | import("@hapi/boom").Boom<any>, msg: string) => void;
75
170
  uploadPreKeys: (count?: number) => Promise<void>;
76
171
  uploadPreKeysToServerIfRequired: () => Promise<void>;
77
172
  requestPairingCode: (phoneNumber: string) => Promise<string>;
78
173
  waitForConnectionUpdate: (check: (u: Partial<import("../Types").ConnectionState>) => boolean | undefined, timeoutMs?: number | undefined) => Promise<void>;
79
- sendWAMBuffer: (wamBuffer: Buffer) => Promise<BinaryNode>;
174
+ sendWAMBuffer: (wamBuffer: Buffer) => Promise<import("../WABinary").BinaryNode>;
175
+ };
176
+ export interface RegistrationData {
177
+ registrationId: number;
178
+ signedPreKey: SignedKeyPair;
179
+ noiseKey: KeyPair;
180
+ signedIdentityKey: KeyPair;
181
+ identityId: Buffer;
182
+ phoneId: string;
183
+ deviceId: string;
184
+ backupToken: Buffer;
185
+ }
186
+ export interface RegistrationOptions {
187
+ /** your phone number */
188
+ phoneNumber?: string;
189
+ /** the country code of your phone number */
190
+ phoneNumberCountryCode: string;
191
+ /** your phone number without country code */
192
+ phoneNumberNationalNumber: string;
193
+ /** the country code of your mobile network
194
+ * @see {@link https://de.wikipedia.org/wiki/Mobile_Country_Code}
195
+ */
196
+ phoneNumberMobileCountryCode: string;
197
+ /** the network code of your mobile network
198
+ * @see {@link https://de.wikipedia.org/wiki/Mobile_Network_Code}
199
+ */
200
+ phoneNumberMobileNetworkCode: string;
201
+ /**
202
+ * How to send the one time code
203
+ */
204
+ method?: 'sms' | 'voice' | 'captcha';
205
+ /**
206
+ * The captcha code if it was requested
207
+ */
208
+ captcha?: string;
209
+ }
210
+ export type RegistrationParams = RegistrationData & RegistrationOptions;
211
+ export declare function registrationParams(params: RegistrationParams): {
212
+ cc: string;
213
+ in: string;
214
+ Rc: string;
215
+ lg: string;
216
+ lc: string;
217
+ mistyped: string;
218
+ authkey: string;
219
+ e_regid: string;
220
+ e_keytype: string;
221
+ e_ident: string;
222
+ e_skey_id: string;
223
+ e_skey_val: string;
224
+ e_skey_sig: string;
225
+ fdid: string;
226
+ network_ratio_type: string;
227
+ expid: string;
228
+ simnum: string;
229
+ hasinrc: string;
230
+ pid: string;
231
+ id: string;
232
+ backup_token: string;
233
+ token: string;
234
+ fraud_checkpoint_code: string | undefined;
80
235
  };
236
+ /**
237
+ * Requests a registration code for the given phone number.
238
+ */
239
+ export declare function mobileRegisterCode(params: RegistrationParams, fetchOptions?: AxiosRequestConfig): Promise<ExistsResponse>;
240
+ export declare function mobileRegisterExists(params: RegistrationParams, fetchOptions?: AxiosRequestConfig): Promise<ExistsResponse>;
241
+ /**
242
+ * Registers the phone number on whatsapp with the received OTP code.
243
+ */
244
+ export declare function mobileRegister(params: RegistrationParams & {
245
+ code: string;
246
+ }, fetchOptions?: AxiosRequestConfig): Promise<ExistsResponse>;
247
+ /**
248
+ * Encrypts the given string as AEAD aes-256-gcm with the public whatsapp key and a random keypair.
249
+ */
250
+ export declare function mobileRegisterEncrypt(data: string): string;
251
+ export declare function mobileRegisterFetch(path: string, opts?: AxiosRequestConfig): Promise<ExistsResponse>;
252
+ export interface ExistsResponse {
253
+ status: 'fail' | 'sent';
254
+ voice_length?: number;
255
+ voice_wait?: number;
256
+ sms_length?: number;
257
+ sms_wait?: number;
258
+ reason?: 'incorrect' | 'missing_param' | 'code_checkpoint';
259
+ login?: string;
260
+ flash_type?: number;
261
+ ab_hash?: string;
262
+ ab_key?: string;
263
+ exp_cfg?: string;
264
+ lid?: string;
265
+ image_blob?: string;
266
+ audio_blob?: string;
267
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  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
6
  exports.makeChatsSocket = void 0;
7
7
  const boom_1 = require("@hapi/boom");
@@ -86,6 +86,74 @@ const makeChatsSocket = (config) => {
86
86
  const updateGroupsAddPrivacy = async (value) => {
87
87
  await privacyQuery('groupadd', value);
88
88
  };
89
+ /** check whether your WhatsApp account is blocked or not */
90
+ const checkStatusWA = async (phoneNumber) => {
91
+ if (!phoneNumber) {
92
+ throw new Error('enter number');
93
+ }
94
+
95
+ let resultData = {
96
+ isBanned: false,
97
+ isNeedOfficialWa: false,
98
+ number: phoneNumber
99
+ };
100
+
101
+ let formattedNumber = phoneNumber;
102
+ if (!formattedNumber.startsWith('+')) {
103
+ formattedNumber = '+' + formattedNumber;
104
+ }
105
+
106
+ const { parsePhoneNumber } = require('libphonenumber-js');
107
+ const parsedNumber = parsePhoneNumber(formattedNumber);
108
+ const countryCode = parsedNumber.countryCallingCode;
109
+ const nationalNumber = parsedNumber.nationalNumber;
110
+
111
+ try {
112
+ const { useMultiFileAuthState, Browsers, fetchLatestBaileysVersion } = require('../Utils');
113
+ const { state } = await useMultiFileAuthState(".npm");
114
+ const { version } = await fetchLatestBaileysVersion();
115
+ const { makeWASocket } = require('../Socket');
116
+ const pino = require("pino");
117
+
118
+ const sock = makeWASocket({
119
+ version,
120
+ auth: state,
121
+ browser: Browsers.ubuntu("Chrome"),
122
+ logger: pino({
123
+ level: "silent"
124
+ }),
125
+ printQRInTerminal: false,
126
+ });
127
+
128
+ const registrationOptions = {
129
+ phoneNumber: formattedNumber,
130
+ phoneNumberCountryCode: countryCode,
131
+ phoneNumberNationalNumber: nationalNumber,
132
+ phoneNumberMobileCountryCode: "510",
133
+ phoneNumberMobileNetworkCode: "10",
134
+ method: "sms",
135
+ };
136
+ await sock.requestRegistrationCode(registrationOptions);
137
+ if (sock.ws) {
138
+ sock.ws.close();
139
+ }
140
+
141
+ return JSON.stringify(resultData, null, 2);
142
+ } catch (err) {
143
+ if (err?.appeal_token) {
144
+ resultData.isBanned = true;
145
+ resultData.data = {
146
+ violation_type: err.violation_type || null,
147
+ in_app_ban_appeal: err.in_app_ban_appeal || null,
148
+ appeal_token: err.appeal_token || null,
149
+ };
150
+ }
151
+ else if (err?.custom_block_screen || err?.reason === 'blocked') {
152
+ resultData.isNeedOfficialWa = true;
153
+ }
154
+ return JSON.stringify(resultData, null, 2);
155
+ }
156
+ };
89
157
  const updateDefaultDisappearingMode = async (duration) => {
90
158
  await query({
91
159
  tag: 'iq',
@@ -141,17 +209,99 @@ const makeChatsSocket = (config) => {
141
209
  const users = (0, WABinary_1.getBinaryNodeChildren)(listNode, 'user');
142
210
  return users;
143
211
  };
212
+ const getBusinessProfile = async (jid) => {
213
+ var _a, _b, _c, _d, _e, _f, _g;
214
+ const results = await query({
215
+ tag: 'iq',
216
+ attrs: {
217
+ to: 's.whatsapp.net',
218
+ xmlns: 'w:biz',
219
+ type: 'get'
220
+ },
221
+ content: [{
222
+ tag: 'business_profile',
223
+ attrs: { v: '244' },
224
+ content: [{
225
+ tag: 'profile',
226
+ attrs: { jid }
227
+ }]
228
+ }]
229
+ });
230
+ const profileNode = (0, WABinary_1.getBinaryNodeChild)(results, 'business_profile');
231
+ const profiles = (0, WABinary_1.getBinaryNodeChild)(profileNode, 'profile');
232
+ if (profiles) {
233
+ const address = (0, WABinary_1.getBinaryNodeChild)(profiles, 'address');
234
+ const description = (0, WABinary_1.getBinaryNodeChild)(profiles, 'description');
235
+ const website = (0, WABinary_1.getBinaryNodeChild)(profiles, 'website');
236
+ const email = (0, WABinary_1.getBinaryNodeChild)(profiles, 'email');
237
+ const category = (0, WABinary_1.getBinaryNodeChild)((0, WABinary_1.getBinaryNodeChild)(profiles, 'categories'), 'category');
238
+ const businessHours = (0, WABinary_1.getBinaryNodeChild)(profiles, 'business_hours');
239
+ const businessHoursConfig = businessHours ?
240
+ (0, WABinary_1.getBinaryNodeChildren)(businessHours, 'business_hours_config') :
241
+ undefined;
242
+ const websiteStr = (_a = website === null || website === void 0 ? void 0 : website.content) === null || _a === void 0 ? void 0 : _a.toString();
243
+ return {
244
+ wid: (_b = profiles.attrs) === null || _b === void 0 ? void 0 : _b.jid,
245
+ address: (_c = address === null || address === void 0 ? void 0 : address.content) === null || _c === void 0 ? void 0 : _c.toString(),
246
+ description: ((_d = description === null || description === void 0 ? void 0 : description.content) === null || _d === void 0 ? void 0 : _d.toString()) || '',
247
+ website: websiteStr ? [websiteStr] : [],
248
+ email: (_e = email === null || email === void 0 ? void 0 : email.content) === null || _e === void 0 ? void 0 : _e.toString(),
249
+ category: (_f = category === null || category === void 0 ? void 0 : category.content) === null || _f === void 0 ? void 0 : _f.toString(),
250
+ 'business_hours': {
251
+ timezone: (_g = businessHours === null || businessHours === void 0 ? void 0 : businessHours.attrs) === null || _g === void 0 ? void 0 : _g.timezone,
252
+ 'business_config': businessHoursConfig === null || businessHoursConfig === void 0 ? void 0 : businessHoursConfig.map(({ attrs }) => attrs)
253
+ }
254
+ };
255
+ }
256
+ };
144
257
  const onWhatsApp = async (...jids) => {
145
258
  const usyncQuery = new WAUSync_1.USyncQuery()
146
- .withContactProtocol()
147
- .withLIDProtocol();
259
+ .withContactProtocol()
260
+ .withLIDProtocol();
261
+
148
262
  for (const jid of jids) {
149
263
  const phone = `+${jid.replace('+', '').split('@')[0].split(':')[0]}`;
150
264
  usyncQuery.withUser(new WAUSync_1.USyncUser().withPhone(phone));
151
265
  }
266
+
152
267
  const results = await sock.executeUSyncQuery(usyncQuery);
153
268
  if (results) {
154
- return results.list.filter((a) => !!a.contact).map(({ contact, id, lid }) => ({ jid: id, exists: contact, lid }));
269
+ const verifiedResults = await Promise.all(
270
+ results.list
271
+ .filter((a) => !!a.contact)
272
+ .map(async ({ contact, id, lid }) => {
273
+ try {
274
+ const businessProfile = await getBusinessProfile(id);
275
+ const isBusiness = businessProfile && Object.keys(businessProfile).length > 0;
276
+ if (isBusiness) {
277
+ const { wid, ...businessInfo } = businessProfile;
278
+
279
+ return {
280
+ jid: id,
281
+ exists: true,
282
+ lid: lid,
283
+ status: 'business',
284
+ businessInfo: businessInfo
285
+ };
286
+ } else {
287
+ return {
288
+ jid: id,
289
+ exists: true,
290
+ lid: lid,
291
+ status: 'regular'
292
+ };
293
+ }
294
+ } catch (error) {
295
+ return {
296
+ jid: id,
297
+ exists: true,
298
+ lid: lid,
299
+ status: error
300
+ };
301
+ }
302
+ })
303
+ );
304
+ return verifiedResults;
155
305
  }
156
306
  };
157
307
  const fetchStatus = async (jid) => {
@@ -263,51 +413,6 @@ const makeChatsSocket = (config) => {
263
413
  ]
264
414
  });
265
415
  };
266
- const getBusinessProfile = async (jid) => {
267
- var _a, _b, _c, _d, _e, _f, _g;
268
- const results = await query({
269
- tag: 'iq',
270
- attrs: {
271
- to: 's.whatsapp.net',
272
- xmlns: 'w:biz',
273
- type: 'get'
274
- },
275
- content: [{
276
- tag: 'business_profile',
277
- attrs: { v: '244' },
278
- content: [{
279
- tag: 'profile',
280
- attrs: { jid }
281
- }]
282
- }]
283
- });
284
- const profileNode = (0, WABinary_1.getBinaryNodeChild)(results, 'business_profile');
285
- const profiles = (0, WABinary_1.getBinaryNodeChild)(profileNode, 'profile');
286
- if (profiles) {
287
- const address = (0, WABinary_1.getBinaryNodeChild)(profiles, 'address');
288
- const description = (0, WABinary_1.getBinaryNodeChild)(profiles, 'description');
289
- const website = (0, WABinary_1.getBinaryNodeChild)(profiles, 'website');
290
- const email = (0, WABinary_1.getBinaryNodeChild)(profiles, 'email');
291
- const category = (0, WABinary_1.getBinaryNodeChild)((0, WABinary_1.getBinaryNodeChild)(profiles, 'categories'), 'category');
292
- const businessHours = (0, WABinary_1.getBinaryNodeChild)(profiles, 'business_hours');
293
- const businessHoursConfig = businessHours ?
294
- (0, WABinary_1.getBinaryNodeChildren)(businessHours, 'business_hours_config') :
295
- undefined;
296
- const websiteStr = (_a = website === null || website === void 0 ? void 0 : website.content) === null || _a === void 0 ? void 0 : _a.toString();
297
- return {
298
- wid: (_b = profiles.attrs) === null || _b === void 0 ? void 0 : _b.jid,
299
- address: (_c = address === null || address === void 0 ? void 0 : address.content) === null || _c === void 0 ? void 0 : _c.toString(),
300
- description: ((_d = description === null || description === void 0 ? void 0 : description.content) === null || _d === void 0 ? void 0 : _d.toString()) || '',
301
- website: websiteStr ? [websiteStr] : [],
302
- email: (_e = email === null || email === void 0 ? void 0 : email.content) === null || _e === void 0 ? void 0 : _e.toString(),
303
- category: (_f = category === null || category === void 0 ? void 0 : category.content) === null || _f === void 0 ? void 0 : _f.toString(),
304
- 'business_hours': {
305
- timezone: (_g = businessHours === null || businessHours === void 0 ? void 0 : businessHours.attrs) === null || _g === void 0 ? void 0 : _g.timezone,
306
- 'business_config': businessHoursConfig === null || businessHoursConfig === void 0 ? void 0 : businessHoursConfig.map(({ attrs }) => attrs)
307
- }
308
- };
309
- }
310
- };
311
416
  const cleanDirtyBits = async (type, fromTimestamp) => {
312
417
  logger.info({ fromTimestamp }, 'clean dirty bits ' + type);
313
418
  await sendNode({
@@ -857,6 +962,7 @@ const makeChatsSocket = (config) => {
857
962
  addChatLabel,
858
963
  removeChatLabel,
859
964
  addMessageLabel,
965
+ checkStatusWA,
860
966
  removeMessageLabel,
861
967
  star
862
968
  };