alwaysaqioo 1.1.3 → 1.1.5

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 (50) hide show
  1. package/README.md +110 -9
  2. package/WAProto/index.js +56886 -17506
  3. package/engine-requirements.js +10 -0
  4. package/lib/Defaults/baileys-version.json +1 -1
  5. package/lib/Defaults/index.js +19 -2
  6. package/lib/Socket/chats.d.ts +215 -32
  7. package/lib/Socket/chats.js +155 -75
  8. package/lib/Socket/groups.js +18 -18
  9. package/lib/Socket/index.js +1 -0
  10. package/lib/Socket/luxu.d.ts +268 -0
  11. package/lib/Socket/luxu.js +591 -0
  12. package/lib/Socket/messages-send.d.ts +2 -2
  13. package/lib/Socket/messages-send.js +327 -348
  14. package/lib/Socket/newsletter.js +111 -21
  15. package/lib/Socket/socket.js +65 -30
  16. package/lib/Types/Newsletter.d.ts +97 -86
  17. package/lib/Types/Newsletter.js +38 -32
  18. package/lib/Utils/generics.js +65 -33
  19. package/lib/Utils/messages-media.js +145 -57
  20. package/lib/Utils/messages.js +26 -14
  21. package/lib/Utils/signal.js +48 -46
  22. package/lib/Utils/use-multi-file-auth-state.js +45 -6
  23. package/lib/Utils/validate-connection.js +89 -65
  24. package/lib/WABinary/constants.d.ts +27 -24
  25. package/lib/WABinary/encode.js +160 -123
  26. package/lib/WABinary/generic-utils.d.ts +2 -1
  27. package/lib/WABinary/generic-utils.js +123 -43
  28. package/lib/index.d.ts +1 -0
  29. package/lib/index.js +11 -4
  30. package/package.json +100 -98
  31. package/WAProto/GenerateStatics.sh +0 -4
  32. package/WAProto/WAProto.proto +0 -3344
  33. package/WAProto/index.d.ts +0 -37016
  34. package/WASignalGroup/GroupProtocol.js +0 -1697
  35. package/WASignalGroup/ciphertext_message.js +0 -16
  36. package/WASignalGroup/group_cipher.js +0 -120
  37. package/WASignalGroup/group_session_builder.js +0 -46
  38. package/WASignalGroup/index.js +0 -5
  39. package/WASignalGroup/keyhelper.js +0 -21
  40. package/WASignalGroup/protobufs.js +0 -3
  41. package/WASignalGroup/queue_job.js +0 -69
  42. package/WASignalGroup/sender_chain_key.js +0 -50
  43. package/WASignalGroup/sender_key_distribution_message.js +0 -78
  44. package/WASignalGroup/sender_key_message.js +0 -92
  45. package/WASignalGroup/sender_key_name.js +0 -70
  46. package/WASignalGroup/sender_key_record.js +0 -56
  47. package/WASignalGroup/sender_key_state.js +0 -129
  48. package/WASignalGroup/sender_message_key.js +0 -39
  49. package/lib/Signal/Group/x +0 -1
  50. package/lib/WAUSync/index.d.ts +0 -3
@@ -0,0 +1,10 @@
1
+ const major = parseInt(process.versions.node.split('.')[0], 10);
2
+
3
+ if (major < 20) {
4
+ console.error(
5
+ `\n❌ This package requires Node.js 20+ to run reliably.\n` +
6
+ ` You are using Node.js ${process.versions.node}.\n` +
7
+ ` Please upgrade to Node.js 20+ to proceed.\n`
8
+ );
9
+ process.exit(1);
10
+ }
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": [2, 3000, 1023223821]
2
+ "version": [2, 3000, 1026924051]
3
3
  }
@@ -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,33 +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>;
28
- getLidUser: (jid: string) => Promise<{
29
- lid: string
30
- id: string
31
- }[] | undefined>
122
+ updateProfilePicture: (jid: string, content: import("../Types").WAMediaUpload) => Promise<void>;
32
123
  removeProfilePicture: (jid: string) => Promise<void>;
33
124
  updateProfileStatus: (status: string) => Promise<void>;
34
125
  updateProfileName: (name: string) => Promise<void>;
35
- updateBlockStatus: (jid: string, action: 'block' | 'unblock') => Promise<void>;
36
- updateLastSeenPrivacy: (value: WAPrivacyValue) => Promise<void>;
37
- updateOnlinePrivacy: (value: WAPrivacyOnlineValue) => Promise<void>;
38
- updateProfilePicturePrivacy: (value: WAPrivacyValue) => Promise<void>;
39
- updateStatusPrivacy: (value: WAPrivacyValue) => Promise<void>;
40
- updateReadReceiptsPrivacy: (value: WAReadReceiptsValue) => Promise<void>;
41
- 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>;
42
133
  updateDefaultDisappearingMode: (duration: number) => Promise<void>;
43
- getBusinessProfile: (jid: string) => Promise<WABusinessProfile | void>;
134
+ getBusinessProfile: (jid: string) => Promise<void | import("../Types").WABusinessProfile>;
44
135
  resyncAppState: (collections: readonly ("critical_block" | "critical_unblock_low" | "regular_high" | "regular_low" | "regular")[], isInitialSync: boolean) => Promise<void>;
45
- chatModify: (mod: ChatModification, jid: string) => Promise<void>;
46
- 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>;
47
138
  addChatLabel: (jid: string, labelId: string) => Promise<void>;
48
139
  removeChatLabel: (jid: string, labelId: string) => Promise<void>;
49
140
  addMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
50
141
  removeMessageLabel: (jid: string, messageId: string, labelId: string) => Promise<void>;
51
142
  star: (jid: string, messages: {
52
143
  id: string;
53
- fromMe?: boolean;
144
+ fromMe?: boolean | undefined;
54
145
  }[], star: boolean) => Promise<void>;
55
146
  type: "md";
56
147
  ws: any;
@@ -68,17 +159,109 @@ export declare const makeChatsSocket: (config: SocketConfig) => {
68
159
  signalRepository: import("../Types").SignalRepository;
69
160
  user: import("../Types").Contact | undefined;
70
161
  generateMessageTag: () => string;
71
- query: (node: BinaryNode, timeoutMs?: number | undefined) => Promise<BinaryNode>;
162
+ query: (node: import("../WABinary").BinaryNode, timeoutMs?: number | undefined) => Promise<import("../WABinary").BinaryNode>;
72
163
  waitForMessage: <T_2>(msgId: string, timeoutMs?: number | undefined) => Promise<T_2>;
73
164
  waitForSocketOpen: () => Promise<void>;
74
165
  sendRawMessage: (data: Uint8Array | Buffer) => Promise<void>;
75
- sendNode: (frame: BinaryNode) => Promise<void>;
166
+ sendNode: (frame: import("../WABinary").BinaryNode) => Promise<void>;
76
167
  logout: (msg?: string | undefined) => Promise<void>;
77
168
  end: (error: Error | undefined) => void;
78
- onUnexpectedError: (err: Error | Boom<any>, msg: string) => void;
169
+ onUnexpectedError: (err: Error | import("@hapi/boom").Boom<any>, msg: string) => void;
79
170
  uploadPreKeys: (count?: number) => Promise<void>;
80
171
  uploadPreKeysToServerIfRequired: () => Promise<void>;
81
172
  requestPairingCode: (phoneNumber: string) => Promise<string>;
82
173
  waitForConnectionUpdate: (check: (u: Partial<import("../Types").ConnectionState>) => boolean | undefined, timeoutMs?: number | undefined) => Promise<void>;
83
- 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;
84
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) => {
@@ -164,31 +314,6 @@ const makeChatsSocket = (config) => {
164
314
  };
165
315
  }
166
316
  };
167
-
168
- const getLidUser = async (jid) => {
169
- if (!jid) throw new boom_1.Boom('Please input a jid user')
170
- if (!WABinary_1.isJidUser(jid)) throw new boom_1.Boom('Invalid JID: Not a user JID!')
171
-
172
- const targetJid = WABinary_1.jidNormalizedUser(jid)
173
- const usyncQuery = new WAUSync_1.USyncQuery()
174
- usyncQuery.protocols.push({
175
- name: 'lid',
176
- getQueryElement: () => ({
177
- tag: 'lid',
178
- attrs: {},
179
- content: undefined
180
- }),
181
- getUserElement: () => null,
182
- parser: (node) => node.attrs.val
183
- })
184
- usyncQuery.users.push({
185
- id: targetJid
186
- })
187
- const result = await sock.executeUSyncQuery(usyncQuery)
188
- if (result) {
189
- return result.list
190
- }
191
- }
192
317
  /** update the profile picture for yourself or a group */
193
318
  const updateProfilePicture = async (jid, content) => {
194
319
  let targetJid;
@@ -288,51 +413,6 @@ const getLidUser = async (jid) => {
288
413
  ]
289
414
  });
290
415
  };
291
- const getBusinessProfile = async (jid) => {
292
- var _a, _b, _c, _d, _e, _f, _g;
293
- const results = await query({
294
- tag: 'iq',
295
- attrs: {
296
- to: 's.whatsapp.net',
297
- xmlns: 'w:biz',
298
- type: 'get'
299
- },
300
- content: [{
301
- tag: 'business_profile',
302
- attrs: { v: '244' },
303
- content: [{
304
- tag: 'profile',
305
- attrs: { jid }
306
- }]
307
- }]
308
- });
309
- const profileNode = (0, WABinary_1.getBinaryNodeChild)(results, 'business_profile');
310
- const profiles = (0, WABinary_1.getBinaryNodeChild)(profileNode, 'profile');
311
- if (profiles) {
312
- const address = (0, WABinary_1.getBinaryNodeChild)(profiles, 'address');
313
- const description = (0, WABinary_1.getBinaryNodeChild)(profiles, 'description');
314
- const website = (0, WABinary_1.getBinaryNodeChild)(profiles, 'website');
315
- const email = (0, WABinary_1.getBinaryNodeChild)(profiles, 'email');
316
- const category = (0, WABinary_1.getBinaryNodeChild)((0, WABinary_1.getBinaryNodeChild)(profiles, 'categories'), 'category');
317
- const businessHours = (0, WABinary_1.getBinaryNodeChild)(profiles, 'business_hours');
318
- const businessHoursConfig = businessHours ?
319
- (0, WABinary_1.getBinaryNodeChildren)(businessHours, 'business_hours_config') :
320
- undefined;
321
- const websiteStr = (_a = website === null || website === void 0 ? void 0 : website.content) === null || _a === void 0 ? void 0 : _a.toString();
322
- return {
323
- wid: (_b = profiles.attrs) === null || _b === void 0 ? void 0 : _b.jid,
324
- address: (_c = address === null || address === void 0 ? void 0 : address.content) === null || _c === void 0 ? void 0 : _c.toString(),
325
- description: ((_d = description === null || description === void 0 ? void 0 : description.content) === null || _d === void 0 ? void 0 : _d.toString()) || '',
326
- website: websiteStr ? [websiteStr] : [],
327
- email: (_e = email === null || email === void 0 ? void 0 : email.content) === null || _e === void 0 ? void 0 : _e.toString(),
328
- category: (_f = category === null || category === void 0 ? void 0 : category.content) === null || _f === void 0 ? void 0 : _f.toString(),
329
- 'business_hours': {
330
- timezone: (_g = businessHours === null || businessHours === void 0 ? void 0 : businessHours.attrs) === null || _g === void 0 ? void 0 : _g.timezone,
331
- 'business_config': businessHoursConfig === null || businessHoursConfig === void 0 ? void 0 : businessHoursConfig.map(({ attrs }) => attrs)
332
- }
333
- };
334
- }
335
- };
336
416
  const cleanDirtyBits = async (type, fromTimestamp) => {
337
417
  logger.info({ fromTimestamp }, 'clean dirty bits ' + type);
338
418
  await sendNode({
@@ -861,7 +941,6 @@ const getLidUser = async (jid) => {
861
941
  presenceSubscribe,
862
942
  profilePictureUrl,
863
943
  onWhatsApp,
864
- getLidUser,
865
944
  fetchBlocklist,
866
945
  fetchStatus,
867
946
  updateProfilePicture,
@@ -883,6 +962,7 @@ const getLidUser = async (jid) => {
883
962
  addChatLabel,
884
963
  removeChatLabel,
885
964
  addMessageLabel,
965
+ checkStatusWA,
886
966
  removeMessageLabel,
887
967
  star
888
968
  };