@openclaw/crabline 0.1.9 → 0.1.11

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 (189) hide show
  1. package/README.md +47 -22
  2. package/assets/crabline-banner.svg +20 -0
  3. package/dist/src/bin/crabline.js.map +1 -1
  4. package/dist/src/cli/program.d.ts +25 -1
  5. package/dist/src/cli/program.js +579 -82
  6. package/dist/src/cli/program.js.map +1 -1
  7. package/dist/src/config/load.js +59 -6
  8. package/dist/src/config/load.js.map +1 -1
  9. package/dist/src/config/schema.d.ts +116 -92
  10. package/dist/src/config/schema.js +179 -73
  11. package/dist/src/config/schema.js.map +1 -1
  12. package/dist/src/core/errors.js +9 -2
  13. package/dist/src/core/errors.js.map +1 -1
  14. package/dist/src/core/exit-codes.js.map +1 -1
  15. package/dist/src/core/matcher.js +7 -6
  16. package/dist/src/core/matcher.js.map +1 -1
  17. package/dist/src/core/message-template.js.map +1 -1
  18. package/dist/src/core/nonces.d.ts +1 -0
  19. package/dist/src/core/nonces.js +4 -2
  20. package/dist/src/core/nonces.js.map +1 -1
  21. package/dist/src/core/reporters.d.ts +1 -0
  22. package/dist/src/core/reporters.js +42 -4
  23. package/dist/src/core/reporters.js.map +1 -1
  24. package/dist/src/core/run.d.ts +3 -0
  25. package/dist/src/core/run.js +415 -107
  26. package/dist/src/core/run.js.map +1 -1
  27. package/dist/src/core/safe-regex.d.ts +3 -0
  28. package/dist/src/core/safe-regex.js +21 -0
  29. package/dist/src/core/safe-regex.js.map +1 -0
  30. package/dist/src/index.d.ts +2 -2
  31. package/dist/src/index.js +1 -1
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/openclaw/artifact-generation.d.ts +43 -0
  34. package/dist/src/openclaw/artifact-generation.js +363 -0
  35. package/dist/src/openclaw/artifact-generation.js.map +1 -0
  36. package/dist/src/openclaw/bridges/matrix.js +97 -12
  37. package/dist/src/openclaw/bridges/matrix.js.map +1 -1
  38. package/dist/src/openclaw/bridges/mattermost.js +32 -10
  39. package/dist/src/openclaw/bridges/mattermost.js.map +1 -1
  40. package/dist/src/openclaw/bridges/signal.js +55 -18
  41. package/dist/src/openclaw/bridges/signal.js.map +1 -1
  42. package/dist/src/openclaw/bridges/slack.js +85 -7
  43. package/dist/src/openclaw/bridges/slack.js.map +1 -1
  44. package/dist/src/openclaw/bridges/telegram.js +124 -30
  45. package/dist/src/openclaw/bridges/telegram.js.map +1 -1
  46. package/dist/src/openclaw/bridges/whatsapp.js +78 -17
  47. package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
  48. package/dist/src/openclaw/bridges/zalo.js +14 -5
  49. package/dist/src/openclaw/bridges/zalo.js.map +1 -1
  50. package/dist/src/openclaw/outbound-contract.d.ts +5 -0
  51. package/dist/src/openclaw/outbound-contract.js +40 -0
  52. package/dist/src/openclaw/outbound-contract.js.map +1 -0
  53. package/dist/src/openclaw/private-file.d.ts +28 -0
  54. package/dist/src/openclaw/private-file.js +465 -0
  55. package/dist/src/openclaw/private-file.js.map +1 -0
  56. package/dist/src/openclaw/shared.d.ts +21 -2
  57. package/dist/src/openclaw/shared.js +115 -18
  58. package/dist/src/openclaw/shared.js.map +1 -1
  59. package/dist/src/openclaw/smoke-lock.d.ts +63 -0
  60. package/dist/src/openclaw/smoke-lock.js +1004 -0
  61. package/dist/src/openclaw/smoke-lock.js.map +1 -0
  62. package/dist/src/openclaw.d.ts +16 -8
  63. package/dist/src/openclaw.js +334 -52
  64. package/dist/src/openclaw.js.map +1 -1
  65. package/dist/src/providers/builtin/discord.d.ts +10 -1
  66. package/dist/src/providers/builtin/discord.js +144 -18
  67. package/dist/src/providers/builtin/discord.js.map +1 -1
  68. package/dist/src/providers/builtin/external-webhook-auth.d.ts +11 -0
  69. package/dist/src/providers/builtin/external-webhook-auth.js +10 -0
  70. package/dist/src/providers/builtin/external-webhook-auth.js.map +1 -0
  71. package/dist/src/providers/builtin/feishu.d.ts +19 -2
  72. package/dist/src/providers/builtin/feishu.js +307 -25
  73. package/dist/src/providers/builtin/feishu.js.map +1 -1
  74. package/dist/src/providers/builtin/googlechat.d.ts +20 -1
  75. package/dist/src/providers/builtin/googlechat.js +178 -19
  76. package/dist/src/providers/builtin/googlechat.js.map +1 -1
  77. package/dist/src/providers/builtin/imessage.d.ts +4 -0
  78. package/dist/src/providers/builtin/imessage.js +26 -11
  79. package/dist/src/providers/builtin/imessage.js.map +1 -1
  80. package/dist/src/providers/builtin/loopback.js +92 -30
  81. package/dist/src/providers/builtin/loopback.js.map +1 -1
  82. package/dist/src/providers/builtin/matrix.d.ts +11 -1
  83. package/dist/src/providers/builtin/matrix.js +53 -29
  84. package/dist/src/providers/builtin/matrix.js.map +1 -1
  85. package/dist/src/providers/builtin/mattermost.d.ts +10 -0
  86. package/dist/src/providers/builtin/mattermost.js +38 -15
  87. package/dist/src/providers/builtin/mattermost.js.map +1 -1
  88. package/dist/src/providers/builtin/msteams.d.ts +17 -1
  89. package/dist/src/providers/builtin/msteams.js +113 -14
  90. package/dist/src/providers/builtin/msteams.js.map +1 -1
  91. package/dist/src/providers/builtin/native-local-mock.d.ts +2 -9
  92. package/dist/src/providers/builtin/native-local-mock.js +12 -35
  93. package/dist/src/providers/builtin/native-local-mock.js.map +1 -1
  94. package/dist/src/providers/builtin/script.d.ts +11 -15
  95. package/dist/src/providers/builtin/script.js +566 -104
  96. package/dist/src/providers/builtin/script.js.map +1 -1
  97. package/dist/src/providers/builtin/slack.d.ts +6 -0
  98. package/dist/src/providers/builtin/slack.js +99 -40
  99. package/dist/src/providers/builtin/slack.js.map +1 -1
  100. package/dist/src/providers/builtin/telegram.d.ts +6 -0
  101. package/dist/src/providers/builtin/telegram.js +64 -43
  102. package/dist/src/providers/builtin/telegram.js.map +1 -1
  103. package/dist/src/providers/builtin/whatsapp.d.ts +28 -8
  104. package/dist/src/providers/builtin/whatsapp.js +567 -30
  105. package/dist/src/providers/builtin/whatsapp.js.map +1 -1
  106. package/dist/src/providers/builtin/zalo.js +30 -19
  107. package/dist/src/providers/builtin/zalo.js.map +1 -1
  108. package/dist/src/providers/catalog.d.ts +3 -3
  109. package/dist/src/providers/catalog.js +3 -3
  110. package/dist/src/providers/catalog.js.map +1 -1
  111. package/dist/src/providers/local-mock.d.ts +11 -2
  112. package/dist/src/providers/local-mock.js +322 -96
  113. package/dist/src/providers/local-mock.js.map +1 -1
  114. package/dist/src/providers/native-ids.d.ts +1 -0
  115. package/dist/src/providers/native-ids.js +6 -1
  116. package/dist/src/providers/native-ids.js.map +1 -1
  117. package/dist/src/providers/recorder.d.ts +30 -2
  118. package/dist/src/providers/recorder.js +549 -70
  119. package/dist/src/providers/recorder.js.map +1 -1
  120. package/dist/src/providers/registry.d.ts +25 -1
  121. package/dist/src/providers/registry.js +280 -40
  122. package/dist/src/providers/registry.js.map +1 -1
  123. package/dist/src/providers/signed-jwt.d.ts +29 -0
  124. package/dist/src/providers/signed-jwt.js +202 -0
  125. package/dist/src/providers/signed-jwt.js.map +1 -0
  126. package/dist/src/providers/slack-ids.js.map +1 -1
  127. package/dist/src/providers/target-normalizers.d.ts +26 -0
  128. package/dist/src/providers/target-normalizers.js +276 -0
  129. package/dist/src/providers/target-normalizers.js.map +1 -0
  130. package/dist/src/providers/types.d.ts +5 -0
  131. package/dist/src/providers/types.js.map +1 -1
  132. package/dist/src/providers/webhook-server.d.ts +2 -0
  133. package/dist/src/providers/webhook-server.js +72 -25
  134. package/dist/src/providers/webhook-server.js.map +1 -1
  135. package/dist/src/servers/http.d.ts +23 -3
  136. package/dist/src/servers/http.js +213 -20
  137. package/dist/src/servers/http.js.map +1 -1
  138. package/dist/src/servers/index.js +20 -21
  139. package/dist/src/servers/index.js.map +1 -1
  140. package/dist/src/servers/matrix.js +465 -51
  141. package/dist/src/servers/matrix.js.map +1 -1
  142. package/dist/src/servers/mattermost.d.ts +5 -0
  143. package/dist/src/servers/mattermost.js +306 -58
  144. package/dist/src/servers/mattermost.js.map +1 -1
  145. package/dist/src/servers/pending-events.d.ts +2 -0
  146. package/dist/src/servers/pending-events.js +11 -0
  147. package/dist/src/servers/pending-events.js.map +1 -0
  148. package/dist/src/servers/recorder.d.ts +5 -0
  149. package/dist/src/servers/recorder.js +262 -3
  150. package/dist/src/servers/recorder.js.map +1 -1
  151. package/dist/src/servers/signal.d.ts +2 -0
  152. package/dist/src/servers/signal.js +444 -56
  153. package/dist/src/servers/signal.js.map +1 -1
  154. package/dist/src/servers/slack.d.ts +5 -0
  155. package/dist/src/servers/slack.js +515 -49
  156. package/dist/src/servers/slack.js.map +1 -1
  157. package/dist/src/servers/telegram.d.ts +111 -0
  158. package/dist/src/servers/telegram.js +830 -158
  159. package/dist/src/servers/telegram.js.map +1 -1
  160. package/dist/src/servers/webhook-target.d.ts +40 -0
  161. package/dist/src/servers/webhook-target.js +349 -0
  162. package/dist/src/servers/webhook-target.js.map +1 -0
  163. package/dist/src/servers/websocket.d.ts +2 -0
  164. package/dist/src/servers/websocket.js +29 -0
  165. package/dist/src/servers/websocket.js.map +1 -0
  166. package/dist/src/servers/whatsapp-baileys-websocket.d.ts +65 -1
  167. package/dist/src/servers/whatsapp-baileys-websocket.js +723 -99
  168. package/dist/src/servers/whatsapp-baileys-websocket.js.map +1 -1
  169. package/dist/src/servers/whatsapp-jid.d.ts +5 -0
  170. package/dist/src/servers/whatsapp-jid.js +32 -0
  171. package/dist/src/servers/whatsapp-jid.js.map +1 -0
  172. package/dist/src/servers/whatsapp-wire/binary-node.d.ts +5 -0
  173. package/dist/src/servers/whatsapp-wire/binary-node.js +87 -20
  174. package/dist/src/servers/whatsapp-wire/binary-node.js.map +1 -1
  175. package/dist/src/servers/whatsapp-wire/crypto.d.ts +6 -1
  176. package/dist/src/servers/whatsapp-wire/crypto.js +99 -45
  177. package/dist/src/servers/whatsapp-wire/crypto.js.map +1 -1
  178. package/dist/src/servers/whatsapp-wire/handshake.js +39 -4
  179. package/dist/src/servers/whatsapp-wire/handshake.js.map +1 -1
  180. package/dist/src/servers/whatsapp-wire/signal.js.map +1 -1
  181. package/dist/src/servers/whatsapp.d.ts +12 -7
  182. package/dist/src/servers/whatsapp.js +269 -107
  183. package/dist/src/servers/whatsapp.js.map +1 -1
  184. package/dist/src/servers/zalo.d.ts +14 -0
  185. package/dist/src/servers/zalo.js +521 -88
  186. package/dist/src/servers/zalo.js.map +1 -1
  187. package/docs/channel-setup.md +197 -19
  188. package/fixtures/examples/crabline.example.yaml +10 -0
  189. package/package.json +20 -15
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp-baileys-websocket.js","sourceRoot":"","sources":["../../../src/servers/whatsapp-baileys-websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whatsapp-baileys-websocket.js","sourceRoot":"","sources":["../../../src/servers/whatsapp-baileys-websocket.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport type { IncomingMessage, Server } from \"node:http\";\nimport type { Duplex } from \"node:stream\";\nimport { ProtocolAddress, SessionCipher, SessionRecord, type SignalStorage } from \"libsignal\";\nimport {\n aesDecryptGCM,\n aesEncryptGCM,\n Curve,\n encodeBigEndian,\n hkdf,\n NOISE_MODE,\n NOISE_WA_HEADER,\n sha256,\n signedKeyPair,\n type KeyPair,\n type SignedKeyPair,\n} from \"./whatsapp-wire/crypto.js\";\nimport {\n decodeBinaryNode,\n encodeBinaryNode,\n S_WHATSAPP_NET,\n type BinaryNode,\n} from \"./whatsapp-wire/binary-node.js\";\nimport { decodeHandshakeMessage, encodeHandshakeMessage } from \"./whatsapp-wire/handshake.js\";\nimport { KEY_BUNDLE_TYPE, xmppPreKey, xmppSignedPreKey } from \"./whatsapp-wire/signal.js\";\nimport { WebSocket, WebSocketServer, type ServerOptions } from \"ws\";\nimport type { ServerRequestEvent } from \"./http.js\";\nimport { closeWebSocketServer } from \"./websocket.js\";\nimport { canonicalizeWhatsAppUserCorrelationJid } from \"./whatsapp-jid.js\";\n\n// Keep the local server independent from Baileys at runtime. Tests use Baileys\n// as a black-box client to verify this narrow WhatsApp Web wire subset.\nconst EMPTY_BUFFER = Buffer.alloc(0);\nconst IV_LENGTH = 12;\nconst MAX_PENDING_INBOUND_MESSAGES = 1_000;\nexport const MAX_WHATSAPP_NOISE_FRAME_BYTES = 2 * 1024 * 1024;\nexport const MAX_WHATSAPP_WEBSOCKET_BUFFERED_BYTES = 4 * 1024 * 1024;\nexport const MAX_WHATSAPP_WEBSOCKET_MESSAGE_BYTES = 4 * 1024 * 1024;\nexport const MAX_WHATSAPP_NOISE_BUFFER_CHUNKS = 1_024;\nexport const MAX_WHATSAPP_NOISE_FRAMES_PER_MESSAGE = 1_024;\nexport const WHATSAPP_WEBSOCKET_SEND_TIMEOUT_MS = 5_000;\nconst MAX_PENDING_WEBSOCKET_BYTES = 8 * 1024 * 1024;\nconst MAX_PENDING_WEBSOCKET_MESSAGES = 32;\nexport const MAX_WHATSAPP_WEBSOCKET_FRAGMENTS = 1_024;\nexport const MAX_WHATSAPP_SIGNAL_BUNDLES = 1_024;\nexport const MAX_WHATSAPP_WEBSOCKET_CLOSE_REASON_BYTES = 123;\ntype NodeBuffer = Buffer<ArrayBufferLike>;\ntype WhatsAppWebSocketRawData = NodeBuffer | ArrayBuffer | NodeBuffer[];\ntype WhatsAppWebSocketSendTarget = {\n bufferedAmount: number;\n readyState: number;\n send(data: Uint8Array, callback: (error?: Error) => void): void;\n terminate(): void;\n};\nconst WHATSAPP_NOISE_CERT_CHAIN = Buffer.from(\n \"CncKMwjjAhADGiCRKg7Kg1iu4CSulwLBaxX51Tefw6VXGgZqcr5OEbXIRiDQ04bOBijQjZ/TBhJA34Bj82jAHhLpCWBNVBlGnFDieamd8+138S57uMt9ke9mrn5r4+VepwBPKEgHjob6bR70rlCmWDkxZv+CfVjIAxJ2CjIIAxAAGiAcUamsMDmUxsjQuS6hh4pTNHZZnMWZ++o1mX2aqQzOYiCAka6+Bij/3rfcBhJAJw8pRkhTn+1IcOJQVN1OlZg6uikYnCumyO7acFVVX3U3QPXsGSq2TCbCbWrebSC593Su43EgprIDlfU8ZgWFBw==\",\n \"base64\",\n);\n\nexport type WhatsAppBaileysWebSocketServer = {\n close(): Promise<void>;\n prepareInboundMessage(\n message: WhatsAppBaileysInboundMessage,\n ): PreparedWhatsAppBaileysInboundDelivery | undefined;\n};\n\nexport type WhatsAppBaileysWebSocketServerParams = {\n accessToken: string;\n appendEvent(event: ServerRequestEvent): Promise<void>;\n httpServer: Server;\n maxPendingInboundMessages?: number | undefined;\n path: string;\n selfJid: string;\n};\n\nexport type PreparedWhatsAppBaileysInboundDelivery = {\n cancel(): void;\n commit(): Promise<\"delivered\" | \"queued\">;\n};\n\nexport type WhatsAppBaileysInboundMessage = {\n key: {\n fromMe: boolean;\n id: string;\n participant?: string | undefined;\n remoteJid: string;\n };\n message: {\n conversation: string;\n };\n messageTimestamp: number;\n pushName?: string | undefined;\n};\n\nexport function resolveMaxPendingWhatsAppInboundMessages(value: number | undefined): number {\n const resolved = value ?? MAX_PENDING_INBOUND_MESSAGES;\n if (!Number.isSafeInteger(resolved) || resolved < 1) {\n throw new Error(\"WhatsApp maxPendingInboundMessages must be a positive safe integer.\");\n }\n return resolved;\n}\n\nexport type MockSignalBundle = {\n identityKey: KeyPair;\n preKey: KeyPair;\n preKeyId: number;\n registrationId: number;\n signedPreKey: SignedKeyPair;\n};\n\nexport class WhatsAppSignalBundleStore {\n readonly #bundles = new Map<string, MockSignalBundle>();\n readonly #lidByPhoneNumber = new Map<string, string>();\n readonly #sessions = new Map<string, Map<string, SessionRecord>>();\n\n constructor(private readonly maxBundles = MAX_WHATSAPP_SIGNAL_BUNDLES) {\n if (!Number.isSafeInteger(maxBundles) || maxBundles < 1) {\n throw new Error(\"WhatsApp maxSignalBundles must be a positive safe integer.\");\n }\n }\n\n get size(): number {\n return this.#bundles.size;\n }\n\n associateLid(phoneNumberJid: string, lidJid: string): void {\n const phoneNumber = canonicalizeWhatsAppUserCorrelationJid(phoneNumberJid);\n const lid = canonicalizeWhatsAppUserCorrelationJid(lidJid);\n if (!phoneNumber?.endsWith(\"@s.whatsapp.net\") || !lid?.endsWith(\"@lid\")) {\n throw new Error(\"Invalid WhatsApp PN/LID signal mapping.\");\n }\n this.#lidByPhoneNumber.set(signalBundleIdentityKey(phoneNumber), signalBundleIdentityKey(lid));\n }\n\n resolveMany(jids: string[]): MockSignalBundle[] {\n const uniqueNewIdentities = new Set<string>();\n const identityKeys: string[] = [];\n for (const jid of jids) {\n const canonical = canonicalizeWhatsAppUserCorrelationJid(jid);\n if (!canonical) {\n throw new Error(`Invalid WhatsApp signal bundle JID: ${jid}.`);\n }\n const identityKey = signalBundleIdentityKey(canonical);\n identityKeys.push(identityKey);\n if (!this.#bundles.has(identityKey)) {\n uniqueNewIdentities.add(identityKey);\n }\n }\n if (this.#bundles.size + uniqueNewIdentities.size > this.maxBundles) {\n throw new Error(`WhatsApp signal bundle limit exceeded (${this.maxBundles}).`);\n }\n return identityKeys.map((identityKey) => this.#resolve(identityKey));\n }\n\n async decryptDirectMessage(params: {\n ciphertext: Uint8Array;\n recipientJid: string;\n remoteJid: string;\n type: \"msg\" | \"pkmsg\";\n }): Promise<Buffer | undefined> {\n const recipientJid = canonicalizeWhatsAppUserCorrelationJid(params.recipientJid);\n const recipientIdentityKey = recipientJid ? signalBundleIdentityKey(recipientJid) : undefined;\n const mappedLidIdentityKey = recipientIdentityKey\n ? this.#lidByPhoneNumber.get(recipientIdentityKey)\n : undefined;\n const identityKey =\n mappedLidIdentityKey && this.#bundles.has(mappedLidIdentityKey)\n ? mappedLidIdentityKey\n : recipientIdentityKey;\n const bundle = identityKey ? this.#bundles.get(identityKey) : undefined;\n if (!identityKey || !bundle) {\n return undefined;\n }\n const remoteAddress = signalProtocolAddress(params.remoteJid);\n if (!remoteAddress) {\n return undefined;\n }\n const sessions = this.#sessions.get(identityKey) ?? new Map<string, SessionRecord>();\n this.#sessions.set(identityKey, sessions);\n const stagedSessions = new Map<string, SessionRecord>();\n const storage: SignalStorage = {\n async loadSession(id) {\n const session = stagedSessions.get(id) ?? sessions.get(id);\n return session ? cloneSignalSession(session) : undefined;\n },\n async storeSession(id, session) {\n stagedSessions.set(id, cloneSignalSession(session));\n },\n isTrustedIdentity: () => true,\n async loadPreKey(id) {\n if (String(id) !== String(bundle.preKeyId)) {\n return undefined;\n }\n return signalKeyPair(bundle.preKey);\n },\n removePreKey: () => undefined,\n loadSignedPreKey: () => signalKeyPair(bundle.signedPreKey.keyPair),\n getOurRegistrationId: () => bundle.registrationId,\n getOurIdentity: () => signalKeyPair(bundle.identityKey),\n };\n const cipher = new SessionCipher(\n storage,\n new ProtocolAddress(remoteAddress.name, remoteAddress.deviceId),\n );\n const plaintext =\n params.type === \"pkmsg\"\n ? await cipher.decryptPreKeyWhisperMessage(params.ciphertext)\n : await cipher.decryptWhisperMessage(params.ciphertext);\n for (const [id, session] of stagedSessions) {\n sessions.set(id, session);\n }\n return plaintext;\n }\n\n #resolve(bundleKey: string): MockSignalBundle {\n const existing = this.#bundles.get(bundleKey);\n if (existing) {\n return existing;\n }\n const identityKey = Curve.generateKeyPair();\n const bundle = {\n identityKey,\n preKey: Curve.generateKeyPair(),\n preKeyId: 1,\n registrationId: 1,\n signedPreKey: signedKeyPair(identityKey, 1),\n };\n this.#bundles.set(bundleKey, bundle);\n return bundle;\n }\n}\n\nexport function createSerializedMessageHandler<T>(\n processMessage: (message: T) => Promise<void>,\n onError: (error: unknown) => void,\n options: {\n maxPendingBytes?: number | undefined;\n maxPendingMessages?: number | undefined;\n sizeOf?: ((message: T) => number) | undefined;\n } = {},\n): (message: T) => Promise<void> {\n const maxPendingBytes = options.maxPendingBytes ?? MAX_PENDING_WEBSOCKET_BYTES;\n const maxPendingMessages = options.maxPendingMessages ?? MAX_PENDING_WEBSOCKET_MESSAGES;\n const sizeOf = options.sizeOf ?? (() => 1);\n let failed = false;\n let pendingBytes = 0;\n let pendingMessages = 0;\n let pending = Promise.resolve();\n const fail = (error: unknown) => {\n if (!failed) {\n failed = true;\n onError(error);\n }\n };\n return (message) => {\n if (failed) {\n return pending;\n }\n const messageBytes = sizeOf(message);\n if (!Number.isSafeInteger(messageBytes) || messageBytes < 0) {\n fail(new Error(\"WhatsApp WebSocket message size must be a non-negative safe integer.\"));\n return pending;\n }\n if (pendingMessages >= maxPendingMessages || pendingBytes + messageBytes > maxPendingBytes) {\n fail(new Error(\"WhatsApp WebSocket inbound backlog limit exceeded.\"));\n return pending;\n }\n pendingMessages += 1;\n pendingBytes += messageBytes;\n const next = pending\n .then(async () => {\n if (!failed) {\n await processMessage(message);\n }\n })\n .finally(() => {\n pendingMessages -= 1;\n pendingBytes -= messageBytes;\n });\n pending = next.catch((error: unknown) => {\n fail(error);\n });\n return pending;\n };\n}\n\nexport class WhatsAppNoiseFrameDecoder {\n #bufferedBytes = 0;\n readonly #chunks: NodeBuffer[] = [];\n #expectIntro = true;\n #offset = 0;\n\n get bufferedBytes(): number {\n return this.#bufferedBytes;\n }\n\n decodeFrames(data: WhatsAppWebSocketRawData): NodeBuffer[] {\n let chunk = rawDataToBuffer(data);\n if (this.#expectIntro) {\n chunk = removeNoiseIntroHeader(chunk);\n this.#expectIntro = false;\n }\n if (chunk.length > 0) {\n if (this.#chunks.length >= MAX_WHATSAPP_NOISE_BUFFER_CHUNKS) {\n throw new Error(\n `WhatsApp Noise buffer exceeds ${MAX_WHATSAPP_NOISE_BUFFER_CHUNKS} chunks.`,\n );\n }\n this.#chunks.push(chunk);\n this.#bufferedBytes += chunk.length;\n }\n\n const frames: NodeBuffer[] = [];\n while (this.#bufferedBytes >= 3) {\n const size = (this.#peekByte(0) << 16) | (this.#peekByte(1) << 8) | this.#peekByte(2);\n if (size > MAX_WHATSAPP_NOISE_FRAME_BYTES) {\n throw new Error(`WhatsApp Noise frame exceeds ${MAX_WHATSAPP_NOISE_FRAME_BYTES} bytes.`);\n }\n if (this.#bufferedBytes < size + 3) {\n break;\n }\n if (frames.length >= MAX_WHATSAPP_NOISE_FRAMES_PER_MESSAGE) {\n throw new Error(\n `WhatsApp Noise message exceeds ${MAX_WHATSAPP_NOISE_FRAMES_PER_MESSAGE} frames.`,\n );\n }\n this.#consume(3);\n frames.push(this.#read(size));\n }\n return frames;\n }\n\n #consume(length: number): void {\n let remaining = length;\n while (remaining > 0) {\n const chunk = this.#chunks[0];\n if (!chunk) {\n throw new Error(\"Unexpected end of WhatsApp Noise frame buffer.\");\n }\n const available = chunk.length - this.#offset;\n const consumed = Math.min(available, remaining);\n this.#offset += consumed;\n this.#bufferedBytes -= consumed;\n remaining -= consumed;\n if (this.#offset === chunk.length) {\n this.#chunks.shift();\n this.#offset = 0;\n }\n }\n }\n\n #peekByte(index: number): number {\n let remaining = index + this.#offset;\n for (const chunk of this.#chunks) {\n if (remaining < chunk.length) {\n return chunk[remaining]!;\n }\n remaining -= chunk.length;\n }\n throw new Error(\"Unexpected end of WhatsApp Noise frame buffer.\");\n }\n\n #read(length: number): NodeBuffer {\n const result = Buffer.allocUnsafe(length);\n let resultOffset = 0;\n while (resultOffset < length) {\n const chunk = this.#chunks[0];\n if (!chunk) {\n throw new Error(\"Unexpected end of WhatsApp Noise frame buffer.\");\n }\n const copied = chunk.copy(\n result,\n resultOffset,\n this.#offset,\n Math.min(chunk.length, this.#offset + length - resultOffset),\n );\n this.#offset += copied;\n this.#bufferedBytes -= copied;\n resultOffset += copied;\n if (this.#offset === chunk.length) {\n this.#chunks.shift();\n this.#offset = 0;\n }\n }\n return result;\n }\n}\n\nclass TransportState {\n #readCounter = 0;\n #writeCounter = 0;\n\n constructor(\n private readonly encKey: NodeBuffer,\n private readonly decKey: NodeBuffer,\n ) {}\n\n decrypt(ciphertext: Uint8Array): NodeBuffer {\n const iv = createIv(this.#readCounter++);\n return aesDecryptGCM(Buffer.from(ciphertext), this.decKey, iv, EMPTY_BUFFER);\n }\n\n encrypt(plaintext: Uint8Array): NodeBuffer {\n const iv = createIv(this.#writeCounter++);\n return aesEncryptGCM(Buffer.from(plaintext), this.encKey, iv, EMPTY_BUFFER);\n }\n}\n\nclass BaileysNoiseServer {\n #counter = 0;\n #decKey: NodeBuffer;\n #encKey: NodeBuffer;\n readonly #frames = new WhatsAppNoiseFrameDecoder();\n #hash: NodeBuffer;\n #salt: NodeBuffer;\n #serverEphemeralKey: KeyPair | undefined;\n #serverStaticKey: KeyPair | undefined;\n #transport: TransportState | undefined;\n\n constructor() {\n const initial = Buffer.from(NOISE_MODE);\n this.#hash = Buffer.from(initial.byteLength === 32 ? initial : sha256(initial));\n this.#salt = this.#hash;\n this.#encKey = this.#hash;\n this.#decKey = this.#hash;\n this.#authenticate(NOISE_WA_HEADER);\n }\n\n decodeFrames(data: WhatsAppWebSocketRawData): NodeBuffer[] {\n return this.#frames.decodeFrames(data);\n }\n\n async decodeTransportNode(frame: Uint8Array): Promise<BinaryNode> {\n if (!this.#transport) {\n throw new Error(\"Cannot decode a Baileys node before the Noise transport is ready.\");\n }\n return await decodeBinaryNode(this.#transport.decrypt(frame));\n }\n\n finishClientHandshake(frame: Uint8Array): void {\n const message = decodeHandshakeMessage(frame);\n const finish = message.clientFinish;\n if (!finish?.staticKey || !finish.payload || !this.#serverEphemeralKey) {\n throw new Error(\"Invalid Baileys client finish handshake.\");\n }\n const clientNoisePublic = this.#decrypt(finish.staticKey);\n this.#mixIntoKey(Curve.sharedKey(this.#serverEphemeralKey.private, clientNoisePublic));\n this.#decrypt(finish.payload);\n const [writeKey, readKey] = this.#localHKDF(EMPTY_BUFFER);\n this.#transport = new TransportState(readKey, writeKey);\n }\n\n createServerHello(frame: Uint8Array): NodeBuffer {\n const message = decodeHandshakeMessage(frame);\n const clientHello = message.clientHello;\n if (!clientHello?.ephemeral) {\n throw new Error(\"Invalid Baileys client hello handshake.\");\n }\n\n this.#authenticate(clientHello.ephemeral);\n this.#serverEphemeralKey = Curve.generateKeyPair();\n this.#serverStaticKey = Curve.generateKeyPair();\n this.#authenticate(this.#serverEphemeralKey.public);\n this.#mixIntoKey(Curve.sharedKey(this.#serverEphemeralKey.private, clientHello.ephemeral));\n const staticKey = this.#encrypt(this.#serverStaticKey.public);\n this.#mixIntoKey(Curve.sharedKey(this.#serverStaticKey.private, clientHello.ephemeral));\n const payload = this.#encrypt(WHATSAPP_NOISE_CERT_CHAIN);\n return encodeLengthPrefixed(\n encodeHandshakeMessage({\n serverHello: {\n ephemeral: this.#serverEphemeralKey.public,\n payload,\n staticKey,\n },\n }),\n );\n }\n\n encodeNode(node: BinaryNode): NodeBuffer {\n if (!this.#transport) {\n throw new Error(\"Cannot encode a Baileys node before the Noise transport is ready.\");\n }\n return encodeLengthPrefixed(this.#transport.encrypt(encodeBinaryNode(node)));\n }\n\n #authenticate(data: Uint8Array) {\n this.#hash = sha256(Buffer.concat([this.#hash, Buffer.from(data)]));\n }\n\n #decrypt(ciphertext: Uint8Array): NodeBuffer {\n const result = aesDecryptGCM(\n Buffer.from(ciphertext),\n this.#decKey,\n createIv(this.#counter++),\n this.#hash,\n );\n this.#authenticate(ciphertext);\n return result;\n }\n\n #encrypt(plaintext: Uint8Array): NodeBuffer {\n const result = aesEncryptGCM(\n Buffer.from(plaintext),\n this.#encKey,\n createIv(this.#counter++),\n this.#hash,\n );\n this.#authenticate(result);\n return result;\n }\n\n #localHKDF(data: Uint8Array): [NodeBuffer, NodeBuffer] {\n const key = hkdf(Buffer.from(data), 64, { info: \"\", salt: this.#salt });\n return [Buffer.from(key.subarray(0, 32)), Buffer.from(key.subarray(32))];\n }\n\n #mixIntoKey(data: Uint8Array) {\n const [writeKey, readKey] = this.#localHKDF(data);\n this.#salt = writeKey;\n this.#encKey = readKey;\n this.#decKey = readKey;\n this.#counter = 0;\n }\n}\n\nclass WhatsAppBaileysWebSocketSession {\n #handshakeState: \"client-finish\" | \"client-hello\" | \"open\" = \"client-hello\";\n readonly #handleSerializedMessage: (data: WhatsAppWebSocketRawData) => Promise<void>;\n readonly #noise = new BaileysNoiseServer();\n\n constructor(\n private readonly socket: WebSocket,\n private readonly params: {\n appendEvent(event: ServerRequestEvent): Promise<void>;\n path: string;\n onOpen(session: WhatsAppBaileysWebSocketSession): void;\n selfJid: string;\n signalBundles: WhatsAppSignalBundleStore;\n },\n ) {\n this.#handleSerializedMessage = createSerializedMessageHandler(\n (data) => this.#handleMessage(data),\n (error) => {\n const close = resolveWhatsAppWebSocketClose(error);\n this.socket.close(close.code, close.reason);\n },\n {\n sizeOf: rawDataByteLength,\n },\n );\n }\n\n get isOpen(): boolean {\n return this.#handshakeState === \"open\" && this.socket.readyState === WebSocket.OPEN;\n }\n\n handleMessage(data: WhatsAppWebSocketRawData): void {\n void this.#handleSerializedMessage(data);\n }\n\n async deliverInboundMessage(message: WhatsAppBaileysInboundMessage): Promise<boolean> {\n if (!this.isOpen) {\n return false;\n }\n try {\n await this.#sendNode(createInboundMessageNode(message));\n return true;\n } catch {\n this.socket.terminate();\n return false;\n }\n }\n\n async #handleMessage(data: WhatsAppWebSocketRawData): Promise<void> {\n for (const frame of this.#noise.decodeFrames(data)) {\n if (this.#handshakeState === \"client-hello\") {\n await sendWhatsAppWebSocketPayload(this.socket, this.#noise.createServerHello(frame));\n this.#handshakeState = \"client-finish\";\n continue;\n }\n if (this.#handshakeState === \"client-finish\") {\n this.#noise.finishClientHandshake(frame);\n this.#handshakeState = \"open\";\n await this.#sendNode({\n attrs: {\n lid: lidForJid(this.params.selfJid),\n t: unixSeconds(),\n },\n tag: \"success\",\n });\n await this.#sendNode({\n attrs: {},\n content: [{ attrs: { count: \"0\" }, tag: \"offline\" }],\n tag: \"ib\",\n });\n this.params.onOpen(this);\n continue;\n }\n await this.#handleNode(await this.#noise.decodeTransportNode(frame));\n }\n }\n\n async #handleNode(node: BinaryNode): Promise<void> {\n await this.#recordNode(node);\n if (node.tag === \"iq\") {\n await this.#sendNode(this.#createIqResult(node));\n return;\n }\n if (node.tag === \"message\") {\n const peer = requireAttr(node, \"to\");\n const normalizedMessage = await normalizeAcceptedBaileysMessage({\n node,\n remoteJid: this.params.selfJid,\n signalBundles: this.params.signalBundles,\n });\n await this.#sendNode({\n attrs: {\n class: \"message\",\n from: peer,\n id: requireAttr(node, \"id\"),\n to: this.params.selfJid,\n ...(node.attrs.type ? { type: node.attrs.type } : {}),\n },\n tag: \"ack\",\n });\n if (normalizedMessage) {\n await this.params.appendEvent({\n accepted: true,\n at: new Date().toISOString(),\n body: normalizedMessage,\n method: \"WEBSOCKET\",\n path: this.params.path,\n query: {},\n type: \"api\",\n } as ServerRequestEvent & { accepted: true });\n }\n }\n }\n\n #createIqResult(node: BinaryNode): BinaryNode {\n const child = firstChild(node);\n const id = requireAttr(node, \"id\");\n const attrs = {\n from: node.attrs.to ?? S_WHATSAPP_NET,\n id,\n t: unixSeconds(),\n type: \"result\",\n };\n\n if (node.attrs.xmlns === \"encrypt\" && child?.tag === \"count\") {\n return { attrs, content: [{ attrs: { value: \"50\" }, tag: \"count\" }], tag: \"iq\" };\n }\n if (node.attrs.xmlns === \"encrypt\" && child?.tag === \"digest\") {\n return { attrs, content: [{ attrs: {}, tag: \"digest\" }], tag: \"iq\" };\n }\n if (node.attrs.xmlns === \"encrypt\" && child?.tag === \"key\") {\n try {\n return { attrs, content: [this.#createKeyList(child)], tag: \"iq\" };\n } catch (error) {\n return {\n attrs: { ...attrs, type: \"error\" },\n content: [\n {\n attrs: {\n code: \"400\",\n text: error instanceof Error ? error.message : String(error),\n type: \"modify\",\n },\n tag: \"error\",\n },\n ],\n tag: \"iq\",\n };\n }\n }\n if (node.attrs.xmlns === \"usync\" && child?.tag === \"usync\") {\n return { attrs, content: [this.#createUSyncResult(child)], tag: \"iq\" };\n }\n if (node.attrs.xmlns === \"abt\") {\n return {\n attrs,\n content: [\n {\n attrs: { hash: \"mock\" },\n content: [\n { attrs: { name: \"10518\", value: \"false\" }, tag: \"prop\" },\n { attrs: { name: \"14303\", value: \"false\" }, tag: \"prop\" },\n ],\n tag: \"props\",\n },\n ],\n tag: \"iq\",\n };\n }\n if (node.attrs.xmlns === \"blocklist\") {\n return { attrs, content: [{ attrs: {}, content: [], tag: \"list\" }], tag: \"iq\" };\n }\n if (node.attrs.xmlns === \"privacy\") {\n return {\n attrs,\n content: [\n {\n attrs: {},\n content: [\n { attrs: { name: \"readreceipts\", value: \"all\" }, tag: \"category\" },\n { attrs: { name: \"profile\", value: \"all\" }, tag: \"category\" },\n ],\n tag: \"privacy\",\n },\n ],\n tag: \"iq\",\n };\n }\n if (node.attrs.xmlns === \"w:m\" && child?.tag === \"media_conn\") {\n return {\n attrs,\n content: [\n {\n attrs: { auth: \"mock\", ttl: \"3600\" },\n content: [\n {\n attrs: {\n hostname: \"127.0.0.1\",\n maxContentLengthBytes: \"10485760\",\n },\n tag: \"host\",\n },\n ],\n tag: \"media_conn\",\n },\n ],\n tag: \"iq\",\n };\n }\n if (node.attrs.xmlns === \"w:g2\") {\n if (node.attrs.type !== \"get\" || child?.tag !== \"query\") {\n return {\n attrs: { ...attrs, type: \"error\" },\n content: [\n {\n attrs: { code: \"501\", text: \"unsupported group operation\", type: \"cancel\" },\n tag: \"error\",\n },\n ],\n tag: \"iq\",\n };\n }\n return {\n attrs,\n content: [\n {\n attrs: {\n id: node.attrs.to ?? \"120363000000000000@g.us\",\n owner: this.params.selfJid,\n subject: \"Test Group\",\n s_t: unixSeconds(),\n },\n content: [{ attrs: { jid: this.params.selfJid }, tag: \"participant\" }],\n tag: \"group\",\n },\n ],\n tag: \"iq\",\n };\n }\n return { attrs, tag: \"iq\" };\n }\n\n #createKeyList(keyNode: BinaryNode): BinaryNode {\n const users = children(keyNode).filter((child) => child.tag === \"user\");\n const jids = users.map((userNode) => requireAttr(userNode, \"jid\"));\n const bundles = this.params.signalBundles.resolveMany(jids);\n return {\n attrs: {},\n content: jids.map((jid, index) => this.#createKeyUser(jid, bundles[index]!)),\n tag: \"list\",\n };\n }\n\n #createKeyUser(jid: string, bundle: MockSignalBundle): BinaryNode {\n return {\n attrs: { jid },\n content: [\n { attrs: {}, content: encodeBigEndian(bundle.registrationId), tag: \"registration\" },\n { attrs: {}, content: KEY_BUNDLE_TYPE, tag: \"type\" },\n { attrs: {}, content: bundle.identityKey.public, tag: \"identity\" },\n xmppSignedPreKey(bundle.signedPreKey),\n xmppPreKey(bundle.preKey, bundle.preKeyId),\n ],\n tag: \"user\",\n };\n }\n\n #createUSyncResult(usyncNode: BinaryNode): BinaryNode {\n const requestList = children(usyncNode).find((child) => child.tag === \"list\");\n const requestedUsers = requestList\n ? children(requestList).filter((child) => child.tag === \"user\")\n : [];\n return {\n attrs: {\n index: usyncNode.attrs.index ?? \"0\",\n last: \"true\",\n sid: usyncNode.attrs.sid ?? \"mock\",\n },\n content: [\n {\n attrs: {},\n content: requestedUsers.map((user) => this.#createUSyncUser(requireAttr(user, \"jid\"))),\n tag: \"list\",\n },\n ],\n tag: \"usync\",\n };\n }\n\n #createUSyncUser(jid: string): BinaryNode {\n const lid = lidForJid(jid);\n if (canonicalizeWhatsAppUserCorrelationJid(jid)?.endsWith(\"@s.whatsapp.net\")) {\n this.params.signalBundles.associateLid(jid, lid);\n }\n return {\n attrs: { jid },\n content: [\n {\n attrs: {},\n content: [\n {\n attrs: {},\n content: [{ attrs: { id: \"0\" }, tag: \"device\" }],\n tag: \"device-list\",\n },\n ],\n tag: \"devices\",\n },\n { attrs: { val: lid }, tag: \"lid\" },\n ],\n tag: \"user\",\n };\n }\n\n async #recordNode(node: BinaryNode): Promise<void> {\n await this.params.appendEvent({\n at: new Date().toISOString(),\n body: sanitizeNodeForJson(node),\n method: \"WEBSOCKET\",\n path: this.params.path,\n query: {},\n type: \"api\",\n });\n }\n\n async #sendNode(node: BinaryNode): Promise<void> {\n await sendWhatsAppWebSocketPayload(this.socket, this.#noise.encodeNode(node));\n }\n}\n\nexport async function sendWhatsAppWebSocketPayload(\n socket: WhatsAppWebSocketSendTarget,\n payload: Uint8Array,\n): Promise<void> {\n if (socket.readyState !== WebSocket.OPEN) {\n throw new Error(\"WhatsApp WebSocket is not open.\");\n }\n if (socket.bufferedAmount + payload.byteLength > MAX_WHATSAPP_WEBSOCKET_BUFFERED_BYTES) {\n socket.terminate();\n throw new Error(\"WhatsApp WebSocket outbound buffer limit exceeded.\");\n }\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (error?: Error) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n };\n const timeout = setTimeout(() => {\n socket.terminate();\n finish(new Error(\"WhatsApp WebSocket send timed out.\"));\n }, WHATSAPP_WEBSOCKET_SEND_TIMEOUT_MS);\n try {\n socket.send(payload, finish);\n } catch (error) {\n finish(error instanceof Error ? error : new Error(String(error)));\n }\n });\n}\n\nexport function resolveWhatsAppWebSocketClose(error: unknown): {\n code: 1002 | 1009 | 1011;\n reason: string;\n} {\n const message = error instanceof Error ? error.message : String(error);\n const code = /(?:backlog|exceeds|limit|payload is too large|too many)/iu.test(message)\n ? 1009\n : /(?:baileys|binary node|handshake|noise|protocol|unexpected end|unsupported|invalid)/iu.test(\n message,\n )\n ? 1002\n : 1011;\n return { code, reason: truncateWebSocketCloseReason(message) };\n}\n\nfunction truncateWebSocketCloseReason(reason: string): string {\n let result = \"\";\n for (const character of reason) {\n if (Buffer.byteLength(result + character) > MAX_WHATSAPP_WEBSOCKET_CLOSE_REASON_BYTES) {\n break;\n }\n result += character;\n }\n return result;\n}\n\nexport function attachWhatsAppBaileysWebSocketServer(\n params: WhatsAppBaileysWebSocketServerParams,\n): WhatsAppBaileysWebSocketServer {\n const signalBundles = new WhatsAppSignalBundleStore();\n const sessions = new Set<WhatsAppBaileysWebSocketSession>();\n const pendingMessages: WhatsAppBaileysInboundMessage[] = [];\n const maxPendingInboundMessages = resolveMaxPendingWhatsAppInboundMessages(\n params.maxPendingInboundMessages,\n );\n let pendingReservations = 0;\n let closing = false;\n let flushPromise = Promise.resolve();\n const webSocketServerOptions: ServerOptions & {\n maxBufferedChunks: number;\n maxFragments: number;\n } = {\n maxBufferedChunks: MAX_WHATSAPP_WEBSOCKET_FRAGMENTS,\n maxFragments: MAX_WHATSAPP_WEBSOCKET_FRAGMENTS,\n maxPayload: MAX_WHATSAPP_WEBSOCKET_MESSAGE_BYTES,\n noServer: true,\n };\n const wss = new WebSocketServer(webSocketServerOptions);\n const flushPendingMessages = (): Promise<void> => {\n const next = flushPromise.then(async () => {\n while (pendingMessages.length > 0) {\n if (closing) {\n return;\n }\n const message = pendingMessages[0];\n if (!message) {\n return;\n }\n const results = await Promise.all(\n [...sessions].map((session) => session.deliverInboundMessage(message)),\n );\n if (!results.some(Boolean)) {\n return;\n }\n pendingMessages.shift();\n }\n });\n flushPromise = next.catch(() => undefined);\n return next;\n };\n const rejectUpgrade = (socket: Duplex, response: string) => {\n socket.end(response, () => socket.destroy());\n };\n const handleUpgrade = (request: IncomingMessage, socket: Duplex, head: Buffer) => {\n const url = parseWhatsAppWebSocketUpgradeUrl(request.url);\n if (!url) {\n rejectUpgrade(socket, \"HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\n\\r\\n\");\n return;\n }\n if (url.pathname !== params.path) {\n socket.destroy();\n return;\n }\n if (url.searchParams.get(\"access_token\") !== params.accessToken) {\n rejectUpgrade(socket, \"HTTP/1.1 401 Unauthorized\\r\\nConnection: close\\r\\n\\r\\n\");\n return;\n }\n wss.handleUpgrade(request, socket, head, (ws) => {\n wss.emit(\"connection\", ws, request);\n });\n };\n params.httpServer.on(\"upgrade\", handleUpgrade);\n wss.on(\"connection\", (socket: WebSocket) => {\n const session = new WhatsAppBaileysWebSocketSession(socket, {\n appendEvent: params.appendEvent,\n onOpen: () => {\n void flushPendingMessages();\n },\n path: params.path,\n selfJid: params.selfJid,\n signalBundles,\n });\n sessions.add(session);\n socket.once(\"close\", () => sessions.delete(session));\n socket.on(\"error\", () => {\n sessions.delete(session);\n socket.terminate();\n });\n socket.on(\"message\", (data) => session.handleMessage(data));\n });\n return {\n async close() {\n closing = true;\n params.httpServer.off(\"upgrade\", handleUpgrade);\n pendingMessages.length = 0;\n await closeWebSocketServer(wss);\n await flushPromise;\n },\n prepareInboundMessage(message) {\n if (pendingMessages.length + pendingReservations >= maxPendingInboundMessages) {\n return undefined;\n }\n let reserved = true;\n let settled = false;\n pendingReservations += 1;\n const releaseReservation = () => {\n if (reserved) {\n reserved = false;\n pendingReservations -= 1;\n }\n };\n return {\n cancel() {\n if (!settled) {\n settled = true;\n releaseReservation();\n }\n },\n async commit() {\n if (settled) {\n throw new Error(\"WhatsApp inbound delivery reservation is already settled.\");\n }\n settled = true;\n try {\n releaseReservation();\n if (pendingMessages.length >= maxPendingInboundMessages) {\n throw new Error(\"WhatsApp inbound delivery reservation exceeded queue capacity.\");\n }\n pendingMessages.push(message);\n await flushPendingMessages();\n return pendingMessages.includes(message) ? \"queued\" : \"delivered\";\n } finally {\n releaseReservation();\n }\n },\n };\n },\n };\n}\n\nexport function parseWhatsAppWebSocketUpgradeUrl(\n requestTarget: string | undefined,\n): URL | undefined {\n try {\n return new URL(requestTarget ?? \"/\", \"http://127.0.0.1\");\n } catch {\n return undefined;\n }\n}\n\nfunction rawDataByteLength(data: WhatsAppWebSocketRawData): number {\n if (Array.isArray(data)) {\n return data.reduce((total, chunk) => total + chunk.byteLength, 0);\n }\n return data.byteLength;\n}\n\nfunction rawDataToBuffer(data: WhatsAppWebSocketRawData): NodeBuffer {\n if (Buffer.isBuffer(data)) {\n return data;\n }\n if (Array.isArray(data)) {\n return Buffer.concat(data);\n }\n return Buffer.from(data);\n}\n\nfunction removeNoiseIntroHeader(chunk: NodeBuffer): NodeBuffer {\n if (chunk.subarray(0, NOISE_WA_HEADER.length).equals(NOISE_WA_HEADER)) {\n return chunk.subarray(NOISE_WA_HEADER.length);\n }\n if (chunk.length >= 11 && chunk.subarray(0, 2).toString(\"utf8\") === \"ED\" && chunk[3] === 1) {\n const routingInfoPrefix = chunk[4];\n if (routingInfoPrefix === undefined) {\n throw new Error(\"Invalid Baileys Noise routing header.\");\n }\n const routingInfoLength = (routingInfoPrefix << 16) | chunk.readUInt16BE(5);\n const headerLength = 7 + routingInfoLength + NOISE_WA_HEADER.length;\n if (\n chunk.subarray(headerLength - NOISE_WA_HEADER.length, headerLength).equals(NOISE_WA_HEADER)\n ) {\n return chunk.subarray(headerLength);\n }\n }\n throw new Error(\"Invalid Baileys Noise intro header.\");\n}\n\nfunction children(node: BinaryNode): BinaryNode[] {\n return Array.isArray(node.content) ? node.content : [];\n}\n\nasync function normalizeAcceptedBaileysMessage(params: {\n node: BinaryNode;\n remoteJid: string;\n signalBundles: WhatsAppSignalBundleStore;\n}): Promise<WhatsAppBaileysInboundMessage | undefined> {\n const peer = canonicalizeWhatsAppUserCorrelationJid(params.node.attrs.to ?? \"\");\n const messageId = params.node.attrs.id;\n if (!peer || !messageId) {\n return undefined;\n }\n const candidates = encryptedMessageCandidates(params.node);\n const remoteCorrelationJid = canonicalizeWhatsAppUserCorrelationJid(params.remoteJid);\n candidates.sort((left, right) => {\n const leftIsSelf =\n canonicalizeWhatsAppUserCorrelationJid(left.recipientJid) === remoteCorrelationJid;\n const rightIsSelf =\n canonicalizeWhatsAppUserCorrelationJid(right.recipientJid) === remoteCorrelationJid;\n return Number(leftIsSelf) - Number(rightIsSelf);\n });\n for (const candidate of candidates) {\n try {\n const decrypted = await params.signalBundles.decryptDirectMessage({\n ciphertext: candidate.ciphertext,\n recipientJid: candidate.recipientJid,\n remoteJid: params.remoteJid,\n type: candidate.type,\n });\n const text = decrypted ? readWhatsAppConversation(unpadRandomMax16(decrypted)) : undefined;\n if (text) {\n return {\n key: {\n fromMe: true,\n id: messageId,\n remoteJid: peer,\n },\n message: { conversation: text },\n messageTimestamp: Math.floor(Date.now() / 1000),\n };\n }\n } catch {\n // Other participant envelopes may not belong to this mock server identity.\n }\n }\n return undefined;\n}\n\nfunction encryptedMessageCandidates(node: BinaryNode): Array<{\n ciphertext: Uint8Array;\n recipientJid: string;\n type: \"msg\" | \"pkmsg\";\n}> {\n const result: Array<{\n ciphertext: Uint8Array;\n recipientJid: string;\n type: \"msg\" | \"pkmsg\";\n }> = [];\n const visit = (current: BinaryNode, recipientJid?: string) => {\n const nextRecipient = current.tag === \"to\" ? current.attrs.jid : recipientJid;\n if (\n current.tag === \"enc\" &&\n nextRecipient &&\n (current.attrs.type === \"msg\" || current.attrs.type === \"pkmsg\") &&\n current.content instanceof Uint8Array\n ) {\n result.push({\n ciphertext: current.content,\n recipientJid: nextRecipient,\n type: current.attrs.type,\n });\n }\n for (const child of children(current)) {\n visit(child, nextRecipient);\n }\n };\n visit(node);\n return result;\n}\n\nfunction signalKeyPair(pair: KeyPair): { privKey: Buffer; pubKey: Buffer } {\n return {\n privKey: Buffer.from(pair.private),\n pubKey:\n pair.public.length === 33\n ? Buffer.from(pair.public)\n : Buffer.concat([KEY_BUNDLE_TYPE, pair.public]),\n };\n}\n\nfunction cloneSignalSession(session: SessionRecord): SessionRecord {\n return SessionRecord.deserialize(session.serialize());\n}\n\nexport function signalBundleIdentityKey(jid: string): string {\n return jid.replace(/:\\d+(?=@)/u, \"\");\n}\n\nfunction signalProtocolAddress(jid: string): { deviceId: number; name: string } | undefined {\n const match = /^(\\d{7,15})(?::(\\d+))?@(s\\.whatsapp\\.net|lid)$/iu.exec(jid);\n if (!match) {\n return undefined;\n }\n const deviceId = Number(match[2] ?? \"0\");\n if (!Number.isSafeInteger(deviceId) || deviceId < 0) {\n return undefined;\n }\n return {\n deviceId,\n name: match[3]!.toLowerCase() === \"lid\" ? `${match[1]}_1` : match[1]!,\n };\n}\n\nfunction unpadRandomMax16(value: Uint8Array): Buffer {\n const buffer = Buffer.from(value);\n const padding = buffer.at(-1);\n if (!padding || padding > 16 || padding > buffer.length) {\n throw new Error(\"Invalid WhatsApp message padding.\");\n }\n for (let index = buffer.length - padding; index < buffer.length; index += 1) {\n if (buffer[index] !== padding) {\n throw new Error(\"Invalid WhatsApp message padding.\");\n }\n }\n return buffer.subarray(0, buffer.length - padding);\n}\n\nfunction readWhatsAppConversation(message: Uint8Array): string | undefined {\n const fields = readProtobufLengthDelimitedFields(message);\n const conversation = readUtf8(fields.get(1)?.[0]);\n if (conversation?.trim()) {\n return conversation;\n }\n const extendedText = fields.get(6)?.[0];\n const extendedConversation = extendedText\n ? readUtf8(readProtobufLengthDelimitedFields(extendedText).get(1)?.[0])\n : undefined;\n if (extendedConversation?.trim()) {\n return extendedConversation;\n }\n const deviceSentMessage = fields.get(31)?.[0];\n const nestedMessage = deviceSentMessage\n ? readProtobufLengthDelimitedFields(deviceSentMessage).get(2)?.[0]\n : undefined;\n return nestedMessage ? readWhatsAppConversation(nestedMessage) : undefined;\n}\n\nfunction readProtobufLengthDelimitedFields(value: Uint8Array): Map<number, Uint8Array[]> {\n const fields = new Map<number, Uint8Array[]>();\n let offset = 0;\n while (offset < value.length) {\n const tag = readProtobufVarint(value, offset);\n offset = tag.offset;\n const fieldNumber = tag.value >>> 3;\n const wireType = tag.value & 7;\n if (fieldNumber < 1) {\n throw new Error(\"Invalid WhatsApp protobuf field.\");\n }\n if (wireType === 2) {\n const length = readProtobufVarint(value, offset);\n offset = length.offset;\n const end = offset + length.value;\n if (end > value.length) {\n throw new Error(\"Invalid WhatsApp protobuf length.\");\n }\n const entries = fields.get(fieldNumber) ?? [];\n entries.push(value.subarray(offset, end));\n fields.set(fieldNumber, entries);\n offset = end;\n continue;\n }\n if (wireType === 0) {\n offset = readProtobufVarint(value, offset).offset;\n continue;\n }\n if (wireType === 1) {\n offset += 8;\n continue;\n }\n if (wireType === 5) {\n offset += 4;\n continue;\n }\n throw new Error(`Unsupported WhatsApp protobuf wire type: ${wireType}.`);\n }\n return fields;\n}\n\nfunction readProtobufVarint(value: Uint8Array, start: number): { offset: number; value: number } {\n let result = 0;\n let shift = 0;\n let offset = start;\n while (offset < value.length && shift <= 28) {\n const byte = value[offset++]!;\n result += (byte & 0x7f) * 2 ** shift;\n if ((byte & 0x80) === 0) {\n if (!Number.isSafeInteger(result)) {\n break;\n }\n return { offset, value: result };\n }\n shift += 7;\n }\n throw new Error(\"Invalid WhatsApp protobuf varint.\");\n}\n\nfunction readUtf8(value: Uint8Array | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n const text = Buffer.from(value).toString(\"utf8\");\n return Buffer.from(text, \"utf8\").equals(Buffer.from(value)) ? text : undefined;\n}\n\nfunction createInboundMessageNode(message: WhatsAppBaileysInboundMessage): BinaryNode {\n const from = message.key.remoteJid;\n const attrs: Record<string, string> = {\n from,\n id: message.key.id,\n notify: message.pushName ?? \"Test User\",\n t: String(message.messageTimestamp),\n };\n if (isGroupJid(from) && message.key.participant) {\n attrs.participant = message.key.participant;\n }\n return {\n attrs,\n content: [\n {\n attrs: {},\n content: encodePlaintextConversationMessage(message.message.conversation),\n tag: \"plaintext\",\n },\n ],\n tag: \"message\",\n };\n}\n\nfunction createIv(counter: number): NodeBuffer {\n const iv = Buffer.alloc(IV_LENGTH);\n iv.writeUInt32BE(counter, 8);\n return iv;\n}\n\nfunction encodeLengthPrefixed(data: Uint8Array): NodeBuffer {\n const frame = Buffer.allocUnsafe(3 + data.byteLength);\n frame[0] = (data.byteLength >>> 16) & 0xff;\n frame[1] = (data.byteLength >>> 8) & 0xff;\n frame[2] = data.byteLength & 0xff;\n frame.set(data, 3);\n return frame;\n}\n\nfunction firstChild(node: BinaryNode): BinaryNode | undefined {\n return children(node)[0];\n}\n\nfunction encodePlaintextConversationMessage(text: string): NodeBuffer {\n const textBytes = Buffer.from(text, \"utf8\");\n return Buffer.from([0x0a, ...encodeVarint(textBytes.byteLength), ...textBytes]);\n}\n\nfunction encodeVarint(value: number): number[] {\n const bytes: number[] = [];\n let remaining = value;\n while (remaining >= 0x80) {\n bytes.push((remaining & 0x7f) | 0x80);\n remaining = Math.floor(remaining / 0x80);\n }\n bytes.push(remaining);\n return bytes;\n}\n\nfunction isGroupJid(jid: string): boolean {\n return jid.endsWith(\"@g.us\");\n}\n\nfunction requireAttr(node: BinaryNode, name: string): string {\n const value = node.attrs[name];\n if (!value) {\n throw new Error(`Baileys node <${node.tag}> requires ${name}.`);\n }\n return value;\n}\n\nfunction lidForJid(jid: string): string {\n const user = jid.split(\"@\", 1)[0]?.split(\":\", 1)[0] ?? \"15550000000\";\n return `${user}@lid`;\n}\n\nfunction sanitizeNodeForJson(value: unknown): unknown {\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return { base64: Buffer.from(value).toString(\"base64\"), type: \"Buffer\" };\n }\n if (Array.isArray(value)) {\n return value.map(sanitizeNodeForJson);\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, sanitizeNodeForJson(entry)]),\n );\n }\n return value;\n}\n\nfunction unixSeconds(): string {\n return Math.floor(Date.now() / 1000).toString();\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function canonicalizeWhatsAppUserJid(value: string): string | undefined;
2
+ export declare function canonicalizeWhatsAppUserCorrelationJid(value: string): string | undefined;
3
+ export declare function canonicalizeWhatsAppGroupJid(value: string): string | undefined;
4
+ export declare function canonicalizeWhatsAppChatJid(value: string): string | undefined;
5
+ export declare function isWhatsAppGroupJid(value: string): boolean;
@@ -0,0 +1,32 @@
1
+ const WHATSAPP_USER_JID_RE = /^(\d{7,15})(?::(\d+))?@(c\.us|lid|s\.whatsapp\.net)$/iu;
2
+ const WHATSAPP_GROUP_JID_RE = /^(\d{5,20}(?:-\d{5,20})?)@g\.us$/iu;
3
+ export function canonicalizeWhatsAppUserJid(value) {
4
+ const match = WHATSAPP_USER_JID_RE.exec(value.trim());
5
+ if (!match) {
6
+ return undefined;
7
+ }
8
+ const user = match[1];
9
+ const device = match[2];
10
+ const rawServer = match[3].toLowerCase();
11
+ const server = rawServer === "c.us" ? "s.whatsapp.net" : rawServer;
12
+ return `${user}${device === undefined ? "" : `:${device}`}@${server}`;
13
+ }
14
+ export function canonicalizeWhatsAppUserCorrelationJid(value) {
15
+ const jid = canonicalizeWhatsAppUserJid(value);
16
+ if (!jid) {
17
+ return undefined;
18
+ }
19
+ const separator = jid.lastIndexOf("@");
20
+ return `${jid.slice(0, separator).split(":", 1)[0]}@${jid.slice(separator + 1)}`;
21
+ }
22
+ export function canonicalizeWhatsAppGroupJid(value) {
23
+ const match = WHATSAPP_GROUP_JID_RE.exec(value.trim());
24
+ return match ? `${match[1]}@g.us` : undefined;
25
+ }
26
+ export function canonicalizeWhatsAppChatJid(value) {
27
+ return canonicalizeWhatsAppUserJid(value) ?? canonicalizeWhatsAppGroupJid(value);
28
+ }
29
+ export function isWhatsAppGroupJid(value) {
30
+ return canonicalizeWhatsAppGroupJid(value) !== undefined;
31
+ }
32
+ //# sourceMappingURL=whatsapp-jid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-jid.js","sourceRoot":"","sources":["../../../src/servers/whatsapp-jid.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,wDAAwD,CAAC;AACtF,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AAEnE,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACvB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,OAAO,GAAG,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,KAAa;IAClE,MAAM,GAAG,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAa;IACxD,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAO,2BAA2B,CAAC,KAAK,CAAC,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,4BAA4B,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;AAC3D,CAAC","sourcesContent":["const WHATSAPP_USER_JID_RE = /^(\\d{7,15})(?::(\\d+))?@(c\\.us|lid|s\\.whatsapp\\.net)$/iu;\nconst WHATSAPP_GROUP_JID_RE = /^(\\d{5,20}(?:-\\d{5,20})?)@g\\.us$/iu;\n\nexport function canonicalizeWhatsAppUserJid(value: string): string | undefined {\n const match = WHATSAPP_USER_JID_RE.exec(value.trim());\n if (!match) {\n return undefined;\n }\n const user = match[1]!;\n const device = match[2];\n const rawServer = match[3]!.toLowerCase();\n const server = rawServer === \"c.us\" ? \"s.whatsapp.net\" : rawServer;\n return `${user}${device === undefined ? \"\" : `:${device}`}@${server}`;\n}\n\nexport function canonicalizeWhatsAppUserCorrelationJid(value: string): string | undefined {\n const jid = canonicalizeWhatsAppUserJid(value);\n if (!jid) {\n return undefined;\n }\n const separator = jid.lastIndexOf(\"@\");\n return `${jid.slice(0, separator).split(\":\", 1)[0]}@${jid.slice(separator + 1)}`;\n}\n\nexport function canonicalizeWhatsAppGroupJid(value: string): string | undefined {\n const match = WHATSAPP_GROUP_JID_RE.exec(value.trim());\n return match ? `${match[1]}@g.us` : undefined;\n}\n\nexport function canonicalizeWhatsAppChatJid(value: string): string | undefined {\n return canonicalizeWhatsAppUserJid(value) ?? canonicalizeWhatsAppGroupJid(value);\n}\n\nexport function isWhatsAppGroupJid(value: string): boolean {\n return canonicalizeWhatsAppGroupJid(value) !== undefined;\n}\n"]}
@@ -4,6 +4,11 @@ export type BinaryNode = {
4
4
  content?: BinaryNode[] | string | Uint8Array;
5
5
  tag: string;
6
6
  };
7
+ export declare const WHATSAPP_BINARY_NODE_MAX_COMPRESSED_BYTES: number;
8
+ export declare const WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES: number;
9
+ export declare const WHATSAPP_BINARY_NODE_MAX_DEPTH = 128;
10
+ export declare const WHATSAPP_BINARY_NODE_MAX_NODES = 32768;
11
+ export declare const WHATSAPP_BINARY_NODE_MAX_LIST_ITEMS = 131072;
7
12
  export declare const S_WHATSAPP_NET = "@s.whatsapp.net";
8
13
  export declare function decodeBinaryNode(frame: Buffer): Promise<BinaryNode>;
9
14
  export declare function encodeBinaryNode(node: BinaryNode): Buffer;
@@ -1,7 +1,22 @@
1
1
  import { Buffer } from "node:buffer";
2
- import { promisify } from "node:util";
3
2
  import { inflate } from "node:zlib";
4
- const inflateAsync = promisify(inflate);
3
+ export const WHATSAPP_BINARY_NODE_MAX_COMPRESSED_BYTES = 1024 * 1024;
4
+ export const WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES = 8 * 1024 * 1024;
5
+ export const WHATSAPP_BINARY_NODE_MAX_DEPTH = 128;
6
+ export const WHATSAPP_BINARY_NODE_MAX_NODES = 32_768;
7
+ export const WHATSAPP_BINARY_NODE_MAX_LIST_ITEMS = 131_072;
8
+ function inflateWithInfo(buffer) {
9
+ return new Promise((resolve, reject) => {
10
+ inflate(buffer, { info: true, maxOutputLength: WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES }, (error, result) => {
11
+ if (error) {
12
+ reject(error);
13
+ }
14
+ else {
15
+ resolve(result);
16
+ }
17
+ });
18
+ });
19
+ }
5
20
  const TAGS = {
6
21
  AD_JID: 247,
7
22
  BINARY_8: 252,
@@ -75,11 +90,13 @@ const SINGLE_BYTE_TOKENS = {
75
90
  155: "true",
76
91
  156: "identity",
77
92
  158: "key",
93
+ 160: "background",
78
94
  169: "auth",
79
95
  173: "registration",
80
96
  189: "ttl",
81
97
  194: "w:m",
82
98
  197: "token",
99
+ 198: "inactive",
83
100
  203: "encrypt",
84
101
  212: "signature",
85
102
  217: "trusted_contact",
@@ -106,10 +123,18 @@ const DOUBLE_BYTE_TOKENS = {
106
123
  export const S_WHATSAPP_NET = "@s.whatsapp.net";
107
124
  export async function decodeBinaryNode(frame) {
108
125
  const buffer = await decompressIfRequired(frame);
109
- return decodeDecompressedBinaryNode(buffer);
126
+ const indexRef = { index: 0 };
127
+ const node = decodeDecompressedBinaryNode(buffer, indexRef, 1, {
128
+ listItems: 0,
129
+ nodes: 0,
130
+ });
131
+ if (indexRef.index !== buffer.length) {
132
+ throw new Error("WhatsApp binary node frame contains trailing data.");
133
+ }
134
+ return node;
110
135
  }
111
136
  export function encodeBinaryNode(node) {
112
- return Buffer.from(encodeBinaryNodeInner(node, [0]));
137
+ return Buffer.from(encodeBinaryNodeInner(node, [0], 1));
113
138
  }
114
139
  async function decompressIfRequired(buffer) {
115
140
  if (buffer.length === 0) {
@@ -117,13 +142,41 @@ async function decompressIfRequired(buffer) {
117
142
  }
118
143
  const flag = buffer.readUInt8();
119
144
  if ((flag & 2) !== 0) {
120
- return await inflateAsync(buffer.subarray(1));
145
+ if (buffer.length > WHATSAPP_BINARY_NODE_MAX_COMPRESSED_BYTES) {
146
+ throw new Error(`Compressed WhatsApp binary node frame is too large: ${buffer.length}.`);
147
+ }
148
+ try {
149
+ const compressed = buffer.subarray(1);
150
+ const inflated = await inflateWithInfo(compressed);
151
+ if (inflated.engine.bytesWritten !== compressed.length) {
152
+ throw new Error("Compressed WhatsApp binary node frame contains trailing data.");
153
+ }
154
+ return inflated.buffer;
155
+ }
156
+ catch (error) {
157
+ if (error instanceof RangeError ||
158
+ (error instanceof Error && error.code === "ERR_BUFFER_TOO_LARGE")) {
159
+ throw new Error(`WhatsApp binary node expands beyond ${WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES} bytes.`, { cause: error });
160
+ }
161
+ throw error;
162
+ }
163
+ }
164
+ const payload = buffer.subarray(1);
165
+ if (payload.length > WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES) {
166
+ throw new Error(`WhatsApp binary node payload is too large: ${payload.length}.`);
121
167
  }
122
- return buffer.subarray(1);
168
+ return payload;
123
169
  }
124
- function decodeDecompressedBinaryNode(buffer, indexRef = { index: 0 }) {
170
+ function decodeDecompressedBinaryNode(buffer, indexRef, depth, budget) {
171
+ if (depth > WHATSAPP_BINARY_NODE_MAX_DEPTH) {
172
+ throw new Error(`WhatsApp binary node nesting exceeds ${WHATSAPP_BINARY_NODE_MAX_DEPTH}.`);
173
+ }
174
+ budget.nodes += 1;
175
+ if (budget.nodes > WHATSAPP_BINARY_NODE_MAX_NODES) {
176
+ throw new Error(`WhatsApp binary node count exceeds ${WHATSAPP_BINARY_NODE_MAX_NODES}.`);
177
+ }
125
178
  const checkEOS = (length) => {
126
- if (indexRef.index + length > buffer.length) {
179
+ if (!Number.isSafeInteger(length) || length < 0 || length > buffer.length - indexRef.index) {
127
180
  throw new Error("Unexpected end of WhatsApp binary node.");
128
181
  }
129
182
  };
@@ -149,8 +202,8 @@ function decodeDecompressedBinaryNode(buffer, indexRef = { index: 0 }) {
149
202
  checkEOS(length);
150
203
  let value = 0;
151
204
  for (let index = 0; index < length; index += 1) {
152
- const shift = littleEndian ? index : length - 1 - index;
153
- value |= next() << (shift * 8);
205
+ const byte = next();
206
+ value = littleEndian ? value + byte * 256 ** index : value * 256 + byte;
154
207
  }
155
208
  return value;
156
209
  };
@@ -200,16 +253,24 @@ function decodeDecompressedBinaryNode(buffer, indexRef = { index: 0 }) {
200
253
  return startByte >> 7 !== 0 ? value.slice(0, -1) : value;
201
254
  };
202
255
  const readListSize = (tag) => {
256
+ let size;
203
257
  if (tag === TAGS.LIST_EMPTY) {
204
- return 0;
258
+ size = 0;
205
259
  }
206
- if (tag === TAGS.LIST_8) {
207
- return readByte();
260
+ else if (tag === TAGS.LIST_8) {
261
+ size = readByte();
208
262
  }
209
- if (tag === TAGS.LIST_16) {
210
- return readInt(2);
263
+ else if (tag === TAGS.LIST_16) {
264
+ size = readInt(2);
265
+ }
266
+ else {
267
+ throw new Error(`Invalid WhatsApp list tag: ${tag}.`);
211
268
  }
212
- throw new Error(`Invalid WhatsApp list tag: ${tag}.`);
269
+ budget.listItems += size;
270
+ if (budget.listItems > WHATSAPP_BINARY_NODE_MAX_LIST_ITEMS) {
271
+ throw new Error(`WhatsApp binary node list items exceed ${WHATSAPP_BINARY_NODE_MAX_LIST_ITEMS}.`);
272
+ }
273
+ return size;
213
274
  };
214
275
  const isListTag = (tag) => tag === TAGS.LIST_EMPTY || tag === TAGS.LIST_8 || tag === TAGS.LIST_16;
215
276
  const readString = (tag) => {
@@ -259,7 +320,7 @@ function decodeDecompressedBinaryNode(buffer, indexRef = { index: 0 }) {
259
320
  const items = [];
260
321
  const size = readListSize(tag);
261
322
  for (let index = 0; index < size; index += 1) {
262
- items.push(decodeDecompressedBinaryNode(buffer, indexRef));
323
+ items.push(decodeDecompressedBinaryNode(buffer, indexRef, depth + 1, budget));
263
324
  }
264
325
  return items;
265
326
  };
@@ -316,7 +377,7 @@ function decodeDecompressedBinaryNode(buffer, indexRef = { index: 0 }) {
316
377
  if (listSize === 0 || !tag) {
317
378
  throw new Error("Invalid WhatsApp binary node header.");
318
379
  }
319
- const attrs = {};
380
+ const attrs = Object.create(null);
320
381
  for (let index = 0; index < (listSize - 1) >> 1; index += 1) {
321
382
  attrs[readString(readByte())] = readString(readByte());
322
383
  }
@@ -341,7 +402,10 @@ function decodeDecompressedBinaryNode(buffer, indexRef = { index: 0 }) {
341
402
  }
342
403
  return content === undefined ? { attrs, tag } : { attrs, content, tag };
343
404
  }
344
- function encodeBinaryNodeInner(node, buffer) {
405
+ function encodeBinaryNodeInner(node, buffer, depth) {
406
+ if (depth > WHATSAPP_BINARY_NODE_MAX_DEPTH) {
407
+ throw new Error(`WhatsApp binary node nesting exceeds ${WHATSAPP_BINARY_NODE_MAX_DEPTH}.`);
408
+ }
345
409
  if (!node.tag) {
346
410
  throw new Error("Invalid WhatsApp binary node: tag is required.");
347
411
  }
@@ -365,7 +429,7 @@ function encodeBinaryNodeInner(node, buffer) {
365
429
  else if (Array.isArray(node.content)) {
366
430
  writeListStart(buffer, node.content.length);
367
431
  for (const child of node.content) {
368
- encodeBinaryNodeInner(child, buffer);
432
+ encodeBinaryNodeInner(child, buffer, depth + 1);
369
433
  }
370
434
  }
371
435
  else if (node.content !== undefined) {
@@ -412,6 +476,9 @@ function writeString(buffer, value) {
412
476
  pushBytes(buffer, bytes);
413
477
  }
414
478
  function writeListStart(buffer, size) {
479
+ if (!Number.isSafeInteger(size) || size < 0 || size > 0xffff) {
480
+ throw new Error(`WhatsApp binary node list is too large: ${size}.`);
481
+ }
415
482
  if (size === 0) {
416
483
  pushByte(buffer, TAGS.LIST_EMPTY);
417
484
  return;