@than-xs/baileys 2.0.3
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/LICENSE +21 -0
- package/README.md +422 -0
- package/WAProto/index.js +169661 -0
- package/engine-requirements.js +10 -0
- package/lib/Defaults/baileys-version.json +3 -0
- package/lib/Defaults/index.js +147 -0
- package/lib/Defaults/phonenumber-mcc.json +223 -0
- package/lib/Signal/Group/ciphertext-message.js +15 -0
- package/lib/Signal/Group/group-session-builder.js +64 -0
- package/lib/Signal/Group/group_cipher.js +96 -0
- package/lib/Signal/Group/index.js +57 -0
- package/lib/Signal/Group/keyhelper.js +55 -0
- package/lib/Signal/Group/queue-job.js +57 -0
- package/lib/Signal/Group/sender-chain-key.js +34 -0
- package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
- package/lib/Signal/Group/sender-key-message.js +69 -0
- package/lib/Signal/Group/sender-key-name.js +51 -0
- package/lib/Signal/Group/sender-key-record.js +53 -0
- package/lib/Signal/Group/sender-key-state.js +99 -0
- package/lib/Signal/Group/sender-message-key.js +29 -0
- package/lib/Signal/libsignal.js +174 -0
- package/lib/Socket/Client/abstract-socket-client.js +13 -0
- package/lib/Socket/Client/index.js +19 -0
- package/lib/Socket/Client/mobile-socket-client.js +65 -0
- package/lib/Socket/Client/web-socket-client.js +62 -0
- package/lib/Socket/business.js +260 -0
- package/lib/Socket/chats.js +1002 -0
- package/lib/Socket/dugong.js +637 -0
- package/lib/Socket/groups.js +317 -0
- package/lib/Socket/index.js +11 -0
- package/lib/Socket/messages-recv.js +1110 -0
- package/lib/Socket/messages-send.js +831 -0
- package/lib/Socket/newsletter.js +459 -0
- package/lib/Socket/registration.js +166 -0
- package/lib/Socket/socket.js +662 -0
- package/lib/Socket/usync.js +70 -0
- package/lib/Store/index.js +10 -0
- package/lib/Store/make-cache-manager-store.js +83 -0
- package/lib/Store/make-in-memory-store.js +427 -0
- package/lib/Store/make-ordered-dictionary.js +81 -0
- package/lib/Store/object-repository.js +27 -0
- package/lib/Types/Auth.js +2 -0
- package/lib/Types/Call.js +2 -0
- package/lib/Types/Chat.js +4 -0
- package/lib/Types/Contact.js +2 -0
- package/lib/Types/Events.js +2 -0
- package/lib/Types/GroupMetadata.js +2 -0
- package/lib/Types/Label.js +27 -0
- package/lib/Types/LabelAssociation.js +9 -0
- package/lib/Types/Message.js +9 -0
- package/lib/Types/Newsletter.js +38 -0
- package/lib/Types/Product.js +2 -0
- package/lib/Types/Signal.js +2 -0
- package/lib/Types/Socket.js +2 -0
- package/lib/Types/State.js +2 -0
- package/lib/Types/USync.js +2 -0
- package/lib/Types/index.js +42 -0
- package/lib/Utils/auth-utils.js +206 -0
- package/lib/Utils/baileys-event-stream.js +63 -0
- package/lib/Utils/business.js +234 -0
- package/lib/Utils/chat-utils.js +729 -0
- package/lib/Utils/crypto.js +151 -0
- package/lib/Utils/decode-wa-message.js +198 -0
- package/lib/Utils/event-buffer.js +514 -0
- package/lib/Utils/generics.js +498 -0
- package/lib/Utils/history.js +96 -0
- package/lib/Utils/index.js +33 -0
- package/lib/Utils/link-preview.js +93 -0
- package/lib/Utils/logger.js +7 -0
- package/lib/Utils/lt-hash.js +51 -0
- package/lib/Utils/make-mutex.js +43 -0
- package/lib/Utils/messages-media.js +819 -0
- package/lib/Utils/messages.js +819 -0
- package/lib/Utils/noise-handler.js +155 -0
- package/lib/Utils/process-message.js +321 -0
- package/lib/Utils/signal.js +153 -0
- package/lib/Utils/use-multi-file-auth-state.js +119 -0
- package/lib/Utils/validate-connection.js +229 -0
- package/lib/WABinary/constants.js +40 -0
- package/lib/WABinary/decode.js +252 -0
- package/lib/WABinary/encode.js +265 -0
- package/lib/WABinary/generic-utils.js +198 -0
- package/lib/WABinary/index.js +21 -0
- package/lib/WABinary/jid-utils.js +62 -0
- package/lib/WABinary/types.js +2 -0
- package/lib/WAM/BinaryInfo.js +13 -0
- package/lib/WAM/constants.js +15350 -0
- package/lib/WAM/encode.js +155 -0
- package/lib/WAM/index.js +19 -0
- package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
- package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +57 -0
- package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
- package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
- package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
- package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
- package/lib/WAUSync/Protocols/index.js +20 -0
- package/lib/WAUSync/USyncQuery.js +89 -0
- package/lib/WAUSync/USyncUser.js +26 -0
- package/lib/WAUSync/index.js +19 -0
- package/lib/index.js +84 -0
- package/package.json +110 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAdditionalNode = exports.getBinaryNodeFilter = exports.binaryNodeToString = exports.getBinaryNodeMessages = exports.reduceBinaryNodeToDictionary = exports.assertNodeErrorFree = exports.getBinaryNodeChildUInt = exports.getBinaryNodeChildString = exports.getBinaryNodeChildBuffer = exports.getBinaryNodeChild = exports.getAllBinaryNodeChildren = exports.getBinaryNodeChildren = void 0;
|
|
4
|
+
const boom_1 = require("@hapi/boom");
|
|
5
|
+
const WAProto_1 = require("../../WAProto");
|
|
6
|
+
const Utils_1 = require("../Utils")
|
|
7
|
+
// some extra useful utilities
|
|
8
|
+
const getBinaryNodeChildren = (node, childTag) => {
|
|
9
|
+
if (Array.isArray(node?.content)) {
|
|
10
|
+
return node.content.filter(item => item.tag === childTag)
|
|
11
|
+
}
|
|
12
|
+
return []
|
|
13
|
+
}
|
|
14
|
+
exports.getBinaryNodeChildren = getBinaryNodeChildren;
|
|
15
|
+
const getAllBinaryNodeChildren = ({ content }) => {
|
|
16
|
+
if (Array.isArray(content)) {
|
|
17
|
+
return content
|
|
18
|
+
}
|
|
19
|
+
return []
|
|
20
|
+
}
|
|
21
|
+
exports.getAllBinaryNodeChildren = getAllBinaryNodeChildren;
|
|
22
|
+
const getBinaryNodeChild = (node, childTag) => {
|
|
23
|
+
if (Array.isArray(node?.content)) {
|
|
24
|
+
return node?.content.find(item => item.tag === childTag)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.getBinaryNodeChild = getBinaryNodeChild;
|
|
28
|
+
const getBinaryNodeChildBuffer = (node, childTag) => {
|
|
29
|
+
const child = getBinaryNodeChild(node, childTag)?.content
|
|
30
|
+
if (Buffer.isBuffer(child) || child instanceof Uint8Array) {
|
|
31
|
+
return child
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.getBinaryNodeChildBuffer = getBinaryNodeChildBuffer;
|
|
35
|
+
const getBinaryNodeChildString = (node, childTag) => {
|
|
36
|
+
const child = getBinaryNodeChild(node, childTag)?.content
|
|
37
|
+
if (Buffer.isBuffer(child) || child instanceof Uint8Array) {
|
|
38
|
+
return Buffer.from(child).toString('utf-8')
|
|
39
|
+
}
|
|
40
|
+
else if (typeof child === 'string') {
|
|
41
|
+
return child
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.getBinaryNodeChildString = getBinaryNodeChildString;
|
|
45
|
+
const getBinaryNodeChildUInt = (node, childTag, length) => {
|
|
46
|
+
const buff = getBinaryNodeChildBuffer(node, childTag)
|
|
47
|
+
if (buff) {
|
|
48
|
+
return bufferToUInt(buff, length)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.getBinaryNodeChildUInt = getBinaryNodeChildUInt;
|
|
52
|
+
const assertNodeErrorFree = (node) => {
|
|
53
|
+
const errNode = getBinaryNodeChild(node, 'error')
|
|
54
|
+
if (errNode) {
|
|
55
|
+
throw new boom_1.Boom(errNode.attrs.text || 'Unknown error', { data: +errNode.attrs.code })
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.assertNodeErrorFree = assertNodeErrorFree;
|
|
59
|
+
const reduceBinaryNodeToDictionary = (node, tag) => {
|
|
60
|
+
const nodes = getBinaryNodeChildren(node, tag)
|
|
61
|
+
const dict = nodes.reduce((dict, { attrs }) => {
|
|
62
|
+
dict[attrs.name || attrs.config_code] = attrs.value || attrs.config_value
|
|
63
|
+
return dict
|
|
64
|
+
}, {})
|
|
65
|
+
return dict
|
|
66
|
+
}
|
|
67
|
+
exports.reduceBinaryNodeToDictionary = reduceBinaryNodeToDictionary;
|
|
68
|
+
const getBinaryNodeMessages = ({ content }) => {
|
|
69
|
+
const msgs = []
|
|
70
|
+
if (Array.isArray(content)) {
|
|
71
|
+
for (const item of content) {
|
|
72
|
+
if (item.tag === 'message') {
|
|
73
|
+
msgs.push(WAProto_1.proto.WebMessageInfo.decode(item.content))
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return msgs
|
|
78
|
+
}
|
|
79
|
+
exports.getBinaryNodeMessages = getBinaryNodeMessages;
|
|
80
|
+
function bufferToUInt(e, t) {
|
|
81
|
+
let a = 0;
|
|
82
|
+
for (let i = 0; i < t; i++) {
|
|
83
|
+
a = 256 * a + e[i];
|
|
84
|
+
}
|
|
85
|
+
return a;
|
|
86
|
+
}
|
|
87
|
+
const tabs = (n) => '\t'.repeat(n);
|
|
88
|
+
function binaryNodeToString(node, i = 0) {
|
|
89
|
+
if (!node) {
|
|
90
|
+
return node;
|
|
91
|
+
}
|
|
92
|
+
if (typeof node === 'string') {
|
|
93
|
+
return tabs(i) + node;
|
|
94
|
+
}
|
|
95
|
+
if (node instanceof Uint8Array) {
|
|
96
|
+
return tabs(i) + Buffer.from(node).toString('hex');
|
|
97
|
+
}
|
|
98
|
+
if (Array.isArray(node)) {
|
|
99
|
+
return node.map((x) => tabs(i + 1) + binaryNodeToString(x, i + 1)).join('\n');
|
|
100
|
+
}
|
|
101
|
+
const children = binaryNodeToString(node.content, i + 1);
|
|
102
|
+
const tag = `<${node.tag} ${Object.entries(node.attrs || {})
|
|
103
|
+
.filter(([, v]) => v !== undefined)
|
|
104
|
+
.map(([k, v]) => `${k}='${v}'`)
|
|
105
|
+
.join(' ')}`;
|
|
106
|
+
const content = children ? `>\n${children}\n${tabs(i)}</${node.tag}>` : '/>';
|
|
107
|
+
return tag + content;
|
|
108
|
+
}
|
|
109
|
+
exports.binaryNodeToString = binaryNodeToString;
|
|
110
|
+
const getBinaryNodeFilter = (node) => {
|
|
111
|
+
if (!Array.isArray(node)) return false
|
|
112
|
+
|
|
113
|
+
return node.some(item =>
|
|
114
|
+
['native_flow'].includes(item?.content?.[0]?.content?.[0]?.tag) ||
|
|
115
|
+
['interactive', 'buttons', 'list'].includes(item?.content?.[0]?.tag) ||
|
|
116
|
+
['hsm', 'biz'].includes(item?.tag) ||
|
|
117
|
+
['bot'].includes(item?.tag) && item?.attrs?.biz_bot === '1'
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
exports.getBinaryNodeFilter = getBinaryNodeFilter;
|
|
121
|
+
const getAdditionalNode = (name) => {
|
|
122
|
+
if (name) name = name.toLowerCase()
|
|
123
|
+
const ts = Utils_1.unixTimestampSeconds(new Date()) - 77980457
|
|
124
|
+
|
|
125
|
+
const order_response_name = {
|
|
126
|
+
review_and_pay: 'order_details',
|
|
127
|
+
review_order: 'order_status',
|
|
128
|
+
payment_info: 'payment_info',
|
|
129
|
+
payment_status: 'payment_status',
|
|
130
|
+
payment_method: 'payment_method'
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const flow_name = {
|
|
134
|
+
cta_catalog: 'cta_catalog',
|
|
135
|
+
mpm: 'mpm',
|
|
136
|
+
call_request: 'call_permission_request',
|
|
137
|
+
view_catalog: 'automated_greeting_message_view_catalog',
|
|
138
|
+
wa_pay_detail: 'wa_payment_transaction_details',
|
|
139
|
+
send_location: 'send_location',
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if(order_response_name[name]) {
|
|
143
|
+
return [{
|
|
144
|
+
tag: 'biz',
|
|
145
|
+
attrs: {
|
|
146
|
+
native_flow_name: order_response_name[name]
|
|
147
|
+
},
|
|
148
|
+
content: []
|
|
149
|
+
}]
|
|
150
|
+
} else if (flow_name[name] || name === 'interactive' || name === 'buttons') {
|
|
151
|
+
return [{
|
|
152
|
+
tag: 'biz',
|
|
153
|
+
attrs: {
|
|
154
|
+
actual_actors: '2',
|
|
155
|
+
host_storage: '2',
|
|
156
|
+
privacy_mode_ts: `${ts}`
|
|
157
|
+
},
|
|
158
|
+
content: [{
|
|
159
|
+
tag: 'engagement',
|
|
160
|
+
attrs: {
|
|
161
|
+
customer_service_state: 'open',
|
|
162
|
+
conversation_state: 'open'
|
|
163
|
+
}
|
|
164
|
+
}, {
|
|
165
|
+
tag: 'interactive',
|
|
166
|
+
attrs: {
|
|
167
|
+
type: 'native_flow',
|
|
168
|
+
v: '1'
|
|
169
|
+
},
|
|
170
|
+
content: [{
|
|
171
|
+
tag: 'native_flow',
|
|
172
|
+
attrs: {
|
|
173
|
+
v: '9',
|
|
174
|
+
name: flow_name[name] ?? 'mixed',
|
|
175
|
+
},
|
|
176
|
+
content: []
|
|
177
|
+
}]
|
|
178
|
+
}]
|
|
179
|
+
}]
|
|
180
|
+
} else {
|
|
181
|
+
return [{
|
|
182
|
+
tag: 'biz',
|
|
183
|
+
attrs: {
|
|
184
|
+
actual_actors: '2',
|
|
185
|
+
host_storage: '2',
|
|
186
|
+
privacy_mode_ts: `${ts}`
|
|
187
|
+
},
|
|
188
|
+
content: [{
|
|
189
|
+
tag: 'engagement',
|
|
190
|
+
attrs: {
|
|
191
|
+
customer_service_state: 'open',
|
|
192
|
+
conversation_state: 'open'
|
|
193
|
+
}
|
|
194
|
+
}]
|
|
195
|
+
}]
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.getAdditionalNode = getAdditionalNode;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./encode"), exports);
|
|
18
|
+
__exportStar(require("./decode"), exports);
|
|
19
|
+
__exportStar(require("./generic-utils"), exports);
|
|
20
|
+
__exportStar(require("./jid-utils"), exports);
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jidNormalizedUser = exports.isJidNewsLetter = exports.isJidStatusBroadcast = exports.isJidGroup = exports.isJidBroadcast = exports.isLidUser = exports.isJidUser = exports.areJidsSameUser = exports.jidDecode = exports.jidEncode = exports.STORIES_JID = exports.PSA_WID = exports.SERVER_JID = exports.OFFICIAL_BIZ_JID = exports.S_WHATSAPP_NET = void 0;
|
|
4
|
+
exports.S_WHATSAPP_NET = '@s.whatsapp.net';
|
|
5
|
+
exports.OFFICIAL_BIZ_JID = '16505361212@c.us';
|
|
6
|
+
exports.SERVER_JID = 'server@c.us';
|
|
7
|
+
exports.PSA_WID = '0@c.us';
|
|
8
|
+
exports.STORIES_JID = 'status@broadcast';
|
|
9
|
+
const jidEncode = (user, server, device, agent) => {
|
|
10
|
+
return `${user || ''}${!!agent ? `_${agent}` : ''}${!!device ? `:${device}` : ''}@${server}`;
|
|
11
|
+
};
|
|
12
|
+
exports.jidEncode = jidEncode;
|
|
13
|
+
const jidDecode = (jid) => {
|
|
14
|
+
const sepIdx = typeof jid === 'string' ? jid.indexOf('@') : -1;
|
|
15
|
+
if (sepIdx < 0) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const server = jid.slice(sepIdx + 1);
|
|
19
|
+
const userCombined = jid.slice(0, sepIdx);
|
|
20
|
+
const [userAgent, device] = userCombined.split(':');
|
|
21
|
+
const user = userAgent.split('_')[0];
|
|
22
|
+
return {
|
|
23
|
+
server,
|
|
24
|
+
user,
|
|
25
|
+
domainType: server === 'lid' ? 1 : 0,
|
|
26
|
+
device: device ? +device : undefined
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
exports.jidDecode = jidDecode;
|
|
30
|
+
/** is the jid a user */
|
|
31
|
+
const areJidsSameUser = (jid1, jid2) => {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
return (((_a = (0, exports.jidDecode)(jid1)) === null || _a === void 0 ? void 0 : _a.user) === ((_b = (0, exports.jidDecode)(jid2)) === null || _b === void 0 ? void 0 : _b.user));
|
|
34
|
+
};
|
|
35
|
+
exports.areJidsSameUser = areJidsSameUser;
|
|
36
|
+
/** is the jid a user */
|
|
37
|
+
const isJidUser = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@s.whatsapp.net'));
|
|
38
|
+
exports.isJidUser = isJidUser;
|
|
39
|
+
/** is the jid a group */
|
|
40
|
+
const isLidUser = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@lid'));
|
|
41
|
+
exports.isLidUser = isLidUser;
|
|
42
|
+
/** is the jid a broadcast */
|
|
43
|
+
const isJidBroadcast = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@broadcast'));
|
|
44
|
+
exports.isJidBroadcast = isJidBroadcast;
|
|
45
|
+
/** is the jid a group */
|
|
46
|
+
const isJidGroup = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@g.us'));
|
|
47
|
+
exports.isJidGroup = isJidGroup;
|
|
48
|
+
/** is the jid the status broadcast */
|
|
49
|
+
const isJidStatusBroadcast = (jid) => jid === 'status@broadcast';
|
|
50
|
+
exports.isJidStatusBroadcast = isJidStatusBroadcast;
|
|
51
|
+
/** is the jid the newsletter */
|
|
52
|
+
const isJidNewsLetter = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('newsletter'));
|
|
53
|
+
exports.isJidNewsLetter = isJidNewsLetter;
|
|
54
|
+
const jidNormalizedUser = (jid) => {
|
|
55
|
+
const result = (0, exports.jidDecode)(jid);
|
|
56
|
+
if (!result) {
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
const { user, server } = result;
|
|
60
|
+
return (0, exports.jidEncode)(user, server === 'c.us' ? 's.whatsapp.net' : server);
|
|
61
|
+
};
|
|
62
|
+
exports.jidNormalizedUser = jidNormalizedUser;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BinaryInfo = void 0;
|
|
4
|
+
class BinaryInfo {
|
|
5
|
+
constructor(options = {}) {
|
|
6
|
+
this.protocolVersion = 5;
|
|
7
|
+
this.sequence = 0;
|
|
8
|
+
this.events = [];
|
|
9
|
+
this.buffer = [];
|
|
10
|
+
Object.assign(this, options);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.BinaryInfo = BinaryInfo;
|