@zapo-js/fake-server 0.3.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 (238) hide show
  1. package/README.md +176 -0
  2. package/dist/api/AppStateSyncManager.d.ts +27 -0
  3. package/dist/api/AppStateSyncManager.d.ts.map +1 -0
  4. package/dist/api/AppStateSyncManager.js +151 -0
  5. package/dist/api/AppStateSyncManager.js.map +1 -0
  6. package/dist/api/FakePairingDriver.d.ts +27 -0
  7. package/dist/api/FakePairingDriver.d.ts.map +1 -0
  8. package/dist/api/FakePairingDriver.js +36 -0
  9. package/dist/api/FakePairingDriver.js.map +1 -0
  10. package/dist/api/FakePeer.d.ts +143 -0
  11. package/dist/api/FakePeer.d.ts.map +1 -0
  12. package/dist/api/FakePeer.js +408 -0
  13. package/dist/api/FakePeer.js.map +1 -0
  14. package/dist/api/FakeWaServer.d.ts +167 -0
  15. package/dist/api/FakeWaServer.d.ts.map +1 -0
  16. package/dist/api/FakeWaServer.js +652 -0
  17. package/dist/api/FakeWaServer.js.map +1 -0
  18. package/dist/api/PreKeyDispenser.d.ts +23 -0
  19. package/dist/api/PreKeyDispenser.d.ts.map +1 -0
  20. package/dist/api/PreKeyDispenser.js +98 -0
  21. package/dist/api/PreKeyDispenser.js.map +1 -0
  22. package/dist/api/Scenario.d.ts +24 -0
  23. package/dist/api/Scenario.d.ts.map +1 -0
  24. package/dist/api/Scenario.js +38 -0
  25. package/dist/api/Scenario.js.map +1 -0
  26. package/dist/api/ServerRegistries.d.ts +110 -0
  27. package/dist/api/ServerRegistries.d.ts.map +1 -0
  28. package/dist/api/ServerRegistries.js +268 -0
  29. package/dist/api/ServerRegistries.js.map +1 -0
  30. package/dist/api/iq-handlers.d.ts +47 -0
  31. package/dist/api/iq-handlers.d.ts.map +1 -0
  32. package/dist/api/iq-handlers.js +498 -0
  33. package/dist/api/iq-handlers.js.map +1 -0
  34. package/dist/cli.d.ts +4 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +249 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/index.d.ts +51 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +74 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/infra/WaFakeConnection.d.ts +23 -0
  43. package/dist/infra/WaFakeConnection.d.ts.map +1 -0
  44. package/dist/infra/WaFakeConnection.js +54 -0
  45. package/dist/infra/WaFakeConnection.js.map +1 -0
  46. package/dist/infra/WaFakeConnectionPipeline.d.ts +51 -0
  47. package/dist/infra/WaFakeConnectionPipeline.d.ts.map +1 -0
  48. package/dist/infra/WaFakeConnectionPipeline.js +224 -0
  49. package/dist/infra/WaFakeConnectionPipeline.js.map +1 -0
  50. package/dist/infra/WaFakeFrameSocket.d.ts +29 -0
  51. package/dist/infra/WaFakeFrameSocket.d.ts.map +1 -0
  52. package/dist/infra/WaFakeFrameSocket.js +122 -0
  53. package/dist/infra/WaFakeFrameSocket.js.map +1 -0
  54. package/dist/infra/WaFakeMediaHttpsServer.d.ts +16 -0
  55. package/dist/infra/WaFakeMediaHttpsServer.d.ts.map +1 -0
  56. package/dist/infra/WaFakeMediaHttpsServer.js +131 -0
  57. package/dist/infra/WaFakeMediaHttpsServer.js.map +1 -0
  58. package/dist/infra/WaFakeNoiseHandshake.d.ts +23 -0
  59. package/dist/infra/WaFakeNoiseHandshake.d.ts.map +1 -0
  60. package/dist/infra/WaFakeNoiseHandshake.js +76 -0
  61. package/dist/infra/WaFakeNoiseHandshake.js.map +1 -0
  62. package/dist/infra/WaFakeTransport.d.ts +15 -0
  63. package/dist/infra/WaFakeTransport.d.ts.map +1 -0
  64. package/dist/infra/WaFakeTransport.js +34 -0
  65. package/dist/infra/WaFakeTransport.js.map +1 -0
  66. package/dist/infra/WaFakeWsServer.d.ts +29 -0
  67. package/dist/infra/WaFakeWsServer.d.ts.map +1 -0
  68. package/dist/infra/WaFakeWsServer.js +101 -0
  69. package/dist/infra/WaFakeWsServer.js.map +1 -0
  70. package/dist/protocol/auth/cert-chain.d.ts +18 -0
  71. package/dist/protocol/auth/cert-chain.d.ts.map +1 -0
  72. package/dist/protocol/auth/cert-chain.js +44 -0
  73. package/dist/protocol/auth/cert-chain.js.map +1 -0
  74. package/dist/protocol/auth/client-payload-validate.d.ts +21 -0
  75. package/dist/protocol/auth/client-payload-validate.d.ts.map +1 -0
  76. package/dist/protocol/auth/client-payload-validate.js +61 -0
  77. package/dist/protocol/auth/client-payload-validate.js.map +1 -0
  78. package/dist/protocol/auth/fake-primary-device.d.ts +19 -0
  79. package/dist/protocol/auth/fake-primary-device.d.ts.map +1 -0
  80. package/dist/protocol/auth/fake-primary-device.js +53 -0
  81. package/dist/protocol/auth/fake-primary-device.js.map +1 -0
  82. package/dist/protocol/auth/pair-device.d.ts +26 -0
  83. package/dist/protocol/auth/pair-device.d.ts.map +1 -0
  84. package/dist/protocol/auth/pair-device.js +104 -0
  85. package/dist/protocol/auth/pair-device.js.map +1 -0
  86. package/dist/protocol/auth/success-node.d.ts +15 -0
  87. package/dist/protocol/auth/success-node.d.ts.map +1 -0
  88. package/dist/protocol/auth/success-node.js +30 -0
  89. package/dist/protocol/auth/success-node.js.map +1 -0
  90. package/dist/protocol/iq/abprops.d.ts +14 -0
  91. package/dist/protocol/iq/abprops.d.ts.map +1 -0
  92. package/dist/protocol/iq/abprops.js +34 -0
  93. package/dist/protocol/iq/abprops.js.map +1 -0
  94. package/dist/protocol/iq/appstate-sync.d.ts +38 -0
  95. package/dist/protocol/iq/appstate-sync.d.ts.map +1 -0
  96. package/dist/protocol/iq/appstate-sync.js +154 -0
  97. package/dist/protocol/iq/appstate-sync.js.map +1 -0
  98. package/dist/protocol/iq/business.d.ts +13 -0
  99. package/dist/protocol/iq/business.d.ts.map +1 -0
  100. package/dist/protocol/iq/business.js +64 -0
  101. package/dist/protocol/iq/business.js.map +1 -0
  102. package/dist/protocol/iq/dirty-bits.d.ts +8 -0
  103. package/dist/protocol/iq/dirty-bits.d.ts.map +1 -0
  104. package/dist/protocol/iq/dirty-bits.js +23 -0
  105. package/dist/protocol/iq/dirty-bits.js.map +1 -0
  106. package/dist/protocol/iq/group-ops.d.ts +34 -0
  107. package/dist/protocol/iq/group-ops.d.ts.map +1 -0
  108. package/dist/protocol/iq/group-ops.js +164 -0
  109. package/dist/protocol/iq/group-ops.js.map +1 -0
  110. package/dist/protocol/iq/newsletter.d.ts +4 -0
  111. package/dist/protocol/iq/newsletter.d.ts.map +1 -0
  112. package/dist/protocol/iq/newsletter.js +18 -0
  113. package/dist/protocol/iq/newsletter.js.map +1 -0
  114. package/dist/protocol/iq/prekey-fetch.d.ts +18 -0
  115. package/dist/protocol/iq/prekey-fetch.d.ts.map +1 -0
  116. package/dist/protocol/iq/prekey-fetch.js +92 -0
  117. package/dist/protocol/iq/prekey-fetch.js.map +1 -0
  118. package/dist/protocol/iq/privacy-token.d.ts +9 -0
  119. package/dist/protocol/iq/privacy-token.d.ts.map +1 -0
  120. package/dist/protocol/iq/privacy-token.js +30 -0
  121. package/dist/protocol/iq/privacy-token.js.map +1 -0
  122. package/dist/protocol/iq/privacy.d.ts +22 -0
  123. package/dist/protocol/iq/privacy.d.ts.map +1 -0
  124. package/dist/protocol/iq/privacy.js +133 -0
  125. package/dist/protocol/iq/privacy.js.map +1 -0
  126. package/dist/protocol/iq/profile.d.ts +22 -0
  127. package/dist/protocol/iq/profile.d.ts.map +1 -0
  128. package/dist/protocol/iq/profile.js +80 -0
  129. package/dist/protocol/iq/profile.js.map +1 -0
  130. package/dist/protocol/iq/router.d.ts +39 -0
  131. package/dist/protocol/iq/router.d.ts.map +1 -0
  132. package/dist/protocol/iq/router.js +118 -0
  133. package/dist/protocol/iq/router.js.map +1 -0
  134. package/dist/protocol/iq/usync.d.ts +8 -0
  135. package/dist/protocol/iq/usync.d.ts.map +1 -0
  136. package/dist/protocol/iq/usync.js +68 -0
  137. package/dist/protocol/iq/usync.js.map +1 -0
  138. package/dist/protocol/push/app-state-key-share.d.ts +17 -0
  139. package/dist/protocol/push/app-state-key-share.d.ts.map +1 -0
  140. package/dist/protocol/push/app-state-key-share.js +30 -0
  141. package/dist/protocol/push/app-state-key-share.js.map +1 -0
  142. package/dist/protocol/push/call-failure.d.ts +16 -0
  143. package/dist/protocol/push/call-failure.d.ts.map +1 -0
  144. package/dist/protocol/push/call-failure.js +32 -0
  145. package/dist/protocol/push/call-failure.js.map +1 -0
  146. package/dist/protocol/push/chatstate.d.ts +15 -0
  147. package/dist/protocol/push/chatstate.d.ts.map +1 -0
  148. package/dist/protocol/push/chatstate.js +27 -0
  149. package/dist/protocol/push/chatstate.js.map +1 -0
  150. package/dist/protocol/push/error-stanza.d.ts +8 -0
  151. package/dist/protocol/push/error-stanza.d.ts.map +1 -0
  152. package/dist/protocol/push/error-stanza.js +17 -0
  153. package/dist/protocol/push/error-stanza.js.map +1 -0
  154. package/dist/protocol/push/history-sync.d.ts +46 -0
  155. package/dist/protocol/push/history-sync.d.ts.map +1 -0
  156. package/dist/protocol/push/history-sync.js +117 -0
  157. package/dist/protocol/push/history-sync.js.map +1 -0
  158. package/dist/protocol/push/message.d.ts +21 -0
  159. package/dist/protocol/push/message.d.ts.map +1 -0
  160. package/dist/protocol/push/message.js +42 -0
  161. package/dist/protocol/push/message.js.map +1 -0
  162. package/dist/protocol/push/notification.d.ts +21 -0
  163. package/dist/protocol/push/notification.d.ts.map +1 -0
  164. package/dist/protocol/push/notification.js +34 -0
  165. package/dist/protocol/push/notification.js.map +1 -0
  166. package/dist/protocol/push/presence.d.ts +11 -0
  167. package/dist/protocol/push/presence.d.ts.map +1 -0
  168. package/dist/protocol/push/presence.js +18 -0
  169. package/dist/protocol/push/presence.js.map +1 -0
  170. package/dist/protocol/push/receipt.d.ts +14 -0
  171. package/dist/protocol/push/receipt.d.ts.map +1 -0
  172. package/dist/protocol/push/receipt.js +25 -0
  173. package/dist/protocol/push/receipt.js.map +1 -0
  174. package/dist/protocol/signal/fake-app-state-crypto.d.ts +49 -0
  175. package/dist/protocol/signal/fake-app-state-crypto.d.ts.map +1 -0
  176. package/dist/protocol/signal/fake-app-state-crypto.js +202 -0
  177. package/dist/protocol/signal/fake-app-state-crypto.js.map +1 -0
  178. package/dist/protocol/signal/fake-peer-double-ratchet.d.ts +38 -0
  179. package/dist/protocol/signal/fake-peer-double-ratchet.d.ts.map +1 -0
  180. package/dist/protocol/signal/fake-peer-double-ratchet.js +408 -0
  181. package/dist/protocol/signal/fake-peer-double-ratchet.js.map +1 -0
  182. package/dist/protocol/signal/fake-peer-group-recv-session.d.ts +10 -0
  183. package/dist/protocol/signal/fake-peer-group-recv-session.d.ts.map +1 -0
  184. package/dist/protocol/signal/fake-peer-group-recv-session.js +129 -0
  185. package/dist/protocol/signal/fake-peer-group-recv-session.js.map +1 -0
  186. package/dist/protocol/signal/fake-peer-identity.d.ts +7 -0
  187. package/dist/protocol/signal/fake-peer-identity.d.ts.map +1 -0
  188. package/dist/protocol/signal/fake-peer-identity.js +12 -0
  189. package/dist/protocol/signal/fake-peer-identity.js.map +1 -0
  190. package/dist/protocol/signal/fake-peer-key-bundle.d.ts +24 -0
  191. package/dist/protocol/signal/fake-peer-key-bundle.d.ts.map +1 -0
  192. package/dist/protocol/signal/fake-peer-key-bundle.js +29 -0
  193. package/dist/protocol/signal/fake-peer-key-bundle.js.map +1 -0
  194. package/dist/protocol/signal/fake-peer-recv-session.d.ts +60 -0
  195. package/dist/protocol/signal/fake-peer-recv-session.d.ts.map +1 -0
  196. package/dist/protocol/signal/fake-peer-recv-session.js +284 -0
  197. package/dist/protocol/signal/fake-peer-recv-session.js.map +1 -0
  198. package/dist/protocol/signal/fake-peer-session.d.ts +87 -0
  199. package/dist/protocol/signal/fake-peer-session.d.ts.map +1 -0
  200. package/dist/protocol/signal/fake-peer-session.js +207 -0
  201. package/dist/protocol/signal/fake-peer-session.js.map +1 -0
  202. package/dist/protocol/signal/fake-sender-key.d.ts +15 -0
  203. package/dist/protocol/signal/fake-sender-key.d.ts.map +1 -0
  204. package/dist/protocol/signal/fake-sender-key.js +91 -0
  205. package/dist/protocol/signal/fake-sender-key.js.map +1 -0
  206. package/dist/protocol/signal/prekey-upload.d.ts +22 -0
  207. package/dist/protocol/signal/prekey-upload.d.ts.map +1 -0
  208. package/dist/protocol/signal/prekey-upload.js +113 -0
  209. package/dist/protocol/signal/prekey-upload.js.map +1 -0
  210. package/dist/protocol/stream/stream-error.d.ts +8 -0
  211. package/dist/protocol/stream/stream-error.d.ts.map +1 -0
  212. package/dist/protocol/stream/stream-error.js +64 -0
  213. package/dist/protocol/stream/stream-error.js.map +1 -0
  214. package/dist/state/fake-app-state-collection.d.ts +35 -0
  215. package/dist/state/fake-app-state-collection.d.ts.map +1 -0
  216. package/dist/state/fake-app-state-collection.js +139 -0
  217. package/dist/state/fake-app-state-collection.js.map +1 -0
  218. package/dist/state/fake-media-store.d.ts +35 -0
  219. package/dist/state/fake-media-store.d.ts.map +1 -0
  220. package/dist/state/fake-media-store.js +57 -0
  221. package/dist/state/fake-media-store.js.map +1 -0
  222. package/dist/transport/codec.d.ts +10 -0
  223. package/dist/transport/codec.d.ts.map +1 -0
  224. package/dist/transport/codec.js +17 -0
  225. package/dist/transport/codec.js.map +1 -0
  226. package/dist/transport/crypto.d.ts +11 -0
  227. package/dist/transport/crypto.d.ts.map +1 -0
  228. package/dist/transport/crypto.js +36 -0
  229. package/dist/transport/crypto.js.map +1 -0
  230. package/dist/transport/index.d.ts +4 -0
  231. package/dist/transport/index.d.ts.map +1 -0
  232. package/dist/transport/index.js +20 -0
  233. package/dist/transport/index.js.map +1 -0
  234. package/dist/transport/protos.d.ts +10 -0
  235. package/dist/transport/protos.d.ts.map +1 -0
  236. package/dist/transport/protos.js +13 -0
  237. package/dist/transport/protos.js.map +1 -0
  238. package/package.json +43 -0
package/dist/cli.js ADDED
@@ -0,0 +1,249 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /** Standalone CLI for `@zapo-js/fake-server`. */
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const FakeWaServer_1 = require("./api/FakeWaServer");
6
+ function parseArgs(argv) {
7
+ let host = '127.0.0.1';
8
+ let port = 0;
9
+ let path = '/ws/chat';
10
+ const peerJids = [];
11
+ const groupSpecs = [];
12
+ let log = false;
13
+ let quiet = false;
14
+ let json = false;
15
+ let help = false;
16
+ for (let index = 0; index < argv.length; index += 1) {
17
+ const arg = argv[index];
18
+ const next = () => {
19
+ const value = argv[index + 1];
20
+ if (value === undefined) {
21
+ throw new Error(`missing value for ${arg}`);
22
+ }
23
+ index += 1;
24
+ return value;
25
+ };
26
+ switch (arg) {
27
+ case '-h':
28
+ case '--help':
29
+ help = true;
30
+ break;
31
+ case '--host':
32
+ host = next();
33
+ break;
34
+ case '--port':
35
+ port = Number.parseInt(next(), 10);
36
+ if (!Number.isFinite(port) || port < 0 || port > 65535) {
37
+ throw new Error(`invalid --port: ${argv[index]}`);
38
+ }
39
+ break;
40
+ case '--path':
41
+ path = next();
42
+ break;
43
+ case '--peer':
44
+ peerJids.push(next());
45
+ break;
46
+ case '--group':
47
+ groupSpecs.push(next());
48
+ break;
49
+ case '--log':
50
+ log = true;
51
+ break;
52
+ case '--quiet':
53
+ quiet = true;
54
+ break;
55
+ case '--json':
56
+ json = true;
57
+ break;
58
+ default:
59
+ throw new Error(`unknown flag: ${arg}`);
60
+ }
61
+ }
62
+ return { host, port, path, peerJids, groupSpecs, log, quiet, json, help };
63
+ }
64
+ function printHelp() {
65
+ process.stdout.write(`@zapo-js/fake-server — standalone fake WhatsApp Web server
66
+
67
+ USAGE
68
+ npx @zapo-js/fake-server [flags]
69
+
70
+ FLAGS
71
+ --host <host> Bind host (default: 127.0.0.1)
72
+ --port <port> WebSocket listener port (default: random)
73
+ --path <path> WebSocket upgrade path (default: /ws/chat)
74
+ --peer <jid> Pre-create a fake peer; can be repeated
75
+ --group <spec> Pre-create a fake group; spec format
76
+ <group-jid>=<peer-jid>,<peer-jid>,...
77
+ All peers must already be passed via --peer.
78
+ --log Print every captured inbound stanza
79
+ --quiet Suppress the startup info banner
80
+ --json Print connection info as JSON
81
+ -h | --help Show this help
82
+
83
+ The server stays up until SIGINT (Ctrl+C).
84
+ `);
85
+ }
86
+ function parseGroupSpec(spec) {
87
+ const eqIdx = spec.indexOf('=');
88
+ if (eqIdx < 0) {
89
+ throw new Error(`invalid --group spec '${spec}': expected '<group-jid>=<peer-jid>,<peer-jid>,...'`);
90
+ }
91
+ const groupJid = spec.slice(0, eqIdx).trim();
92
+ const participantsRaw = spec.slice(eqIdx + 1);
93
+ const participantJids = participantsRaw
94
+ .split(',')
95
+ .map((jid) => jid.trim())
96
+ .filter((jid) => jid.length > 0);
97
+ if (!groupJid || participantJids.length === 0) {
98
+ throw new Error(`invalid --group spec '${spec}': empty group jid or participant list`);
99
+ }
100
+ return { groupJid, participantJids };
101
+ }
102
+ async function main() {
103
+ let args;
104
+ try {
105
+ args = parseArgs(process.argv.slice(2));
106
+ }
107
+ catch (error) {
108
+ process.stderr.write(`error: ${error instanceof Error ? error.message : String(error)}\n`);
109
+ process.stderr.write('run with --help to see usage.\n');
110
+ process.exit(2);
111
+ }
112
+ if (args.help) {
113
+ printHelp();
114
+ process.exit(0);
115
+ }
116
+ const parsedGroups = args.groupSpecs.map(parseGroupSpec);
117
+ for (const group of parsedGroups) {
118
+ for (const jid of group.participantJids) {
119
+ if (!args.peerJids.includes(jid)) {
120
+ process.stderr.write(`error: --group '${group.groupJid}' references peer '${jid}' that was not declared via --peer\n`);
121
+ process.exit(2);
122
+ }
123
+ }
124
+ }
125
+ const server = await FakeWaServer_1.FakeWaServer.start({
126
+ host: args.host,
127
+ port: args.port,
128
+ path: args.path
129
+ });
130
+ let setupComplete = false;
131
+ const setupPromise = new Promise((resolve, reject) => {
132
+ server.onAuthenticatedPipeline(async (pipeline) => {
133
+ if (setupComplete)
134
+ return;
135
+ setupComplete = true;
136
+ try {
137
+ const peers = new Map();
138
+ for (const jid of args.peerJids) {
139
+ const peer = await server.createFakePeer({ jid }, pipeline);
140
+ peers.set(jid, peer);
141
+ process.stdout.write(`[fake-server] created peer ${jid}\n`);
142
+ }
143
+ for (const group of parsedGroups) {
144
+ const participants = group.participantJids.map((jid) => {
145
+ const peer = peers.get(jid);
146
+ if (!peer) {
147
+ throw new Error(`internal: peer ${jid} not found for group ${group.groupJid}`);
148
+ }
149
+ return peer;
150
+ });
151
+ server.createFakeGroup({
152
+ groupJid: group.groupJid,
153
+ participants
154
+ });
155
+ process.stdout.write(`[fake-server] created group ${group.groupJid} with ${participants.length} participants\n`);
156
+ }
157
+ resolve();
158
+ }
159
+ catch (error) {
160
+ reject(error instanceof Error ? error : new Error(String(error)));
161
+ }
162
+ });
163
+ });
164
+ setupPromise.catch((error) => {
165
+ process.stderr.write(`error: ${error.message}\n`);
166
+ process.exitCode = 1;
167
+ });
168
+ if (args.log) {
169
+ server.onPipeline((pipeline) => {
170
+ pipeline.setEvents({
171
+ onStanza: (node) => {
172
+ process.stdout.write(`[wire] ${node.tag}${node.attrs.id ? ` id=${node.attrs.id}` : ''}${node.attrs.type ? ` type=${node.attrs.type}` : ''}\n`);
173
+ }
174
+ });
175
+ });
176
+ }
177
+ if (!args.quiet) {
178
+ const noiseRoot = server.noiseRootCa;
179
+ if (args.json) {
180
+ process.stdout.write(JSON.stringify({
181
+ url: server.url,
182
+ host: server.host,
183
+ port: server.port,
184
+ path: args.path,
185
+ noiseRootCa: {
186
+ serial: noiseRoot.serial,
187
+ publicKeyHex: bytesToHex(noiseRoot.publicKey)
188
+ },
189
+ peers: args.peerJids,
190
+ groups: parsedGroups
191
+ }, null, 2) + '\n');
192
+ }
193
+ else {
194
+ const banner = [
195
+ '',
196
+ '┌─────────────────────────────────────────────────────────────',
197
+ '│ @zapo-js/fake-server is up',
198
+ '├─────────────────────────────────────────────────────────────',
199
+ `│ url ${server.url}`,
200
+ `│ host ${server.host}`,
201
+ `│ port ${server.port}`,
202
+ `│ path ${args.path}`,
203
+ `│ noise root ca serial=${noiseRoot.serial} pub=${bytesToHex(noiseRoot.publicKey).slice(0, 32)}…`,
204
+ `│ peers ${args.peerJids.length === 0 ? '(none)' : args.peerJids.join(', ')}`,
205
+ `│ groups ${parsedGroups.length === 0 ? '(none)' : parsedGroups.map((g) => g.groupJid).join(', ')}`,
206
+ '├─────────────────────────────────────────────────────────────',
207
+ '│ Wire your WaClient with:',
208
+ '│ chatSocketUrls: [server.url]',
209
+ '│ testHooks: { noiseRootCa: <hex above as Uint8Array> }',
210
+ '│ Hit Ctrl+C to stop.',
211
+ '└─────────────────────────────────────────────────────────────',
212
+ ''
213
+ ];
214
+ process.stdout.write(banner.join('\n'));
215
+ }
216
+ }
217
+ let stopping = false;
218
+ const shutdown = async (signal) => {
219
+ if (stopping)
220
+ return;
221
+ stopping = true;
222
+ process.stdout.write(`\n[fake-server] received ${signal}, shutting down…\n`);
223
+ try {
224
+ await server.stop();
225
+ process.stdout.write('[fake-server] stopped cleanly\n');
226
+ process.exit(0);
227
+ }
228
+ catch (error) {
229
+ process.stderr.write(`error during shutdown: ${error instanceof Error ? error.message : String(error)}\n`);
230
+ process.exit(1);
231
+ }
232
+ };
233
+ process.on('SIGINT', () => void shutdown('SIGINT'));
234
+ process.on('SIGTERM', () => void shutdown('SIGTERM'));
235
+ await new Promise(() => undefined);
236
+ }
237
+ function bytesToHex(bytes) {
238
+ let out = '';
239
+ for (let index = 0; index < bytes.byteLength; index += 1) {
240
+ const value = bytes[index];
241
+ out += value < 16 ? `0${value.toString(16)}` : value.toString(16);
242
+ }
243
+ return out;
244
+ }
245
+ main().catch((error) => {
246
+ process.stderr.write(`fatal: ${error instanceof Error ? (error.stack ?? error.message) : String(error)}\n`);
247
+ process.exit(1);
248
+ });
249
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export { FakePairingDriver } from './api/FakePairingDriver';
2
+ export type { CompanionPairingMaterial, FakePairingDriverDeps, FakePairingDriverOptions } from './api/FakePairingDriver';
3
+ export { FakePeer } from './api/FakePeer';
4
+ export type { CreateFakePeerOptions, ExpectGroupMessageOptions, ExpectMessageOptions, ReceivedMessage, SendMessageOptions } from './api/FakePeer';
5
+ export { FakeWaServer } from './api/FakeWaServer';
6
+ export type { BinaryNode, ExpectIqOptions, ExpectStanzaOptions, FakeWaServerNoiseRootCa, FakeWaServerOptions, FakeWaServerPipelineListener, StanzaMatcher, WaFakeAuthenticatedInfo, WaFakeConnectionPipeline } from './api/FakeWaServer';
7
+ export { IqExpectation, Scenario } from './api/Scenario';
8
+ export type { AuthenticatedPipelineListener, ScenarioServer } from './api/Scenario';
9
+ export { WaFakeConnection } from './infra/WaFakeConnection';
10
+ export type { WaFakeConnectionHandlers, WaFakeConnectionState } from './infra/WaFakeConnection';
11
+ export type { WaFakeIqHandler, WaFakeIqMatcher, WaFakeIqResponder, WaFakeIqRouterEvents, WaFakeIqType } from './protocol/iq/router';
12
+ export { buildAppStateSyncFullResult, buildAppStateSyncResult, buildServerSyncNotification, parseAppStateSyncRequest } from './protocol/iq/appstate-sync';
13
+ export type { BuildAppStateSyncFullResultInput, BuildAppStateSyncResultInput, BuildServerSyncNotificationInput, FakeAppStateCollectionName, FakeAppStateCollectionPayload } from './protocol/iq/appstate-sync';
14
+ export { buildIqError, buildIqResult } from './protocol/iq/router';
15
+ export { buildCall, buildFailure } from './protocol/push/call-failure';
16
+ export type { BuildCallInput, BuildFailureInput } from './protocol/push/call-failure';
17
+ export { buildChatstate } from './protocol/push/chatstate';
18
+ export type { BuildChatstateInput, FakeChatstateState } from './protocol/push/chatstate';
19
+ export { buildIncomingErrorStanza } from './protocol/push/error-stanza';
20
+ export type { BuildIncomingErrorStanzaInput } from './protocol/push/error-stanza';
21
+ export { buildAppStateSyncKeyShareMessage } from './protocol/push/app-state-key-share';
22
+ export type { BuildAppStateSyncKeyShareInput, FakeAppStateSyncKey } from './protocol/push/app-state-key-share';
23
+ export { buildHistorySyncExternalMessage, buildHistorySyncMessage, encodeHistorySyncPlaintext } from './protocol/push/history-sync';
24
+ export type { BuildHistorySyncExternalInput, BuildHistorySyncInput, FakeHistorySyncConversation, FakeHistorySyncPushname, FakeHistorySyncWebMessage } from './protocol/push/history-sync';
25
+ export { APP_STATE_EMPTY_LT_HASH, FakeAppStateCrypto } from './protocol/signal/fake-app-state-crypto';
26
+ export type { FakeAppStateDerivedKeys, FakeAppStateEncryptedMutation, FakeAppStateMutationInput } from './protocol/signal/fake-app-state-crypto';
27
+ export { FakeAppStateCollection } from './state/fake-app-state-collection';
28
+ export type { FakeAppStateCollectionOptions, FakeAppStateMutationDescriptor } from './state/fake-app-state-collection';
29
+ export { FakeMediaStore } from './state/fake-media-store';
30
+ export type { FakeMediaType, PublishedMediaBlob, PublishMediaInput } from './state/fake-media-store';
31
+ export { buildMessage } from './protocol/push/message';
32
+ export type { BuildMessageInput, FakeEncChild, FakeEncType } from './protocol/push/message';
33
+ export { buildGroupNotification, buildNotification } from './protocol/push/notification';
34
+ export type { BuildGroupNotificationInput, BuildNotificationInput } from './protocol/push/notification';
35
+ export { buildIncomingPresence } from './protocol/push/presence';
36
+ export type { BuildIncomingPresenceInput, FakePresenceLastSentinel, FakePresenceType } from './protocol/push/presence';
37
+ export { buildReceipt } from './protocol/push/receipt';
38
+ export type { BuildReceiptInput, FakeReceiptType } from './protocol/push/receipt';
39
+ export { generateFakePeerIdentity } from './protocol/signal/fake-peer-identity';
40
+ export type { FakePeerIdentity } from './protocol/signal/fake-peer-identity';
41
+ export { FakePeerDoubleRatchet } from './protocol/signal/fake-peer-double-ratchet';
42
+ export { FakeSenderKey } from './protocol/signal/fake-sender-key';
43
+ export type { FakeSenderKeyEncryptionResult } from './protocol/signal/fake-sender-key';
44
+ export { buildAdvSignedDeviceIdentity, generateFakePrimaryDevice } from './protocol/auth/fake-primary-device';
45
+ export type { BuildAdvIdentityInput, BuildAdvIdentityResult, FakePrimaryDevice } from './protocol/auth/fake-primary-device';
46
+ export { buildPairDeviceIq, buildPairSuccessIq, parsePairingQrString } from './protocol/auth/pair-device';
47
+ export type { BuildPairDeviceIqInput, BuildPairSuccessIqInput, ParsedPairingQr } from './protocol/auth/pair-device';
48
+ export { parsePreKeyUploadIq, PreKeyUploadParseError } from './protocol/signal/prekey-upload';
49
+ export type { ClientPreKeyBundle, ClientPreKeyEntry, ClientSignedPreKey } from './protocol/signal/prekey-upload';
50
+ export { buildStreamErrorAck, buildStreamErrorCode, buildStreamErrorDeviceRemoved, buildStreamErrorReplaced, buildStreamErrorXmlNotWellFormed } from './protocol/stream/stream-error';
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildStreamErrorXmlNotWellFormed = exports.buildStreamErrorReplaced = exports.buildStreamErrorDeviceRemoved = exports.buildStreamErrorCode = exports.buildStreamErrorAck = exports.PreKeyUploadParseError = exports.parsePreKeyUploadIq = exports.parsePairingQrString = exports.buildPairSuccessIq = exports.buildPairDeviceIq = exports.generateFakePrimaryDevice = exports.buildAdvSignedDeviceIdentity = exports.FakeSenderKey = exports.FakePeerDoubleRatchet = exports.generateFakePeerIdentity = exports.buildReceipt = exports.buildIncomingPresence = exports.buildNotification = exports.buildGroupNotification = exports.buildMessage = exports.FakeMediaStore = exports.FakeAppStateCollection = exports.FakeAppStateCrypto = exports.APP_STATE_EMPTY_LT_HASH = exports.encodeHistorySyncPlaintext = exports.buildHistorySyncMessage = exports.buildHistorySyncExternalMessage = exports.buildAppStateSyncKeyShareMessage = exports.buildIncomingErrorStanza = exports.buildChatstate = exports.buildFailure = exports.buildCall = exports.buildIqResult = exports.buildIqError = exports.parseAppStateSyncRequest = exports.buildServerSyncNotification = exports.buildAppStateSyncResult = exports.buildAppStateSyncFullResult = exports.WaFakeConnection = exports.Scenario = exports.IqExpectation = exports.FakeWaServer = exports.FakePeer = exports.FakePairingDriver = void 0;
4
+ var FakePairingDriver_1 = require("./api/FakePairingDriver");
5
+ Object.defineProperty(exports, "FakePairingDriver", { enumerable: true, get: function () { return FakePairingDriver_1.FakePairingDriver; } });
6
+ var FakePeer_1 = require("./api/FakePeer");
7
+ Object.defineProperty(exports, "FakePeer", { enumerable: true, get: function () { return FakePeer_1.FakePeer; } });
8
+ var FakeWaServer_1 = require("./api/FakeWaServer");
9
+ Object.defineProperty(exports, "FakeWaServer", { enumerable: true, get: function () { return FakeWaServer_1.FakeWaServer; } });
10
+ var Scenario_1 = require("./api/Scenario");
11
+ Object.defineProperty(exports, "IqExpectation", { enumerable: true, get: function () { return Scenario_1.IqExpectation; } });
12
+ Object.defineProperty(exports, "Scenario", { enumerable: true, get: function () { return Scenario_1.Scenario; } });
13
+ var WaFakeConnection_1 = require("./infra/WaFakeConnection");
14
+ Object.defineProperty(exports, "WaFakeConnection", { enumerable: true, get: function () { return WaFakeConnection_1.WaFakeConnection; } });
15
+ var appstate_sync_1 = require("./protocol/iq/appstate-sync");
16
+ Object.defineProperty(exports, "buildAppStateSyncFullResult", { enumerable: true, get: function () { return appstate_sync_1.buildAppStateSyncFullResult; } });
17
+ Object.defineProperty(exports, "buildAppStateSyncResult", { enumerable: true, get: function () { return appstate_sync_1.buildAppStateSyncResult; } });
18
+ Object.defineProperty(exports, "buildServerSyncNotification", { enumerable: true, get: function () { return appstate_sync_1.buildServerSyncNotification; } });
19
+ Object.defineProperty(exports, "parseAppStateSyncRequest", { enumerable: true, get: function () { return appstate_sync_1.parseAppStateSyncRequest; } });
20
+ var router_1 = require("./protocol/iq/router");
21
+ Object.defineProperty(exports, "buildIqError", { enumerable: true, get: function () { return router_1.buildIqError; } });
22
+ Object.defineProperty(exports, "buildIqResult", { enumerable: true, get: function () { return router_1.buildIqResult; } });
23
+ var call_failure_1 = require("./protocol/push/call-failure");
24
+ Object.defineProperty(exports, "buildCall", { enumerable: true, get: function () { return call_failure_1.buildCall; } });
25
+ Object.defineProperty(exports, "buildFailure", { enumerable: true, get: function () { return call_failure_1.buildFailure; } });
26
+ var chatstate_1 = require("./protocol/push/chatstate");
27
+ Object.defineProperty(exports, "buildChatstate", { enumerable: true, get: function () { return chatstate_1.buildChatstate; } });
28
+ var error_stanza_1 = require("./protocol/push/error-stanza");
29
+ Object.defineProperty(exports, "buildIncomingErrorStanza", { enumerable: true, get: function () { return error_stanza_1.buildIncomingErrorStanza; } });
30
+ var app_state_key_share_1 = require("./protocol/push/app-state-key-share");
31
+ Object.defineProperty(exports, "buildAppStateSyncKeyShareMessage", { enumerable: true, get: function () { return app_state_key_share_1.buildAppStateSyncKeyShareMessage; } });
32
+ var history_sync_1 = require("./protocol/push/history-sync");
33
+ Object.defineProperty(exports, "buildHistorySyncExternalMessage", { enumerable: true, get: function () { return history_sync_1.buildHistorySyncExternalMessage; } });
34
+ Object.defineProperty(exports, "buildHistorySyncMessage", { enumerable: true, get: function () { return history_sync_1.buildHistorySyncMessage; } });
35
+ Object.defineProperty(exports, "encodeHistorySyncPlaintext", { enumerable: true, get: function () { return history_sync_1.encodeHistorySyncPlaintext; } });
36
+ var fake_app_state_crypto_1 = require("./protocol/signal/fake-app-state-crypto");
37
+ Object.defineProperty(exports, "APP_STATE_EMPTY_LT_HASH", { enumerable: true, get: function () { return fake_app_state_crypto_1.APP_STATE_EMPTY_LT_HASH; } });
38
+ Object.defineProperty(exports, "FakeAppStateCrypto", { enumerable: true, get: function () { return fake_app_state_crypto_1.FakeAppStateCrypto; } });
39
+ var fake_app_state_collection_1 = require("./state/fake-app-state-collection");
40
+ Object.defineProperty(exports, "FakeAppStateCollection", { enumerable: true, get: function () { return fake_app_state_collection_1.FakeAppStateCollection; } });
41
+ var fake_media_store_1 = require("./state/fake-media-store");
42
+ Object.defineProperty(exports, "FakeMediaStore", { enumerable: true, get: function () { return fake_media_store_1.FakeMediaStore; } });
43
+ var message_1 = require("./protocol/push/message");
44
+ Object.defineProperty(exports, "buildMessage", { enumerable: true, get: function () { return message_1.buildMessage; } });
45
+ var notification_1 = require("./protocol/push/notification");
46
+ Object.defineProperty(exports, "buildGroupNotification", { enumerable: true, get: function () { return notification_1.buildGroupNotification; } });
47
+ Object.defineProperty(exports, "buildNotification", { enumerable: true, get: function () { return notification_1.buildNotification; } });
48
+ var presence_1 = require("./protocol/push/presence");
49
+ Object.defineProperty(exports, "buildIncomingPresence", { enumerable: true, get: function () { return presence_1.buildIncomingPresence; } });
50
+ var receipt_1 = require("./protocol/push/receipt");
51
+ Object.defineProperty(exports, "buildReceipt", { enumerable: true, get: function () { return receipt_1.buildReceipt; } });
52
+ var fake_peer_identity_1 = require("./protocol/signal/fake-peer-identity");
53
+ Object.defineProperty(exports, "generateFakePeerIdentity", { enumerable: true, get: function () { return fake_peer_identity_1.generateFakePeerIdentity; } });
54
+ var fake_peer_double_ratchet_1 = require("./protocol/signal/fake-peer-double-ratchet");
55
+ Object.defineProperty(exports, "FakePeerDoubleRatchet", { enumerable: true, get: function () { return fake_peer_double_ratchet_1.FakePeerDoubleRatchet; } });
56
+ var fake_sender_key_1 = require("./protocol/signal/fake-sender-key");
57
+ Object.defineProperty(exports, "FakeSenderKey", { enumerable: true, get: function () { return fake_sender_key_1.FakeSenderKey; } });
58
+ var fake_primary_device_1 = require("./protocol/auth/fake-primary-device");
59
+ Object.defineProperty(exports, "buildAdvSignedDeviceIdentity", { enumerable: true, get: function () { return fake_primary_device_1.buildAdvSignedDeviceIdentity; } });
60
+ Object.defineProperty(exports, "generateFakePrimaryDevice", { enumerable: true, get: function () { return fake_primary_device_1.generateFakePrimaryDevice; } });
61
+ var pair_device_1 = require("./protocol/auth/pair-device");
62
+ Object.defineProperty(exports, "buildPairDeviceIq", { enumerable: true, get: function () { return pair_device_1.buildPairDeviceIq; } });
63
+ Object.defineProperty(exports, "buildPairSuccessIq", { enumerable: true, get: function () { return pair_device_1.buildPairSuccessIq; } });
64
+ Object.defineProperty(exports, "parsePairingQrString", { enumerable: true, get: function () { return pair_device_1.parsePairingQrString; } });
65
+ var prekey_upload_1 = require("./protocol/signal/prekey-upload");
66
+ Object.defineProperty(exports, "parsePreKeyUploadIq", { enumerable: true, get: function () { return prekey_upload_1.parsePreKeyUploadIq; } });
67
+ Object.defineProperty(exports, "PreKeyUploadParseError", { enumerable: true, get: function () { return prekey_upload_1.PreKeyUploadParseError; } });
68
+ var stream_error_1 = require("./protocol/stream/stream-error");
69
+ Object.defineProperty(exports, "buildStreamErrorAck", { enumerable: true, get: function () { return stream_error_1.buildStreamErrorAck; } });
70
+ Object.defineProperty(exports, "buildStreamErrorCode", { enumerable: true, get: function () { return stream_error_1.buildStreamErrorCode; } });
71
+ Object.defineProperty(exports, "buildStreamErrorDeviceRemoved", { enumerable: true, get: function () { return stream_error_1.buildStreamErrorDeviceRemoved; } });
72
+ Object.defineProperty(exports, "buildStreamErrorReplaced", { enumerable: true, get: function () { return stream_error_1.buildStreamErrorReplaced; } });
73
+ Object.defineProperty(exports, "buildStreamErrorXmlNotWellFormed", { enumerable: true, get: function () { return stream_error_1.buildStreamErrorXmlNotWellFormed; } });
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6DAA2D;AAAlD,sHAAA,iBAAiB,OAAA;AAM1B,2CAAyC;AAAhC,oGAAA,QAAQ,OAAA;AAQjB,mDAAiD;AAAxC,4GAAA,YAAY,OAAA;AAYrB,2CAAwD;AAA/C,yGAAA,aAAa,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAEhC,6DAA2D;AAAlD,oHAAA,gBAAgB,OAAA;AASzB,6DAKoC;AAJhC,4HAAA,2BAA2B,OAAA;AAC3B,wHAAA,uBAAuB,OAAA;AACvB,4HAAA,2BAA2B,OAAA;AAC3B,yHAAA,wBAAwB,OAAA;AAS5B,+CAAkE;AAAzD,sGAAA,YAAY,OAAA;AAAE,uGAAA,aAAa,OAAA;AACpC,6DAAsE;AAA7D,yGAAA,SAAS,OAAA;AAAE,4GAAA,YAAY,OAAA;AAEhC,uDAA0D;AAAjD,2GAAA,cAAc,OAAA;AAEvB,6DAAuE;AAA9D,wHAAA,wBAAwB,OAAA;AAEjC,2EAAsF;AAA7E,uIAAA,gCAAgC,OAAA;AAKzC,6DAIqC;AAHjC,+HAAA,+BAA+B,OAAA;AAC/B,uHAAA,uBAAuB,OAAA;AACvB,0HAAA,0BAA0B,OAAA;AAS9B,iFAGgD;AAF5C,gIAAA,uBAAuB,OAAA;AACvB,2HAAA,kBAAkB,OAAA;AAOtB,+EAA0E;AAAjE,mIAAA,sBAAsB,OAAA;AAK/B,6DAAyD;AAAhD,kHAAA,cAAc,OAAA;AAEvB,mDAAsD;AAA7C,uGAAA,YAAY,OAAA;AAErB,6DAAwF;AAA/E,sHAAA,sBAAsB,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AAKlD,qDAAgE;AAAvD,iHAAA,qBAAqB,OAAA;AAM9B,mDAAsD;AAA7C,uGAAA,YAAY,OAAA;AAErB,2EAA+E;AAAtE,8HAAA,wBAAwB,OAAA;AAEjC,uFAAkF;AAAzE,iIAAA,qBAAqB,OAAA;AAC9B,qEAAiE;AAAxD,gHAAA,aAAa,OAAA;AAEtB,2EAG4C;AAFxC,mIAAA,4BAA4B,OAAA;AAC5B,gIAAA,yBAAyB,OAAA;AAO7B,2DAIoC;AAHhC,gHAAA,iBAAiB,OAAA;AACjB,iHAAA,kBAAkB,OAAA;AAClB,mHAAA,oBAAoB,OAAA;AAOxB,iEAA6F;AAApF,oHAAA,mBAAmB,OAAA;AAAE,uHAAA,sBAAsB,OAAA;AAMpD,+DAMuC;AALnC,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AACpB,6HAAA,6BAA6B,OAAA;AAC7B,wHAAA,wBAAwB,OAAA;AACxB,gIAAA,gCAAgC,OAAA"}
@@ -0,0 +1,23 @@
1
+ import type { WebSocket } from 'ws';
2
+ export type WaFakeConnectionState = 'open' | 'closing' | 'closed';
3
+ export interface WaFakeConnectionHandlers {
4
+ readonly onFrame?: (frame: Uint8Array) => void;
5
+ readonly onClose?: (info: {
6
+ readonly code: number;
7
+ readonly reason: string;
8
+ }) => void;
9
+ readonly onError?: (error: Error) => void;
10
+ }
11
+ export declare class WaFakeConnection {
12
+ readonly id: string;
13
+ private readonly socket;
14
+ private handlers;
15
+ private currentState;
16
+ constructor(id: string, socket: WebSocket);
17
+ get state(): WaFakeConnectionState;
18
+ setHandlers(handlers: WaFakeConnectionHandlers): void;
19
+ sendFrame(frame: Uint8Array): void;
20
+ close(code?: number, reason?: string): void;
21
+ private bindSocketEvents;
22
+ }
23
+ //# sourceMappingURL=WaFakeConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaFakeConnection.d.ts","sourceRoot":"","sources":["../../src/infra/WaFakeConnection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAEnC,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEjE,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CAC5C;AAED,qBAAa,gBAAgB;IACzB,SAAgB,EAAE,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,YAAY,CAAgC;gBAEjC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IAMhD,IAAW,KAAK,IAAI,qBAAqB,CAExC;IAEM,WAAW,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAIrD,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOlC,KAAK,CAAC,IAAI,SAAO,EAAE,MAAM,SAAK,GAAG,IAAI;IAQ5C,OAAO,CAAC,gBAAgB;CAwB3B"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaFakeConnection = void 0;
4
+ class WaFakeConnection {
5
+ constructor(id, socket) {
6
+ this.handlers = {};
7
+ this.currentState = 'open';
8
+ this.id = id;
9
+ this.socket = socket;
10
+ this.bindSocketEvents();
11
+ }
12
+ get state() {
13
+ return this.currentState;
14
+ }
15
+ setHandlers(handlers) {
16
+ this.handlers = handlers;
17
+ }
18
+ sendFrame(frame) {
19
+ if (this.currentState !== 'open') {
20
+ throw new Error(`cannot send frame on connection in state "${this.currentState}"`);
21
+ }
22
+ this.socket.send(frame);
23
+ }
24
+ close(code = 1000, reason = '') {
25
+ if (this.currentState === 'closed' || this.currentState === 'closing') {
26
+ return;
27
+ }
28
+ this.currentState = 'closing';
29
+ this.socket.close(code, reason);
30
+ }
31
+ bindSocketEvents() {
32
+ this.socket.on('message', (data, isBinary) => {
33
+ if (!isBinary) {
34
+ this.handlers.onError?.(new Error('received unexpected text frame'));
35
+ return;
36
+ }
37
+ const frame = data instanceof Uint8Array
38
+ ? data
39
+ : Array.isArray(data)
40
+ ? new Uint8Array(Buffer.concat(data))
41
+ : new Uint8Array(data);
42
+ this.handlers.onFrame?.(frame);
43
+ });
44
+ this.socket.on('close', (code, reasonBuf) => {
45
+ this.currentState = 'closed';
46
+ this.handlers.onClose?.({ code, reason: reasonBuf.toString('utf8') });
47
+ });
48
+ this.socket.on('error', (error) => {
49
+ this.handlers.onError?.(error);
50
+ });
51
+ }
52
+ }
53
+ exports.WaFakeConnection = WaFakeConnection;
54
+ //# sourceMappingURL=WaFakeConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaFakeConnection.js","sourceRoot":"","sources":["../../src/infra/WaFakeConnection.ts"],"names":[],"mappings":";;;AAUA,MAAa,gBAAgB;IAMzB,YAAmB,EAAU,EAAE,MAAiB;QAHxC,aAAQ,GAA6B,EAAE,CAAA;QACvC,iBAAY,GAA0B,MAAM,CAAA;QAGhD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC3B,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,YAAY,CAAA;IAC5B,CAAC;IAEM,WAAW,CAAC,QAAkC;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAEM,SAAS,CAAC,KAAiB;QAC9B,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,6CAA6C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACtF,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAEM,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,EAAE;QACjC,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACpE,OAAM;QACV,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAA;gBACpE,OAAM;YACV,CAAC;YACD,MAAM,KAAK,GACP,IAAI,YAAY,UAAU;gBACtB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACnB,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACrC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YACxC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAA;YAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AA3DD,4CA2DC"}
@@ -0,0 +1,51 @@
1
+ /** Per-connection lifecycle pipeline (Noise handshake + stanza loop). */
2
+ import { type FakeNoiseRootCa } from '../protocol/auth/cert-chain';
3
+ import { type ParsedClientPayload } from '../protocol/auth/client-payload-validate';
4
+ import { buildSuccessNode } from '../protocol/auth/success-node';
5
+ import { type WaFakeIqRouter } from '../protocol/iq/router';
6
+ import { type BinaryNode } from '../transport/codec';
7
+ import { type SignalKeyPair } from '../transport/crypto';
8
+ import type { WaFakeConnection } from './WaFakeConnection';
9
+ export interface WaFakeConnectionPipelineConfig {
10
+ readonly connection: WaFakeConnection;
11
+ readonly rootCa: FakeNoiseRootCa;
12
+ readonly serverStaticKeyPair: SignalKeyPair;
13
+ readonly iqRouter: WaFakeIqRouter;
14
+ readonly successNodeAttributes?: Parameters<typeof buildSuccessNode>[0];
15
+ }
16
+ export interface WaFakeConnectionPipelineEvents {
17
+ readonly onAuthenticated?: (info: WaFakeAuthenticatedInfo) => void;
18
+ readonly onStanza?: (node: BinaryNode) => void;
19
+ readonly onUnhandledStanza?: (node: BinaryNode) => void;
20
+ readonly onError?: (error: Error) => void;
21
+ readonly onClose?: (info: {
22
+ readonly code: number;
23
+ readonly reason: string;
24
+ }) => void;
25
+ }
26
+ export interface WaFakeAuthenticatedInfo {
27
+ readonly clientPayload: ParsedClientPayload;
28
+ readonly clientStaticKey: Uint8Array;
29
+ }
30
+ export declare class WaFakeConnectionPipeline {
31
+ private readonly config;
32
+ private readonly frameSocket;
33
+ private events;
34
+ private state;
35
+ private chain;
36
+ constructor(config: WaFakeConnectionPipelineConfig);
37
+ setEvents(events: WaFakeConnectionPipelineEvents): void;
38
+ isAuthenticated(): boolean;
39
+ sendStanza(node: BinaryNode): Promise<void>;
40
+ private onPrologue;
41
+ private scheduleFrame;
42
+ private handleFrame;
43
+ private handleClientHello;
44
+ private handleXxClientHello;
45
+ /** Server-side IK path used when the client already cached our static key. */
46
+ private handleIkClientHello;
47
+ private handleClientFinish;
48
+ private handleAuthenticatedFrame;
49
+ private fail;
50
+ }
51
+ //# sourceMappingURL=WaFakeConnectionPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaFakeConnectionPipeline.d.ts","sourceRoot":"","sources":["../../src/infra/WaFakeConnectionPipeline.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAEH,KAAK,mBAAmB,EAC3B,MAAM,0CAA0C,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,KAAK,UAAU,EAAkD,MAAM,oBAAoB,CAAA;AACpG,OAAO,EAAE,KAAK,aAAa,EAAU,MAAM,qBAAqB,CAAA;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAS1D,MAAM,WAAW,8BAA8B;IAC3C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAA;IAC3C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;CAC1E;AAED,MAAM,WAAW,8BAA8B;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACxF;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAA;IAC3C,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAA;CACvC;AAiBD,qBAAa,wBAAwB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,KAAK,CAAmC;gBAE7B,MAAM,EAAE,8BAA8B;IAclD,SAAS,CAAC,MAAM,EAAE,8BAA8B,GAAG,IAAI;IAIvD,eAAe,IAAI,OAAO;IAIpB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;YAIP,WAAW;YA0BX,iBAAiB;YAejB,mBAAmB;IAyCjC,8EAA8E;YAChE,mBAAmB;YA4DnB,kBAAkB;YA4BlB,wBAAwB;IAsCtC,OAAO,CAAC,IAAI;CAMf"}