@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
@@ -1,20 +1,21 @@
1
- import { proto } from '../../WAProto'
2
- import { KeyPair } from '../Types'
3
- import { BinaryNode } from '../WABinary'
4
- import { ILogger } from './logger'
5
-
6
- export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }: {
7
- keyPair: KeyPair
8
- NOISE_HEADER: Uint8Array
9
- logger: ILogger
10
- routingInfo?: Buffer | undefined
11
- }) => {
12
- encrypt: (plaintext: Uint8Array) => Buffer
13
- decrypt: (ciphertext: Uint8Array) => Buffer
14
- authenticate: (data: Uint8Array) => void
15
- mixIntoKey: (data: Uint8Array) => Promise<void>
16
- finishInit: () => Promise<void>
17
- processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Promise<Buffer>
18
- encodeFrame: (data: Buffer | Uint8Array) => Buffer
19
- decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => Promise<void>
1
+ import { proto } from '@neelegirl/baileys/WAProto'
2
+ import { KeyPair } from '@neelegirl/baileys/lib/Types'
3
+ import { BinaryNode } from '@neelegirl/baileys/lib/WABinary'
4
+ import { ILogger } from '@neelegirl/baileys/lib/Utils/logger'
5
+
6
+ export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }: {
7
+ keyPair: KeyPair
8
+ NOISE_HEADER: Uint8Array
9
+ logger: ILogger
10
+ mobile: boolean
11
+ routingInfo?: Buffer | undefined
12
+ }) => {
13
+ encrypt: (plaintext: Uint8Array) => Buffer
14
+ decrypt: (ciphertext: Uint8Array) => Buffer
15
+ authenticate: (data: Uint8Array) => void
16
+ mixIntoKey: (data: Uint8Array) => Promise<void>
17
+ finishInit: () => Promise<void>
18
+ processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Promise<Buffer>
19
+ encodeFrame: (data: Buffer | Uint8Array) => Buffer
20
+ decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => Promise<void>
20
21
  }
@@ -1,155 +1,165 @@
1
- "use strict"
2
-
3
- Object.defineProperty(exports, "__esModule", { value: true })
4
-
5
- const boom_1 = require("@hapi/boom")
6
- const WAProto_1 = require("../../WAProto")
7
- const Defaults_1 = require("../Defaults")
8
- const WABinary_1 = require("../WABinary")
9
- const crypto_1 = require("./crypto")
10
-
11
- const generateIV = (counter) => {
12
- const iv = new ArrayBuffer(12)
13
- new DataView(iv).setUint32(8, counter)
14
- return new Uint8Array(iv)
15
- }
16
-
17
- const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }) => {
18
- logger = logger.child({ class: 'ns' })
19
- const authenticate = (data) => {
20
- if (!isFinished) {
21
- hash = crypto_1.sha256(Buffer.concat([hash, data]))
22
- }
23
- }
24
- const encrypt = (plaintext) => {
25
- const result = crypto_1.aesEncryptGCM(plaintext, encKey, generateIV(writeCounter), hash)
26
- writeCounter += 1
27
- authenticate(result)
28
- return result
29
- }
30
- const decrypt = (ciphertext) => {
31
- // before the handshake is finished, we use the same counter
32
- // after handshake, the counters are different
33
- const iv = generateIV(isFinished ? readCounter : writeCounter)
34
- const result = crypto_1.aesDecryptGCM(ciphertext, decKey, iv, hash)
35
- if (isFinished) {
36
- readCounter += 1
37
- }
38
- else {
39
- writeCounter += 1
40
- }
41
- authenticate(ciphertext)
42
- return result
43
- }
44
- const localHKDF = async (data) => {
45
- const key = await crypto_1.hkdf(Buffer.from(data), 64, { salt, info: '' })
46
- return [key.slice(0, 32), key.slice(32)]
47
- }
48
- const mixIntoKey = async (data) => {
49
- const [write, read] = await localHKDF(data)
50
- salt = write
51
- encKey = read
52
- decKey = read
53
- readCounter = 0
54
- writeCounter = 0
55
- }
56
- const finishInit = async () => {
57
- const [write, read] = await localHKDF(new Uint8Array(0))
58
- encKey = write
59
- decKey = read
60
- hash = Buffer.from([])
61
- readCounter = 0
62
- writeCounter = 0
63
- isFinished = true
64
- }
65
- const data = Buffer.from(Defaults_1.NOISE_MODE)
66
- let hash = data.byteLength === 32 ? data : crypto_1.sha256(data)
67
- let salt = hash
68
- let encKey = hash
69
- let decKey = hash
70
- let readCounter = 0
71
- let writeCounter = 0
72
- let isFinished = false
73
- let sentIntro = false
74
- let inBytes = Buffer.alloc(0)
75
- authenticate(NOISE_HEADER)
76
- authenticate(publicKey)
77
- return {
78
- encrypt,
79
- decrypt,
80
- authenticate,
81
- mixIntoKey,
82
- finishInit,
83
- processHandshake: async ({ serverHello }, noiseKey) => {
84
- authenticate(serverHello.ephemeral)
85
- await mixIntoKey(crypto_1.Curve.sharedKey(privateKey, serverHello.ephemeral))
86
- const decStaticContent = decrypt(serverHello.static)
87
- await mixIntoKey(crypto_1.Curve.sharedKey(privateKey, decStaticContent))
88
- const certDecoded = decrypt(serverHello.payload)
89
- const { intermediate: certIntermediate } = WAProto_1.proto.CertChain.decode(certDecoded)
90
- const { issuerSerial } = WAProto_1.proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details)
91
- if (issuerSerial !== Defaults_1.WA_CERT_DETAILS.SERIAL) {
92
- throw new boom_1.Boom('certification match failed', { statusCode: 400 })
93
- }
94
- const keyEnc = encrypt(noiseKey.public)
95
- await mixIntoKey(crypto_1.Curve.sharedKey(noiseKey.private, serverHello.ephemeral))
96
- return keyEnc
97
- },
98
- encodeFrame: (data) => {
99
- if (isFinished) {
100
- data = encrypt(data)
101
- }
102
- let header
103
- if (routingInfo) {
104
- header = Buffer.alloc(7)
105
- header.write('ED', 0, 'utf8')
106
- header.writeUint8(0, 2)
107
- header.writeUint8(1, 3)
108
- header.writeUint8(routingInfo.byteLength >> 16, 4)
109
- header.writeUint16BE(routingInfo.byteLength & 65535, 5)
110
- header = Buffer.concat([header, routingInfo, NOISE_HEADER])
111
- }
112
- else {
113
- header = Buffer.from(NOISE_HEADER)
114
- }
115
- const introSize = sentIntro ? 0 : header.length
116
- const frame = Buffer.alloc(introSize + 3 + data.byteLength)
117
- if (!sentIntro) {
118
- frame.set(header)
119
- sentIntro = true
120
- }
121
- frame.writeUInt8(data.byteLength >> 16, introSize)
122
- frame.writeUInt16BE(65535 & data.byteLength, introSize + 1)
123
- frame.set(data, introSize + 3)
124
- return frame
125
- },
126
- decodeFrame: async (newData, onFrame) => {
127
- // the binary protocol uses its own framing mechanism
128
- // on top of the WS frames
129
- // so we get this data and separate out the frames
130
- const getBytesSize = () => {
131
- if (inBytes.length >= 3) {
132
- return (inBytes.readUInt8() << 16) | inBytes.readUInt16BE(1)
133
- }
134
- }
135
- inBytes = Buffer.concat([inBytes, newData])
136
- logger.trace(`recv ${newData.length} bytes, total recv ${inBytes.length} bytes`)
137
- let size = getBytesSize()
138
- while (size && inBytes.length >= size + 3) {
139
- let frame = inBytes.slice(3, size + 3)
140
- inBytes = inBytes.slice(size + 3)
141
- if (isFinished) {
142
- const result = decrypt(frame)
143
- frame = await WABinary_1.decodeBinaryNode(result)
144
- }
145
- logger.trace({ msg: frame?.attrs?.id }, 'recv frame')
146
- onFrame(frame)
147
- size = getBytesSize()
148
- }
149
- }
150
- }
151
- }
152
-
153
- module.exports = {
154
- makeNoiseHandler
1
+ "use strict"
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true })
4
+
5
+ const boom_1 = require("@hapi/boom")
6
+ const WAProto_1 = require("../../WAProto")
7
+ const Defaults_1 = require("../Defaults")
8
+ const WABinary_1 = require("../WABinary")
9
+ const crypto_1 = require("./crypto")
10
+
11
+ const generateIV = (counter) => {
12
+ const iv = new ArrayBuffer(12)
13
+ new DataView(iv).setUint32(8, counter)
14
+ return new Uint8Array(iv)
15
+ }
16
+
17
+ const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, mobile, routingInfo }) => {
18
+ logger = logger.child({ class: 'ns' })
19
+ const authenticate = (data) => {
20
+ if (!isFinished) {
21
+ hash = crypto_1.sha256(Buffer.concat([hash, data]))
22
+ }
23
+ }
24
+ const encrypt = (plaintext) => {
25
+ const result = crypto_1.aesEncryptGCM(plaintext, encKey, generateIV(writeCounter), hash)
26
+ writeCounter += 1
27
+ authenticate(result)
28
+ return result
29
+ }
30
+ const decrypt = (ciphertext) => {
31
+ // before the handshake is finished, we use the same counter
32
+ // after handshake, the counters are different
33
+ const iv = generateIV(isFinished ? readCounter : writeCounter)
34
+ const result = crypto_1.aesDecryptGCM(ciphertext, decKey, iv, hash)
35
+ if (isFinished) {
36
+ readCounter += 1
37
+ }
38
+ else {
39
+ writeCounter += 1
40
+ }
41
+ authenticate(ciphertext)
42
+ return result
43
+ }
44
+ const localHKDF = async (data) => {
45
+ const key = await crypto_1.hkdf(Buffer.from(data), 64, { salt, info: '' })
46
+ return [key.slice(0, 32), key.slice(32)]
47
+ }
48
+ const mixIntoKey = async (data) => {
49
+ const [write, read] = await localHKDF(data)
50
+ salt = write
51
+ encKey = read
52
+ decKey = read
53
+ readCounter = 0
54
+ writeCounter = 0
55
+ }
56
+ const finishInit = async () => {
57
+ const [write, read] = await localHKDF(new Uint8Array(0))
58
+ encKey = write
59
+ decKey = read
60
+ hash = Buffer.from([])
61
+ readCounter = 0
62
+ writeCounter = 0
63
+ isFinished = true
64
+ }
65
+ const data = Buffer.from(Defaults_1.NOISE_MODE)
66
+ let hash = data.byteLength === 32 ? data : crypto_1.sha256(data)
67
+ let salt = hash
68
+ let encKey = hash
69
+ let decKey = hash
70
+ let readCounter = 0
71
+ let writeCounter = 0
72
+ let isFinished = false
73
+ let sentIntro = false
74
+ let inBytes = Buffer.alloc(0)
75
+ authenticate(NOISE_HEADER)
76
+ authenticate(publicKey)
77
+ return {
78
+ encrypt,
79
+ decrypt,
80
+ authenticate,
81
+ mixIntoKey,
82
+ finishInit,
83
+ processHandshake: async ({ serverHello }, noiseKey) => {
84
+ authenticate(serverHello.ephemeral)
85
+ await mixIntoKey(crypto_1.Curve.sharedKey(privateKey, serverHello.ephemeral))
86
+ const decStaticContent = decrypt(serverHello.static)
87
+ await mixIntoKey(crypto_1.Curve.sharedKey(privateKey, decStaticContent))
88
+ const certDecoded = decrypt(serverHello.payload)
89
+ const { intermediate: certIntermediate } = WAProto_1.proto.CertChain.decode(certDecoded)
90
+ const { issuerSerial } = WAProto_1.proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details)
91
+ if (issuerSerial !== Defaults_1.WA_CERT_DETAILS.SERIAL) {
92
+ throw new boom_1.Boom('certification match failed', { statusCode: 400 })
93
+ }
94
+ const keyEnc = encrypt(noiseKey.public)
95
+ await mixIntoKey(crypto_1.Curve.sharedKey(noiseKey.private, serverHello.ephemeral))
96
+ if (mobile) {
97
+ WAProto_1.proto.CertChain.NoiseCertificate.decode(certDecoded);
98
+ }
99
+ else {
100
+ const { intermediate: certIntermediate } = WAProto_1.proto.CertChain.decode(certDecoded);
101
+ const { issuerSerial } = WAProto_1.proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details);
102
+ if (issuerSerial !== Defaults_1.WA_CERT_DETAILS.SERIAL) {
103
+ throw new boom_1.Boom('certification match failed', { statusCode: 400 });
104
+ }
105
+ }
106
+ return keyEnc
107
+ },
108
+ encodeFrame: (data) => {
109
+ if (isFinished) {
110
+ data = encrypt(data)
111
+ }
112
+ let header
113
+ if (routingInfo) {
114
+ header = Buffer.alloc(7)
115
+ header.write('ED', 0, 'utf8')
116
+ header.writeUint8(0, 2)
117
+ header.writeUint8(1, 3)
118
+ header.writeUint8(routingInfo.byteLength >> 16, 4)
119
+ header.writeUint16BE(routingInfo.byteLength & 65535, 5)
120
+ header = Buffer.concat([header, routingInfo, NOISE_HEADER])
121
+ }
122
+ else {
123
+ header = Buffer.from(NOISE_HEADER)
124
+ }
125
+ const introSize = sentIntro ? 0 : header.length
126
+ const frame = Buffer.alloc(introSize + 3 + data.byteLength)
127
+ if (!sentIntro) {
128
+ frame.set(header)
129
+ sentIntro = true
130
+ }
131
+ frame.writeUInt8(data.byteLength >> 16, introSize)
132
+ frame.writeUInt16BE(65535 & data.byteLength, introSize + 1)
133
+ frame.set(data, introSize + 3)
134
+ return frame
135
+ },
136
+ decodeFrame: async (newData, onFrame) => {
137
+ // the binary protocol uses its own framing mechanism
138
+ // on top of the WS frames
139
+ // so we get this data and separate out the frames
140
+ const getBytesSize = () => {
141
+ if (inBytes.length >= 3) {
142
+ return (inBytes.readUInt8() << 16) | inBytes.readUInt16BE(1)
143
+ }
144
+ }
145
+ inBytes = Buffer.concat([inBytes, newData])
146
+ logger.trace(`recv ${newData.length} bytes, total recv ${inBytes.length} bytes`)
147
+ let size = getBytesSize()
148
+ while (size && inBytes.length >= size + 3) {
149
+ let frame = inBytes.slice(3, size + 3)
150
+ inBytes = inBytes.slice(size + 3)
151
+ if (isFinished) {
152
+ const result = decrypt(frame)
153
+ frame = await WABinary_1.decodeBinaryNode(result)
154
+ }
155
+ logger.trace({ msg: frame?.attrs?.id }, 'recv frame')
156
+ onFrame(frame)
157
+ size = getBytesSize()
158
+ }
159
+ }
160
+ }
161
+ }
162
+
163
+ module.exports = {
164
+ makeNoiseHandler
155
165
  }
@@ -1,49 +1,49 @@
1
- import { AxiosRequestConfig } from 'axios'
2
- import { proto } from '../../WAProto'
3
- import { AuthenticationCreds, BaileysEventEmitter, CacheStore, SignalKeyStoreWithTransaction, SocketConfig } from '../Types'
4
- import { ILogger } from './logger'
5
-
6
- type ProcessMessageContext = {
7
- shouldProcessHistoryMsg: boolean
8
- placeholderResendCache?: CacheStore
9
- creds: AuthenticationCreds
10
- keyStore: SignalKeyStoreWithTransaction
11
- ev: BaileysEventEmitter
12
- getMessage: SocketConfig['getMessage']
13
- logger?: ILogger
14
- options: AxiosRequestConfig<{}>
15
- }
16
-
17
- /** Cleans a received message to further processing */
18
- export declare const cleanMessage: (message: proto.IWebMessageInfo, meId: string) => void
19
-
20
- export declare const isRealMessage: (message: proto.IWebMessageInfo, meId: string) => boolean | undefined
21
-
22
- export declare const shouldIncrementChatUnread: (message: proto.IWebMessageInfo) => boolean
23
-
24
- /**
25
- * Get the ID of the chat from the given key.
26
- * Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant
27
- */
28
- export declare const getChatId: ({ remoteJid, participant, fromMe }: proto.IMessageKey) => string
29
-
30
- type PollContext = {
31
- /** normalised jid of the person that created the poll */
32
- pollCreatorJid: string
33
- /** ID of the poll creation message */
34
- pollMsgId: string
35
- /** poll creation message enc key */
36
- pollEncKey: Uint8Array
37
- /** jid of the person that voted */
38
- voterJid: string
39
- }
40
-
41
- /**
42
- * Decrypt a poll vote
43
- * @param vote encrypted vote
44
- * @param ctx additional info about the poll required for decryption
45
- * @returns list of SHA256 options
46
- */
47
- export declare function decryptPollVote({ encPayload, encIv }: proto.Message.IPollEncValue, { pollCreatorJid, pollMsgId, pollEncKey, voterJid, }: PollContext): proto.Message.PollVoteMessage
48
-
1
+ import { AxiosRequestConfig } from 'axios'
2
+ import { proto } from '@neelegirl/baileys/WAProto'
3
+ import { AuthenticationCreds, BaileysEventEmitter, CacheStore, SignalKeyStoreWithTransaction, SocketConfig } from '@neelegirl/baileys/lib/Types'
4
+ import { ILogger } from '@neelegirl/baileys/lib/Utils/logger'
5
+
6
+ type ProcessMessageContext = {
7
+ shouldProcessHistoryMsg: boolean
8
+ placeholderResendCache?: CacheStore
9
+ creds: AuthenticationCreds
10
+ keyStore: SignalKeyStoreWithTransaction
11
+ ev: BaileysEventEmitter
12
+ getMessage: SocketConfig['getMessage']
13
+ logger?: ILogger
14
+ options: AxiosRequestConfig<{}>
15
+ }
16
+
17
+ /** Cleans a received message to further processing */
18
+ export declare const cleanMessage: (message: proto.IWebMessageInfo, meId: string) => void
19
+
20
+ export declare const isRealMessage: (message: proto.IWebMessageInfo, meId: string) => boolean | undefined
21
+
22
+ export declare const shouldIncrementChatUnread: (message: proto.IWebMessageInfo) => boolean
23
+
24
+ /**
25
+ * Get the ID of the chat from the given key.
26
+ * Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant
27
+ */
28
+ export declare const getChatId: ({ remoteJid, participant, fromMe }: proto.IMessageKey) => string
29
+
30
+ type PollContext = {
31
+ /** normalised jid of the person that created the poll */
32
+ pollCreatorJid: string
33
+ /** ID of the poll creation message */
34
+ pollMsgId: string
35
+ /** poll creation message enc key */
36
+ pollEncKey: Uint8Array
37
+ /** jid of the person that voted */
38
+ voterJid: string
39
+ }
40
+
41
+ /**
42
+ * Decrypt a poll vote
43
+ * @param vote encrypted vote
44
+ * @param ctx additional info about the poll required for decryption
45
+ * @returns list of SHA256 options
46
+ */
47
+ export declare function decryptPollVote({ encPayload, encIv }: proto.Message.IPollEncValue, { pollCreatorJid, pollMsgId, pollEncKey, voterJid, }: PollContext): proto.Message.PollVoteMessage
48
+
49
49
  export declare const processMessage: (message: proto.IWebMessageInfo, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, keyStore, logger, options, getMessage }: ProcessMessageContext) => Promise<void>