whatsapp-web-sj.js 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +3 -0
- package/CODE_OF_CONDUCT.md +133 -0
- package/LICENSE +201 -0
- package/README.md +185 -0
- package/example.js +634 -0
- package/index.d.ts +1842 -0
- package/index.js +32 -0
- package/package.json +55 -0
- package/shell.js +36 -0
- package/src/Client.js +1747 -0
- package/src/authStrategies/BaseAuthStrategy.js +27 -0
- package/src/authStrategies/LocalAuth.js +56 -0
- package/src/authStrategies/NoAuth.js +12 -0
- package/src/authStrategies/RemoteAuth.js +204 -0
- package/src/factories/ChatFactory.js +16 -0
- package/src/factories/ContactFactory.js +16 -0
- package/src/structures/Base.js +22 -0
- package/src/structures/BusinessContact.js +21 -0
- package/src/structures/Buttons.js +82 -0
- package/src/structures/Call.js +76 -0
- package/src/structures/Chat.js +275 -0
- package/src/structures/ClientInfo.js +71 -0
- package/src/structures/Contact.js +208 -0
- package/src/structures/GroupChat.js +475 -0
- package/src/structures/GroupNotification.js +104 -0
- package/src/structures/Label.js +50 -0
- package/src/structures/List.js +79 -0
- package/src/structures/Location.js +61 -0
- package/src/structures/Message.js +711 -0
- package/src/structures/MessageMedia.js +111 -0
- package/src/structures/Order.js +52 -0
- package/src/structures/Payment.js +79 -0
- package/src/structures/Poll.js +44 -0
- package/src/structures/PollVote.js +61 -0
- package/src/structures/PrivateChat.js +13 -0
- package/src/structures/PrivateContact.js +13 -0
- package/src/structures/Product.js +68 -0
- package/src/structures/ProductMetadata.js +25 -0
- package/src/structures/Reaction.js +69 -0
- package/src/structures/index.js +24 -0
- package/src/util/Constants.js +176 -0
- package/src/util/Injected/AuthStore/AuthStore.js +17 -0
- package/src/util/Injected/AuthStore/LegacyAuthStore.js +22 -0
- package/src/util/Injected/LegacyStore.js +146 -0
- package/src/util/Injected/Store.js +167 -0
- package/src/util/Injected/Utils.js +1017 -0
- package/src/util/InterfaceController.js +127 -0
- package/src/util/Util.js +186 -0
- package/src/webCache/LocalWebCache.js +40 -0
- package/src/webCache/RemoteWebCache.js +40 -0
- package/src/webCache/WebCache.js +14 -0
- package/src/webCache/WebCacheFactory.js +20 -0
@@ -0,0 +1,176 @@
|
|
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.1016590837',
|
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
|
+
};
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Client status
|
26
|
+
* @readonly
|
27
|
+
* @enum {number}
|
28
|
+
*/
|
29
|
+
exports.Status = {
|
30
|
+
INITIALIZING: 0,
|
31
|
+
AUTHENTICATING: 1,
|
32
|
+
READY: 3
|
33
|
+
};
|
34
|
+
|
35
|
+
/**
|
36
|
+
* Events that can be emitted by the client
|
37
|
+
* @readonly
|
38
|
+
* @enum {string}
|
39
|
+
*/
|
40
|
+
exports.Events = {
|
41
|
+
AUTHENTICATED: 'authenticated',
|
42
|
+
AUTHENTICATION_FAILURE: 'auth_failure',
|
43
|
+
READY: 'ready',
|
44
|
+
CHAT_REMOVED: 'chat_removed',
|
45
|
+
CHAT_ARCHIVED: 'chat_archived',
|
46
|
+
MESSAGE_RECEIVED: 'message',
|
47
|
+
MESSAGE_CIPHERTEXT: 'message_ciphertext',
|
48
|
+
MESSAGE_CREATE: 'message_create',
|
49
|
+
MESSAGE_REVOKED_EVERYONE: 'message_revoke_everyone',
|
50
|
+
MESSAGE_REVOKED_ME: 'message_revoke_me',
|
51
|
+
MESSAGE_ACK: 'message_ack',
|
52
|
+
MESSAGE_EDIT: 'message_edit',
|
53
|
+
UNREAD_COUNT: 'unread_count',
|
54
|
+
MESSAGE_REACTION: 'message_reaction',
|
55
|
+
MEDIA_UPLOADED: 'media_uploaded',
|
56
|
+
CONTACT_CHANGED: 'contact_changed',
|
57
|
+
GROUP_JOIN: 'group_join',
|
58
|
+
GROUP_LEAVE: 'group_leave',
|
59
|
+
GROUP_ADMIN_CHANGED: 'group_admin_changed',
|
60
|
+
GROUP_MEMBERSHIP_REQUEST: 'group_membership_request',
|
61
|
+
GROUP_UPDATE: 'group_update',
|
62
|
+
QR_RECEIVED: 'qr',
|
63
|
+
LOADING_SCREEN: 'loading_screen',
|
64
|
+
DISCONNECTED: 'disconnected',
|
65
|
+
STATE_CHANGED: 'change_state',
|
66
|
+
BATTERY_CHANGED: 'change_battery',
|
67
|
+
INCOMING_CALL: 'call',
|
68
|
+
REMOTE_SESSION_SAVED: 'remote_session_saved',
|
69
|
+
VOTE_UPDATE: 'vote_update'
|
70
|
+
};
|
71
|
+
|
72
|
+
/**
|
73
|
+
* Message types
|
74
|
+
* @readonly
|
75
|
+
* @enum {string}
|
76
|
+
*/
|
77
|
+
exports.MessageTypes = {
|
78
|
+
TEXT: 'chat',
|
79
|
+
AUDIO: 'audio',
|
80
|
+
VOICE: 'ptt',
|
81
|
+
IMAGE: 'image',
|
82
|
+
VIDEO: 'video',
|
83
|
+
DOCUMENT: 'document',
|
84
|
+
STICKER: 'sticker',
|
85
|
+
LOCATION: 'location',
|
86
|
+
CONTACT_CARD: 'vcard',
|
87
|
+
CONTACT_CARD_MULTI: 'multi_vcard',
|
88
|
+
ORDER: 'order',
|
89
|
+
REVOKED: 'revoked',
|
90
|
+
PRODUCT: 'product',
|
91
|
+
UNKNOWN: 'unknown',
|
92
|
+
GROUP_INVITE: 'groups_v4_invite',
|
93
|
+
LIST: 'list',
|
94
|
+
LIST_RESPONSE: 'list_response',
|
95
|
+
BUTTONS_RESPONSE: 'buttons_response',
|
96
|
+
PAYMENT: 'payment',
|
97
|
+
BROADCAST_NOTIFICATION: 'broadcast_notification',
|
98
|
+
CALL_LOG: 'call_log',
|
99
|
+
CIPHERTEXT: 'ciphertext',
|
100
|
+
DEBUG: 'debug',
|
101
|
+
E2E_NOTIFICATION: 'e2e_notification',
|
102
|
+
GP2: 'gp2',
|
103
|
+
GROUP_NOTIFICATION: 'group_notification',
|
104
|
+
HSM: 'hsm',
|
105
|
+
INTERACTIVE: 'interactive',
|
106
|
+
NATIVE_FLOW: 'native_flow',
|
107
|
+
NOTIFICATION: 'notification',
|
108
|
+
NOTIFICATION_TEMPLATE: 'notification_template',
|
109
|
+
OVERSIZED: 'oversized',
|
110
|
+
PROTOCOL: 'protocol',
|
111
|
+
REACTION: 'reaction',
|
112
|
+
TEMPLATE_BUTTON_REPLY: 'template_button_reply',
|
113
|
+
POLL_CREATION: 'poll_creation',
|
114
|
+
};
|
115
|
+
|
116
|
+
/**
|
117
|
+
* Group notification types
|
118
|
+
* @readonly
|
119
|
+
* @enum {string}
|
120
|
+
*/
|
121
|
+
exports.GroupNotificationTypes = {
|
122
|
+
ADD: 'add',
|
123
|
+
INVITE: 'invite',
|
124
|
+
REMOVE: 'remove',
|
125
|
+
LEAVE: 'leave',
|
126
|
+
SUBJECT: 'subject',
|
127
|
+
DESCRIPTION: 'description',
|
128
|
+
PICTURE: 'picture',
|
129
|
+
ANNOUNCE: 'announce',
|
130
|
+
RESTRICT: 'restrict',
|
131
|
+
};
|
132
|
+
|
133
|
+
/**
|
134
|
+
* Chat types
|
135
|
+
* @readonly
|
136
|
+
* @enum {string}
|
137
|
+
*/
|
138
|
+
exports.ChatTypes = {
|
139
|
+
SOLO: 'solo',
|
140
|
+
GROUP: 'group',
|
141
|
+
UNKNOWN: 'unknown'
|
142
|
+
};
|
143
|
+
|
144
|
+
/**
|
145
|
+
* WhatsApp state
|
146
|
+
* @readonly
|
147
|
+
* @enum {string}
|
148
|
+
*/
|
149
|
+
exports.WAState = {
|
150
|
+
CONFLICT: 'CONFLICT',
|
151
|
+
CONNECTED: 'CONNECTED',
|
152
|
+
DEPRECATED_VERSION: 'DEPRECATED_VERSION',
|
153
|
+
OPENING: 'OPENING',
|
154
|
+
PAIRING: 'PAIRING',
|
155
|
+
PROXYBLOCK: 'PROXYBLOCK',
|
156
|
+
SMB_TOS_BLOCK: 'SMB_TOS_BLOCK',
|
157
|
+
TIMEOUT: 'TIMEOUT',
|
158
|
+
TOS_BLOCK: 'TOS_BLOCK',
|
159
|
+
UNLAUNCHED: 'UNLAUNCHED',
|
160
|
+
UNPAIRED: 'UNPAIRED',
|
161
|
+
UNPAIRED_IDLE: 'UNPAIRED_IDLE'
|
162
|
+
};
|
163
|
+
|
164
|
+
/**
|
165
|
+
* Message ACK
|
166
|
+
* @readonly
|
167
|
+
* @enum {number}
|
168
|
+
*/
|
169
|
+
exports.MessageAck = {
|
170
|
+
ACK_ERROR: -1,
|
171
|
+
ACK_PENDING: 0,
|
172
|
+
ACK_SERVER: 1,
|
173
|
+
ACK_DEVICE: 2,
|
174
|
+
ACK_READ: 3,
|
175
|
+
ACK_PLAYED: 4,
|
176
|
+
};
|
@@ -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,167 @@
|
|
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.NumberInfo = window.require('WAPhoneUtils');
|
59
|
+
window.Store.OpaqueData = window.require('WAWebMediaOpaqueData');
|
60
|
+
window.Store.QueryProduct = window.require('WAWebBizProductCatalogBridge');
|
61
|
+
window.Store.QueryOrder = window.require('WAWebBizOrderBridge');
|
62
|
+
window.Store.SendClear = window.require('WAWebChatClearBridge');
|
63
|
+
window.Store.SendDelete = window.require('WAWebDeleteChatAction');
|
64
|
+
window.Store.SendMessage = window.require('WAWebSendMsgChatAction');
|
65
|
+
window.Store.EditMessage = window.require('WAWebSendMessageEditAction');
|
66
|
+
window.Store.SendSeen = window.require('WAWebUpdateUnreadChatAction');
|
67
|
+
window.Store.User = window.require('WAWebUserPrefsMeUser');
|
68
|
+
window.Store.ContactMethods = window.require('WAWebContactGetters');
|
69
|
+
window.Store.UploadUtils = window.require('WAWebUploadManager');
|
70
|
+
window.Store.UserConstructor = window.require('WAWebWid');
|
71
|
+
window.Store.Validators = window.require('WALinkify');
|
72
|
+
window.Store.VCard = window.require('WAWebFrontendVcardUtils');
|
73
|
+
window.Store.WidFactory = window.require('WAWebWidFactory');
|
74
|
+
window.Store.ProfilePic = window.require('WAWebContactProfilePicThumbBridge');
|
75
|
+
window.Store.PresenceUtils = window.require('WAWebPresenceChatAction');
|
76
|
+
window.Store.ChatState = window.require('WAWebChatStateBridge');
|
77
|
+
window.Store.findCommonGroups = window.require('WAWebFindCommonGroupsContactAction').findCommonGroups;
|
78
|
+
window.Store.StatusUtils = window.require('WAWebContactStatusBridge');
|
79
|
+
window.Store.ConversationMsgs = window.require('WAWebChatLoadMessages');
|
80
|
+
window.Store.sendReactionToMsg = window.require('WAWebSendReactionMsgAction').sendReactionToMsg;
|
81
|
+
window.Store.createOrUpdateReactionsModule = window.require('WAWebDBCreateOrUpdateReactions');
|
82
|
+
window.Store.EphemeralFields = window.require('WAWebGetEphemeralFieldsMsgActionsUtils');
|
83
|
+
window.Store.MsgActionChecks = window.require('WAWebMsgActionCapability');
|
84
|
+
window.Store.QuotedMsg = window.require('WAWebQuotedMsgModelUtils');
|
85
|
+
window.Store.LinkPreview = window.require('WAWebLinkPreviewChatAction');
|
86
|
+
window.Store.Socket = window.require('WADeprecatedSendIq');
|
87
|
+
window.Store.SocketWap = window.require('WAWap');
|
88
|
+
window.Store.SearchContext = window.require('WAWebChatMessageSearch').getSearchContext;
|
89
|
+
window.Store.DrawerManager = window.require('WAWebDrawerManager').DrawerManager;
|
90
|
+
window.Store.LidUtils = window.require('WAWebApiContact');
|
91
|
+
window.Store.WidToJid = window.require('WAWebWidToJid');
|
92
|
+
window.Store.JidToWid = window.require('WAWebJidToWid');
|
93
|
+
window.Store.getMsgInfo = window.require('WAWebApiMessageInfoStore').queryMsgInfo;
|
94
|
+
window.Store.pinUnpinMsg = window.require('WAWebSendPinMessageAction').sendPinInChatMsg;
|
95
|
+
window.Store.QueryExist = window.require('WAWebQueryExistsJob').queryWidExists;
|
96
|
+
window.Store.ReplyUtils = window.require('WAWebMsgReply');
|
97
|
+
window.Store.Settings = window.require('WAWebUserPrefsGeneral');
|
98
|
+
window.Store.BotSecret = window.require('WAWebBotMessageSecret');
|
99
|
+
window.Store.BotProfiles = window.require('WAWebBotProfileCollection');
|
100
|
+
window.Store.DeviceList = window.require('WAWebApiDeviceList');
|
101
|
+
if (window.compareWwebVersions(window.Debug.VERSION, '>=', '2.3000.1014111620'))
|
102
|
+
window.Store.AddonReactionTable = window.require('WAWebAddonReactionTableMode').reactionTableMode;
|
103
|
+
|
104
|
+
window.Store.ForwardUtils = {
|
105
|
+
...window.require('WAWebForwardMessagesToChat')
|
106
|
+
};
|
107
|
+
|
108
|
+
window.Store.StickerTools = {
|
109
|
+
...window.require('WAWebImageUtils'),
|
110
|
+
...window.require('WAWebAddWebpMetadata')
|
111
|
+
};
|
112
|
+
window.Store.GroupUtils = {
|
113
|
+
...window.require('WAWebGroupCreateJob'),
|
114
|
+
...window.require('WAWebGroupModifyInfoJob'),
|
115
|
+
...window.require('WAWebExitGroupAction'),
|
116
|
+
...window.require('WAWebContactProfilePicThumbBridge')
|
117
|
+
};
|
118
|
+
window.Store.GroupParticipants = {
|
119
|
+
...window.require('WAWebModifyParticipantsGroupAction'),
|
120
|
+
...window.require('WASmaxGroupsAddParticipantsRPC')
|
121
|
+
};
|
122
|
+
window.Store.GroupInvite = {
|
123
|
+
...window.require('WAWebGroupInviteJob'),
|
124
|
+
...window.require('WAWebGroupQueryJob')
|
125
|
+
};
|
126
|
+
window.Store.GroupInviteV4 = {
|
127
|
+
...window.require('WAWebGroupInviteV4Job'),
|
128
|
+
...window.require('WAWebChatSendMessages')
|
129
|
+
};
|
130
|
+
window.Store.MembershipRequestUtils = {
|
131
|
+
...window.require('WAWebApiMembershipApprovalRequestStore'),
|
132
|
+
...window.require('WASmaxGroupsMembershipRequestsActionRPC')
|
133
|
+
};
|
134
|
+
|
135
|
+
if (!window.Store.Chat._find || !window.Store.Chat.findImpl) {
|
136
|
+
window.Store.Chat._find = e => {
|
137
|
+
const target = window.Store.Chat.get(e);
|
138
|
+
return target ? Promise.resolve(target) : Promise.resolve({
|
139
|
+
id: e
|
140
|
+
});
|
141
|
+
};
|
142
|
+
window.Store.Chat.findImpl = window.Store.Chat._find;
|
143
|
+
}
|
144
|
+
|
145
|
+
/**
|
146
|
+
* Target options object description
|
147
|
+
* @typedef {Object} TargetOptions
|
148
|
+
* @property {string|number} module The target module
|
149
|
+
* @property {string} function The function name to get from a module
|
150
|
+
*/
|
151
|
+
/**
|
152
|
+
* Function to modify functions
|
153
|
+
* @param {TargetOptions} target Options specifying the target function to search for modifying
|
154
|
+
* @param {Function} callback Modified function
|
155
|
+
*/
|
156
|
+
window.injectToFunction = (target, callback) => {
|
157
|
+
const module = window.require(target.module);
|
158
|
+
const originalFunction = module[target.function];
|
159
|
+
const modifiedFunction = (...args) => callback(originalFunction, ...args);
|
160
|
+
module[target.function] = modifiedFunction;
|
161
|
+
};
|
162
|
+
|
163
|
+
window.injectToFunction({ module: 'WAWebBackendJobsCommon', function: 'mediaTypeFromProtobuf' }, (func, ...args) => { const [proto] = args; return proto.locationMessage ? null : func(...args); });
|
164
|
+
|
165
|
+
window.injectToFunction({ module: 'WAWebE2EProtoUtils', function: 'typeAttributeFromProtobuf' }, (func, ...args) => { const [proto] = args; return proto.locationMessage || proto.groupInviteMessage ? 'text' : func(...args); });
|
166
|
+
|
167
|
+
};
|