@badzz88/baileys 8.5.4 → 8.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/README.md +2 -2
  2. package/WAProto/fix-imports.js +69 -79
  3. package/WAProto/index.d.ts +15305 -87935
  4. package/WAProto/index.js +41109 -194076
  5. package/engine-requirements.js +15 -8
  6. package/package.json +23 -19
  7. package/src/Defaults/index.js +186 -0
  8. package/src/Signal/Group/ciphertext-message.js +15 -0
  9. package/src/Signal/Group/group-session-builder.js +86 -0
  10. package/src/Signal/Group/group_cipher.js +82 -0
  11. package/src/Signal/Group/index.js +140 -0
  12. package/src/Signal/Group/keyhelper.js +77 -0
  13. package/src/Signal/Group/sender-chain-key.js +29 -0
  14. package/src/Signal/Group/sender-key-distribution-message.js +66 -0
  15. package/src/Signal/Group/sender-key-message.js +69 -0
  16. package/src/Signal/Group/sender-key-name.js +51 -0
  17. package/src/Signal/Group/sender-key-record.js +44 -0
  18. package/src/Signal/Group/sender-key-state.js +87 -0
  19. package/src/Signal/Group/sender-message-key.js +29 -0
  20. package/src/Signal/libsignal.js +455 -0
  21. package/src/Signal/lid-mapping.js +273 -0
  22. package/src/Socket/Client/index.js +31 -0
  23. package/src/Socket/Client/types.js +13 -0
  24. package/src/Socket/Client/websocket.js +61 -0
  25. package/src/Socket/aigroups.js +221 -0
  26. package/src/Socket/business.js +411 -0
  27. package/src/Socket/chats.js +1449 -0
  28. package/src/Socket/communities.js +463 -0
  29. package/src/Socket/graphql.js +523 -0
  30. package/src/Socket/groups.js +516 -0
  31. package/src/Socket/index.js +31 -0
  32. package/src/Socket/interactive-handler.js +527 -0
  33. package/src/Socket/interop.js +339 -0
  34. package/src/Socket/luxu.js +349 -0
  35. package/src/Socket/managed-account.js +98 -0
  36. package/src/Socket/messages-recv.js +2685 -0
  37. package/src/Socket/messages-send.js +2047 -0
  38. package/src/Socket/mex.js +57 -0
  39. package/src/Socket/newsletter.js +455 -0
  40. package/src/Socket/privacy.js +125 -0
  41. package/src/Socket/registration.js +236 -0
  42. package/src/Socket/socket.js +983 -0
  43. package/src/Socket/text-router.js +65 -0
  44. package/src/Socket/username.js +130 -0
  45. package/src/Store/index.js +33 -0
  46. package/src/Store/keyed-db.js +118 -0
  47. package/src/Store/make-cache-manager-store.js +84 -0
  48. package/src/Store/make-in-memory-store.js +551 -0
  49. package/src/Store/make-ordered-dictionary.js +81 -0
  50. package/src/Store/object-repository.js +26 -0
  51. package/src/Types/Auth.js +31 -0
  52. package/src/Types/Bussines.js +2 -0
  53. package/src/Types/Call.js +2 -0
  54. package/src/Types/Chat.js +4 -0
  55. package/src/Types/Contact.js +2 -0
  56. package/src/Types/Events.js +2 -0
  57. package/src/Types/GroupMetadata.js +2 -0
  58. package/src/Types/Label.js +26 -0
  59. package/src/Types/LabelAssociation.js +8 -0
  60. package/src/Types/Message.js +93 -0
  61. package/src/Types/Mex.js +112 -0
  62. package/src/Types/Newsletter.js +109 -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 +62 -0
  67. package/src/Types/USync.js +2 -0
  68. package/src/Types/index.js +56 -0
  69. package/src/Utils/auth-utils.js +254 -0
  70. package/src/Utils/browser-utils.js +112 -0
  71. package/src/Utils/business.js +240 -0
  72. package/src/Utils/chat-utils.js +1230 -0
  73. package/src/Utils/command-loader.d.ts +27 -0
  74. package/src/Utils/command-loader.js +89 -0
  75. package/src/Utils/companion-reg-client-utils.js +40 -0
  76. package/src/Utils/consumer-application.js +105 -0
  77. package/src/Utils/crypto.js +118 -0
  78. package/src/Utils/curve25519-js.js +242 -0
  79. package/src/Utils/decode-wa-message.js +529 -0
  80. package/src/Utils/event-buffer.js +580 -0
  81. package/src/Utils/generics.js +483 -0
  82. package/src/Utils/group-history.js +44 -0
  83. package/src/Utils/history.js +232 -0
  84. package/src/Utils/identity-change-handler.js +52 -0
  85. package/src/Utils/index.js +58 -0
  86. package/src/Utils/jid-display-normalization.js +195 -0
  87. package/src/Utils/link-preview.js +135 -0
  88. package/src/Utils/logger.js +8 -0
  89. package/src/Utils/lt-hash.js +25 -0
  90. package/src/Utils/make-mutex.js +36 -0
  91. package/src/Utils/message-composer.js +471 -0
  92. package/src/Utils/message-retry-manager.js +217 -0
  93. package/src/Utils/messages-media.js +843 -0
  94. package/src/Utils/messages.js +2817 -0
  95. package/src/Utils/meta-ai-msmsg.js +222 -0
  96. package/src/Utils/native-bridge.js +68 -0
  97. package/src/Utils/noise-handler.js +169 -0
  98. package/src/Utils/offline-node-processor.js +34 -0
  99. package/src/Utils/pre-key-manager.js +90 -0
  100. package/src/Utils/process-message.js +950 -0
  101. package/src/Utils/reporting-utils.js +261 -0
  102. package/src/Utils/session-pool.d.ts +14 -0
  103. package/src/Utils/session-pool.js +70 -0
  104. package/src/Utils/signal.js +217 -0
  105. package/src/Utils/stanza-ack.js +30 -0
  106. package/src/Utils/sticker.d.ts +13 -0
  107. package/src/Utils/sticker.js +123 -0
  108. package/src/Utils/sync-action-utils.js +45 -0
  109. package/src/Utils/tc-token-utils.js +158 -0
  110. package/src/Utils/use-multi-file-auth-state.js +111 -0
  111. package/src/Utils/validate-connection.js +209 -0
  112. package/src/Utils/view-once-cache.d.ts +12 -0
  113. package/src/Utils/view-once-cache.js +63 -0
  114. package/src/Utils/voip-rekey.js +22 -0
  115. package/src/WABinary/constants.js +1304 -0
  116. package/src/WABinary/decode.js +342 -0
  117. package/src/WABinary/encode.js +225 -0
  118. package/src/WABinary/generic-utils.js +238 -0
  119. package/src/WABinary/index.js +34 -0
  120. package/src/WABinary/jid-utils.js +351 -0
  121. package/src/WABinary/types.js +2 -0
  122. package/src/WAM/BinaryInfo.js +13 -0
  123. package/src/WAM/constants.js +39484 -0
  124. package/src/WAM/encode.js +149 -0
  125. package/src/WAM/index.js +32 -0
  126. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +53 -0
  127. package/src/WAUSync/Protocols/USyncBusinessProtocol.js +44 -0
  128. package/src/WAUSync/Protocols/USyncContactProtocol.js +55 -0
  129. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +55 -0
  130. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +31 -0
  131. package/src/WAUSync/Protocols/USyncFeatureProtocol.js +54 -0
  132. package/src/WAUSync/Protocols/USyncLIDProtocol.js +32 -0
  133. package/src/WAUSync/Protocols/USyncNewsletterProtocol.js +473 -0
  134. package/src/WAUSync/Protocols/USyncPictureProtocol.js +34 -0
  135. package/src/WAUSync/Protocols/USyncSidelistProtocol.js +29 -0
  136. package/src/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  137. package/src/WAUSync/Protocols/USyncTextStatusProtocol.js +38 -0
  138. package/src/WAUSync/Protocols/USyncUsernameProtocol.js +28 -0
  139. package/src/WAUSync/Protocols/index.js +40 -0
  140. package/src/WAUSync/USyncQuery.js +126 -0
  141. package/src/WAUSync/USyncUser.js +50 -0
  142. package/src/WAUSync/index.js +32 -0
  143. package/src/antiban.js +4152 -0
  144. package/{lib → src}/index.js +51 -49
  145. package/lib/Defaults/index.js +0 -195
  146. package/lib/Signal/Group/ciphertext-message.js +0 -15
  147. package/lib/Signal/Group/group-session-builder.js +0 -92
  148. package/lib/Signal/Group/group_cipher.js +0 -89
  149. package/lib/Signal/Group/index.js +0 -136
  150. package/lib/Signal/Group/keyhelper.js +0 -73
  151. package/lib/Signal/Group/sender-chain-key.js +0 -32
  152. package/lib/Signal/Group/sender-key-distribution-message.js +0 -66
  153. package/lib/Signal/Group/sender-key-message.js +0 -69
  154. package/lib/Signal/Group/sender-key-name.js +0 -50
  155. package/lib/Signal/Group/sender-key-record.js +0 -44
  156. package/lib/Signal/Group/sender-key-state.js +0 -97
  157. package/lib/Signal/Group/sender-message-key.js +0 -30
  158. package/lib/Signal/libsignal.js +0 -470
  159. package/lib/Signal/lid-mapping.js +0 -280
  160. package/lib/Socket/Client/index.js +0 -30
  161. package/lib/Socket/Client/types.js +0 -13
  162. package/lib/Socket/Client/websocket.js +0 -62
  163. package/lib/Socket/aigroups.js +0 -240
  164. package/lib/Socket/business.js +0 -414
  165. package/lib/Socket/chats.js +0 -2165
  166. package/lib/Socket/communities.js +0 -545
  167. package/lib/Socket/graphql.js +0 -863
  168. package/lib/Socket/groups.js +0 -685
  169. package/lib/Socket/index.js +0 -41
  170. package/lib/Socket/interactive-handler.js +0 -579
  171. package/lib/Socket/interop.js +0 -430
  172. package/lib/Socket/managed-account.js +0 -214
  173. package/lib/Socket/messages-recv.js +0 -3000
  174. package/lib/Socket/messages-send.js +0 -2155
  175. package/lib/Socket/mex.js +0 -47
  176. package/lib/Socket/newsletter.js +0 -814
  177. package/lib/Socket/privacy.js +0 -261
  178. package/lib/Socket/registration.js +0 -434
  179. package/lib/Socket/socket.js +0 -1074
  180. package/lib/Socket/username.js +0 -160
  181. package/lib/Store/index.js +0 -36
  182. package/lib/Store/make-cache-manager-store.js +0 -90
  183. package/lib/Store/make-in-memory-store.js +0 -488
  184. package/lib/Store/make-ordered-dictionary.js +0 -81
  185. package/lib/Store/object-repository.js +0 -29
  186. package/lib/Types/Auth.js +0 -38
  187. package/lib/Types/Bussines.js +0 -2
  188. package/lib/Types/Call.js +0 -2
  189. package/lib/Types/Chat.js +0 -4
  190. package/lib/Types/Contact.js +0 -2
  191. package/lib/Types/Events.js +0 -2
  192. package/lib/Types/GroupMetadata.js +0 -2
  193. package/lib/Types/Label.js +0 -27
  194. package/lib/Types/LabelAssociation.js +0 -9
  195. package/lib/Types/Message.js +0 -95
  196. package/lib/Types/Newsletter.js +0 -152
  197. package/lib/Types/Product.js +0 -2
  198. package/lib/Types/Signal.js +0 -2
  199. package/lib/Types/Socket.js +0 -2
  200. package/lib/Types/State.js +0 -70
  201. package/lib/Types/USync.js +0 -2
  202. package/lib/Types/index.js +0 -55
  203. package/lib/Utils/auth-utils.js +0 -301
  204. package/lib/Utils/browser-utils.js +0 -114
  205. package/lib/Utils/business.js +0 -243
  206. package/lib/Utils/chat-utils.js +0 -1272
  207. package/lib/Utils/consumer-application.js +0 -107
  208. package/lib/Utils/crypto.js +0 -125
  209. package/lib/Utils/decode-wa-message.js +0 -793
  210. package/lib/Utils/event-buffer.js +0 -583
  211. package/lib/Utils/generics.js +0 -617
  212. package/lib/Utils/group-history.js +0 -51
  213. package/lib/Utils/history.js +0 -244
  214. package/lib/Utils/identity-change-handler.js +0 -52
  215. package/lib/Utils/index.js +0 -53
  216. package/lib/Utils/jid-display-normalization.js +0 -218
  217. package/lib/Utils/link-preview.js +0 -138
  218. package/lib/Utils/logger.js +0 -9
  219. package/lib/Utils/lt-hash.js +0 -6
  220. package/lib/Utils/make-mutex.js +0 -36
  221. package/lib/Utils/message-composer.js +0 -479
  222. package/lib/Utils/message-inspect.js +0 -393
  223. package/lib/Utils/message-retry-manager.js +0 -205
  224. package/lib/Utils/messages-media.js +0 -925
  225. package/lib/Utils/messages.js +0 -2482
  226. package/lib/Utils/meta-ai-msmsg.js +0 -122
  227. package/lib/Utils/noise-handler.js +0 -194
  228. package/lib/Utils/offline-node-processor.js +0 -37
  229. package/lib/Utils/pre-key-manager.js +0 -97
  230. package/lib/Utils/process-message.js +0 -1139
  231. package/lib/Utils/reporting-utils.js +0 -262
  232. package/lib/Utils/signal.js +0 -189
  233. package/lib/Utils/stanza-ack.js +0 -67
  234. package/lib/Utils/sync-action-utils.js +0 -51
  235. package/lib/Utils/tc-token-utils.js +0 -156
  236. package/lib/Utils/use-multi-file-auth-state.js +0 -137
  237. package/lib/Utils/validate-connection.js +0 -259
  238. package/lib/Utils/voip-rekey.js +0 -22
  239. package/lib/WABinary/constants.js +0 -1304
  240. package/lib/WABinary/decode.js +0 -377
  241. package/lib/WABinary/encode.js +0 -58
  242. package/lib/WABinary/generic-utils.js +0 -150
  243. package/lib/WABinary/index.js +0 -33
  244. package/lib/WABinary/jid-utils.js +0 -374
  245. package/lib/WABinary/types.js +0 -2
  246. package/lib/WAM/BinaryInfo.js +0 -13
  247. package/lib/WAM/constants.js +0 -39486
  248. package/lib/WAM/encode.js +0 -142
  249. package/lib/WAM/index.js +0 -31
  250. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +0 -55
  251. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +0 -100
  252. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -60
  253. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -65
  254. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -27
  255. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +0 -72
  256. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +0 -31
  257. package/lib/WAUSync/Protocols/USyncNewsletterProtocol.js +0 -865
  258. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +0 -32
  259. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +0 -29
  260. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -44
  261. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +0 -38
  262. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -28
  263. package/lib/WAUSync/Protocols/index.js +0 -40
  264. package/lib/WAUSync/USyncBackoff.js +0 -26
  265. package/lib/WAUSync/USyncQuery.js +0 -204
  266. package/lib/WAUSync/USyncUser.js +0 -58
  267. package/lib/WAUSync/index.js +0 -32
  268. package/lib/antiban.js +0 -4391
  269. /package/{lib → src}/Defaults/phonenumber-mcc.json +0 -0
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.LT_HASH_ANTI_TAMPERING = void 0;
4
+ const crypto_1 = require('./crypto');
5
+ const LTHASH_INFO = 'WhatsApp Patch Integrity';
6
+ const LTHASH_SIZE = 128;
7
+ const expand = element => (0, crypto_1.hkdf)(element, LTHASH_SIZE, { info: LTHASH_INFO });
8
+ const applyDelta = (result, element, sign) => {
9
+ const expanded = expand(element);
10
+ for (let i = 0; i < LTHASH_SIZE; i += 2) {
11
+ const lane = result.readUInt16LE(i);
12
+ const delta = expanded.readUInt16LE(i);
13
+ result.writeUInt16LE((lane + sign * delta) & 0xffff, i);
14
+ }
15
+ };
16
+ exports.LT_HASH_ANTI_TAMPERING = {
17
+ subtractThenAdd: (base, subtract = [], add = []) => {
18
+ const result = Buffer.from(base);
19
+ for (const element of subtract)
20
+ applyDelta(result, element, -1);
21
+ for (const element of add)
22
+ applyDelta(result, element, 1);
23
+ return result;
24
+ }
25
+ };
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.makeKeyedMutex = exports.makeMutex = void 0;
4
+ const async_mutex_1 = require('async-mutex');
5
+ const makeMutex = () => {
6
+ const mutex = new async_mutex_1.Mutex();
7
+ return {
8
+ mutex(code) {
9
+ return mutex.runExclusive(code);
10
+ }
11
+ };
12
+ };
13
+ exports.makeMutex = makeMutex;
14
+ const makeKeyedMutex = () => {
15
+ const map = new Map();
16
+ return {
17
+ async mutex(key, task) {
18
+ let entry = map.get(key);
19
+ if (!entry) {
20
+ entry = { mutex: new async_mutex_1.Mutex(), refCount: 0 };
21
+ map.set(key, entry);
22
+ }
23
+ entry.refCount++;
24
+ try {
25
+ return await entry.mutex.runExclusive(task);
26
+ }
27
+ finally {
28
+ entry.refCount--;
29
+ if (entry.refCount === 0 && map.get(key) === entry) {
30
+ map.delete(key);
31
+ }
32
+ }
33
+ }
34
+ };
35
+ };
36
+ exports.makeKeyedMutex = makeKeyedMutex;
@@ -0,0 +1,471 @@
1
+ 'use strict';
2
+ const { proto } = require('../../WAProto/index.js');
3
+ const { generateMessageIDV2 } = require('./generics.js');
4
+ const JS_KEYWORDS = new Set([
5
+ 'import',
6
+ 'export',
7
+ 'from',
8
+ 'default',
9
+ 'as',
10
+ 'const',
11
+ 'let',
12
+ 'var',
13
+ 'function',
14
+ 'class',
15
+ 'extends',
16
+ 'new',
17
+ 'return',
18
+ 'if',
19
+ 'else',
20
+ 'for',
21
+ 'while',
22
+ 'do',
23
+ 'switch',
24
+ 'case',
25
+ 'break',
26
+ 'continue',
27
+ 'try',
28
+ 'catch',
29
+ 'finally',
30
+ 'throw',
31
+ 'async',
32
+ 'await',
33
+ 'yield',
34
+ 'typeof',
35
+ 'instanceof',
36
+ 'in',
37
+ 'of',
38
+ 'delete',
39
+ 'void',
40
+ 'true',
41
+ 'false',
42
+ 'null',
43
+ 'undefined',
44
+ 'NaN',
45
+ 'Infinity',
46
+ 'this',
47
+ 'super',
48
+ 'static',
49
+ 'get',
50
+ 'set',
51
+ 'debugger',
52
+ 'with'
53
+ ]);
54
+ const PYTHON_KEYWORDS = new Set([
55
+ 'import',
56
+ 'from',
57
+ 'as',
58
+ 'def',
59
+ 'class',
60
+ 'return',
61
+ 'if',
62
+ 'elif',
63
+ 'else',
64
+ 'for',
65
+ 'while',
66
+ 'break',
67
+ 'continue',
68
+ 'try',
69
+ 'except',
70
+ 'finally',
71
+ 'raise',
72
+ 'with',
73
+ 'yield',
74
+ 'lambda',
75
+ 'pass',
76
+ 'del',
77
+ 'global',
78
+ 'nonlocal',
79
+ 'assert',
80
+ 'True',
81
+ 'False',
82
+ 'None',
83
+ 'and',
84
+ 'or',
85
+ 'not',
86
+ 'in',
87
+ 'is',
88
+ 'async',
89
+ 'await',
90
+ 'self',
91
+ 'print'
92
+ ]);
93
+ const LANGUAGE_KEYWORDS = {
94
+ javascript: JS_KEYWORDS,
95
+ typescript: JS_KEYWORDS,
96
+ js: JS_KEYWORDS,
97
+ ts: JS_KEYWORDS,
98
+ python: PYTHON_KEYWORDS,
99
+ py: PYTHON_KEYWORDS
100
+ };
101
+ var CodeHighlightType;
102
+ (function (CodeHighlightType) {
103
+ CodeHighlightType[(CodeHighlightType['DEFAULT'] = 0)] = 'DEFAULT';
104
+ CodeHighlightType[(CodeHighlightType['KEYWORD'] = 1)] = 'KEYWORD';
105
+ CodeHighlightType[(CodeHighlightType['METHOD'] = 2)] = 'METHOD';
106
+ CodeHighlightType[(CodeHighlightType['STRING'] = 3)] = 'STRING';
107
+ CodeHighlightType[(CodeHighlightType['NUMBER'] = 4)] = 'NUMBER';
108
+ CodeHighlightType[(CodeHighlightType['COMMENT'] = 5)] = 'COMMENT';
109
+ })(CodeHighlightType || (CodeHighlightType = {}));
110
+ var RichSubMessageType;
111
+ (function (RichSubMessageType) {
112
+ RichSubMessageType[(RichSubMessageType['UNKNOWN'] = 0)] = 'UNKNOWN';
113
+ RichSubMessageType[(RichSubMessageType['GRID_IMAGE'] = 1)] = 'GRID_IMAGE';
114
+ RichSubMessageType[(RichSubMessageType['TEXT'] = 2)] = 'TEXT';
115
+ RichSubMessageType[(RichSubMessageType['INLINE_IMAGE'] = 3)] = 'INLINE_IMAGE';
116
+ RichSubMessageType[(RichSubMessageType['TABLE'] = 4)] = 'TABLE';
117
+ RichSubMessageType[(RichSubMessageType['CODE'] = 5)] = 'CODE';
118
+ RichSubMessageType[(RichSubMessageType['DYNAMIC'] = 6)] = 'DYNAMIC';
119
+ RichSubMessageType[(RichSubMessageType['MAP'] = 7)] = 'MAP';
120
+ RichSubMessageType[(RichSubMessageType['LATEX'] = 8)] = 'LATEX';
121
+ RichSubMessageType[(RichSubMessageType['CONTENT_ITEMS'] = 9)] = 'CONTENT_ITEMS';
122
+ })(RichSubMessageType || (RichSubMessageType = {}));
123
+ const tokenizeCode = (codeStr, language = 'javascript') => {
124
+ const keywords = LANGUAGE_KEYWORDS[language] || JS_KEYWORDS;
125
+ const blocks = [];
126
+ const lines = codeStr.split('\n');
127
+ for (let li = 0; li < lines.length; li++) {
128
+ const line = lines[li];
129
+ const isLast = li === lines.length - 1;
130
+ const nl = isLast ? '' : '\n';
131
+ if (!line.trim()) {
132
+ blocks.push({
133
+ highlightType: CodeHighlightType.DEFAULT,
134
+ codeContent: line + nl
135
+ });
136
+ continue;
137
+ }
138
+ if (line.trim().startsWith('//') || line.trim().startsWith('#')) {
139
+ blocks.push({
140
+ highlightType: CodeHighlightType.COMMENT,
141
+ codeContent: line + nl
142
+ });
143
+ continue;
144
+ }
145
+ const regex = /(\/\/.*$|#.*$)|(["'`](?:[^"'`\\]|\\.)*["'`])|(\b\d+(?:\.\d+)?\b)|(\b[a-zA-Z_$][\w$]*\b)|([^\s\w$"'`]+)|(\s+)/g;
146
+ let match;
147
+ const tokens = [];
148
+ while ((match = regex.exec(line)) !== null) {
149
+ const val = match[0];
150
+ if (match[1]) {
151
+ tokens.push({
152
+ highlightType: CodeHighlightType.COMMENT,
153
+ codeContent: val
154
+ });
155
+ }
156
+ else if (match[2]) {
157
+ tokens.push({
158
+ highlightType: CodeHighlightType.STRING,
159
+ codeContent: val
160
+ });
161
+ }
162
+ else if (match[3]) {
163
+ tokens.push({
164
+ highlightType: CodeHighlightType.NUMBER,
165
+ codeContent: val
166
+ });
167
+ }
168
+ else if (match[4]) {
169
+ if (keywords.has(val)) {
170
+ tokens.push({
171
+ highlightType: CodeHighlightType.KEYWORD,
172
+ codeContent: val
173
+ });
174
+ }
175
+ else {
176
+ const after = line.slice(regex.lastIndex).trimStart();
177
+ if (after.startsWith('(')) {
178
+ tokens.push({
179
+ highlightType: CodeHighlightType.METHOD,
180
+ codeContent: val
181
+ });
182
+ }
183
+ else {
184
+ tokens.push({
185
+ highlightType: CodeHighlightType.DEFAULT,
186
+ codeContent: val
187
+ });
188
+ }
189
+ }
190
+ }
191
+ else {
192
+ tokens.push({
193
+ highlightType: CodeHighlightType.DEFAULT,
194
+ codeContent: val
195
+ });
196
+ }
197
+ }
198
+ if (tokens.length === 0) {
199
+ blocks.push({
200
+ highlightType: CodeHighlightType.DEFAULT,
201
+ codeContent: line + nl
202
+ });
203
+ continue;
204
+ }
205
+ const merged = [];
206
+ for (const t of tokens) {
207
+ const prev = merged.length > 0 ? merged[merged.length - 1] : undefined;
208
+ if (prev && prev.highlightType === t.highlightType) {
209
+ prev.codeContent += t.codeContent;
210
+ }
211
+ else {
212
+ merged.push({ ...t });
213
+ }
214
+ }
215
+ if (merged.length > 0) {
216
+ merged[merged.length - 1].codeContent += nl;
217
+ }
218
+ blocks.push(...merged);
219
+ }
220
+ return blocks;
221
+ };
222
+ const buildRichContextInfo = (quoted, options) => {
223
+ const ctxInfo = {
224
+ forwardingScore: 1,
225
+ isForwarded: true,
226
+ forwardedAiBotMessageInfo: { botJid: options.botJid ? options.botJid : '867051314767696@bot' },
227
+ forwardOrigin: 4,
228
+ ...(options.mentions ? { mentionedJid: options.mentions } : {})
229
+ };
230
+ if (quoted?.key) {
231
+ ctxInfo.stanzaId = quoted.key.id;
232
+ ctxInfo.participant = quoted.key.participant || quoted.sender || quoted.key.remoteJid;
233
+ ctxInfo.quotedMessage = quoted.message;
234
+ }
235
+ return ctxInfo;
236
+ };
237
+ const buildBotForwardedMessage = (submessages, contextInfo, unifiedResponse) => {
238
+ const richResponse = {
239
+ messageType: 1,
240
+ submessages,
241
+ contextInfo
242
+ };
243
+ if (unifiedResponse) {
244
+ richResponse.unifiedResponse = unifiedResponse;
245
+ }
246
+ return {
247
+ botForwardedMessage: {
248
+ message: {
249
+ richResponseMessage: richResponse
250
+ }
251
+ }
252
+ };
253
+ };
254
+ const generateTableContent = (title, headers, rows, quoted, options = {}) => {
255
+ const { footer, headerText } = options;
256
+ const tableRows = [{ items: headers, isHeading: true }, ...rows.map(row => ({ items: row.map(String) }))];
257
+ const submessages = [];
258
+ if (headerText) {
259
+ submessages.push({ messageType: 2, messageText: headerText });
260
+ }
261
+ submessages.push({
262
+ messageType: 4,
263
+ tableMetadata: { title, rows: tableRows }
264
+ });
265
+ if (footer) {
266
+ submessages.push({ messageType: 2, messageText: footer });
267
+ }
268
+ const ctxInfo = buildRichContextInfo(quoted);
269
+ return {
270
+ message: buildBotForwardedMessage(submessages, ctxInfo),
271
+ messageId: generateMessageIDV2()
272
+ };
273
+ };
274
+ const generateListContent = (title, items, quoted, options = {}) => {
275
+ const { footer, headerText } = options;
276
+ const tableRows = items.map(item => ({
277
+ items: Array.isArray(item) ? item.map(String) : [String(item)]
278
+ }));
279
+ const submessages = [];
280
+ if (headerText) {
281
+ submessages.push({ messageType: 2, messageText: headerText });
282
+ }
283
+ submessages.push({
284
+ messageType: 4,
285
+ tableMetadata: { title, rows: tableRows }
286
+ });
287
+ if (footer) {
288
+ submessages.push({ messageType: 2, messageText: footer });
289
+ }
290
+ const ctxInfo = buildRichContextInfo(quoted);
291
+ return {
292
+ message: buildBotForwardedMessage(submessages, ctxInfo),
293
+ messageId: generateMessageIDV2()
294
+ };
295
+ };
296
+ const generateCodeBlockContent = (code, quoted, options = {}) => {
297
+ const { title, footer, language = 'javascript' } = options;
298
+ const submessages = [];
299
+ if (title) {
300
+ submessages.push({ messageType: 2, messageText: title });
301
+ }
302
+ submessages.push({
303
+ messageType: 5,
304
+ codeMetadata: {
305
+ codeLanguage: language,
306
+ codeBlocks: tokenizeCode(code, language)
307
+ }
308
+ });
309
+ if (footer) {
310
+ submessages.push({ messageType: 2, messageText: footer });
311
+ }
312
+ const ctxInfo = buildRichContextInfo(quoted);
313
+ return {
314
+ message: buildBotForwardedMessage(submessages, ctxInfo),
315
+ messageId: generateMessageIDV2()
316
+ };
317
+ };
318
+ const generateLatexContent = (quoted, options) => {
319
+ const { text, expressions, headerText, footer } = options;
320
+ const submessages = [];
321
+ if (headerText) {
322
+ submessages.push({ messageType: 2, messageText: headerText });
323
+ }
324
+ const latexExpressions = expressions.map(expr => {
325
+ const entry = {
326
+ latexExpression: expr.latexExpression,
327
+ url: expr.url,
328
+ width: expr.width,
329
+ height: expr.height
330
+ };
331
+ if (expr.fontHeight !== undefined)
332
+ entry.fontHeight = expr.fontHeight;
333
+ if (expr.imageTopPadding !== undefined)
334
+ entry.imageTopPadding = expr.imageTopPadding;
335
+ if (expr.imageLeadingPadding !== undefined)
336
+ entry.imageLeadingPadding = expr.imageLeadingPadding;
337
+ if (expr.imageBottomPadding !== undefined)
338
+ entry.imageBottomPadding = expr.imageBottomPadding;
339
+ if (expr.imageTrailingPadding !== undefined)
340
+ entry.imageTrailingPadding = expr.imageTrailingPadding;
341
+ return entry;
342
+ });
343
+ submessages.push({
344
+ messageType: 8,
345
+ latexMetadata: {
346
+ text: text || '',
347
+ expressions: latexExpressions
348
+ }
349
+ });
350
+ if (footer) {
351
+ submessages.push({ messageType: 2, messageText: footer });
352
+ }
353
+ const ctxInfo = buildRichContextInfo(quoted);
354
+ return {
355
+ message: buildBotForwardedMessage(submessages, ctxInfo),
356
+ messageId: generateMessageIDV2()
357
+ };
358
+ };
359
+ const generateLatexImageContent = async (quoted, options, uploadFn, renderLatexToPng) => {
360
+ const { text, expressions, headerText, footer } = options;
361
+ const submessages = [];
362
+ if (headerText) {
363
+ submessages.push({ messageType: 2, messageText: headerText });
364
+ }
365
+ const latexExpressions = await Promise.all(expressions.map(async (expr) => {
366
+ const { buffer, width, height } = await renderLatexToPng(expr.latexExpression);
367
+ const uploadResult = await uploadFn(buffer, 'image');
368
+ const imageUrl = uploadResult.url || uploadResult.directPath;
369
+ return {
370
+ latexExpression: expr.latexExpression,
371
+ url: imageUrl,
372
+ width,
373
+ height
374
+ };
375
+ }));
376
+ submessages.push({
377
+ messageType: 8,
378
+ latexMetadata: {
379
+ text: text || '',
380
+ expressions: latexExpressions
381
+ }
382
+ });
383
+ if (footer) {
384
+ submessages.push({ messageType: 2, messageText: footer });
385
+ }
386
+ const ctxInfo = buildRichContextInfo(quoted);
387
+ return {
388
+ message: buildBotForwardedMessage(submessages, ctxInfo),
389
+ messageId: generateMessageIDV2()
390
+ };
391
+ };
392
+ const generateLatexInlineImageContent = async (quoted, options, uploadFn, renderLatexToPng) => {
393
+ const { text, expressions, headerText, footer } = options;
394
+ const submessages = [];
395
+ if (headerText) {
396
+ submessages.push({ messageType: 2, messageText: headerText });
397
+ }
398
+ if (text) {
399
+ submessages.push({ messageType: 2, messageText: text });
400
+ }
401
+ for (const expr of expressions) {
402
+ const { buffer, width, height } = await renderLatexToPng(expr.latexExpression);
403
+ const uploadResult = await uploadFn(buffer, 'image');
404
+ const imageUrl = uploadResult.url || uploadResult.directPath;
405
+ submessages.push({
406
+ messageType: 3,
407
+ imageMetadata: {
408
+ imageUrl: {
409
+ imagePreviewUrl: imageUrl,
410
+ imageHighResUrl: imageUrl
411
+ },
412
+ imageText: expr.latexExpression,
413
+ alignment: 2
414
+ }
415
+ });
416
+ }
417
+ if (footer) {
418
+ submessages.push({ messageType: 2, messageText: footer });
419
+ }
420
+ const ctxInfo = buildRichContextInfo(quoted);
421
+ return {
422
+ message: buildBotForwardedMessage(submessages, ctxInfo),
423
+ messageId: generateMessageIDV2()
424
+ };
425
+ };
426
+ const captureUnifiedResponse = msg => {
427
+ const botFwd = msg?.botForwardedMessage?.message;
428
+ if (!botFwd)
429
+ return null;
430
+ const rich = botFwd.richResponseMessage;
431
+ if (!rich?.unifiedResponse?.data)
432
+ return null;
433
+ return {
434
+ unifiedResponse: { data: rich.unifiedResponse.data },
435
+ submessages: rich.submessages || [],
436
+ contextInfo: rich.contextInfo || {}
437
+ };
438
+ };
439
+ const generateUnifiedResponseContent = (quoted, captured) => {
440
+ const ctxInfo = buildRichContextInfo(quoted);
441
+ return {
442
+ message: buildBotForwardedMessage(captured.submessages, ctxInfo, captured.unifiedResponse),
443
+ messageId: generateMessageIDV2()
444
+ };
445
+ };
446
+ const generateRichMessageContent = (submessages, quoted, options) => {
447
+ const ctxInfo = buildRichContextInfo(quoted, options);
448
+ return {
449
+ message: buildBotForwardedMessage(submessages, ctxInfo),
450
+ messageId: generateMessageIDV2()
451
+ };
452
+ };
453
+ module.exports = {
454
+ JS_KEYWORDS,
455
+ PYTHON_KEYWORDS,
456
+ LANGUAGE_KEYWORDS,
457
+ CodeHighlightType,
458
+ RichSubMessageType,
459
+ tokenizeCode,
460
+ buildRichContextInfo,
461
+ buildBotForwardedMessage,
462
+ generateTableContent,
463
+ generateListContent,
464
+ generateCodeBlockContent,
465
+ generateLatexContent,
466
+ generateLatexImageContent,
467
+ generateLatexInlineImageContent,
468
+ captureUnifiedResponse,
469
+ generateUnifiedResponseContent,
470
+ generateRichMessageContent
471
+ };