@pontalabs/baileys 1.0.6 → 1.0.8

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 (185) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +839 -267
  3. package/WAProto/GenerateStatics.sh +4 -3
  4. package/WAProto/WAProto.proto +511 -1215
  5. package/WAProto/index.d.ts +55 -14017
  6. package/WAProto/index.js +29 -97689
  7. package/lib/Defaults/index.d.ts +74 -72
  8. package/lib/Defaults/index.js +108 -94
  9. package/lib/Signal/Group/ciphertext-message.d.ts +7 -8
  10. package/lib/Signal/Group/ciphertext-message.js +16 -9
  11. package/lib/Signal/Group/group-session-builder.d.ts +13 -11
  12. package/lib/Signal/Group/group-session-builder.js +61 -19
  13. package/lib/Signal/Group/group_cipher.d.ts +16 -14
  14. package/lib/Signal/Group/group_cipher.js +70 -41
  15. package/lib/Signal/Group/index.d.ts +11 -12
  16. package/lib/Signal/Group/index.js +61 -12
  17. package/lib/Signal/Group/keyhelper.d.ts +14 -9
  18. package/lib/Signal/Group/keyhelper.js +58 -10
  19. package/lib/Signal/Group/sender-chain-key.d.ts +13 -13
  20. package/lib/Signal/Group/sender-chain-key.js +34 -13
  21. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -16
  22. package/lib/Signal/Group/sender-key-distribution-message.js +36 -28
  23. package/lib/Signal/Group/sender-key-message.d.ts +18 -18
  24. package/lib/Signal/Group/sender-key-message.js +45 -38
  25. package/lib/Signal/Group/sender-key-name.d.ts +15 -14
  26. package/lib/Signal/Group/sender-key-name.js +31 -20
  27. package/lib/Signal/Group/sender-key-record.d.ts +25 -24
  28. package/lib/Signal/Group/sender-key-record.js +35 -18
  29. package/lib/Signal/Group/sender-key-state.d.ts +34 -29
  30. package/lib/Signal/Group/sender-key-state.js +100 -37
  31. package/lib/Signal/Group/sender-message-key.d.ts +10 -11
  32. package/lib/Signal/Group/sender-message-key.js +22 -15
  33. package/lib/Signal/libsignal.d.ts +8 -5
  34. package/lib/Signal/libsignal.js +142 -288
  35. package/lib/Signal/lid-mapping.d.ts +28 -23
  36. package/lib/Signal/lid-mapping.js +184 -277
  37. package/lib/Socket/Client/index.d.ts +2 -3
  38. package/lib/Socket/Client/index.js +22 -3
  39. package/lib/Socket/Client/types.d.ts +15 -15
  40. package/lib/Socket/Client/types.js +15 -8
  41. package/lib/Socket/Client/websocket.d.ts +12 -12
  42. package/lib/Socket/Client/websocket.js +37 -29
  43. package/lib/Socket/business.d.ts +178 -208
  44. package/lib/Socket/business.js +127 -91
  45. package/lib/Socket/chats.d.ts +93 -120
  46. package/lib/Socket/chats.js +652 -727
  47. package/lib/Socket/community.js +10 -2
  48. package/lib/Socket/groups.d.ts +111 -143
  49. package/lib/Socket/groups.js +186 -165
  50. package/lib/Socket/index.d.ts +183 -252
  51. package/lib/Socket/index.js +18 -38
  52. package/lib/Socket/messages-recv.d.ts +167 -196
  53. package/lib/Socket/messages-recv.js +1567 -1443
  54. package/lib/Socket/messages-send.d.ts +158 -192
  55. package/lib/Socket/messages-send.js +1208 -1102
  56. package/lib/Socket/newsletter.d.ts +138 -163
  57. package/lib/Socket/newsletter.js +249 -153
  58. package/lib/Socket/socket.d.ts +36 -50
  59. package/lib/Socket/socket.js +820 -749
  60. package/lib/Store/index.d.ts +4 -4
  61. package/lib/Store/index.js +24 -4
  62. package/lib/Store/make-in-memory-store.d.ts +104 -44
  63. package/lib/Store/make-in-memory-store.js +213 -199
  64. package/lib/Store/make-ordered-dictionary.d.ts +12 -13
  65. package/lib/Store/make-ordered-dictionary.js +45 -38
  66. package/lib/Store/object-repository.d.ts +10 -11
  67. package/lib/Store/object-repository.js +16 -9
  68. package/lib/Types/Auth.d.ts +97 -93
  69. package/lib/Types/Auth.js +3 -2
  70. package/lib/Types/Bussines.js +3 -2
  71. package/lib/Types/Call.d.ts +13 -14
  72. package/lib/Types/Call.js +3 -2
  73. package/lib/Types/Chat.d.ts +97 -78
  74. package/lib/Types/Chat.js +9 -8
  75. package/lib/Types/Contact.d.ts +9 -12
  76. package/lib/Types/Contact.js +3 -2
  77. package/lib/Types/Events.d.ts +176 -206
  78. package/lib/Types/Events.js +3 -2
  79. package/lib/Types/GroupMetadata.d.ts +48 -53
  80. package/lib/Types/GroupMetadata.js +3 -2
  81. package/lib/Types/Label.d.ts +14 -13
  82. package/lib/Types/Label.js +30 -24
  83. package/lib/Types/LabelAssociation.d.ts +20 -15
  84. package/lib/Types/LabelAssociation.js +12 -6
  85. package/lib/Types/Message.d.ts +412 -248
  86. package/lib/Types/Message.js +19 -17
  87. package/lib/Types/Product.d.ts +71 -58
  88. package/lib/Types/Product.js +3 -2
  89. package/lib/Types/Signal.d.ts +82 -71
  90. package/lib/Types/Signal.js +3 -2
  91. package/lib/Types/Socket.d.ts +81 -76
  92. package/lib/Types/Socket.js +3 -3
  93. package/lib/Types/State.d.ts +19 -75
  94. package/lib/Types/State.js +14 -56
  95. package/lib/Types/USync.d.ts +8 -8
  96. package/lib/Types/USync.js +3 -2
  97. package/lib/Types/index.d.ts +62 -47
  98. package/lib/Types/index.js +50 -26
  99. package/lib/Utils/auth-utils.d.ts +10 -13
  100. package/lib/Utils/auth-utils.js +472 -213
  101. package/lib/Utils/business.d.ts +20 -14
  102. package/lib/Utils/business.js +134 -110
  103. package/lib/Utils/chat-utils.d.ts +70 -88
  104. package/lib/Utils/chat-utils.js +403 -466
  105. package/lib/Utils/crypto.d.ts +46 -27
  106. package/lib/Utils/crypto.js +188 -117
  107. package/lib/Utils/decode-wa-message.d.ts +45 -58
  108. package/lib/Utils/decode-wa-message.js +311 -212
  109. package/lib/Utils/event-buffer.d.ts +17 -14
  110. package/lib/Utils/event-buffer.js +296 -321
  111. package/lib/Utils/generics.d.ts +92 -66
  112. package/lib/Utils/generics.js +436 -270
  113. package/lib/Utils/history.d.ts +23 -24
  114. package/lib/Utils/history.js +76 -106
  115. package/lib/Utils/index.d.ts +21 -24
  116. package/lib/Utils/index.js +41 -24
  117. package/lib/Utils/link-preview.d.ts +14 -12
  118. package/lib/Utils/link-preview.js +75 -40
  119. package/lib/Utils/logger.d.ts +11 -10
  120. package/lib/Utils/logger.js +7 -3
  121. package/lib/Utils/lt-hash.d.ts +14 -8
  122. package/lib/Utils/lt-hash.js +53 -3
  123. package/lib/Utils/make-mutex.d.ts +7 -7
  124. package/lib/Utils/make-mutex.js +44 -28
  125. package/lib/Utils/message-retry-manager.d.ts +88 -115
  126. package/lib/Utils/message-retry-manager.js +160 -265
  127. package/lib/Utils/messages-media.d.ts +107 -105
  128. package/lib/Utils/messages-media.js +619 -548
  129. package/lib/Utils/messages.d.ts +66 -52
  130. package/lib/Utils/messages.js +1558 -1730
  131. package/lib/Utils/noise-handler.d.ts +18 -18
  132. package/lib/Utils/noise-handler.js +130 -176
  133. package/lib/Utils/process-message.d.ts +32 -43
  134. package/lib/Utils/process-message.js +282 -484
  135. package/lib/Utils/rich-message-utils.js +724 -1220
  136. package/lib/Utils/signal.d.ts +32 -37
  137. package/lib/Utils/signal.js +105 -140
  138. package/lib/Utils/use-multi-file-auth-state.d.ts +5 -5
  139. package/lib/Utils/use-multi-file-auth-state.js +120 -70
  140. package/lib/Utils/use-single-file-auth-state.d.ts +13 -11
  141. package/lib/Utils/use-single-file-auth-state.js +66 -92
  142. package/lib/Utils/validate-connection.d.ts +13 -11
  143. package/lib/Utils/validate-connection.js +113 -128
  144. package/lib/WABinary/constants.d.ts +27 -25
  145. package/lib/WABinary/constants.js +1292 -1451
  146. package/lib/WABinary/decode.d.ts +9 -7
  147. package/lib/WABinary/decode.js +189 -163
  148. package/lib/WABinary/encode.d.ts +3 -3
  149. package/lib/WABinary/encode.js +155 -110
  150. package/lib/WABinary/generic-utils.d.ts +27 -14
  151. package/lib/WABinary/generic-utils.js +105 -177
  152. package/lib/WABinary/index.d.ts +5 -6
  153. package/lib/WABinary/index.js +25 -6
  154. package/lib/WABinary/jid-utils.d.ts +54 -41
  155. package/lib/WABinary/jid-utils.js +152 -83
  156. package/lib/WABinary/types.d.ts +13 -10
  157. package/lib/WABinary/types.js +3 -2
  158. package/lib/WAM/BinaryInfo.d.ts +15 -8
  159. package/lib/WAM/BinaryInfo.js +14 -7
  160. package/lib/WAM/constants.d.ts +37 -30
  161. package/lib/WAM/constants.js +11983 -19465
  162. package/lib/WAM/encode.d.ts +3 -3
  163. package/lib/WAM/encode.js +109 -95
  164. package/lib/WAM/index.d.ts +3 -4
  165. package/lib/WAM/index.js +23 -4
  166. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -9
  167. package/lib/WAUSync/Protocols/USyncContactProtocol.js +21 -37
  168. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -19
  169. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +26 -18
  170. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -11
  171. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +20 -12
  172. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -11
  173. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +24 -16
  174. package/lib/WAUSync/Protocols/index.d.ts +6 -6
  175. package/lib/WAUSync/Protocols/index.js +26 -6
  176. package/lib/WAUSync/USyncQuery.d.ts +28 -27
  177. package/lib/WAUSync/USyncQuery.js +62 -68
  178. package/lib/WAUSync/USyncUser.d.ts +10 -15
  179. package/lib/WAUSync/USyncUser.js +19 -20
  180. package/lib/WAUSync/index.d.ts +3 -4
  181. package/lib/WAUSync/index.js +23 -4
  182. package/lib/index.d.ts +12 -11
  183. package/lib/index.js +39 -12
  184. package/package.json +43 -87
  185. package/engine-requirements.js +0 -10
@@ -1,8 +1,58 @@
1
- import { LTHashAntiTampering } from 'whatsapp-rust-bridge';
1
+ "use strict"
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true })
4
+
5
+ const crypto_1 = require("./crypto")
6
+
2
7
  /**
3
8
  * LT Hash is a summation based hash algorithm that maintains the integrity of a piece of data
4
9
  * over a series of mutations. You can add/remove mutations and it'll return a hash equal to
5
10
  * if the same series of mutations was made sequentially.
6
11
  */
7
- export const LT_HASH_ANTI_TAMPERING = new LTHashAntiTampering();
8
- //# sourceMappingURL=lt-hash.js.map
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
+ }
@@ -1,9 +1,9 @@
1
1
  export declare const makeMutex: () => {
2
- mutex<T>(code: () => Promise<T> | T): Promise<T>;
3
- };
4
- export type Mutex = ReturnType<typeof makeMutex>;
2
+ mutex<T>(code: () => T | Promise<T>): Promise<T>
3
+ }
4
+
5
+ export type Mutex = ReturnType<typeof makeMutex>
6
+
5
7
  export declare const makeKeyedMutex: () => {
6
- mutex<T>(key: string, task: () => Promise<T> | T): Promise<T>;
7
- };
8
- export type KeyedMutex = ReturnType<typeof makeKeyedMutex>;
9
- //# sourceMappingURL=make-mutex.d.ts.map
8
+ mutex<T>(key: string, task: () => T | Promise<T>): Promise<T>
9
+ }
@@ -1,33 +1,49 @@
1
- import { Mutex as AsyncMutex } from 'async-mutex';
2
- export const makeMutex = () => {
3
- const mutex = new AsyncMutex();
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
4
9
  return {
5
10
  mutex(code) {
6
- return mutex.runExclusive(code);
7
- }
8
- };
9
- };
10
- export const makeKeyedMutex = () => {
11
- const map = new Map();
12
- return {
13
- async mutex(key, task) {
14
- let entry = map.get(key);
15
- if (!entry) {
16
- entry = { mutex: new AsyncMutex(), refCount: 0 };
17
- map.set(key, entry);
18
- }
19
- entry.refCount++;
20
- try {
21
- return await entry.mutex.runExclusive(task);
22
- }
23
- finally {
24
- entry.refCount--;
25
- // only delete it if this is still the current entry
26
- if (entry.refCount === 0 && map.get(key) === entry) {
27
- map.delete(key);
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
28
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()
29
40
  }
41
+ return map[key].mutex(task)
30
42
  }
31
- };
32
- };
33
- //# sourceMappingURL=make-mutex.js.map
43
+ }
44
+ }
45
+
46
+ module.exports = {
47
+ makeMutex,
48
+ makeKeyedMutex
49
+ }
@@ -1,115 +1,88 @@
1
- import type { proto } from '../../WAProto/index.js';
2
- import type { ILogger } from './logger.js';
3
- export interface RecentMessageKey {
4
- to: string;
5
- id: string;
6
- }
7
- export interface RecentMessage {
8
- message: proto.IMessage;
9
- timestamp: number;
10
- }
11
- export interface SessionRecreateHistory {
12
- [jid: string]: number;
13
- }
14
- export interface RetryCounter {
15
- [messageId: string]: number;
16
- }
17
- export type PendingPhoneRequest = Record<string, ReturnType<typeof setTimeout>>;
18
- export interface RetryStatistics {
19
- totalRetries: number;
20
- successfulRetries: number;
21
- failedRetries: number;
22
- mediaRetries: number;
23
- sessionRecreations: number;
24
- phoneRequests: number;
25
- }
26
- export declare enum RetryReason {
27
- UnknownError = 0,
28
- SignalErrorNoSession = 1,
29
- SignalErrorInvalidKey = 2,
30
- SignalErrorInvalidKeyId = 3,
31
- /** MAC verification failed - most common cause of decryption failures */
32
- SignalErrorInvalidMessage = 4,
33
- SignalErrorInvalidSignature = 5,
34
- SignalErrorFutureMessage = 6,
35
- /** Explicit MAC failure - session is definitely out of sync */
36
- SignalErrorBadMac = 7,
37
- SignalErrorInvalidSession = 8,
38
- SignalErrorInvalidMsgKey = 9,
39
- BadBroadcastEphemeralSetting = 10,
40
- UnknownCompanionNoPrekey = 11,
41
- AdvFailure = 12,
42
- StatusRevokeDelay = 13
43
- }
44
- export declare class MessageRetryManager {
45
- private logger;
46
- private recentMessagesMap;
47
- private messageKeyIndex;
48
- private sessionRecreateHistory;
49
- private retryCounters;
50
- private baseKeys;
51
- private pendingPhoneRequests;
52
- private readonly maxMsgRetryCount;
53
- private statistics;
54
- constructor(logger: ILogger, maxMsgRetryCount: number);
55
- /**
56
- * Add a recent message to the cache for retry handling
57
- */
58
- addRecentMessage(to: string, id: string, message: proto.IMessage): void;
59
- /**
60
- * Get a recent message from the cache
61
- */
62
- getRecentMessage(to: string, id: string): RecentMessage | undefined;
63
- /**
64
- * Check if a session should be recreated based on retry count, history, and error code.
65
- * MAC errors (codes 4 and 7) trigger immediate session recreation regardless of timeout.
66
- */
67
- shouldRecreateSession(jid: string, hasSession: boolean, errorCode?: RetryReason): {
68
- reason: string;
69
- recreate: boolean;
70
- };
71
- /**
72
- * Parse error code from retry receipt's retry node.
73
- * Returns undefined if no error code is present.
74
- */
75
- parseRetryErrorCode(errorAttr: string | undefined): RetryReason | undefined;
76
- /**
77
- * Check if an error code indicates a MAC failure
78
- */
79
- isMacError(errorCode: RetryReason | undefined): boolean;
80
- /**
81
- * Increment retry counter for a message
82
- */
83
- incrementRetryCount(messageId: string): number;
84
- /**
85
- * Get retry count for a message
86
- */
87
- getRetryCount(messageId: string): number;
88
- /**
89
- * Check if message has exceeded maximum retry attempts
90
- */
91
- hasExceededMaxRetries(messageId: string): boolean;
92
- /**
93
- * Mark retry as successful
94
- */
95
- markRetrySuccess(messageId: string): void;
96
- /**
97
- * Mark retry as failed
98
- */
99
- markRetryFailed(messageId: string): void;
100
- /**
101
- * Schedule a phone request with delay
102
- */
103
- schedulePhoneRequest(messageId: string, callback: () => void, delay?: number): void;
104
- /**
105
- * Cancel pending phone request
106
- */
107
- cancelPendingPhoneRequest(messageId: string): void;
108
- clear(): void;
109
- saveBaseKey(addr: string, msgId: string, baseKey: Uint8Array): void;
110
- hasSameBaseKey(addr: string, msgId: string, baseKey: Uint8Array): boolean;
111
- deleteBaseKey(addr: string, msgId: string): void;
112
- private keyToString;
113
- private removeRecentMessage;
114
- }
115
- //# sourceMappingURL=message-retry-manager.d.ts.map
1
+ import { proto } from '../../WAProto'
2
+ import { ILogger } from './logger'
3
+
4
+ export interface RecentMessageKey {
5
+ to: string
6
+ id: string
7
+ }
8
+
9
+ export interface RecentMessage {
10
+ message: proto.IMessage
11
+ timestamp: number
12
+ }
13
+
14
+ export interface SessionRecreateHistory {
15
+ [jid: string]: number
16
+ }
17
+
18
+ export interface RetryCounter {
19
+ [messageId: string]: number
20
+ }
21
+
22
+ export interface PendingPhoneRequest {
23
+ [messageId: string]: NodeJS.Timeout
24
+ }
25
+
26
+ export interface RetryStatistics {
27
+ totalRetries: number
28
+ successfulRetries: number
29
+ failedRetries: number
30
+ mediaRetries: number
31
+ sessionRecreations: number
32
+ phoneRequests: number
33
+ }
34
+
35
+ export declare class MessageRetryManager {
36
+ private logger
37
+ private recentMessagesMap
38
+ private sessionRecreateHistory
39
+ private retryCounters
40
+ private pendingPhoneRequests
41
+ private readonly maxMsgRetryCount
42
+ private statistics
43
+ constructor(logger: ILogger, maxMsgRetryCount: number)
44
+ /**
45
+ * Add a recent message to the cache for retry handling
46
+ */
47
+ addRecentMessage(to: string, id: string, message: proto.IMessage): void
48
+ /**
49
+ * Get a recent message from the cache
50
+ */
51
+ getRecentMessage(to: string, id: string): RecentMessage | undefined
52
+ /**
53
+ * Check if a session should be recreated based on retry count and history
54
+ */
55
+ shouldRecreateSession(jid: string, retryCount: number, hasSession: boolean): {
56
+ reason: string
57
+ recreate: boolean
58
+ }
59
+ /**
60
+ * Increment retry counter for a message
61
+ */
62
+ incrementRetryCount(messageId: string): number
63
+ /**
64
+ * Get retry count for a message
65
+ */
66
+ getRetryCount(messageId: string): number
67
+ /**
68
+ * Check if message has exceeded maximum retry attempts
69
+ */
70
+ hasExceededMaxRetries(messageId: string): boolean
71
+ /**
72
+ * Mark retry as successful
73
+ */
74
+ markRetrySuccess(messageId: string): void
75
+ /**
76
+ * Mark retry as failed
77
+ */
78
+ markRetryFailed(messageId: string): void
79
+ /**
80
+ * Schedule a phone request with delay
81
+ */
82
+ schedulePhoneRequest(messageId: string, callback: () => void, delay?: number): void
83
+ /**
84
+ * Cancel pending phone request
85
+ */
86
+ cancelPendingPhoneRequest(messageId: string): void
87
+ private keyToString
88
+ }