@neelegirl/baileys 1.5.2 → 1.5.3

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 (193) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +195 -187
  3. package/WAProto/WAProto.proto +537 -236
  4. package/WAProto/index.d.ts +5971 -2388
  5. package/WAProto/index.js +17298 -6513
  6. package/lib/Defaults/baileys-version.json +3 -3
  7. package/lib/Defaults/index.d.ts +77 -67
  8. package/lib/Defaults/index.js +148 -136
  9. package/lib/Defaults/phonenumber-mcc.json +223 -223
  10. package/lib/Signal/WASignalGroup/GroupProtocol.js +1908 -1908
  11. package/lib/Signal/WASignalGroup/ciphertext-message.d.ts +9 -0
  12. package/lib/Signal/WASignalGroup/ciphertext-message.js +19 -0
  13. package/lib/Signal/WASignalGroup/ciphertext_message.js +15 -15
  14. package/lib/Signal/WASignalGroup/group-session-builder.d.ts +17 -0
  15. package/lib/Signal/WASignalGroup/group-session-builder.js +72 -0
  16. package/lib/Signal/WASignalGroup/group.proto +41 -41
  17. package/lib/Signal/WASignalGroup/group_cipher.d.ts +19 -0
  18. package/lib/Signal/WASignalGroup/group_cipher.js +101 -110
  19. package/lib/Signal/WASignalGroup/group_session_builder.js +45 -45
  20. package/lib/Signal/WASignalGroup/index.d.ts +11 -0
  21. package/lib/Signal/WASignalGroup/index.js +61 -6
  22. package/lib/Signal/WASignalGroup/keyhelper.d.ts +16 -0
  23. package/lib/Signal/WASignalGroup/keyhelper.js +58 -13
  24. package/lib/Signal/WASignalGroup/protobufs.js +2 -2
  25. package/lib/Signal/WASignalGroup/queue_job.js +68 -68
  26. package/lib/Signal/WASignalGroup/readme.md +5 -5
  27. package/lib/Signal/WASignalGroup/sender-chain-key.d.ts +14 -0
  28. package/lib/Signal/WASignalGroup/sender-chain-key.js +47 -0
  29. package/lib/Signal/WASignalGroup/sender-key-distribution-message.d.ts +17 -0
  30. package/lib/Signal/WASignalGroup/sender-key-distribution-message.js +71 -0
  31. package/lib/Signal/WASignalGroup/sender-key-message.d.ts +19 -0
  32. package/lib/Signal/WASignalGroup/sender-key-message.js +73 -0
  33. package/lib/Signal/WASignalGroup/sender-key-name.d.ts +19 -0
  34. package/lib/Signal/WASignalGroup/sender-key-name.js +59 -0
  35. package/lib/Signal/WASignalGroup/sender-key-record.d.ts +32 -0
  36. package/lib/Signal/WASignalGroup/sender-key-record.js +58 -0
  37. package/lib/Signal/WASignalGroup/sender-key-state.d.ts +44 -0
  38. package/lib/Signal/WASignalGroup/sender-key-state.js +147 -0
  39. package/lib/Signal/WASignalGroup/sender-message-key.d.ts +11 -0
  40. package/lib/Signal/WASignalGroup/sender-message-key.js +33 -0
  41. package/lib/Signal/WASignalGroup/sender_chain_key.js +49 -49
  42. package/lib/Signal/WASignalGroup/sender_key_distribution_message.js +77 -77
  43. package/lib/Signal/WASignalGroup/sender_key_message.js +91 -91
  44. package/lib/Signal/WASignalGroup/sender_key_name.js +69 -69
  45. package/lib/Signal/WASignalGroup/sender_key_record.js +55 -55
  46. package/lib/Signal/WASignalGroup/sender_key_state.js +128 -128
  47. package/lib/Signal/WASignalGroup/sender_message_key.js +38 -38
  48. package/lib/Signal/libsignal.d.ts +5 -1
  49. package/lib/Signal/libsignal.js +390 -161
  50. package/lib/Signal/lid-mapping.d.ts +28 -0
  51. package/lib/Signal/lid-mapping.js +184 -0
  52. package/lib/Socket/Client/abstract-socket-client.d.ts +15 -15
  53. package/lib/Socket/Client/abstract-socket-client.js +13 -13
  54. package/lib/Socket/Client/index.d.ts +2 -2
  55. package/lib/Socket/Client/mobile-socket-client.d.ts +12 -12
  56. package/lib/Socket/Client/mobile-socket-client.js +65 -65
  57. package/lib/Socket/Client/types.d.ts +1 -1
  58. package/lib/Socket/Client/websocket.d.ts +1 -1
  59. package/lib/Socket/business.d.ts +6 -6
  60. package/lib/Socket/business.js +152 -5
  61. package/lib/Socket/chats.d.ts +3 -4
  62. package/lib/Socket/chats.js +31 -26
  63. package/lib/Socket/communities.d.ts +223 -223
  64. package/lib/Socket/communities.js +432 -432
  65. package/lib/Socket/groups.d.ts +2 -4
  66. package/lib/Socket/groups.js +22 -14
  67. package/lib/Socket/index.d.ts +69 -69
  68. package/lib/Socket/index.js +3 -2
  69. package/lib/Socket/messages-recv.d.ts +3 -6
  70. package/lib/Socket/messages-recv.js +1449 -1707
  71. package/lib/Socket/messages-send.d.ts +2 -4
  72. package/lib/Socket/messages-send.js +617 -126
  73. package/lib/Socket/mex.d.ts +2 -2
  74. package/lib/Socket/mex.js +46 -46
  75. package/lib/Socket/newsletter.d.ts +2 -4
  76. package/lib/Socket/newsletter.js +294 -285
  77. package/lib/Socket/socket.js +318 -132
  78. package/lib/Socket/usync.js +3 -3
  79. package/lib/Store/index.d.ts +4 -4
  80. package/lib/Store/index.js +23 -23
  81. package/lib/Store/make-cache-manager-store.d.ts +13 -13
  82. package/lib/Store/make-cache-manager-store.js +89 -89
  83. package/lib/Store/make-in-memory-store.d.ts +122 -122
  84. package/lib/Store/make-in-memory-store.js +428 -428
  85. package/lib/Store/make-ordered-dictionary.d.ts +11 -11
  86. package/lib/Store/make-ordered-dictionary.js +85 -85
  87. package/lib/Store/object-repository.d.ts +9 -9
  88. package/lib/Store/object-repository.js +30 -30
  89. package/lib/Types/Auth.d.ts +5 -4
  90. package/lib/Types/Bussines.js +3 -0
  91. package/lib/Types/Bussiness.d.ts +28 -0
  92. package/lib/Types/Chat.d.ts +13 -8
  93. package/lib/Types/Contact.d.ts +4 -1
  94. package/lib/Types/Events.d.ts +13 -16
  95. package/lib/Types/GroupMetadata.d.ts +1 -1
  96. package/lib/Types/Message.d.ts +18 -7
  97. package/lib/Types/Message.js +7 -1
  98. package/lib/Types/MexUpdates.d.ts +8 -8
  99. package/lib/Types/MexUpdates.js +17 -17
  100. package/lib/Types/Newsletter.d.ts +1 -1
  101. package/lib/Types/Product.d.ts +1 -1
  102. package/lib/Types/Signal.d.ts +31 -1
  103. package/lib/Types/Socket.d.ts +34 -13
  104. package/lib/Types/State.d.ts +1 -1
  105. package/lib/Types/USync.d.ts +2 -2
  106. package/lib/Types/index.d.ts +16 -15
  107. package/lib/Types/index.js +4 -2
  108. package/lib/Utils/auth-utils.d.ts +20 -20
  109. package/lib/Utils/auth-utils.js +527 -204
  110. package/lib/Utils/baileys-event-stream.d.ts +17 -17
  111. package/lib/Utils/baileys-event-stream.js +69 -69
  112. package/lib/Utils/business.d.ts +28 -28
  113. package/lib/Utils/business.js +254 -254
  114. package/lib/Utils/chat-utils.d.ts +81 -81
  115. package/lib/Utils/chat-utils.js +808 -780
  116. package/lib/Utils/crypto.d.ts +55 -55
  117. package/lib/Utils/crypto.js +188 -178
  118. package/lib/Utils/decode-wa-message.d.ts +52 -40
  119. package/lib/Utils/decode-wa-message.js +322 -252
  120. package/lib/Utils/event-buffer.d.ts +38 -38
  121. package/lib/Utils/event-buffer.js +594 -564
  122. package/lib/Utils/generics.d.ts +131 -129
  123. package/lib/Utils/generics.js +629 -623
  124. package/lib/Utils/history.d.ts +22 -22
  125. package/lib/Utils/history.js +103 -109
  126. package/lib/Utils/index.d.ts +20 -19
  127. package/lib/Utils/index.js +39 -38
  128. package/lib/Utils/link-preview.d.ts +22 -22
  129. package/lib/Utils/link-preview.js +119 -119
  130. package/lib/Utils/logger.d.ts +13 -13
  131. package/lib/Utils/logger.js +7 -7
  132. package/lib/Utils/lt-hash.d.ts +13 -13
  133. package/lib/Utils/lt-hash.js +57 -57
  134. package/lib/Utils/make-mutex.d.ts +8 -8
  135. package/lib/Utils/make-mutex.js +48 -48
  136. package/lib/Utils/message-retry-manager.d.ts +88 -0
  137. package/lib/Utils/message-retry-manager.js +160 -0
  138. package/lib/Utils/messages-media.d.ts +134 -128
  139. package/lib/Utils/messages-media.js +868 -805
  140. package/lib/Utils/messages.d.ts +104 -102
  141. package/lib/Utils/messages.js +1744 -1578
  142. package/lib/Utils/noise-handler.d.ts +20 -19
  143. package/lib/Utils/noise-handler.js +164 -154
  144. package/lib/Utils/process-message.d.ts +48 -48
  145. package/lib/Utils/process-message.js +427 -428
  146. package/lib/Utils/signal.d.ts +41 -41
  147. package/lib/Utils/signal.js +165 -165
  148. package/lib/Utils/use-mongo-file-auth-state.d.ts +5 -5
  149. package/lib/Utils/use-mongo-file-auth-state.js +83 -83
  150. package/lib/Utils/use-multi-file-auth-state.d.ts +17 -17
  151. package/lib/Utils/use-multi-file-auth-state.js +237 -237
  152. package/lib/Utils/use-single-file-auth-state.d.ts +12 -12
  153. package/lib/Utils/use-single-file-auth-state.js +79 -79
  154. package/lib/Utils/validate-connection.d.ts +12 -12
  155. package/lib/Utils/validate-connection.js +219 -186
  156. package/lib/WABinary/constants.d.ts +29 -29
  157. package/lib/WABinary/constants.js +1315 -1315
  158. package/lib/WABinary/decode.d.ts +8 -8
  159. package/lib/WABinary/decode.js +287 -287
  160. package/lib/WABinary/encode.d.ts +2 -2
  161. package/lib/WABinary/encode.js +264 -264
  162. package/lib/WABinary/generic-utils.d.ts +27 -27
  163. package/lib/WABinary/generic-utils.js +141 -141
  164. package/lib/WABinary/index.d.ts +5 -5
  165. package/lib/WABinary/index.js +24 -24
  166. package/lib/WABinary/jid-utils.d.ts +58 -53
  167. package/lib/WABinary/jid-utils.js +103 -91
  168. package/lib/WABinary/types.d.ts +21 -21
  169. package/lib/WABinary/types.js +2 -2
  170. package/lib/WAM/BinaryInfo.d.ts +15 -15
  171. package/lib/WAM/BinaryInfo.js +16 -16
  172. package/lib/WAM/constants.d.ts +46 -46
  173. package/lib/WAM/constants.js +15370 -15370
  174. package/lib/WAM/encode.d.ts +2 -2
  175. package/lib/WAM/encode.js +163 -164
  176. package/lib/WAM/index.d.ts +3 -3
  177. package/lib/WAM/index.js +22 -22
  178. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.d.ts +27 -27
  179. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +68 -68
  180. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +3 -3
  181. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +2 -2
  182. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +2 -2
  183. package/lib/WAUSync/Protocols/USyncLIDProtocol.d.ts +9 -8
  184. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +37 -29
  185. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +2 -2
  186. package/lib/WAUSync/Protocols/index.d.ts +6 -6
  187. package/lib/WAUSync/USyncQuery.d.ts +3 -3
  188. package/lib/WAUSync/index.d.ts +3 -3
  189. package/lib/index.d.ts +13 -13
  190. package/lib/index.js +33 -33
  191. package/package.json +96 -94
  192. package/lib/Socket/registration.d.ts +0 -266
  193. package/lib/Socket/registration.js +0 -166
@@ -0,0 +1,160 @@
1
+ "use strict"
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true })
4
+
5
+ const LRUCache_1 = require("lru-cache")
6
+
7
+ /** Number of sent messages to cache in memory for handling retry receipts */
8
+ const RECENT_MESSAGES_SIZE = 512
9
+
10
+ /** Timeout for session recreation - 1 hour */
11
+ const RECREATE_SESSION_TIMEOUT = 60 * 60 * 1000 // 1 hour in milliseconds
12
+
13
+ const PHONE_REQUEST_DELAY = 3000
14
+
15
+ class MessageRetryManager {
16
+ constructor(logger, maxMsgRetryCount) {
17
+ this.logger = logger
18
+ this.recentMessagesMap = new LRUCache_1.LRUCache({
19
+ max: RECENT_MESSAGES_SIZE
20
+ })
21
+ this.sessionRecreateHistory = new LRUCache_1.LRUCache({
22
+ ttl: RECREATE_SESSION_TIMEOUT * 2,
23
+ ttlAutopurge: true
24
+ })
25
+ this.retryCounters = new LRUCache_1.LRUCache({
26
+ ttl: 15 * 60 * 1000,
27
+ ttlAutopurge: true,
28
+ updateAgeOnGet: true
29
+ }) // 15 minutes TTL
30
+ this.pendingPhoneRequests = {}
31
+ this.maxMsgRetryCount = 5
32
+ this.statistics = {
33
+ totalRetries: 0,
34
+ successfulRetries: 0,
35
+ failedRetries: 0,
36
+ mediaRetries: 0,
37
+ sessionRecreations: 0,
38
+ phoneRequests: 0
39
+ }
40
+ this.maxMsgRetryCount = maxMsgRetryCount
41
+ }
42
+ /**
43
+ * Add a recent message to the cache for retry handling
44
+ */
45
+ addRecentMessage(to, id, message) {
46
+ const key = { to, id }
47
+ const keyStr = this.keyToString(key)
48
+ // Add new message
49
+ this.recentMessagesMap.set(keyStr, {
50
+ message,
51
+ timestamp: Date.now()
52
+ })
53
+ this.logger.debug(`Added message to retry cache: ${to}/${id}`)
54
+ }
55
+ /**
56
+ * Get a recent message from the cache
57
+ */
58
+ getRecentMessage(to, id) {
59
+ const key = { to, id }
60
+ const keyStr = this.keyToString(key)
61
+ return this.recentMessagesMap.get(keyStr)
62
+ }
63
+ /**
64
+ * Check if a session should be recreated based on retry count and history
65
+ */
66
+ shouldRecreateSession(jid, retryCount, hasSession) {
67
+ // If we don't have a session, always recreate
68
+ if (!hasSession) {
69
+ this.sessionRecreateHistory.set(jid, Date.now())
70
+ this.statistics.sessionRecreations++
71
+ return {
72
+ reason: "we don't have a Signal session with them",
73
+ recreate: true
74
+ }
75
+ }
76
+ // Only consider recreation if retry count > 1
77
+ if (retryCount < 2) {
78
+ return { reason: '', recreate: false }
79
+ }
80
+ const now = Date.now()
81
+ const prevTime = this.sessionRecreateHistory.get(jid)
82
+ // If no previous recreation or it's been more than an hour
83
+ if (!prevTime || now - prevTime > RECREATE_SESSION_TIMEOUT) {
84
+ this.sessionRecreateHistory.set(jid, now)
85
+ this.statistics.sessionRecreations++
86
+ return {
87
+ reason: 'retry count > 1 and over an hour since last recreation',
88
+ recreate: true
89
+ }
90
+ }
91
+ return { reason: '', recreate: false }
92
+ }
93
+ /**
94
+ * Increment retry counter for a message
95
+ */
96
+ incrementRetryCount(messageId) {
97
+ this.retryCounters.set(messageId, (this.retryCounters.get(messageId) || 0) + 1)
98
+ this.statistics.totalRetries++
99
+ return this.retryCounters.get(messageId)
100
+ }
101
+ /**
102
+ * Get retry count for a message
103
+ */
104
+ getRetryCount(messageId) {
105
+ return this.retryCounters.get(messageId) || 0
106
+ }
107
+ /**
108
+ * Check if message has exceeded maximum retry attempts
109
+ */
110
+ hasExceededMaxRetries(messageId) {
111
+ return this.getRetryCount(messageId) >= this.maxMsgRetryCount
112
+ }
113
+ /**
114
+ * Mark retry as successful
115
+ */
116
+ markRetrySuccess(messageId) {
117
+ this.statistics.successfulRetries++
118
+ // Clean up retry counter for successful message
119
+ this.retryCounters.delete(messageId)
120
+ this.cancelPendingPhoneRequest(messageId)
121
+ }
122
+ /**
123
+ * Mark retry as failed
124
+ */
125
+ markRetryFailed(messageId) {
126
+ this.statistics.failedRetries++
127
+ this.retryCounters.delete(messageId)
128
+ }
129
+ /**
130
+ * Schedule a phone request with delay
131
+ */
132
+ schedulePhoneRequest(messageId, callback, delay = PHONE_REQUEST_DELAY) {
133
+ // Cancel any existing request for this message
134
+ this.cancelPendingPhoneRequest(messageId)
135
+ this.pendingPhoneRequests[messageId] = setTimeout(() => {
136
+ delete this.pendingPhoneRequests[messageId]
137
+ this.statistics.phoneRequests++
138
+ callback()
139
+ }, delay)
140
+ this.logger.debug(`Scheduled phone request for message ${messageId} with ${delay}ms delay`)
141
+ }
142
+ /**
143
+ * Cancel pending phone request
144
+ */
145
+ cancelPendingPhoneRequest(messageId) {
146
+ const timeout = this.pendingPhoneRequests[messageId]
147
+ if (timeout) {
148
+ clearTimeout(timeout)
149
+ delete this.pendingPhoneRequests[messageId]
150
+ this.logger.debug(`Cancelled pending phone request for message ${messageId}`)
151
+ }
152
+ }
153
+ keyToString(key) {
154
+ return `${key.to}:${key.id}`
155
+ }
156
+ }
157
+
158
+ module.exports = {
159
+ MessageRetryManager
160
+ }
@@ -1,129 +1,135 @@
1
- import { Boom } from '@hapi/boom'
2
- import { AxiosRequestConfig } from 'axios'
3
- import { Readable, Transform } from 'stream'
4
- import { URL } from 'url'
5
- import { proto } from '../../WAProto'
6
- import { DownloadableMessage, MediaConnInfo, MediaDecryptionKeyInfo, MediaType, SocketConfig, WAMediaUpload, WAMediaUploadFunction, WAMessageContent } from '../Types'
7
- import { BinaryNode } from '../WABinary'
8
- import { ILogger } from './logger'
9
-
10
- export declare const hkdfInfoKey: (type: MediaType) => string
11
-
12
- /** generates all the keys required to encrypt/decrypt & sign a media message */
13
- export declare function getMediaKeys(buffer: Uint8Array | string | null | undefined, mediaType: MediaType): MediaDecryptionKeyInfo
14
-
15
- export declare const extractImageThumb: (bufferOrFilePath: Readable | Buffer | string, width?: number) => Promise<{
16
- buffer: Buffer
17
- original: {
18
- width: number | undefined
19
- height: number | undefined
20
- }
21
- }>
22
-
23
- export declare const encodeBase64EncodedStringForUpload: (b64: string) => string
24
-
25
- export declare const generateProfilePicture: (mediaUpload: WAMediaUpload) => Promise<{
26
- img: Buffer
27
- }>
28
-
29
- /** gets the SHA256 of the given media message */
30
- export declare const mediaMessageSHA256B64: (message: WAMessageContent) => string | null | undefined
31
-
32
- export declare function getAudioDuration(buffer: Buffer | string | Readable): Promise<number | undefined>
33
-
34
- /**
35
- referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts
36
- */
37
- export declare function getAudioWaveform(buffer: Buffer | string | Readable, logger?: ILogger): Promise<Uint8Array | undefined>
38
-
39
- export declare const toReadable: (buffer: Buffer) => Readable
40
-
41
- export declare const toBuffer: (stream: Readable) => Promise<Buffer>
42
-
43
- export declare const getStream: (item: WAMediaUpload, opts?: AxiosRequestConfig) => Promise<{
44
- readonly stream: Readable
45
- readonly type: "buffer"
46
- } | {
47
- readonly stream: Readable
48
- readonly type: "readable"
49
- } | {
50
- readonly stream: Readable
51
- readonly type: "remote"
52
- } | {
53
- readonly stream: import("fs").ReadStream
54
- readonly type: "file"
55
- }>
56
-
57
- /** generates a thumbnail for a given media, if required */
58
- export declare function generateThumbnail(file: string, mediaType: 'video' | 'image', options: {
59
- logger?: Logger
60
- }): Promise<{
61
- thumbnail: string | undefined
62
- originalImageDimensions: {
63
- width: number
64
- height: number
65
- } | undefined
66
- }>
67
-
68
- export declare const getHttpStream: (url: string | URL, options?: AxiosRequestConfig & {
69
- isStream?: true
70
- }) => Promise<Readable>
71
-
72
- type EncryptedStreamOptions = {
73
- saveOriginalFileIfRequired?: boolean
74
- logger?: Logger
75
- opts?: AxiosRequestConfig
76
- }
77
-
78
- export declare const encryptedStream: (media: WAMediaUpload, mediaType: MediaType, { logger, saveOriginalFileIfRequired, opts }?: EncryptedStreamOptions) => Promise<{
79
- mediaKey: Buffer
80
- encWriteStream: Readable
81
- bodyPath: string | undefined
82
- mac: Buffer
83
- fileEncSha256: Buffer
84
- fileSha256: Buffer
85
- fileLength: number
86
- didSaveToTmpPath: boolean
87
- }>
88
-
89
- export type MediaDownloadOptions = {
90
- startByte?: number
91
- endByte?: number
92
- options?: AxiosRequestConfig<{}>
93
- }
94
-
95
- export declare const getUrlFromDirectPath: (directPath: string) => string
96
-
97
- export declare const downloadContentFromMessage: ({ mediaKey, directPath, url }: DownloadableMessage, type: MediaType, opts?: MediaDownloadOptions) => Promise<Transform>
98
-
99
- /**
100
- * Decrypts and downloads an AES256-CBC encrypted file given the keys.
101
- * Assumes the SHA256 of the plaintext is appended to the end of the ciphertext
102
- * */
103
- export declare const downloadEncryptedContent: (downloadUrl: string, { cipherKey, iv }: MediaDecryptionKeyInfo, { startByte, endByte, options }?: MediaDownloadOptions) => Promise<Transform>
104
-
105
- export declare function extensionForMediaMessage(message: WAMessageContent): string
106
-
107
- export declare const getWAUploadToServer: ({ customUploadHosts, fetchAgent, logger, options }: SocketConfig, refreshMediaConn: (force: boolean) => Promise<MediaConnInfo>) => WAMediaUploadFunction
108
- /**
109
- * Generate a binary node that will request the phone to re-upload the media & return the newly uploaded URL
110
- */
111
- export declare const encryptMediaRetryRequest: (key: proto.IMessageKey, mediaKey: Buffer | Uint8Array, meId: string) => BinaryNode
112
-
113
- export declare const decodeMediaRetryNode: (node: BinaryNode) => {
114
- key: proto.IMessageKey
115
- media?: {
116
- ciphertext: Uint8Array
117
- iv: Uint8Array
118
- } | undefined
119
- error?: Boom<any> | undefined
120
- }
121
-
122
- export declare const decryptMediaRetryData: ({ ciphertext, iv }: {
123
- ciphertext: Uint8Array
124
- iv: Uint8Array
125
- }, mediaKey: Uint8Array, msgId: string) => Promise<proto.MediaRetryNotification>
126
-
127
- export declare const getStatusCodeForMediaRetry: (code: number) => any
128
-
1
+ import { Boom } from '@hapi/boom'
2
+ import { AxiosRequestConfig } from 'axios'
3
+ import { Readable, Transform } from 'stream'
4
+ import { URL } from 'url'
5
+ import { proto } from '@neelegirl/baileys/WAProto'
6
+ import { DownloadableMessage, MediaConnInfo, MediaDecryptionKeyInfo, MediaType, SocketConfig, WAMediaUpload, WAMediaUploadFunction, WAMessageContent } from '@neelegirl/baileys/lib/Types'
7
+ import { BinaryNode } from '@neelegirl/baileys/lib/WABinary'
8
+ import { ILogger } from '@neelegirl/baileys/lib/Utils/logger'
9
+
10
+ export declare const hkdfInfoKey: (type: MediaType) => string
11
+
12
+ export declare const getRawMediaUploadData: (media: WAMediaUpload, mediaType: MediaType, logger?: ILogger) => Promise<{
13
+ filePath: string
14
+ fileSha256: Buffer<ArrayBufferLike>
15
+ fileLength: number
16
+ }>
17
+
18
+ /** generates all the keys required to encrypt/decrypt & sign a media message */
19
+ export declare function getMediaKeys(buffer: Uint8Array | string | null | undefined, mediaType: MediaType): MediaDecryptionKeyInfo
20
+
21
+ export declare const extractImageThumb: (bufferOrFilePath: Readable | Buffer | string, width?: number) => Promise<{
22
+ buffer: Buffer
23
+ original: {
24
+ width: number | undefined
25
+ height: number | undefined
26
+ }
27
+ }>
28
+
29
+ export declare const encodeBase64EncodedStringForUpload: (b64: string) => string
30
+
31
+ export declare const generateProfilePicture: (mediaUpload: WAMediaUpload) => Promise<{
32
+ img: Buffer
33
+ }>
34
+
35
+ /** gets the SHA256 of the given media message */
36
+ export declare const mediaMessageSHA256B64: (message: WAMessageContent) => string | null | undefined
37
+
38
+ export declare function getAudioDuration(buffer: Buffer | string | Readable): Promise<number | undefined>
39
+
40
+ /**
41
+ referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts
42
+ */
43
+ export declare function getAudioWaveform(buffer: Buffer | string | Readable, logger?: ILogger): Promise<Uint8Array | undefined>
44
+
45
+ export declare const toReadable: (buffer: Buffer) => Readable
46
+
47
+ export declare const toBuffer: (stream: Readable) => Promise<Buffer>
48
+
49
+ export declare const getStream: (item: WAMediaUpload, opts?: AxiosRequestConfig) => Promise<{
50
+ readonly stream: Readable
51
+ readonly type: "buffer"
52
+ } | {
53
+ readonly stream: Readable
54
+ readonly type: "readable"
55
+ } | {
56
+ readonly stream: Readable
57
+ readonly type: "remote"
58
+ } | {
59
+ readonly stream: import("fs").ReadStream
60
+ readonly type: "file"
61
+ }>
62
+
63
+ /** generates a thumbnail for a given media, if required */
64
+ export declare function generateThumbnail(file: string, mediaType: 'video' | 'image', options: {
65
+ logger?: Logger
66
+ }): Promise<{
67
+ thumbnail: string | undefined
68
+ originalImageDimensions: {
69
+ width: number
70
+ height: number
71
+ } | undefined
72
+ }>
73
+
74
+ export declare const getHttpStream: (url: string | URL, options?: AxiosRequestConfig & {
75
+ isStream?: true
76
+ }) => Promise<Readable>
77
+
78
+ type EncryptedStreamOptions = {
79
+ saveOriginalFileIfRequired?: boolean
80
+ logger?: Logger
81
+ opts?: AxiosRequestConfig
82
+ }
83
+
84
+ export declare const encryptedStream: (media: WAMediaUpload, mediaType: MediaType, { logger, saveOriginalFileIfRequired, opts }?: EncryptedStreamOptions) => Promise<{
85
+ mediaKey: Buffer
86
+ encWriteStream: Readable
87
+ bodyPath: string | undefined
88
+ mac: Buffer
89
+ fileEncSha256: Buffer
90
+ fileSha256: Buffer
91
+ fileLength: number
92
+ didSaveToTmpPath: boolean
93
+ }>
94
+
95
+ export type MediaDownloadOptions = {
96
+ startByte?: number
97
+ endByte?: number
98
+ options?: AxiosRequestConfig<{}>
99
+ }
100
+
101
+ export declare const getUrlFromDirectPath: (directPath: string) => string
102
+
103
+ export declare const downloadContentFromMessage: ({ mediaKey, directPath, url }: DownloadableMessage, type: MediaType, opts?: MediaDownloadOptions) => Promise<Transform>
104
+
105
+ /**
106
+ * Decrypts and downloads an AES256-CBC encrypted file given the keys.
107
+ * Assumes the SHA256 of the plaintext is appended to the end of the ciphertext
108
+ * */
109
+ export declare const downloadEncryptedContent: (downloadUrl: string, { cipherKey, iv }: MediaDecryptionKeyInfo, { startByte, endByte, options }?: MediaDownloadOptions) => Promise<Transform>
110
+
111
+ export declare function extensionForMediaMessage(message: WAMessageContent): string
112
+
113
+ export declare const getWAUploadToServer: ({ customUploadHosts, fetchAgent, logger, options }: SocketConfig, refreshMediaConn: (force: boolean) => Promise<MediaConnInfo>) => WAMediaUploadFunction
114
+ /**
115
+ * Generate a binary node that will request the phone to re-upload the media & return the newly uploaded URL
116
+ */
117
+ export declare const encryptMediaRetryRequest: (key: proto.IMessageKey, mediaKey: Buffer | Uint8Array, meId: string) => BinaryNode
118
+
119
+ export declare const decodeMediaRetryNode: (node: BinaryNode) => {
120
+ key: proto.IMessageKey
121
+ media?: {
122
+ ciphertext: Uint8Array
123
+ iv: Uint8Array
124
+ } | undefined
125
+ error?: Boom<any> | undefined
126
+ }
127
+
128
+ export declare const decryptMediaRetryData: ({ ciphertext, iv }: {
129
+ ciphertext: Uint8Array
130
+ iv: Uint8Array
131
+ }, mediaKey: Uint8Array, msgId: string) => Promise<proto.MediaRetryNotification>
132
+
133
+ export declare const getStatusCodeForMediaRetry: (code: number) => any
134
+
129
135
  export {}