@d0v3riz/baileys 7.0.0-rc.8 → 7.0.0-rc13

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 (213) hide show
  1. package/README.md +21 -15
  2. package/WAProto/fix-imports.js +74 -18
  3. package/WAProto/index.js +201 -160
  4. package/lib/Defaults/index.d.ts +19 -6
  5. package/lib/Defaults/index.d.ts.map +1 -1
  6. package/lib/Defaults/index.js +24 -10
  7. package/lib/Defaults/index.js.map +1 -1
  8. package/lib/Signal/libsignal.d.ts.map +1 -1
  9. package/lib/Signal/libsignal.js +105 -16
  10. package/lib/Signal/libsignal.js.map +1 -1
  11. package/lib/Signal/lid-mapping.d.ts +8 -8
  12. package/lib/Signal/lid-mapping.d.ts.map +1 -1
  13. package/lib/Signal/lid-mapping.js +176 -70
  14. package/lib/Signal/lid-mapping.js.map +1 -1
  15. package/lib/Socket/Client/websocket.d.ts +1 -1
  16. package/lib/Socket/Client/websocket.d.ts.map +1 -1
  17. package/lib/Socket/Client/websocket.js +5 -1
  18. package/lib/Socket/Client/websocket.js.map +1 -1
  19. package/lib/Socket/business.d.ts +36 -8
  20. package/lib/Socket/business.d.ts.map +1 -1
  21. package/lib/Socket/business.js +11 -8
  22. package/lib/Socket/business.js.map +1 -1
  23. package/lib/Socket/chats.d.ts +29 -5
  24. package/lib/Socket/chats.d.ts.map +1 -1
  25. package/lib/Socket/chats.js +292 -63
  26. package/lib/Socket/chats.js.map +1 -1
  27. package/lib/Socket/communities.d.ts +36 -8
  28. package/lib/Socket/communities.d.ts.map +1 -1
  29. package/lib/Socket/groups.d.ts +27 -5
  30. package/lib/Socket/groups.d.ts.map +1 -1
  31. package/lib/Socket/groups.js +20 -0
  32. package/lib/Socket/groups.js.map +1 -1
  33. package/lib/Socket/index.d.ts +36 -8
  34. package/lib/Socket/index.d.ts.map +1 -1
  35. package/lib/Socket/index.js +0 -6
  36. package/lib/Socket/index.js.map +1 -1
  37. package/lib/Socket/messages-recv.d.ts +40 -11
  38. package/lib/Socket/messages-recv.d.ts.map +1 -1
  39. package/lib/Socket/messages-recv.js +841 -354
  40. package/lib/Socket/messages-recv.js.map +1 -1
  41. package/lib/Socket/messages-send.d.ts +35 -6
  42. package/lib/Socket/messages-send.d.ts.map +1 -1
  43. package/lib/Socket/messages-send.js +263 -92
  44. package/lib/Socket/messages-send.js.map +1 -1
  45. package/lib/Socket/mex.d.ts.map +1 -1
  46. package/lib/Socket/mex.js +2 -0
  47. package/lib/Socket/mex.js.map +1 -1
  48. package/lib/Socket/newsletter.d.ts +27 -5
  49. package/lib/Socket/newsletter.d.ts.map +1 -1
  50. package/lib/Socket/newsletter.js +35 -3
  51. package/lib/Socket/newsletter.js.map +1 -1
  52. package/lib/Socket/socket.d.ts +9 -3
  53. package/lib/Socket/socket.d.ts.map +1 -1
  54. package/lib/Socket/socket.js +124 -39
  55. package/lib/Socket/socket.js.map +1 -1
  56. package/lib/Types/Auth.d.ts +2 -0
  57. package/lib/Types/Auth.d.ts.map +1 -1
  58. package/lib/Types/Call.d.ts +2 -1
  59. package/lib/Types/Call.d.ts.map +1 -1
  60. package/lib/Types/Chat.d.ts +1 -0
  61. package/lib/Types/Chat.d.ts.map +1 -1
  62. package/lib/Types/Contact.d.ts +2 -0
  63. package/lib/Types/Contact.d.ts.map +1 -1
  64. package/lib/Types/Events.d.ts +60 -6
  65. package/lib/Types/Events.d.ts.map +1 -1
  66. package/lib/Types/GroupMetadata.d.ts +4 -0
  67. package/lib/Types/GroupMetadata.d.ts.map +1 -1
  68. package/lib/Types/Message.d.ts +20 -5
  69. package/lib/Types/Message.d.ts.map +1 -1
  70. package/lib/Types/Message.js.map +1 -1
  71. package/lib/Types/{Newsletter.d.ts → Mex.d.ts} +13 -5
  72. package/lib/Types/Mex.d.ts.map +1 -0
  73. package/lib/Types/{Newsletter.js → Mex.js} +11 -3
  74. package/lib/Types/Mex.js.map +1 -0
  75. package/lib/Types/Signal.d.ts +12 -1
  76. package/lib/Types/Signal.d.ts.map +1 -1
  77. package/lib/Types/Socket.d.ts +3 -0
  78. package/lib/Types/Socket.d.ts.map +1 -1
  79. package/lib/Types/State.d.ts +58 -0
  80. package/lib/Types/State.d.ts.map +1 -1
  81. package/lib/Types/State.js +43 -0
  82. package/lib/Types/State.js.map +1 -1
  83. package/lib/Types/index.d.ts +1 -1
  84. package/lib/Types/index.d.ts.map +1 -1
  85. package/lib/Types/index.js +1 -1
  86. package/lib/Types/index.js.map +1 -1
  87. package/lib/Utils/auth-utils.d.ts +5 -0
  88. package/lib/Utils/auth-utils.d.ts.map +1 -1
  89. package/lib/Utils/auth-utils.js +65 -20
  90. package/lib/Utils/auth-utils.js.map +1 -1
  91. package/lib/Utils/chat-utils.d.ts +31 -1
  92. package/lib/Utils/chat-utils.d.ts.map +1 -1
  93. package/lib/Utils/chat-utils.js +180 -71
  94. package/lib/Utils/chat-utils.js.map +1 -1
  95. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  96. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  97. package/lib/Utils/companion-reg-client-utils.js +35 -0
  98. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  99. package/lib/Utils/crypto.d.ts +4 -8
  100. package/lib/Utils/crypto.d.ts.map +1 -1
  101. package/lib/Utils/crypto.js +2 -26
  102. package/lib/Utils/crypto.js.map +1 -1
  103. package/lib/Utils/decode-wa-message.d.ts +18 -0
  104. package/lib/Utils/decode-wa-message.d.ts.map +1 -1
  105. package/lib/Utils/decode-wa-message.js +34 -0
  106. package/lib/Utils/decode-wa-message.js.map +1 -1
  107. package/lib/Utils/event-buffer.d.ts +2 -0
  108. package/lib/Utils/event-buffer.d.ts.map +1 -1
  109. package/lib/Utils/event-buffer.js +82 -8
  110. package/lib/Utils/event-buffer.js.map +1 -1
  111. package/lib/Utils/generics.d.ts +2 -0
  112. package/lib/Utils/generics.d.ts.map +1 -1
  113. package/lib/Utils/generics.js +13 -1
  114. package/lib/Utils/generics.js.map +1 -1
  115. package/lib/Utils/history.d.ts +8 -3
  116. package/lib/Utils/history.d.ts.map +1 -1
  117. package/lib/Utils/history.js +58 -14
  118. package/lib/Utils/history.js.map +1 -1
  119. package/lib/Utils/identity-change-handler.d.ts +44 -0
  120. package/lib/Utils/identity-change-handler.d.ts.map +1 -0
  121. package/lib/Utils/identity-change-handler.js +50 -0
  122. package/lib/Utils/identity-change-handler.js.map +1 -0
  123. package/lib/Utils/index.d.ts +3 -0
  124. package/lib/Utils/index.d.ts.map +1 -1
  125. package/lib/Utils/index.js +3 -0
  126. package/lib/Utils/index.js.map +1 -1
  127. package/lib/Utils/link-preview.js +2 -2
  128. package/lib/Utils/link-preview.js.map +1 -1
  129. package/lib/Utils/lt-hash.d.ts +7 -12
  130. package/lib/Utils/lt-hash.d.ts.map +1 -1
  131. package/lib/Utils/lt-hash.js +2 -42
  132. package/lib/Utils/lt-hash.js.map +1 -1
  133. package/lib/Utils/make-mutex.d.ts +1 -0
  134. package/lib/Utils/make-mutex.d.ts.map +1 -1
  135. package/lib/Utils/make-mutex.js +20 -27
  136. package/lib/Utils/make-mutex.js.map +1 -1
  137. package/lib/Utils/message-retry-manager.d.ts +35 -2
  138. package/lib/Utils/message-retry-manager.d.ts.map +1 -1
  139. package/lib/Utils/message-retry-manager.js +98 -5
  140. package/lib/Utils/message-retry-manager.js.map +1 -1
  141. package/lib/Utils/messages-media.d.ts +22 -3
  142. package/lib/Utils/messages-media.d.ts.map +1 -1
  143. package/lib/Utils/messages-media.js +169 -44
  144. package/lib/Utils/messages-media.js.map +1 -1
  145. package/lib/Utils/messages.d.ts +2 -0
  146. package/lib/Utils/messages.d.ts.map +1 -1
  147. package/lib/Utils/messages.js +70 -27
  148. package/lib/Utils/messages.js.map +1 -1
  149. package/lib/Utils/noise-handler.d.ts +4 -4
  150. package/lib/Utils/noise-handler.d.ts.map +1 -1
  151. package/lib/Utils/noise-handler.js +139 -85
  152. package/lib/Utils/noise-handler.js.map +1 -1
  153. package/lib/Utils/offline-node-processor.d.ts +17 -0
  154. package/lib/Utils/offline-node-processor.d.ts.map +1 -0
  155. package/lib/Utils/offline-node-processor.js +40 -0
  156. package/lib/Utils/offline-node-processor.js.map +1 -0
  157. package/lib/Utils/process-message.d.ts.map +1 -1
  158. package/lib/Utils/process-message.js +165 -15
  159. package/lib/Utils/process-message.js.map +1 -1
  160. package/lib/Utils/reporting-utils.d.ts +11 -0
  161. package/lib/Utils/reporting-utils.d.ts.map +1 -0
  162. package/lib/Utils/reporting-utils.js +258 -0
  163. package/lib/Utils/reporting-utils.js.map +1 -0
  164. package/lib/Utils/signal.d.ts +13 -0
  165. package/lib/Utils/signal.d.ts.map +1 -1
  166. package/lib/Utils/signal.js +42 -0
  167. package/lib/Utils/signal.js.map +1 -1
  168. package/lib/Utils/stanza-ack.d.ts +11 -0
  169. package/lib/Utils/stanza-ack.d.ts.map +1 -0
  170. package/lib/Utils/stanza-ack.js +38 -0
  171. package/lib/Utils/stanza-ack.js.map +1 -0
  172. package/lib/Utils/sync-action-utils.d.ts +19 -0
  173. package/lib/Utils/sync-action-utils.d.ts.map +1 -0
  174. package/lib/Utils/sync-action-utils.js +49 -0
  175. package/lib/Utils/sync-action-utils.js.map +1 -0
  176. package/lib/Utils/tc-token-utils.d.ts +37 -0
  177. package/lib/Utils/tc-token-utils.d.ts.map +1 -0
  178. package/lib/Utils/tc-token-utils.js +163 -0
  179. package/lib/Utils/tc-token-utils.js.map +1 -0
  180. package/lib/Utils/validate-connection.d.ts.map +1 -1
  181. package/lib/Utils/validate-connection.js +4 -1
  182. package/lib/Utils/validate-connection.js.map +1 -1
  183. package/lib/WABinary/decode.d.ts.map +1 -1
  184. package/lib/WABinary/decode.js +24 -0
  185. package/lib/WABinary/decode.js.map +1 -1
  186. package/lib/WABinary/encode.js +5 -1
  187. package/lib/WABinary/encode.js.map +1 -1
  188. package/lib/WABinary/generic-utils.d.ts +1 -1
  189. package/lib/WABinary/generic-utils.d.ts.map +1 -1
  190. package/lib/WABinary/generic-utils.js +19 -8
  191. package/lib/WABinary/generic-utils.js.map +1 -1
  192. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -1
  193. package/lib/WAUSync/Protocols/USyncContactProtocol.js +26 -3
  194. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -1
  195. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  196. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  197. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  198. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  199. package/lib/WAUSync/Protocols/index.d.ts +1 -0
  200. package/lib/WAUSync/Protocols/index.d.ts.map +1 -1
  201. package/lib/WAUSync/Protocols/index.js +1 -0
  202. package/lib/WAUSync/Protocols/index.js.map +1 -1
  203. package/lib/WAUSync/USyncQuery.d.ts +1 -0
  204. package/lib/WAUSync/USyncQuery.d.ts.map +1 -1
  205. package/lib/WAUSync/USyncQuery.js +6 -2
  206. package/lib/WAUSync/USyncQuery.js.map +1 -1
  207. package/lib/WAUSync/USyncUser.d.ts +4 -0
  208. package/lib/WAUSync/USyncUser.d.ts.map +1 -1
  209. package/lib/WAUSync/USyncUser.js +8 -0
  210. package/lib/WAUSync/USyncUser.js.map +1 -1
  211. package/package.json +39 -8
  212. package/lib/Types/Newsletter.d.ts.map +0 -1
  213. package/lib/Types/Newsletter.js.map +0 -1
@@ -3,69 +3,129 @@ import { proto } from '../../WAProto/index.js';
3
3
  import { NOISE_MODE, WA_CERT_DETAILS } from '../Defaults/index.js';
4
4
  import { decodeBinaryNode } from '../WABinary/index.js';
5
5
  import { aesDecryptGCM, aesEncryptGCM, Curve, hkdf, sha256 } from './crypto.js';
6
+ const IV_LENGTH = 12;
7
+ const EMPTY_BUFFER = Buffer.alloc(0);
6
8
  const generateIV = (counter) => {
7
- const iv = new ArrayBuffer(12);
9
+ const iv = new ArrayBuffer(IV_LENGTH);
8
10
  new DataView(iv).setUint32(8, counter);
9
11
  return new Uint8Array(iv);
10
12
  };
13
+ class TransportState {
14
+ constructor(encKey, decKey) {
15
+ this.encKey = encKey;
16
+ this.decKey = decKey;
17
+ this.readCounter = 0;
18
+ this.writeCounter = 0;
19
+ this.iv = new Uint8Array(IV_LENGTH);
20
+ }
21
+ encrypt(plaintext) {
22
+ const c = this.writeCounter++;
23
+ this.iv[8] = (c >>> 24) & 0xff;
24
+ this.iv[9] = (c >>> 16) & 0xff;
25
+ this.iv[10] = (c >>> 8) & 0xff;
26
+ this.iv[11] = c & 0xff;
27
+ return aesEncryptGCM(plaintext, this.encKey, this.iv, EMPTY_BUFFER);
28
+ }
29
+ decrypt(ciphertext) {
30
+ const c = this.readCounter++;
31
+ this.iv[8] = (c >>> 24) & 0xff;
32
+ this.iv[9] = (c >>> 16) & 0xff;
33
+ this.iv[10] = (c >>> 8) & 0xff;
34
+ this.iv[11] = c & 0xff;
35
+ return aesDecryptGCM(ciphertext, this.decKey, this.iv, EMPTY_BUFFER);
36
+ }
37
+ }
11
38
  export const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }) => {
12
39
  logger = logger.child({ class: 'ns' });
40
+ const data = Buffer.from(NOISE_MODE);
41
+ let hash = data.byteLength === 32 ? data : sha256(data);
42
+ let salt = hash;
43
+ let encKey = hash;
44
+ let decKey = hash;
45
+ let counter = 0;
46
+ let sentIntro = false;
47
+ let inBytes = Buffer.alloc(0);
48
+ let transport = null;
49
+ let isWaitingForTransport = false;
50
+ let pendingOnFrame = null;
51
+ let introHeader;
52
+ if (routingInfo) {
53
+ introHeader = Buffer.alloc(7 + routingInfo.byteLength + NOISE_HEADER.length);
54
+ introHeader.write('ED', 0, 'utf8');
55
+ introHeader.writeUint8(0, 2);
56
+ introHeader.writeUint8(1, 3);
57
+ introHeader.writeUint8(routingInfo.byteLength >> 16, 4);
58
+ introHeader.writeUint16BE(routingInfo.byteLength & 65535, 5);
59
+ introHeader.set(routingInfo, 7);
60
+ introHeader.set(NOISE_HEADER, 7 + routingInfo.byteLength);
61
+ }
62
+ else {
63
+ introHeader = Buffer.from(NOISE_HEADER);
64
+ }
13
65
  const authenticate = (data) => {
14
- if (!isFinished) {
66
+ if (!transport) {
15
67
  hash = sha256(Buffer.concat([hash, data]));
16
68
  }
17
69
  };
18
70
  const encrypt = (plaintext) => {
19
- const result = aesEncryptGCM(plaintext, encKey, generateIV(writeCounter), hash);
20
- writeCounter += 1;
71
+ if (transport) {
72
+ return transport.encrypt(plaintext);
73
+ }
74
+ const result = aesEncryptGCM(plaintext, encKey, generateIV(counter++), hash);
21
75
  authenticate(result);
22
76
  return result;
23
77
  };
24
78
  const decrypt = (ciphertext) => {
25
- // before the handshake is finished, we use the same counter
26
- // after handshake, the counters are different
27
- const iv = generateIV(isFinished ? readCounter : writeCounter);
28
- const result = aesDecryptGCM(ciphertext, decKey, iv, hash);
29
- if (isFinished) {
30
- readCounter += 1;
31
- }
32
- else {
33
- writeCounter += 1;
79
+ if (transport) {
80
+ return transport.decrypt(ciphertext);
34
81
  }
82
+ const result = aesDecryptGCM(ciphertext, decKey, generateIV(counter++), hash);
35
83
  authenticate(ciphertext);
36
84
  return result;
37
85
  };
38
- const localHKDF = async (data) => {
39
- const key = await hkdf(Buffer.from(data), 64, { salt, info: '' });
40
- return [key.slice(0, 32), key.slice(32)];
86
+ const localHKDF = (data) => {
87
+ const key = hkdf(Buffer.from(data), 64, { salt, info: '' });
88
+ return [key.subarray(0, 32), key.subarray(32)];
41
89
  };
42
- const mixIntoKey = async (data) => {
43
- const [write, read] = await localHKDF(data);
90
+ const mixIntoKey = (data) => {
91
+ const [write, read] = localHKDF(data);
44
92
  salt = write;
45
93
  encKey = read;
46
94
  decKey = read;
47
- readCounter = 0;
48
- writeCounter = 0;
95
+ counter = 0;
49
96
  };
50
97
  const finishInit = async () => {
51
- const [write, read] = await localHKDF(new Uint8Array(0));
52
- encKey = write;
53
- decKey = read;
54
- hash = Buffer.from([]);
55
- readCounter = 0;
56
- writeCounter = 0;
57
- isFinished = true;
98
+ isWaitingForTransport = true;
99
+ const [write, read] = localHKDF(new Uint8Array(0));
100
+ transport = new TransportState(write, read);
101
+ isWaitingForTransport = false;
102
+ logger.trace('Noise handler transitioned to Transport state');
103
+ if (pendingOnFrame) {
104
+ logger.trace({ length: inBytes.length }, 'Flushing buffered frames after transport ready');
105
+ await processData(pendingOnFrame);
106
+ pendingOnFrame = null;
107
+ }
108
+ };
109
+ const processData = async (onFrame) => {
110
+ let size;
111
+ while (true) {
112
+ if (inBytes.length < 3)
113
+ return;
114
+ size = (inBytes[0] << 16) | (inBytes[1] << 8) | inBytes[2];
115
+ if (inBytes.length < size + 3)
116
+ return;
117
+ let frame = inBytes.subarray(3, size + 3);
118
+ inBytes = inBytes.subarray(size + 3);
119
+ if (transport) {
120
+ const result = transport.decrypt(frame);
121
+ frame = await decodeBinaryNode(result);
122
+ }
123
+ if (logger.level === 'trace') {
124
+ logger.trace({ msg: frame?.attrs?.id }, 'recv frame');
125
+ }
126
+ onFrame(frame);
127
+ }
58
128
  };
59
- const data = Buffer.from(NOISE_MODE);
60
- let hash = data.byteLength === 32 ? data : sha256(data);
61
- let salt = hash;
62
- let encKey = hash;
63
- let decKey = hash;
64
- let readCounter = 0;
65
- let writeCounter = 0;
66
- let isFinished = false;
67
- let sentIntro = false;
68
- let inBytes = Buffer.alloc(0);
69
129
  authenticate(NOISE_HEADER);
70
130
  authenticate(publicKey);
71
131
  return {
@@ -74,73 +134,67 @@ export const makeNoiseHandler = ({ keyPair: { private: privateKey, public: publi
74
134
  authenticate,
75
135
  mixIntoKey,
76
136
  finishInit,
77
- processHandshake: async ({ serverHello }, noiseKey) => {
137
+ processHandshake: ({ serverHello }, noiseKey) => {
78
138
  authenticate(serverHello.ephemeral);
79
- await mixIntoKey(Curve.sharedKey(privateKey, serverHello.ephemeral));
139
+ mixIntoKey(Curve.sharedKey(privateKey, serverHello.ephemeral));
80
140
  const decStaticContent = decrypt(serverHello.static);
81
- await mixIntoKey(Curve.sharedKey(privateKey, decStaticContent));
141
+ mixIntoKey(Curve.sharedKey(privateKey, decStaticContent));
82
142
  const certDecoded = decrypt(serverHello.payload);
83
- const { intermediate: certIntermediate /*leaf*/ } = proto.CertChain.decode(certDecoded);
84
- // TODO: handle this leaf stuff
85
- const { issuerSerial } = proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details);
143
+ const { intermediate: certIntermediate, leaf } = proto.CertChain.decode(certDecoded);
144
+ // leaf
145
+ if (!leaf?.details || !leaf?.signature) {
146
+ throw new Boom('invalid noise leaf certificate', { statusCode: 400 });
147
+ }
148
+ if (!certIntermediate?.details || !certIntermediate?.signature) {
149
+ throw new Boom('invalid noise intermediate certificate', { statusCode: 400 });
150
+ }
151
+ const details = proto.CertChain.NoiseCertificate.Details.decode(certIntermediate.details);
152
+ const { issuerSerial } = details;
153
+ const verify = Curve.verify(details.key, leaf.details, leaf.signature);
154
+ const verifyIntermediate = Curve.verify(WA_CERT_DETAILS.PUBLIC_KEY, certIntermediate.details, certIntermediate.signature);
155
+ if (!verify) {
156
+ throw new Boom('noise certificate signature invalid', { statusCode: 400 });
157
+ }
158
+ if (!verifyIntermediate) {
159
+ throw new Boom('noise intermediate certificate signature invalid', { statusCode: 400 });
160
+ }
86
161
  if (issuerSerial !== WA_CERT_DETAILS.SERIAL) {
87
162
  throw new Boom('certification match failed', { statusCode: 400 });
88
163
  }
89
164
  const keyEnc = encrypt(noiseKey.public);
90
- await mixIntoKey(Curve.sharedKey(noiseKey.private, serverHello.ephemeral));
165
+ mixIntoKey(Curve.sharedKey(noiseKey.private, serverHello.ephemeral));
91
166
  return keyEnc;
92
167
  },
93
168
  encodeFrame: (data) => {
94
- if (isFinished) {
95
- data = encrypt(data);
96
- }
97
- let header;
98
- if (routingInfo) {
99
- header = Buffer.alloc(7);
100
- header.write('ED', 0, 'utf8');
101
- header.writeUint8(0, 2);
102
- header.writeUint8(1, 3);
103
- header.writeUint8(routingInfo.byteLength >> 16, 4);
104
- header.writeUint16BE(routingInfo.byteLength & 65535, 5);
105
- header = Buffer.concat([header, routingInfo, NOISE_HEADER]);
106
- }
107
- else {
108
- header = Buffer.from(NOISE_HEADER);
169
+ if (transport) {
170
+ data = transport.encrypt(data);
109
171
  }
110
- const introSize = sentIntro ? 0 : header.length;
111
- const frame = Buffer.alloc(introSize + 3 + data.byteLength);
172
+ const dataLen = data.byteLength;
173
+ const introSize = sentIntro ? 0 : introHeader.length;
174
+ const frame = Buffer.allocUnsafe(introSize + 3 + dataLen);
112
175
  if (!sentIntro) {
113
- frame.set(header);
176
+ frame.set(introHeader);
114
177
  sentIntro = true;
115
178
  }
116
- frame.writeUInt8(data.byteLength >> 16, introSize);
117
- frame.writeUInt16BE(65535 & data.byteLength, introSize + 1);
179
+ frame[introSize] = (dataLen >>> 16) & 0xff;
180
+ frame[introSize + 1] = (dataLen >>> 8) & 0xff;
181
+ frame[introSize + 2] = dataLen & 0xff;
118
182
  frame.set(data, introSize + 3);
119
183
  return frame;
120
184
  },
121
185
  decodeFrame: async (newData, onFrame) => {
122
- // the binary protocol uses its own framing mechanism
123
- // on top of the WS frames
124
- // so we get this data and separate out the frames
125
- const getBytesSize = () => {
126
- if (inBytes.length >= 3) {
127
- return (inBytes.readUInt8() << 16) | inBytes.readUInt16BE(1);
128
- }
129
- };
130
- inBytes = Buffer.concat([inBytes, newData]);
131
- logger.trace(`recv ${newData.length} bytes, total recv ${inBytes.length} bytes`);
132
- let size = getBytesSize();
133
- while (size && inBytes.length >= size + 3) {
134
- let frame = inBytes.slice(3, size + 3);
135
- inBytes = inBytes.slice(size + 3);
136
- if (isFinished) {
137
- const result = decrypt(frame);
138
- frame = await decodeBinaryNode(result);
139
- }
140
- logger.trace({ msg: frame?.attrs?.id }, 'recv frame');
141
- onFrame(frame);
142
- size = getBytesSize();
186
+ if (isWaitingForTransport) {
187
+ inBytes = Buffer.concat([inBytes, newData]);
188
+ pendingOnFrame = onFrame;
189
+ return;
190
+ }
191
+ if (inBytes.length === 0) {
192
+ inBytes = Buffer.from(newData);
193
+ }
194
+ else {
195
+ inBytes = Buffer.concat([inBytes, newData]);
143
196
  }
197
+ await processData(onFrame);
144
198
  }
145
199
  };
146
200
  };
@@ -1 +1 @@
1
- {"version":3,"file":"noise-handler.js","sourceRoot":"","sources":["../../src/Utils/noise-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noise-handler.js","sourceRoot":"","sources":["../../src/Utils/noise-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { BinaryNode } from '../WABinary/index.js';
2
+ export type MessageType = 'message' | 'call' | 'receipt' | 'notification';
3
+ export type OfflineNodeProcessorDeps = {
4
+ isWsOpen: () => boolean;
5
+ onUnexpectedError: (error: Error, msg: string) => void;
6
+ yieldToEventLoop: () => Promise<void>;
7
+ };
8
+ /**
9
+ * Creates a processor for offline stanza nodes that:
10
+ * - Queues nodes for sequential processing
11
+ * - Yields to the event loop periodically to avoid blocking
12
+ * - Catches handler errors to prevent the processing loop from crashing
13
+ */
14
+ export declare function makeOfflineNodeProcessor(nodeProcessorMap: Map<MessageType, (node: BinaryNode) => Promise<void>>, deps: OfflineNodeProcessorDeps, batchSize?: number): {
15
+ enqueue: (type: MessageType, node: BinaryNode) => void;
16
+ };
17
+ //# sourceMappingURL=offline-node-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline-node-processor.d.ts","sourceRoot":"","sources":["../../src/Utils/offline-node-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,cAAc,CAAA;AAOzE,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,MAAM,OAAO,CAAA;IACvB,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACvC,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EACvE,IAAI,EAAE,wBAAwB,EAC9B,SAAS,SAAK;oBAKS,WAAW,QAAQ,UAAU;EAwCpD"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Creates a processor for offline stanza nodes that:
3
+ * - Queues nodes for sequential processing
4
+ * - Yields to the event loop periodically to avoid blocking
5
+ * - Catches handler errors to prevent the processing loop from crashing
6
+ */
7
+ export function makeOfflineNodeProcessor(nodeProcessorMap, deps, batchSize = 10) {
8
+ const nodes = [];
9
+ let isProcessing = false;
10
+ const enqueue = (type, node) => {
11
+ nodes.push({ type, node });
12
+ if (isProcessing) {
13
+ return;
14
+ }
15
+ isProcessing = true;
16
+ const promise = async () => {
17
+ let processedInBatch = 0;
18
+ while (nodes.length && deps.isWsOpen()) {
19
+ const { type, node } = nodes.shift();
20
+ const nodeProcessor = nodeProcessorMap.get(type);
21
+ if (!nodeProcessor) {
22
+ deps.onUnexpectedError(new Error(`unknown offline node type: ${type}`), 'processing offline node');
23
+ continue;
24
+ }
25
+ await nodeProcessor(node).catch(err => deps.onUnexpectedError(err, `processing offline ${type}`));
26
+ processedInBatch++;
27
+ // Yield to event loop after processing a batch
28
+ // This prevents blocking the event loop for too long when there are many offline nodes
29
+ if (processedInBatch >= batchSize) {
30
+ processedInBatch = 0;
31
+ await deps.yieldToEventLoop();
32
+ }
33
+ }
34
+ isProcessing = false;
35
+ };
36
+ promise().catch(error => deps.onUnexpectedError(error, 'processing offline nodes'));
37
+ };
38
+ return { enqueue };
39
+ }
40
+ //# sourceMappingURL=offline-node-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline-node-processor.js","sourceRoot":"","sources":["../../src/Utils/offline-node-processor.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACvC,gBAAuE,EACvE,IAA8B,EAC9B,SAAS,GAAG,EAAE;IAEd,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,IAAI,YAAY,GAAG,KAAK,CAAA;IAExB,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAE,IAAgB,EAAE,EAAE;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1B,IAAI,YAAY,EAAE,CAAC;YAClB,OAAM;QACP,CAAC;QAED,YAAY,GAAG,IAAI,CAAA;QAEnB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAA;YAExB,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACxC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;gBAErC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAA;oBAClG,SAAQ;gBACT,CAAC;gBAED,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAA;gBACjG,gBAAgB,EAAE,CAAA;gBAElB,+CAA+C;gBAC/C,uFAAuF;gBACvF,IAAI,gBAAgB,IAAI,SAAS,EAAE,CAAC;oBACnC,gBAAgB,GAAG,CAAC,CAAA;oBACpB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;gBAC9B,CAAC;YACF,CAAC;YAED,YAAY,GAAG,KAAK,CAAA;QACrB,CAAC,CAAA;QAED,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAA;IACpF,CAAC,CAAA;IAED,OAAO,EAAE,OAAO,EAAE,CAAA;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"process-message.d.ts","sourceRoot":"","sources":["../../src/Utils/process-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EAQV,6BAA6B,EAC7B,4BAA4B,EAC5B,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,MAAM,UAAU,CAAA;AAiBjB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,KAAK,qBAAqB,GAAG;IAC5B,uBAAuB,EAAE,OAAO,CAAA;IAChC,sBAAsB,CAAC,EAAE,UAAU,CAAA;IACnC,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,6BAA6B,CAAA;IACvC,EAAE,EAAE,mBAAmB,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,WAAW,CAAA;IACpB,gBAAgB,EAAE,4BAA4B,CAAA;IAC9C,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACtC,CAAA;AAWD,sDAAsD;AACtD,eAAO,MAAM,YAAY,GAAI,SAAS,SAAS,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,SAiD3E,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,SAAS,SAAS,YAY/C,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,SAAS,SAAS,YAAoD,CAAA;AAEhH;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,oCAAoC,YAAY,WAMzE,CAAA;AAED,KAAK,WAAW,GAAG;IAClB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,oCAAoC;IACpC,UAAU,EAAE,UAAU,CAAA;IACtB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,YAAY,GAAG;IACnB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAA;IACvB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,WAAW,EAAE,UAAU,CAAA;IACvB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAClD,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,iCAoBhE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAClD,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,YAAY,sCAoBxE;AAED,QAAA,MAAM,cAAc,GACnB,SAAS,SAAS,EAClB,yHAUG,qBAAqB,kBAmYxB,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"process-message.d.ts","sourceRoot":"","sources":["../../src/Utils/process-message.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC9C,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EAQV,6BAA6B,EAC7B,4BAA4B,EAC5B,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,MAAM,UAAU,CAAA;AAiBjB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGvC,KAAK,qBAAqB,GAAG;IAC5B,uBAAuB,EAAE,OAAO,CAAA;IAChC,sBAAsB,CAAC,EAAE,UAAU,CAAA;IACnC,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,6BAA6B,CAAA;IACvC,EAAE,EAAE,mBAAmB,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,WAAW,CAAA;IACpB,gBAAgB,EAAE,4BAA4B,CAAA;IAC9C,UAAU,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACtC,CAAA;AAqED,sDAAsD;AACtD,eAAO,MAAM,YAAY,GAAI,SAAS,SAAS,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,SAiD3E,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,SAAS,SAAS,YAY/C,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,SAAS,SAAS,YAAoD,CAAA;AAEhH;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,oCAAoC,YAAY,KAAG,MAkB5E,CAAA;AAED,KAAK,WAAW,GAAG;IAClB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,oCAAoC;IACpC,UAAU,EAAE,UAAU,CAAA;IACtB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,YAAY,GAAG;IACnB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAA;IACvB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,qCAAqC;IACrC,WAAW,EAAE,UAAU,CAAA;IACvB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAClD,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,iCAoBhE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAClD,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,YAAY,sCAoBxE;AAED,QAAA,MAAM,cAAc,GACnB,SAAS,SAAS,EAClB,yHAUG,qBAAqB,kBAqexB,CAAA;AAED,eAAe,cAAc,CAAA"}