@alannxd/baileys 6.0.5 → 6.0.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 (234) hide show
  1. package/WAProto/fix-import.js +29 -0
  2. package/WAProto/index.js +160 -201
  3. package/engine-requirements.js +1 -1
  4. package/lib/Defaults/baileys-version.json +3 -0
  5. package/lib/Defaults/index.d.ts +15 -37
  6. package/lib/Defaults/index.js +136 -119
  7. package/lib/Defaults/phonenumber-mcc.json +223 -0
  8. package/lib/Signal/Group/ciphertext-message.d.ts +0 -1
  9. package/lib/Signal/Group/ciphertext-message.js +5 -2
  10. package/lib/Signal/Group/group-session-builder.d.ts +3 -4
  11. package/lib/Signal/Group/group-session-builder.js +41 -7
  12. package/lib/Signal/Group/group_cipher.d.ts +4 -4
  13. package/lib/Signal/Group/group_cipher.js +51 -37
  14. package/lib/Signal/Group/index.d.ts +11 -12
  15. package/lib/Signal/Group/index.js +57 -12
  16. package/lib/Signal/Group/keyhelper.d.ts +1 -2
  17. package/lib/Signal/Group/keyhelper.js +44 -7
  18. package/lib/Signal/Group/queue-job.d.ts +1 -0
  19. package/lib/Signal/Group/queue-job.js +57 -0
  20. package/lib/Signal/Group/sender-chain-key.d.ts +2 -3
  21. package/lib/Signal/Group/sender-chain-key.js +15 -7
  22. package/lib/Signal/Group/sender-key-distribution-message.d.ts +1 -2
  23. package/lib/Signal/Group/sender-key-distribution-message.js +11 -8
  24. package/lib/Signal/Group/sender-key-message.d.ts +1 -2
  25. package/lib/Signal/Group/sender-key-message.js +12 -9
  26. package/lib/Signal/Group/sender-key-name.d.ts +0 -1
  27. package/lib/Signal/Group/sender-key-name.js +5 -2
  28. package/lib/Signal/Group/sender-key-record.d.ts +2 -3
  29. package/lib/Signal/Group/sender-key-record.js +21 -9
  30. package/lib/Signal/Group/sender-key-state.d.ts +6 -7
  31. package/lib/Signal/Group/sender-key-state.js +42 -27
  32. package/lib/Signal/Group/sender-message-key.d.ts +0 -1
  33. package/lib/Signal/Group/sender-message-key.js +7 -4
  34. package/lib/Signal/libsignal.d.ts +3 -5
  35. package/lib/Signal/libsignal.js +90 -347
  36. package/lib/Socket/Client/{types.d.ts → abstract-socket-client.d.ts} +5 -4
  37. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  38. package/lib/Socket/Client/index.d.ts +3 -3
  39. package/lib/Socket/Client/index.js +19 -3
  40. package/lib/Socket/Client/mobile-socket-client.d.ts +13 -0
  41. package/lib/Socket/Client/mobile-socket-client.js +65 -0
  42. package/lib/Socket/Client/{websocket.d.ts → web-socket-client.d.ts} +2 -3
  43. package/lib/Socket/Client/web-socket-client.js +62 -0
  44. package/lib/Socket/business.d.ts +108 -154
  45. package/lib/Socket/business.js +43 -162
  46. package/lib/Socket/chats.d.ts +239 -96
  47. package/lib/Socket/chats.js +427 -627
  48. package/lib/Socket/communities.d.ts +146 -239
  49. package/lib/Socket/communities.js +80 -90
  50. package/lib/Socket/groups.d.ts +57 -104
  51. package/lib/Socket/groups.js +161 -154
  52. package/lib/Socket/index.d.ts +115 -202
  53. package/lib/Socket/index.js +10 -11
  54. package/lib/Socket/luxu.d.ts +266 -22
  55. package/lib/Socket/luxu.js +465 -422
  56. package/lib/Socket/messages-recv.d.ts +84 -136
  57. package/lib/Socket/messages-recv.js +615 -1421
  58. package/lib/Socket/messages-send.d.ts +126 -142
  59. package/lib/Socket/messages-send.js +671 -878
  60. package/lib/Socket/newsletter.d.ts +85 -121
  61. package/lib/Socket/newsletter.js +272 -147
  62. package/lib/Socket/registration.d.ts +267 -0
  63. package/lib/Socket/registration.js +166 -0
  64. package/lib/Socket/socket.d.ts +19 -34
  65. package/lib/Socket/socket.js +313 -544
  66. package/lib/Socket/usync.d.ts +36 -0
  67. package/lib/Socket/usync.js +70 -0
  68. package/lib/Store/index.d.ts +3 -10
  69. package/lib/Store/index.js +10 -10
  70. package/lib/Store/make-cache-manager-store.d.ts +11 -17
  71. package/lib/Store/make-cache-manager-store.js +41 -43
  72. package/lib/Store/make-in-memory-store.d.ts +118 -39
  73. package/lib/Store/make-in-memory-store.js +341 -112
  74. package/lib/Store/make-ordered-dictionary.d.ts +10 -11
  75. package/lib/Store/make-ordered-dictionary.js +20 -14
  76. package/lib/Store/object-repository.d.ts +9 -10
  77. package/lib/Store/object-repository.js +6 -11
  78. package/lib/Types/Auth.d.ts +12 -19
  79. package/lib/Types/Auth.js +2 -2
  80. package/lib/Types/Call.d.ts +1 -3
  81. package/lib/Types/Call.js +2 -2
  82. package/lib/Types/Chat.d.ts +13 -35
  83. package/lib/Types/Chat.js +4 -8
  84. package/lib/Types/Contact.d.ts +1 -8
  85. package/lib/Types/Contact.js +2 -2
  86. package/lib/Types/Events.d.ts +17 -116
  87. package/lib/Types/Events.js +2 -2
  88. package/lib/Types/GroupMetadata.d.ts +5 -21
  89. package/lib/Types/GroupMetadata.js +2 -2
  90. package/lib/Types/Label.d.ts +0 -12
  91. package/lib/Types/Label.js +5 -3
  92. package/lib/Types/LabelAssociation.d.ts +0 -1
  93. package/lib/Types/LabelAssociation.js +5 -3
  94. package/lib/Types/Message.d.ts +58 -105
  95. package/lib/Types/Message.js +9 -11
  96. package/lib/Types/Newsletter.d.ts +103 -0
  97. package/lib/Types/Newsletter.js +38 -0
  98. package/lib/Types/Product.d.ts +1 -2
  99. package/lib/Types/Product.js +2 -2
  100. package/lib/Types/Signal.d.ts +2 -32
  101. package/lib/Types/Signal.js +2 -2
  102. package/lib/Types/Socket.d.ts +25 -50
  103. package/lib/Types/Socket.js +2 -3
  104. package/lib/Types/State.d.ts +2 -72
  105. package/lib/Types/State.js +2 -56
  106. package/lib/Types/USync.d.ts +2 -3
  107. package/lib/Types/USync.js +2 -2
  108. package/lib/Types/index.d.ts +14 -22
  109. package/lib/Types/index.js +31 -15
  110. package/lib/Utils/auth-utils.d.ts +6 -12
  111. package/lib/Utils/auth-utils.js +143 -239
  112. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  113. package/lib/Utils/baileys-event-stream.js +63 -0
  114. package/lib/Utils/business.d.ts +2 -3
  115. package/lib/Utils/business.js +69 -66
  116. package/lib/Utils/chat-utils.d.ts +23 -52
  117. package/lib/Utils/chat-utils.js +253 -396
  118. package/lib/Utils/crypto.d.ts +22 -18
  119. package/lib/Utils/crypto.js +90 -57
  120. package/lib/Utils/decode-wa-message.d.ts +8 -55
  121. package/lib/Utils/decode-wa-message.js +84 -203
  122. package/lib/Utils/event-buffer.d.ts +8 -9
  123. package/lib/Utils/event-buffer.js +77 -185
  124. package/lib/Utils/generics.d.ts +29 -28
  125. package/lib/Utils/generics.js +210 -180
  126. package/lib/Utils/history.d.ts +9 -18
  127. package/lib/Utils/history.js +55 -93
  128. package/lib/Utils/index.d.ts +17 -22
  129. package/lib/Utils/index.js +33 -22
  130. package/lib/Utils/link-preview.d.ts +5 -5
  131. package/lib/Utils/link-preview.js +24 -16
  132. package/lib/Utils/logger.d.ts +3 -11
  133. package/lib/Utils/logger.js +7 -3
  134. package/lib/Utils/lt-hash.d.ts +12 -8
  135. package/lib/Utils/lt-hash.js +46 -3
  136. package/lib/Utils/make-mutex.d.ts +2 -4
  137. package/lib/Utils/make-mutex.js +34 -24
  138. package/lib/Utils/messages-media.d.ts +44 -61
  139. package/lib/Utils/messages-media.js +482 -451
  140. package/lib/Utils/messages.d.ts +18 -32
  141. package/lib/Utils/messages.js +369 -458
  142. package/lib/Utils/noise-handler.d.ts +14 -13
  143. package/lib/Utils/noise-handler.js +99 -145
  144. package/lib/Utils/process-message.d.ts +12 -31
  145. package/lib/Utils/process-message.js +150 -459
  146. package/lib/Utils/signal.d.ts +5 -20
  147. package/lib/Utils/signal.js +72 -120
  148. package/lib/Utils/use-multi-file-auth-state.d.ts +2 -2
  149. package/lib/Utils/use-multi-file-auth-state.js +27 -29
  150. package/lib/Utils/validate-connection.d.ts +7 -7
  151. package/lib/Utils/validate-connection.js +99 -73
  152. package/lib/WABinary/constants.d.ts +27 -25
  153. package/lib/WABinary/constants.js +20 -1281
  154. package/lib/WABinary/decode.d.ts +5 -5
  155. package/lib/WABinary/decode.js +42 -52
  156. package/lib/WABinary/encode.d.ts +3 -3
  157. package/lib/WABinary/encode.js +155 -110
  158. package/lib/WABinary/generic-utils.d.ts +7 -8
  159. package/lib/WABinary/generic-utils.js +49 -48
  160. package/lib/WABinary/index.d.ts +5 -6
  161. package/lib/WABinary/index.js +21 -6
  162. package/lib/WABinary/jid-utils.d.ts +8 -25
  163. package/lib/WABinary/jid-utils.js +40 -74
  164. package/lib/WABinary/types.d.ts +1 -2
  165. package/lib/WABinary/types.js +2 -2
  166. package/lib/WAM/BinaryInfo.d.ts +11 -3
  167. package/lib/WAM/BinaryInfo.js +5 -2
  168. package/lib/WAM/constants.d.ts +3 -5
  169. package/lib/WAM/constants.js +11958 -19461
  170. package/lib/WAM/encode.d.ts +3 -3
  171. package/lib/WAM/encode.js +22 -17
  172. package/lib/WAM/index.d.ts +3 -4
  173. package/lib/WAM/index.js +19 -4
  174. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +3 -4
  175. package/lib/WAUSync/Protocols/USyncContactProtocol.js +13 -33
  176. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -3
  177. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +14 -11
  178. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -3
  179. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -9
  180. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -3
  181. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +13 -9
  182. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +3 -4
  183. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +22 -20
  184. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +3 -5
  185. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +8 -13
  186. package/lib/WAUSync/Protocols/index.d.ts +4 -6
  187. package/lib/WAUSync/Protocols/index.js +20 -6
  188. package/lib/WAUSync/USyncQuery.d.ts +4 -6
  189. package/lib/WAUSync/USyncQuery.js +35 -44
  190. package/lib/WAUSync/USyncUser.d.ts +5 -10
  191. package/lib/WAUSync/USyncUser.js +5 -10
  192. package/lib/WAUSync/index.js +19 -4
  193. package/lib/index.d.ts +9 -10
  194. package/lib/index.js +34 -12
  195. package/package.json +50 -83
  196. package/WAProto/GenerateStatics.sh +0 -3
  197. package/WAProto/WAProto.proto +0 -5479
  198. package/WAProto/fix-imports.js +0 -85
  199. package/WAProto/index.d.ts +0 -14017
  200. package/lib/Signal/lid-mapping.d.ts +0 -23
  201. package/lib/Signal/lid-mapping.js +0 -277
  202. package/lib/Socket/Client/types.js +0 -11
  203. package/lib/Socket/Client/websocket.js +0 -54
  204. package/lib/Socket/mex.d.ts +0 -3
  205. package/lib/Socket/mex.js +0 -42
  206. package/lib/Store/keyed-db.d.ts +0 -22
  207. package/lib/Store/keyed-db.js +0 -108
  208. package/lib/Types/Bussines.d.ts +0 -25
  209. package/lib/Types/Bussines.js +0 -2
  210. package/lib/Types/Mex.d.ts +0 -141
  211. package/lib/Types/Mex.js +0 -37
  212. package/lib/Utils/browser-utils.d.ts +0 -4
  213. package/lib/Utils/browser-utils.js +0 -28
  214. package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
  215. package/lib/Utils/companion-reg-client-utils.js +0 -35
  216. package/lib/Utils/identity-change-handler.d.ts +0 -44
  217. package/lib/Utils/identity-change-handler.js +0 -50
  218. package/lib/Utils/message-retry-manager.d.ts +0 -115
  219. package/lib/Utils/message-retry-manager.js +0 -265
  220. package/lib/Utils/offline-node-processor.d.ts +0 -17
  221. package/lib/Utils/offline-node-processor.js +0 -40
  222. package/lib/Utils/pre-key-manager.d.ts +0 -28
  223. package/lib/Utils/pre-key-manager.js +0 -106
  224. package/lib/Utils/reporting-utils.d.ts +0 -11
  225. package/lib/Utils/reporting-utils.js +0 -258
  226. package/lib/Utils/stanza-ack.d.ts +0 -11
  227. package/lib/Utils/stanza-ack.js +0 -38
  228. package/lib/Utils/sync-action-utils.d.ts +0 -19
  229. package/lib/Utils/sync-action-utils.js +0 -49
  230. package/lib/Utils/tc-token-utils.d.ts +0 -37
  231. package/lib/Utils/tc-token-utils.js +0 -163
  232. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
  233. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
  234. package/lib/WAUSync/index.d.ts +0 -4
@@ -1,42 +1,43 @@
1
- import { proto } from '../../WAProto/index.js'
2
- import * as Utils from '../Utils/index.js'
3
- import crypto from 'crypto'
1
+ const WAProto = require('../../WAProto').proto;
2
+ const Utils_1 = require('../Utils');
3
+ const crypto = require('crypto');
4
4
 
5
- export default class imup {
6
- constructor(utils, waUploadToServer, relayMessageFn) {
7
- this.utils = utils
5
+ class imup {
6
+ constructor(utils, waUploadToServer, relayMessageFn, authState) {
7
+ this.utils = utils;
8
8
  this.relayMessage = relayMessageFn
9
- this.waUploadToServer = waUploadToServer
9
+ this.waUploadToServer = waUploadToServer;
10
+ this.authState = authState;
10
11
  }
11
12
 
12
13
  detectType(content) {
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
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;
23
24
  }
24
25
 
25
26
  async handlePayment(content, quoted) {
26
- const data = content.requestPaymentMessage
27
- let notes = {}
27
+ const data = content.requestPaymentMessage;
28
+ let notes = {};
28
29
 
29
30
  if (data.sticker?.stickerMessage) {
30
31
  notes = {
31
32
  stickerMessage: {
32
- ...data.sticker.stickerMessage,
33
+ ...data.sticker.stickerMessage,
33
34
  contextInfo: {
34
35
  stanzaId: quoted?.key?.id,
35
36
  participant: quoted?.key?.participant || content.sender,
36
37
  quotedMessage: quoted?.message
37
38
  }
38
39
  }
39
- }
40
+ };
40
41
  } else if (data.note) {
41
42
  notes = {
42
43
  extendedTextMessage: {
@@ -47,452 +48,494 @@ export default class imup {
47
48
  quotedMessage: quoted?.message
48
49
  }
49
50
  }
50
- }
51
+ };
51
52
  }
52
53
 
53
54
  return {
54
- requestPaymentMessage: proto.Message.RequestPaymentMessage.fromObject({
55
+ requestPaymentMessage: WAProto.Message.RequestPaymentMessage.fromObject({
55
56
  expiryTimestamp: data.expiry || 0,
56
57
  amount1000: data.amount || 0,
57
58
  currencyCodeIso4217: data.currency || "IDR",
58
59
  requestFrom: data.from || "0@s.whatsapp.net",
59
60
  noteMessage: notes,
60
- background: data.background?? {
61
+ background: data.background ?? {
61
62
  id: "DEFAULT",
62
63
  placeholderArgb: 0xFFF0F0F0
63
64
  }
64
65
  })
65
- }
66
+ };
66
67
  }
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 }
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
+ }
124
126
  }
125
127
  }
126
- }
128
+ };
127
129
  }
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
- })
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
+ );
187
168
  }
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
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
+ );
181
+ }
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;
218
191
  }
219
- } : {})
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';
220
206
  }
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
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
+ };
232
223
  }
224
+ } else if (nativeFlowMessage) {
225
+ interactiveMessage.nativeFlowMessage = nativeFlowMessage;
233
226
  }
234
- }, { quoted })
235
-
236
- await this.relayMessage(jid, msg.message, { messageId: msg.key.id })
237
- return msg
238
- }
239
-
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
- },
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
+ };
285
239
  }
286
240
 
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",
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
+ };
297
250
  }
298
251
 
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,
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
+ };
264
+ }
265
+
266
+ if (Object.keys(finalContextInfo).length > 0) {
267
+ interactiveMessage.contextInfo = finalContextInfo;
312
268
  }
313
269
 
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',
322
- },
323
- message: album.message,
324
- },
325
- })
270
+ return {
271
+ interactiveMessage: interactiveMessage
272
+ };
326
273
  }
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
- })
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,
346
316
  },
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
- }
317
+ dataSharingContext: {
318
+ showMmDisclosure: true,
319
+ },
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',
357
357
  },
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"
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
+ })
365
381
  },
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
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
+ }
370
406
  }
371
407
  }
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()
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()
390
425
  : vote.optionVoteCount
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"
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
+ }
400
436
  }
401
437
  }
402
- }
403
- }, {
404
- userJid: this.utils.generateMessageID().split('@')[0] + '@s.whatsapp.net',
405
- quoted
406
- })
407
-
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
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 });
442
469
 
443
- if (storyData.message) {
444
- messageContent = storyData
445
- } else {
446
- if (typeof this.utils?.generateWAMessageContent === "function") {
447
- messageContent = await this.utils.generateWAMessageContent(storyData, {
448
- upload: this.waUploadToServer
449
- })
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;
450
480
  } else {
451
- messageContent = await Utils.generateWAMessageContent(storyData, {
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") {
486
+ 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, {
452
491
  upload: this.waUploadToServer
453
- })
492
+ });
493
+ } else {
494
+ messageContent = await Utils_1.generateWAMessageContent(storyData, {
495
+ upload: this.waUploadToServer
496
+ });
497
+ }
454
498
  }
455
- }
456
499
 
457
- let msg = {
458
- message: {
500
+ let msg = {
501
+ message: {
459
502
  groupStatusMessageV2: {
460
- message: messageContent.message || messageContent
503
+ message: messageContent.message || messageContent
461
504
  }
462
- }
463
- }
464
-
465
- return await this.relayMessage(jid, msg.message, {
466
- messageId: this.utils.generateMessageID()
467
- })
468
- }
505
+ }
506
+ };
469
507
 
470
- async handleGbLabel(content, jid) {
471
- const x = content.groupLabel
472
- if (!jid.endsWith('@g.us')) {
473
- throw new Error('group required!')
508
+ return await this.relayMessage(jid, msg.message, {
509
+ messageId: this.utils.generateMessageID()
510
+ });
474
511
  }
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
- }
512
+ async handleGbLabel(content, jid) {
513
+ const x = content.groupLabel;
514
+ if (!jid.endsWith('@g.us')) {
515
+ throw new Error('group required!')
482
516
  }
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
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
+ }
494
524
  }
495
- ]
496
- })
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
+ }
497
539
  }
498
- }
540
+
541
+ module.exports = imup;