@kangwifi-pro/waliwa 1.1.3 → 1.1.4

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.
@@ -47,18 +47,48 @@ export declare class NoiseHandshake {
47
47
  */
48
48
  writeEphemeral(): Uint8Array;
49
49
  /**
50
- * Step 2: Receive ephemeral + static + EE + ES from responder
51
- * Server sends: [32-byte ephemeral] [48-byte encrypted static] [N-byte encrypted payload]
50
+ * Step 2: Receive server response (protobuf-wrapped)
51
+ *
52
+ * Server sends: [protobuf]
53
+ * field 3 (length-delimited): contains
54
+ * field 1 (32 bytes): server ephemeral key
55
+ * field 2 (48 bytes): encrypted server static key (32 ct + 16 GCM tag)
56
+ * [remaining]: encrypted server payload
57
+ *
58
+ * @param payload The protobuf-wrapped server response (after stripping 3-byte length prefix)
52
59
  */
53
60
  readResponderHandshake(payload: Uint8Array): {
54
61
  plaintext: Uint8Array;
55
62
  };
56
63
  /**
57
- * Step 3: Send our static + SE + payload (initiator -> responder)
58
- * Returns: [48-byte encrypted static] [N-byte encrypted payload]
59
- * MUST be called AFTER readResponderHandshake (needs remote ephemeral)
64
+ * Extract a protobuf field from a protobuf message
65
+ * Returns the field's value (for length-delimited fields)
66
+ */
67
+ private extractProtobufField;
68
+ /**
69
+ * Find data after a specific field (for extracting remaining bytes)
70
+ */
71
+ private findAfterField;
72
+ private readVarint;
73
+ private skipField;
74
+ /**
75
+ * Step 3: Send our static + SE + payload (protobuf-wrapped)
76
+ * Returns: protobuf field 4 containing [field 1: enc_static] [field 3: enc_payload]
77
+ * MUST be called AFTER readResponderHandshake
60
78
  */
61
79
  writeClientResponse(payload: Uint8Array): Uint8Array;
80
+ /**
81
+ * Build protobuf field encoding (returns array of byte chunks)
82
+ */
83
+ private buildProtobufField;
84
+ /**
85
+ * Encode a complete protobuf field (tag + length + value)
86
+ */
87
+ private encodeProtobufField;
88
+ /**
89
+ * Encode a varint
90
+ */
91
+ private encodeVarint;
62
92
  /**
63
93
  * Finalize handshake - split prk into send/recv keys
64
94
  */
@@ -84,9 +114,18 @@ export declare class NoiseHandshake {
84
114
  */
85
115
  static encodeClientHello(ephemeralPub: Uint8Array, encryptedStatic: Uint8Array, encryptedPayload: Uint8Array): Uint8Array;
86
116
  /**
87
- * Build initial client hello - ONLY the ephemeral key for message 1
88
- * The encrypted static + payload (message 3) is sent separately
89
- * after receiving the server's response (message 2)
117
+ * Build initial client hello - Message 1 of Noise XX
118
+ *
119
+ * WA Protocol: Wrap ephemeral in protobuf field 2:
120
+ * field 2 (length-delimited): contains
121
+ * field 1 (32 bytes): ephemeral public key
122
+ *
123
+ * Encoding: 12 22 0a 20 [32 bytes ephemeral]
124
+ * - 12 = field 2, wire type 2 (length-delimited)
125
+ * - 22 = length 34
126
+ * - 0a = field 1, wire type 2
127
+ * - 20 = length 32
128
+ * - [32 bytes] = ephemeral public key
90
129
  */
91
130
  buildClientHello(): Uint8Array;
92
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAUL,OAAO,EAER,MAAM,aAAa,CAAC;AAyCrB,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;gBAEnB,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,GAAE,OAAc;IAe1D,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,MAAM;IAad;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACI,cAAc,IAAI,UAAU;IAQnC;;;OAGG;IACI,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,UAAU,CAAA;KAAE;IAiC7E;;;;OAIG;IACI,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAgB3D;;OAEG;IACI,QAAQ,IAAI;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,UAAU,CAAA;KAAE;IAe/D;;OAEG;WACW,YAAY,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,UAAU,GACpB,UAAU;IAUb;;OAEG;WACW,YAAY,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,UAAU;IAcb;;OAEG;WACW,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAkB1D;;;OAGG;WACW,iBAAiB,CAC7B,YAAY,EAAE,UAAU,EACxB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,UAAU,GAC3B,UAAU;IAIb;;;;OAIG;IACI,gBAAgB,IAAI,UAAU;CAItC;AAID;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;gBAEpB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU;IAKpD,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU;IAM1C,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU;IAM3C,KAAK;CAIN;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CA4BhF"}
1
+ {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAUL,OAAO,EAER,MAAM,aAAa,CAAC;AAyCrB,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;gBAEnB,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,GAAE,OAAc;IAe1D,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,MAAM;IAad;;OAEG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACI,cAAc,IAAI,UAAU;IAQnC;;;;;;;;;;OAUG;IACI,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,UAAU,CAAA;KAAE;IAwD7E;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,SAAS;IAcjB;;;;OAIG;IACI,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAsB3D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACI,QAAQ,IAAI;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,OAAO,EAAE,UAAU,CAAA;KAAE;IAe/D;;OAEG;WACW,YAAY,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,UAAU,GACpB,UAAU;IAUb;;OAEG;WACW,YAAY,CACxB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,UAAU;IAcb;;OAEG;WACW,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAkB1D;;;OAGG;WACW,iBAAiB,CAC7B,YAAY,EAAE,UAAU,EACxB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,UAAU,GAC3B,UAAU;IAIb;;;;;;;;;;;;;OAaG;IACI,gBAAgB,IAAI,UAAU;CAUtC;AAID;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;gBAEpB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU;IAKpD,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU;IAM1C,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU;IAM3C,KAAK;CAIN;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CA4BhF"}
@@ -125,42 +125,146 @@ class NoiseHandshake {
125
125
  return e.public;
126
126
  }
127
127
  /**
128
- * Step 2: Receive ephemeral + static + EE + ES from responder
129
- * Server sends: [32-byte ephemeral] [48-byte encrypted static] [N-byte encrypted payload]
128
+ * Step 2: Receive server response (protobuf-wrapped)
129
+ *
130
+ * Server sends: [protobuf]
131
+ * field 3 (length-delimited): contains
132
+ * field 1 (32 bytes): server ephemeral key
133
+ * field 2 (48 bytes): encrypted server static key (32 ct + 16 GCM tag)
134
+ * [remaining]: encrypted server payload
135
+ *
136
+ * @param payload The protobuf-wrapped server response (after stripping 3-byte length prefix)
130
137
  */
131
138
  readResponderHandshake(payload) {
132
- // First 32 bytes = ephemeral key
133
- if (payload.length < 32)
134
- throw new Error('Handshake too short');
135
- const re = payload.subarray(0, 32);
139
+ // Parse outer protobuf: field 3 contains the handshake data
140
+ const innerData = this.extractProtobufField(payload, 3);
141
+ if (!innerData || innerData.length < 80) {
142
+ throw new Error(`Invalid server handshake: field 3 too short (${innerData?.length ?? 0} bytes)`);
143
+ }
144
+ // Parse inner protobuf
145
+ // field 1: server ephemeral (32 bytes)
146
+ const serverEphemeral = this.extractProtobufField(innerData, 1);
147
+ if (!serverEphemeral || serverEphemeral.length !== 32) {
148
+ throw new Error(`Invalid server ephemeral: ${serverEphemeral?.length ?? 0} bytes (expected 32)`);
149
+ }
150
+ // field 2: encrypted server static (48 bytes = 32 ct + 16 tag)
151
+ const encryptedStatic = this.extractProtobufField(innerData, 2);
152
+ if (!encryptedStatic || encryptedStatic.length !== 48) {
153
+ throw new Error(`Invalid encrypted static: ${encryptedStatic?.length ?? 0} bytes (expected 48)`);
154
+ }
155
+ // === Process Noise handshake ===
156
+ const re = serverEphemeral;
136
157
  this.state.re = re;
137
158
  this.mixHash(re);
138
159
  this.mixKey(re);
139
160
  // Ephemeral-ephemeral DH
140
161
  const ee = (0, crypto_js_1.curveSharedSecret)(this.state.e.private, re);
141
162
  this.mixKey(ee);
142
- // Next 48 bytes = encrypted static (32-byte ct + 16-byte GCM tag)
143
- if (payload.length < 80)
144
- throw new Error('Handshake too short for static');
145
- const encryptedStatic = payload.subarray(32, 80);
146
- const remoteStatic = this.decryptWithHash(encryptedStatic); // 32 bytes
163
+ // Decrypt server static
164
+ const remoteStatic = this.decryptWithHash(encryptedStatic);
147
165
  this.state.rs = remoteStatic;
148
166
  this.mixHash(remoteStatic);
149
167
  // Ephemeral-static DH
150
168
  const es = (0, crypto_js_1.curveSharedSecret)(this.state.e.private, remoteStatic);
151
169
  this.mixKey(es);
152
- // Remaining = encrypted payload (may be empty)
153
- const encryptedPayload = payload.subarray(80);
170
+ // Find remaining payload after field 2 (encrypted payload)
154
171
  let plaintext = new Uint8Array(0);
155
- if (encryptedPayload.length > 0) {
156
- plaintext = this.decryptWithHash(encryptedPayload);
172
+ const afterEphemeral = this.findAfterField(innerData, 1);
173
+ const afterStatic = this.findAfterField(afterEphemeral, 2);
174
+ if (afterStatic && afterStatic.length > 0) {
175
+ // Try to extract field 3 (encrypted payload) if present
176
+ const encPayload = this.extractProtobufField(afterStatic, 3)
177
+ ?? this.extractProtobufField(afterStatic, 5)
178
+ ?? afterStatic; // fallback: treat all remaining as raw payload
179
+ if (encPayload.length > 0) {
180
+ plaintext = this.decryptWithHash(encPayload);
181
+ }
157
182
  }
158
183
  return { plaintext };
159
184
  }
160
185
  /**
161
- * Step 3: Send our static + SE + payload (initiator -> responder)
162
- * Returns: [48-byte encrypted static] [N-byte encrypted payload]
163
- * MUST be called AFTER readResponderHandshake (needs remote ephemeral)
186
+ * Extract a protobuf field from a protobuf message
187
+ * Returns the field's value (for length-delimited fields)
188
+ */
189
+ extractProtobufField(data, fieldNumber) {
190
+ let pos = 0;
191
+ while (pos < data.length) {
192
+ const startPos = pos;
193
+ const tag = this.readVarint(data, pos);
194
+ pos = tag.nextPos;
195
+ const fn = tag.value >> 3;
196
+ const wireType = tag.value & 7;
197
+ if (fn === fieldNumber && wireType === 2) {
198
+ // Length-delimited field - this is our target
199
+ const len = this.readVarint(data, pos);
200
+ pos = len.nextPos;
201
+ return data.subarray(pos, pos + len.value);
202
+ }
203
+ // Skip this field
204
+ pos = this.skipField(data, pos, wireType);
205
+ if (pos <= startPos)
206
+ break; // safety check
207
+ }
208
+ return null;
209
+ }
210
+ /**
211
+ * Find data after a specific field (for extracting remaining bytes)
212
+ */
213
+ findAfterField(data, fieldNumber) {
214
+ let pos = 0;
215
+ while (pos < data.length) {
216
+ const startPos = pos;
217
+ const tag = this.readVarint(data, pos);
218
+ pos = tag.nextPos;
219
+ const fn = tag.value >> 3;
220
+ const wireType = tag.value & 7;
221
+ if (fn === fieldNumber && wireType === 2) {
222
+ const len = this.readVarint(data, pos);
223
+ pos = len.nextPos;
224
+ const afterField = pos + len.value;
225
+ return data.subarray(afterField);
226
+ }
227
+ pos = this.skipField(data, pos, wireType);
228
+ if (pos <= startPos)
229
+ break;
230
+ }
231
+ return new Uint8Array(0);
232
+ }
233
+ readVarint(data, pos) {
234
+ let result = 0;
235
+ let shift = 0;
236
+ let p = pos;
237
+ while (p < data.length) {
238
+ const b = data[p++];
239
+ result |= (b & 0x7f) << shift;
240
+ if (!(b & 0x80))
241
+ break;
242
+ shift += 7;
243
+ if (shift > 35)
244
+ break; // safety
245
+ }
246
+ return { value: result, nextPos: p };
247
+ }
248
+ skipField(data, pos, wireType) {
249
+ if (wireType === 0) { // varint
250
+ return this.readVarint(data, pos).nextPos;
251
+ }
252
+ else if (wireType === 2) { // length-delimited
253
+ const len = this.readVarint(data, pos);
254
+ return len.nextPos + len.value;
255
+ }
256
+ else if (wireType === 5) { // 32-bit
257
+ return pos + 4;
258
+ }
259
+ else if (wireType === 1) { // 64-bit
260
+ return pos + 8;
261
+ }
262
+ return pos;
263
+ }
264
+ /**
265
+ * Step 3: Send our static + SE + payload (protobuf-wrapped)
266
+ * Returns: protobuf field 4 containing [field 1: enc_static] [field 3: enc_payload]
267
+ * MUST be called AFTER readResponderHandshake
164
268
  */
165
269
  writeClientResponse(payload) {
166
270
  // Encrypt our static key (32 bytes → 48 bytes with GCM tag)
@@ -173,7 +277,40 @@ class NoiseHandshake {
173
277
  this.mixKey(se);
174
278
  // Encrypt payload
175
279
  const encryptedPayload = this.encryptWithHash(payload);
176
- return (0, crypto_js_1.concatBytes)(encryptedStatic, encryptedPayload);
280
+ // Build inner protobuf: field 1 (enc static) + field 3 (enc payload)
281
+ const inner = this.buildProtobufField(1, encryptedStatic)
282
+ .concat(this.buildProtobufField(3, encryptedPayload));
283
+ // Wrap in outer protobuf field 4
284
+ const innerBytes = (0, crypto_js_1.concatBytes)(...inner);
285
+ return this.encodeProtobufField(4, innerBytes);
286
+ }
287
+ /**
288
+ * Build protobuf field encoding (returns array of byte chunks)
289
+ */
290
+ buildProtobufField(fieldNumber, value) {
291
+ const tag = (fieldNumber << 3) | 2; // wire type 2 = length-delimited
292
+ return [this.encodeVarint(tag), this.encodeVarint(value.length), value];
293
+ }
294
+ /**
295
+ * Encode a complete protobuf field (tag + length + value)
296
+ */
297
+ encodeProtobufField(fieldNumber, value) {
298
+ const tag = (fieldNumber << 3) | 2;
299
+ const tagBytes = this.encodeVarint(tag);
300
+ const lenBytes = this.encodeVarint(value.length);
301
+ return (0, crypto_js_1.concatBytes)(tagBytes, lenBytes, value);
302
+ }
303
+ /**
304
+ * Encode a varint
305
+ */
306
+ encodeVarint(value) {
307
+ const bytes = [];
308
+ while (value > 0x7f) {
309
+ bytes.push((value & 0x7f) | 0x80);
310
+ value >>= 7;
311
+ }
312
+ bytes.push(value & 0x7f);
313
+ return new Uint8Array(bytes);
177
314
  }
178
315
  /**
179
316
  * Finalize handshake - split prk into send/recv keys
@@ -240,13 +377,26 @@ class NoiseHandshake {
240
377
  return (0, crypto_js_1.concatBytes)(ephemeralPub, encryptedStatic, encryptedPayload);
241
378
  }
242
379
  /**
243
- * Build initial client hello - ONLY the ephemeral key for message 1
244
- * The encrypted static + payload (message 3) is sent separately
245
- * after receiving the server's response (message 2)
380
+ * Build initial client hello - Message 1 of Noise XX
381
+ *
382
+ * WA Protocol: Wrap ephemeral in protobuf field 2:
383
+ * field 2 (length-delimited): contains
384
+ * field 1 (32 bytes): ephemeral public key
385
+ *
386
+ * Encoding: 12 22 0a 20 [32 bytes ephemeral]
387
+ * - 12 = field 2, wire type 2 (length-delimited)
388
+ * - 22 = length 34
389
+ * - 0a = field 1, wire type 2
390
+ * - 20 = length 32
391
+ * - [32 bytes] = ephemeral public key
246
392
  */
247
393
  buildClientHello() {
248
- // Message 1: just the ephemeral public key
249
- return this.writeEphemeral();
394
+ // Message 1: just the ephemeral public key, wrapped in protobuf
395
+ const ephemeral = this.writeEphemeral();
396
+ // Inner protobuf: field 1 = ephemeral (32 bytes)
397
+ const inner = this.encodeProtobufField(1, ephemeral);
398
+ // Outer protobuf: field 2 = inner protobuf
399
+ return this.encodeProtobufField(2, inner);
250
400
  }
251
401
  }
252
402
  exports.NoiseHandshake = NoiseHandshake;
@@ -1 +1 @@
1
- {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/core/noise.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -53,7 +53,7 @@ export { RecoveryManager, mapCodeToReason, getActionDescription, getReasonDescri
53
53
  export { ProfileManager, PrivacyManager, NewsletterManagerExtended, StatusExtended, ContactsManager, BulkOperations, MessageExtras, DisappearingManager, LiveLocationManager, AudioTranscriptionManager, StickerManager, TypingIndicatorTracker, LastSeenTracker, MessageStatusTracker, SelfMessageFilter, ChatStateManager, DeviceInfoTracker, GroupEventsTracker, parseGroupInviteInfo, createCommunityManagers, type ProfileInfo, type PrivacyValue, type PrivacyCategory, type PrivacySettings, type NewsletterMetadata, type NewsletterPost, type StatusView, type StatusInfo, type StatusPrivacyValue, type StatusPrivacy, type ContactInfo, type BulkSendItem, type BulkSendResult, type BulkSendOptions, type AlbumItem, type MessageInfo, type DisappearingTimer, type TIMER_TO_SECONDS, type LiveLocation, type TranscriptionResult, type TranscriptionProvider, type StickerMetadata, type StickerPack, type ChatState, type GroupInviteInfo, type CommunityManagers, type CommunityTrackers } from './community/index.js';
54
54
  export { TIMER_TO_SECONDS as DISAPPEARING_TIMERS, SECONDS_TO_TIMER as SECONDS_TO_TIMER, detectLanguageFromText } from './community/index.js';
55
55
  export * from './types/index.js';
56
- export declare const VERSION = "1.1.3";
56
+ export declare const VERSION = "1.1.4";
57
57
  export declare const LIBRARY_NAME = "waliwa";
58
58
  export declare const DEFAULT_CONFIG: {
59
59
  wsURL: string;
package/dist/index.js CHANGED
@@ -252,7 +252,7 @@ Object.defineProperty(exports, "detectLanguageFromText", { enumerable: true, get
252
252
  // ============== All Types ==============
253
253
  __exportStar(require("./types/index.js"), exports);
254
254
  // ============== Version ==============
255
- exports.VERSION = '1.1.3';
255
+ exports.VERSION = '1.1.4';
256
256
  exports.LIBRARY_NAME = 'waliwa';
257
257
  // ============== Default Config ==============
258
258
  exports.DEFAULT_CONFIG = {
@@ -51,33 +51,41 @@ export declare class WAWebSocket extends EventEmitter {
51
51
  /**
52
52
  * Start Noise Protocol XX handshake
53
53
  *
54
- * WA Frame Format (used in ALL messages including handshake):
55
- * [0x57, 0x41] (2 bytes "WA" magic)
56
- * [0x01] (1 byte binary flag)
57
- * [version] (1 byte, e.g. 0x2d = 45)
58
- * [length_hi, length_mid, length_lo] (3 bytes big-endian length)
59
- * [payload]
54
+ * WA Frame Format:
55
+ * Message 1: [0x57, 0x41, 0x06, 0x02] (4-byte WA header) + [3-byte length] + [protobuf(ephemeral)]
56
+ * Messages 2+: [3-byte length] + [raw Noise data]
57
+ *
58
+ * Protobuf wrapper for ephemeral (Message 1 only):
59
+ * 12 22 0a 20 [32 bytes ephemeral]
60
+ * - 12 22 = field 2, length 34
61
+ * - 0a 20 = field 1, length 32
62
+ * - [32 bytes] = ephemeral public key
60
63
  *
61
64
  * Noise XX Pattern (3 messages):
62
- * 1. Client → Server: WA header + ephemeral (32 bytes)
63
- * 2. Server → Client: WA header + ephemeral(32) + enc_static(48) + enc_payload
64
- * 3. Client → Server: WA header + enc_static(48) + enc_payload
65
+ * 1. Client → Server: WA header + protobuf(ephemeral)
66
+ * 2. Server → Client: ephemeral + enc_static + enc_payload
67
+ * 3. Client → Server: enc_static + enc_payload
65
68
  */
66
69
  private startHandshake;
67
70
  /**
68
- * Hex dump utility for debugging binary data
71
+ * Wrap handshake init message (Message 1)
72
+ * Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
69
73
  */
70
- private hexDump;
74
+ private wrapHandshakeInit;
71
75
  /**
72
- * Wrap payload dengan WA frame header
73
- * Format: [0x57, 0x41, 0x01, version, len_hi, len_mid, len_lo] + payload
76
+ * Wrap post-handshake messages (Messages 2+)
77
+ * Format: [3-byte length] + [payload]
74
78
  */
75
- private wrapWAFrame;
79
+ private wrapPostHandshake;
76
80
  /**
77
- * Strip WA frame header (7 bytes) dari incoming message
78
- * Returns just the payload
81
+ * Unwrap incoming message (Messages 2+)
82
+ * Strip 3-byte length prefix
79
83
  */
80
- private unwrapWAFrame;
84
+ private unwrapIncoming;
85
+ /**
86
+ * Hex dump utility for debugging
87
+ */
88
+ private hexDump;
81
89
  /**
82
90
  * Wait for a single WebSocket message with timeout
83
91
  */
@@ -89,12 +97,12 @@ export declare class WAWebSocket extends EventEmitter {
89
97
  private generatePairingKey;
90
98
  /**
91
99
  * Handle incoming message - decrypt jika handshake done
92
- * After handshake, messages still use WA frame format
100
+ * Post-handshake messages use 3-byte length prefix
93
101
  */
94
102
  private handleMessage;
95
103
  /**
96
104
  * Send encrypted frame ke server
97
- * Wraps encrypted data dengan WA frame header
105
+ * Post-handshake messages use 3-byte length prefix (no WA magic)
98
106
  */
99
107
  send(plaintext: Uint8Array): void;
100
108
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ws-socket.d.ts","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAEL,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IACvD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB;AAmCD,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAAa;gBAEnB,IAAI,EAAE,kBAAkB;IAYpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D9B;;;;;;;;;;;;;;OAcG;YACW,cAAc;IAyD5B;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;;OAGG;IACH,OAAO,CAAC,WAAW;IAanB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,kBAAkB;IAK1B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IASjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,KAAK,CAAC,IAAI,GAAE,MAAa,EAAE,MAAM,GAAE,MAAiB,GAAG,IAAI;IAa3D;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;CAGzC;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"ws-socket.d.ts","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAEL,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IACvD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB;AAmCD,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAAa;gBAEnB,IAAI,EAAE,kBAAkB;IAYpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D9B;;;;;;;;;;;;;;;;;OAiBG;YACW,cAAc;IA4D5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,kBAAkB;IAK1B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IASjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,KAAK,CAAC,IAAI,GAAE,MAAa,EAAE,MAAM,GAAE,MAAiB,GAAG,IAAI;IAa3D;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;CAGzC;AAED,eAAe,WAAW,CAAC"}
@@ -134,60 +134,64 @@ class WAWebSocket extends events_1.EventEmitter {
134
134
  /**
135
135
  * Start Noise Protocol XX handshake
136
136
  *
137
- * WA Frame Format (used in ALL messages including handshake):
138
- * [0x57, 0x41] (2 bytes "WA" magic)
139
- * [0x01] (1 byte binary flag)
140
- * [version] (1 byte, e.g. 0x2d = 45)
141
- * [length_hi, length_mid, length_lo] (3 bytes big-endian length)
142
- * [payload]
137
+ * WA Frame Format:
138
+ * Message 1: [0x57, 0x41, 0x06, 0x02] (4-byte WA header) + [3-byte length] + [protobuf(ephemeral)]
139
+ * Messages 2+: [3-byte length] + [raw Noise data]
140
+ *
141
+ * Protobuf wrapper for ephemeral (Message 1 only):
142
+ * 12 22 0a 20 [32 bytes ephemeral]
143
+ * - 12 22 = field 2, length 34
144
+ * - 0a 20 = field 1, length 32
145
+ * - [32 bytes] = ephemeral public key
143
146
  *
144
147
  * Noise XX Pattern (3 messages):
145
- * 1. Client → Server: WA header + ephemeral (32 bytes)
146
- * 2. Server → Client: WA header + ephemeral(32) + enc_static(48) + enc_payload
147
- * 3. Client → Server: WA header + enc_static(48) + enc_payload
148
+ * 1. Client → Server: WA header + protobuf(ephemeral)
149
+ * 2. Server → Client: ephemeral + enc_static + enc_payload
150
+ * 3. Client → Server: enc_static + enc_payload
148
151
  */
149
152
  async startHandshake() {
150
153
  this.handshake = new noise_js_1.NoiseHandshake(this.noiseKey, true);
151
- // === Message 1: Send client ephemeral only ===
152
- const ephemeralPub = this.handshake.buildClientHello();
153
- const clientHello = this.wrapWAFrame(ephemeralPub);
154
+ // === Message 1: Send client ephemeral wrapped in protobuf ===
155
+ // buildClientHello() returns protobuf: 12 22 0a 20 [ephemeral]
156
+ const protobufEphemeral = this.handshake.buildClientHello();
157
+ // Build message 1: WA header (4 bytes) + 3-byte length + protobuf payload
158
+ const clientHello = this.wrapHandshakeInit(protobufEphemeral);
154
159
  this.logger.info(`Sending client hello: ${this.hexDump(clientHello)}`);
155
160
  this.ws.send(Buffer.from(clientHello));
156
161
  // === Message 2: Wait for server response ===
157
- // Server might send multiple frames - skip short/ack messages until we get the actual handshake
158
162
  let serverPayload = null;
159
163
  for (let attempt = 0; attempt < 5; attempt++) {
160
164
  const serverData = await this.waitForMessage(15000);
161
165
  const bytes = new Uint8Array(serverData);
162
166
  this.logger.info(`Received msg ${attempt + 1} (${serverData.length} bytes): ${this.hexDump(bytes)}`);
163
- // Skip short messages (acks, pings, etc.)
164
- if (serverData.length < 7) {
165
- this.logger.info(`Short message (${serverData.length} bytes), treating as ack/ping, waiting for next...`);
167
+ // Skip very short messages (acks, error frames)
168
+ if (serverData.length < 4) {
169
+ this.logger.info(`Short message, skipping (likely ack/error)`);
170
+ // Check if it's a close frame: 88 02 = WS close, 03 f3 = code 1011
171
+ if (serverData.length === 4 && bytes[0] === 0x88) {
172
+ const closeCode = (bytes[2] << 8) | bytes[3];
173
+ throw new Error(`Server rejected handshake (close code ${closeCode})`);
174
+ }
166
175
  continue;
167
176
  }
168
- // Try to unwrap WA frame
169
- try {
170
- serverPayload = this.unwrapWAFrame(bytes);
171
- this.logger.info(`Unwrapped WA frame, payload ${serverPayload.length} bytes: ${this.hexDump(serverPayload)}`);
172
- break;
173
- }
174
- catch (err) {
175
- // Maybe it's raw Noise data without WA header
176
- this.logger.info(`WA unwrap failed: ${err.message}, trying as raw data`);
177
- serverPayload = bytes;
178
- break;
179
- }
177
+ // Messages 2+ use 3-byte length prefix (no WA magic)
178
+ // Strip the 3-byte length prefix, keep protobuf for NoiseHandshake to parse
179
+ serverPayload = bytes.subarray(3);
180
+ this.logger.info(`Stripped 3-byte length prefix, payload ${serverPayload.length} bytes`);
181
+ break;
180
182
  }
181
- if (!serverPayload || serverPayload.length < 32) {
183
+ if (!serverPayload || serverPayload.length < 80) {
182
184
  throw new Error(`Invalid handshake response (payload ${serverPayload?.length ?? 0} bytes, need ≥ 80)`);
183
185
  }
184
- // Process server Noise data
186
+ // Process server Noise data (NoiseHandshake will parse protobuf internally)
185
187
  this.handshake.readResponderHandshake(serverPayload);
186
188
  this.logger.info('Server handshake response processed');
187
189
  // === Message 3: Send encrypted static + payload ===
190
+ // writeClientResponse() returns protobuf (field 4 containing enc static + enc payload)
191
+ // Wrap with 3-byte length prefix only (no WA magic)
188
192
  const clientPayload = this.buildClientPayload();
189
193
  const clientResponse = this.handshake.writeClientResponse(clientPayload);
190
- const wrappedResponse = this.wrapWAFrame(clientResponse);
194
+ const wrappedResponse = this.wrapPostHandshake(clientResponse);
191
195
  this.logger.info(`Sending client response (${wrappedResponse.length} bytes): ${this.hexDump(wrappedResponse)}`);
192
196
  this.ws.send(Buffer.from(wrappedResponse));
193
197
  // === Finalize: derive traffic keys ===
@@ -196,43 +200,51 @@ class WAWebSocket extends events_1.EventEmitter {
196
200
  this.logger.info('Noise handshake completed, traffic keys derived');
197
201
  }
198
202
  /**
199
- * Hex dump utility for debugging binary data
203
+ * Wrap handshake init message (Message 1)
204
+ * Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
200
205
  */
201
- hexDump(data, maxBytes = 64) {
202
- const slice = data.subarray(0, Math.min(data.length, maxBytes));
203
- const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
204
- const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
205
- return `[${hex}]${suffix}`;
206
- }
207
- /**
208
- * Wrap payload dengan WA frame header
209
- * Format: [0x57, 0x41, 0x01, version, len_hi, len_mid, len_lo] + payload
210
- */
211
- wrapWAFrame(payload) {
206
+ wrapHandshakeInit(payload) {
212
207
  const len = payload.length;
213
208
  const header = new Uint8Array(7);
214
209
  header[0] = 0x57; // 'W'
215
210
  header[1] = 0x41; // 'A'
216
- header[2] = 0x01; // binary flag
217
- header[3] = 0x2d; // version 45
211
+ header[2] = 0x06; // version/flag
212
+ header[3] = 0x02; // version/flag
218
213
  header[4] = (len >> 16) & 0xff;
219
214
  header[5] = (len >> 8) & 0xff;
220
215
  header[6] = len & 0xff;
221
216
  return (0, crypto_js_1.concatBytes)(header, payload);
222
217
  }
223
218
  /**
224
- * Strip WA frame header (7 bytes) dari incoming message
225
- * Returns just the payload
219
+ * Wrap post-handshake messages (Messages 2+)
220
+ * Format: [3-byte length] + [payload]
226
221
  */
227
- unwrapWAFrame(data) {
228
- if (data.length < 7) {
229
- throw new Error(`Invalid WA frame: too short (${data.length} bytes)`);
230
- }
231
- // Verify WA magic
232
- if (data[0] !== 0x57 || data[1] !== 0x41) {
233
- throw new Error(`Invalid WA frame magic: ${data[0]}, ${data[1]}`);
222
+ wrapPostHandshake(payload) {
223
+ const len = payload.length;
224
+ const header = new Uint8Array(3);
225
+ header[0] = (len >> 16) & 0xff;
226
+ header[1] = (len >> 8) & 0xff;
227
+ header[2] = len & 0xff;
228
+ return (0, crypto_js_1.concatBytes)(header, payload);
229
+ }
230
+ /**
231
+ * Unwrap incoming message (Messages 2+)
232
+ * Strip 3-byte length prefix
233
+ */
234
+ unwrapIncoming(data) {
235
+ if (data.length < 3) {
236
+ throw new Error(`Message too short: ${data.length} bytes`);
234
237
  }
235
- return data.subarray(7);
238
+ return data.subarray(3);
239
+ }
240
+ /**
241
+ * Hex dump utility for debugging
242
+ */
243
+ hexDump(data, maxBytes = 64) {
244
+ const slice = data.subarray(0, Math.min(data.length, maxBytes));
245
+ const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
246
+ const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
247
+ return `[${hex}]${suffix}`;
236
248
  }
237
249
  /**
238
250
  * Wait for a single WebSocket message with timeout
@@ -278,7 +290,7 @@ class WAWebSocket extends events_1.EventEmitter {
278
290
  }
279
291
  /**
280
292
  * Handle incoming message - decrypt jika handshake done
281
- * After handshake, messages still use WA frame format
293
+ * Post-handshake messages use 3-byte length prefix
282
294
  */
283
295
  handleMessage(data) {
284
296
  if (!this.isHandshakeDone) {
@@ -286,8 +298,8 @@ class WAWebSocket extends events_1.EventEmitter {
286
298
  return;
287
299
  }
288
300
  try {
289
- // Strip WA header (7 bytes) then decrypt
290
- const payload = this.unwrapWAFrame(new Uint8Array(data));
301
+ // Strip 3-byte length prefix then decrypt
302
+ const payload = this.unwrapIncoming(new Uint8Array(data));
291
303
  const plaintext = this.trafficCipher.decrypt(payload);
292
304
  this.emit('message', plaintext);
293
305
  }
@@ -298,14 +310,14 @@ class WAWebSocket extends events_1.EventEmitter {
298
310
  }
299
311
  /**
300
312
  * Send encrypted frame ke server
301
- * Wraps encrypted data dengan WA frame header
313
+ * Post-handshake messages use 3-byte length prefix (no WA magic)
302
314
  */
303
315
  send(plaintext) {
304
316
  if (!this.isHandshakeDone || !this.trafficCipher) {
305
317
  throw new Error('Cannot send before handshake complete');
306
318
  }
307
319
  const ciphertext = this.trafficCipher.encrypt(plaintext);
308
- const frame = this.wrapWAFrame(ciphertext);
320
+ const frame = this.wrapPostHandshake(ciphertext);
309
321
  this.ws.send(Buffer.from(frame));
310
322
  }
311
323
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ws-socket.js","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-socket.js","sourceRoot":"","sources":["../../src/socket/ws-socket.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kangwifi-pro/waliwa",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "Lightweight, RAM-efficient WhatsApp library with hybrid protocol (WhatsApp Web MD + Mobile API), Multi-Branch SKDM Recovery system, Community features, and 9+ Baileys issue fixes. More complete than Baileys, lighter than ZapoJS.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/core/noise.ts CHANGED
@@ -182,13 +182,38 @@ export class NoiseHandshake {
182
182
  }
183
183
 
184
184
  /**
185
- * Step 2: Receive ephemeral + static + EE + ES from responder
186
- * Server sends: [32-byte ephemeral] [48-byte encrypted static] [N-byte encrypted payload]
185
+ * Step 2: Receive server response (protobuf-wrapped)
186
+ *
187
+ * Server sends: [protobuf]
188
+ * field 3 (length-delimited): contains
189
+ * field 1 (32 bytes): server ephemeral key
190
+ * field 2 (48 bytes): encrypted server static key (32 ct + 16 GCM tag)
191
+ * [remaining]: encrypted server payload
192
+ *
193
+ * @param payload The protobuf-wrapped server response (after stripping 3-byte length prefix)
187
194
  */
188
195
  public readResponderHandshake(payload: Uint8Array): { plaintext: Uint8Array } {
189
- // First 32 bytes = ephemeral key
190
- if (payload.length < 32) throw new Error('Handshake too short');
191
- const re = payload.subarray(0, 32);
196
+ // Parse outer protobuf: field 3 contains the handshake data
197
+ const innerData = this.extractProtobufField(payload, 3);
198
+ if (!innerData || innerData.length < 80) {
199
+ throw new Error(`Invalid server handshake: field 3 too short (${innerData?.length ?? 0} bytes)`);
200
+ }
201
+
202
+ // Parse inner protobuf
203
+ // field 1: server ephemeral (32 bytes)
204
+ const serverEphemeral = this.extractProtobufField(innerData, 1);
205
+ if (!serverEphemeral || serverEphemeral.length !== 32) {
206
+ throw new Error(`Invalid server ephemeral: ${serverEphemeral?.length ?? 0} bytes (expected 32)`);
207
+ }
208
+
209
+ // field 2: encrypted server static (48 bytes = 32 ct + 16 tag)
210
+ const encryptedStatic = this.extractProtobufField(innerData, 2);
211
+ if (!encryptedStatic || encryptedStatic.length !== 48) {
212
+ throw new Error(`Invalid encrypted static: ${encryptedStatic?.length ?? 0} bytes (expected 48)`);
213
+ }
214
+
215
+ // === Process Noise handshake ===
216
+ const re = serverEphemeral;
192
217
  this.state.re = re;
193
218
  this.mixHash(re);
194
219
  this.mixKey(re);
@@ -197,10 +222,8 @@ export class NoiseHandshake {
197
222
  const ee = curveSharedSecret(this.state.e.private, re);
198
223
  this.mixKey(ee);
199
224
 
200
- // Next 48 bytes = encrypted static (32-byte ct + 16-byte GCM tag)
201
- if (payload.length < 80) throw new Error('Handshake too short for static');
202
- const encryptedStatic = payload.subarray(32, 80);
203
- const remoteStatic = this.decryptWithHash(encryptedStatic); // 32 bytes
225
+ // Decrypt server static
226
+ const remoteStatic = this.decryptWithHash(encryptedStatic);
204
227
  this.state.rs = remoteStatic;
205
228
  this.mixHash(remoteStatic);
206
229
 
@@ -208,20 +231,107 @@ export class NoiseHandshake {
208
231
  const es = curveSharedSecret(this.state.e.private, remoteStatic);
209
232
  this.mixKey(es);
210
233
 
211
- // Remaining = encrypted payload (may be empty)
212
- const encryptedPayload = payload.subarray(80);
234
+ // Find remaining payload after field 2 (encrypted payload)
213
235
  let plaintext: Uint8Array = new Uint8Array(0);
214
- if (encryptedPayload.length > 0) {
215
- plaintext = this.decryptWithHash(encryptedPayload);
236
+ const afterEphemeral = this.findAfterField(innerData, 1);
237
+ const afterStatic = this.findAfterField(afterEphemeral, 2);
238
+ if (afterStatic && afterStatic.length > 0) {
239
+ // Try to extract field 3 (encrypted payload) if present
240
+ const encPayload = this.extractProtobufField(afterStatic, 3)
241
+ ?? this.extractProtobufField(afterStatic, 5)
242
+ ?? afterStatic; // fallback: treat all remaining as raw payload
243
+ if (encPayload.length > 0) {
244
+ plaintext = this.decryptWithHash(encPayload);
245
+ }
216
246
  }
217
247
 
218
248
  return { plaintext };
219
249
  }
220
250
 
221
251
  /**
222
- * Step 3: Send our static + SE + payload (initiator -> responder)
223
- * Returns: [48-byte encrypted static] [N-byte encrypted payload]
224
- * MUST be called AFTER readResponderHandshake (needs remote ephemeral)
252
+ * Extract a protobuf field from a protobuf message
253
+ * Returns the field's value (for length-delimited fields)
254
+ */
255
+ private extractProtobufField(data: Uint8Array, fieldNumber: number): Uint8Array | null {
256
+ let pos = 0;
257
+ while (pos < data.length) {
258
+ const startPos = pos;
259
+ const tag = this.readVarint(data, pos);
260
+ pos = tag.nextPos;
261
+ const fn = tag.value >> 3;
262
+ const wireType = tag.value & 7;
263
+
264
+ if (fn === fieldNumber && wireType === 2) {
265
+ // Length-delimited field - this is our target
266
+ const len = this.readVarint(data, pos);
267
+ pos = len.nextPos;
268
+ return data.subarray(pos, pos + len.value);
269
+ }
270
+
271
+ // Skip this field
272
+ pos = this.skipField(data, pos, wireType);
273
+ if (pos <= startPos) break; // safety check
274
+ }
275
+ return null;
276
+ }
277
+
278
+ /**
279
+ * Find data after a specific field (for extracting remaining bytes)
280
+ */
281
+ private findAfterField(data: Uint8Array, fieldNumber: number): Uint8Array {
282
+ let pos = 0;
283
+ while (pos < data.length) {
284
+ const startPos = pos;
285
+ const tag = this.readVarint(data, pos);
286
+ pos = tag.nextPos;
287
+ const fn = tag.value >> 3;
288
+ const wireType = tag.value & 7;
289
+
290
+ if (fn === fieldNumber && wireType === 2) {
291
+ const len = this.readVarint(data, pos);
292
+ pos = len.nextPos;
293
+ const afterField = pos + len.value;
294
+ return data.subarray(afterField);
295
+ }
296
+
297
+ pos = this.skipField(data, pos, wireType);
298
+ if (pos <= startPos) break;
299
+ }
300
+ return new Uint8Array(0);
301
+ }
302
+
303
+ private readVarint(data: Uint8Array, pos: number): { value: number; nextPos: number } {
304
+ let result = 0;
305
+ let shift = 0;
306
+ let p = pos;
307
+ while (p < data.length) {
308
+ const b = data[p++];
309
+ result |= (b & 0x7f) << shift;
310
+ if (!(b & 0x80)) break;
311
+ shift += 7;
312
+ if (shift > 35) break; // safety
313
+ }
314
+ return { value: result, nextPos: p };
315
+ }
316
+
317
+ private skipField(data: Uint8Array, pos: number, wireType: number): number {
318
+ if (wireType === 0) { // varint
319
+ return this.readVarint(data, pos).nextPos;
320
+ } else if (wireType === 2) { // length-delimited
321
+ const len = this.readVarint(data, pos);
322
+ return len.nextPos + len.value;
323
+ } else if (wireType === 5) { // 32-bit
324
+ return pos + 4;
325
+ } else if (wireType === 1) { // 64-bit
326
+ return pos + 8;
327
+ }
328
+ return pos;
329
+ }
330
+
331
+ /**
332
+ * Step 3: Send our static + SE + payload (protobuf-wrapped)
333
+ * Returns: protobuf field 4 containing [field 1: enc_static] [field 3: enc_payload]
334
+ * MUST be called AFTER readResponderHandshake
225
335
  */
226
336
  public writeClientResponse(payload: Uint8Array): Uint8Array {
227
337
  // Encrypt our static key (32 bytes → 48 bytes with GCM tag)
@@ -236,7 +346,44 @@ export class NoiseHandshake {
236
346
  // Encrypt payload
237
347
  const encryptedPayload = this.encryptWithHash(payload);
238
348
 
239
- return concatBytes(encryptedStatic, encryptedPayload);
349
+ // Build inner protobuf: field 1 (enc static) + field 3 (enc payload)
350
+ const inner = this.buildProtobufField(1, encryptedStatic)
351
+ .concat(this.buildProtobufField(3, encryptedPayload));
352
+
353
+ // Wrap in outer protobuf field 4
354
+ const innerBytes = concatBytes(...inner);
355
+ return this.encodeProtobufField(4, innerBytes);
356
+ }
357
+
358
+ /**
359
+ * Build protobuf field encoding (returns array of byte chunks)
360
+ */
361
+ private buildProtobufField(fieldNumber: number, value: Uint8Array): Uint8Array[] {
362
+ const tag = (fieldNumber << 3) | 2; // wire type 2 = length-delimited
363
+ return [this.encodeVarint(tag), this.encodeVarint(value.length), value];
364
+ }
365
+
366
+ /**
367
+ * Encode a complete protobuf field (tag + length + value)
368
+ */
369
+ private encodeProtobufField(fieldNumber: number, value: Uint8Array): Uint8Array {
370
+ const tag = (fieldNumber << 3) | 2;
371
+ const tagBytes = this.encodeVarint(tag);
372
+ const lenBytes = this.encodeVarint(value.length);
373
+ return concatBytes(tagBytes, lenBytes, value);
374
+ }
375
+
376
+ /**
377
+ * Encode a varint
378
+ */
379
+ private encodeVarint(value: number): Uint8Array {
380
+ const bytes: number[] = [];
381
+ while (value > 0x7f) {
382
+ bytes.push((value & 0x7f) | 0x80);
383
+ value >>= 7;
384
+ }
385
+ bytes.push(value & 0x7f);
386
+ return new Uint8Array(bytes);
240
387
  }
241
388
 
242
389
  /**
@@ -329,13 +476,28 @@ export class NoiseHandshake {
329
476
  }
330
477
 
331
478
  /**
332
- * Build initial client hello - ONLY the ephemeral key for message 1
333
- * The encrypted static + payload (message 3) is sent separately
334
- * after receiving the server's response (message 2)
479
+ * Build initial client hello - Message 1 of Noise XX
480
+ *
481
+ * WA Protocol: Wrap ephemeral in protobuf field 2:
482
+ * field 2 (length-delimited): contains
483
+ * field 1 (32 bytes): ephemeral public key
484
+ *
485
+ * Encoding: 12 22 0a 20 [32 bytes ephemeral]
486
+ * - 12 = field 2, wire type 2 (length-delimited)
487
+ * - 22 = length 34
488
+ * - 0a = field 1, wire type 2
489
+ * - 20 = length 32
490
+ * - [32 bytes] = ephemeral public key
335
491
  */
336
492
  public buildClientHello(): Uint8Array {
337
- // Message 1: just the ephemeral public key
338
- return this.writeEphemeral();
493
+ // Message 1: just the ephemeral public key, wrapped in protobuf
494
+ const ephemeral = this.writeEphemeral();
495
+
496
+ // Inner protobuf: field 1 = ephemeral (32 bytes)
497
+ const inner = this.encodeProtobufField(1, ephemeral);
498
+
499
+ // Outer protobuf: field 2 = inner protobuf
500
+ return this.encodeProtobufField(2, inner);
339
501
  }
340
502
  }
341
503
 
package/src/index.ts CHANGED
@@ -324,7 +324,7 @@ export {
324
324
  export * from './types/index.js';
325
325
 
326
326
  // ============== Version ==============
327
- export const VERSION = '1.1.3';
327
+ export const VERSION = '1.1.4';
328
328
  export const LIBRARY_NAME = 'waliwa';
329
329
 
330
330
  // ============== Default Config ==============
@@ -171,66 +171,72 @@ export class WAWebSocket extends EventEmitter {
171
171
  /**
172
172
  * Start Noise Protocol XX handshake
173
173
  *
174
- * WA Frame Format (used in ALL messages including handshake):
175
- * [0x57, 0x41] (2 bytes "WA" magic)
176
- * [0x01] (1 byte binary flag)
177
- * [version] (1 byte, e.g. 0x2d = 45)
178
- * [length_hi, length_mid, length_lo] (3 bytes big-endian length)
179
- * [payload]
174
+ * WA Frame Format:
175
+ * Message 1: [0x57, 0x41, 0x06, 0x02] (4-byte WA header) + [3-byte length] + [protobuf(ephemeral)]
176
+ * Messages 2+: [3-byte length] + [raw Noise data]
177
+ *
178
+ * Protobuf wrapper for ephemeral (Message 1 only):
179
+ * 12 22 0a 20 [32 bytes ephemeral]
180
+ * - 12 22 = field 2, length 34
181
+ * - 0a 20 = field 1, length 32
182
+ * - [32 bytes] = ephemeral public key
180
183
  *
181
184
  * Noise XX Pattern (3 messages):
182
- * 1. Client → Server: WA header + ephemeral (32 bytes)
183
- * 2. Server → Client: WA header + ephemeral(32) + enc_static(48) + enc_payload
184
- * 3. Client → Server: WA header + enc_static(48) + enc_payload
185
+ * 1. Client → Server: WA header + protobuf(ephemeral)
186
+ * 2. Server → Client: ephemeral + enc_static + enc_payload
187
+ * 3. Client → Server: enc_static + enc_payload
185
188
  */
186
189
  private async startHandshake(): Promise<void> {
187
190
  this.handshake = new NoiseHandshake(this.noiseKey, true);
188
191
 
189
- // === Message 1: Send client ephemeral only ===
190
- const ephemeralPub = this.handshake.buildClientHello();
191
- const clientHello = this.wrapWAFrame(ephemeralPub);
192
+ // === Message 1: Send client ephemeral wrapped in protobuf ===
193
+ // buildClientHello() returns protobuf: 12 22 0a 20 [ephemeral]
194
+ const protobufEphemeral = this.handshake.buildClientHello();
195
+
196
+ // Build message 1: WA header (4 bytes) + 3-byte length + protobuf payload
197
+ const clientHello = this.wrapHandshakeInit(protobufEphemeral);
192
198
  this.logger.info(`Sending client hello: ${this.hexDump(clientHello)}`);
193
199
  this.ws!.send(Buffer.from(clientHello));
194
200
 
195
201
  // === Message 2: Wait for server response ===
196
- // Server might send multiple frames - skip short/ack messages until we get the actual handshake
197
202
  let serverPayload: Uint8Array | null = null;
198
203
  for (let attempt = 0; attempt < 5; attempt++) {
199
204
  const serverData = await this.waitForMessage(15000);
200
205
  const bytes = new Uint8Array(serverData);
201
206
  this.logger.info(`Received msg ${attempt + 1} (${serverData.length} bytes): ${this.hexDump(bytes)}`);
202
207
 
203
- // Skip short messages (acks, pings, etc.)
204
- if (serverData.length < 7) {
205
- this.logger.info(`Short message (${serverData.length} bytes), treating as ack/ping, waiting for next...`);
208
+ // Skip very short messages (acks, error frames)
209
+ if (serverData.length < 4) {
210
+ this.logger.info(`Short message, skipping (likely ack/error)`);
211
+ // Check if it's a close frame: 88 02 = WS close, 03 f3 = code 1011
212
+ if (serverData.length === 4 && bytes[0] === 0x88) {
213
+ const closeCode = (bytes[2] << 8) | bytes[3];
214
+ throw new Error(`Server rejected handshake (close code ${closeCode})`);
215
+ }
206
216
  continue;
207
217
  }
208
218
 
209
- // Try to unwrap WA frame
210
- try {
211
- serverPayload = this.unwrapWAFrame(bytes);
212
- this.logger.info(`Unwrapped WA frame, payload ${serverPayload.length} bytes: ${this.hexDump(serverPayload)}`);
213
- break;
214
- } catch (err: any) {
215
- // Maybe it's raw Noise data without WA header
216
- this.logger.info(`WA unwrap failed: ${err.message}, trying as raw data`);
217
- serverPayload = bytes;
218
- break;
219
- }
219
+ // Messages 2+ use 3-byte length prefix (no WA magic)
220
+ // Strip the 3-byte length prefix, keep protobuf for NoiseHandshake to parse
221
+ serverPayload = bytes.subarray(3);
222
+ this.logger.info(`Stripped 3-byte length prefix, payload ${serverPayload.length} bytes`);
223
+ break;
220
224
  }
221
225
 
222
- if (!serverPayload || serverPayload.length < 32) {
226
+ if (!serverPayload || serverPayload.length < 80) {
223
227
  throw new Error(`Invalid handshake response (payload ${serverPayload?.length ?? 0} bytes, need ≥ 80)`);
224
228
  }
225
229
 
226
- // Process server Noise data
230
+ // Process server Noise data (NoiseHandshake will parse protobuf internally)
227
231
  this.handshake.readResponderHandshake(serverPayload);
228
232
  this.logger.info('Server handshake response processed');
229
233
 
230
234
  // === Message 3: Send encrypted static + payload ===
235
+ // writeClientResponse() returns protobuf (field 4 containing enc static + enc payload)
236
+ // Wrap with 3-byte length prefix only (no WA magic)
231
237
  const clientPayload = this.buildClientPayload();
232
238
  const clientResponse = this.handshake.writeClientResponse(clientPayload);
233
- const wrappedResponse = this.wrapWAFrame(clientResponse);
239
+ const wrappedResponse = this.wrapPostHandshake(clientResponse);
234
240
  this.logger.info(`Sending client response (${wrappedResponse.length} bytes): ${this.hexDump(wrappedResponse)}`);
235
241
  this.ws!.send(Buffer.from(wrappedResponse));
236
242
 
@@ -241,26 +247,16 @@ export class WAWebSocket extends EventEmitter {
241
247
  }
242
248
 
243
249
  /**
244
- * Hex dump utility for debugging binary data
250
+ * Wrap handshake init message (Message 1)
251
+ * Format: [0x57, 0x41, 0x06, 0x02] + [3-byte length] + [payload]
245
252
  */
246
- private hexDump(data: Uint8Array, maxBytes: number = 64): string {
247
- const slice = data.subarray(0, Math.min(data.length, maxBytes));
248
- const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
249
- const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
250
- return `[${hex}]${suffix}`;
251
- }
252
-
253
- /**
254
- * Wrap payload dengan WA frame header
255
- * Format: [0x57, 0x41, 0x01, version, len_hi, len_mid, len_lo] + payload
256
- */
257
- private wrapWAFrame(payload: Uint8Array): Uint8Array {
253
+ private wrapHandshakeInit(payload: Uint8Array): Uint8Array {
258
254
  const len = payload.length;
259
255
  const header = new Uint8Array(7);
260
256
  header[0] = 0x57; // 'W'
261
257
  header[1] = 0x41; // 'A'
262
- header[2] = 0x01; // binary flag
263
- header[3] = 0x2d; // version 45
258
+ header[2] = 0x06; // version/flag
259
+ header[3] = 0x02; // version/flag
264
260
  header[4] = (len >> 16) & 0xff;
265
261
  header[5] = (len >> 8) & 0xff;
266
262
  header[6] = len & 0xff;
@@ -268,18 +264,37 @@ export class WAWebSocket extends EventEmitter {
268
264
  }
269
265
 
270
266
  /**
271
- * Strip WA frame header (7 bytes) dari incoming message
272
- * Returns just the payload
267
+ * Wrap post-handshake messages (Messages 2+)
268
+ * Format: [3-byte length] + [payload]
273
269
  */
274
- private unwrapWAFrame(data: Uint8Array): Uint8Array {
275
- if (data.length < 7) {
276
- throw new Error(`Invalid WA frame: too short (${data.length} bytes)`);
277
- }
278
- // Verify WA magic
279
- if (data[0] !== 0x57 || data[1] !== 0x41) {
280
- throw new Error(`Invalid WA frame magic: ${data[0]}, ${data[1]}`);
270
+ private wrapPostHandshake(payload: Uint8Array): Uint8Array {
271
+ const len = payload.length;
272
+ const header = new Uint8Array(3);
273
+ header[0] = (len >> 16) & 0xff;
274
+ header[1] = (len >> 8) & 0xff;
275
+ header[2] = len & 0xff;
276
+ return concatBytes(header, payload);
277
+ }
278
+
279
+ /**
280
+ * Unwrap incoming message (Messages 2+)
281
+ * Strip 3-byte length prefix
282
+ */
283
+ private unwrapIncoming(data: Uint8Array): Uint8Array {
284
+ if (data.length < 3) {
285
+ throw new Error(`Message too short: ${data.length} bytes`);
281
286
  }
282
- return data.subarray(7);
287
+ return data.subarray(3);
288
+ }
289
+
290
+ /**
291
+ * Hex dump utility for debugging
292
+ */
293
+ private hexDump(data: Uint8Array, maxBytes: number = 64): string {
294
+ const slice = data.subarray(0, Math.min(data.length, maxBytes));
295
+ const hex = Array.from(slice).map(b => b.toString(16).padStart(2, '0')).join(' ');
296
+ const suffix = data.length > maxBytes ? ` ... (${data.length} bytes total)` : '';
297
+ return `[${hex}]${suffix}`;
283
298
  }
284
299
 
285
300
  /**
@@ -332,7 +347,7 @@ export class WAWebSocket extends EventEmitter {
332
347
 
333
348
  /**
334
349
  * Handle incoming message - decrypt jika handshake done
335
- * After handshake, messages still use WA frame format
350
+ * Post-handshake messages use 3-byte length prefix
336
351
  */
337
352
  private handleMessage(data: Buffer): void {
338
353
  if (!this.isHandshakeDone) {
@@ -340,8 +355,8 @@ export class WAWebSocket extends EventEmitter {
340
355
  return;
341
356
  }
342
357
  try {
343
- // Strip WA header (7 bytes) then decrypt
344
- const payload = this.unwrapWAFrame(new Uint8Array(data));
358
+ // Strip 3-byte length prefix then decrypt
359
+ const payload = this.unwrapIncoming(new Uint8Array(data));
345
360
  const plaintext = this.trafficCipher!.decrypt(payload);
346
361
  this.emit('message', plaintext);
347
362
  } catch (err: any) {
@@ -352,14 +367,14 @@ export class WAWebSocket extends EventEmitter {
352
367
 
353
368
  /**
354
369
  * Send encrypted frame ke server
355
- * Wraps encrypted data dengan WA frame header
370
+ * Post-handshake messages use 3-byte length prefix (no WA magic)
356
371
  */
357
372
  send(plaintext: Uint8Array): void {
358
373
  if (!this.isHandshakeDone || !this.trafficCipher) {
359
374
  throw new Error('Cannot send before handshake complete');
360
375
  }
361
376
  const ciphertext = this.trafficCipher.encrypt(plaintext);
362
- const frame = this.wrapWAFrame(ciphertext);
377
+ const frame = this.wrapPostHandshake(ciphertext);
363
378
  this.ws!.send(Buffer.from(frame));
364
379
  }
365
380