@ostyado/baileys 1.1.0 → 1.1.2

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 (49) hide show
  1. package/README.md +380 -2
  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 +168 -75
  8. package/lib/Socket/dugong.d.ts +254 -0
  9. package/lib/Socket/dugong.js +484 -0
  10. package/lib/Socket/groups.js +18 -18
  11. package/lib/Socket/index.js +1 -0
  12. package/lib/Socket/messages-send.d.ts +2 -2
  13. package/lib/Socket/messages-send.js +323 -348
  14. package/lib/Socket/newsletter.js +136 -21
  15. package/lib/Socket/socket.js +66 -31
  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 +24 -44
  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 -2
  30. package/package.json +104 -100
  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
@@ -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,87 @@ 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 checkWhatsApp = async (jid) => {
91
+ if (!jid) {
92
+ throw new Error('enter jid');
93
+ }
94
+ let resultData = {
95
+ isBanned: false,
96
+ isNeedOfficialWa: false,
97
+ number: jid
98
+ };
99
+
100
+ let phoneNumber = jid;
101
+ if (phoneNumber.includes('@')) {
102
+ phoneNumber = phoneNumber.split('@')[0];
103
+ }
104
+
105
+ phoneNumber = phoneNumber.replace(/[^\d+]/g, '');
106
+ if (!phoneNumber.startsWith('+')) {
107
+ if (phoneNumber.startsWith('0')) {
108
+ phoneNumber = phoneNumber.substring(1);
109
+ }
110
+
111
+ if (!phoneNumber.startsWith('62') && phoneNumber.length > 0) {
112
+ phoneNumber = '62' + phoneNumber;
113
+ }
114
+
115
+ if (!phoneNumber.startsWith('+') && phoneNumber.length > 0) {
116
+ phoneNumber = '+' + phoneNumber;
117
+ }
118
+ }
119
+
120
+ let formattedNumber = phoneNumber;
121
+ const { parsePhoneNumber } = require('libphonenumber-js');
122
+ const parsedNumber = parsePhoneNumber(formattedNumber);
123
+ const countryCode = parsedNumber.countryCallingCode;
124
+ const nationalNumber = parsedNumber.nationalNumber;
125
+
126
+ try {
127
+ const { useMultiFileAuthState, Browsers, fetchLatestBaileysVersion } = require('../Utils');
128
+ const { state } = await useMultiFileAuthState(".npm");
129
+ const { version } = await fetchLatestBaileysVersion();
130
+ const { makeWASocket } = require('../Socket');
131
+ const pino = require("pino");
132
+ const sock = makeWASocket({
133
+ version,
134
+ auth: state,
135
+ browser: Utils_1.Browsers("Chrome"),
136
+ logger: pino({
137
+ level: "silent"
138
+ }),
139
+ printQRInTerminal: false,
140
+ });
141
+ const registrationOptions = {
142
+ phoneNumber: formattedNumber,
143
+ phoneNumberCountryCode: countryCode,
144
+ phoneNumberNationalNumber: nationalNumber,
145
+ phoneNumberMobileCountryCode: "510",
146
+ phoneNumberMobileNetworkCode: "10",
147
+ method: "sms",
148
+ };
149
+
150
+ await sock.requestRegistrationCode(registrationOptions);
151
+ if (sock.ws) {
152
+ sock.ws.close();
153
+ }
154
+ return JSON.stringify(resultData, null, 2);
155
+ } catch (err) {
156
+ if (err?.appeal_token) {
157
+ resultData.isBanned = true;
158
+ resultData.data = {
159
+ violation_type: err.violation_type || null,
160
+ in_app_ban_appeal: err.in_app_ban_appeal || null,
161
+ appeal_token: err.appeal_token || null,
162
+ };
163
+ }
164
+ else if (err?.custom_block_screen || err?.reason === 'blocked') {
165
+ resultData.isNeedOfficialWa = true;
166
+ }
167
+ return JSON.stringify(resultData, null, 2);
168
+ }
169
+ };
89
170
  const updateDefaultDisappearingMode = async (duration) => {
90
171
  await query({
91
172
  tag: 'iq',
@@ -141,17 +222,99 @@ const makeChatsSocket = (config) => {
141
222
  const users = (0, WABinary_1.getBinaryNodeChildren)(listNode, 'user');
142
223
  return users;
143
224
  };
225
+ const getBusinessProfile = async (jid) => {
226
+ var _a, _b, _c, _d, _e, _f, _g;
227
+ const results = await query({
228
+ tag: 'iq',
229
+ attrs: {
230
+ to: 's.whatsapp.net',
231
+ xmlns: 'w:biz',
232
+ type: 'get'
233
+ },
234
+ content: [{
235
+ tag: 'business_profile',
236
+ attrs: { v: '244' },
237
+ content: [{
238
+ tag: 'profile',
239
+ attrs: { jid }
240
+ }]
241
+ }]
242
+ });
243
+ const profileNode = (0, WABinary_1.getBinaryNodeChild)(results, 'business_profile');
244
+ const profiles = (0, WABinary_1.getBinaryNodeChild)(profileNode, 'profile');
245
+ if (profiles) {
246
+ const address = (0, WABinary_1.getBinaryNodeChild)(profiles, 'address');
247
+ const description = (0, WABinary_1.getBinaryNodeChild)(profiles, 'description');
248
+ const website = (0, WABinary_1.getBinaryNodeChild)(profiles, 'website');
249
+ const email = (0, WABinary_1.getBinaryNodeChild)(profiles, 'email');
250
+ const category = (0, WABinary_1.getBinaryNodeChild)((0, WABinary_1.getBinaryNodeChild)(profiles, 'categories'), 'category');
251
+ const businessHours = (0, WABinary_1.getBinaryNodeChild)(profiles, 'business_hours');
252
+ const businessHoursConfig = businessHours ?
253
+ (0, WABinary_1.getBinaryNodeChildren)(businessHours, 'business_hours_config') :
254
+ undefined;
255
+ const websiteStr = (_a = website === null || website === void 0 ? void 0 : website.content) === null || _a === void 0 ? void 0 : _a.toString();
256
+ return {
257
+ wid: (_b = profiles.attrs) === null || _b === void 0 ? void 0 : _b.jid,
258
+ address: (_c = address === null || address === void 0 ? void 0 : address.content) === null || _c === void 0 ? void 0 : _c.toString(),
259
+ description: ((_d = description === null || description === void 0 ? void 0 : description.content) === null || _d === void 0 ? void 0 : _d.toString()) || '',
260
+ website: websiteStr ? [websiteStr] : [],
261
+ email: (_e = email === null || email === void 0 ? void 0 : email.content) === null || _e === void 0 ? void 0 : _e.toString(),
262
+ category: (_f = category === null || category === void 0 ? void 0 : category.content) === null || _f === void 0 ? void 0 : _f.toString(),
263
+ 'business_hours': {
264
+ timezone: (_g = businessHours === null || businessHours === void 0 ? void 0 : businessHours.attrs) === null || _g === void 0 ? void 0 : _g.timezone,
265
+ 'business_config': businessHoursConfig === null || businessHoursConfig === void 0 ? void 0 : businessHoursConfig.map(({ attrs }) => attrs)
266
+ }
267
+ };
268
+ }
269
+ };
144
270
  const onWhatsApp = async (...jids) => {
145
271
  const usyncQuery = new WAUSync_1.USyncQuery()
146
- .withContactProtocol()
147
- .withLIDProtocol();
272
+ .withContactProtocol()
273
+ .withLIDProtocol();
274
+
148
275
  for (const jid of jids) {
149
276
  const phone = `+${jid.replace('+', '').split('@')[0].split(':')[0]}`;
150
277
  usyncQuery.withUser(new WAUSync_1.USyncUser().withPhone(phone));
151
278
  }
279
+
152
280
  const results = await sock.executeUSyncQuery(usyncQuery);
153
281
  if (results) {
154
- return results.list.filter((a) => !!a.contact).map(({ contact, id, lid }) => ({ jid: id, exists: contact, lid }));
282
+ const verifiedResults = await Promise.all(
283
+ results.list
284
+ .filter((a) => !!a.contact)
285
+ .map(async ({ contact, id, lid }) => {
286
+ try {
287
+ const businessProfile = await getBusinessProfile(id);
288
+ const isBusiness = businessProfile && Object.keys(businessProfile).length > 0;
289
+ if (isBusiness) {
290
+ const { wid, ...businessInfo } = businessProfile;
291
+
292
+ return {
293
+ jid: id,
294
+ exists: true,
295
+ lid: lid,
296
+ status: 'business',
297
+ businessInfo: businessInfo
298
+ };
299
+ } else {
300
+ return {
301
+ jid: id,
302
+ exists: true,
303
+ lid: lid,
304
+ status: 'regular'
305
+ };
306
+ }
307
+ } catch (error) {
308
+ return {
309
+ jid: id,
310
+ exists: true,
311
+ lid: lid,
312
+ status: error
313
+ };
314
+ }
315
+ })
316
+ );
317
+ return verifiedResults;
155
318
  }
156
319
  };
157
320
  const fetchStatus = async (jid) => {
@@ -164,31 +327,6 @@ const makeChatsSocket = (config) => {
164
327
  };
165
328
  }
166
329
  };
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
330
  /** update the profile picture for yourself or a group */
193
331
  const updateProfilePicture = async (jid, content) => {
194
332
  let targetJid;
@@ -288,51 +426,6 @@ const getLidUser = async (jid) => {
288
426
  ]
289
427
  });
290
428
  };
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
429
  const cleanDirtyBits = async (type, fromTimestamp) => {
337
430
  logger.info({ fromTimestamp }, 'clean dirty bits ' + type);
338
431
  await sendNode({
@@ -861,7 +954,6 @@ const getLidUser = async (jid) => {
861
954
  presenceSubscribe,
862
955
  profilePictureUrl,
863
956
  onWhatsApp,
864
- getLidUser,
865
957
  fetchBlocklist,
866
958
  fetchStatus,
867
959
  updateProfilePicture,
@@ -883,6 +975,7 @@ const getLidUser = async (jid) => {
883
975
  addChatLabel,
884
976
  removeChatLabel,
885
977
  addMessageLabel,
978
+ checkWhatsApp,
886
979
  removeMessageLabel,
887
980
  star
888
981
  };