@alannxd/baileys 6.0.4 → 6.0.5

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 (234) hide show
  1. package/WAProto/GenerateStatics.sh +3 -0
  2. package/WAProto/WAProto.proto +5479 -0
  3. package/WAProto/fix-imports.js +85 -0
  4. package/WAProto/index.d.ts +14017 -0
  5. package/WAProto/index.js +201 -160
  6. package/engine-requirements.js +1 -1
  7. package/lib/Defaults/index.d.ts +37 -15
  8. package/lib/Defaults/index.js +119 -136
  9. package/lib/Signal/Group/ciphertext-message.d.ts +1 -0
  10. package/lib/Signal/Group/ciphertext-message.js +2 -5
  11. package/lib/Signal/Group/group-session-builder.d.ts +4 -3
  12. package/lib/Signal/Group/group-session-builder.js +7 -41
  13. package/lib/Signal/Group/group_cipher.d.ts +4 -4
  14. package/lib/Signal/Group/group_cipher.js +37 -51
  15. package/lib/Signal/Group/index.d.ts +12 -11
  16. package/lib/Signal/Group/index.js +12 -57
  17. package/lib/Signal/Group/keyhelper.d.ts +2 -1
  18. package/lib/Signal/Group/keyhelper.js +7 -44
  19. package/lib/Signal/Group/sender-chain-key.d.ts +3 -2
  20. package/lib/Signal/Group/sender-chain-key.js +7 -15
  21. package/lib/Signal/Group/sender-key-distribution-message.d.ts +2 -1
  22. package/lib/Signal/Group/sender-key-distribution-message.js +8 -11
  23. package/lib/Signal/Group/sender-key-message.d.ts +2 -1
  24. package/lib/Signal/Group/sender-key-message.js +9 -12
  25. package/lib/Signal/Group/sender-key-name.d.ts +1 -0
  26. package/lib/Signal/Group/sender-key-name.js +2 -5
  27. package/lib/Signal/Group/sender-key-record.d.ts +3 -2
  28. package/lib/Signal/Group/sender-key-record.js +9 -21
  29. package/lib/Signal/Group/sender-key-state.d.ts +7 -6
  30. package/lib/Signal/Group/sender-key-state.js +27 -42
  31. package/lib/Signal/Group/sender-message-key.d.ts +1 -0
  32. package/lib/Signal/Group/sender-message-key.js +4 -7
  33. package/lib/Signal/libsignal.d.ts +5 -3
  34. package/lib/Signal/libsignal.js +347 -90
  35. package/lib/Signal/lid-mapping.d.ts +23 -0
  36. package/lib/Signal/lid-mapping.js +277 -0
  37. package/lib/Socket/Client/index.d.ts +3 -3
  38. package/lib/Socket/Client/index.js +3 -19
  39. package/lib/Socket/Client/{abstract-socket-client.d.ts → types.d.ts} +4 -5
  40. package/lib/Socket/Client/types.js +11 -0
  41. package/lib/Socket/Client/{web-socket-client.d.ts → websocket.d.ts} +3 -2
  42. package/lib/Socket/Client/websocket.js +54 -0
  43. package/lib/Socket/business.d.ts +154 -108
  44. package/lib/Socket/business.js +162 -43
  45. package/lib/Socket/chats.d.ts +96 -239
  46. package/lib/Socket/chats.js +627 -427
  47. package/lib/Socket/communities.d.ts +239 -146
  48. package/lib/Socket/communities.js +90 -80
  49. package/lib/Socket/groups.d.ts +104 -57
  50. package/lib/Socket/groups.js +154 -161
  51. package/lib/Socket/index.d.ts +202 -115
  52. package/lib/Socket/index.js +11 -10
  53. package/lib/Socket/luxu.d.ts +22 -266
  54. package/lib/Socket/luxu.js +422 -465
  55. package/lib/Socket/messages-recv.d.ts +136 -84
  56. package/lib/Socket/messages-recv.js +1421 -615
  57. package/lib/Socket/messages-send.d.ts +142 -126
  58. package/lib/Socket/messages-send.js +878 -671
  59. package/lib/Socket/mex.d.ts +3 -0
  60. package/lib/Socket/mex.js +42 -0
  61. package/lib/Socket/newsletter.d.ts +121 -85
  62. package/lib/Socket/newsletter.js +147 -272
  63. package/lib/Socket/socket.d.ts +34 -19
  64. package/lib/Socket/socket.js +544 -313
  65. package/lib/Store/index.d.ts +10 -3
  66. package/lib/Store/index.js +10 -10
  67. package/lib/Store/keyed-db.d.ts +22 -0
  68. package/lib/Store/keyed-db.js +108 -0
  69. package/lib/Store/make-cache-manager-store.d.ts +17 -11
  70. package/lib/Store/make-cache-manager-store.js +43 -41
  71. package/lib/Store/make-in-memory-store.d.ts +39 -118
  72. package/lib/Store/make-in-memory-store.js +112 -341
  73. package/lib/Store/make-ordered-dictionary.d.ts +11 -10
  74. package/lib/Store/make-ordered-dictionary.js +14 -20
  75. package/lib/Store/object-repository.d.ts +10 -9
  76. package/lib/Store/object-repository.js +11 -6
  77. package/lib/Types/Auth.d.ts +19 -12
  78. package/lib/Types/Auth.js +2 -2
  79. package/lib/Types/Bussines.d.ts +25 -0
  80. package/lib/Types/Bussines.js +2 -0
  81. package/lib/Types/Call.d.ts +3 -1
  82. package/lib/Types/Call.js +2 -2
  83. package/lib/Types/Chat.d.ts +35 -13
  84. package/lib/Types/Chat.js +8 -4
  85. package/lib/Types/Contact.d.ts +8 -1
  86. package/lib/Types/Contact.js +2 -2
  87. package/lib/Types/Events.d.ts +116 -17
  88. package/lib/Types/Events.js +2 -2
  89. package/lib/Types/GroupMetadata.d.ts +21 -5
  90. package/lib/Types/GroupMetadata.js +2 -2
  91. package/lib/Types/Label.d.ts +12 -0
  92. package/lib/Types/Label.js +3 -5
  93. package/lib/Types/LabelAssociation.d.ts +1 -0
  94. package/lib/Types/LabelAssociation.js +3 -5
  95. package/lib/Types/Message.d.ts +105 -58
  96. package/lib/Types/Message.js +11 -9
  97. package/lib/Types/Mex.d.ts +141 -0
  98. package/lib/Types/Mex.js +37 -0
  99. package/lib/Types/Product.d.ts +2 -1
  100. package/lib/Types/Product.js +2 -2
  101. package/lib/Types/Signal.d.ts +32 -2
  102. package/lib/Types/Signal.js +2 -2
  103. package/lib/Types/Socket.d.ts +50 -25
  104. package/lib/Types/Socket.js +3 -2
  105. package/lib/Types/State.d.ts +72 -2
  106. package/lib/Types/State.js +56 -2
  107. package/lib/Types/USync.d.ts +3 -2
  108. package/lib/Types/USync.js +2 -2
  109. package/lib/Types/index.d.ts +22 -14
  110. package/lib/Types/index.js +15 -31
  111. package/lib/Utils/auth-utils.d.ts +12 -6
  112. package/lib/Utils/auth-utils.js +239 -143
  113. package/lib/Utils/browser-utils.d.ts +4 -0
  114. package/lib/Utils/browser-utils.js +28 -0
  115. package/lib/Utils/business.d.ts +3 -2
  116. package/lib/Utils/business.js +66 -69
  117. package/lib/Utils/chat-utils.d.ts +52 -23
  118. package/lib/Utils/chat-utils.js +396 -253
  119. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  120. package/lib/Utils/companion-reg-client-utils.js +35 -0
  121. package/lib/Utils/crypto.d.ts +18 -22
  122. package/lib/Utils/crypto.js +57 -90
  123. package/lib/Utils/decode-wa-message.d.ts +55 -8
  124. package/lib/Utils/decode-wa-message.js +203 -84
  125. package/lib/Utils/event-buffer.d.ts +9 -8
  126. package/lib/Utils/event-buffer.js +185 -77
  127. package/lib/Utils/generics.d.ts +28 -29
  128. package/lib/Utils/generics.js +180 -210
  129. package/lib/Utils/history.d.ts +18 -9
  130. package/lib/Utils/history.js +93 -55
  131. package/lib/Utils/identity-change-handler.d.ts +44 -0
  132. package/lib/Utils/identity-change-handler.js +50 -0
  133. package/lib/Utils/index.d.ts +22 -17
  134. package/lib/Utils/index.js +22 -33
  135. package/lib/Utils/link-preview.d.ts +5 -5
  136. package/lib/Utils/link-preview.js +16 -24
  137. package/lib/Utils/logger.d.ts +11 -3
  138. package/lib/Utils/logger.js +3 -7
  139. package/lib/Utils/lt-hash.d.ts +8 -12
  140. package/lib/Utils/lt-hash.js +3 -46
  141. package/lib/Utils/make-mutex.d.ts +4 -2
  142. package/lib/Utils/make-mutex.js +24 -34
  143. package/lib/Utils/message-retry-manager.d.ts +115 -0
  144. package/lib/Utils/message-retry-manager.js +265 -0
  145. package/lib/Utils/messages-media.d.ts +61 -44
  146. package/lib/Utils/messages-media.js +451 -482
  147. package/lib/Utils/messages.d.ts +32 -18
  148. package/lib/Utils/messages.js +458 -369
  149. package/lib/Utils/noise-handler.d.ts +13 -14
  150. package/lib/Utils/noise-handler.js +145 -99
  151. package/lib/Utils/offline-node-processor.d.ts +17 -0
  152. package/lib/Utils/offline-node-processor.js +40 -0
  153. package/lib/Utils/pre-key-manager.d.ts +28 -0
  154. package/lib/Utils/pre-key-manager.js +106 -0
  155. package/lib/Utils/process-message.d.ts +31 -12
  156. package/lib/Utils/process-message.js +459 -150
  157. package/lib/Utils/reporting-utils.d.ts +11 -0
  158. package/lib/Utils/reporting-utils.js +258 -0
  159. package/lib/Utils/signal.d.ts +20 -5
  160. package/lib/Utils/signal.js +120 -72
  161. package/lib/Utils/stanza-ack.d.ts +11 -0
  162. package/lib/Utils/stanza-ack.js +38 -0
  163. package/lib/Utils/sync-action-utils.d.ts +19 -0
  164. package/lib/Utils/sync-action-utils.js +49 -0
  165. package/lib/Utils/tc-token-utils.d.ts +37 -0
  166. package/lib/Utils/tc-token-utils.js +163 -0
  167. package/lib/Utils/use-multi-file-auth-state.d.ts +2 -2
  168. package/lib/Utils/use-multi-file-auth-state.js +29 -27
  169. package/lib/Utils/validate-connection.d.ts +7 -7
  170. package/lib/Utils/validate-connection.js +73 -99
  171. package/lib/WABinary/constants.d.ts +25 -27
  172. package/lib/WABinary/constants.js +1281 -20
  173. package/lib/WABinary/decode.d.ts +5 -5
  174. package/lib/WABinary/decode.js +52 -42
  175. package/lib/WABinary/encode.d.ts +3 -3
  176. package/lib/WABinary/encode.js +110 -155
  177. package/lib/WABinary/generic-utils.d.ts +8 -7
  178. package/lib/WABinary/generic-utils.js +48 -49
  179. package/lib/WABinary/index.d.ts +6 -5
  180. package/lib/WABinary/index.js +6 -21
  181. package/lib/WABinary/jid-utils.d.ts +25 -8
  182. package/lib/WABinary/jid-utils.js +74 -40
  183. package/lib/WABinary/types.d.ts +2 -1
  184. package/lib/WABinary/types.js +2 -2
  185. package/lib/WAM/BinaryInfo.d.ts +3 -11
  186. package/lib/WAM/BinaryInfo.js +2 -5
  187. package/lib/WAM/constants.d.ts +5 -3
  188. package/lib/WAM/constants.js +19071 -11568
  189. package/lib/WAM/encode.d.ts +3 -3
  190. package/lib/WAM/encode.js +17 -22
  191. package/lib/WAM/index.d.ts +4 -3
  192. package/lib/WAM/index.js +4 -19
  193. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +4 -3
  194. package/lib/WAUSync/Protocols/USyncContactProtocol.js +33 -13
  195. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +3 -2
  196. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +11 -14
  197. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +3 -2
  198. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +9 -12
  199. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +3 -2
  200. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +9 -13
  201. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  202. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  203. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +4 -3
  204. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +20 -22
  205. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +5 -3
  206. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +13 -8
  207. package/lib/WAUSync/Protocols/index.d.ts +6 -4
  208. package/lib/WAUSync/Protocols/index.js +6 -20
  209. package/lib/WAUSync/USyncQuery.d.ts +6 -4
  210. package/lib/WAUSync/USyncQuery.js +44 -35
  211. package/lib/WAUSync/USyncUser.d.ts +10 -5
  212. package/lib/WAUSync/USyncUser.js +10 -5
  213. package/lib/WAUSync/index.d.ts +4 -0
  214. package/lib/WAUSync/index.js +4 -19
  215. package/lib/index.d.ts +10 -9
  216. package/lib/index.js +12 -34
  217. package/package.json +84 -51
  218. package/WAProto/fix-import.js +0 -29
  219. package/lib/Defaults/baileys-version.json +0 -3
  220. package/lib/Defaults/phonenumber-mcc.json +0 -223
  221. package/lib/Signal/Group/queue-job.d.ts +0 -1
  222. package/lib/Signal/Group/queue-job.js +0 -57
  223. package/lib/Socket/Client/abstract-socket-client.js +0 -13
  224. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  225. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  226. package/lib/Socket/Client/web-socket-client.js +0 -62
  227. package/lib/Socket/registration.d.ts +0 -267
  228. package/lib/Socket/registration.js +0 -166
  229. package/lib/Socket/usync.d.ts +0 -36
  230. package/lib/Socket/usync.js +0 -70
  231. package/lib/Types/Newsletter.d.ts +0 -103
  232. package/lib/Types/Newsletter.js +0 -38
  233. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  234. package/lib/Utils/baileys-event-stream.js +0 -63
@@ -1,43 +1,42 @@
1
- const WAProto = require('../../WAProto').proto;
2
- const Utils_1 = require('../Utils');
3
- const crypto = require('crypto');
1
+ import { proto } from '../../WAProto/index.js'
2
+ import * as Utils from '../Utils/index.js'
3
+ import crypto from 'crypto'
4
4
 
5
- class imup {
6
- constructor(utils, waUploadToServer, relayMessageFn, authState) {
7
- this.utils = utils;
5
+ export default class imup {
6
+ constructor(utils, waUploadToServer, relayMessageFn) {
7
+ this.utils = utils
8
8
  this.relayMessage = relayMessageFn
9
- this.waUploadToServer = waUploadToServer;
10
- this.authState = authState;
9
+ this.waUploadToServer = waUploadToServer
11
10
  }
12
11
 
13
12
  detectType(content) {
14
- if (content.requestPaymentMessage) return 'PAYMENT';
15
- if (content.productMessage) return 'PRODUCT';
16
- if (content.interactiveMessage) return 'INTERACTIVE';
17
- if (content.albumMessage) return 'ALBUM';
18
- if (content.eventMessage) return 'EVENT';
19
- if (content.pollResultMessage) return 'POLL_RESULT';
20
- if (content.orderMessage) return 'ORDER';
21
- if (content.groupStatus) return 'GROUP_STATUS';
22
- if (content.groupLabel) return 'GROUP_LABEL';
23
- return null;
13
+ if (content.requestPaymentMessage) return 'PAYMENT'
14
+ if (content.productMessage) return 'PRODUCT'
15
+ if (content.interactiveMessage) return 'INTERACTIVE'
16
+ if (content.albumMessage) return 'ALBUM'
17
+ if (content.eventMessage) return 'EVENT'
18
+ if (content.pollResultMessage) return 'POLL_RESULT'
19
+ if (content.orderMessage) return 'ORDER'
20
+ if (content.groupStatus) return 'GROUP_STATUS'
21
+ if (content.groupLabel) return 'GROUP_LABEL'
22
+ return null
24
23
  }
25
24
 
26
25
  async handlePayment(content, quoted) {
27
- const data = content.requestPaymentMessage;
28
- let notes = {};
26
+ const data = content.requestPaymentMessage
27
+ let notes = {}
29
28
 
30
29
  if (data.sticker?.stickerMessage) {
31
30
  notes = {
32
31
  stickerMessage: {
33
- ...data.sticker.stickerMessage,
32
+ ...data.sticker.stickerMessage,
34
33
  contextInfo: {
35
34
  stanzaId: quoted?.key?.id,
36
35
  participant: quoted?.key?.participant || content.sender,
37
36
  quotedMessage: quoted?.message
38
37
  }
39
38
  }
40
- };
39
+ }
41
40
  } else if (data.note) {
42
41
  notes = {
43
42
  extendedTextMessage: {
@@ -48,494 +47,452 @@ class imup {
48
47
  quotedMessage: quoted?.message
49
48
  }
50
49
  }
51
- };
50
+ }
52
51
  }
53
52
 
54
53
  return {
55
- requestPaymentMessage: WAProto.Message.RequestPaymentMessage.fromObject({
54
+ requestPaymentMessage: proto.Message.RequestPaymentMessage.fromObject({
56
55
  expiryTimestamp: data.expiry || 0,
57
56
  amount1000: data.amount || 0,
58
57
  currencyCodeIso4217: data.currency || "IDR",
59
58
  requestFrom: data.from || "0@s.whatsapp.net",
60
59
  noteMessage: notes,
61
- background: data.background ?? {
60
+ background: data.background?? {
62
61
  id: "DEFAULT",
63
62
  placeholderArgb: 0xFFF0F0F0
64
63
  }
65
64
  })
66
- };
65
+ }
67
66
  }
68
-
69
- async handleProduct(content, jid, quoted) {
70
- const {
71
- title,
72
- description,
73
- thumbnail,
74
- productId,
75
- retailerId,
76
- url,
77
- body = "",
78
- footer = "",
79
- buttons = [],
80
- priceAmount1000 = null,
81
- currencyCode = "IDR"
82
- } = content.productMessage;
83
-
84
- let productImage;
85
-
86
- if (Buffer.isBuffer(thumbnail)) {
87
- const { imageMessage } = await this.utils.generateWAMessageContent(
88
- { image: thumbnail },
89
- { upload: this.waUploadToServer }
90
- );
91
- productImage = imageMessage;
92
- } else if (typeof thumbnail === 'object' && thumbnail.url) {
93
- const { imageMessage } = await this.utils.generateWAMessageContent(
94
- { image: { url: thumbnail.url }},
95
- { upload: this.waUploadToServer }
96
- );
97
- productImage = imageMessage;
98
- }
99
-
100
- return {
101
- viewOnceMessage: {
102
- message: {
103
- interactiveMessage: {
104
- body: { text: body },
105
- footer: { text: footer },
106
- header: {
107
- title,
108
- hasMediaAttachment: true,
109
- productMessage: {
110
- product: {
111
- productImage,
112
- productId,
113
- title,
114
- description,
115
- currencyCode,
116
- priceAmount1000,
117
- retailerId,
118
- url,
119
- productImageCount: 1
120
- },
121
- businessOwnerJid: "0@s.whatsapp.net"
122
- }
123
- },
124
- nativeFlowMessage: { buttons }
125
- }
67
+
68
+ async handleProduct(content, jid, quoted) {
69
+ const {
70
+ title,
71
+ description,
72
+ thumbnail,
73
+ productId,
74
+ retailerId,
75
+ url,
76
+ body = "",
77
+ footer = "",
78
+ buttons = [],
79
+ priceAmount1000 = null,
80
+ currencyCode = "IDR"
81
+ } = content.productMessage
82
+
83
+ let productImage
84
+
85
+ if (Buffer.isBuffer(thumbnail)) {
86
+ const { imageMessage } = await this.utils.generateWAMessageContent(
87
+ { image: thumbnail },
88
+ { upload: this.waUploadToServer }
89
+ )
90
+ productImage = imageMessage
91
+ } else if (typeof thumbnail === 'object' && thumbnail.url) {
92
+ const { imageMessage } = await this.utils.generateWAMessageContent(
93
+ { image: { url: thumbnail.url } },
94
+ { upload: this.waUploadToServer }
95
+ )
96
+ productImage = imageMessage
97
+ }
98
+
99
+ return {
100
+ viewOnceMessage: {
101
+ message: {
102
+ interactiveMessage: {
103
+ body: { text: body },
104
+ footer: { text: footer },
105
+ header: {
106
+ title,
107
+ hasMediaAttachment: true,
108
+ productMessage: {
109
+ product: {
110
+ productImage,
111
+ productId,
112
+ title,
113
+ description,
114
+ currencyCode,
115
+ priceAmount1000,
116
+ retailerId,
117
+ url,
118
+ productImageCount: 1
119
+ },
120
+ businessOwnerJid: "0@s.whatsapp.net"
121
+ }
122
+ },
123
+ nativeFlowMessage: { buttons }
126
124
  }
127
125
  }
128
- };
126
+ }
129
127
  }
130
-
131
- async handleInteractive(content, jid, quoted) {
132
- const {
133
- title,
134
- footer,
135
- thumbnail,
136
- image,
137
- video,
138
- document,
139
- mimetype,
140
- fileName,
141
- jpegThumbnail,
142
- contextInfo,
143
- externalAdReply,
144
- buttons = [],
145
- nativeFlowMessage
146
- } = content.interactiveMessage;
147
-
148
- let media = null;
149
- let mediaType = null;
150
-
151
- if (thumbnail) {
152
- media = await this.utils.prepareWAMessageMedia(
153
- { image: { url: thumbnail } },
154
- { upload: this.waUploadToServer }
155
- );
156
- mediaType = 'image';
157
- } else if (image) {
158
- if (typeof image === 'object' && image.url) {
159
- media = await this.utils.prepareWAMessageMedia(
160
- { image: { url: image.url } },
161
- { upload: this.waUploadToServer }
162
- );
163
- } else {
164
- media = await this.utils.prepareWAMessageMedia(
165
- { image: image },
166
- { upload: this.waUploadToServer }
167
- );
168
- }
169
- mediaType = 'image';
170
- } else if (video) {
171
- if (typeof video === 'object' && video.url) {
172
- media = await this.utils.prepareWAMessageMedia(
173
- { video: { url: video.url } },
174
- { upload: this.waUploadToServer }
175
- );
176
- } else {
177
- media = await this.utils.prepareWAMessageMedia(
178
- { video: video },
179
- { upload: this.waUploadToServer }
180
- );
128
+ }
129
+
130
+ async handleInteractive(content, jid, quoted) {
131
+ const {
132
+ title,
133
+ body,
134
+ footer,
135
+ thumbnail,
136
+ image,
137
+ video,
138
+ document,
139
+ mimetype,
140
+ fileName,
141
+ jpegThumbnail,
142
+ contextInfo,
143
+ externalAdReply,
144
+ buttons = [],
145
+ nativeFlowMessage
146
+ } = content.interactiveMessage
147
+
148
+ let media = null
149
+
150
+ if (thumbnail) {
151
+ media = await this.utils.prepareWAMessageMedia(
152
+ { image: { url: thumbnail } },
153
+ { upload: this.waUploadToServer }
154
+ )
155
+ } else if (image) {
156
+ media = await this.utils.prepareWAMessageMedia(
157
+ { image: typeof image === 'object'? image : { url: image } },
158
+ { upload: this.waUploadToServer }
159
+ )
160
+ } else if (video) {
161
+ media = await this.utils.prepareWAMessageMedia(
162
+ { video: typeof video === 'object'? video : { url: video } },
163
+ { upload: this.waUploadToServer }
164
+ )
165
+ } else if (document) {
166
+ let documentPayload = { document: document }
167
+ if (jpegThumbnail) documentPayload.jpegThumbnail = jpegThumbnail
168
+ if (mimetype) documentPayload.mimetype = mimetype
169
+ if (fileName) documentPayload.fileName = fileName
170
+
171
+ media = await this.utils.prepareWAMessageMedia(
172
+ documentPayload,
173
+ { upload: this.waUploadToServer }
174
+ )
175
+ }
176
+
177
+ let flowButtons = []
178
+ if (buttons && buttons.length > 0) {
179
+ flowButtons = buttons.map((btn, i) => {
180
+ if (btn.name && btn.buttonParamsJson) return btn
181
+ return {
182
+ name: btn.name || 'quick_reply',
183
+ buttonParamsJson: JSON.stringify({
184
+ display_text: btn.displayText || btn.text || `Button ${i+1}`,
185
+ id: btn.id || btn.buttonId || `${Date.now()}_${i}`
186
+ })
181
187
  }
182
- mediaType = 'video';
183
- } else if (document) {
184
- let documentPayload = { document: document };
185
-
186
- if (jpegThumbnail) {
187
- if (typeof jpegThumbnail === 'object' && jpegThumbnail.url) {
188
- documentPayload.jpegThumbnail = { url: jpegThumbnail.url };
189
- } else {
190
- documentPayload.jpegThumbnail = jpegThumbnail;
188
+ })
189
+ }
190
+
191
+ const interactiveMsg = {
192
+ body: { text: body || "" },
193
+ footer: { text: footer || "" },
194
+ header: {
195
+ title: title || "",
196
+ hasMediaAttachment: !!media,
197
+ ...(media || {})
198
+ },
199
+ nativeFlowMessage: {
200
+ buttons: flowButtons,
201
+ messageParamsJson: nativeFlowMessage?.messageParamsJson || "{}"
202
+ }
203
+ }
204
+
205
+ if (contextInfo || externalAdReply) {
206
+ interactiveMsg.contextInfo = {
207
+ ...(contextInfo || {}),
208
+ ...(externalAdReply? {
209
+ externalAdReply: {
210
+ title: externalAdReply.title || "",
211
+ body: externalAdReply.body || "",
212
+ mediaType: externalAdReply.mediaType || 1,
213
+ thumbnailUrl: externalAdReply.thumbnailUrl || "",
214
+ mediaUrl: externalAdReply.mediaUrl || "",
215
+ sourceUrl: externalAdReply.sourceUrl || "",
216
+ showAdAttribution: externalAdReply.showAdAttribution || false,
217
+ renderLargerThumbnail: externalAdReply.renderLargerThumbnail || false
191
218
  }
192
- }
193
-
194
- media = await this.utils.prepareWAMessageMedia(
195
- documentPayload,
196
- { upload: this.waUploadToServer }
197
- );
198
-
199
- if (fileName) {
200
- media.documentMessage.fileName = fileName;
201
- }
202
- if (mimetype) {
203
- media.documentMessage.mimetype = mimetype;
204
- }
205
- mediaType = 'document';
219
+ } : {})
206
220
  }
207
-
208
- let interactiveMessage = {
209
- body: { text: title || "" },
210
- footer: { text: footer || "" }
211
- };
212
-
213
- if (buttons && buttons.length > 0) {
214
- interactiveMessage.nativeFlowMessage = {
215
- buttons: buttons
216
- };
217
-
218
- if (nativeFlowMessage) {
219
- interactiveMessage.nativeFlowMessage = {
220
- ...interactiveMessage.nativeFlowMessage,
221
- ...nativeFlowMessage
222
- };
221
+ }
222
+
223
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
224
+ viewOnceMessage: {
225
+ message: {
226
+ messageContextInfo: {
227
+ deviceListMetadata: {},
228
+ deviceListMetadataVersion: 2,
229
+ messageSecret: crypto.randomBytes(32)
230
+ },
231
+ interactiveMessage: interactiveMsg
223
232
  }
224
- } else if (nativeFlowMessage) {
225
- interactiveMessage.nativeFlowMessage = nativeFlowMessage;
226
- }
227
-
228
- if (media) {
229
- interactiveMessage.header = {
230
- title: "",
231
- hasMediaAttachment: true,
232
- ...media
233
- };
234
- } else {
235
- interactiveMessage.header = {
236
- title: "",
237
- hasMediaAttachment: false
238
- };
239
233
  }
234
+ }, { quoted })
235
+
236
+ await this.relayMessage(jid, msg.message, { messageId: msg.key.id })
237
+ return msg
238
+ }
240
239
 
241
- let finalContextInfo = {};
242
-
243
- if (contextInfo) {
244
- finalContextInfo = {
245
- mentionedJid: contextInfo.mentionedJid || [],
246
- forwardingScore: contextInfo.forwardingScore || 0,
247
- isForwarded: contextInfo.isForwarded || false,
248
- ...contextInfo
249
- };
240
+ async handleAlbum(content, jid, quoted) {
241
+ const array = content.albumMessage
242
+ const album = await this.utils.generateWAMessageFromContent(jid, {
243
+ messageContextInfo: {
244
+ messageSecret: crypto.randomBytes(32),
245
+ },
246
+ albumMessage: {
247
+ expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
248
+ expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
249
+ },
250
+ }, {
251
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
252
+ quoted,
253
+ upload: this.waUploadToServer
254
+ })
255
+
256
+ await this.relayMessage(jid, album.message, {
257
+ messageId: album.key.id,
258
+ })
259
+
260
+ for (let content of array) {
261
+ const img = await this.utils.generateWAMessage(jid, content, {
262
+ upload: this.waUploadToServer,
263
+ })
264
+
265
+ img.message.messageContextInfo = {
266
+ messageSecret: crypto.randomBytes(32),
267
+ messageAssociation: {
268
+ associationType: 1,
269
+ parentMessageKey: album.key,
270
+ },
271
+ participant: "0@s.whatsapp.net",
272
+ remoteJid: "status@broadcast",
273
+ forwardingScore: 99999,
274
+ isForwarded: true,
275
+ mentionedJid: [jid],
276
+ starred: true,
277
+ labels: ["Y", "Important"],
278
+ isHighlighted: true,
279
+ businessMessageForwardInfo: {
280
+ businessOwnerJid: jid,
281
+ },
282
+ dataSharingContext: {
283
+ showMmDisclosure: true,
284
+ },
250
285
  }
251
286
 
252
- if (externalAdReply) {
253
- finalContextInfo.externalAdReply = {
254
- title: externalAdReply.title || "",
255
- body: externalAdReply.body || "",
256
- mediaType: externalAdReply.mediaType || 1,
257
- thumbnailUrl: externalAdReply.thumbnailUrl || "",
258
- mediaUrl: externalAdReply.mediaUrl || "",
259
- sourceUrl: externalAdReply.sourceUrl || "",
260
- showAdAttribution: externalAdReply.showAdAttribution || false,
261
- renderLargerThumbnail: externalAdReply.renderLargerThumbnail || false,
262
- ...externalAdReply
263
- };
287
+ img.message.forwardedNewsletterMessageInfo = {
288
+ newsletterJid: "0@newsletter",
289
+ serverMessageId: 1,
290
+ newsletterName: `WhatsApp`,
291
+ contentType: 1,
292
+ timestamp: new Date().toISOString(),
293
+ senderName: "AlannXD",
294
+ contentType: "UPDATE_CARD",
295
+ priority: "high",
296
+ status: "sent",
264
297
  }
265
-
266
- if (Object.keys(finalContextInfo).length > 0) {
267
- interactiveMessage.contextInfo = finalContextInfo;
298
+
299
+ img.message.disappearingMode = {
300
+ initiator: 3,
301
+ trigger: 4,
302
+ initiatorDeviceJid: jid,
303
+ initiatedByExternalService: true,
304
+ initiatedByUserDevice: true,
305
+ initiatedBySystem: true,
306
+ initiatedByServer: true,
307
+ initiatedByAdmin: true,
308
+ initiatedByUser: true,
309
+ initiatedByApp: true,
310
+ initiatedByBot: true,
311
+ initiatedByMe: true,
268
312
  }
269
313
 
270
- return {
271
- interactiveMessage: interactiveMessage
272
- };
273
- }
274
-
275
- async handleAlbum(content, jid, quoted) {
276
- const array = content.albumMessage;
277
- const album = await this.utils.generateWAMessageFromContent(jid, {
278
- messageContextInfo: {
279
- messageSecret: crypto.randomBytes(32),
280
- },
281
- albumMessage: {
282
- expectedImageCount: array.filter((a) => a.hasOwnProperty("image")).length,
283
- expectedVideoCount: array.filter((a) => a.hasOwnProperty("video")).length,
284
- },
285
- }, {
286
- userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
287
- quoted,
288
- upload: this.waUploadToServer
289
- });
290
-
291
- await this.relayMessage(jid, album.message, {
292
- messageId: album.key.id,
293
- });
294
-
295
- for (let content of array) {
296
- const img = await this.utils.generateWAMessage(jid, content, {
297
- upload: this.waUploadToServer,
298
- });
299
-
300
- img.message.messageContextInfo = {
301
- messageSecret: crypto.randomBytes(32),
302
- messageAssociation: {
303
- associationType: 1,
304
- parentMessageKey: album.key,
305
- },
306
- participant: "0@s.whatsapp.net",
307
- remoteJid: "status@broadcast",
308
- forwardingScore: 99999,
309
- isForwarded: true,
310
- mentionedJid: [jid],
311
- starred: true,
312
- labels: ["Y", "Important"],
313
- isHighlighted: true,
314
- businessMessageForwardInfo: {
315
- businessOwnerJid: jid,
314
+ await this.relayMessage(jid, img.message, {
315
+ messageId: img.key.id,
316
+ quoted: {
317
+ key: {
318
+ remoteJid: album.key.remoteJid,
319
+ id: album.key.id,
320
+ fromMe: true,
321
+ participant: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
316
322
  },
317
- dataSharingContext: {
318
- showMmDisclosure: true,
323
+ message: album.message,
324
+ },
325
+ })
326
+ }
327
+ return album
328
+ }
329
+
330
+ async handleEvent(content, jid, quoted) {
331
+ const eventData = content.eventMessage
332
+
333
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
334
+ viewOnceMessage: {
335
+ message: {
336
+ messageContextInfo: {
337
+ deviceListMetadata: {},
338
+ deviceListMetadataVersion: 2,
339
+ messageSecret: crypto.randomBytes(32),
340
+ supportPayload: JSON.stringify({
341
+ version: 2,
342
+ is_ai_message: true,
343
+ should_show_system_message: true,
344
+ ticket_id: crypto.randomBytes(16).toString('hex')
345
+ })
319
346
  },
320
- };
321
-
322
- img.message.forwardedNewsletterMessageInfo = {
323
- newsletterJid: "0@newsletter",
324
- serverMessageId: 1,
325
- newsletterName: `WhatsApp`,
326
- contentType: 1,
327
- timestamp: new Date().toISOString(),
328
- senderName: "AlannXD",
329
- contentType: "UPDATE_CARD",
330
- priority: "high",
331
- status: "sent",
332
- };
333
-
334
- img.message.disappearingMode = {
335
- initiator: 3,
336
- trigger: 4,
337
- initiatorDeviceJid: jid,
338
- initiatedByExternalService: true,
339
- initiatedByUserDevice: true,
340
- initiatedBySystem: true,
341
- initiatedByServer: true,
342
- initiatedByAdmin: true,
343
- initiatedByUser: true,
344
- initiatedByApp: true,
345
- initiatedByBot: true,
346
- initiatedByMe: true,
347
- };
348
-
349
- await this.relayMessage(jid, img.message, {
350
- messageId: img.key.id,
351
- quoted: {
352
- key: {
353
- remoteJid: album.key.remoteJid,
354
- id: album.key.id,
355
- fromMe: true,
356
- participant: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
347
+ eventMessage: {
348
+ contextInfo: {
349
+ mentionedJid: [jid],
350
+ participant: jid,
351
+ remoteJid: "status@broadcast",
352
+ forwardedNewsletterMessageInfo: {
353
+ newsletterName: "↯ ᴀʟᴀɴɴxᴅ | ʜᴏʟᴏᴡ 徴",
354
+ newsletterJid: "120363387182851100@newsletter",
355
+ serverMessageId: 1
356
+ }
357
357
  },
358
- message: album.message,
359
- },
360
- });
361
- }
362
- return album;
363
- }
364
-
365
- async handleEvent(content, jid, quoted) {
366
- const eventData = content.eventMessage;
367
-
368
- const msg = await this.utils.generateWAMessageFromContent(jid, {
369
- viewOnceMessage: {
370
- message: {
371
- messageContextInfo: {
372
- deviceListMetadata: {},
373
- deviceListMetadataVersion: 2,
374
- messageSecret: crypto.randomBytes(32),
375
- supportPayload: JSON.stringify({
376
- version: 2,
377
- is_ai_message: true,
378
- should_show_system_message: true,
379
- ticket_id: crypto.randomBytes(16).toString('hex')
380
- })
358
+ isCanceled: eventData.isCanceled || false,
359
+ name: eventData.name,
360
+ description: eventData.description,
361
+ location: eventData.location || {
362
+ degreesLatitude: 0,
363
+ degreesLongitude: 0,
364
+ name: "Location"
381
365
  },
382
- eventMessage: {
383
- contextInfo: {
384
- mentionedJid: [jid],
385
- participant: jid,
386
- remoteJid: "status@broadcast",
387
- forwardedNewsletterMessageInfo: {
388
- newsletterName: "↯ ᴀʟᴀɴɴxᴅ | ʜᴏʟᴏᴡ 徴",
389
- newsletterJid: "120363387182851100@newsletter",
390
- serverMessageId: 1
391
- }
392
- },
393
- isCanceled: eventData.isCanceled || false,
394
- name: eventData.name,
395
- description: eventData.description,
396
- location: eventData.location || {
397
- degreesLatitude: 0,
398
- degreesLongitude: 0,
399
- name: "Location"
400
- },
401
- joinLink: eventData.joinLink || '',
402
- startTime: typeof eventData.startTime === 'string' ? parseInt(eventData.startTime) : eventData.startTime || Date.now(),
403
- endTime: typeof eventData.endTime === 'string' ? parseInt(eventData.endTime) : eventData.endTime || Date.now() + 3600000,
404
- extraGuestsAllowed: eventData.extraGuestsAllowed !== false
405
- }
366
+ joinLink: eventData.joinLink || '',
367
+ startTime: typeof eventData.startTime === 'string'? parseInt(eventData.startTime) : eventData.startTime || Date.now(),
368
+ endTime: typeof eventData.endTime === 'string'? parseInt(eventData.endTime) : eventData.endTime || Date.now() + 3600000,
369
+ extraGuestsAllowed: eventData.extraGuestsAllowed!== false
406
370
  }
407
371
  }
408
- }, { quoted });
409
-
410
- await this.relayMessage(jid, msg.message, {
411
- messageId: msg.key.id
412
- });
413
- return msg;
414
- }
415
-
416
- async handlePollResult(content, jid, quoted) {
417
- const pollData = content.pollResultMessage;
418
- const msg = await this.utils.generateWAMessageFromContent(jid, {
419
- pollResultSnapshotMessage: {
420
- name: pollData.name,
421
- pollVotes: pollData.pollVotes.map(vote => ({
422
- optionName: vote.optionName,
423
- optionVoteCount: typeof vote.optionVoteCount === 'number'
424
- ? vote.optionVoteCount.toString()
372
+ }
373
+ }, { quoted })
374
+
375
+ await this.relayMessage(jid, msg.message, {
376
+ messageId: msg.key.id
377
+ })
378
+ return msg
379
+ }
380
+
381
+ async handlePollResult(content, jid, quoted) {
382
+ const pollData = content.pollResultMessage
383
+ const msg = await this.utils.generateWAMessageFromContent(jid, {
384
+ pollResultSnapshotMessage: {
385
+ name: pollData.name,
386
+ pollVotes: pollData.pollVotes.map(vote => ({
387
+ optionName: vote.optionName,
388
+ optionVoteCount: typeof vote.optionVoteCount === 'number'
389
+ ? vote.optionVoteCount.toString()
425
390
  : vote.optionVoteCount
426
- })),
427
- contextInfo: {
428
- isForwarded: true,
429
- forwardingScore: 1,
430
- forwardedNewsletterMessageInfo: {
431
- newsletterName: pollData.newsletter.newsletterName || "120363421367985094@newsletter",
432
- newsletterJid: pollData.newsletter.newsletterJid || "Newsletter",
433
- serverMessageId: 1000,
434
- contentType: "UPDATE"
435
- }
391
+ })),
392
+ contextInfo: {
393
+ isForwarded: true,
394
+ forwardingScore: 1,
395
+ forwardedNewsletterMessageInfo: {
396
+ newsletterName: pollData.newsletter.newsletterName || "120363421367985094@newsletter",
397
+ newsletterJid: pollData.newsletter.newsletterJid || "Newsletter",
398
+ serverMessageId: 1000,
399
+ contentType: "UPDATE"
436
400
  }
437
401
  }
438
- }, {
439
- userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
440
- quoted
441
- });
442
-
443
- await this.relayMessage(jid, msg.message, {
444
- messageId: msg.key.id
445
- });
446
-
447
- return msg;
448
- }
449
-
450
- async handleOrderMessage(content, jid, quoted) {
451
- const orderData = content.orderMessage;
452
-
453
- const Haha = await this.utils.generateWAMessageFromContent(jid, {
454
- orderMessage: {
455
- orderId: "ALANNXD25022008",
456
- thumbnail: orderData.thumbnail || null,
457
- itemCount: orderData.itemCount || 0,
458
- status: "ACCEPTED",
459
- surface: "CATALOG",
460
- message: orderData.message,
461
- orderTitle: orderData.orderTitle,
462
- sellerJid: "0@whatsapp.net",
463
- token: "ALANNXD_EXAMPLE_TOKEN",
464
- totalAmount1000: orderData.totalAmount1000 || 0,
465
- totalCurrencyCode: orderData.totalCurrencyCode || "IDR",
466
- messageVersion: 2
467
- }
468
- }, { quoted:quoted });
402
+ }
403
+ }, {
404
+ userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
405
+ quoted
406
+ })
469
407
 
470
- await this.relayMessage(jid, Haha.message, {});
471
- return Haha;
472
- }
473
-
474
- async handleGroupStory(content, jid, quoted) {
475
- const storyData = content.groupStatus;
476
- let messageContent;
477
-
478
- if (storyData.message) {
479
- messageContent = storyData;
480
- } else {
481
- if (typeof this.utils?.generateWAMessageContent === "function") {
482
- messageContent = await this.utils.generateWAMessageContent(storyData, {
483
- upload: this.waUploadToServer
484
- });
485
- } else if (typeof this.utils?.generateWAMessageContent === "function") {
408
+ await this.relayMessage(jid, msg.message, {
409
+ messageId: msg.key.id
410
+ })
411
+
412
+ return msg
413
+ }
414
+
415
+ async handleOrderMessage(content, jid, quoted) {
416
+ const orderData = content.orderMessage
417
+
418
+ const Haha = await this.utils.generateWAMessageFromContent(jid, {
419
+ orderMessage: {
420
+ orderId: "ALANNXDS25022008",
421
+ thumbnail: orderData.thumbnail || null,
422
+ itemCount: orderData.itemCount || 0,
423
+ status: "ACCEPTED",
424
+ surface: "CATALOG",
425
+ message: orderData.message,
426
+ orderTitle: orderData.orderTitle,
427
+ sellerJid: "0@whatsapp.net",
428
+ token: "ALANNXDS_EXAMPLE_TOKEN",
429
+ totalAmount1000: orderData.totalAmount1000 || 0,
430
+ totalCurrencyCode: orderData.totalCurrencyCode || "IDR",
431
+ messageVersion: 2
432
+ }
433
+ }, { quoted: quoted })
434
+
435
+ await this.relayMessage(jid, Haha.message, {})
436
+ return Haha
437
+ }
438
+
439
+ async handleGroupStory(content, jid, quoted) {
440
+ const storyData = content.groupStatus
441
+ let messageContent
442
+
443
+ if (storyData.message) {
444
+ messageContent = storyData
445
+ } else {
446
+ if (typeof this.utils?.generateWAMessageContent === "function") {
486
447
  messageContent = await this.utils.generateWAMessageContent(storyData, {
487
- upload: this.waUploadToServer
488
- });
489
- } else if (typeof this.utils?.prepareMessageContent === "function") {
490
- messageContent = await this.utils.prepareMessageContent(storyData, {
491
448
  upload: this.waUploadToServer
492
- });
493
- } else {
494
- messageContent = await Utils_1.generateWAMessageContent(storyData, {
495
- upload: this.waUploadToServer
496
- });
497
- }
449
+ })
450
+ } else {
451
+ messageContent = await Utils.generateWAMessageContent(storyData, {
452
+ upload: this.waUploadToServer
453
+ })
498
454
  }
455
+ }
499
456
 
500
- let msg = {
501
- message: {
457
+ let msg = {
458
+ message: {
502
459
  groupStatusMessageV2: {
503
- message: messageContent.message || messageContent
460
+ message: messageContent.message || messageContent
504
461
  }
505
- }
506
- };
462
+ }
463
+ }
464
+
465
+ return await this.relayMessage(jid, msg.message, {
466
+ messageId: this.utils.generateMessageID()
467
+ })
468
+ }
507
469
 
508
- return await this.relayMessage(jid, msg.message, {
509
- messageId: this.utils.generateMessageID()
510
- });
470
+ async handleGbLabel(content, jid) {
471
+ const x = content.groupLabel
472
+ if (!jid.endsWith('@g.us')) {
473
+ throw new Error('group required!')
511
474
  }
512
- async handleGbLabel(content, jid) {
513
- const x = content.groupLabel;
514
- if (!jid.endsWith('@g.us')) {
515
- throw new Error('group required!')
475
+
476
+ const msg = this.utils.generateWAMessageFromContent(jid, {
477
+ protocolMessage: {
478
+ type: "GROUP_MEMBER_LABEL_CHANGE",
479
+ memberLabel: {
480
+ label: x.labelText.slice(0, 30)
481
+ }
516
482
  }
517
-
518
- const msg = this.utils.generateWAMessageFromContent(jid, {
519
- protocolMessage: {
520
- type: "GROUP_MEMBER_LABEL_CHANGE",
521
- memberLabel: {
522
- label: x.labelText.slice(0, 30)
523
- }
483
+ }, {})
484
+
485
+ await this.relayMessage(jid, msg.message, {
486
+ additionalNodes: [
487
+ {
488
+ tag: 'meta',
489
+ attrs: {
490
+ tag_reason: 'user_update',
491
+ appdata: 'member_tag'
492
+ },
493
+ content: undefined
524
494
  }
525
- }, {});
526
- await this.relayMessage(jid, msg.message, {
527
- additionalNodes: [
528
- {
529
- tag: 'meta',
530
- attrs: {
531
- tag_reason: 'user_update',
532
- appdata: 'member_tag'
533
- },
534
- content: undefined
535
- }
536
- ]
537
- })
538
- }
495
+ ]
496
+ })
539
497
  }
540
-
541
- module.exports = imup;
498
+ }