@another-trial/whatsapp-web.js 1.33.0-beta.1

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 (56) hide show
  1. package/.env.example +3 -0
  2. package/CODE_OF_CONDUCT.md +133 -0
  3. package/LICENSE +201 -0
  4. package/README.md +185 -0
  5. package/example.js +690 -0
  6. package/index.d.ts +2202 -0
  7. package/index.js +35 -0
  8. package/package.json +59 -0
  9. package/shell.js +36 -0
  10. package/src/Client.js +2363 -0
  11. package/src/authStrategies/BaseAuthStrategy.js +27 -0
  12. package/src/authStrategies/LocalAuth.js +58 -0
  13. package/src/authStrategies/NoAuth.js +12 -0
  14. package/src/authStrategies/RemoteAuth.js +210 -0
  15. package/src/factories/ChatFactory.js +21 -0
  16. package/src/factories/ContactFactory.js +16 -0
  17. package/src/structures/Base.js +22 -0
  18. package/src/structures/Broadcast.js +69 -0
  19. package/src/structures/BusinessContact.js +21 -0
  20. package/src/structures/Buttons.js +82 -0
  21. package/src/structures/Call.js +76 -0
  22. package/src/structures/Channel.js +382 -0
  23. package/src/structures/Chat.js +299 -0
  24. package/src/structures/ClientInfo.js +71 -0
  25. package/src/structures/Contact.js +208 -0
  26. package/src/structures/GroupChat.js +485 -0
  27. package/src/structures/GroupNotification.js +104 -0
  28. package/src/structures/Label.js +50 -0
  29. package/src/structures/List.js +79 -0
  30. package/src/structures/Location.js +62 -0
  31. package/src/structures/Message.js +747 -0
  32. package/src/structures/MessageMedia.js +111 -0
  33. package/src/structures/Order.js +52 -0
  34. package/src/structures/Payment.js +79 -0
  35. package/src/structures/Poll.js +44 -0
  36. package/src/structures/PollVote.js +75 -0
  37. package/src/structures/PrivateChat.js +13 -0
  38. package/src/structures/PrivateContact.js +13 -0
  39. package/src/structures/Product.js +68 -0
  40. package/src/structures/ProductMetadata.js +25 -0
  41. package/src/structures/Reaction.js +69 -0
  42. package/src/structures/ScheduledEvent.js +71 -0
  43. package/src/structures/index.js +27 -0
  44. package/src/util/Constants.js +183 -0
  45. package/src/util/Injected/AuthStore/AuthStore.js +17 -0
  46. package/src/util/Injected/AuthStore/LegacyAuthStore.js +22 -0
  47. package/src/util/Injected/LegacyStore.js +146 -0
  48. package/src/util/Injected/Store.js +223 -0
  49. package/src/util/Injected/Utils.js +1147 -0
  50. package/src/util/InterfaceController.js +126 -0
  51. package/src/util/Puppeteer.js +23 -0
  52. package/src/util/Util.js +186 -0
  53. package/src/webCache/LocalWebCache.js +40 -0
  54. package/src/webCache/RemoteWebCache.js +40 -0
  55. package/src/webCache/WebCache.js +14 -0
  56. package/src/webCache/WebCacheFactory.js +20 -0
@@ -0,0 +1,183 @@
1
+ 'use strict';
2
+
3
+ exports.WhatsWebURL = 'https://web.whatsapp.com/';
4
+
5
+ exports.DefaultOptions = {
6
+ puppeteer: {
7
+ headless: true,
8
+ defaultViewport: null
9
+ },
10
+ webVersion: '2.3000.1017054665',
11
+ webVersionCache: {
12
+ type: 'local',
13
+ },
14
+ authTimeoutMs: 0,
15
+ qrMaxRetries: 0,
16
+ takeoverOnConflict: false,
17
+ takeoverTimeoutMs: 0,
18
+ userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36',
19
+ ffmpegPath: 'ffmpeg',
20
+ bypassCSP: false,
21
+ proxyAuthentication: undefined,
22
+ pairWithPhoneNumber: {
23
+ phoneNumber: '',
24
+ showNotification: true,
25
+ intervalMs: 180000,
26
+ },
27
+ };
28
+
29
+ /**
30
+ * Client status
31
+ * @readonly
32
+ * @enum {number}
33
+ */
34
+ exports.Status = {
35
+ INITIALIZING: 0,
36
+ AUTHENTICATING: 1,
37
+ READY: 3
38
+ };
39
+
40
+ /**
41
+ * Events that can be emitted by the client
42
+ * @readonly
43
+ * @enum {string}
44
+ */
45
+ exports.Events = {
46
+ AUTHENTICATED: 'authenticated',
47
+ AUTHENTICATION_FAILURE: 'auth_failure',
48
+ READY: 'ready',
49
+ CHAT_REMOVED: 'chat_removed',
50
+ CHAT_ARCHIVED: 'chat_archived',
51
+ MESSAGE_RECEIVED: 'message',
52
+ MESSAGE_CIPHERTEXT: 'message_ciphertext',
53
+ MESSAGE_CREATE: 'message_create',
54
+ MESSAGE_REVOKED_EVERYONE: 'message_revoke_everyone',
55
+ MESSAGE_REVOKED_ME: 'message_revoke_me',
56
+ MESSAGE_ACK: 'message_ack',
57
+ MESSAGE_EDIT: 'message_edit',
58
+ UNREAD_COUNT: 'unread_count',
59
+ MESSAGE_REACTION: 'message_reaction',
60
+ MEDIA_UPLOADED: 'media_uploaded',
61
+ CONTACT_CHANGED: 'contact_changed',
62
+ GROUP_JOIN: 'group_join',
63
+ GROUP_LEAVE: 'group_leave',
64
+ GROUP_ADMIN_CHANGED: 'group_admin_changed',
65
+ GROUP_MEMBERSHIP_REQUEST: 'group_membership_request',
66
+ GROUP_UPDATE: 'group_update',
67
+ QR_RECEIVED: 'qr',
68
+ CODE_RECEIVED: 'code',
69
+ LOADING_SCREEN: 'loading_screen',
70
+ DISCONNECTED: 'disconnected',
71
+ STATE_CHANGED: 'change_state',
72
+ BATTERY_CHANGED: 'change_battery',
73
+ INCOMING_CALL: 'call',
74
+ REMOTE_SESSION_SAVED: 'remote_session_saved',
75
+ VOTE_UPDATE: 'vote_update'
76
+ };
77
+
78
+ /**
79
+ * Message types
80
+ * @readonly
81
+ * @enum {string}
82
+ */
83
+ exports.MessageTypes = {
84
+ TEXT: 'chat',
85
+ AUDIO: 'audio',
86
+ VOICE: 'ptt',
87
+ IMAGE: 'image',
88
+ VIDEO: 'video',
89
+ DOCUMENT: 'document',
90
+ STICKER: 'sticker',
91
+ LOCATION: 'location',
92
+ CONTACT_CARD: 'vcard',
93
+ CONTACT_CARD_MULTI: 'multi_vcard',
94
+ ORDER: 'order',
95
+ REVOKED: 'revoked',
96
+ PRODUCT: 'product',
97
+ UNKNOWN: 'unknown',
98
+ GROUP_INVITE: 'groups_v4_invite',
99
+ LIST: 'list',
100
+ LIST_RESPONSE: 'list_response',
101
+ BUTTONS_RESPONSE: 'buttons_response',
102
+ PAYMENT: 'payment',
103
+ BROADCAST_NOTIFICATION: 'broadcast_notification',
104
+ CALL_LOG: 'call_log',
105
+ CIPHERTEXT: 'ciphertext',
106
+ DEBUG: 'debug',
107
+ E2E_NOTIFICATION: 'e2e_notification',
108
+ GP2: 'gp2',
109
+ GROUP_NOTIFICATION: 'group_notification',
110
+ HSM: 'hsm',
111
+ INTERACTIVE: 'interactive',
112
+ NATIVE_FLOW: 'native_flow',
113
+ NOTIFICATION: 'notification',
114
+ NOTIFICATION_TEMPLATE: 'notification_template',
115
+ OVERSIZED: 'oversized',
116
+ PROTOCOL: 'protocol',
117
+ REACTION: 'reaction',
118
+ TEMPLATE_BUTTON_REPLY: 'template_button_reply',
119
+ POLL_CREATION: 'poll_creation',
120
+ SCHEDULED_EVENT_CREATION: 'scheduled_event_creation',
121
+ };
122
+
123
+ /**
124
+ * Group notification types
125
+ * @readonly
126
+ * @enum {string}
127
+ */
128
+ exports.GroupNotificationTypes = {
129
+ ADD: 'add',
130
+ INVITE: 'invite',
131
+ REMOVE: 'remove',
132
+ LEAVE: 'leave',
133
+ SUBJECT: 'subject',
134
+ DESCRIPTION: 'description',
135
+ PICTURE: 'picture',
136
+ ANNOUNCE: 'announce',
137
+ RESTRICT: 'restrict',
138
+ };
139
+
140
+ /**
141
+ * Chat types
142
+ * @readonly
143
+ * @enum {string}
144
+ */
145
+ exports.ChatTypes = {
146
+ SOLO: 'solo',
147
+ GROUP: 'group',
148
+ UNKNOWN: 'unknown'
149
+ };
150
+
151
+ /**
152
+ * WhatsApp state
153
+ * @readonly
154
+ * @enum {string}
155
+ */
156
+ exports.WAState = {
157
+ CONFLICT: 'CONFLICT',
158
+ CONNECTED: 'CONNECTED',
159
+ DEPRECATED_VERSION: 'DEPRECATED_VERSION',
160
+ OPENING: 'OPENING',
161
+ PAIRING: 'PAIRING',
162
+ PROXYBLOCK: 'PROXYBLOCK',
163
+ SMB_TOS_BLOCK: 'SMB_TOS_BLOCK',
164
+ TIMEOUT: 'TIMEOUT',
165
+ TOS_BLOCK: 'TOS_BLOCK',
166
+ UNLAUNCHED: 'UNLAUNCHED',
167
+ UNPAIRED: 'UNPAIRED',
168
+ UNPAIRED_IDLE: 'UNPAIRED_IDLE'
169
+ };
170
+
171
+ /**
172
+ * Message ACK
173
+ * @readonly
174
+ * @enum {number}
175
+ */
176
+ exports.MessageAck = {
177
+ ACK_ERROR: -1,
178
+ ACK_PENDING: 0,
179
+ ACK_SERVER: 1,
180
+ ACK_DEVICE: 2,
181
+ ACK_READ: 3,
182
+ ACK_PLAYED: 4,
183
+ };
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ exports.ExposeAuthStore = () => {
4
+ window.AuthStore = {};
5
+ window.AuthStore.AppState = window.require('WAWebSocketModel').Socket;
6
+ window.AuthStore.Cmd = window.require('WAWebCmd').Cmd;
7
+ window.AuthStore.Conn = window.require('WAWebConnModel').Conn;
8
+ window.AuthStore.OfflineMessageHandler = window.require('WAWebOfflineHandler').OfflineMessageHandler;
9
+ window.AuthStore.PairingCodeLinkUtils = window.require('WAWebAltDeviceLinkingApi');
10
+ window.AuthStore.Base64Tools = window.require('WABase64');
11
+ window.AuthStore.RegistrationUtils = {
12
+ ...window.require('WAWebCompanionRegClientUtils'),
13
+ ...window.require('WAWebAdvSignatureApi'),
14
+ ...window.require('WAWebUserPrefsInfoStore'),
15
+ ...window.require('WAWebSignalStoreApi'),
16
+ };
17
+ };
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ //TODO: To be removed by version 2.3000.x hard release
4
+
5
+ exports.ExposeLegacyAuthStore = (moduleRaidStr) => {
6
+ eval('var moduleRaid = ' + moduleRaidStr);
7
+ // eslint-disable-next-line no-undef
8
+ window.mR = moduleRaid();
9
+ window.AuthStore = {};
10
+ window.AuthStore.AppState = window.mR.findModule('Socket')[0].Socket;
11
+ window.AuthStore.Cmd = window.mR.findModule('Cmd')[0].Cmd;
12
+ window.AuthStore.Conn = window.mR.findModule('Conn')[0].Conn;
13
+ window.AuthStore.OfflineMessageHandler = window.mR.findModule('OfflineMessageHandler')[0].OfflineMessageHandler;
14
+ window.AuthStore.PairingCodeLinkUtils = window.mR.findModule('initializeAltDeviceLinking')[0];
15
+ window.AuthStore.Base64Tools = window.mR.findModule('encodeB64')[0];
16
+ window.AuthStore.RegistrationUtils = {
17
+ ...window.mR.findModule('getCompanionWebClientFromBrowser')[0],
18
+ ...window.mR.findModule('verifyKeyIndexListAccountSignature')[0],
19
+ ...window.mR.findModule('waNoiseInfo')[0],
20
+ ...window.mR.findModule('waSignalStore')[0],
21
+ };
22
+ };
@@ -0,0 +1,146 @@
1
+ 'use strict';
2
+
3
+ //TODO: To be removed by version 2.3000.x hard release
4
+
5
+ // Exposes the internal Store to the WhatsApp Web client
6
+ exports.ExposeLegacyStore = () => {
7
+ window.Store = Object.assign({}, window.mR.findModule(m => m.default && m.default.Chat)[0].default);
8
+ window.Store.AppState = window.mR.findModule('Socket')[0].Socket;
9
+ window.Store.Conn = window.mR.findModule('Conn')[0].Conn;
10
+ window.Store.BlockContact = window.mR.findModule('blockContact')[0];
11
+ window.Store.Call = window.mR.findModule((module) => module.default && module.default.Call)[0].default.Call;
12
+ window.Store.Cmd = window.mR.findModule('Cmd')[0].Cmd;
13
+ window.Store.CryptoLib = window.mR.findModule('decryptE2EMedia')[0];
14
+ window.Store.DownloadManager = window.mR.findModule('downloadManager')[0].downloadManager;
15
+ window.Store.GroupMetadata = window.mR.findModule('GroupMetadata')[0].default.GroupMetadata;
16
+ window.Store.GroupQueryAndUpdate = window.mR.findModule('queryAndUpdateGroupMetadataById')[0].queryAndUpdateGroupMetadataById;
17
+ window.Store.Label = window.mR.findModule('LabelCollection')[0].LabelCollection;
18
+ window.Store.MediaPrep = window.mR.findModule('prepRawMedia')[0];
19
+ window.Store.MediaObject = window.mR.findModule('getOrCreateMediaObject')[0];
20
+ window.Store.NumberInfo = window.mR.findModule('formattedPhoneNumber')[0];
21
+ window.Store.MediaTypes = window.mR.findModule('msgToMediaType')[0];
22
+ window.Store.MediaUpload = window.mR.findModule('uploadMedia')[0];
23
+ window.Store.MsgKey = window.mR.findModule((module) => module.default && module.default.fromString)[0].default;
24
+ window.Store.OpaqueData = window.mR.findModule(module => module.default && module.default.createFromData)[0].default;
25
+ window.Store.QueryProduct = window.mR.findModule('queryProduct')[0];
26
+ window.Store.QueryOrder = window.mR.findModule('queryOrder')[0];
27
+ window.Store.SendClear = window.mR.findModule('sendClear')[0];
28
+ window.Store.SendDelete = window.mR.findModule('sendDelete')[0];
29
+ window.Store.SendMessage = window.mR.findModule('addAndSendMsgToChat')[0];
30
+ window.Store.EditMessage = window.mR.findModule('addAndSendMessageEdit')[0];
31
+ window.Store.SendSeen = window.mR.findModule('sendSeen')[0];
32
+ window.Store.User = window.mR.findModule('getMaybeMeUser')[0];
33
+ window.Store.ContactMethods = window.mR.findModule('getUserid')[0];
34
+ window.Store.UploadUtils = window.mR.findModule((module) => (module.default && module.default.encryptAndUpload) ? module.default : null)[0].default;
35
+ window.Store.UserConstructor = window.mR.findModule((module) => (module.default && module.default.prototype && module.default.prototype.isServer && module.default.prototype.isUser) ? module.default : null)[0].default;
36
+ window.Store.Validators = window.mR.findModule('findLinks')[0];
37
+ window.Store.VCard = window.mR.findModule('vcardFromContactModel')[0];
38
+ window.Store.WidFactory = window.mR.findModule('createWid')[0];
39
+ window.Store.ProfilePic = window.mR.findModule('profilePicResync')[0];
40
+ window.Store.PresenceUtils = window.mR.findModule('sendPresenceAvailable')[0];
41
+ window.Store.ChatState = window.mR.findModule('sendChatStateComposing')[0];
42
+ window.Store.findCommonGroups = window.mR.findModule('findCommonGroups')[0].findCommonGroups;
43
+ window.Store.StatusUtils = window.mR.findModule('setMyStatus')[0];
44
+ window.Store.ConversationMsgs = window.mR.findModule('loadEarlierMsgs')[0];
45
+ window.Store.sendReactionToMsg = window.mR.findModule('sendReactionToMsg')[0].sendReactionToMsg;
46
+ window.Store.createOrUpdateReactionsModule = window.mR.findModule('createOrUpdateReactions')[0];
47
+ window.Store.EphemeralFields = window.mR.findModule('getEphemeralFields')[0];
48
+ window.Store.MsgActionChecks = window.mR.findModule('canSenderRevokeMsg')[0];
49
+ window.Store.QuotedMsg = window.mR.findModule('getQuotedMsgObj')[0];
50
+ window.Store.LinkPreview = window.mR.findModule('getLinkPreview')[0];
51
+ window.Store.Socket = window.mR.findModule('deprecatedSendIq')[0];
52
+ window.Store.SocketWap = window.mR.findModule('wap')[0];
53
+ window.Store.SearchContext = window.mR.findModule('getSearchContext')[0].getSearchContext;
54
+ window.Store.DrawerManager = window.mR.findModule('DrawerManager')[0].DrawerManager;
55
+ window.Store.LidUtils = window.mR.findModule('getCurrentLid')[0];
56
+ window.Store.WidToJid = window.mR.findModule('widToUserJid')[0];
57
+ window.Store.JidToWid = window.mR.findModule('userJidToUserWid')[0];
58
+ window.Store.getMsgInfo = (window.mR.findModule('sendQueryMsgInfo')[0] || {}).sendQueryMsgInfo || window.mR.findModule('queryMsgInfo')[0].queryMsgInfo;
59
+ window.Store.pinUnpinMsg = window.mR.findModule('sendPinInChatMsg')[0].sendPinInChatMsg;
60
+
61
+ /* eslint-disable no-undef, no-cond-assign */
62
+ window.Store.QueryExist = ((m = window.mR.findModule('queryExists')[0]) ? m.queryExists : window.mR.findModule('queryExist')[0].queryWidExists);
63
+ window.Store.ReplyUtils = (m = window.mR.findModule('canReplyMsg')).length > 0 && m[0];
64
+ /* eslint-enable no-undef, no-cond-assign */
65
+
66
+ window.Store.Settings = {
67
+ ...window.mR.findModule('ChatlistPanelState')[0],
68
+ setPushname: window.mR.findModule((m) => m.setPushname && !m.ChatlistPanelState)[0].setPushname
69
+ };
70
+ window.Store.StickerTools = {
71
+ ...window.mR.findModule('toWebpSticker')[0],
72
+ ...window.mR.findModule('addWebpMetadata')[0]
73
+ };
74
+ window.Store.GroupUtils = {
75
+ ...window.mR.findModule('createGroup')[0],
76
+ ...window.mR.findModule('setGroupDescription')[0],
77
+ ...window.mR.findModule('sendExitGroup')[0],
78
+ ...window.mR.findModule('sendSetPicture')[0]
79
+ };
80
+ window.Store.GroupParticipants = {
81
+ ...window.mR.findModule('promoteParticipants')[0],
82
+ ...window.mR.findModule('sendAddParticipantsRPC')[0]
83
+ };
84
+ window.Store.GroupInvite = {
85
+ ...window.mR.findModule('resetGroupInviteCode')[0],
86
+ ...window.mR.findModule('queryGroupInvite')[0]
87
+ };
88
+ window.Store.GroupInviteV4 = {
89
+ ...window.mR.findModule('queryGroupInviteV4')[0],
90
+ ...window.mR.findModule('sendGroupInviteMessage')[0]
91
+ };
92
+ window.Store.MembershipRequestUtils = {
93
+ ...window.mR.findModule('getMembershipApprovalRequests')[0],
94
+ ...window.mR.findModule('sendMembershipRequestsActionRPC')[0]
95
+ };
96
+
97
+ if (!window.Store.Chat._find) {
98
+ window.Store.Chat._find = e => {
99
+ const target = window.Store.Chat.get(e);
100
+ return target ? Promise.resolve(target) : Promise.resolve({
101
+ id: e
102
+ });
103
+ };
104
+ }
105
+
106
+ // eslint-disable-next-line no-undef
107
+ if ((m = window.mR.findModule('ChatCollection')[0]) && m.ChatCollection && typeof m.ChatCollection.findImpl === 'undefined' && typeof m.ChatCollection._find !== 'undefined') m.ChatCollection.findImpl = m.ChatCollection._find;
108
+
109
+ const _isMDBackend = window.mR.findModule('isMDBackend');
110
+ if(_isMDBackend && _isMDBackend[0] && _isMDBackend[0].isMDBackend) {
111
+ window.Store.MDBackend = _isMDBackend[0].isMDBackend();
112
+ } else {
113
+ window.Store.MDBackend = true;
114
+ }
115
+
116
+ const _features = window.mR.findModule('FEATURE_CHANGE_EVENT')[0];
117
+ if(_features) {
118
+ window.Store.Features = _features.LegacyPhoneFeatures;
119
+ }
120
+
121
+ /**
122
+ * Target options object description
123
+ * @typedef {Object} TargetOptions
124
+ * @property {string|number} module The name or a key of the target module to search
125
+ * @property {number} index The index value of the target module
126
+ * @property {string} function The function name to get from a module
127
+ */
128
+
129
+ /**
130
+ * Function to modify functions
131
+ * @param {TargetOptions} target Options specifying the target function to search for modifying
132
+ * @param {Function} callback Modified function
133
+ */
134
+ window.injectToFunction = (target, callback) => {
135
+ const module = typeof target.module === 'string'
136
+ ? window.mR.findModule(target.module)
137
+ : window.mR.modules[target.module];
138
+ const originalFunction = module[target.index][target.function];
139
+ const modifiedFunction = (...args) => callback(originalFunction, ...args);
140
+ module[target.index][target.function] = modifiedFunction;
141
+ };
142
+
143
+ window.injectToFunction({ module: 'mediaTypeFromProtobuf', index: 0, function: 'mediaTypeFromProtobuf' }, (func, ...args) => { const [proto] = args; return proto.locationMessage ? null : func(...args); });
144
+
145
+ window.injectToFunction({ module: 'typeAttributeFromProtobuf', index: 0, function: 'typeAttributeFromProtobuf' }, (func, ...args) => { const [proto] = args; return proto.locationMessage || proto.groupInviteMessage ? 'text' : func(...args); });
146
+ };
@@ -0,0 +1,223 @@
1
+ 'use strict';
2
+
3
+ exports.ExposeStore = () => {
4
+ /**
5
+ * Helper function that compares between two WWeb versions. Its purpose is to help the developer to choose the correct code implementation depending on the comparison value and the WWeb version.
6
+ * @param {string} lOperand The left operand for the WWeb version string to compare with
7
+ * @param {string} operator The comparison operator
8
+ * @param {string} rOperand The right operand for the WWeb version string to compare with
9
+ * @returns {boolean} Boolean value that indicates the result of the comparison
10
+ */
11
+ window.compareWwebVersions = (lOperand, operator, rOperand) => {
12
+ if (!['>', '>=', '<', '<=', '='].includes(operator)) {
13
+ throw new class _ extends Error {
14
+ constructor(m) { super(m); this.name = 'CompareWwebVersionsError'; }
15
+ }('Invalid comparison operator is provided');
16
+
17
+ }
18
+ if (typeof lOperand !== 'string' || typeof rOperand !== 'string') {
19
+ throw new class _ extends Error {
20
+ constructor(m) { super(m); this.name = 'CompareWwebVersionsError'; }
21
+ }('A non-string WWeb version type is provided');
22
+ }
23
+
24
+ lOperand = lOperand.replace(/-beta$/, '');
25
+ rOperand = rOperand.replace(/-beta$/, '');
26
+
27
+ while (lOperand.length !== rOperand.length) {
28
+ lOperand.length > rOperand.length
29
+ ? rOperand = rOperand.concat('0')
30
+ : lOperand = lOperand.concat('0');
31
+ }
32
+
33
+ lOperand = Number(lOperand.replace(/\./g, ''));
34
+ rOperand = Number(rOperand.replace(/\./g, ''));
35
+
36
+ return (
37
+ operator === '>' ? lOperand > rOperand :
38
+ operator === '>=' ? lOperand >= rOperand :
39
+ operator === '<' ? lOperand < rOperand :
40
+ operator === '<=' ? lOperand <= rOperand :
41
+ operator === '=' ? lOperand === rOperand :
42
+ false
43
+ );
44
+ };
45
+
46
+ window.Store = Object.assign({}, window.require('WAWebCollections'));
47
+ window.Store.AppState = window.require('WAWebSocketModel').Socket;
48
+ window.Store.BlockContact = window.require('WAWebBlockContactAction');
49
+ window.Store.Conn = window.require('WAWebConnModel').Conn;
50
+ window.Store.Cmd = window.require('WAWebCmd').Cmd;
51
+ window.Store.DownloadManager = window.require('WAWebDownloadManager').downloadManager;
52
+ window.Store.GroupQueryAndUpdate = window.require('WAWebGroupQueryJob').queryAndUpdateGroupMetadataById;
53
+ window.Store.MediaPrep = window.require('WAWebPrepRawMedia');
54
+ window.Store.MediaObject = window.require('WAWebMediaStorage');
55
+ window.Store.MediaTypes = window.require('WAWebMmsMediaTypes');
56
+ window.Store.MediaUpload = window.require('WAWebMediaMmsV4Upload');
57
+ window.Store.MsgKey = window.require('WAWebMsgKey');
58
+ window.Store.OpaqueData = window.require('WAWebMediaOpaqueData');
59
+ window.Store.QueryProduct = window.require('WAWebBizProductCatalogBridge');
60
+ window.Store.QueryOrder = window.require('WAWebBizOrderBridge');
61
+ window.Store.SendClear = window.require('WAWebChatClearBridge');
62
+ window.Store.SendDelete = window.require('WAWebDeleteChatAction');
63
+ window.Store.SendMessage = window.require('WAWebSendMsgChatAction');
64
+ window.Store.EditMessage = window.require('WAWebSendMessageEditAction');
65
+ window.Store.SendSeen = window.require('WAWebUpdateUnreadChatAction');
66
+ window.Store.User = window.require('WAWebUserPrefsMeUser');
67
+ window.Store.ContactMethods = window.require('WAWebContactGetters');
68
+ window.Store.UserConstructor = window.require('WAWebWid');
69
+ window.Store.Validators = window.require('WALinkify');
70
+ window.Store.WidFactory = window.require('WAWebWidFactory');
71
+ window.Store.ProfilePic = window.require('WAWebContactProfilePicThumbBridge');
72
+ window.Store.PresenceUtils = window.require('WAWebPresenceChatAction');
73
+ window.Store.ChatState = window.require('WAWebChatStateBridge');
74
+ window.Store.findCommonGroups = window.require('WAWebFindCommonGroupsContactAction').findCommonGroups;
75
+ window.Store.StatusUtils = window.require('WAWebContactStatusBridge');
76
+ window.Store.ConversationMsgs = window.require('WAWebChatLoadMessages');
77
+ window.Store.sendReactionToMsg = window.require('WAWebSendReactionMsgAction').sendReactionToMsg;
78
+ window.Store.createOrUpdateReactionsModule = window.require('WAWebDBCreateOrUpdateReactions');
79
+ window.Store.EphemeralFields = window.require('WAWebGetEphemeralFieldsMsgActionsUtils');
80
+ window.Store.MsgActionChecks = window.require('WAWebMsgActionCapability');
81
+ window.Store.QuotedMsg = window.require('WAWebQuotedMsgModelUtils');
82
+ window.Store.LinkPreview = window.require('WAWebLinkPreviewChatAction');
83
+ window.Store.Socket = window.require('WADeprecatedSendIq');
84
+ window.Store.SocketWap = window.require('WAWap');
85
+ window.Store.SearchContext = window.require('WAWebChatMessageSearch');
86
+ window.Store.DrawerManager = window.require('WAWebDrawerManager').DrawerManager;
87
+ window.Store.LidUtils = window.require('WAWebApiContact');
88
+ window.Store.WidToJid = window.require('WAWebWidToJid');
89
+ window.Store.JidToWid = window.require('WAWebJidToWid');
90
+ window.Store.getMsgInfo = window.require('WAWebApiMessageInfoStore').queryMsgInfo;
91
+ window.Store.QueryExist = window.require('WAWebQueryExistsJob').queryWidExists;
92
+ window.Store.ReplyUtils = window.require('WAWebMsgReply');
93
+ window.Store.BotSecret = window.require('WAWebBotMessageSecret');
94
+ window.Store.BotProfiles = window.require('WAWebBotProfileCollection');
95
+ window.Store.ContactCollection = window.require('WAWebContactCollection').ContactCollection;
96
+ window.Store.DeviceList = window.require('WAWebApiDeviceList');
97
+ window.Store.HistorySync = window.require('WAWebSendNonMessageDataRequest');
98
+ window.Store.AddonReactionTable = window.require('WAWebAddonReactionTableMode').reactionTableMode;
99
+ window.Store.AddonPollVoteTable = window.require('WAWebAddonPollVoteTableMode').pollVoteTableMode;
100
+ window.Store.PinnedMsgUtils = window.require('WAWebPinInChatSchema');
101
+ window.Store.ChatGetters = window.require('WAWebChatGetters');
102
+ window.Store.PinnedMsgUtils = window.require('WAWebSendPinMessageAction');
103
+ window.Store.UploadUtils = window.require('WAWebUploadManager');
104
+ window.Store.WAWebStreamModel = window.require('WAWebStreamModel');
105
+
106
+ window.Store.Settings = {
107
+ ...window.require('WAWebUserPrefsGeneral'),
108
+ ...window.require('WAWebUserPrefsNotifications'),
109
+ setPushname: window.require('WAWebSetPushnameConnAction').setPushname
110
+ };
111
+ window.Store.NumberInfo = {
112
+ ...window.require('WAPhoneUtils'),
113
+ ...window.require('WAPhoneFindCC')
114
+ };
115
+ window.Store.ForwardUtils = {
116
+ ...window.require('WAWebChatForwardMessage')
117
+ };
118
+ window.Store.ScheduledEventMsgUtils = {
119
+ ...window.require('WAWebGenerateEventCallLink'),
120
+ ...window.require('WAWebSendEventEditMsgAction'),
121
+ ...window.require('WAWebSendEventResponseMsgAction')
122
+ };
123
+ window.Store.VCard = {
124
+ ...window.require('WAWebFrontendVcardUtils'),
125
+ ...window.require('WAWebVcardParsingUtils'),
126
+ ...window.require('WAWebVcardGetNameFromParsed')
127
+ };
128
+ window.Store.StickerTools = {
129
+ ...window.require('WAWebImageUtils'),
130
+ ...window.require('WAWebAddWebpMetadata')
131
+ };
132
+ window.Store.GroupUtils = {
133
+ ...window.require('WAWebGroupCreateJob'),
134
+ ...window.require('WAWebGroupModifyInfoJob'),
135
+ ...window.require('WAWebExitGroupAction'),
136
+ ...window.require('WAWebContactProfilePicThumbBridge')
137
+ };
138
+ window.Store.GroupParticipants = {
139
+ ...window.require('WAWebModifyParticipantsGroupAction'),
140
+ ...window.require('WASmaxGroupsAddParticipantsRPC')
141
+ };
142
+ window.Store.GroupInvite = {
143
+ ...window.require('WAWebGroupInviteJob'),
144
+ ...window.require('WAWebGroupQueryJob'),
145
+ ...window.require('WAWebMexFetchGroupInviteCodeJob')
146
+ };
147
+ window.Store.GroupInviteV4 = {
148
+ ...window.require('WAWebGroupInviteV4Job'),
149
+ ...window.require('WAWebChatSendMessages')
150
+ };
151
+ window.Store.MembershipRequestUtils = {
152
+ ...window.require('WAWebApiMembershipApprovalRequestStore'),
153
+ ...window.require('WASmaxGroupsMembershipRequestsActionRPC')
154
+ };
155
+ window.Store.ChannelUtils = {
156
+ ...window.require('WAWebLoadNewsletterPreviewChatAction'),
157
+ ...window.require('WAWebNewsletterMetadataQueryJob'),
158
+ ...window.require('WAWebNewsletterCreateQueryJob'),
159
+ ...window.require('WAWebEditNewsletterMetadataAction'),
160
+ ...window.require('WAWebNewsletterDeleteAction'),
161
+ ...window.require('WAWebNewsletterSubscribeAction'),
162
+ ...window.require('WAWebNewsletterUnsubscribeAction'),
163
+ ...window.require('WAWebNewsletterDirectorySearchAction'),
164
+ ...window.require('WAWebNewsletterToggleMuteStateJob'),
165
+ ...window.require('WAWebNewsletterGatingUtils'),
166
+ ...window.require('WAWebNewsletterModelUtils'),
167
+ ...window.require('WAWebMexAcceptNewsletterAdminInviteJob'),
168
+ ...window.require('WAWebMexRevokeNewsletterAdminInviteJob'),
169
+ ...window.require('WAWebChangeNewsletterOwnerAction'),
170
+ ...window.require('WAWebDemoteNewsletterAdminAction'),
171
+ ...window.require('WAWebNewsletterDemoteAdminJob'),
172
+ countryCodesIso: window.require('WAWebCountriesNativeCountryNames'),
173
+ currentRegion: window.require('WAWebL10N').getRegion(),
174
+ };
175
+ window.Store.SendChannelMessage = {
176
+ ...window.require('WAWebNewsletterUpdateMsgsRecordsJob'),
177
+ ...window.require('WAWebMsgDataFromModel'),
178
+ ...window.require('WAWebNewsletterSendMessageJob'),
179
+ ...window.require('WAWebNewsletterSendMsgAction'),
180
+ ...window.require('WAMediaCalculateFilehash')
181
+ };
182
+ window.Store.ChannelSubscribers = {
183
+ ...window.require('WAWebMexFetchNewsletterSubscribersJob'),
184
+ ...window.require('WAWebNewsletterSubscriberListAction')
185
+ };
186
+ window.Store.AddressbookContactUtils = {
187
+ ...window.require('WAWebSaveContactAction'),
188
+ ...window.require('WAWebDeleteContactAction')
189
+ };
190
+
191
+ if (!window.Store.Chat._find || !window.Store.Chat.findImpl) {
192
+ window.Store.Chat._find = e => {
193
+ const target = window.Store.Chat.get(e);
194
+ return target ? Promise.resolve(target) : Promise.resolve({
195
+ id: e
196
+ });
197
+ };
198
+ window.Store.Chat.findImpl = window.Store.Chat._find;
199
+ }
200
+
201
+ /**
202
+ * Target options object description
203
+ * @typedef {Object} TargetOptions
204
+ * @property {string|number} module The target module
205
+ * @property {string} function The function name to get from a module
206
+ */
207
+ /**
208
+ * Function to modify functions
209
+ * @param {TargetOptions} target Options specifying the target function to search for modifying
210
+ * @param {Function} callback Modified function
211
+ */
212
+ window.injectToFunction = (target, callback) => {
213
+ const module = window.require(target.module);
214
+ const originalFunction = module[target.function];
215
+ const modifiedFunction = (...args) => callback(originalFunction, ...args);
216
+ module[target.function] = modifiedFunction;
217
+ };
218
+
219
+ window.injectToFunction({ module: 'WAWebBackendJobsCommon', function: 'mediaTypeFromProtobuf' }, (func, ...args) => { const [proto] = args; return proto.locationMessage ? null : func(...args); });
220
+
221
+ window.injectToFunction({ module: 'WAWebE2EProtoUtils', function: 'typeAttributeFromProtobuf' }, (func, ...args) => { const [proto] = args; return proto.locationMessage || proto.groupInviteMessage ? 'text' : func(...args); });
222
+
223
+ };