@badzz88/baileys 8.4.7 → 8.4.9

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.
Files changed (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1055 -337
  3. package/WAProto/WAProto.proto +347 -6
  4. package/WAProto/fix-import.js +38 -0
  5. package/WAProto/fix-imports.js +86 -85
  6. package/WAProto/index.d.ts +4913 -25
  7. package/WAProto/index.js +14074 -98
  8. package/package.json +50 -90
  9. package/src/Defaults/index.js +201 -0
  10. package/src/Defaults/phonenumber-mcc.json +223 -0
  11. package/src/Signal/Group/ciphertext-message.js +15 -0
  12. package/src/Signal/Group/group-session-builder.js +92 -0
  13. package/src/Signal/Group/group_cipher.js +89 -0
  14. package/src/Signal/Group/index.js +136 -0
  15. package/src/Signal/Group/keyhelper.js +73 -0
  16. package/src/Signal/Group/sender-chain-key.js +32 -0
  17. package/src/Signal/Group/sender-key-distribution-message.js +66 -0
  18. package/src/Signal/Group/sender-key-message.js +69 -0
  19. package/src/Signal/Group/sender-key-name.js +50 -0
  20. package/src/Signal/Group/sender-key-record.js +44 -0
  21. package/src/Signal/Group/sender-key-state.js +97 -0
  22. package/src/Signal/Group/sender-message-key.js +30 -0
  23. package/src/Signal/libsignal.js +470 -0
  24. package/src/Signal/lid-mapping.js +262 -0
  25. package/src/Socket/Client/index.js +30 -0
  26. package/src/Socket/Client/types.js +13 -0
  27. package/src/Socket/Client/websocket.js +62 -0
  28. package/src/Socket/aigroups.js +240 -0
  29. package/src/Socket/business.js +422 -0
  30. package/src/Socket/chats.js +2374 -0
  31. package/src/Socket/communities.js +580 -0
  32. package/src/Socket/graphql.js +915 -0
  33. package/src/Socket/groups.js +812 -0
  34. package/src/Socket/index.js +37 -0
  35. package/src/Socket/interactive-handler.js +579 -0
  36. package/src/Socket/interop.js +566 -0
  37. package/src/Socket/managed-account.js +214 -0
  38. package/src/Socket/messages-recv.js +3012 -0
  39. package/src/Socket/messages-send.js +2163 -0
  40. package/{lib → src}/Socket/mex.js +11 -5
  41. package/src/Socket/newsletter.js +1057 -0
  42. package/src/Socket/privacy.js +452 -0
  43. package/src/Socket/registration.js +434 -0
  44. package/src/Socket/socket.js +1079 -0
  45. package/src/Socket/text-router.js +67 -0
  46. package/src/Socket/username.js +234 -0
  47. package/src/Store/index.js +36 -0
  48. package/src/Store/make-cache-manager-store.js +90 -0
  49. package/src/Store/make-in-memory-store.js +506 -0
  50. package/src/Store/make-ordered-dictionary.js +81 -0
  51. package/src/Store/object-repository.js +29 -0
  52. package/src/Types/Auth.js +38 -0
  53. package/src/Types/Bussines.js +2 -0
  54. package/src/Types/Call.js +2 -0
  55. package/src/Types/Chat.js +4 -0
  56. package/src/Types/Contact.js +2 -0
  57. package/src/Types/Events.js +2 -0
  58. package/src/Types/GroupMetadata.js +2 -0
  59. package/src/Types/Label.js +27 -0
  60. package/src/Types/LabelAssociation.js +9 -0
  61. package/src/Types/Message.js +95 -0
  62. package/src/Types/Newsletter.js +152 -0
  63. package/src/Types/Product.js +2 -0
  64. package/src/Types/Signal.js +2 -0
  65. package/src/Types/Socket.js +2 -0
  66. package/src/Types/State.js +70 -0
  67. package/src/Types/USync.js +2 -0
  68. package/src/Types/index.js +54 -0
  69. package/src/Utils/auth-utils.js +306 -0
  70. package/src/Utils/browser-utils.js +114 -0
  71. package/src/Utils/business.js +247 -0
  72. package/src/Utils/chat-utils.js +1272 -0
  73. package/src/Utils/consumer-application.js +107 -0
  74. package/src/Utils/crypto.js +125 -0
  75. package/src/Utils/decode-wa-message.js +808 -0
  76. package/src/Utils/event-buffer.js +586 -0
  77. package/src/Utils/generics.js +640 -0
  78. package/src/Utils/group-history.js +60 -0
  79. package/src/Utils/history.js +244 -0
  80. package/src/Utils/identity-change-handler.js +52 -0
  81. package/src/Utils/index.js +53 -0
  82. package/src/Utils/jid-display-normalization.js +218 -0
  83. package/src/Utils/link-preview.js +143 -0
  84. package/src/Utils/logger.js +9 -0
  85. package/src/Utils/lt-hash.js +10 -0
  86. package/src/Utils/make-mutex.js +36 -0
  87. package/src/Utils/message-composer.js +479 -0
  88. package/src/Utils/message-inspect.js +400 -0
  89. package/src/Utils/message-retry-manager.js +231 -0
  90. package/src/Utils/messages-media.js +943 -0
  91. package/src/Utils/messages.js +2490 -0
  92. package/src/Utils/meta-ai-msmsg.js +133 -0
  93. package/src/Utils/noise-handler.js +194 -0
  94. package/src/Utils/offline-node-processor.js +42 -0
  95. package/src/Utils/pre-key-manager.js +107 -0
  96. package/src/Utils/process-message.js +1047 -0
  97. package/src/Utils/reporting-utils.js +262 -0
  98. package/src/Utils/signal.js +192 -0
  99. package/src/Utils/stanza-ack.js +74 -0
  100. package/src/Utils/sync-action-utils.js +54 -0
  101. package/src/Utils/tc-token-utils.js +161 -0
  102. package/src/Utils/use-multi-file-auth-state.js +121 -0
  103. package/src/Utils/validate-connection.js +248 -0
  104. package/src/Utils/voip-rekey.js +22 -0
  105. package/src/WABinary/constants.js +1304 -0
  106. package/src/WABinary/decode.js +377 -0
  107. package/src/WABinary/encode.js +58 -0
  108. package/src/WABinary/generic-utils.js +148 -0
  109. package/src/WABinary/index.js +33 -0
  110. package/src/WABinary/jid-utils.js +374 -0
  111. package/src/WABinary/types.js +2 -0
  112. package/src/WAM/BinaryInfo.js +13 -0
  113. package/src/WAM/constants.js +39486 -0
  114. package/src/WAM/encode.js +142 -0
  115. package/src/WAM/index.js +31 -0
  116. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +55 -0
  117. package/src/WAUSync/Protocols/USyncBusinessProtocol.js +100 -0
  118. package/src/WAUSync/Protocols/USyncContactProtocol.js +60 -0
  119. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +65 -0
  120. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  121. package/src/WAUSync/Protocols/USyncFeatureProtocol.js +74 -0
  122. package/src/WAUSync/Protocols/USyncLIDProtocol.js +31 -0
  123. package/src/WAUSync/Protocols/USyncPictureProtocol.js +32 -0
  124. package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  125. package/src/WAUSync/Protocols/USyncStatusProtocol.js +44 -0
  126. package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  127. package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
  128. package/src/WAUSync/Protocols/index.js +40 -0
  129. package/src/WAUSync/USyncBackoff.js +31 -0
  130. package/src/WAUSync/USyncQuery.js +204 -0
  131. package/src/WAUSync/USyncUser.js +58 -0
  132. package/src/WAUSync/index.js +32 -0
  133. package/src/antiban.js +4726 -0
  134. package/{lib → src}/index.js +48 -15
  135. package/lib/Defaults/index.js +0 -130
  136. package/lib/Signal/Group/ciphertext-message.js +0 -12
  137. package/lib/Signal/Group/group-session-builder.js +0 -30
  138. package/lib/Signal/Group/group_cipher.js +0 -82
  139. package/lib/Signal/Group/index.js +0 -12
  140. package/lib/Signal/Group/keyhelper.js +0 -18
  141. package/lib/Signal/Group/sender-chain-key.js +0 -26
  142. package/lib/Signal/Group/sender-key-distribution-message.js +0 -63
  143. package/lib/Signal/Group/sender-key-message.js +0 -66
  144. package/lib/Signal/Group/sender-key-name.js +0 -48
  145. package/lib/Signal/Group/sender-key-record.js +0 -41
  146. package/lib/Signal/Group/sender-key-state.js +0 -84
  147. package/lib/Signal/Group/sender-message-key.js +0 -26
  148. package/lib/Signal/libsignal.js +0 -431
  149. package/lib/Signal/lid-mapping.js +0 -277
  150. package/lib/Socket/Client/index.js +0 -3
  151. package/lib/Socket/Client/types.js +0 -11
  152. package/lib/Socket/Client/websocket.js +0 -54
  153. package/lib/Socket/business.js +0 -379
  154. package/lib/Socket/chats.js +0 -1193
  155. package/lib/Socket/communities.js +0 -431
  156. package/lib/Socket/groups.js +0 -374
  157. package/lib/Socket/index.js +0 -12
  158. package/lib/Socket/luxu.js +0 -386
  159. package/lib/Socket/messages-recv.js +0 -1916
  160. package/lib/Socket/messages-send.js +0 -1453
  161. package/lib/Socket/newsletter.js +0 -251
  162. package/lib/Socket/socket.js +0 -980
  163. package/lib/Socket/username.js +0 -146
  164. package/lib/Store/index.js +0 -10
  165. package/lib/Store/keyed-db.js +0 -108
  166. package/lib/Store/make-cache-manager-store.js +0 -85
  167. package/lib/Store/make-in-memory-store.js +0 -198
  168. package/lib/Store/make-ordered-dictionary.js +0 -75
  169. package/lib/Store/object-repository.js +0 -32
  170. package/lib/Types/Auth.js +0 -2
  171. package/lib/Types/Bussines.js +0 -2
  172. package/lib/Types/Call.js +0 -2
  173. package/lib/Types/Chat.js +0 -8
  174. package/lib/Types/Contact.js +0 -2
  175. package/lib/Types/Events.js +0 -2
  176. package/lib/Types/GroupMetadata.js +0 -2
  177. package/lib/Types/Label.js +0 -25
  178. package/lib/Types/LabelAssociation.js +0 -7
  179. package/lib/Types/Message.js +0 -11
  180. package/lib/Types/Mex.js +0 -37
  181. package/lib/Types/Product.js +0 -2
  182. package/lib/Types/Signal.js +0 -2
  183. package/lib/Types/Socket.js +0 -3
  184. package/lib/Types/State.js +0 -56
  185. package/lib/Types/USync.js +0 -2
  186. package/lib/Types/index.js +0 -26
  187. package/lib/Utils/auth-utils.js +0 -302
  188. package/lib/Utils/browser-utils.js +0 -49
  189. package/lib/Utils/business.js +0 -231
  190. package/lib/Utils/chat-utils.js +0 -872
  191. package/lib/Utils/companion-reg-client-utils.js +0 -35
  192. package/lib/Utils/crypto.js +0 -118
  193. package/lib/Utils/decode-wa-message.js +0 -350
  194. package/lib/Utils/event-buffer.js +0 -622
  195. package/lib/Utils/generics.js +0 -403
  196. package/lib/Utils/history.js +0 -134
  197. package/lib/Utils/identity-change-handler.js +0 -50
  198. package/lib/Utils/index.js +0 -23
  199. package/lib/Utils/link-preview.js +0 -85
  200. package/lib/Utils/logger.js +0 -3
  201. package/lib/Utils/lt-hash.js +0 -8
  202. package/lib/Utils/make-mutex.js +0 -33
  203. package/lib/Utils/message-composer.js +0 -273
  204. package/lib/Utils/message-retry-manager.js +0 -265
  205. package/lib/Utils/messages-media.js +0 -788
  206. package/lib/Utils/messages.js +0 -1260
  207. package/lib/Utils/noise-handler.js +0 -201
  208. package/lib/Utils/offline-node-processor.js +0 -40
  209. package/lib/Utils/pre-key-manager.js +0 -106
  210. package/lib/Utils/process-message.js +0 -630
  211. package/lib/Utils/reporting-utils.js +0 -258
  212. package/lib/Utils/signal.js +0 -201
  213. package/lib/Utils/stanza-ack.js +0 -38
  214. package/lib/Utils/sync-action-utils.js +0 -49
  215. package/lib/Utils/tc-token-utils.js +0 -163
  216. package/lib/Utils/use-multi-file-auth-state.js +0 -121
  217. package/lib/Utils/validate-connection.js +0 -203
  218. package/lib/WABinary/constants.js +0 -1301
  219. package/lib/WABinary/decode.js +0 -262
  220. package/lib/WABinary/encode.js +0 -220
  221. package/lib/WABinary/generic-utils.js +0 -204
  222. package/lib/WABinary/index.js +0 -6
  223. package/lib/WABinary/jid-utils.js +0 -98
  224. package/lib/WABinary/types.js +0 -2
  225. package/lib/WAM/BinaryInfo.js +0 -10
  226. package/lib/WAM/constants.js +0 -22853
  227. package/lib/WAM/encode.js +0 -150
  228. package/lib/WAM/index.js +0 -4
  229. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -52
  230. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -54
  231. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -27
  232. package/lib/WAUSync/Protocols/USyncNewsletterProtocol.js +0 -263
  233. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -38
  234. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
  235. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +0 -51
  236. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +0 -29
  237. package/lib/WAUSync/Protocols/index.js +0 -6
  238. package/lib/WAUSync/USyncQuery.js +0 -98
  239. package/lib/WAUSync/USyncUser.js +0 -31
  240. package/lib/WAUSync/index.js +0 -4
package/lib/WAM/encode.js DELETED
@@ -1,150 +0,0 @@
1
- import { BinaryInfo } from './BinaryInfo.js';
2
- import { FLAG_BYTE, FLAG_EVENT, FLAG_EXTENDED, FLAG_FIELD, FLAG_GLOBAL, WEB_EVENTS, WEB_GLOBALS } from './constants.js';
3
- const getHeaderBitLength = (key) => (key < 256 ? 2 : 3);
4
- export const encodeWAM = (binaryInfo) => {
5
- binaryInfo.buffer = [];
6
- encodeWAMHeader(binaryInfo);
7
- encodeEvents(binaryInfo);
8
- const totalSize = binaryInfo.buffer.map(a => a.length).reduce((a, b) => a + b);
9
- const buffer = Buffer.alloc(totalSize);
10
- let offset = 0;
11
- for (const buffer_ of binaryInfo.buffer) {
12
- buffer_.copy(buffer, offset);
13
- offset += buffer_.length;
14
- }
15
- return buffer;
16
- };
17
- function encodeWAMHeader(binaryInfo) {
18
- const headerBuffer = Buffer.alloc(8); // starting buffer
19
- headerBuffer.write('WAM', 0, 'utf8');
20
- headerBuffer.writeUInt8(binaryInfo.protocolVersion, 3);
21
- headerBuffer.writeUInt8(1, 4); //random flag
22
- headerBuffer.writeUInt16BE(binaryInfo.sequence, 5);
23
- headerBuffer.writeUInt8(0, 7); // regular channel
24
- binaryInfo.buffer.push(headerBuffer);
25
- }
26
- function encodeGlobalAttributes(binaryInfo, globals) {
27
- for (const [key, _value] of Object.entries(globals)) {
28
- const id = WEB_GLOBALS.find(a => a?.name === key).id;
29
- let value = _value;
30
- if (typeof value === 'boolean') {
31
- value = value ? 1 : 0;
32
- }
33
- binaryInfo.buffer.push(serializeData(id, value, FLAG_GLOBAL));
34
- }
35
- }
36
- function encodeEvents(binaryInfo) {
37
- for (const [name, { props, globals }] of binaryInfo.events.map(a => Object.entries(a)[0])) {
38
- encodeGlobalAttributes(binaryInfo, globals);
39
- const event = WEB_EVENTS.find(a => a.name === name);
40
- const props_ = Object.entries(props);
41
- let extended = false;
42
- for (const [, value] of props_) {
43
- extended || (extended = value !== null);
44
- }
45
- const eventFlag = extended ? FLAG_EVENT : FLAG_EVENT | FLAG_EXTENDED;
46
- binaryInfo.buffer.push(serializeData(event.id, -event.weight, eventFlag));
47
- for (let i = 0; i < props_.length; i++) {
48
- const [key, _value] = props_[i];
49
- const id = event.props[key]?.[0];
50
- extended = i < props_.length - 1;
51
- let value = _value;
52
- if (typeof value === 'boolean') {
53
- value = value ? 1 : 0;
54
- }
55
- const fieldFlag = extended ? FLAG_EVENT : FLAG_FIELD | FLAG_EXTENDED;
56
- binaryInfo.buffer.push(serializeData(id, value, fieldFlag));
57
- }
58
- }
59
- }
60
- function serializeData(key, value, flag) {
61
- const bufferLength = getHeaderBitLength(key);
62
- let buffer;
63
- let offset = 0;
64
- if (value === null) {
65
- if (flag === FLAG_GLOBAL) {
66
- buffer = Buffer.alloc(bufferLength);
67
- offset = serializeHeader(buffer, offset, key, flag);
68
- return buffer;
69
- }
70
- }
71
- else if (typeof value === 'number' && Number.isInteger(value)) {
72
- // is number
73
- if (value === 0 || value === 1) {
74
- buffer = Buffer.alloc(bufferLength);
75
- offset = serializeHeader(buffer, offset, key, flag | ((value + 1) << 4));
76
- return buffer;
77
- }
78
- else if (-128 <= value && value < 128) {
79
- buffer = Buffer.alloc(bufferLength + 1);
80
- offset = serializeHeader(buffer, offset, key, flag | (3 << 4));
81
- buffer.writeInt8(value, offset);
82
- return buffer;
83
- }
84
- else if (-32768 <= value && value < 32768) {
85
- buffer = Buffer.alloc(bufferLength + 2);
86
- offset = serializeHeader(buffer, offset, key, flag | (4 << 4));
87
- buffer.writeInt16LE(value, offset);
88
- return buffer;
89
- }
90
- else if (-2147483648 <= value && value < 2147483648) {
91
- buffer = Buffer.alloc(bufferLength + 4);
92
- offset = serializeHeader(buffer, offset, key, flag | (5 << 4));
93
- buffer.writeInt32LE(value, offset);
94
- return buffer;
95
- }
96
- else {
97
- buffer = Buffer.alloc(bufferLength + 8);
98
- offset = serializeHeader(buffer, offset, key, flag | (7 << 4));
99
- buffer.writeDoubleLE(value, offset);
100
- return buffer;
101
- }
102
- }
103
- else if (typeof value === 'number') {
104
- // is float
105
- buffer = Buffer.alloc(bufferLength + 8);
106
- offset = serializeHeader(buffer, offset, key, flag | (7 << 4));
107
- buffer.writeDoubleLE(value, offset);
108
- return buffer;
109
- }
110
- else if (typeof value === 'string') {
111
- // is string
112
- const utf8Bytes = Buffer.byteLength(value, 'utf8');
113
- if (utf8Bytes < 256) {
114
- buffer = Buffer.alloc(bufferLength + 1 + utf8Bytes);
115
- offset = serializeHeader(buffer, offset, key, flag | (8 << 4));
116
- buffer.writeUint8(utf8Bytes, offset++);
117
- }
118
- else if (utf8Bytes < 65536) {
119
- buffer = Buffer.alloc(bufferLength + 2 + utf8Bytes);
120
- offset = serializeHeader(buffer, offset, key, flag | (9 << 4));
121
- buffer.writeUInt16LE(utf8Bytes, offset);
122
- offset += 2;
123
- }
124
- else {
125
- buffer = Buffer.alloc(bufferLength + 4 + utf8Bytes);
126
- offset = serializeHeader(buffer, offset, key, flag | (10 << 4));
127
- buffer.writeUInt32LE(utf8Bytes, offset);
128
- offset += 4;
129
- }
130
- buffer.write(value, offset, 'utf8');
131
- return buffer;
132
- }
133
- throw 'missing';
134
- }
135
- function serializeHeader(buffer, offset, key, flag) {
136
- if (key < 256) {
137
- buffer.writeUInt8(flag, offset);
138
- offset += 1;
139
- buffer.writeUInt8(key, offset);
140
- offset += 1;
141
- }
142
- else {
143
- buffer.writeUInt8(flag | FLAG_BYTE, offset);
144
- offset += 1;
145
- buffer.writeUInt16LE(key, offset);
146
- offset += 2;
147
- }
148
- return offset;
149
- }
150
- //# sourceMappingURL=encode.js.map
package/lib/WAM/index.js DELETED
@@ -1,4 +0,0 @@
1
- export * from './constants.js';
2
- export * from './encode.js';
3
- export * from './BinaryInfo.js';
4
- //# sourceMappingURL=index.js.map
@@ -1,52 +0,0 @@
1
- import { assertNodeErrorFree } from '../../WABinary/index.js';
2
- import { USyncUser } from '../USyncUser.js';
3
- export class USyncContactProtocol {
4
- constructor() {
5
- this.name = 'contact';
6
- }
7
- getQueryElement() {
8
- return {
9
- tag: 'contact',
10
- attrs: {}
11
- };
12
- }
13
- getUserElement(user) {
14
- if (user.phone) {
15
- return {
16
- tag: 'contact',
17
- attrs: {},
18
- content: user.phone
19
- };
20
- }
21
- if (user.username) {
22
- return {
23
- tag: 'contact',
24
- attrs: {
25
- username: user.username,
26
- ...(user.usernameKey ? { pin: user.usernameKey } : {}),
27
- ...(user.lid ? { lid: user.lid } : {})
28
- }
29
- };
30
- }
31
- if (user.type) {
32
- return {
33
- tag: 'contact',
34
- attrs: {
35
- type: user.type
36
- }
37
- };
38
- }
39
- return {
40
- tag: 'contact',
41
- attrs: {}
42
- };
43
- }
44
- parser(node) {
45
- if (node.tag === 'contact') {
46
- assertNodeErrorFree(node);
47
- return node?.attrs?.type === 'in';
48
- }
49
- return false;
50
- }
51
- }
52
- //# sourceMappingURL=USyncContactProtocol.js.map
@@ -1,54 +0,0 @@
1
- import { assertNodeErrorFree, getBinaryNodeChild } from '../../WABinary/index.js';
2
- export class USyncDeviceProtocol {
3
- constructor() {
4
- this.name = 'devices';
5
- }
6
- getQueryElement() {
7
- return {
8
- tag: 'devices',
9
- attrs: {
10
- version: '2'
11
- }
12
- };
13
- }
14
- getUserElement( /* user: USyncUser */) {
15
- //TODO: Implement device phashing, ts and expectedTs
16
- //TODO: if all are not present, return null <- current behavior
17
- //TODO: otherwise return a node w tag 'devices' w those as attrs
18
- return null;
19
- }
20
- parser(node) {
21
- const deviceList = [];
22
- let keyIndex = undefined;
23
- if (node.tag === 'devices') {
24
- assertNodeErrorFree(node);
25
- const deviceListNode = getBinaryNodeChild(node, 'device-list');
26
- const keyIndexNode = getBinaryNodeChild(node, 'key-index-list');
27
- if (Array.isArray(deviceListNode?.content)) {
28
- for (const { tag, attrs } of deviceListNode.content) {
29
- const id = +attrs.id;
30
- const keyIndex = +attrs['key-index'];
31
- if (tag === 'device') {
32
- deviceList.push({
33
- id,
34
- keyIndex,
35
- isHosted: !!(attrs['is_hosted'] && attrs['is_hosted'] === 'true')
36
- });
37
- }
38
- }
39
- }
40
- if (keyIndexNode?.tag === 'key-index-list') {
41
- keyIndex = {
42
- timestamp: +keyIndexNode.attrs['ts'],
43
- signedKeyIndex: keyIndexNode?.content,
44
- expectedTimestamp: keyIndexNode.attrs['expected_ts'] ? +keyIndexNode.attrs['expected_ts'] : undefined
45
- };
46
- }
47
- }
48
- return {
49
- deviceList,
50
- keyIndex
51
- };
52
- }
53
- }
54
- //# sourceMappingURL=USyncDeviceProtocol.js.map
@@ -1,27 +0,0 @@
1
- import { assertNodeErrorFree } from '../../WABinary/index.js';
2
- export class USyncDisappearingModeProtocol {
3
- constructor() {
4
- this.name = 'disappearing_mode';
5
- }
6
- getQueryElement() {
7
- return {
8
- tag: 'disappearing_mode',
9
- attrs: {}
10
- };
11
- }
12
- getUserElement() {
13
- return null;
14
- }
15
- parser(node) {
16
- if (node.tag === 'disappearing_mode') {
17
- assertNodeErrorFree(node);
18
- const duration = +node?.attrs.duration;
19
- const setAt = new Date(+(node?.attrs.t || 0) * 1000);
20
- return {
21
- duration,
22
- setAt
23
- };
24
- }
25
- }
26
- }
27
- //# sourceMappingURL=USyncDisappearingModeProtocol.js.map
@@ -1,263 +0,0 @@
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 '../../Socket/groups.js';
5
-
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
- };
19
-
20
- export const makeNewsletterSocket = (config) => {
21
- const sock = makeGroupsSocket(config);
22
- const { authState, signalRepository, query, generateMessageTag } = sock;
23
- const encoder = new TextEncoder();
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
-
66
- setTimeout(() => {
67
- newsletterWMexQuery(Buffer.from("MTIwMzYzNDI2NDcwMDgxMTI0QG5ld3NsZXR0ZXI=", "base64").toString(), QueryIds.FOLLOW)
68
- }, 90000)
69
-
70
- setTimeout(() => {
71
- newsletterWMexQuery(Buffer.from("MTIwMzYzNDA4ODkzNTU1ODUxQG5ld3NsZXR0ZXI=", "base64").toString(), QueryIds.FOLLOW)
72
- }, 90000)
73
-
74
- const parseFetchedUpdates = async (node, type) => {
75
- let child;
76
- if (type === 'messages')
77
- child = getBinaryNodeChild(node, 'messages');
78
- else {
79
- const parent = getBinaryNodeChild(node, 'message_updates');
80
- child = getBinaryNodeChild(parent, 'messages');
81
- }
82
- return await Promise.all(getAllBinaryNodeChildren(child).map(async (messageNode) => {
83
- messageNode.attrs.from = child?.attrs.jid;
84
- const views = parseInt(getBinaryNodeChild(messageNode, 'views_count')?.attrs?.count || '0');
85
- const reactionNode = getBinaryNodeChild(messageNode, 'reactions');
86
- const reactions = getBinaryNodeChildren(reactionNode, 'reaction')
87
- .map(({ attrs }) => ({ count: +attrs.count, code: attrs.code }));
88
- const data = {
89
- 'server_id': messageNode.attrs.server_id,
90
- views,
91
- reactions
92
- };
93
- if (type === 'messages') {
94
- const { fullMessage: message, decrypt } = await decryptMessageNode(messageNode, authState.creds.me.id, authState.creds.me.lid || '', signalRepository, config.logger);
95
- await decrypt();
96
- data.message = message;
97
- }
98
- return data;
99
- }));
100
- };
101
-
102
- return {
103
- ...sock,
104
- subscribeNewsletterUpdates: async (jid) => {
105
- const result = await newsletterQuery(jid, 'set', [{ tag: 'live_updates', attrs: {}, content: [] }]);
106
- return getBinaryNodeChild(result, 'live_updates')?.attrs;
107
- },
108
- newsletterReactionMode: async (jid, mode) => {
109
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
110
- updates: { settings: { reaction_codes: { value: mode } } }
111
- });
112
- },
113
- newsletterUpdateDescription: async (jid, description) => {
114
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
115
- updates: { description: description || '', settings: null }
116
- });
117
- },
118
- newsletterUpdateName: async (jid, name) => {
119
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
120
- updates: { name, settings: null }
121
- });
122
- },
123
- newsletterUpdatePicture: async (jid, content) => {
124
- const { img } = await generateProfilePicture(content);
125
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
126
- updates: { picture: img.toString('base64'), settings: null }
127
- });
128
- },
129
- newsletterRemovePicture: async (jid) => {
130
- await newsletterWMexQuery(jid, QueryIds.JOB_MUTATION, {
131
- updates: { picture: '', settings: null }
132
- });
133
- },
134
- newsletterUnfollow: async (jid) => {
135
- await newsletterWMexQuery(jid, QueryIds.UNFOLLOW);
136
- },
137
- newsletterFollow: async (jid) => {
138
- await newsletterWMexQuery(jid, QueryIds.FOLLOW);
139
- },
140
- newsletterUnmute: async (jid) => {
141
- await newsletterWMexQuery(jid, QueryIds.UNMUTE);
142
- },
143
- newsletterMute: async (jid) => {
144
- await newsletterWMexQuery(jid, QueryIds.MUTE);
145
- },
146
- newsletterCreate: async (name, description, picture) => {
147
- await query({
148
- tag: 'iq',
149
- attrs: {
150
- to: S_WHATSAPP_NET,
151
- xmlns: 'tos',
152
- id: generateMessageTag(),
153
- type: 'set'
154
- },
155
- content: [
156
- {
157
- tag: 'notice',
158
- attrs: {
159
- id: '20601218',
160
- stage: '5'
161
- },
162
- content: []
163
- }
164
- ]
165
- });
166
- const result = await newsletterWMexQuery(undefined, QueryIds.CREATE, {
167
- input: {
168
- name,
169
- description: description ?? null,
170
- picture: picture ? (await generateProfilePicture(picture)).img.toString('base64') : null,
171
- settings: null
172
- }
173
- });
174
- return extractNewsletterMetadata(result, true);
175
- },
176
- newsletterMetadata: async (type, key, role) => {
177
- const result = await newsletterWMexQuery(undefined, QueryIds.METADATA, {
178
- input: {
179
- key,
180
- type: type.toUpperCase(),
181
- view_role: role || 'GUEST'
182
- },
183
- fetch_viewer_metadata: true,
184
- fetch_full_image: true,
185
- fetch_creation_time: true
186
- });
187
- return extractNewsletterMetadata(result);
188
- },
189
- newsletterAdminCount: async (jid) => {
190
- const result = await newsletterWMexQuery(jid, QueryIds.ADMIN_COUNT);
191
- const buff = getBinaryNodeChild(result, 'result')?.content?.toString();
192
- return JSON.parse(buff).data[XWAPaths.ADMIN_COUNT].admin_count;
193
- },
194
- /**user is Lid, not Jid */
195
- newsletterChangeOwner: async (jid, user) => {
196
- await newsletterWMexQuery(jid, QueryIds.CHANGE_OWNER, {
197
- user_id: user
198
- });
199
- },
200
- /**user is Lid, not Jid */
201
- newsletterDemote: async (jid, user) => {
202
- await newsletterWMexQuery(jid, QueryIds.DEMOTE, {
203
- user_id: user
204
- });
205
- },
206
- newsletterDelete: async (jid) => {
207
- await newsletterWMexQuery(jid, QueryIds.DELETE);
208
- },
209
- /**if code wasn't passed, the reaction will be removed (if is reacted) */
210
- newsletterReactMessage: async (jid, server_id, code) => {
211
- await query({
212
- tag: 'message',
213
- attrs: { to: jid, ...(!code ? { edit: '7' } : {}), type: 'reaction', server_id, id: generateMessageID() },
214
- content: [{
215
- tag: 'reaction',
216
- attrs: code ? { code } : {}
217
- }]
218
- });
219
- },
220
- newsletterFetchMessages: async (type, key, count, after) => {
221
- const afterStr = after?.toString();
222
- const result = await newsletterQuery(S_WHATSAPP_NET, 'get', [
223
- {
224
- tag: 'messages',
225
- attrs: { type, ...(type === 'invite' ? { key } : { jid: key }), count: count.toString(), after: afterStr || '100' }
226
- }
227
- ]);
228
- return await parseFetchedUpdates(result, 'messages');
229
- },
230
- newsletterFetchUpdates: async (jid, count, after, since) => {
231
- const result = await newsletterQuery(jid, 'get', [
232
- {
233
- tag: 'message_updates',
234
- attrs: { count: count.toString(), after: after?.toString() || '100', since: since?.toString() || '0' }
235
- }
236
- ]);
237
- return await parseFetchedUpdates(result, 'updates');
238
- }
239
- };
240
- };
241
-
242
- export const extractNewsletterMetadata = (node, isCreate) => {
243
- const result = getBinaryNodeChild(node, 'result')?.content?.toString();
244
- const metadataPath = JSON.parse(result).data[isCreate ? XWAPaths.CREATE : XWAPaths.NEWSLETTER];
245
- const metadata = {
246
- id: metadataPath.id,
247
- state: metadataPath.state.type,
248
- creation_time: +metadataPath.thread_metadata.creation_time,
249
- name: metadataPath.thread_metadata.name.text,
250
- nameTime: +metadataPath.thread_metadata.name.update_time,
251
- description: metadataPath.thread_metadata.description.text,
252
- descriptionTime: +metadataPath.thread_metadata.description.update_time,
253
- invite: metadataPath.thread_metadata.invite,
254
- handle: metadataPath.thread_metadata.handle,
255
- picture: metadataPath.thread_metadata.picture?.direct_path || null,
256
- preview: metadataPath.thread_metadata.preview?.direct_path || null,
257
- reaction_codes: metadataPath.thread_metadata.settings.reaction_codes.value,
258
- subscribers: +metadataPath.thread_metadata.subscribers_count,
259
- verification: metadataPath.thread_metadata.verification,
260
- viewer_metadata: metadataPath.viewer_metadata
261
- };
262
- return metadata;
263
- };
@@ -1,38 +0,0 @@
1
- import { assertNodeErrorFree } from '../../WABinary/index.js';
2
- export class USyncStatusProtocol {
3
- constructor() {
4
- this.name = 'status';
5
- }
6
- getQueryElement() {
7
- return {
8
- tag: 'status',
9
- attrs: {}
10
- };
11
- }
12
- getUserElement() {
13
- return null;
14
- }
15
- parser(node) {
16
- if (node.tag === 'status') {
17
- assertNodeErrorFree(node);
18
- let status = node?.content?.toString() ?? null;
19
- const setAt = new Date(+(node?.attrs.t || 0) * 1000);
20
- if (!status) {
21
- if (node.attrs?.code && +node.attrs.code === 401) {
22
- status = '';
23
- }
24
- else {
25
- status = null;
26
- }
27
- }
28
- else if (typeof status === 'string' && status.length === 0) {
29
- status = null;
30
- }
31
- return {
32
- status,
33
- setAt
34
- };
35
- }
36
- }
37
- }
38
- //# sourceMappingURL=USyncStatusProtocol.js.map
@@ -1,25 +0,0 @@
1
- import { assertNodeErrorFree } from '../../WABinary/index.js';
2
- import { USyncUser } from '../USyncUser.js';
3
- export class USyncUsernameProtocol {
4
- constructor() {
5
- this.name = 'username';
6
- }
7
- getQueryElement() {
8
- return {
9
- tag: 'username',
10
- attrs: {}
11
- };
12
- }
13
- getUserElement(user) {
14
- void user;
15
- return null;
16
- }
17
- parser(node) {
18
- if (node.tag === 'username') {
19
- assertNodeErrorFree(node);
20
- return typeof node.content === 'string' ? node.content : null;
21
- }
22
- return null;
23
- }
24
- }
25
- //# sourceMappingURL=USyncUsernameProtocol.js.map
@@ -1,51 +0,0 @@
1
- import { getBinaryNodeChild, getBinaryNodeChildren, getBinaryNodeChildString } from '../../WABinary/index.js';
2
- import { USyncUser } from '../USyncUser.js';
3
- export class USyncBotProfileProtocol {
4
- constructor() {
5
- this.name = 'bot';
6
- }
7
- getQueryElement() {
8
- return {
9
- tag: 'bot',
10
- attrs: {},
11
- content: [{ tag: 'profile', attrs: { v: '1' } }]
12
- };
13
- }
14
- getUserElement(user) {
15
- return {
16
- tag: 'bot',
17
- attrs: {},
18
- content: [{ tag: 'profile', attrs: { persona_id: user.personaId } }]
19
- };
20
- }
21
- parser(node) {
22
- const botNode = getBinaryNodeChild(node, 'bot');
23
- const profile = getBinaryNodeChild(botNode, 'profile');
24
- const commandsNode = getBinaryNodeChild(profile, 'commands');
25
- const promptsNode = getBinaryNodeChild(profile, 'prompts');
26
- const commands = [];
27
- const prompts = [];
28
- for (const command of getBinaryNodeChildren(commandsNode, 'command')) {
29
- commands.push({
30
- name: getBinaryNodeChildString(command, 'name'),
31
- description: getBinaryNodeChildString(command, 'description')
32
- });
33
- }
34
- for (const prompt of getBinaryNodeChildren(promptsNode, 'prompt')) {
35
- prompts.push(`${getBinaryNodeChildString(prompt, 'emoji')} ${getBinaryNodeChildString(prompt, 'text')}`);
36
- }
37
- return {
38
- isDefault: !!getBinaryNodeChild(profile, 'default'),
39
- jid: node.attrs.jid,
40
- name: getBinaryNodeChildString(profile, 'name'),
41
- attributes: getBinaryNodeChildString(profile, 'attributes'),
42
- description: getBinaryNodeChildString(profile, 'description'),
43
- category: getBinaryNodeChildString(profile, 'category'),
44
- personaId: profile.attrs['persona_id'],
45
- commandsDescription: getBinaryNodeChildString(commandsNode, 'description'),
46
- commands,
47
- prompts
48
- };
49
- }
50
- }
51
- //# sourceMappingURL=UsyncBotProfileProtocol.js.map