@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
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /** Pairing IQ builders/parsers (source: `WAWebHandlePairDevice*`, `/wa-web`). */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.buildPairDeviceIq = buildPairDeviceIq;
5
+ exports.buildPairSuccessIq = buildPairSuccessIq;
6
+ exports.parsePairingQrString = parsePairingQrString;
7
+ function buildPairDeviceIq(input) {
8
+ if (input.refs.length !== 6) {
9
+ throw new Error(`pair-device requires exactly 6 refs, got ${input.refs.length}`);
10
+ }
11
+ return {
12
+ tag: 'iq',
13
+ attrs: {
14
+ id: input.id ?? `pair-device-${Math.random().toString(36).slice(2, 10)}`,
15
+ type: 'set',
16
+ xmlns: 'md',
17
+ from: 's.whatsapp.net'
18
+ },
19
+ content: [
20
+ {
21
+ tag: 'pair-device',
22
+ attrs: {},
23
+ content: input.refs.map((ref) => ({
24
+ tag: 'ref',
25
+ attrs: {},
26
+ content: ref
27
+ }))
28
+ }
29
+ ]
30
+ };
31
+ }
32
+ function buildPairSuccessIq(input) {
33
+ const children = [
34
+ {
35
+ tag: 'device',
36
+ attrs: {
37
+ jid: input.deviceJid,
38
+ ...(input.deviceLid !== undefined ? { lid: input.deviceLid } : {})
39
+ }
40
+ },
41
+ {
42
+ tag: 'platform',
43
+ attrs: { name: input.platform }
44
+ },
45
+ {
46
+ tag: 'device-identity',
47
+ attrs: {},
48
+ content: input.deviceIdentityBytes
49
+ }
50
+ ];
51
+ if (input.bizName !== undefined) {
52
+ children.push({
53
+ tag: 'biz',
54
+ attrs: { name: input.bizName }
55
+ });
56
+ }
57
+ return {
58
+ tag: 'iq',
59
+ attrs: {
60
+ id: input.id ?? `pair-success-${Math.random().toString(36).slice(2, 10)}`,
61
+ type: 'set',
62
+ xmlns: 'md',
63
+ from: 's.whatsapp.net'
64
+ },
65
+ content: [
66
+ {
67
+ tag: 'pair-success',
68
+ attrs: {},
69
+ content: children
70
+ }
71
+ ]
72
+ };
73
+ }
74
+ function parsePairingQrString(qr) {
75
+ const parts = qr.split(',');
76
+ if (parts.length < 5) {
77
+ throw new Error(`pairing qr must have 5 comma-separated parts, got ${parts.length}`);
78
+ }
79
+ const platform = parts[parts.length - 1];
80
+ const advSecretB64 = parts[parts.length - 2];
81
+ const identityPubB64 = parts[parts.length - 3];
82
+ const noisePubB64 = parts[parts.length - 4];
83
+ const ref = parts.slice(0, parts.length - 4).join(',');
84
+ return {
85
+ ref,
86
+ noisePublicKey: base64Decode(noisePubB64),
87
+ identityPublicKey: base64Decode(identityPubB64),
88
+ advSecretKey: base64Decode(advSecretB64),
89
+ platform
90
+ };
91
+ }
92
+ function base64Decode(input) {
93
+ let normalized = input.replace(/-/g, '+').replace(/_/g, '/');
94
+ const remainder = normalized.length % 4;
95
+ if (remainder === 2)
96
+ normalized += '==';
97
+ else if (remainder === 3)
98
+ normalized += '=';
99
+ else if (remainder === 1) {
100
+ throw new Error(`invalid base64 string length: ${input.length}`);
101
+ }
102
+ return new Uint8Array(Buffer.from(normalized, 'base64'));
103
+ }
104
+ //# sourceMappingURL=pair-device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pair-device.js","sourceRoot":"","sources":["../../../src/protocol/auth/pair-device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Builder for the post-handshake `<success/>` stanza. */
2
+ import type { BinaryNode } from '../../transport/codec';
3
+ export interface BuildSuccessNodeInput {
4
+ readonly t?: number;
5
+ readonly props?: number;
6
+ readonly companionEncStatic?: string | null;
7
+ readonly lid?: string;
8
+ readonly displayName?: string;
9
+ readonly abprops?: number;
10
+ readonly groupAbprops?: number;
11
+ readonly location?: string;
12
+ readonly creation?: number;
13
+ }
14
+ export declare function buildSuccessNode(input?: BuildSuccessNodeInput): BinaryNode;
15
+ //# sourceMappingURL=success-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"success-node.d.ts","sourceRoot":"","sources":["../../../src/protocol/auth/success-node.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,qBAA0B,GAAG,UAAU,CAoB9E"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /** Builder for the post-handshake `<success/>` stanza. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.buildSuccessNode = buildSuccessNode;
5
+ function buildSuccessNode(input = {}) {
6
+ const t = input.t ?? Math.floor(Date.now() / 1000);
7
+ const props = input.props ?? 0;
8
+ const attrs = {
9
+ t: String(t),
10
+ props: String(props),
11
+ companion_enc_static: input.companionEncStatic ?? 'NULL'
12
+ };
13
+ if (input.lid !== undefined)
14
+ attrs.lid = input.lid;
15
+ if (input.displayName !== undefined)
16
+ attrs.display_name = input.displayName;
17
+ if (input.abprops !== undefined)
18
+ attrs.abprops = String(input.abprops);
19
+ if (input.groupAbprops !== undefined)
20
+ attrs.group_abprops = String(input.groupAbprops);
21
+ if (input.location !== undefined)
22
+ attrs.location = input.location;
23
+ if (input.creation !== undefined)
24
+ attrs.creation = String(input.creation);
25
+ return {
26
+ tag: 'success',
27
+ attrs
28
+ };
29
+ }
30
+ //# sourceMappingURL=success-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"success-node.js","sourceRoot":"","sources":["../../../src/protocol/auth/success-node.ts"],"names":[],"mappings":";AAAA,0DAA0D;;AAgB1D,4CAoBC;AApBD,SAAgB,gBAAgB,CAAC,QAA+B,EAAE;IAC9D,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAK,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAA;IAE9B,MAAM,KAAK,GAA2B;QAClC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QACpB,oBAAoB,EAAE,KAAK,CAAC,kBAAkB,IAAI,MAAM;KAC3D,CAAA;IACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;IAClD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,CAAA;IAC3E,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtE,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACtF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;IACjE,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEzE,OAAO;QACH,GAAG,EAAE,SAAS;QACd,KAAK;KACR,CAAA;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Builds the `abt/props` IQ result consumed by the client ABProps parser. */
2
+ import type { BinaryNode } from '../../transport/codec';
3
+ export interface FakeAbPropEntry {
4
+ readonly configCode: number;
5
+ readonly configValue?: string;
6
+ }
7
+ export interface BuildAbPropsResultInput {
8
+ readonly hash?: string;
9
+ readonly refreshSeconds?: number;
10
+ readonly refreshId?: number;
11
+ readonly props?: readonly FakeAbPropEntry[];
12
+ }
13
+ export declare function buildAbPropsResult(iq: BinaryNode, input?: BuildAbPropsResultInput): BinaryNode;
14
+ //# sourceMappingURL=abprops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abprops.d.ts","sourceRoot":"","sources":["../../../src/protocol/iq/abprops.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C;AAED,wBAAgB,kBAAkB,CAC9B,EAAE,EAAE,UAAU,EACd,KAAK,GAAE,uBAA4B,GACpC,UAAU,CA2BZ"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /** Builds the `abt/props` IQ result consumed by the client ABProps parser. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.buildAbPropsResult = buildAbPropsResult;
5
+ const router_1 = require("./router");
6
+ function buildAbPropsResult(iq, input = {}) {
7
+ const result = (0, router_1.buildIqResult)(iq);
8
+ const propsAttrs = {
9
+ protocol: '1',
10
+ hash: input.hash ?? 'fake-abprops-hash',
11
+ refresh: String(input.refreshSeconds ?? 86400),
12
+ refresh_id: String(input.refreshId ?? 1),
13
+ delta_update: 'false'
14
+ };
15
+ return {
16
+ ...result,
17
+ content: [
18
+ {
19
+ tag: 'props',
20
+ attrs: propsAttrs,
21
+ content: (input.props ?? []).map((prop) => ({
22
+ tag: 'prop',
23
+ attrs: {
24
+ config_code: String(prop.configCode),
25
+ ...(prop.configValue !== undefined
26
+ ? { config_value: prop.configValue }
27
+ : {})
28
+ }
29
+ }))
30
+ }
31
+ ]
32
+ };
33
+ }
34
+ //# sourceMappingURL=abprops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abprops.js","sourceRoot":"","sources":["../../../src/protocol/iq/abprops.ts"],"names":[],"mappings":";AAAA,8EAA8E;;AAkB9E,gDA8BC;AA5CD,qCAAwC;AAcxC,SAAgB,kBAAkB,CAC9B,EAAc,EACd,QAAiC,EAAE;IAEnC,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,EAAE,CAAC,CAAA;IAChC,MAAM,UAAU,GAA2B;QACvC,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,mBAAmB;QACvC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,KAAM,CAAC;QAC/C,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;QACxC,YAAY,EAAE,OAAO;KACxB,CAAA;IACD,OAAO;QACH,GAAG,MAAM;QACT,OAAO,EAAE;YACL;gBACI,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACxC,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE;wBACH,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;wBACpC,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS;4BAC9B,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE;4BACpC,CAAC,CAAC,EAAE,CAAC;qBACZ;iBACJ,CAAC,CAAC;aACN;SACJ;KACJ,CAAA;AACL,CAAC"}
@@ -0,0 +1,38 @@
1
+ /** App-state sync IQ/notification builders used by the fake server. */
2
+ import type { BinaryNode } from '../../transport/codec';
3
+ export type FakeAppStateCollectionName = 'regular' | 'regular_low' | 'regular_high' | 'critical_block' | 'critical_unblock_low';
4
+ export interface BuildAppStateSyncResultInput {
5
+ readonly versions?: Readonly<Partial<Record<FakeAppStateCollectionName, number>>>;
6
+ }
7
+ export interface FakeAppStateCollectionPayload {
8
+ readonly name: string;
9
+ readonly version: number;
10
+ readonly patches?: readonly Uint8Array[];
11
+ readonly snapshot?: Uint8Array;
12
+ readonly hasMore?: boolean;
13
+ }
14
+ export interface BuildAppStateSyncFullResultInput {
15
+ readonly payloads: readonly FakeAppStateCollectionPayload[];
16
+ }
17
+ /** Encodes `ExternalBlobReference` used by external snapshot downloads. */
18
+ export declare function buildExternalBlobReference(input: {
19
+ readonly mediaKey: Uint8Array;
20
+ readonly directPath: string;
21
+ readonly fileSha256: Uint8Array;
22
+ readonly fileEncSha256: Uint8Array;
23
+ readonly fileSizeBytes?: number;
24
+ }): Uint8Array;
25
+ interface ParsedCollectionRequest {
26
+ readonly name: string;
27
+ readonly version: number;
28
+ }
29
+ export declare function parseAppStateSyncRequest(iq: BinaryNode): readonly ParsedCollectionRequest[];
30
+ export declare function buildAppStateSyncResult(iq: BinaryNode, input?: BuildAppStateSyncResultInput): BinaryNode;
31
+ export declare function buildAppStateSyncFullResult(iq: BinaryNode, input: BuildAppStateSyncFullResultInput): BinaryNode;
32
+ export interface BuildServerSyncNotificationInput {
33
+ readonly id?: string;
34
+ readonly collections: readonly FakeAppStateCollectionName[];
35
+ }
36
+ export declare function buildServerSyncNotification(input: BuildServerSyncNotificationInput): BinaryNode;
37
+ export {};
38
+ //# sourceMappingURL=appstate-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appstate-sync.d.ts","sourceRoot":"","sources":["../../../src/protocol/iq/appstate-sync.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAKvD,MAAM,MAAM,0BAA0B,GAChC,SAAS,GACT,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,sBAAsB,CAAA;AAE5B,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CACpF;AAED,MAAM,WAAW,6BAA6B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,6BAA6B,EAAE,CAAA;CAC9D;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAA;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAClC,GAAG,UAAU,CAQb;AAED,UAAU,uBAAuB;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,uBAAuB,EAAE,CAkB3F;AAED,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,UAAU,EACd,KAAK,GAAE,4BAAiC,GACzC,UAAU,CA2BZ;AAED,wBAAgB,2BAA2B,CACvC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,gCAAgC,GACxC,UAAU,CAoEZ;AAED,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,EAAE,SAAS,0BAA0B,EAAE,CAAA;CAC9D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,GAAG,UAAU,CAa/F"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /** App-state sync IQ/notification builders used by the fake server. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.buildExternalBlobReference = buildExternalBlobReference;
5
+ exports.parseAppStateSyncRequest = parseAppStateSyncRequest;
6
+ exports.buildAppStateSyncResult = buildAppStateSyncResult;
7
+ exports.buildAppStateSyncFullResult = buildAppStateSyncFullResult;
8
+ exports.buildServerSyncNotification = buildServerSyncNotification;
9
+ const protos_1 = require("../../transport/protos");
10
+ const router_1 = require("./router");
11
+ /** Encodes `ExternalBlobReference` used by external snapshot downloads. */
12
+ function buildExternalBlobReference(input) {
13
+ return protos_1.proto.ExternalBlobReference.encode({
14
+ mediaKey: input.mediaKey,
15
+ directPath: input.directPath,
16
+ fileSha256: input.fileSha256,
17
+ fileEncSha256: input.fileEncSha256,
18
+ fileSizeBytes: input.fileSizeBytes
19
+ }).finish();
20
+ }
21
+ function parseAppStateSyncRequest(iq) {
22
+ if (iq.tag !== 'iq')
23
+ return [];
24
+ if (!Array.isArray(iq.content))
25
+ return [];
26
+ const sync = iq.content.find((child) => child.tag === 'sync');
27
+ if (!sync || !Array.isArray(sync.content))
28
+ return [];
29
+ const out = [];
30
+ for (const child of sync.content) {
31
+ if (child.tag !== 'collection')
32
+ continue;
33
+ const name = child.attrs.name;
34
+ if (!name)
35
+ continue;
36
+ const versionAttr = child.attrs.version;
37
+ const version = versionAttr ? Number.parseInt(versionAttr, 10) : 0;
38
+ out.push({
39
+ name,
40
+ version: Number.isFinite(version) ? version : 0
41
+ });
42
+ }
43
+ return out;
44
+ }
45
+ function buildAppStateSyncResult(iq, input = {}) {
46
+ const requests = parseAppStateSyncRequest(iq);
47
+ const versions = input.versions ?? {};
48
+ const collectionNodes = requests.map((entry) => {
49
+ const overriddenVersion = versions[entry.name];
50
+ const responseVersion = overriddenVersion ?? entry.version;
51
+ return {
52
+ tag: 'collection',
53
+ attrs: {
54
+ name: entry.name,
55
+ version: String(responseVersion),
56
+ type: 'result'
57
+ }
58
+ };
59
+ });
60
+ const result = (0, router_1.buildIqResult)(iq);
61
+ return {
62
+ ...result,
63
+ attrs: { ...result.attrs, from: 's.whatsapp.net' },
64
+ content: [
65
+ {
66
+ tag: 'sync',
67
+ attrs: {},
68
+ content: collectionNodes
69
+ }
70
+ ]
71
+ };
72
+ }
73
+ function buildAppStateSyncFullResult(iq, input) {
74
+ const requests = parseAppStateSyncRequest(iq);
75
+ const payloadsByName = new Map();
76
+ for (const payload of input.payloads) {
77
+ payloadsByName.set(payload.name, payload);
78
+ }
79
+ const collectionNodes = requests.map((request) => {
80
+ const payload = payloadsByName.get(request.name);
81
+ if (!payload) {
82
+ return {
83
+ tag: 'collection',
84
+ attrs: {
85
+ name: request.name,
86
+ version: String(request.version),
87
+ type: 'result'
88
+ }
89
+ };
90
+ }
91
+ const children = [];
92
+ if (payload.snapshot && payload.patches) {
93
+ throw new Error(`app-state collection ${request.name}: snapshot and patches are mutually exclusive`);
94
+ }
95
+ if (payload.snapshot) {
96
+ children.push({
97
+ tag: 'snapshot',
98
+ attrs: {},
99
+ content: payload.snapshot
100
+ });
101
+ }
102
+ if (payload.patches && payload.patches.length > 0) {
103
+ children.push({
104
+ tag: 'patches',
105
+ attrs: {},
106
+ content: payload.patches.map((patchBytes) => ({
107
+ tag: 'patch',
108
+ attrs: {},
109
+ content: patchBytes
110
+ }))
111
+ });
112
+ }
113
+ const attrs = {
114
+ name: request.name,
115
+ version: String(payload.version),
116
+ type: 'result'
117
+ };
118
+ if (payload.hasMore) {
119
+ attrs.has_more_patches = 'true';
120
+ }
121
+ return {
122
+ tag: 'collection',
123
+ attrs,
124
+ content: children.length > 0 ? children : undefined
125
+ };
126
+ });
127
+ const result = (0, router_1.buildIqResult)(iq);
128
+ return {
129
+ ...result,
130
+ attrs: { ...result.attrs, from: 's.whatsapp.net' },
131
+ content: [
132
+ {
133
+ tag: 'sync',
134
+ attrs: {},
135
+ content: collectionNodes
136
+ }
137
+ ]
138
+ };
139
+ }
140
+ function buildServerSyncNotification(input) {
141
+ return {
142
+ tag: 'notification',
143
+ attrs: {
144
+ id: input.id ?? `server-sync-${Date.now()}`,
145
+ type: 'server_sync',
146
+ from: 's.whatsapp.net'
147
+ },
148
+ content: input.collections.map((name) => ({
149
+ tag: 'collection',
150
+ attrs: { name }
151
+ }))
152
+ };
153
+ }
154
+ //# sourceMappingURL=appstate-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appstate-sync.js","sourceRoot":"","sources":["../../../src/protocol/iq/appstate-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Builders/parsers for `w:biz` business profile IQs. */
2
+ import type { BinaryNode } from '../../transport/codec';
3
+ export interface FakeBusinessProfile {
4
+ readonly jid: string;
5
+ readonly description?: string;
6
+ readonly address?: string;
7
+ readonly email?: string;
8
+ readonly websites?: readonly string[];
9
+ readonly categoryIds?: readonly string[];
10
+ }
11
+ export declare function buildBusinessProfileResult(iq: BinaryNode, profiles: readonly FakeBusinessProfile[]): BinaryNode;
12
+ export declare function parseGetBusinessProfileIq(iq: BinaryNode): readonly string[] | null;
13
+ //# sourceMappingURL=business.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business.d.ts","sourceRoot":"","sources":["../../../src/protocol/iq/business.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3C;AAED,wBAAgB,0BAA0B,CACtC,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,SAAS,mBAAmB,EAAE,GACzC,UAAU,CAgBZ;AA6BD,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAWlF"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /** Builders/parsers for `w:biz` business profile IQs. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.buildBusinessProfileResult = buildBusinessProfileResult;
5
+ exports.parseGetBusinessProfileIq = parseGetBusinessProfileIq;
6
+ const router_1 = require("./router");
7
+ function buildBusinessProfileResult(iq, profiles) {
8
+ const result = (0, router_1.buildIqResult)(iq);
9
+ return {
10
+ ...result,
11
+ content: [
12
+ {
13
+ tag: 'business_profile',
14
+ attrs: { v: '116' },
15
+ content: profiles.map((profile) => ({
16
+ tag: 'profile',
17
+ attrs: { jid: profile.jid, tag: 'fake-profile-tag' },
18
+ content: buildBusinessProfileChildren(profile)
19
+ }))
20
+ }
21
+ ]
22
+ };
23
+ }
24
+ function buildBusinessProfileChildren(profile) {
25
+ const out = [];
26
+ if (profile.address !== undefined) {
27
+ out.push({ tag: 'address', attrs: {}, content: profile.address });
28
+ }
29
+ if (profile.description !== undefined) {
30
+ out.push({ tag: 'description', attrs: {}, content: profile.description });
31
+ }
32
+ if (profile.email !== undefined) {
33
+ out.push({ tag: 'email', attrs: {}, content: profile.email });
34
+ }
35
+ for (const website of profile.websites ?? []) {
36
+ out.push({ tag: 'website', attrs: {}, content: website });
37
+ }
38
+ if (profile.categoryIds && profile.categoryIds.length > 0) {
39
+ out.push({
40
+ tag: 'categories',
41
+ attrs: {},
42
+ content: profile.categoryIds.map((id) => ({
43
+ tag: 'category',
44
+ attrs: { id }
45
+ }))
46
+ });
47
+ }
48
+ return out;
49
+ }
50
+ function parseGetBusinessProfileIq(iq) {
51
+ if (!Array.isArray(iq.content))
52
+ return null;
53
+ const profile = iq.content.find((child) => child.tag === 'business_profile');
54
+ if (!profile || !Array.isArray(profile.content))
55
+ return null;
56
+ const jids = [];
57
+ for (const child of profile.content) {
58
+ if (child.tag === 'profile' && child.attrs.jid) {
59
+ jids.push(child.attrs.jid);
60
+ }
61
+ }
62
+ return jids;
63
+ }
64
+ //# sourceMappingURL=business.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business.js","sourceRoot":"","sources":["../../../src/protocol/iq/business.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** Parser for `urn:xmpp:whatsapp:dirty` clear IQs. */
2
+ import type { BinaryNode } from '../../transport/codec';
3
+ export interface FakeClearedDirtyBit {
4
+ readonly type: string;
5
+ readonly timestamp: number;
6
+ }
7
+ export declare function parseClearDirtyBitsIq(iq: BinaryNode): readonly FakeClearedDirtyBit[] | null;
8
+ //# sourceMappingURL=dirty-bits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dirty-bits.d.ts","sourceRoot":"","sources":["../../../src/protocol/iq/dirty-bits.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC7B;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,mBAAmB,EAAE,GAAG,IAAI,CAa3F"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /** Parser for `urn:xmpp:whatsapp:dirty` clear IQs. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.parseClearDirtyBitsIq = parseClearDirtyBitsIq;
5
+ function parseClearDirtyBitsIq(iq) {
6
+ if (!Array.isArray(iq.content))
7
+ return null;
8
+ const out = [];
9
+ for (const child of iq.content) {
10
+ if (child.tag !== 'clean')
11
+ continue;
12
+ const type = child.attrs.type;
13
+ const timestamp = child.attrs.timestamp;
14
+ if (!type || !timestamp)
15
+ continue;
16
+ const parsed = Number.parseInt(timestamp, 10);
17
+ if (!Number.isFinite(parsed))
18
+ continue;
19
+ out.push({ type, timestamp: parsed });
20
+ }
21
+ return out.length > 0 ? out : null;
22
+ }
23
+ //# sourceMappingURL=dirty-bits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dirty-bits.js","sourceRoot":"","sources":["../../../src/protocol/iq/dirty-bits.ts"],"names":[],"mappings":";AAAA,sDAAsD;;AAStD,sDAaC;AAbD,SAAgB,qBAAqB,CAAC,EAAc;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3C,MAAM,GAAG,GAA0B,EAAE,CAAA;IACrC,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;YAAE,SAAQ;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAA;QAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAA;QACvC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;YAAE,SAAQ;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAQ;QACtC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;IACzC,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AACtC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /** Builders/parsers for `w:g2` group IQ operations. */
2
+ import type { BinaryNode } from '../../transport/codec';
3
+ export type FakeGroupParticipantAction = 'add' | 'remove' | 'promote' | 'demote';
4
+ export declare function parseGroupParticipantChangeIq(iq: BinaryNode): {
5
+ readonly action: FakeGroupParticipantAction;
6
+ readonly groupJid: string;
7
+ readonly participantJids: readonly string[];
8
+ } | null;
9
+ export declare function buildGroupParticipantChangeResult(iq: BinaryNode, action: FakeGroupParticipantAction, participantJids: readonly string[]): BinaryNode;
10
+ export declare function parseCreateGroupIq(iq: BinaryNode): {
11
+ readonly subject: string;
12
+ readonly participantJids: readonly string[];
13
+ readonly description?: string;
14
+ } | null;
15
+ export declare function parseSetSubjectIq(iq: BinaryNode): {
16
+ readonly groupJid: string;
17
+ readonly subject: string;
18
+ } | null;
19
+ export declare function parseSetDescriptionIq(iq: BinaryNode): {
20
+ readonly groupJid: string;
21
+ readonly description: string | null;
22
+ readonly descriptionId: string | undefined;
23
+ } | null;
24
+ export declare function parseLeaveGroupIq(iq: BinaryNode): readonly string[] | null;
25
+ export declare function buildGroupMetadataNode(input: {
26
+ readonly groupJid: string;
27
+ readonly subject: string;
28
+ readonly creator: string;
29
+ readonly creationSeconds: number;
30
+ readonly participantJids: readonly string[];
31
+ readonly description?: string;
32
+ readonly descriptionId?: string;
33
+ }): BinaryNode;
34
+ //# sourceMappingURL=group-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-ops.d.ts","sourceRoot":"","sources":["../../../src/protocol/iq/group-ops.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIvD,MAAM,MAAM,0BAA0B,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEhF,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,UAAU,GAAG;IAC3D,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAA;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9C,GAAG,IAAI,CA2BP;AAED,wBAAgB,iCAAiC,CAC7C,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,0BAA0B,EAClC,eAAe,EAAE,SAAS,MAAM,EAAE,GACnC,UAAU,CAeZ;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,UAAU,GAAG;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAChC,GAAG,IAAI,CAsBP;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,UAAU,GAAG;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAC3B,GAAG,IAAI,CAUP;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,UAAU,GAAG;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7C,GAAG,IAAI,CAiBP;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAW1E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAClC,GAAG,UAAU,CAwBb"}