@kangwifi-pro/waliwa 1.0.0

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 (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +600 -0
  3. package/dist/advanced/features.d.ts +211 -0
  4. package/dist/advanced/features.d.ts.map +1 -0
  5. package/dist/advanced/features.js +671 -0
  6. package/dist/advanced/features.js.map +1 -0
  7. package/dist/auth/auth-state.d.ts +89 -0
  8. package/dist/auth/auth-state.d.ts.map +1 -0
  9. package/dist/auth/auth-state.js +330 -0
  10. package/dist/auth/auth-state.js.map +1 -0
  11. package/dist/auth/pairing-code.d.ts +78 -0
  12. package/dist/auth/pairing-code.d.ts.map +1 -0
  13. package/dist/auth/pairing-code.js +191 -0
  14. package/dist/auth/pairing-code.js.map +1 -0
  15. package/dist/auth/qr-code.d.ts +60 -0
  16. package/dist/auth/qr-code.d.ts.map +1 -0
  17. package/dist/auth/qr-code.js +151 -0
  18. package/dist/auth/qr-code.js.map +1 -0
  19. package/dist/calls/handler.d.ts +61 -0
  20. package/dist/calls/handler.d.ts.map +1 -0
  21. package/dist/calls/handler.js +117 -0
  22. package/dist/calls/handler.js.map +1 -0
  23. package/dist/core/binary.d.ts +74 -0
  24. package/dist/core/binary.d.ts.map +1 -0
  25. package/dist/core/binary.js +448 -0
  26. package/dist/core/binary.js.map +1 -0
  27. package/dist/core/crypto.d.ts +60 -0
  28. package/dist/core/crypto.d.ts.map +1 -0
  29. package/dist/core/crypto.js +170 -0
  30. package/dist/core/crypto.js.map +1 -0
  31. package/dist/core/noise.d.ts +106 -0
  32. package/dist/core/noise.d.ts.map +1 -0
  33. package/dist/core/noise.js +307 -0
  34. package/dist/core/noise.js.map +1 -0
  35. package/dist/events/emitter.d.ts +44 -0
  36. package/dist/events/emitter.d.ts.map +1 -0
  37. package/dist/events/emitter.js +79 -0
  38. package/dist/events/emitter.js.map +1 -0
  39. package/dist/features/index.d.ts +342 -0
  40. package/dist/features/index.d.ts.map +1 -0
  41. package/dist/features/index.js +755 -0
  42. package/dist/features/index.js.map +1 -0
  43. package/dist/fixes/index.d.ts +333 -0
  44. package/dist/fixes/index.d.ts.map +1 -0
  45. package/dist/fixes/index.js +762 -0
  46. package/dist/fixes/index.js.map +1 -0
  47. package/dist/groups/management.d.ts +86 -0
  48. package/dist/groups/management.d.ts.map +1 -0
  49. package/dist/groups/management.js +443 -0
  50. package/dist/groups/management.js.map +1 -0
  51. package/dist/index.d.ts +65 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +236 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/messages/media.d.ts +93 -0
  56. package/dist/messages/media.d.ts.map +1 -0
  57. package/dist/messages/media.js +252 -0
  58. package/dist/messages/media.js.map +1 -0
  59. package/dist/messages/message-encoder.d.ts +70 -0
  60. package/dist/messages/message-encoder.d.ts.map +1 -0
  61. package/dist/messages/message-encoder.js +453 -0
  62. package/dist/messages/message-encoder.js.map +1 -0
  63. package/dist/messages/send.d.ts +101 -0
  64. package/dist/messages/send.d.ts.map +1 -0
  65. package/dist/messages/send.js +409 -0
  66. package/dist/messages/send.js.map +1 -0
  67. package/dist/recovery/index.d.ts +125 -0
  68. package/dist/recovery/index.d.ts.map +1 -0
  69. package/dist/recovery/index.js +584 -0
  70. package/dist/recovery/index.js.map +1 -0
  71. package/dist/skdm/index.d.ts +220 -0
  72. package/dist/skdm/index.d.ts.map +1 -0
  73. package/dist/skdm/index.js +600 -0
  74. package/dist/skdm/index.js.map +1 -0
  75. package/dist/socket/hybrid.d.ts +118 -0
  76. package/dist/socket/hybrid.d.ts.map +1 -0
  77. package/dist/socket/hybrid.js +352 -0
  78. package/dist/socket/hybrid.js.map +1 -0
  79. package/dist/socket/wa-socket.d.ts +300 -0
  80. package/dist/socket/wa-socket.d.ts.map +1 -0
  81. package/dist/socket/wa-socket.js +1094 -0
  82. package/dist/socket/wa-socket.js.map +1 -0
  83. package/dist/socket/ws-socket.d.ts +96 -0
  84. package/dist/socket/ws-socket.d.ts.map +1 -0
  85. package/dist/socket/ws-socket.js +302 -0
  86. package/dist/socket/ws-socket.js.map +1 -0
  87. package/dist/types/index.d.ts +444 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +7 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/utils/jid.d.ts +46 -0
  92. package/dist/utils/jid.d.ts.map +1 -0
  93. package/dist/utils/jid.js +152 -0
  94. package/dist/utils/jid.js.map +1 -0
  95. package/dist/utils/logger.d.ts +45 -0
  96. package/dist/utils/logger.d.ts.map +1 -0
  97. package/dist/utils/logger.js +79 -0
  98. package/dist/utils/logger.js.map +1 -0
  99. package/dist/utils/retry.d.ts +43 -0
  100. package/dist/utils/retry.d.ts.map +1 -0
  101. package/dist/utils/retry.js +175 -0
  102. package/dist/utils/retry.js.map +1 -0
  103. package/docs/API.md +745 -0
  104. package/docs/ARCHITECTURE.md +307 -0
  105. package/docs/BAILEYS_FIXES.md +360 -0
  106. package/docs/FEATURES.md +532 -0
  107. package/docs/PROTOCOL.md +489 -0
  108. package/docs/RECOVERY.md +409 -0
  109. package/docs/SKDM.md +233 -0
  110. package/examples/ai-bot/index.ts +479 -0
  111. package/examples/ai-bot/package.json +17 -0
  112. package/examples/echo-bot/index.ts +171 -0
  113. package/examples/echo-bot/package.json +18 -0
  114. package/examples/group-bot/index.ts +557 -0
  115. package/examples/group-bot/package.json +17 -0
  116. package/examples/rest-gateway/index.ts +499 -0
  117. package/examples/rest-gateway/package.json +19 -0
  118. package/package.json +75 -0
  119. package/src/advanced/features.ts +817 -0
  120. package/src/auth/auth-state.ts +342 -0
  121. package/src/auth/pairing-code.ts +246 -0
  122. package/src/auth/qr-code.ts +191 -0
  123. package/src/calls/handler.ts +153 -0
  124. package/src/core/binary.ts +464 -0
  125. package/src/core/crypto.ts +189 -0
  126. package/src/core/noise.ts +406 -0
  127. package/src/events/emitter.ts +88 -0
  128. package/src/features/index.ts +921 -0
  129. package/src/fixes/index.ts +882 -0
  130. package/src/groups/management.ts +497 -0
  131. package/src/index.ts +274 -0
  132. package/src/messages/media.ts +372 -0
  133. package/src/messages/message-encoder.ts +520 -0
  134. package/src/messages/send.ts +521 -0
  135. package/src/recovery/index.ts +704 -0
  136. package/src/skdm/index.ts +693 -0
  137. package/src/socket/hybrid.ts +414 -0
  138. package/src/socket/wa-socket.ts +1347 -0
  139. package/src/socket/ws-socket.ts +355 -0
  140. package/src/types/index.ts +457 -0
  141. package/src/utils/jid.ts +156 -0
  142. package/src/utils/logger.ts +84 -0
  143. package/src/utils/retry.ts +205 -0
  144. package/tsconfig.json +30 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Waliwa - Binary encoder/decoder untuk WhatsApp Web binary protocol
3
+ *
4
+ * WhatsApp menggunakan custom binary format untuk encode pesan di WebSocket.
5
+ * Format ini berbeda dari protobuf - lebih ringan dan custom.
6
+ *
7
+ * Manual implementation untuk pemahaman mendalam struktur WA binary.
8
+ * Reference: WhatsApp Web binary tags, BINARY_NODE_ENCODING
9
+ */
10
+ export declare enum TAG_LIST {
11
+ EMPTY = 0,
12
+ DICTIONARY_0 = 236,// 0xFC
13
+ DICTIONARY_1 = 237,// 0xFD
14
+ DICTIONARY_2 = 238,// 0xFE
15
+ DICTIONARY_3 = 239
16
+ }
17
+ export declare const TAG_NIBBLE = 255;
18
+ export declare const TAG_HEX = 254;
19
+ export declare const TAG_BINARY_8 = 252;
20
+ export declare const TAG_BINARY_20 = 253;
21
+ export declare const TAG_BINARY_32 = 254;
22
+ export declare const TAG_ADJACENT = 255;
23
+ export declare const TAG_LIST_8 = 248;
24
+ export declare const TAG_LIST_16 = 249;
25
+ export declare const TAG_JID_PAIR = 250;
26
+ export declare const TAG_PACKED_NIBBLE = 251;
27
+ export declare const TAG_PACKED_HEX = 252;
28
+ /**
29
+ * Pack nibbles (4 bits per char, jadi 2 char per byte) - lebih hemat space
30
+ * untuk encoding string numeric/hex
31
+ */
32
+ export declare function packNibbles(str: string): Uint8Array;
33
+ /**
34
+ * Unpack nibbles dari binary ke string
35
+ */
36
+ export declare function unpackNibbles(bytes: Uint8Array): string;
37
+ export interface BinaryNode {
38
+ tag: string;
39
+ attrs: Record<string, string>;
40
+ content?: string | Uint8Array | BinaryNode[];
41
+ }
42
+ /**
43
+ * Binary encoder - mengubah BinaryNode ke Uint8Array
44
+ * Implementasi sesuai WA Web binary protocol
45
+ */
46
+ export declare class BinaryEncoder {
47
+ private buffer;
48
+ encode(node: BinaryNode): Uint8Array;
49
+ private writeNode;
50
+ private writeString;
51
+ private writePackedString;
52
+ private writeBytes;
53
+ }
54
+ /**
55
+ * Binary decoder - parse WA binary protocol ke BinaryNode
56
+ */
57
+ export declare class BinaryDecoder {
58
+ private data;
59
+ private pos;
60
+ decode(data: Uint8Array): BinaryNode;
61
+ private readNode;
62
+ private readChild;
63
+ private readString;
64
+ private readPackedString;
65
+ private readBytes;
66
+ private readByte;
67
+ }
68
+ export declare function encodeBinaryNode(node: BinaryNode): Uint8Array;
69
+ export declare function decodeBinaryNode(data: Uint8Array): BinaryNode;
70
+ /**
71
+ * Convert binary node to XML-like string for debugging
72
+ */
73
+ export declare function binaryNodeToString(node: BinaryNode, indent?: number): string;
74
+ //# sourceMappingURL=binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/core/binary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,YAAY,MAAM,CAAE,OAAO;IAC3B,YAAY,MAAM,CAAE,OAAO;IAC3B,YAAY,MAAM,CAAE,OAAO;IAC3B,YAAY,MAAM;CACnB;AAGD,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,OAAO,MAAM,CAAC;AAG3B,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,cAAc,MAAM,CAAC;AAMlC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAUnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CASvD;AAID,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,EAAE,CAAC;CAC9C;AAUD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAE9B,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;IAMpC,OAAO,CAAC,SAAS;IA+CjB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,UAAU;CAsBnB;AAID;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,GAAG,CAAa;IAExB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;IAMpC,OAAO,CAAC,QAAQ;IA4DhB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;IAyClB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,QAAQ;CAGjB;AAoED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAE7D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAE7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CA0B/E"}
@@ -0,0 +1,448 @@
1
+ "use strict";
2
+ /**
3
+ * Waliwa - Binary encoder/decoder untuk WhatsApp Web binary protocol
4
+ *
5
+ * WhatsApp menggunakan custom binary format untuk encode pesan di WebSocket.
6
+ * Format ini berbeda dari protobuf - lebih ringan dan custom.
7
+ *
8
+ * Manual implementation untuk pemahaman mendalam struktur WA binary.
9
+ * Reference: WhatsApp Web binary tags, BINARY_NODE_ENCODING
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BinaryDecoder = exports.BinaryEncoder = exports.TAG_PACKED_HEX = exports.TAG_PACKED_NIBBLE = exports.TAG_JID_PAIR = exports.TAG_LIST_16 = exports.TAG_LIST_8 = exports.TAG_ADJACENT = exports.TAG_BINARY_32 = exports.TAG_BINARY_20 = exports.TAG_BINARY_8 = exports.TAG_HEX = exports.TAG_NIBBLE = exports.TAG_LIST = void 0;
13
+ exports.packNibbles = packNibbles;
14
+ exports.unpackNibbles = unpackNibbles;
15
+ exports.encodeBinaryNode = encodeBinaryNode;
16
+ exports.decodeBinaryNode = decodeBinaryNode;
17
+ exports.binaryNodeToString = binaryNodeToString;
18
+ // ============== Tag Constants ==============
19
+ // List tags (pakai byte ini untuk type)
20
+ var TAG_LIST;
21
+ (function (TAG_LIST) {
22
+ TAG_LIST[TAG_LIST["EMPTY"] = 0] = "EMPTY";
23
+ TAG_LIST[TAG_LIST["DICTIONARY_0"] = 236] = "DICTIONARY_0";
24
+ TAG_LIST[TAG_LIST["DICTIONARY_1"] = 237] = "DICTIONARY_1";
25
+ TAG_LIST[TAG_LIST["DICTIONARY_2"] = 238] = "DICTIONARY_2";
26
+ TAG_LIST[TAG_LIST["DICTIONARY_3"] = 239] = "DICTIONARY_3";
27
+ })(TAG_LIST || (exports.TAG_LIST = TAG_LIST = {}));
28
+ // Nibble pack (4 bits per char)
29
+ exports.TAG_NIBBLE = 255; // 0xFF already used by dict 3, so different
30
+ exports.TAG_HEX = 254; // ditto
31
+ // Hex tags
32
+ exports.TAG_BINARY_8 = 252; // 0xFC
33
+ exports.TAG_BINARY_20 = 253; // 0xFD
34
+ exports.TAG_BINARY_32 = 254; // 0xFE
35
+ exports.TAG_ADJACENT = 255; // 0xFF
36
+ exports.TAG_LIST_8 = 248; // 0xF8
37
+ exports.TAG_LIST_16 = 249; // 0xF9
38
+ exports.TAG_JID_PAIR = 250; // 0xFA
39
+ exports.TAG_PACKED_NIBBLE = 251; // 0xFB
40
+ exports.TAG_PACKED_HEX = 252; // 0xFC
41
+ // ============== Packed Encoding ==============
42
+ const HEX_CHARS = '0123456789abcdef';
43
+ /**
44
+ * Pack nibbles (4 bits per char, jadi 2 char per byte) - lebih hemat space
45
+ * untuk encoding string numeric/hex
46
+ */
47
+ function packNibbles(str) {
48
+ // Pad agar panjang genap
49
+ if (str.length % 2 !== 0)
50
+ str += '0';
51
+ const result = new Uint8Array(str.length / 2);
52
+ for (let i = 0; i < str.length; i += 2) {
53
+ const high = parseInt(str[i], 16);
54
+ const low = parseInt(str[i + 1], 16);
55
+ result[i / 2] = (high << 4) | low;
56
+ }
57
+ return result;
58
+ }
59
+ /**
60
+ * Unpack nibbles dari binary ke string
61
+ */
62
+ function unpackNibbles(bytes) {
63
+ let result = '';
64
+ for (let i = 0; i < bytes.length; i++) {
65
+ const high = (bytes[i] >> 4) & 0xf;
66
+ const low = bytes[i] & 0xf;
67
+ result += HEX_CHARS[high];
68
+ result += HEX_CHARS[low];
69
+ }
70
+ return result;
71
+ }
72
+ // ============== Constants ==============
73
+ const NUM_DOUBLE_BYTE = 251; // 0xFB
74
+ const NUM_SINGLE_BYTE = 250; // 0xFA
75
+ const NUM_QUAD_BYTE = 252; // 0xFC
76
+ // ============== Encoder ==============
77
+ /**
78
+ * Binary encoder - mengubah BinaryNode ke Uint8Array
79
+ * Implementasi sesuai WA Web binary protocol
80
+ */
81
+ class BinaryEncoder {
82
+ buffer = [];
83
+ encode(node) {
84
+ this.buffer = [];
85
+ this.writeNode(node);
86
+ return new Uint8Array(this.buffer);
87
+ }
88
+ writeNode(node) {
89
+ if (!node)
90
+ return;
91
+ const children = Array.isArray(node.content) ? node.content : [];
92
+ const hasContent = node.content !== undefined;
93
+ const numAttrs = Object.keys(node.attrs || {}).length;
94
+ // Write tag header
95
+ if (numAttrs === 0 && !hasContent) {
96
+ this.buffer.push(TAG_LIST.EMPTY);
97
+ }
98
+ else if (numAttrs === 0) {
99
+ this.buffer.push(TAG_LIST.EMPTY | 0x80);
100
+ }
101
+ else if (numAttrs < 256 && children.length < 256) {
102
+ this.buffer.push(TAG_LIST.EMPTY | (numAttrs << 4) | (children.length > 0 ? 0x80 : 0));
103
+ }
104
+ else {
105
+ this.buffer.push(exports.TAG_LIST_8);
106
+ this.buffer.push(numAttrs & 0xff);
107
+ this.buffer.push(children.length & 0xff);
108
+ }
109
+ // Write tag string (we assume tag is in dict, encode as packed nibble index)
110
+ this.writeString(node.tag);
111
+ // Write attributes
112
+ for (const [k, v] of Object.entries(node.attrs)) {
113
+ this.writeString(k);
114
+ this.writeString(v);
115
+ }
116
+ // Write content
117
+ if (children.length > 0) {
118
+ for (const child of children) {
119
+ if (typeof child === 'string') {
120
+ this.writeString(child);
121
+ }
122
+ else if (child instanceof Uint8Array) {
123
+ this.writeBytes(child);
124
+ }
125
+ else {
126
+ this.writeNode(child);
127
+ }
128
+ }
129
+ }
130
+ else if (typeof node.content === 'string') {
131
+ this.writeString(node.content);
132
+ }
133
+ else if (node.content instanceof Uint8Array) {
134
+ this.writeBytes(node.content);
135
+ }
136
+ }
137
+ writeString(str) {
138
+ if (str === '') {
139
+ this.buffer.push(TAG_LIST.EMPTY);
140
+ return;
141
+ }
142
+ // Try to find in dictionary
143
+ const dictIndex = findInDict(str);
144
+ if (dictIndex !== -1) {
145
+ const dict = dictIndex >> 8;
146
+ const idx = dictIndex & 0xff;
147
+ this.buffer.push(TAG_LIST.DICTIONARY_0 + dict);
148
+ this.buffer.push(idx);
149
+ return;
150
+ }
151
+ // Try nibble packing for hex/numeric strings
152
+ if (/^[0-9a-fA-F]+$/.test(str) && str.length > 1) {
153
+ this.buffer.push(exports.TAG_PACKED_HEX);
154
+ this.writePackedString(str);
155
+ return;
156
+ }
157
+ if (/^[0-9]+$/.test(str) && str.length > 1) {
158
+ this.buffer.push(exports.TAG_PACKED_NIBBLE);
159
+ this.writePackedString(str);
160
+ return;
161
+ }
162
+ // Default: raw bytes
163
+ this.writeBytes(new TextEncoder().encode(str));
164
+ }
165
+ writePackedString(str) {
166
+ // Pack nibbles - 2 char per byte, terminate with 0xf
167
+ const packed = packNibbles(str);
168
+ this.buffer.push(...packed);
169
+ // Terminator
170
+ this.buffer.push(0xf);
171
+ }
172
+ writeBytes(bytes) {
173
+ const len = bytes.length;
174
+ if (len < 256) {
175
+ this.buffer.push(exports.TAG_BINARY_8);
176
+ this.buffer.push(len);
177
+ }
178
+ else if (len < 1048576) {
179
+ this.buffer.push(exports.TAG_BINARY_20);
180
+ this.buffer.push((len >> 16) & 0xff);
181
+ this.buffer.push((len >> 8) & 0xff);
182
+ this.buffer.push(len & 0xff);
183
+ }
184
+ else {
185
+ this.buffer.push(exports.TAG_BINARY_32);
186
+ // 4 bytes big-endian
187
+ this.buffer.push((len >> 24) & 0xff);
188
+ this.buffer.push((len >> 16) & 0xff);
189
+ this.buffer.push((len >> 8) & 0xff);
190
+ this.buffer.push(len & 0xff);
191
+ }
192
+ for (let i = 0; i < bytes.length; i++) {
193
+ this.buffer.push(bytes[i]);
194
+ }
195
+ }
196
+ }
197
+ exports.BinaryEncoder = BinaryEncoder;
198
+ // ============== Decoder ==============
199
+ /**
200
+ * Binary decoder - parse WA binary protocol ke BinaryNode
201
+ */
202
+ class BinaryDecoder {
203
+ data;
204
+ pos = 0;
205
+ decode(data) {
206
+ this.data = data;
207
+ this.pos = 0;
208
+ return this.readNode();
209
+ }
210
+ readNode() {
211
+ const listFlag = (0x80 & this.readByte()) !== 0;
212
+ const numAttrs = 0x7f & this.readByte();
213
+ const tag = this.readString();
214
+ const attrs = {};
215
+ for (let i = 0; i < numAttrs; i++) {
216
+ const key = this.readString();
217
+ const value = this.readString();
218
+ attrs[key] = value;
219
+ }
220
+ let content;
221
+ if (listFlag) {
222
+ const children = [];
223
+ while (this.pos < this.data.length) {
224
+ const peek = this.data[this.pos];
225
+ if (peek === 0) {
226
+ // End marker
227
+ this.pos++;
228
+ break;
229
+ }
230
+ // Determine type
231
+ if (peek === exports.TAG_LIST_8 || peek === exports.TAG_LIST_16) {
232
+ children.push(this.readNode());
233
+ }
234
+ else {
235
+ // It's a string or bytes
236
+ const child = this.readChild();
237
+ if (typeof child === 'string') {
238
+ children.push({ tag: '__text__', attrs: {}, content: child });
239
+ }
240
+ else if (child instanceof Uint8Array) {
241
+ children.push({ tag: '__bytes__', attrs: {}, content: child });
242
+ }
243
+ else {
244
+ children.push(child);
245
+ }
246
+ }
247
+ }
248
+ content = children.length > 0 ? children : undefined;
249
+ }
250
+ else {
251
+ // Single child or none
252
+ if (this.pos < this.data.length) {
253
+ const peek = this.data[this.pos];
254
+ if (peek === 0) {
255
+ this.pos++;
256
+ }
257
+ else if (peek === exports.TAG_LIST_8 || peek === exports.TAG_LIST_16) {
258
+ content = [this.readNode()];
259
+ }
260
+ else {
261
+ const child = this.readChild();
262
+ if (typeof child === 'string' || child instanceof Uint8Array) {
263
+ content = child;
264
+ }
265
+ else {
266
+ content = [child];
267
+ }
268
+ }
269
+ }
270
+ }
271
+ return { tag, attrs, content };
272
+ }
273
+ readChild() {
274
+ const peek = this.data[this.pos];
275
+ if (peek === exports.TAG_LIST_8 || peek === exports.TAG_LIST_16) {
276
+ return this.readNode();
277
+ }
278
+ return this.readString();
279
+ }
280
+ readString() {
281
+ const tag = this.readByte();
282
+ if (tag === TAG_LIST.EMPTY) {
283
+ return '';
284
+ }
285
+ if (tag === TAG_LIST.DICTIONARY_0 ||
286
+ tag === TAG_LIST.DICTIONARY_1 ||
287
+ tag === TAG_LIST.DICTIONARY_2 ||
288
+ tag === TAG_LIST.DICTIONARY_3) {
289
+ const dictIndex = this.readByte();
290
+ return lookupDict(tag - TAG_LIST.DICTIONARY_0, dictIndex);
291
+ }
292
+ if (tag === exports.TAG_PACKED_NIBBLE) {
293
+ return this.readPackedString(false);
294
+ }
295
+ if (tag === exports.TAG_PACKED_HEX) {
296
+ return this.readPackedString(true);
297
+ }
298
+ if (tag === exports.TAG_BINARY_8) {
299
+ const len = this.readByte();
300
+ return new TextDecoder().decode(this.readBytes(len));
301
+ }
302
+ if (tag === exports.TAG_BINARY_20) {
303
+ const b1 = this.readByte();
304
+ const b2 = this.readByte();
305
+ const b3 = this.readByte();
306
+ const len = (b1 << 16) | (b2 << 8) | b3;
307
+ return new TextDecoder().decode(this.readBytes(len));
308
+ }
309
+ if (tag === exports.TAG_BINARY_32) {
310
+ const b1 = this.readByte();
311
+ const b2 = this.readByte();
312
+ const b3 = this.readByte();
313
+ const b4 = this.readByte();
314
+ const len = (b1 << 24) | (b2 << 16) | (b3 << 8) | b4;
315
+ return new TextDecoder().decode(this.readBytes(len));
316
+ }
317
+ // Fall through - single byte char
318
+ return String.fromCharCode(tag);
319
+ }
320
+ readPackedString(isHex) {
321
+ const bytes = [];
322
+ while (this.pos < this.data.length) {
323
+ const b = this.data[this.pos++];
324
+ const high = (b >> 4) & 0xf;
325
+ const low = b & 0xf;
326
+ if (high === 0xf)
327
+ break;
328
+ bytes.push(high);
329
+ if (low === 0xf)
330
+ break;
331
+ bytes.push(low);
332
+ }
333
+ if (isHex) {
334
+ return bytes.map(b => HEX_CHARS[b]).join('');
335
+ }
336
+ // Nibble - numeric 0-9
337
+ return bytes.map(b => String(b)).join('');
338
+ }
339
+ readBytes(n) {
340
+ const result = this.data.subarray(this.pos, this.pos + n);
341
+ this.pos += n;
342
+ return result;
343
+ }
344
+ readByte() {
345
+ return this.data[this.pos++];
346
+ }
347
+ }
348
+ exports.BinaryDecoder = BinaryDecoder;
349
+ // ============== Dictionaries (Tokens) ==============
350
+ /**
351
+ * WhatsApp dictionary berisi string yang sering dipakai untuk kompresi.
352
+ * Encode sebagai dictionary index (1 byte) daripada string length + bytes.
353
+ *
354
+ * Note: dictionary disusun dari analisis WhatsApp Web JavaScript bundle.
355
+ * Total ~240 entries per dictionary (4 dictionaries), prefix common tags.
356
+ */
357
+ const DICTIONARIES = [
358
+ // Dictionary 0 - common protocol tags
359
+ [
360
+ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
361
+ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
362
+ // index 32+ actual entries
363
+ 'edge_routing', 'account_sync', 'action', 'add', 'after', 'all', 'allow', 'available',
364
+ 'background', 'battery', 'before', 'broadcast', 'browser', 'call', 'cancel',
365
+ 'category', 'chat', 'code', 'commands', 'config', 'contacts', 'conversation',
366
+ 'count', 'create', 'debug', 'delete', 'demote', 'deny', 'device', 'devices',
367
+ 'disconnect', 'domain', 'download', 'edit', 'encrypt', 'error', 'expiration',
368
+ 'false', 'file', 'filename', 'first', 'from', 'g.us', 'group', 'groups',
369
+ 'history', 'id', 'identity', 'image', 'in', 'index', 'invite', 'iq',
370
+ 'jid', 'kind', 'last', 'length', 'level', 'list', 'location', 'manifest',
371
+ 'media', 'message', 'messages', 'method', 'migrate', 'modify', 'mute', 'name',
372
+ 'newsletter', 'next', 'nick', 'no', 'not', 'notify', 'off', 'offer',
373
+ 'offline', 'on', 'open', 'out', 'owner', 'pair', 'pairing', 'participant',
374
+ 'participants', 'payload', 'paused', 'permissions', 'phone', 'pin', 'platform', 'presence',
375
+ 'preview', 'primary', 'promote', 'protocol', 'push', 'query', 'rate', 'read',
376
+ 'reason', 'receipt', 'received', 'recording', 'reject', 'remove', 'request', 'response',
377
+ 'retry', 'revoke', 's.whatsapp.net', 'send', 'session', 'settings', 'sha256', 'signature',
378
+ 'since', 'status', 'subscribe', 'success', 'sync', 'tag', 'target', 'text',
379
+ 'timestamp', 'true', 'type', 'unblock', 'unavailable', 'unread', 'update', 'user',
380
+ 'verify', 'version', 'video', 'visible', 'voice', 'wait', 'warning', 'whatsapp',
381
+ 'ack', 'expire', 'image_message', 'video_message', 'audio_message', 'document_message',
382
+ 'sticker_message', 'location_message', 'contact_message', 'poll_message', 'server_sync',
383
+ 'business_hours', 'business_profile', 'catalog', 'label', 'order', 'product',
384
+ 'reaction', 'status_attendance', 'ephemeral', 'view_once', 'keep_in_chat',
385
+ 'unarchive', 'archive', 'mute', 'star', 'pin_v2'
386
+ ],
387
+ // Dictionary 1, 2, 3 - shorter/smaller for less common tags
388
+ [], [], []
389
+ ];
390
+ /**
391
+ * Find string in dictionary, return encoded index
392
+ * Returns -1 if not found
393
+ */
394
+ function findInDict(str) {
395
+ for (let dict = 0; dict < DICTIONARIES.length; dict++) {
396
+ const idx = DICTIONARIES[dict].indexOf(str);
397
+ if (idx !== -1) {
398
+ return (dict << 8) | idx;
399
+ }
400
+ }
401
+ return -1;
402
+ }
403
+ /**
404
+ * Lookup dict by index
405
+ */
406
+ function lookupDict(dict, index) {
407
+ return DICTIONARIES[dict]?.[index] ?? '';
408
+ }
409
+ // ============== Helpers ==============
410
+ function encodeBinaryNode(node) {
411
+ return new BinaryEncoder().encode(node);
412
+ }
413
+ function decodeBinaryNode(data) {
414
+ return new BinaryDecoder().decode(data);
415
+ }
416
+ /**
417
+ * Convert binary node to XML-like string for debugging
418
+ */
419
+ function binaryNodeToString(node, indent = 0) {
420
+ const pad = ' '.repeat(indent);
421
+ let str = `${pad}<${node.tag}`;
422
+ for (const [k, v] of Object.entries(node.attrs)) {
423
+ str += ` ${k}="${v}"`;
424
+ }
425
+ if (!node.content) {
426
+ return str + ' />';
427
+ }
428
+ if (typeof node.content === 'string') {
429
+ return str + `>${node.content}</${node.tag}>`;
430
+ }
431
+ if (node.content instanceof Uint8Array) {
432
+ return str + `>[${node.content.length} bytes]</${node.tag}>`;
433
+ }
434
+ str += '>\n';
435
+ for (const child of node.content) {
436
+ if (typeof child === 'string') {
437
+ str += `${pad} ${child}\n`;
438
+ }
439
+ else if (child instanceof Uint8Array) {
440
+ str += `${pad} [${child.length} bytes]\n`;
441
+ }
442
+ else {
443
+ str += binaryNodeToString(child, indent + 1) + '\n';
444
+ }
445
+ }
446
+ return str + `${pad}</${node.tag}>`;
447
+ }
448
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/core/binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Waliwa - Crypto utilities
3
+ * Hybrid approach: menggunakan @noble/curves & @noble/hashes untuk primitives
4
+ * Manual implementasi untuk WhatsApp-specific encoding (noise handshake, message framing)
5
+ *
6
+ * RAM optimization: gunakan Uint8Array (bukan Buffer) di mana memungkinkan untuk
7
+ * hindari overhead V8 Buffer pool.
8
+ */
9
+ export interface KeyPair {
10
+ private: Uint8Array;
11
+ public: Uint8Array;
12
+ }
13
+ /**
14
+ * Generate Curve25519 key pair untuk Noise Protocol / Signal keys
15
+ * RAM-friendly: gunakan direct x25519 dari @noble/curves (no bindings).
16
+ */
17
+ export declare function generateCurveKeyPair(): KeyPair;
18
+ /**
19
+ * X25519 ECDH - compute shared secret
20
+ */
21
+ export declare function curveSharedSecret(privateKey: Uint8Array, publicKey: Uint8Array): Uint8Array;
22
+ /**
23
+ * Sign data dengan Ed25519 (untuk Signal signed pre-keys)
24
+ */
25
+ export declare function curveSign(privateKey: Uint8Array, data: Uint8Array): Uint8Array;
26
+ /**
27
+ * Verify Ed25519 signature
28
+ */
29
+ export declare function curveVerify(publicKey: Uint8Array, data: Uint8Array, signature: Uint8Array): boolean;
30
+ export declare function sha256Hash(data: Uint8Array): Uint8Array;
31
+ export declare function sha512Hash(data: Uint8Array): Uint8Array;
32
+ export declare function sha1Hash(data: Uint8Array): Uint8Array;
33
+ export declare function hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array;
34
+ export declare function hmacSha512(key: Uint8Array, data: Uint8Array): Uint8Array;
35
+ /**
36
+ * HKDF - HMAC-based Key Derivation Function
37
+ * WhatsApp menggunakan HKDF extensively untuk derive keys dari shared secrets
38
+ */
39
+ export declare function hkdfDerive(ikm: Uint8Array, salt: Uint8Array, info: Uint8Array, length: number): Uint8Array;
40
+ export interface AESCipher {
41
+ encrypt(plaintext: Uint8Array, iv: Uint8Array, aad?: Uint8Array): {
42
+ ciphertext: Uint8Array;
43
+ tag: Uint8Array;
44
+ };
45
+ decrypt(ciphertext: Uint8Array, iv: Uint8Array, tag: Uint8Array, aad?: Uint8Array): Uint8Array;
46
+ }
47
+ /**
48
+ * AES-256-GCM cipher (sebuah komponen inti WA message encryption)
49
+ */
50
+ export declare function createAESCipher(key: Uint8Array): AESCipher;
51
+ export declare function aesEncryptCBC(plaintext: Uint8Array, key: Uint8Array, iv: Uint8Array): Uint8Array;
52
+ export declare function aesDecryptCBC(ciphertext: Uint8Array, key: Uint8Array, iv: Uint8Array): Uint8Array;
53
+ export declare function getRandomBytes(length: number): Uint8Array;
54
+ export declare function concatBytes(...arrays: Uint8Array[]): Uint8Array;
55
+ export declare function areBytesEqual(a: Uint8Array, b: Uint8Array): boolean;
56
+ /**
57
+ * Constant-time comparison untuk hmac verification
58
+ */
59
+ export declare function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean;
60
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/core/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAI9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,CAE3F;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAI9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAOnG;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEvD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEvD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAErD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAExE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAExE;AAID;;;GAGG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GACb,UAAU,CAGZ;AAID,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC;IAC9G,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;CAChG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,CAkB1D;AAID,wBAAgB,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,UAAU,CAahG;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,GAAG,UAAU,CAOjG;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAEzD;AAID,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAS/D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAKnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAEvE"}