@alannxd/baileys 2.1.3 → 2.1.4

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.
package/README.md CHANGED
@@ -130,13 +130,13 @@ await sock.sendMessage(jid, {
130
130
  interactiveMessage: {
131
131
  title: "Hello World",
132
132
  footer: "telegram: @alannxd",
133
- thumbnail: "URL IMAGE",
133
+ image: { url: "https://example.com/image.jpg" },
134
134
  nativeFlowMessage: {
135
135
  messageParamsJson: JSON.stringify({
136
136
  limited_time_offer: {
137
137
  text: "idk hummmm?",
138
- url: "t.me/alannxd",
139
- copy_code: "alannxd 1437",
138
+ url: "https://t.me/alannxd",
139
+ copy_code: "alan",
140
140
  expiration_time: Date.now() * 999
141
141
  },
142
142
  bottom_sheet: {
@@ -177,7 +177,7 @@ await sock.sendMessage(jid, {
177
177
  rows: [
178
178
  {
179
179
  title: "@alannxd",
180
- description: "love you",
180
+ description: "fvck you",
181
181
  id: "row_2"
182
182
  }
183
183
  ]
@@ -208,7 +208,7 @@ await sock.sendMessage(jid, {
208
208
  interactiveMessage: {
209
209
  title: "Hello World",
210
210
  footer: "telegram: @alannxd",
211
- thumbnail: "URL IMAGE",
211
+ image: { url: "https://example.com/image.jpg" },
212
212
  buttons: [
213
213
  {
214
214
  name: "cta_copy",
@@ -229,18 +229,87 @@ Send product catalog messages with buttons and merchant information:
229
229
  ```javascript
230
230
  await sock.sendMessage(jid, {
231
231
  productMessage: {
232
+ title: "Produk Contoh",
233
+ description: "Ini adalah deskripsi produk",
234
+ thumbnail: { url: "https://example.com/image.jpg" },
235
+ productId: "PROD001",
236
+ retailerId: "RETAIL001",
237
+ url: "https://example.com/product",
238
+ body: "Detail produk",
239
+ footer: "Harga spesial",
240
+ priceAmount1000: 50000,
241
+ currencyCode: "USD",
242
+ buttons: [
243
+ {
244
+ name: "cta_url",
245
+ buttonParamsJson: JSON.stringify({
246
+ display_text: "Beli Sekarang",
247
+ url: "https://example.com/buy"
248
+ })
249
+ }
250
+ ]
251
+ }
252
+ }, { quoted: m });
253
+ ```
254
+
255
+ ### Interactive Message with Document Buffer
256
+ Send interactive messages with document from buffer (file system) - **Note: Documents only support buffer**:
257
+
258
+ ```javascript
259
+ await sock.sendMessage(jid, {
260
+ interactiveMessage: {
232
261
  title: "Hello World",
233
- description: "productMessage?",
234
- thumbnail: "URL IMAGE",
235
- productId: "123456789",
236
- retailerId: "TOKOKU",
237
- body: "Hello Wolrd",
238
262
  footer: "telegram: @alannxd",
263
+ document: fs.readFileSync("./package.json"),
264
+ mimetype: "application/pdf",
265
+ fileName: "alan.pdf",
266
+ jpegThumbnail: fs.readFileSync("./document.jpeg"),
267
+ contextInfo: {
268
+ mentionedJid: [jid],
269
+ forwardingScore: 777,
270
+ isForwarded: false
271
+ },
272
+ externalAdReply: {
273
+ title: "HolowXs",
274
+ body: "anu team",
275
+ mediaType: 3,
276
+ thumbnailUrl: "https://example.com/image.jpg",
277
+ mediaUrl: " X ",
278
+ sourceUrl: "https://t.me/alannxd",
279
+ showAdAttribution: true,
280
+ renderLargerThumbnail: false
281
+ },
239
282
  buttons: [
240
283
  {
241
284
  name: "cta_url",
242
285
  buttonParamsJson: JSON.stringify({
243
- display_text: "copy code",
286
+ display_text: "Telegram",
287
+ url: "https://t.me/alannxd",
288
+ merchant_url: "https://t.me/alannxd"
289
+ })
290
+ }
291
+ ]
292
+ }
293
+ }, { quoted: m });
294
+ ```
295
+
296
+ ### Interactive Message with Document Buffer (Simple)
297
+ Send interactive messages with document from buffer (file system) without contextInfo and externalAdReply - **Note: Documents only support buffer**:
298
+
299
+ ```javascript
300
+ await sock.sendMessage(jid, {
301
+ interactiveMessage: {
302
+ title: "Hello World",
303
+ footer: "telegram: @alannxd",
304
+ document: fs.readFileSync("./package.json"),
305
+ mimetype: "application/pdf",
306
+ fileName: "alan.pdf",
307
+ jpegThumbnail: fs.readFileSync("./document.jpeg"),
308
+ buttons: [
309
+ {
310
+ name: "cta_url",
311
+ buttonParamsJson: JSON.stringify({
312
+ display_text: "Telegram",
244
313
  url: "https://t.me/alannxd",
245
314
  merchant_url: "https://t.me/alannxd"
246
315
  })
@@ -26,22 +26,38 @@ 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
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.PHONENUMBER_MCC = phonenumber_mcc_json_1.default;
36
39
  exports.DEFAULT_ORIGIN = "https://web.whatsapp.com";
40
+ exports.MOBILE_ENDPOINT = 'g.whatsapp.net';
41
+ exports.MOBILE_PORT = 443;
37
42
  exports.DEF_CALLBACK_PREFIX = "CB:";
38
43
  exports.DEF_TAG_PREFIX = "TAG:";
39
44
  exports.PHONE_CONNECTION_CB = "CB:Pong";
40
45
  exports.WA_DEFAULT_EPHEMERAL = 604800;
46
+ const WA_VERSION = '2.25.23.24';
47
+ const WA_VERSION_HASH = (0, crypto_1.createHash)('md5').update(WA_VERSION).digest('hex');
48
+ exports.MOBILE_TOKEN = Buffer.from('0a1mLfGUIBVrMKF1RdvLI5lkRBvof6vn0fD2QRSM' + WA_VERSION_HASH);
49
+ exports.MOBILE_REGISTRATION_ENDPOINT = 'https://v.whatsapp.net/v2';
50
+ exports.MOBILE_USERAGENT = `WhatsApp/${WA_VERSION} iOS/17.5.1 Device/Apple-iPhone_13`;
51
+ exports.REGISTRATION_PUBLIC_KEY = Buffer.from([
52
+ 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,
53
+ 34, 251, 111, 18, 37, 18, 48, 45,
54
+ ]);
41
55
  exports.NOISE_MODE = "Noise_XX_25519_AESGCM_SHA256\x00\x00\x00\x00";
42
56
  exports.DICT_VERSION = 2;
43
57
  exports.KEY_BUNDLE_TYPE = Buffer.from([5]);
44
58
  exports.NOISE_WA_HEADER = Buffer.from([87, 65, 6, exports.DICT_VERSION]);
59
+ exports.PROTOCOL_VERSION = [5, 2];
60
+ exports.MOBILE_NOISE_HEADER = Buffer.concat([Buffer.from('WA'), Buffer.from(exports.PROTOCOL_VERSION)]);
45
61
 
46
62
  exports.URL_REGEX = /https:\/\/(?![^:@\/\s]+:[^:@\/\s]+@)[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?(\/[^\s]*)?/g;
47
63
  exports.WA_CERT_DETAILS = { SERIAL: 0 };
@@ -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',
@@ -857,6 +925,7 @@ const makeChatsSocket = (config) => {
857
925
  addChatLabel,
858
926
  removeChatLabel,
859
927
  addMessageLabel,
928
+ checkStatusWA,
860
929
  removeMessageLabel,
861
930
  star
862
931
  };
@@ -58,21 +58,61 @@ declare namespace kikyy {
58
58
  interface ProductMessage {
59
59
  title: string;
60
60
  description: string;
61
- thumbnail: string;
61
+ thumbnail: Buffer | { url: string };
62
62
  productId: string;
63
63
  retailerId: string;
64
64
  url: string;
65
65
  body?: string;
66
66
  footer?: string;
67
67
  buttons?: proto.Message.InteractiveMessage.INativeFlowButton[];
68
+ priceAmount1000?: number | null;
69
+ currencyCode?: string;
68
70
  }
69
71
 
70
72
  interface InteractiveMessage {
71
73
  title: string;
72
74
  footer?: string;
73
75
  thumbnail?: string;
76
+ image?: string | Buffer | { url: string };
77
+ video?: string | Buffer | { url: string };
78
+ document?: Buffer;
79
+ mimetype?: string;
80
+ fileName?: string;
81
+ jpegThumbnail?: Buffer; // Hanya Buffer saja
82
+ contextInfo?: {
83
+ mentionedJid?: string[];
84
+ forwardingScore?: number;
85
+ isForwarded?: boolean;
86
+ externalAdReply?: {
87
+ title?: string;
88
+ body?: string;
89
+ mediaType?: number;
90
+ thumbnailUrl?: string;
91
+ mediaUrl?: string;
92
+ sourceUrl?: string;
93
+ showAdAttribution?: boolean;
94
+ renderLargerThumbnail?: boolean;
95
+ [key: string]: any;
96
+ };
97
+ [key: string]: any;
98
+ };
99
+ externalAdReply?: {
100
+ title?: string;
101
+ body?: string;
102
+ mediaType?: number;
103
+ thumbnailUrl?: string;
104
+ mediaUrl?: string;
105
+ sourceUrl?: string;
106
+ showAdAttribution?: boolean;
107
+ renderLargerThumbnail?: boolean;
108
+ [key: string]: any;
109
+ };
74
110
  buttons?: proto.Message.InteractiveMessage.INativeFlowButton[];
75
- nativeFlowMessage?: proto.Message.InteractiveMessage.INativeFlowMessage;
111
+ nativeFlowMessage?: {
112
+ messageParamsJson?: string;
113
+ buttons?: proto.Message.InteractiveMessage.INativeFlowButton[];
114
+ [key: string]: any;
115
+ };
76
116
  }
77
117
 
78
118
  interface AlbumItem {
@@ -114,22 +154,26 @@ declare namespace kikyy {
114
154
  albumMessage?: AlbumItem[];
115
155
  eventMessage?: EventMessage;
116
156
  pollResultMessage?: PollResultMessage;
157
+ sender?: string;
117
158
  }
118
159
 
119
160
  interface MessageOptions {
120
161
  quoted?: proto.IWebMessageInfo;
121
162
  filter?: boolean;
122
163
  }
164
+
165
+ interface Utils {
166
+ prepareWAMessageMedia: (media: any, options: WAMessageContentGenerationOptions) => Promise<any>;
167
+ generateWAMessageContent: (content: any, options: WAMessageContentGenerationOptions) => Promise<any>;
168
+ generateWAMessageFromContent: (jid: string, content: any, options?: any) => Promise<any>;
169
+ generateWAMessage: (jid: string, content: any, options?: any) => Promise<any>;
170
+ generateMessageID: () => string;
171
+ }
123
172
  }
124
173
 
125
174
  declare class kikyy {
126
175
  constructor(
127
- utils: {
128
- prepareWAMessageMedia: (media: any, options: kikyy.WAMessageContentGenerationOptions) => Promise<any>;
129
- generateWAMessageContent: (content: any, options: kikyy.WAMessageContentGenerationOptions) => Promise<any>;
130
- generateWAMessageFromContent: (jid: string, content: any, options?: any) => Promise<any>;
131
- generateMessageID: () => string;
132
- },
176
+ utils: kikyy.Utils,
133
177
  waUploadToServer: kikyy.WAMediaUploadFunction,
134
178
  relayMessageFn?: (jid: string, content: any, options?: any) => Promise<any>
135
179
  );
@@ -151,7 +195,7 @@ declare class kikyy {
151
195
  content: { interactiveMessage: kikyy.InteractiveMessage },
152
196
  jid: string,
153
197
  quoted?: proto.IWebMessageInfo
154
- ): Promise<{ viewOnceMessage: proto.Message.ViewOnceMessage }>;
198
+ ): Promise<{ interactiveMessage: proto.Message.InteractiveMessage }>;
155
199
 
156
200
  handleAlbum(
157
201
  content: { albumMessage: kikyy.AlbumItem[] },