@mrlegendbot/baileys 1.2.3 → 1.2.4

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 (212) hide show
  1. package/README.upstream.md +1312 -0
  2. package/WAProto/WAProto.json +1 -0
  3. package/WAProto/WAProto.proto +6275 -0
  4. package/WAProto/compiler.js +550 -0
  5. package/WAProto/index.js +2 -97691
  6. package/lib/Defaults/index.js +89 -92
  7. package/lib/Signal/Group/ciphertext-message.js +9 -10
  8. package/lib/Signal/Group/group-session-builder.js +21 -22
  9. package/lib/Signal/Group/group_cipher.js +75 -69
  10. package/lib/Signal/Group/index.js +0 -1
  11. package/lib/Signal/Group/keyhelper.js +9 -10
  12. package/lib/Signal/Group/sender-chain-key.js +21 -22
  13. package/lib/Signal/Group/sender-key-distribution-message.js +51 -60
  14. package/lib/Signal/Group/sender-key-message.js +56 -62
  15. package/lib/Signal/Group/sender-key-name.js +38 -40
  16. package/lib/Signal/Group/sender-key-record.js +33 -34
  17. package/lib/Signal/Group/sender-key-state.js +72 -76
  18. package/lib/Signal/Group/sender-message-key.js +22 -23
  19. package/lib/Signal/libsignal.js +506 -405
  20. package/lib/Signal/lid-mapping.js +276 -258
  21. package/lib/Socket/Client/index.js +0 -1
  22. package/lib/Socket/Client/types.js +6 -7
  23. package/lib/Socket/Client/websocket.js +48 -49
  24. package/lib/Socket/business.js +349 -369
  25. package/lib/Socket/chats.js +1172 -1148
  26. package/lib/Socket/communities.js +473 -413
  27. package/lib/Socket/groups.js +387 -331
  28. package/lib/Socket/index.js +6 -8
  29. package/lib/Socket/messages-recv.js +1782 -1719
  30. package/lib/Socket/messages-send.js +1503 -2450
  31. package/lib/Socket/mex.js +40 -35
  32. package/lib/Socket/newsletter.js +239 -191
  33. package/lib/Socket/socket.js +992 -923
  34. package/lib/Store/index.js +8 -0
  35. package/lib/Store/keyed-db.js +108 -0
  36. package/lib/Store/make-cache-manager-store.js +70 -0
  37. package/lib/Store/make-in-memory-store.js +417 -0
  38. package/lib/Store/make-ordered-dictionary.js +69 -0
  39. package/lib/Store/object-repository.js +27 -0
  40. package/lib/Types/Auth.js +0 -1
  41. package/lib/Types/Bussines.js +0 -1
  42. package/lib/Types/Call.js +0 -1
  43. package/lib/Types/Chat.js +1 -8
  44. package/lib/Types/Contact.js +0 -1
  45. package/lib/Types/Events.js +1 -2
  46. package/lib/Types/GroupMetadata.js +0 -1
  47. package/lib/Types/Label.js +20 -22
  48. package/lib/Types/LabelAssociation.js +2 -4
  49. package/lib/Types/Message.js +3 -5
  50. package/lib/Types/Mex.js +26 -31
  51. package/lib/Types/Product.js +0 -1
  52. package/lib/Types/Signal.js +1 -2
  53. package/lib/Types/Socket.js +2 -3
  54. package/lib/Types/State.js +4 -52
  55. package/lib/Types/USync.js +0 -1
  56. package/lib/Types/index.js +10 -11
  57. package/lib/Utils/auth-utils.js +240 -277
  58. package/lib/Utils/browser-utils.js +20 -23
  59. package/lib/Utils/business.js +200 -204
  60. package/lib/Utils/chat-utils.js +836 -810
  61. package/lib/Utils/companion-reg-client-utils.js +23 -25
  62. package/lib/Utils/crypto.js +70 -86
  63. package/lib/Utils/decode-wa-message.js +277 -284
  64. package/lib/Utils/event-buffer.js +592 -595
  65. package/lib/Utils/generics.js +312 -335
  66. package/lib/Utils/history.js +123 -115
  67. package/lib/Utils/index.js +1 -2
  68. package/lib/Utils/link-preview.js +74 -73
  69. package/lib/Utils/logger.js +3 -2
  70. package/lib/Utils/lt-hash.js +0 -6
  71. package/lib/Utils/make-mutex.js +27 -27
  72. package/lib/Utils/message-retry-manager.js +213 -254
  73. package/lib/Utils/messages-media.js +741 -715
  74. package/lib/Utils/messages.js +791 -827
  75. package/lib/Utils/noise-handler.js +215 -187
  76. package/lib/Utils/pre-key-manager.js +69 -98
  77. package/lib/Utils/process-message.js +617 -586
  78. package/lib/Utils/reporting-utils.js +553 -234
  79. package/lib/Utils/signal.js +217 -170
  80. package/lib/Utils/stanza-ack.js +27 -35
  81. package/lib/Utils/sync-action-utils.js +37 -41
  82. package/lib/Utils/tc-token-utils.js +120 -141
  83. package/lib/Utils/use-multi-file-auth-state.js +87 -105
  84. package/lib/Utils/use-sqlite-auth-state.js +162 -0
  85. package/lib/Utils/validate-connection.js +190 -188
  86. package/lib/WABinary/constants.js +28 -1294
  87. package/lib/WABinary/decode.js +245 -249
  88. package/lib/WABinary/encode.js +201 -206
  89. package/lib/WABinary/generic-utils.js +86 -89
  90. package/lib/WABinary/index.js +0 -1
  91. package/lib/WABinary/jid-utils.js +68 -77
  92. package/lib/WABinary/types.js +0 -1
  93. package/lib/WAM/BinaryInfo.js +7 -8
  94. package/lib/WAM/constants.js +19892 -22853
  95. package/lib/WAM/encode.js +121 -132
  96. package/lib/WAM/index.js +0 -1
  97. package/lib/WAUSync/Protocols/USyncContactProtocol.js +46 -43
  98. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +47 -48
  99. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +22 -23
  100. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +30 -33
  101. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +19 -20
  102. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -44
  103. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -24
  104. package/lib/WAUSync/Protocols/index.js +0 -1
  105. package/lib/WAUSync/USyncQuery.js +79 -88
  106. package/lib/WAUSync/USyncUser.js +28 -29
  107. package/lib/WAUSync/index.js +0 -1
  108. package/lib/index.js +2 -2
  109. package/package.json +22 -86
  110. package/WAProto/GenerateStatics.sh +0 -3
  111. package/WAProto/fix-imports.js +0 -85
  112. package/WAProto/index.d.ts +0 -14017
  113. package/lib/Defaults/index.d.ts +0 -75
  114. package/lib/Signal/Group/ciphertext-message.d.ts +0 -10
  115. package/lib/Signal/Group/group-session-builder.d.ts +0 -15
  116. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  117. package/lib/Signal/Group/index.d.ts +0 -12
  118. package/lib/Signal/Group/keyhelper.d.ts +0 -11
  119. package/lib/Signal/Group/sender-chain-key.d.ts +0 -14
  120. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -17
  121. package/lib/Signal/Group/sender-key-message.d.ts +0 -19
  122. package/lib/Signal/Group/sender-key-name.d.ts +0 -18
  123. package/lib/Signal/Group/sender-key-record.d.ts +0 -31
  124. package/lib/Signal/Group/sender-key-state.d.ts +0 -39
  125. package/lib/Signal/Group/sender-message-key.d.ts +0 -12
  126. package/lib/Signal/libsignal.d.ts +0 -5
  127. package/lib/Signal/lid-mapping.d.ts +0 -23
  128. package/lib/Socket/Client/index.d.ts +0 -3
  129. package/lib/Socket/Client/types.d.ts +0 -16
  130. package/lib/Socket/Client/websocket.d.ts +0 -13
  131. package/lib/Socket/business.d.ts +0 -217
  132. package/lib/Socket/chats.d.ts +0 -125
  133. package/lib/Socket/communities.d.ts +0 -273
  134. package/lib/Socket/groups.d.ts +0 -161
  135. package/lib/Socket/index.d.ts +0 -260
  136. package/lib/Socket/messages-recv.d.ts +0 -203
  137. package/lib/Socket/messages-send.d.ts +0 -199
  138. package/lib/Socket/mex.d.ts +0 -3
  139. package/lib/Socket/newsletter.d.ts +0 -170
  140. package/lib/Socket/socket.d.ts +0 -59
  141. package/lib/Types/Auth.d.ts +0 -117
  142. package/lib/Types/Bussines.d.ts +0 -25
  143. package/lib/Types/Call.d.ts +0 -15
  144. package/lib/Types/Chat.d.ts +0 -124
  145. package/lib/Types/Contact.d.ts +0 -26
  146. package/lib/Types/Events.d.ts +0 -256
  147. package/lib/Types/GroupMetadata.d.ts +0 -71
  148. package/lib/Types/Label.d.ts +0 -47
  149. package/lib/Types/LabelAssociation.d.ts +0 -30
  150. package/lib/Types/Message.d.ts +0 -320
  151. package/lib/Types/Mex.d.ts +0 -141
  152. package/lib/Types/Product.d.ts +0 -79
  153. package/lib/Types/Signal.d.ts +0 -87
  154. package/lib/Types/Socket.d.ts +0 -136
  155. package/lib/Types/State.d.ts +0 -97
  156. package/lib/Types/USync.d.ts +0 -26
  157. package/lib/Types/index.d.ts +0 -66
  158. package/lib/Utils/auth-utils.d.ts +0 -24
  159. package/lib/Utils/browser-utils.d.ts +0 -4
  160. package/lib/Utils/business.d.ts +0 -23
  161. package/lib/Utils/chat-utils.d.ts +0 -100
  162. package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
  163. package/lib/Utils/crypto.d.ts +0 -37
  164. package/lib/Utils/decode-wa-message.d.ts +0 -66
  165. package/lib/Utils/event-buffer.d.ts +0 -36
  166. package/lib/Utils/generics.d.ts +0 -92
  167. package/lib/Utils/history.d.ts +0 -24
  168. package/lib/Utils/identity-change-handler.d.ts +0 -44
  169. package/lib/Utils/identity-change-handler.js +0 -50
  170. package/lib/Utils/index.d.ts +0 -22
  171. package/lib/Utils/link-preview.d.ts +0 -21
  172. package/lib/Utils/logger.d.ts +0 -12
  173. package/lib/Utils/lt-hash.d.ts +0 -8
  174. package/lib/Utils/make-mutex.d.ts +0 -9
  175. package/lib/Utils/message-retry-manager.d.ts +0 -115
  176. package/lib/Utils/messages-media.d.ts +0 -133
  177. package/lib/Utils/messages.d.ts +0 -91
  178. package/lib/Utils/noise-handler.d.ts +0 -20
  179. package/lib/Utils/offline-node-processor.d.ts +0 -17
  180. package/lib/Utils/offline-node-processor.js +0 -40
  181. package/lib/Utils/pre-key-manager.d.ts +0 -28
  182. package/lib/Utils/process-message.d.ts +0 -60
  183. package/lib/Utils/reporting-utils.d.ts +0 -11
  184. package/lib/Utils/signal.d.ts +0 -47
  185. package/lib/Utils/stanza-ack.d.ts +0 -11
  186. package/lib/Utils/sync-action-utils.d.ts +0 -19
  187. package/lib/Utils/tc-token-utils.d.ts +0 -37
  188. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
  189. package/lib/Utils/validate-connection.d.ts +0 -11
  190. package/lib/WABinary/constants.d.ts +0 -28
  191. package/lib/WABinary/decode.d.ts +0 -7
  192. package/lib/WABinary/encode.d.ts +0 -3
  193. package/lib/WABinary/generic-utils.d.ts +0 -15
  194. package/lib/WABinary/index.d.ts +0 -6
  195. package/lib/WABinary/jid-utils.d.ts +0 -48
  196. package/lib/WABinary/types.d.ts +0 -19
  197. package/lib/WAM/BinaryInfo.d.ts +0 -9
  198. package/lib/WAM/constants.d.ts +0 -40
  199. package/lib/WAM/encode.d.ts +0 -3
  200. package/lib/WAM/index.d.ts +0 -4
  201. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -10
  202. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -23
  203. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -13
  204. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -13
  205. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
  206. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -26
  207. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -10
  208. package/lib/WAUSync/Protocols/index.d.ts +0 -6
  209. package/lib/WAUSync/USyncQuery.d.ts +0 -30
  210. package/lib/WAUSync/USyncUser.d.ts +0 -17
  211. package/lib/WAUSync/index.d.ts +0 -4
  212. package/lib/index.d.ts +0 -12
@@ -1,134 +1,142 @@
1
1
  import { pipeline } from 'stream/promises';
2
2
  import { promisify } from 'util';
3
3
  import { createInflate, inflate } from 'zlib';
4
- import { proto } from '../../WAProto/index.js';
4
+ import { proto } from '../../WAProto/compiler.js';
5
5
  import { WAMessageStubType } from '../Types/index.js';
6
6
  import { isHostedLidUser, isHostedPnUser, isLidUser, isPnUser } from '../WABinary/index.js';
7
7
  import { toNumber } from './generics.js';
8
8
  import { normalizeMessageContent } from './messages.js';
9
9
  import { downloadContentFromMessage } from './messages-media.js';
10
10
  const inflatePromise = promisify(inflate);
11
- const extractPnFromMessages = (messages) => {
12
- for (const msgItem of messages) {
13
- const message = msgItem.message;
14
- // Only extract from outgoing messages (fromMe: true) in 1:1 chats
15
- // because userReceipt.userJid is the recipient's JID
16
- if (!message?.key?.fromMe || !message.userReceipt?.length) {
17
- continue;
18
- }
19
- const userJid = message.userReceipt[0]?.userJid;
20
- if (userJid && (isPnUser(userJid) || isHostedPnUser(userJid))) {
21
- return userJid;
22
- }
11
+ const extractPnFromMessages = messages => {
12
+ for (const msgItem of messages) {
13
+ const message = msgItem.message;
14
+ if (!message?.key?.fromMe || !message.userReceipt?.length) {
15
+ continue;
16
+ }
17
+ const userJid = message.userReceipt[0]?.userJid;
18
+ if (userJid && (isPnUser(userJid) || isHostedPnUser(userJid))) {
19
+ return userJid;
23
20
  }
24
- return undefined;
21
+ }
22
+ return undefined;
25
23
  };
26
24
  export const downloadHistory = async (msg, options) => {
27
- const stream = await downloadContentFromMessage(msg, 'md-msg-hist', { options });
28
- // Pipe decrypted stream directly through zlib inflate
29
- // This avoids allocating an intermediate buffer for the compressed data
30
- const inflater = createInflate();
31
- const chunks = [];
32
- inflater.on('data', (chunk) => chunks.push(chunk));
33
- await pipeline(stream, inflater);
34
- const buffer = Buffer.concat(chunks);
35
- const syncData = proto.HistorySync.decode(buffer);
36
- return syncData;
25
+ const stream = await downloadContentFromMessage(msg, 'md-msg-hist', {
26
+ options
27
+ });
28
+ const inflater = createInflate();
29
+ const chunks = [];
30
+ inflater.on('data', chunk => chunks.push(chunk));
31
+ await pipeline(stream, inflater);
32
+ const buffer = Buffer.concat(chunks);
33
+ const syncData = proto.HistorySync.decode(buffer);
34
+ return syncData;
37
35
  };
38
36
  export const processHistoryMessage = (item, logger) => {
39
- const messages = [];
40
- const contacts = [];
41
- const chats = [];
42
- const lidPnMappings = [];
43
- logger?.trace({ progress: item.progress }, 'processing history of type ' + item.syncType?.toString());
44
- // Extract LID-PN mappings for all sync types
45
- for (const m of item.phoneNumberToLidMappings || []) {
46
- if (m.lidJid && m.pnJid) {
47
- lidPnMappings.push({ lid: m.lidJid, pn: m.pnJid });
48
- }
49
- }
50
- switch (item.syncType) {
51
- case proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP:
52
- case proto.HistorySync.HistorySyncType.RECENT:
53
- case proto.HistorySync.HistorySyncType.FULL:
54
- case proto.HistorySync.HistorySyncType.ON_DEMAND:
55
- for (const chat of item.conversations) {
56
- contacts.push({
57
- id: chat.id,
58
- name: chat.displayName || chat.name || chat.username || undefined,
59
- username: chat.username || undefined,
60
- lid: chat.lidJid || chat.accountLid || undefined,
61
- phoneNumber: chat.pnJid || undefined
62
- });
63
- const chatId = chat.id;
64
- const isLid = isLidUser(chatId) || isHostedLidUser(chatId);
65
- const isPn = isPnUser(chatId) || isHostedPnUser(chatId);
66
- if (isLid && chat.pnJid) {
67
- lidPnMappings.push({ lid: chatId, pn: chat.pnJid });
68
- }
69
- else if (isPn && chat.lidJid) {
70
- lidPnMappings.push({ lid: chat.lidJid, pn: chatId });
71
- }
72
- else if (isLid && !chat.pnJid) {
73
- // Fallback: extract PN from userReceipt in messages when pnJid is missing
74
- const pnFromReceipt = extractPnFromMessages(chat.messages || []);
75
- if (pnFromReceipt) {
76
- lidPnMappings.push({ lid: chatId, pn: pnFromReceipt });
77
- }
78
- }
79
- const msgs = chat.messages || [];
80
- delete chat.messages;
81
- for (const item of msgs) {
82
- const message = item.message;
83
- messages.push(message);
84
- if (!chat.messages?.length) {
85
- // keep only the most recent message in the chat array
86
- chat.messages = [{ message }];
87
- }
88
- if (!message.key.fromMe && !chat.lastMessageRecvTimestamp) {
89
- chat.lastMessageRecvTimestamp = toNumber(message.messageTimestamp);
90
- }
91
- if ((message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_BSP ||
92
- message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_FB) &&
93
- message.messageStubParameters?.[0]) {
94
- contacts.push({
95
- id: message.key.participant || message.key.remoteJid,
96
- verifiedName: message.messageStubParameters?.[0]
97
- });
98
- }
99
- }
100
- chats.push(chat);
101
- }
102
- break;
103
- case proto.HistorySync.HistorySyncType.PUSH_NAME:
104
- for (const c of item.pushnames) {
105
- contacts.push({ id: c.id, notify: c.pushname });
106
- }
107
- break;
37
+ const messages = [];
38
+ const contacts = [];
39
+ const chats = [];
40
+ const lidPnMappings = [];
41
+ logger?.trace({
42
+ progress: item.progress
43
+ }, 'processing history of type ' + item.syncType?.toString());
44
+ for (const m of item.phoneNumberToLidMappings || []) {
45
+ if (m.lidJid && m.pnJid) {
46
+ lidPnMappings.push({
47
+ lid: m.lidJid,
48
+ pn: m.pnJid
49
+ });
108
50
  }
109
- return {
110
- chats,
111
- contacts,
112
- messages,
113
- lidPnMappings,
114
- pastParticipants: item.pastParticipants,
115
- syncType: item.syncType,
116
- progress: item.progress
117
- };
51
+ }
52
+ switch (item.syncType) {
53
+ case proto.HistorySync.HistorySyncType.INITIAL_BOOTSTRAP:
54
+ case proto.HistorySync.HistorySyncType.RECENT:
55
+ case proto.HistorySync.HistorySyncType.FULL:
56
+ case proto.HistorySync.HistorySyncType.ON_DEMAND:
57
+ for (const chat of item.conversations) {
58
+ contacts.push({
59
+ id: chat.id,
60
+ name: chat.displayName || chat.name || chat.username || undefined,
61
+ username: chat.username || undefined,
62
+ lid: chat.lidJid || chat.accountLid || undefined,
63
+ phoneNumber: chat.pnJid || undefined
64
+ });
65
+ const chatId = chat.id;
66
+ const isLid = isLidUser(chatId) || isHostedLidUser(chatId);
67
+ const isPn = isPnUser(chatId) || isHostedPnUser(chatId);
68
+ if (isLid && chat.pnJid) {
69
+ lidPnMappings.push({
70
+ lid: chatId,
71
+ pn: chat.pnJid
72
+ });
73
+ } else if (isPn && chat.lidJid) {
74
+ lidPnMappings.push({
75
+ lid: chat.lidJid,
76
+ pn: chatId
77
+ });
78
+ } else if (isLid && !chat.pnJid) {
79
+ const pnFromReceipt = extractPnFromMessages(chat.messages || []);
80
+ if (pnFromReceipt) {
81
+ lidPnMappings.push({
82
+ lid: chatId,
83
+ pn: pnFromReceipt
84
+ });
85
+ }
86
+ }
87
+ const msgs = chat.messages || [];
88
+ delete chat.messages;
89
+ for (const item of msgs) {
90
+ const message = item.message;
91
+ messages.push(message);
92
+ if (!chat.messages?.length) {
93
+ chat.messages = [{
94
+ message
95
+ }];
96
+ }
97
+ if (!message.key.fromMe && !chat.lastMessageRecvTimestamp) {
98
+ chat.lastMessageRecvTimestamp = toNumber(message.messageTimestamp);
99
+ }
100
+ if ((message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_BSP || message.messageStubType === WAMessageStubType.BIZ_PRIVACY_MODE_TO_FB) && message.messageStubParameters?.[0]) {
101
+ contacts.push({
102
+ id: message.key.participant || message.key.remoteJid,
103
+ verifiedName: message.messageStubParameters?.[0]
104
+ });
105
+ }
106
+ }
107
+ chats.push(chat);
108
+ }
109
+ break;
110
+ case proto.HistorySync.HistorySyncType.PUSH_NAME:
111
+ for (const c of item.pushnames) {
112
+ contacts.push({
113
+ id: c.id,
114
+ notify: c.pushname
115
+ });
116
+ }
117
+ break;
118
+ }
119
+ return {
120
+ chats,
121
+ contacts,
122
+ messages,
123
+ lidPnMappings,
124
+ pastParticipants: item.pastParticipants,
125
+ syncType: item.syncType,
126
+ progress: item.progress
127
+ };
118
128
  };
119
129
  export const downloadAndProcessHistorySyncNotification = async (msg, options, logger) => {
120
- let historyMsg;
121
- if (msg.initialHistBootstrapInlinePayload) {
122
- historyMsg = proto.HistorySync.decode(await inflatePromise(msg.initialHistBootstrapInlinePayload));
123
- }
124
- else {
125
- historyMsg = await downloadHistory(msg, options);
126
- }
127
- return processHistoryMessage(historyMsg, logger);
130
+ let historyMsg;
131
+ if (msg.initialHistBootstrapInlinePayload) {
132
+ historyMsg = proto.HistorySync.decode(await inflatePromise(msg.initialHistBootstrapInlinePayload));
133
+ } else {
134
+ historyMsg = await downloadHistory(msg, options);
135
+ }
136
+ return processHistoryMessage(historyMsg, logger);
128
137
  };
129
- export const getHistoryMsg = (message) => {
130
- const normalizedContent = !!message ? normalizeMessageContent(message) : undefined;
131
- const anyHistoryMsg = normalizedContent?.protocolMessage?.historySyncNotification;
132
- return anyHistoryMsg;
138
+ export const getHistoryMsg = message => {
139
+ const normalizedContent = !!message ? normalizeMessageContent(message) : undefined;
140
+ const anyHistoryMsg = normalizedContent?.protocolMessage?.historySyncNotification;
141
+ return anyHistoryMsg;
133
142
  };
134
- //# sourceMappingURL=history.js.map
@@ -17,6 +17,5 @@ export * from './process-message.js';
17
17
  export * from './message-retry-manager.js';
18
18
  export * from './browser-utils.js';
19
19
  export * from './companion-reg-client-utils.js';
20
- export * from './identity-change-handler.js';
21
20
  export * from './stanza-ack.js';
22
- //# sourceMappingURL=index.js.map
21
+ export * from './use-sqlite-auth-state.js';
@@ -1,85 +1,86 @@
1
1
  import { prepareWAMessageMedia } from './messages.js';
2
2
  import { extractImageThumb, getHttpStream } from './messages-media.js';
3
3
  const THUMBNAIL_WIDTH_PX = 192;
4
- /** Fetches an image and generates a thumbnail for it */
5
- const getCompressedJpegThumbnail = async (url, { thumbnailWidth, fetchOpts }) => {
6
- const stream = await getHttpStream(url, fetchOpts);
7
- const result = await extractImageThumb(stream, thumbnailWidth);
8
- return result;
4
+ const getCompressedJpegThumbnail = async (url, {
5
+ thumbnailWidth,
6
+ fetchOpts
7
+ }) => {
8
+ const stream = await getHttpStream(url, fetchOpts);
9
+ const result = await extractImageThumb(stream, thumbnailWidth);
10
+ return result;
9
11
  };
10
- /**
11
- * Given a piece of text, checks for any URL present, generates link preview for the same and returns it
12
- * Return undefined if the fetch failed or no URL was found
13
- * @param text first matched URL in text
14
- * @returns the URL info required to generate link preview
15
- */
16
12
  export const getUrlInfo = async (text, opts = {
17
- thumbnailWidth: THUMBNAIL_WIDTH_PX,
18
- fetchOpts: { timeout: 3000 }
13
+ thumbnailWidth: THUMBNAIL_WIDTH_PX,
14
+ fetchOpts: {
15
+ timeout: 3000
16
+ }
19
17
  }) => {
20
- try {
21
- // retries
22
- let retries = 0;
23
- const maxRetry = 5;
24
- const { getLinkPreview } = await import('link-preview-js');
25
- let previewLink = text;
26
- if (!text.startsWith('https://') && !text.startsWith('http://')) {
27
- previewLink = 'https://' + previewLink;
18
+ try {
19
+ let retries = 0;
20
+ const maxRetry = 5;
21
+ const {
22
+ getLinkPreview
23
+ } = await import('link-preview-js');
24
+ let previewLink = text;
25
+ if (!text.startsWith('https://') && !text.startsWith('http://')) {
26
+ previewLink = 'https://' + previewLink;
27
+ }
28
+ const info = await getLinkPreview(previewLink, {
29
+ ...opts.fetchOpts,
30
+ followRedirects: 'follow',
31
+ handleRedirects: (baseURL, forwardedURL) => {
32
+ const urlObj = new URL(baseURL);
33
+ const forwardedURLObj = new URL(forwardedURL);
34
+ if (retries >= maxRetry) {
35
+ return false;
28
36
  }
29
- const info = await getLinkPreview(previewLink, {
30
- ...opts.fetchOpts,
31
- followRedirects: 'follow',
32
- handleRedirects: (baseURL, forwardedURL) => {
33
- const urlObj = new URL(baseURL);
34
- const forwardedURLObj = new URL(forwardedURL);
35
- if (retries >= maxRetry) {
36
- return false;
37
- }
38
- if (forwardedURLObj.hostname === urlObj.hostname ||
39
- forwardedURLObj.hostname === 'www.' + urlObj.hostname ||
40
- 'www.' + forwardedURLObj.hostname === urlObj.hostname) {
41
- retries += 1;
42
- return true;
43
- }
44
- else {
45
- return false;
46
- }
47
- },
48
- headers: opts.fetchOpts?.headers
37
+ if (forwardedURLObj.hostname === urlObj.hostname || forwardedURLObj.hostname === 'www.' + urlObj.hostname || 'www.' + forwardedURLObj.hostname === urlObj.hostname) {
38
+ retries += 1;
39
+ return true;
40
+ } else {
41
+ return false;
42
+ }
43
+ },
44
+ headers: opts.fetchOpts?.headers
45
+ });
46
+ if (info && 'title' in info && info.title) {
47
+ const [image] = info.images;
48
+ const urlInfo = {
49
+ 'canonical-url': info.url,
50
+ 'matched-text': text,
51
+ title: info.title,
52
+ description: info.description,
53
+ originalThumbnailUrl: image
54
+ };
55
+ if (opts.uploadImage) {
56
+ const {
57
+ imageMessage
58
+ } = await prepareWAMessageMedia({
59
+ image: {
60
+ url: image
61
+ }
62
+ }, {
63
+ upload: opts.uploadImage,
64
+ mediaTypeOverride: 'thumbnail-link',
65
+ options: opts.fetchOpts
49
66
  });
50
- if (info && 'title' in info && info.title) {
51
- const [image] = info.images;
52
- const urlInfo = {
53
- 'canonical-url': info.url,
54
- 'matched-text': text,
55
- title: info.title,
56
- description: info.description,
57
- originalThumbnailUrl: image
58
- };
59
- if (opts.uploadImage) {
60
- const { imageMessage } = await prepareWAMessageMedia({ image: { url: image } }, {
61
- upload: opts.uploadImage,
62
- mediaTypeOverride: 'thumbnail-link',
63
- options: opts.fetchOpts
64
- });
65
- urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) : undefined;
66
- urlInfo.highQualityThumbnail = imageMessage || undefined;
67
- }
68
- else {
69
- try {
70
- urlInfo.jpegThumbnail = image ? (await getCompressedJpegThumbnail(image, opts)).buffer : undefined;
71
- }
72
- catch (error) {
73
- opts.logger?.debug({ err: error.stack, url: previewLink }, 'error in generating thumbnail');
74
- }
75
- }
76
- return urlInfo;
67
+ urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail ? Buffer.from(imageMessage.jpegThumbnail) : undefined;
68
+ urlInfo.highQualityThumbnail = imageMessage || undefined;
69
+ } else {
70
+ try {
71
+ urlInfo.jpegThumbnail = image ? (await getCompressedJpegThumbnail(image, opts)).buffer : undefined;
72
+ } catch (error) {
73
+ opts.logger?.debug({
74
+ err: error.stack,
75
+ url: previewLink
76
+ }, 'error in generating thumbnail');
77
77
  }
78
+ }
79
+ return urlInfo;
78
80
  }
79
- catch (error) {
80
- if (!error.message.includes('receive a valid')) {
81
- throw error;
82
- }
81
+ } catch (error) {
82
+ if (!error.message.includes('receive a valid')) {
83
+ throw error;
83
84
  }
85
+ }
84
86
  };
85
- //# sourceMappingURL=link-preview.js.map
@@ -1,3 +1,4 @@
1
1
  import P from 'pino';
2
- export default P({ timestamp: () => `,"time":"${new Date().toJSON()}"` });
3
- //# sourceMappingURL=logger.js.map
2
+ export default P({
3
+ timestamp: () => `,"time":"${new Date().toJSON()}"`
4
+ });
@@ -1,8 +1,2 @@
1
1
  import { LTHashAntiTampering } from 'whatsapp-rust-bridge';
2
- /**
3
- * LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
4
- * over a series of mutations. You can add/remove mutations and it'll return a hash equal to
5
- * if the same series of mutations was made sequentially.
6
- */
7
2
  export const LT_HASH_ANTI_TAMPERING = new LTHashAntiTampering();
8
- //# sourceMappingURL=lt-hash.js.map
@@ -1,33 +1,33 @@
1
1
  import { Mutex as AsyncMutex } from 'async-mutex';
2
2
  export const makeMutex = () => {
3
- const mutex = new AsyncMutex();
4
- return {
5
- mutex(code) {
6
- return mutex.runExclusive(code);
7
- }
8
- };
3
+ const mutex = new AsyncMutex();
4
+ return {
5
+ mutex(code) {
6
+ return mutex.runExclusive(code);
7
+ }
8
+ };
9
9
  };
10
10
  export const makeKeyedMutex = () => {
11
- const map = new Map();
12
- return {
13
- async mutex(key, task) {
14
- let entry = map.get(key);
15
- if (!entry) {
16
- entry = { mutex: new AsyncMutex(), refCount: 0 };
17
- map.set(key, entry);
18
- }
19
- entry.refCount++;
20
- try {
21
- return await entry.mutex.runExclusive(task);
22
- }
23
- finally {
24
- entry.refCount--;
25
- // only delete it if this is still the current entry
26
- if (entry.refCount === 0 && map.get(key) === entry) {
27
- map.delete(key);
28
- }
29
- }
11
+ const map = new Map();
12
+ return {
13
+ async mutex(key, task) {
14
+ let entry = map.get(key);
15
+ if (!entry) {
16
+ entry = {
17
+ mutex: new AsyncMutex(),
18
+ refCount: 0
19
+ };
20
+ map.set(key, entry);
21
+ }
22
+ entry.refCount++;
23
+ try {
24
+ return await entry.mutex.runExclusive(task);
25
+ } finally {
26
+ entry.refCount--;
27
+ if (entry.refCount === 0 && map.get(key) === entry) {
28
+ map.delete(key);
30
29
  }
31
- };
30
+ }
31
+ }
32
+ };
32
33
  };
33
- //# sourceMappingURL=make-mutex.js.map