@neelegirl/baileys 1.4.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 (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -0
  3. package/WAProto/GenerateStatics.sh +4 -0
  4. package/WAProto/WAProto.proto +4451 -0
  5. package/WAProto/index.d.ts +51459 -0
  6. package/WAProto/index.js +158781 -0
  7. package/WASignalGroup/GroupProtocol.js +1697 -0
  8. package/WASignalGroup/ciphertext_message.js +16 -0
  9. package/WASignalGroup/group_cipher.js +120 -0
  10. package/WASignalGroup/group_session_builder.js +46 -0
  11. package/WASignalGroup/index.js +5 -0
  12. package/WASignalGroup/keyhelper.js +21 -0
  13. package/WASignalGroup/protobufs.js +3 -0
  14. package/WASignalGroup/queue_job.js +69 -0
  15. package/WASignalGroup/sender_chain_key.js +50 -0
  16. package/WASignalGroup/sender_key_distribution_message.js +78 -0
  17. package/WASignalGroup/sender_key_message.js +92 -0
  18. package/WASignalGroup/sender_key_name.js +70 -0
  19. package/WASignalGroup/sender_key_record.js +56 -0
  20. package/WASignalGroup/sender_key_state.js +129 -0
  21. package/WASignalGroup/sender_message_key.js +39 -0
  22. package/package.json +88 -0
  23. package/src/Defaults/baileys-version.json +3 -0
  24. package/src/Defaults/index.d.ts +68 -0
  25. package/src/Defaults/index.js +131 -0
  26. package/src/Defaults/phonenumber-mcc.json +223 -0
  27. package/src/Signal/libsignal.d.ts +4 -0
  28. package/src/Signal/libsignal.js +162 -0
  29. package/src/Socket/Client/index.d.ts +2 -0
  30. package/src/Socket/Client/index.js +22 -0
  31. package/src/Socket/Client/types.d.ts +16 -0
  32. package/src/Socket/Client/types.js +18 -0
  33. package/src/Socket/Client/websocket.d.ts +13 -0
  34. package/src/Socket/Client/websocket.js +62 -0
  35. package/src/Socket/business.d.ts +182 -0
  36. package/src/Socket/business.js +268 -0
  37. package/src/Socket/chats.d.ts +96 -0
  38. package/src/Socket/chats.js +1278 -0
  39. package/src/Socket/groups.d.ts +130 -0
  40. package/src/Socket/groups.js +337 -0
  41. package/src/Socket/index.d.ts +185 -0
  42. package/src/Socket/index.js +14 -0
  43. package/src/Socket/messages-recv.d.ts +171 -0
  44. package/src/Socket/messages-recv.js +1182 -0
  45. package/src/Socket/messages-send.d.ts +162 -0
  46. package/src/Socket/messages-send.js +1086 -0
  47. package/src/Socket/newsletter.d.ts +142 -0
  48. package/src/Socket/newsletter.js +256 -0
  49. package/src/Socket/socket.d.ts +45 -0
  50. package/src/Socket/socket.js +749 -0
  51. package/src/Socket/usync.d.ts +37 -0
  52. package/src/Socket/usync.js +83 -0
  53. package/src/Store/index.d.ts +4 -0
  54. package/src/Store/index.js +24 -0
  55. package/src/Store/make-cache-manager-store.d.ts +14 -0
  56. package/src/Store/make-cache-manager-store.js +90 -0
  57. package/src/Store/make-in-memory-store.d.ts +123 -0
  58. package/src/Store/make-in-memory-store.js +429 -0
  59. package/src/Store/make-ordered-dictionary.d.ts +12 -0
  60. package/src/Store/make-ordered-dictionary.js +86 -0
  61. package/src/Store/object-repository.d.ts +10 -0
  62. package/src/Store/object-repository.js +31 -0
  63. package/src/Types/Auth.d.ts +120 -0
  64. package/src/Types/Auth.js +3 -0
  65. package/src/Types/Call.d.ts +14 -0
  66. package/src/Types/Call.js +3 -0
  67. package/src/Types/Chat.d.ts +134 -0
  68. package/src/Types/Chat.js +9 -0
  69. package/src/Types/Contact.d.ts +25 -0
  70. package/src/Types/Contact.js +3 -0
  71. package/src/Types/Events.d.ts +212 -0
  72. package/src/Types/Events.js +3 -0
  73. package/src/Types/GroupMetadata.d.ts +64 -0
  74. package/src/Types/GroupMetadata.js +3 -0
  75. package/src/Types/Label.d.ts +48 -0
  76. package/src/Types/Label.js +31 -0
  77. package/src/Types/LabelAssociation.d.ts +35 -0
  78. package/src/Types/LabelAssociation.js +13 -0
  79. package/src/Types/Message.d.ts +459 -0
  80. package/src/Types/Message.js +13 -0
  81. package/src/Types/Newsletter.d.ts +107 -0
  82. package/src/Types/Newsletter.js +38 -0
  83. package/src/Types/Product.d.ts +92 -0
  84. package/src/Types/Product.js +3 -0
  85. package/src/Types/Signal.d.ts +68 -0
  86. package/src/Types/Signal.js +3 -0
  87. package/src/Types/Socket.d.ts +120 -0
  88. package/src/Types/Socket.js +3 -0
  89. package/src/Types/State.d.ts +29 -0
  90. package/src/Types/State.js +3 -0
  91. package/src/Types/USync.d.ts +26 -0
  92. package/src/Types/USync.js +3 -0
  93. package/src/Types/index.d.ts +78 -0
  94. package/src/Types/index.js +47 -0
  95. package/src/Utils/auth-utils.d.ts +21 -0
  96. package/src/Utils/auth-utils.js +205 -0
  97. package/src/Utils/baileys-event-stream.d.ts +18 -0
  98. package/src/Utils/baileys-event-stream.js +70 -0
  99. package/src/Utils/business.d.ts +29 -0
  100. package/src/Utils/business.js +247 -0
  101. package/src/Utils/chat-utils.d.ts +82 -0
  102. package/src/Utils/chat-utils.js +774 -0
  103. package/src/Utils/crypto.d.ts +56 -0
  104. package/src/Utils/crypto.js +179 -0
  105. package/src/Utils/decode-wa-message.d.ts +41 -0
  106. package/src/Utils/decode-wa-message.js +236 -0
  107. package/src/Utils/event-buffer.d.ts +39 -0
  108. package/src/Utils/event-buffer.js +548 -0
  109. package/src/Utils/generics.d.ts +129 -0
  110. package/src/Utils/generics.js +584 -0
  111. package/src/Utils/history.d.ts +23 -0
  112. package/src/Utils/history.js +100 -0
  113. package/src/Utils/index.d.ts +19 -0
  114. package/src/Utils/index.js +39 -0
  115. package/src/Utils/link-preview.d.ts +23 -0
  116. package/src/Utils/link-preview.js +120 -0
  117. package/src/Utils/logger.d.ts +13 -0
  118. package/src/Utils/logger.js +7 -0
  119. package/src/Utils/lt-hash.d.ts +14 -0
  120. package/src/Utils/lt-hash.js +58 -0
  121. package/src/Utils/make-mutex.d.ts +9 -0
  122. package/src/Utils/make-mutex.js +49 -0
  123. package/src/Utils/messages-media.d.ts +129 -0
  124. package/src/Utils/messages-media.js +782 -0
  125. package/src/Utils/messages.d.ts +103 -0
  126. package/src/Utils/messages.js +1536 -0
  127. package/src/Utils/noise-handler.d.ts +20 -0
  128. package/src/Utils/noise-handler.js +155 -0
  129. package/src/Utils/process-message.d.ts +49 -0
  130. package/src/Utils/process-message.js +387 -0
  131. package/src/Utils/signal.d.ts +42 -0
  132. package/src/Utils/signal.js +166 -0
  133. package/src/Utils/use-mongo-file-auth-state.d.ts +6 -0
  134. package/src/Utils/use-mongo-file-auth-state.js +84 -0
  135. package/src/Utils/use-multi-file-auth-state.d.ts +13 -0
  136. package/src/Utils/use-multi-file-auth-state.js +131 -0
  137. package/src/Utils/use-single-file-auth-state.d.ts +13 -0
  138. package/src/Utils/use-single-file-auth-state.js +80 -0
  139. package/src/Utils/validate-connection.d.ts +13 -0
  140. package/src/Utils/validate-connection.js +186 -0
  141. package/src/WABinary/constants.d.ts +30 -0
  142. package/src/WABinary/constants.js +53 -0
  143. package/src/WABinary/decode.d.ts +9 -0
  144. package/src/WABinary/decode.js +288 -0
  145. package/src/WABinary/encode.d.ts +3 -0
  146. package/src/WABinary/encode.js +256 -0
  147. package/src/WABinary/generic-utils.d.ts +28 -0
  148. package/src/WABinary/generic-utils.js +149 -0
  149. package/src/WABinary/index.d.ts +5 -0
  150. package/src/WABinary/index.js +25 -0
  151. package/src/WABinary/jid-utils.d.ts +53 -0
  152. package/src/WABinary/jid-utils.js +92 -0
  153. package/src/WABinary/types.d.ts +22 -0
  154. package/src/WABinary/types.js +3 -0
  155. package/src/WAM/BinaryInfo.d.ts +16 -0
  156. package/src/WAM/BinaryInfo.js +17 -0
  157. package/src/WAM/constants.d.ts +47 -0
  158. package/src/WAM/constants.js +15371 -0
  159. package/src/WAM/encode.d.ts +3 -0
  160. package/src/WAM/encode.js +165 -0
  161. package/src/WAM/index.d.ts +3 -0
  162. package/src/WAM/index.js +23 -0
  163. package/src/WAUSync/Protocols/USyncBotProfileProtocol.d.ts +28 -0
  164. package/src/WAUSync/Protocols/USyncBotProfileProtocol.js +69 -0
  165. package/src/WAUSync/Protocols/USyncContactProtocol.d.ts +10 -0
  166. package/src/WAUSync/Protocols/USyncContactProtocol.js +36 -0
  167. package/src/WAUSync/Protocols/USyncDeviceProtocol.d.ts +26 -0
  168. package/src/WAUSync/Protocols/USyncDeviceProtocol.js +62 -0
  169. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +14 -0
  170. package/src/WAUSync/Protocols/USyncDisappearingModeProtocol.js +35 -0
  171. package/src/WAUSync/Protocols/USyncLIDProtocol.d.ts +9 -0
  172. package/src/WAUSync/Protocols/USyncLIDProtocol.js +30 -0
  173. package/src/WAUSync/Protocols/USyncStatusProtocol.d.ts +14 -0
  174. package/src/WAUSync/Protocols/USyncStatusProtocol.js +46 -0
  175. package/src/WAUSync/Protocols/index.d.ts +6 -0
  176. package/src/WAUSync/Protocols/index.js +26 -0
  177. package/src/WAUSync/USyncQuery.d.ts +31 -0
  178. package/src/WAUSync/USyncQuery.js +92 -0
  179. package/src/WAUSync/USyncUser.d.ts +12 -0
  180. package/src/WAUSync/USyncUser.js +30 -0
  181. package/src/WAUSync/index.d.ts +3 -0
  182. package/src/WAUSync/index.js +23 -0
  183. package/src/index.d.ts +13 -0
  184. package/src/index.js +33 -0
@@ -0,0 +1,19 @@
1
+ export * from './generics'
2
+ export * from './decode-wa-message'
3
+ export * from './messages'
4
+ export * from './messages-media'
5
+ export * from './validate-connection'
6
+ export * from './crypto'
7
+ export * from './signal'
8
+ export * from './noise-handler'
9
+ export * from './history'
10
+ export * from './chat-utils'
11
+ export * from './lt-hash'
12
+ export * from './auth-utils'
13
+ export * from './baileys-event-stream'
14
+ export * from './use-mongo-file-auth-state'
15
+ export * from './use-single-file-auth-state'
16
+ export * from './use-multi-file-auth-state'
17
+ export * from './link-preview'
18
+ export * from './event-buffer'
19
+ export * from './process-message'
@@ -0,0 +1,39 @@
1
+ "use strict"
2
+
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k
5
+ var desc = Object.getOwnPropertyDescriptor(m, k)
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k] } }
8
+ }
9
+ Object.defineProperty(o, k2, desc)
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k
12
+ o[k2] = m[k]
13
+ }))
14
+
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p)
17
+ }
18
+
19
+ Object.defineProperty(exports, "__esModule", { value: true })
20
+
21
+ __exportStar(require("./generics"), exports)
22
+ __exportStar(require("./decode-wa-message"), exports)
23
+ __exportStar(require("./messages"), exports)
24
+ __exportStar(require("./messages-media"), exports)
25
+ __exportStar(require("./validate-connection"), exports)
26
+ __exportStar(require("./crypto"), exports)
27
+ __exportStar(require("./signal"), exports)
28
+ __exportStar(require("./noise-handler"), exports)
29
+ __exportStar(require("./history"), exports)
30
+ __exportStar(require("./chat-utils"), exports)
31
+ __exportStar(require("./lt-hash"), exports)
32
+ __exportStar(require("./auth-utils"), exports)
33
+ __exportStar(require("./baileys-event-stream"), exports)
34
+ __exportStar(require("./use-mongo-file-auth-state"), exports)
35
+ __exportStar(require("./use-single-file-auth-state"), exports)
36
+ __exportStar(require("./use-multi-file-auth-state"), exports)
37
+ __exportStar(require("./link-preview"), exports)
38
+ __exportStar(require("./event-buffer"), exports)
39
+ __exportStar(require("./process-message"), exports)
@@ -0,0 +1,23 @@
1
+ import { AxiosRequestConfig } from 'axios'
2
+ import { WAMediaUploadFunction, WAUrlInfo } from '../Types'
3
+ import { ILogger } from './logger'
4
+
5
+ export type URLGenerationOptions = {
6
+ thumbnailWidth: number
7
+ fetchOpts: {
8
+ /** Timeout in ms */
9
+ timeout: number
10
+ proxyUrl?: string
11
+ headers?: AxiosRequestConfig<{}>['headers']
12
+ }
13
+ uploadImage?: WAMediaUploadFunction
14
+ logger?: ILogger
15
+ }
16
+
17
+ /**
18
+ * Given a piece of text, checks for any URL present, generates link preview for the same and returns it
19
+ * Return undefined if the fetch failed or no URL was found
20
+ * @param text first matched URL in text
21
+ * @returns the URL info required to generate link preview
22
+ */
23
+ export declare const getUrlInfo: (text: string, opts?: URLGenerationOptions) => Promise<WAUrlInfo | undefined>
@@ -0,0 +1,120 @@
1
+ "use strict"
2
+
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k
5
+ var desc = Object.getOwnPropertyDescriptor(m, k)
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k] } }
8
+ }
9
+ Object.defineProperty(o, k2, desc)
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k
12
+ o[k2] = m[k]
13
+ }))
14
+
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v })
17
+ }) : function(o, v) {
18
+ o["default"] = v
19
+ })
20
+
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod
23
+ var result = {}
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k)
25
+ __setModuleDefault(result, mod)
26
+ return result
27
+ }
28
+
29
+ Object.defineProperty(exports, "__esModule", { value: true })
30
+
31
+ const messages_1 = require("./messages")
32
+ const messages_media_1 = require("./messages-media")
33
+ const THUMBNAIL_WIDTH_PX = 192
34
+
35
+ /** Fetches an image and generates a thumbnail for it */
36
+ const getCompressedJpegThumbnail = async (url, { thumbnailWidth, fetchOpts }) => {
37
+ const stream = await messages_media_1.getHttpStream(url, fetchOpts)
38
+ const result = await messages_media_1.extractImageThumb(stream, thumbnailWidth)
39
+ return result
40
+ }
41
+
42
+ /**
43
+ * Given a piece of text, checks for any URL present, generates link preview for the same and returns it
44
+ * Return undefined if the fetch failed or no URL was found
45
+ * @param text first matched URL in text
46
+ * @returns the URL info required to generate link preview
47
+ */
48
+ const getUrlInfo = async (text, opts = { thumbnailWidth: THUMBNAIL_WIDTH_PX, fetchOpts: { timeout: 3000 }}) => {
49
+ try {
50
+ const retries = 0
51
+ const maxRetry = 5
52
+ const { getLinkPreview } = await Promise.resolve().then(() => __importStar(require('link-preview-js')))
53
+ let previewLink = text
54
+ if (!text.startsWith('https://') && !text.startsWith('http://')) {
55
+ previewLink = 'https://' + previewLink
56
+ }
57
+ const info = await getLinkPreview(previewLink, {
58
+ ...opts.fetchOpts,
59
+ followRedirects: 'follow',
60
+ handleRedirects: (baseURL, forwardedURL) => {
61
+ const urlObj = new URL(baseURL)
62
+ const forwardedURLObj = new URL(forwardedURL)
63
+ if (retries >= maxRetry) {
64
+ return false
65
+ }
66
+ if (forwardedURLObj.hostname === urlObj.hostname
67
+ || forwardedURLObj.hostname === 'www.' + urlObj.hostname
68
+ || 'www.' + forwardedURLObj.hostname === urlObj.hostname) {
69
+ retries + 1
70
+ return true
71
+ }
72
+ else {
73
+ return false
74
+ }
75
+ },
76
+ headers: opts.fetchOpts
77
+ })
78
+ if (info && 'title' in info && info.title) {
79
+ const [image] = info.images
80
+ const urlInfo = {
81
+ 'canonical-url': info.url,
82
+ 'matched-text': text,
83
+ title: info.title,
84
+ description: info.description,
85
+ originalThumbnailUrl: image
86
+ }
87
+ if (opts.uploadImage) {
88
+ const { imageMessage } = await messages_1.prepareWAMessageMedia({ image: { url: image } }, {
89
+ upload: opts.uploadImage,
90
+ mediaTypeOverride: 'thumbnail-link',
91
+ options: opts.fetchOpts
92
+ })
93
+ urlInfo.jpegThumbnail = imageMessage?.jpegThumbnail
94
+ ? Buffer.from(imageMessage.jpegThumbnail)
95
+ : undefined
96
+ urlInfo.highQualityThumbnail = imageMessage || undefined
97
+ }
98
+ else {
99
+ try {
100
+ urlInfo.jpegThumbnail = image
101
+ ? (await getCompressedJpegThumbnail(image, opts)).buffer
102
+ : undefined
103
+ }
104
+ catch (error) {
105
+ opts.logger?.debug({ err: error.stack, url: previewLink }, 'error in generating thumbnail')
106
+ }
107
+ }
108
+ return urlInfo
109
+ }
110
+ }
111
+ catch (error) {
112
+ if (!error.message.includes('receive a valid')) {
113
+ throw error
114
+ }
115
+ }
116
+ }
117
+
118
+ module.exports = {
119
+ getUrlInfo
120
+ }
@@ -0,0 +1,13 @@
1
+ export interface ILogger {
2
+ level: string
3
+ child(obj: Record<string, unknown>): ILogger
4
+ trace(obj: unknown, msg?: string): any
5
+ debug(obj: unknown, msg?: string): any
6
+ info(obj: unknown, msg?: string): any
7
+ warn(obj: unknown, msg?: string): any
8
+ error(obj: unknown, msg?: string): any
9
+ }
10
+
11
+ declare const _default: import("pino").Logger<never, boolean>
12
+
13
+ export default _default
@@ -0,0 +1,7 @@
1
+ "use strict"
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod }
4
+ }
5
+ Object.defineProperty(exports, "__esModule", { value: true })
6
+ const pino_1 = __importDefault(require("pino"))
7
+ exports.default = pino_1.default({ timestamp: () => `,"time":"${new Date().toJSON()}"` })
@@ -0,0 +1,14 @@
1
+ declare class d {
2
+ salt: string
3
+ constructor(e: string)
4
+ add(e: any, t: any): any
5
+ subtract(e: any, t: any): any
6
+ subtractThenAdd(e: any, t: any, r: any): any
7
+ _addSingle(e: any, t: any): Promise<ArrayBuffer>
8
+ _subtractSingle(e: any, t: any): Promise<ArrayBuffer>
9
+ performPointwiseWithOverflow(e: any, t: any, r: any): ArrayBuffer
10
+ }
11
+
12
+ export declare const LT_HASH_ANTI_TAMPERING: d
13
+
14
+ export {}
@@ -0,0 +1,58 @@
1
+ "use strict"
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true })
4
+
5
+ const crypto_1 = require("./crypto")
6
+
7
+ /**
8
+ * LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
9
+ * over a series of mutations. You can add/remove mutations and it'll return a hash equal to
10
+ * if the same series of mutations was made sequentially.
11
+ */
12
+ const o = 128
13
+ class d {
14
+ constructor(e) {
15
+ this.salt = e
16
+ }
17
+ add(e, t) {
18
+ var r = this
19
+ for (const item of t) {
20
+ e = r._addSingle(e, item)
21
+ }
22
+ return e
23
+ }
24
+ subtract(e, t) {
25
+ var r = this
26
+ for (const item of t) {
27
+ e = r._subtractSingle(e, item)
28
+ }
29
+ return e
30
+ }
31
+ subtractThenAdd(e, t, r) {
32
+ var n = this
33
+ return n.add(n.subtract(e, r), t)
34
+ }
35
+ async _addSingle(e, t) {
36
+ var r = this
37
+ const n = new Uint8Array(await crypto_1.hkdf(Buffer.from(t), o, { info: r.salt })).buffer
38
+ return r.performPointwiseWithOverflow(await e, n, ((e, t) => e + t))
39
+ }
40
+ async _subtractSingle(e, t) {
41
+ var r = this
42
+ const n = new Uint8Array(await crypto_1.hkdf(Buffer.from(t), o, { info: r.salt })).buffer
43
+ return r.performPointwiseWithOverflow(await e, n, ((e, t) => e - t))
44
+ }
45
+ performPointwiseWithOverflow(e, t, r) {
46
+ const n = new DataView(e), i = new DataView(t), a = new ArrayBuffer(n.byteLength), s = new DataView(a)
47
+ for (let e = 0; e < n.byteLength; e += 2) {
48
+ s.setUint16(e, r(n.getUint16(e, !0), i.getUint16(e, !0)), !0)
49
+ }
50
+ return a
51
+ }
52
+ }
53
+
54
+ const LT_HASH_ANTI_TAMPERING = new d('WhatsApp Patch Integrity')
55
+
56
+ module.exports = {
57
+ LT_HASH_ANTI_TAMPERING
58
+ }
@@ -0,0 +1,9 @@
1
+ export declare const makeMutex: () => {
2
+ mutex<T>(code: () => T | Promise<T>): Promise<T>
3
+ }
4
+
5
+ export type Mutex = ReturnType<typeof makeMutex>
6
+
7
+ export declare const makeKeyedMutex: () => {
8
+ mutex<T>(key: string, task: () => T | Promise<T>): Promise<T>
9
+ }
@@ -0,0 +1,49 @@
1
+ "use strict"
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true })
4
+
5
+ const makeMutex = () => {
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ let task = Promise.resolve()
8
+ let taskTimeout
9
+ return {
10
+ mutex(code) {
11
+ task = (async () => {
12
+ // wait for the previous task to complete
13
+ // if there is an error, we swallow so as to not block the queue
14
+ try {
15
+ await task
16
+ }
17
+ catch (_a) { }
18
+ try {
19
+ // execute the current task
20
+ const result = await code()
21
+ return result
22
+ }
23
+ finally {
24
+ clearTimeout(taskTimeout)
25
+ }
26
+ })()
27
+ // we replace the existing task, appending the new piece of execution to it
28
+ // so the next task will have to wait for this one to finish
29
+ return task
30
+ },
31
+ }
32
+ }
33
+
34
+ const makeKeyedMutex = () => {
35
+ const map = {}
36
+ return {
37
+ mutex(key, task) {
38
+ if (!map[key]) {
39
+ map[key] = makeMutex()
40
+ }
41
+ return map[key].mutex(task)
42
+ }
43
+ }
44
+ }
45
+
46
+ module.exports = {
47
+ makeMutex,
48
+ makeKeyedMutex
49
+ }
@@ -0,0 +1,129 @@
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
+
129
+ export {}