@pney/whatsapp-web 1.34.4-node20 → 1.34.6
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/example.js +7 -0
- package/index.d.ts +21 -37
- package/package.json +2 -3
- package/src/Client.js +305 -258
- package/src/authStrategies/RemoteAuth.js +49 -41
- package/src/structures/Channel.js +11 -9
- package/src/structures/Chat.js +8 -2
- package/src/structures/ClientInfo.js +1 -1
- package/src/structures/Contact.js +14 -7
- package/src/structures/GroupChat.js +27 -29
- package/src/structures/Message.js +46 -34
- package/src/util/Injected/Utils.js +309 -149
- package/src/util/InterfaceController.js +18 -18
- package/src/util/Puppeteer.js +2 -2
- package/src/util/Injected/AuthStore/LegacyAuthStore.js +0 -22
- package/src/util/Injected/LegacyStore.js +0 -146
|
@@ -16,7 +16,7 @@ class InterfaceController {
|
|
|
16
16
|
async openChatWindow(chatId) {
|
|
17
17
|
return await this.pupPage.evaluate(async (chatId) => {
|
|
18
18
|
const chat = await window.WWebJS.getChat(chatId, { getAsModel: false });
|
|
19
|
-
return await window.
|
|
19
|
+
return await (window.require('WAWebCmd').Cmd).openChatBottom({'chat':chat});
|
|
20
20
|
}, chatId);
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -27,7 +27,7 @@ class InterfaceController {
|
|
|
27
27
|
async openChatDrawer(chatId) {
|
|
28
28
|
await this.pupPage.evaluate(async chatId => {
|
|
29
29
|
let chat = await window.WWebJS.getChat(chatId, { getAsModel: false });
|
|
30
|
-
await window.
|
|
30
|
+
await (window.require('WAWebCmd').Cmd).openDrawerMid(chat);
|
|
31
31
|
}, chatId);
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -38,7 +38,7 @@ class InterfaceController {
|
|
|
38
38
|
async openChatSearch(chatId) {
|
|
39
39
|
await this.pupPage.evaluate(async chatId => {
|
|
40
40
|
let chat = await window.WWebJS.getChat(chatId, { getAsModel: false });
|
|
41
|
-
await window.
|
|
41
|
+
await (window.require('WAWebCmd').Cmd).chatSearch(chat);
|
|
42
42
|
}, chatId);
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -48,10 +48,10 @@ class InterfaceController {
|
|
|
48
48
|
*/
|
|
49
49
|
async openChatWindowAt(msgId) {
|
|
50
50
|
await this.pupPage.evaluate(async (msgId) => {
|
|
51
|
-
const msg = window.
|
|
52
|
-
const chat = window.
|
|
53
|
-
const searchContext = await window.
|
|
54
|
-
await window.
|
|
51
|
+
const msg = (window.require('WAWebCollections')).Msg.get(msgId) || (await (window.require('WAWebCollections')).Msg.getMessagesById([msgId]))?.messages?.[0];
|
|
52
|
+
const chat = (window.require('WAWebCollections')).Chat.get(msg.id.remote) ?? await (window.require('WAWebCollections')).Chat.find(msg.id.remote);
|
|
53
|
+
const searchContext = await (window.require('WAWebChatMessageSearch')).getSearchContext(chat, msg.id);
|
|
54
|
+
await (window.require('WAWebCmd').Cmd).openChatAt({ chat: chat, msgContext: searchContext });
|
|
55
55
|
}, msgId);
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -61,8 +61,8 @@ class InterfaceController {
|
|
|
61
61
|
*/
|
|
62
62
|
async openMessageDrawer(msgId) {
|
|
63
63
|
await this.pupPage.evaluate(async msgId => {
|
|
64
|
-
const msg = window.
|
|
65
|
-
await window.
|
|
64
|
+
const msg = (window.require('WAWebCollections')).Msg.get(msgId) || (await (window.require('WAWebCollections')).Msg.getMessagesById([msgId]))?.messages?.[0];
|
|
65
|
+
await (window.require('WAWebCmd').Cmd).msgInfoDrawer(msg);
|
|
66
66
|
}, msgId);
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -71,7 +71,7 @@ class InterfaceController {
|
|
|
71
71
|
*/
|
|
72
72
|
async closeRightDrawer() {
|
|
73
73
|
await this.pupPage.evaluate(async () => {
|
|
74
|
-
await window.
|
|
74
|
+
await window.require('WAWebDrawerManager').DrawerManager.closeDrawerRight();
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -80,8 +80,8 @@ class InterfaceController {
|
|
|
80
80
|
*/
|
|
81
81
|
async getFeatures() {
|
|
82
82
|
return await this.pupPage.evaluate(() => {
|
|
83
|
-
if(!window.
|
|
84
|
-
return window.
|
|
83
|
+
if(!(window.require('WAWebCollections')).Features) throw new Error('This version of Whatsapp Web does not support features');
|
|
84
|
+
return (window.require('WAWebCollections')).Features.F;
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -91,8 +91,8 @@ class InterfaceController {
|
|
|
91
91
|
*/
|
|
92
92
|
async checkFeatureStatus(feature) {
|
|
93
93
|
return await this.pupPage.evaluate((feature) => {
|
|
94
|
-
if(!window.
|
|
95
|
-
return window.
|
|
94
|
+
if(!(window.require('WAWebCollections')).Features) throw new Error('This version of Whatsapp Web does not support features');
|
|
95
|
+
return (window.require('WAWebCollections')).Features.supportsFeature(feature);
|
|
96
96
|
}, feature);
|
|
97
97
|
}
|
|
98
98
|
|
|
@@ -102,9 +102,9 @@ class InterfaceController {
|
|
|
102
102
|
*/
|
|
103
103
|
async enableFeatures(features) {
|
|
104
104
|
await this.pupPage.evaluate((features) => {
|
|
105
|
-
if(!window.
|
|
105
|
+
if(!(window.require('WAWebCollections')).Features) throw new Error('This version of Whatsapp Web does not support features');
|
|
106
106
|
for (const feature in features) {
|
|
107
|
-
window.
|
|
107
|
+
(window.require('WAWebCollections')).Features.setFeature(features[feature], true);
|
|
108
108
|
}
|
|
109
109
|
}, features);
|
|
110
110
|
}
|
|
@@ -115,9 +115,9 @@ class InterfaceController {
|
|
|
115
115
|
*/
|
|
116
116
|
async disableFeatures(features) {
|
|
117
117
|
await this.pupPage.evaluate((features) => {
|
|
118
|
-
if(!window.
|
|
118
|
+
if(!(window.require('WAWebCollections')).Features) throw new Error('This version of Whatsapp Web does not support features');
|
|
119
119
|
for (const feature in features) {
|
|
120
|
-
window.
|
|
120
|
+
(window.require('WAWebCollections')).Features.setFeature(features[feature], false);
|
|
121
121
|
}
|
|
122
122
|
}, features);
|
|
123
123
|
}
|
package/src/util/Puppeteer.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* NOTE:
|
|
5
5
|
* Rewrite it to 'upsertFunction' after updating Puppeteer to 20.6 or higher
|
|
6
6
|
* using page.removeExposedFunction
|
|
7
|
-
* https://pptr.dev/api/puppeteer.page.
|
|
7
|
+
* https://pptr.dev/api/puppeteer.page.removeexposedfunction
|
|
8
8
|
*
|
|
9
|
-
* @param {
|
|
9
|
+
* @param {object} page - Puppeteer Page instance
|
|
10
10
|
* @param {string} name
|
|
11
11
|
* @param {Function} fn
|
|
12
12
|
*/
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,146 +0,0 @@
|
|
|
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
|
-
};
|