@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.
- package/README.md +47 -22
- package/assets/crabline-banner.svg +20 -0
- package/dist/src/bin/crabline.js.map +1 -1
- package/dist/src/cli/program.d.ts +25 -1
- package/dist/src/cli/program.js +579 -82
- package/dist/src/cli/program.js.map +1 -1
- package/dist/src/config/load.js +59 -6
- package/dist/src/config/load.js.map +1 -1
- package/dist/src/config/schema.d.ts +116 -92
- package/dist/src/config/schema.js +179 -73
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/core/errors.js +9 -2
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/core/exit-codes.js.map +1 -1
- package/dist/src/core/matcher.js +7 -6
- package/dist/src/core/matcher.js.map +1 -1
- package/dist/src/core/message-template.js.map +1 -1
- package/dist/src/core/nonces.d.ts +1 -0
- package/dist/src/core/nonces.js +4 -2
- package/dist/src/core/nonces.js.map +1 -1
- package/dist/src/core/reporters.d.ts +1 -0
- package/dist/src/core/reporters.js +42 -4
- package/dist/src/core/reporters.js.map +1 -1
- package/dist/src/core/run.d.ts +3 -0
- package/dist/src/core/run.js +415 -107
- package/dist/src/core/run.js.map +1 -1
- package/dist/src/core/safe-regex.d.ts +3 -0
- package/dist/src/core/safe-regex.js +21 -0
- package/dist/src/core/safe-regex.js.map +1 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/openclaw/artifact-generation.d.ts +43 -0
- package/dist/src/openclaw/artifact-generation.js +363 -0
- package/dist/src/openclaw/artifact-generation.js.map +1 -0
- package/dist/src/openclaw/bridges/matrix.js +97 -12
- package/dist/src/openclaw/bridges/matrix.js.map +1 -1
- package/dist/src/openclaw/bridges/mattermost.js +32 -10
- package/dist/src/openclaw/bridges/mattermost.js.map +1 -1
- package/dist/src/openclaw/bridges/signal.js +55 -18
- package/dist/src/openclaw/bridges/signal.js.map +1 -1
- package/dist/src/openclaw/bridges/slack.js +85 -7
- package/dist/src/openclaw/bridges/slack.js.map +1 -1
- package/dist/src/openclaw/bridges/telegram.js +124 -30
- package/dist/src/openclaw/bridges/telegram.js.map +1 -1
- package/dist/src/openclaw/bridges/whatsapp.js +78 -17
- package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
- package/dist/src/openclaw/bridges/zalo.js +14 -5
- package/dist/src/openclaw/bridges/zalo.js.map +1 -1
- package/dist/src/openclaw/outbound-contract.d.ts +5 -0
- package/dist/src/openclaw/outbound-contract.js +40 -0
- package/dist/src/openclaw/outbound-contract.js.map +1 -0
- package/dist/src/openclaw/private-file.d.ts +28 -0
- package/dist/src/openclaw/private-file.js +465 -0
- package/dist/src/openclaw/private-file.js.map +1 -0
- package/dist/src/openclaw/shared.d.ts +21 -2
- package/dist/src/openclaw/shared.js +115 -18
- package/dist/src/openclaw/shared.js.map +1 -1
- package/dist/src/openclaw/smoke-lock.d.ts +63 -0
- package/dist/src/openclaw/smoke-lock.js +1004 -0
- package/dist/src/openclaw/smoke-lock.js.map +1 -0
- package/dist/src/openclaw.d.ts +16 -8
- package/dist/src/openclaw.js +334 -52
- package/dist/src/openclaw.js.map +1 -1
- package/dist/src/providers/builtin/discord.d.ts +10 -1
- package/dist/src/providers/builtin/discord.js +144 -18
- package/dist/src/providers/builtin/discord.js.map +1 -1
- package/dist/src/providers/builtin/external-webhook-auth.d.ts +11 -0
- package/dist/src/providers/builtin/external-webhook-auth.js +10 -0
- package/dist/src/providers/builtin/external-webhook-auth.js.map +1 -0
- package/dist/src/providers/builtin/feishu.d.ts +19 -2
- package/dist/src/providers/builtin/feishu.js +307 -25
- package/dist/src/providers/builtin/feishu.js.map +1 -1
- package/dist/src/providers/builtin/googlechat.d.ts +20 -1
- package/dist/src/providers/builtin/googlechat.js +178 -19
- package/dist/src/providers/builtin/googlechat.js.map +1 -1
- package/dist/src/providers/builtin/imessage.d.ts +4 -0
- package/dist/src/providers/builtin/imessage.js +26 -11
- package/dist/src/providers/builtin/imessage.js.map +1 -1
- package/dist/src/providers/builtin/loopback.js +92 -30
- package/dist/src/providers/builtin/loopback.js.map +1 -1
- package/dist/src/providers/builtin/matrix.d.ts +11 -1
- package/dist/src/providers/builtin/matrix.js +53 -29
- package/dist/src/providers/builtin/matrix.js.map +1 -1
- package/dist/src/providers/builtin/mattermost.d.ts +10 -0
- package/dist/src/providers/builtin/mattermost.js +38 -15
- package/dist/src/providers/builtin/mattermost.js.map +1 -1
- package/dist/src/providers/builtin/msteams.d.ts +17 -1
- package/dist/src/providers/builtin/msteams.js +113 -14
- package/dist/src/providers/builtin/msteams.js.map +1 -1
- package/dist/src/providers/builtin/native-local-mock.d.ts +2 -9
- package/dist/src/providers/builtin/native-local-mock.js +12 -35
- package/dist/src/providers/builtin/native-local-mock.js.map +1 -1
- package/dist/src/providers/builtin/script.d.ts +11 -15
- package/dist/src/providers/builtin/script.js +566 -104
- package/dist/src/providers/builtin/script.js.map +1 -1
- package/dist/src/providers/builtin/slack.d.ts +6 -0
- package/dist/src/providers/builtin/slack.js +99 -40
- package/dist/src/providers/builtin/slack.js.map +1 -1
- package/dist/src/providers/builtin/telegram.d.ts +6 -0
- package/dist/src/providers/builtin/telegram.js +64 -43
- package/dist/src/providers/builtin/telegram.js.map +1 -1
- package/dist/src/providers/builtin/whatsapp.d.ts +28 -8
- package/dist/src/providers/builtin/whatsapp.js +567 -30
- package/dist/src/providers/builtin/whatsapp.js.map +1 -1
- package/dist/src/providers/builtin/zalo.js +30 -19
- package/dist/src/providers/builtin/zalo.js.map +1 -1
- package/dist/src/providers/catalog.d.ts +3 -3
- package/dist/src/providers/catalog.js +3 -3
- package/dist/src/providers/catalog.js.map +1 -1
- package/dist/src/providers/local-mock.d.ts +11 -2
- package/dist/src/providers/local-mock.js +322 -96
- package/dist/src/providers/local-mock.js.map +1 -1
- package/dist/src/providers/native-ids.d.ts +1 -0
- package/dist/src/providers/native-ids.js +6 -1
- package/dist/src/providers/native-ids.js.map +1 -1
- package/dist/src/providers/recorder.d.ts +30 -2
- package/dist/src/providers/recorder.js +549 -70
- package/dist/src/providers/recorder.js.map +1 -1
- package/dist/src/providers/registry.d.ts +25 -1
- package/dist/src/providers/registry.js +280 -40
- package/dist/src/providers/registry.js.map +1 -1
- package/dist/src/providers/signed-jwt.d.ts +29 -0
- package/dist/src/providers/signed-jwt.js +202 -0
- package/dist/src/providers/signed-jwt.js.map +1 -0
- package/dist/src/providers/slack-ids.js.map +1 -1
- package/dist/src/providers/target-normalizers.d.ts +26 -0
- package/dist/src/providers/target-normalizers.js +276 -0
- package/dist/src/providers/target-normalizers.js.map +1 -0
- package/dist/src/providers/types.d.ts +5 -0
- package/dist/src/providers/types.js.map +1 -1
- package/dist/src/providers/webhook-server.d.ts +2 -0
- package/dist/src/providers/webhook-server.js +72 -25
- package/dist/src/providers/webhook-server.js.map +1 -1
- package/dist/src/servers/http.d.ts +23 -3
- package/dist/src/servers/http.js +213 -20
- package/dist/src/servers/http.js.map +1 -1
- package/dist/src/servers/index.js +20 -21
- package/dist/src/servers/index.js.map +1 -1
- package/dist/src/servers/matrix.js +465 -51
- package/dist/src/servers/matrix.js.map +1 -1
- package/dist/src/servers/mattermost.d.ts +5 -0
- package/dist/src/servers/mattermost.js +306 -58
- package/dist/src/servers/mattermost.js.map +1 -1
- package/dist/src/servers/pending-events.d.ts +2 -0
- package/dist/src/servers/pending-events.js +11 -0
- package/dist/src/servers/pending-events.js.map +1 -0
- package/dist/src/servers/recorder.d.ts +5 -0
- package/dist/src/servers/recorder.js +262 -3
- package/dist/src/servers/recorder.js.map +1 -1
- package/dist/src/servers/signal.d.ts +2 -0
- package/dist/src/servers/signal.js +444 -56
- package/dist/src/servers/signal.js.map +1 -1
- package/dist/src/servers/slack.d.ts +5 -0
- package/dist/src/servers/slack.js +515 -49
- package/dist/src/servers/slack.js.map +1 -1
- package/dist/src/servers/telegram.d.ts +111 -0
- package/dist/src/servers/telegram.js +830 -158
- package/dist/src/servers/telegram.js.map +1 -1
- package/dist/src/servers/webhook-target.d.ts +40 -0
- package/dist/src/servers/webhook-target.js +349 -0
- package/dist/src/servers/webhook-target.js.map +1 -0
- package/dist/src/servers/websocket.d.ts +2 -0
- package/dist/src/servers/websocket.js +29 -0
- package/dist/src/servers/websocket.js.map +1 -0
- package/dist/src/servers/whatsapp-baileys-websocket.d.ts +65 -1
- package/dist/src/servers/whatsapp-baileys-websocket.js +723 -99
- package/dist/src/servers/whatsapp-baileys-websocket.js.map +1 -1
- package/dist/src/servers/whatsapp-jid.d.ts +5 -0
- package/dist/src/servers/whatsapp-jid.js +32 -0
- package/dist/src/servers/whatsapp-jid.js.map +1 -0
- package/dist/src/servers/whatsapp-wire/binary-node.d.ts +5 -0
- package/dist/src/servers/whatsapp-wire/binary-node.js +87 -20
- package/dist/src/servers/whatsapp-wire/binary-node.js.map +1 -1
- package/dist/src/servers/whatsapp-wire/crypto.d.ts +6 -1
- package/dist/src/servers/whatsapp-wire/crypto.js +99 -45
- package/dist/src/servers/whatsapp-wire/crypto.js.map +1 -1
- package/dist/src/servers/whatsapp-wire/handshake.js +39 -4
- package/dist/src/servers/whatsapp-wire/handshake.js.map +1 -1
- package/dist/src/servers/whatsapp-wire/signal.js.map +1 -1
- package/dist/src/servers/whatsapp.d.ts +12 -7
- package/dist/src/servers/whatsapp.js +269 -107
- package/dist/src/servers/whatsapp.js.map +1 -1
- package/dist/src/servers/zalo.d.ts +14 -0
- package/dist/src/servers/zalo.js +521 -88
- package/dist/src/servers/zalo.js.map +1 -1
- package/docs/channel-setup.md +197 -19
- package/fixtures/examples/crabline.example.yaml +10 -0
- package/package.json +20 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-node.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/binary-node.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"binary-node.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/binary-node.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { inflate } from \"node:zlib\";\n\nexport type BinaryNode = {\n attrs: Record<string, string>;\n content?: BinaryNode[] | string | Uint8Array;\n tag: string;\n};\n\nexport const WHATSAPP_BINARY_NODE_MAX_COMPRESSED_BYTES = 1024 * 1024;\nexport const WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES = 8 * 1024 * 1024;\nexport const WHATSAPP_BINARY_NODE_MAX_DEPTH = 128;\nexport const WHATSAPP_BINARY_NODE_MAX_NODES = 32_768;\nexport const WHATSAPP_BINARY_NODE_MAX_LIST_ITEMS = 131_072;\n\ntype DecodeBudget = {\n listItems: number;\n nodes: number;\n};\n\nfunction inflateWithInfo(\n buffer: Uint8Array,\n): Promise<{ buffer: Buffer; engine: { bytesWritten: number } }> {\n return new Promise((resolve, reject) => {\n inflate(\n buffer,\n { info: true, maxOutputLength: WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES },\n (error, result) => {\n if (error) {\n reject(error);\n } else {\n resolve(result as unknown as { buffer: Buffer; engine: { bytesWritten: number } });\n }\n },\n );\n });\n}\n\nconst TAGS = {\n AD_JID: 247,\n BINARY_8: 252,\n BINARY_20: 253,\n BINARY_32: 254,\n DICTIONARY_0: 236,\n DICTIONARY_1: 237,\n DICTIONARY_2: 238,\n DICTIONARY_3: 239,\n FB_JID: 246,\n HEX_8: 251,\n INTEROP_JID: 245,\n JID_PAIR: 250,\n LIST_8: 248,\n LIST_16: 249,\n LIST_EMPTY: 0,\n NIBBLE_8: 255,\n PACKED_MAX: 127,\n} as const;\n\n// Minimal WhatsApp binary token dictionary for the nodes this local server handles.\nconst SINGLE_BYTE_TOKENS: Readonly<Record<number, string>> = {\n 3: \"s.whatsapp.net\",\n 4: \"type\",\n 5: \"participant\",\n 6: \"from\",\n 7: \"receipt\",\n 8: \"id\",\n 12: \"jid\",\n 14: \"user\",\n 15: \"devices\",\n 17: \"to\",\n 18: \"offline\",\n 19: \"message\",\n 20: \"result\",\n 21: \"class\",\n 22: \"xmlns\",\n 25: \"iq\",\n 26: \"t\",\n 27: \"ack\",\n 28: \"g.us\",\n 29: \"enc\",\n 31: \"presence\",\n 41: \"get\",\n 45: \"0\",\n 48: \"unavailable\",\n 56: \"text\",\n 58: \"media_conn\",\n 65: \"count\",\n 69: \"2\",\n 70: \"hostname\",\n 76: \"success\",\n 79: \"prop\",\n 81: \"v\",\n 83: \"pkmsg\",\n 84: \"version\",\n 90: \"set\",\n 92: \"props\",\n 95: \"hash\",\n 97: \"last\",\n 106: \"mode\",\n 107: \"participants\",\n 108: \"value\",\n 109: \"query\",\n 113: \"list\",\n 114: \"host\",\n 118: \"lid\",\n 121: \"usync\",\n 125: \"context\",\n 137: \"name\",\n 143: \"index\",\n 155: \"true\",\n 156: \"identity\",\n 158: \"key\",\n 160: \"background\",\n 169: \"auth\",\n 173: \"registration\",\n 189: \"ttl\",\n 194: \"w:m\",\n 197: \"token\",\n 198: \"inactive\",\n 203: \"encrypt\",\n 212: \"signature\",\n 217: \"trusted_contact\",\n 226: \"privacy\",\n 230: \"device-identity\",\n};\n\nconst DOUBLE_BYTE_TOKENS: Readonly<Record<number, Readonly<Record<number, string>>>> = {\n 0: {\n 1: \"active\",\n 15: \"false\",\n 24: \"passive\",\n 45: \"skey\",\n 46: \"reason\",\n 68: \"tokens\",\n 127: \"subject\",\n 170: \"group\",\n 217: \"blocklist\",\n 238: \"s_t\",\n },\n 1: {\n 51: \"w:g2\",\n },\n};\n\nexport const S_WHATSAPP_NET = \"@s.whatsapp.net\";\n\nexport async function decodeBinaryNode(frame: Buffer): Promise<BinaryNode> {\n const buffer = await decompressIfRequired(frame);\n const indexRef = { index: 0 };\n const node = decodeDecompressedBinaryNode(buffer, indexRef, 1, {\n listItems: 0,\n nodes: 0,\n });\n if (indexRef.index !== buffer.length) {\n throw new Error(\"WhatsApp binary node frame contains trailing data.\");\n }\n return node;\n}\n\nexport function encodeBinaryNode(node: BinaryNode): Buffer {\n return Buffer.from(encodeBinaryNodeInner(node, [0], 1));\n}\n\nasync function decompressIfRequired(buffer: Buffer): Promise<Buffer> {\n if (buffer.length === 0) {\n throw new Error(\"Cannot decode an empty WhatsApp binary node.\");\n }\n const flag = buffer.readUInt8();\n if ((flag & 2) !== 0) {\n if (buffer.length > WHATSAPP_BINARY_NODE_MAX_COMPRESSED_BYTES) {\n throw new Error(`Compressed WhatsApp binary node frame is too large: ${buffer.length}.`);\n }\n try {\n const compressed = buffer.subarray(1);\n const inflated = await inflateWithInfo(compressed);\n if (inflated.engine.bytesWritten !== compressed.length) {\n throw new Error(\"Compressed WhatsApp binary node frame contains trailing data.\");\n }\n return inflated.buffer;\n } catch (error) {\n if (\n error instanceof RangeError ||\n (error instanceof Error && (error as NodeJS.ErrnoException).code === \"ERR_BUFFER_TOO_LARGE\")\n ) {\n throw new Error(\n `WhatsApp binary node expands beyond ${WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES} bytes.`,\n { cause: error },\n );\n }\n throw error;\n }\n }\n const payload = buffer.subarray(1);\n if (payload.length > WHATSAPP_BINARY_NODE_MAX_DECOMPRESSED_BYTES) {\n throw new Error(`WhatsApp binary node payload is too large: ${payload.length}.`);\n }\n return payload;\n}\n\nfunction decodeDecompressedBinaryNode(\n buffer: Buffer,\n indexRef: { index: number },\n depth: number,\n budget: DecodeBudget,\n): BinaryNode {\n if (depth > WHATSAPP_BINARY_NODE_MAX_DEPTH) {\n throw new Error(`WhatsApp binary node nesting exceeds ${WHATSAPP_BINARY_NODE_MAX_DEPTH}.`);\n }\n budget.nodes += 1;\n if (budget.nodes > WHATSAPP_BINARY_NODE_MAX_NODES) {\n throw new Error(`WhatsApp binary node count exceeds ${WHATSAPP_BINARY_NODE_MAX_NODES}.`);\n }\n const checkEOS = (length: number) => {\n if (!Number.isSafeInteger(length) || length < 0 || length > buffer.length - indexRef.index) {\n throw new Error(\"Unexpected end of WhatsApp binary node.\");\n }\n };\n const next = () => {\n const value = buffer[indexRef.index];\n indexRef.index += 1;\n if (value === undefined) {\n throw new Error(\"Unexpected end of WhatsApp binary node.\");\n }\n return value;\n };\n const readByte = () => {\n checkEOS(1);\n return next();\n };\n const readBytes = (length: number) => {\n checkEOS(length);\n const value = buffer.subarray(indexRef.index, indexRef.index + length);\n indexRef.index += length;\n return value;\n };\n const readInt = (length: number, littleEndian = false) => {\n checkEOS(length);\n let value = 0;\n for (let index = 0; index < length; index += 1) {\n const byte = next();\n value = littleEndian ? value + byte * 256 ** index : value * 256 + byte;\n }\n return value;\n };\n const readInt20 = () => {\n checkEOS(3);\n return ((next() & 15) << 16) + (next() << 8) + next();\n };\n const readStringFromChars = (length: number) => readBytes(length).toString(\"utf8\");\n const unpackHex = (value: number) => {\n if (value >= 0 && value < 16) {\n return value < 10 ? \"0\".charCodeAt(0) + value : \"A\".charCodeAt(0) + value - 10;\n }\n throw new Error(`Invalid WhatsApp hex token: ${value}.`);\n };\n const unpackNibble = (value: number) => {\n if (value >= 0 && value <= 9) {\n return \"0\".charCodeAt(0) + value;\n }\n if (value === 10) {\n return \"-\".charCodeAt(0);\n }\n if (value === 11) {\n return \".\".charCodeAt(0);\n }\n if (value === 15) {\n return \"\\0\".charCodeAt(0);\n }\n throw new Error(`Invalid WhatsApp nibble token: ${value}.`);\n };\n const unpackByte = (tag: number, value: number) => {\n if (tag === TAGS.NIBBLE_8) {\n return unpackNibble(value);\n }\n if (tag === TAGS.HEX_8) {\n return unpackHex(value);\n }\n throw new Error(`Unknown WhatsApp packed string tag: ${tag}.`);\n };\n const readPacked8 = (tag: number) => {\n const startByte = readByte();\n let value = \"\";\n for (let index = 0; index < (startByte & 127); index += 1) {\n const current = readByte();\n value += String.fromCharCode(unpackByte(tag, (current & 0xf0) >> 4));\n value += String.fromCharCode(unpackByte(tag, current & 0x0f));\n }\n return startByte >> 7 !== 0 ? value.slice(0, -1) : value;\n };\n const readListSize = (tag: number) => {\n let size: number;\n if (tag === TAGS.LIST_EMPTY) {\n size = 0;\n } else if (tag === TAGS.LIST_8) {\n size = readByte();\n } else if (tag === TAGS.LIST_16) {\n size = readInt(2);\n } else {\n throw new Error(`Invalid WhatsApp list tag: ${tag}.`);\n }\n budget.listItems += size;\n if (budget.listItems > WHATSAPP_BINARY_NODE_MAX_LIST_ITEMS) {\n throw new Error(\n `WhatsApp binary node list items exceed ${WHATSAPP_BINARY_NODE_MAX_LIST_ITEMS}.`,\n );\n }\n return size;\n };\n const isListTag = (tag: number) =>\n tag === TAGS.LIST_EMPTY || tag === TAGS.LIST_8 || tag === TAGS.LIST_16;\n const readString = (tag: number): string => {\n const token = SINGLE_BYTE_TOKENS[tag];\n if (token !== undefined) {\n return token;\n }\n if (tag >= 1 && tag < 236) {\n throw new Error(`Unsupported WhatsApp single-byte token: ${tag}.`);\n }\n if (\n tag === TAGS.DICTIONARY_0 ||\n tag === TAGS.DICTIONARY_1 ||\n tag === TAGS.DICTIONARY_2 ||\n tag === TAGS.DICTIONARY_3\n ) {\n return readDoubleToken(tag - TAGS.DICTIONARY_0, readByte());\n }\n if (tag === TAGS.LIST_EMPTY) {\n return \"\";\n }\n if (tag === TAGS.BINARY_8) {\n return readStringFromChars(readByte());\n }\n if (tag === TAGS.BINARY_20) {\n return readStringFromChars(readInt20());\n }\n if (tag === TAGS.BINARY_32) {\n return readStringFromChars(readInt(4));\n }\n if (tag === TAGS.JID_PAIR) {\n return readJidPair();\n }\n if (tag === TAGS.FB_JID) {\n return readFbJid();\n }\n if (tag === TAGS.INTEROP_JID) {\n return readInteropJid();\n }\n if (tag === TAGS.AD_JID) {\n return readAdJid();\n }\n if (tag === TAGS.HEX_8 || tag === TAGS.NIBBLE_8) {\n return readPacked8(tag);\n }\n throw new Error(`Invalid WhatsApp string tag: ${tag}.`);\n };\n const readList = (tag: number) => {\n const items: BinaryNode[] = [];\n const size = readListSize(tag);\n for (let index = 0; index < size; index += 1) {\n items.push(decodeDecompressedBinaryNode(buffer, indexRef, depth + 1, budget));\n }\n return items;\n };\n const readJidPair = () => {\n const user = readString(readByte());\n const server = readString(readByte());\n if (!server) {\n throw new Error(`Invalid WhatsApp JID pair: ${user}, ${server}.`);\n }\n return `${user || \"\"}@${server}`;\n };\n const readAdJid = () => {\n const domainType = readByte();\n const device = readByte();\n const user = readString(readByte());\n const server =\n domainType === 1\n ? \"lid\"\n : domainType === 128\n ? \"hosted\"\n : domainType === 129\n ? \"hosted.lid\"\n : \"s.whatsapp.net\";\n return `${user}${device ? `:${device}` : \"\"}@${server}`;\n };\n const readFbJid = () => {\n const user = readString(readByte());\n const device = readInt(2);\n const server = readString(readByte());\n return `${user}:${device}@${server}`;\n };\n const readInteropJid = () => {\n const user = readString(readByte());\n const device = readInt(2);\n const integrator = readInt(2);\n const beforeServer = indexRef.index;\n let server = \"interop\";\n try {\n server = readString(readByte());\n } catch {\n indexRef.index = beforeServer;\n }\n return `${integrator}-${user}:${device}@${server}`;\n };\n const readDoubleToken = (dictionary: number, index: number) => {\n const value = DOUBLE_BYTE_TOKENS[dictionary]?.[index];\n if (value === undefined) {\n throw new Error(`Unsupported WhatsApp dictionary token: ${dictionary}:${index}.`);\n }\n return value;\n };\n\n const listSize = readListSize(readByte());\n const tag = readString(readByte());\n if (listSize === 0 || !tag) {\n throw new Error(\"Invalid WhatsApp binary node header.\");\n }\n const attrs = Object.create(null) as Record<string, string>;\n for (let index = 0; index < (listSize - 1) >> 1; index += 1) {\n attrs[readString(readByte())] = readString(readByte());\n }\n let content: BinaryNode[\"content\"];\n if (listSize % 2 === 0) {\n const contentTag = readByte();\n if (isListTag(contentTag)) {\n content = readList(contentTag);\n } else if (contentTag === TAGS.BINARY_8) {\n content = readBytes(readByte());\n } else if (contentTag === TAGS.BINARY_20) {\n content = readBytes(readInt20());\n } else if (contentTag === TAGS.BINARY_32) {\n content = readBytes(readInt(4));\n } else {\n content = readString(contentTag);\n }\n }\n return content === undefined ? { attrs, tag } : { attrs, content, tag };\n}\n\nfunction encodeBinaryNodeInner(node: BinaryNode, buffer: number[], depth: number): number[] {\n if (depth > WHATSAPP_BINARY_NODE_MAX_DEPTH) {\n throw new Error(`WhatsApp binary node nesting exceeds ${WHATSAPP_BINARY_NODE_MAX_DEPTH}.`);\n }\n if (!node.tag) {\n throw new Error(\"Invalid WhatsApp binary node: tag is required.\");\n }\n const validAttributes = Object.keys(node.attrs ?? {}).filter((key) => {\n const value = node.attrs[key];\n return value !== undefined && value !== null;\n });\n writeListStart(buffer, 2 * validAttributes.length + 1 + (node.content !== undefined ? 1 : 0));\n writeString(buffer, node.tag);\n for (const key of validAttributes) {\n writeString(buffer, key);\n writeString(buffer, node.attrs[key] ?? \"\");\n }\n if (typeof node.content === \"string\") {\n writeString(buffer, node.content);\n } else if (node.content instanceof Uint8Array) {\n writeByteLength(buffer, node.content.length);\n pushBytes(buffer, node.content);\n } else if (Array.isArray(node.content)) {\n writeListStart(buffer, node.content.length);\n for (const child of node.content) {\n encodeBinaryNodeInner(child, buffer, depth + 1);\n }\n } else if (node.content !== undefined) {\n throw new Error(`Invalid WhatsApp binary node content for <${node.tag}>.`);\n }\n return buffer;\n}\n\nfunction pushByte(buffer: number[], value: number): void {\n buffer.push(value & 0xff);\n}\n\nfunction pushBytes(buffer: number[], bytes: Uint8Array): void {\n for (const byte of bytes) {\n pushByte(buffer, byte);\n }\n}\n\nfunction pushInt(buffer: number[], value: number, length: number): void {\n for (let index = 0; index < length; index += 1) {\n const shift = length - 1 - index;\n pushByte(buffer, value >> (shift * 8));\n }\n}\n\nfunction writeByteLength(buffer: number[], length: number): void {\n if (length >= 4294967296) {\n throw new Error(`WhatsApp binary node payload is too large: ${length}.`);\n }\n if (length >= 1 << 20) {\n pushByte(buffer, TAGS.BINARY_32);\n pushInt(buffer, length, 4);\n return;\n }\n if (length >= 256) {\n pushByte(buffer, TAGS.BINARY_20);\n pushByte(buffer, (length >> 16) & 0x0f);\n pushByte(buffer, length >> 8);\n pushByte(buffer, length);\n return;\n }\n pushByte(buffer, TAGS.BINARY_8);\n pushByte(buffer, length);\n}\n\nfunction writeString(buffer: number[], value: string): void {\n const bytes = Buffer.from(value, \"utf8\");\n writeByteLength(buffer, bytes.length);\n pushBytes(buffer, bytes);\n}\n\nfunction writeListStart(buffer: number[], size: number): void {\n if (!Number.isSafeInteger(size) || size < 0 || size > 0xffff) {\n throw new Error(`WhatsApp binary node list is too large: ${size}.`);\n }\n if (size === 0) {\n pushByte(buffer, TAGS.LIST_EMPTY);\n return;\n }\n if (size < 256) {\n pushByte(buffer, TAGS.LIST_8);\n pushByte(buffer, size);\n return;\n }\n pushByte(buffer, TAGS.LIST_16);\n pushInt(buffer, size, 2);\n}\n"]}
|
|
@@ -11,11 +11,15 @@ export type SignedKeyPair = {
|
|
|
11
11
|
keyPair: KeyPair;
|
|
12
12
|
signature: Buffer;
|
|
13
13
|
};
|
|
14
|
-
|
|
14
|
+
type NativeCurveBackend = {
|
|
15
15
|
generateKeyPair(): KeyPair;
|
|
16
16
|
sharedKey(privateKey: Uint8Array, publicKey: Uint8Array): Buffer;
|
|
17
|
+
};
|
|
18
|
+
type CurveApi = NativeCurveBackend & {
|
|
17
19
|
sign(privateKey: Uint8Array, message: Uint8Array): Buffer;
|
|
18
20
|
};
|
|
21
|
+
export declare function createCurve(nativeBackend?: NativeCurveBackend): CurveApi;
|
|
22
|
+
export declare const Curve: CurveApi;
|
|
19
23
|
export declare function aesEncryptGCM(plaintext: Uint8Array, key: Uint8Array, iv: Uint8Array, additionalData: Uint8Array): Buffer;
|
|
20
24
|
export declare function aesDecryptGCM(ciphertext: Uint8Array, key: Uint8Array, iv: Uint8Array, additionalData: Uint8Array): Buffer;
|
|
21
25
|
export declare function encodeBigEndian(value: number, length?: number): Buffer;
|
|
@@ -25,3 +29,4 @@ export declare function hkdf(input: Uint8Array, length: number, params: {
|
|
|
25
29
|
}): Buffer<ArrayBuffer>;
|
|
26
30
|
export declare function sha256(input: Uint8Array): Buffer;
|
|
27
31
|
export declare function signedKeyPair(identityKeyPair: KeyPair, keyId: number): SignedKeyPair;
|
|
32
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
|
-
import { createCipheriv, createDecipheriv, createHash, createPrivateKey, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, } from "node:crypto";
|
|
2
|
+
import { createCipheriv, createDecipheriv, createHash, createPrivateKey, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, randomBytes, } from "node:crypto";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
const require = createRequire(import.meta.url);
|
|
5
5
|
const curve25519 = require("curve25519-js");
|
|
@@ -11,56 +11,101 @@ const PUBLIC_KEY_DER_PREFIX = Buffer.from([48, 42, 48, 5, 6, 3, 43, 101, 110, 3,
|
|
|
11
11
|
export const KEY_BUNDLE_TYPE = Buffer.from([5]);
|
|
12
12
|
export const NOISE_MODE = "Noise_XX_25519_AESGCM_SHA256\0\0\0\0";
|
|
13
13
|
export const NOISE_WA_HEADER = Buffer.from([87, 65, 6, 3]);
|
|
14
|
-
|
|
14
|
+
const nativeCurveBackend = {
|
|
15
15
|
generateKeyPair() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
const keyPair = curve25519.generateKeyPair();
|
|
28
|
-
return {
|
|
29
|
-
private: Buffer.from(keyPair.private),
|
|
30
|
-
public: Buffer.from(keyPair.public),
|
|
31
|
-
};
|
|
32
|
-
}
|
|
16
|
+
const { privateKey, publicKey } = generateKeyPairSync("x25519", {
|
|
17
|
+
privateKeyEncoding: { format: "der", type: "pkcs8" },
|
|
18
|
+
publicKeyEncoding: { format: "der", type: "spki" },
|
|
19
|
+
});
|
|
20
|
+
return {
|
|
21
|
+
private: privateKey.subarray(PRIVATE_KEY_DER_PREFIX.length, PRIVATE_KEY_DER_PREFIX.length + 32),
|
|
22
|
+
public: publicKey.subarray(PUBLIC_KEY_DER_PREFIX.length, PUBLIC_KEY_DER_PREFIX.length + 32),
|
|
23
|
+
};
|
|
33
24
|
},
|
|
34
25
|
sharedKey(privateKey, publicKey) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
});
|
|
47
|
-
return diffieHellman({ privateKey: nodePrivateKey, publicKey: nodePublicKey });
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return Buffer.from(curve25519.sharedKey(Buffer.from(privateKey), rawPublicKey));
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
sign(privateKey, message) {
|
|
54
|
-
return Buffer.from(curve25519.sign(Buffer.from(privateKey), Buffer.from(message)));
|
|
26
|
+
const nodePrivateKey = createPrivateKey({
|
|
27
|
+
format: "der",
|
|
28
|
+
key: Buffer.concat([PRIVATE_KEY_DER_PREFIX, Buffer.from(privateKey)]),
|
|
29
|
+
type: "pkcs8",
|
|
30
|
+
});
|
|
31
|
+
const nodePublicKey = createPublicKey({
|
|
32
|
+
format: "der",
|
|
33
|
+
key: Buffer.concat([PUBLIC_KEY_DER_PREFIX, Buffer.from(publicKey)]),
|
|
34
|
+
type: "spki",
|
|
35
|
+
});
|
|
36
|
+
return diffieHellman({ privateKey: nodePrivateKey, publicKey: nodePublicKey });
|
|
55
37
|
},
|
|
56
38
|
};
|
|
39
|
+
function isUnsupportedNativeCurveError(error) {
|
|
40
|
+
const code = error?.code;
|
|
41
|
+
return (code === "ERR_OSSL_EVP_UNSUPPORTED" ||
|
|
42
|
+
code === "ERR_CRYPTO_UNSUPPORTED_OPERATION" ||
|
|
43
|
+
code === "ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE");
|
|
44
|
+
}
|
|
45
|
+
export function createCurve(nativeBackend = nativeCurveBackend) {
|
|
46
|
+
let nativeAvailable = true;
|
|
47
|
+
return {
|
|
48
|
+
generateKeyPair() {
|
|
49
|
+
if (nativeAvailable) {
|
|
50
|
+
try {
|
|
51
|
+
return nativeBackend.generateKeyPair();
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
nativeAvailable = false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const keyPair = curve25519.generateKeyPair(randomBytes(32));
|
|
58
|
+
return {
|
|
59
|
+
private: Buffer.from(keyPair.private),
|
|
60
|
+
public: Buffer.from(keyPair.public),
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
sharedKey(privateKey, publicKey) {
|
|
64
|
+
if (privateKey.byteLength !== 32) {
|
|
65
|
+
throw new Error(`Invalid Signal private key length: ${privateKey.byteLength}.`);
|
|
66
|
+
}
|
|
67
|
+
const rawPublicKey = scrubSignalPublicKey(publicKey);
|
|
68
|
+
if (rawPublicKey.every((byte) => byte === 0)) {
|
|
69
|
+
throw new Error("X25519 failed during derivation for an invalid peer key.");
|
|
70
|
+
}
|
|
71
|
+
if (nativeAvailable) {
|
|
72
|
+
try {
|
|
73
|
+
return requireValidX25519SharedKey(nativeBackend.sharedKey(privateKey, rawPublicKey));
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (!isUnsupportedNativeCurveError(error)) {
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
nativeAvailable = false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return requireValidX25519SharedKey(curve25519.sharedKey(Buffer.from(privateKey), rawPublicKey));
|
|
83
|
+
},
|
|
84
|
+
sign(privateKey, message) {
|
|
85
|
+
return Buffer.from(curve25519.sign(Buffer.from(privateKey), Buffer.from(message)));
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function requireValidX25519SharedKey(sharedKey) {
|
|
90
|
+
const result = Buffer.from(sharedKey);
|
|
91
|
+
if (result.every((byte) => byte === 0)) {
|
|
92
|
+
throw new Error("X25519 failed during derivation for an invalid peer key.");
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
export const Curve = createCurve();
|
|
57
97
|
export function aesEncryptGCM(plaintext, key, iv, additionalData) {
|
|
58
98
|
const cipher = createCipheriv("aes-256-gcm", key, iv);
|
|
59
99
|
cipher.setAAD(additionalData);
|
|
60
100
|
return Buffer.concat([cipher.update(plaintext), cipher.final(), cipher.getAuthTag()]);
|
|
61
101
|
}
|
|
62
102
|
export function aesDecryptGCM(ciphertext, key, iv, additionalData) {
|
|
63
|
-
|
|
103
|
+
if (ciphertext.byteLength < AES_GCM_TAG_LENGTH) {
|
|
104
|
+
throw new Error(`AES-GCM ciphertext must include a ${AES_GCM_TAG_LENGTH}-byte authentication tag.`);
|
|
105
|
+
}
|
|
106
|
+
const decipher = createDecipheriv("aes-256-gcm", key, iv, {
|
|
107
|
+
authTagLength: AES_GCM_TAG_LENGTH,
|
|
108
|
+
});
|
|
64
109
|
const encrypted = ciphertext.subarray(0, ciphertext.byteLength - AES_GCM_TAG_LENGTH);
|
|
65
110
|
const tag = ciphertext.subarray(ciphertext.byteLength - AES_GCM_TAG_LENGTH);
|
|
66
111
|
decipher.setAAD(additionalData);
|
|
@@ -68,13 +113,22 @@ export function aesDecryptGCM(ciphertext, key, iv, additionalData) {
|
|
|
68
113
|
return Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
69
114
|
}
|
|
70
115
|
export function encodeBigEndian(value, length = 4) {
|
|
71
|
-
|
|
72
|
-
|
|
116
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
117
|
+
throw new Error("Big-endian values must be non-negative safe integers.");
|
|
118
|
+
}
|
|
119
|
+
if (!Number.isSafeInteger(length) || length < 1 || length > 1024) {
|
|
120
|
+
throw new Error("Big-endian lengths must be safe integers between 1 and 1024.");
|
|
121
|
+
}
|
|
122
|
+
let remaining = BigInt(value);
|
|
123
|
+
if (remaining >= 1n << BigInt(length * 8)) {
|
|
124
|
+
throw new Error(`Big-endian value ${value} does not fit in ${length} bytes.`);
|
|
125
|
+
}
|
|
126
|
+
const bytes = Buffer.alloc(length);
|
|
73
127
|
for (let index = length - 1; index >= 0; index -= 1) {
|
|
74
|
-
bytes[index] = remaining &
|
|
75
|
-
remaining
|
|
128
|
+
bytes[index] = Number(remaining & 0xffn);
|
|
129
|
+
remaining >>= 8n;
|
|
76
130
|
}
|
|
77
|
-
return
|
|
131
|
+
return bytes;
|
|
78
132
|
}
|
|
79
133
|
export function hkdf(input, length, params) {
|
|
80
134
|
return Buffer.from(hkdfSync("sha256", input, params.salt, params.info, length));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/crypto.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/crypto.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport {\n createCipheriv,\n createDecipheriv,\n createHash,\n createPrivateKey,\n createPublicKey,\n diffieHellman,\n generateKeyPairSync,\n hkdfSync,\n randomBytes,\n} from \"node:crypto\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\n\ntype Curve25519Module = {\n generateKeyPair(seed: Uint8Array): { private: Uint8Array; public: Uint8Array };\n sharedKey(privateKey: Uint8Array, publicKey: Uint8Array): Uint8Array;\n sign(privateKey: Uint8Array, message: Uint8Array): Uint8Array;\n};\n\nconst curve25519 = require(\"curve25519-js\") as Curve25519Module;\n\nconst AES_GCM_TAG_LENGTH = 16;\nconst PRIVATE_KEY_DER_PREFIX = Buffer.from([\n 48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32,\n]);\nconst PUBLIC_KEY_DER_PREFIX = Buffer.from([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0]);\n\nexport const KEY_BUNDLE_TYPE = Buffer.from([5]);\nexport const NOISE_MODE = \"Noise_XX_25519_AESGCM_SHA256\\0\\0\\0\\0\";\nexport const NOISE_WA_HEADER = Buffer.from([87, 65, 6, 3]);\n\nexport type KeyPair = {\n private: Buffer;\n public: Buffer;\n};\n\nexport type SignedKeyPair = {\n keyId: number;\n keyPair: KeyPair;\n signature: Buffer;\n};\n\ntype NativeCurveBackend = {\n generateKeyPair(): KeyPair;\n sharedKey(privateKey: Uint8Array, publicKey: Uint8Array): Buffer;\n};\n\ntype CurveApi = NativeCurveBackend & {\n sign(privateKey: Uint8Array, message: Uint8Array): Buffer;\n};\n\nconst nativeCurveBackend: NativeCurveBackend = {\n generateKeyPair() {\n const { privateKey, publicKey } = generateKeyPairSync(\"x25519\", {\n privateKeyEncoding: { format: \"der\", type: \"pkcs8\" },\n publicKeyEncoding: { format: \"der\", type: \"spki\" },\n });\n return {\n private: privateKey.subarray(\n PRIVATE_KEY_DER_PREFIX.length,\n PRIVATE_KEY_DER_PREFIX.length + 32,\n ),\n public: publicKey.subarray(PUBLIC_KEY_DER_PREFIX.length, PUBLIC_KEY_DER_PREFIX.length + 32),\n };\n },\n sharedKey(privateKey, publicKey) {\n const nodePrivateKey = createPrivateKey({\n format: \"der\",\n key: Buffer.concat([PRIVATE_KEY_DER_PREFIX, Buffer.from(privateKey)]),\n type: \"pkcs8\",\n });\n const nodePublicKey = createPublicKey({\n format: \"der\",\n key: Buffer.concat([PUBLIC_KEY_DER_PREFIX, Buffer.from(publicKey)]),\n type: \"spki\",\n });\n return diffieHellman({ privateKey: nodePrivateKey, publicKey: nodePublicKey });\n },\n};\n\nfunction isUnsupportedNativeCurveError(error: unknown): boolean {\n const code = (error as NodeJS.ErrnoException | undefined)?.code;\n return (\n code === \"ERR_OSSL_EVP_UNSUPPORTED\" ||\n code === \"ERR_CRYPTO_UNSUPPORTED_OPERATION\" ||\n code === \"ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE\"\n );\n}\n\nexport function createCurve(nativeBackend: NativeCurveBackend = nativeCurveBackend): CurveApi {\n let nativeAvailable = true;\n return {\n generateKeyPair(): KeyPair {\n if (nativeAvailable) {\n try {\n return nativeBackend.generateKeyPair();\n } catch {\n nativeAvailable = false;\n }\n }\n const keyPair = curve25519.generateKeyPair(randomBytes(32));\n return {\n private: Buffer.from(keyPair.private),\n public: Buffer.from(keyPair.public),\n };\n },\n\n sharedKey(privateKey: Uint8Array, publicKey: Uint8Array): Buffer {\n if (privateKey.byteLength !== 32) {\n throw new Error(`Invalid Signal private key length: ${privateKey.byteLength}.`);\n }\n const rawPublicKey = scrubSignalPublicKey(publicKey);\n if (rawPublicKey.every((byte) => byte === 0)) {\n throw new Error(\"X25519 failed during derivation for an invalid peer key.\");\n }\n if (nativeAvailable) {\n try {\n return requireValidX25519SharedKey(nativeBackend.sharedKey(privateKey, rawPublicKey));\n } catch (error) {\n if (!isUnsupportedNativeCurveError(error)) {\n throw error;\n }\n nativeAvailable = false;\n }\n }\n return requireValidX25519SharedKey(\n curve25519.sharedKey(Buffer.from(privateKey), rawPublicKey),\n );\n },\n\n sign(privateKey: Uint8Array, message: Uint8Array): Buffer {\n return Buffer.from(curve25519.sign(Buffer.from(privateKey), Buffer.from(message)));\n },\n };\n}\n\nfunction requireValidX25519SharedKey(sharedKey: Uint8Array): Buffer {\n const result = Buffer.from(sharedKey);\n if (result.every((byte) => byte === 0)) {\n throw new Error(\"X25519 failed during derivation for an invalid peer key.\");\n }\n return result;\n}\n\nexport const Curve = createCurve();\n\nexport function aesEncryptGCM(\n plaintext: Uint8Array,\n key: Uint8Array,\n iv: Uint8Array,\n additionalData: Uint8Array,\n): Buffer {\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n cipher.setAAD(additionalData);\n return Buffer.concat([cipher.update(plaintext), cipher.final(), cipher.getAuthTag()]);\n}\n\nexport function aesDecryptGCM(\n ciphertext: Uint8Array,\n key: Uint8Array,\n iv: Uint8Array,\n additionalData: Uint8Array,\n): Buffer {\n if (ciphertext.byteLength < AES_GCM_TAG_LENGTH) {\n throw new Error(\n `AES-GCM ciphertext must include a ${AES_GCM_TAG_LENGTH}-byte authentication tag.`,\n );\n }\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv, {\n authTagLength: AES_GCM_TAG_LENGTH,\n });\n const encrypted = ciphertext.subarray(0, ciphertext.byteLength - AES_GCM_TAG_LENGTH);\n const tag = ciphertext.subarray(ciphertext.byteLength - AES_GCM_TAG_LENGTH);\n decipher.setAAD(additionalData);\n decipher.setAuthTag(tag);\n return Buffer.concat([decipher.update(encrypted), decipher.final()]);\n}\n\nexport function encodeBigEndian(value: number, length = 4): Buffer {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(\"Big-endian values must be non-negative safe integers.\");\n }\n if (!Number.isSafeInteger(length) || length < 1 || length > 1024) {\n throw new Error(\"Big-endian lengths must be safe integers between 1 and 1024.\");\n }\n let remaining = BigInt(value);\n if (remaining >= 1n << BigInt(length * 8)) {\n throw new Error(`Big-endian value ${value} does not fit in ${length} bytes.`);\n }\n const bytes = Buffer.alloc(length);\n for (let index = length - 1; index >= 0; index -= 1) {\n bytes[index] = Number(remaining & 0xffn);\n remaining >>= 8n;\n }\n return bytes;\n}\n\nexport function hkdf(\n input: Uint8Array,\n length: number,\n params: { info: string; salt: Uint8Array },\n) {\n return Buffer.from(hkdfSync(\"sha256\", input, params.salt, params.info, length));\n}\n\nexport function sha256(input: Uint8Array): Buffer {\n return createHash(\"sha256\").update(input).digest();\n}\n\nexport function signedKeyPair(identityKeyPair: KeyPair, keyId: number): SignedKeyPair {\n const keyPair = Curve.generateKeyPair();\n const publicKey = ensureSignalPublicKey(keyPair.public);\n return {\n keyId,\n keyPair,\n signature: Curve.sign(identityKeyPair.private, publicKey),\n };\n}\n\nfunction ensureSignalPublicKey(publicKey: Uint8Array): Buffer {\n const buffer = Buffer.from(publicKey);\n return buffer.length === 33 ? buffer : Buffer.concat([KEY_BUNDLE_TYPE, buffer]);\n}\n\nfunction scrubSignalPublicKey(publicKey: Uint8Array): Buffer {\n const buffer = Buffer.from(publicKey);\n if (buffer.length === 33 && buffer[0] === KEY_BUNDLE_TYPE[0]) {\n return buffer.subarray(1);\n }\n if (buffer.length === 32) {\n return buffer;\n }\n throw new Error(`Invalid Signal public key length: ${buffer.length}.`);\n}\n"]}
|
|
@@ -3,12 +3,14 @@ export function decodeHandshakeMessage(data) {
|
|
|
3
3
|
const reader = new ProtoReader(data);
|
|
4
4
|
const message = {};
|
|
5
5
|
while (!reader.done()) {
|
|
6
|
-
const tag = reader.
|
|
6
|
+
const tag = reader.tag();
|
|
7
7
|
const field = tag >>> 3;
|
|
8
8
|
if (field === 2) {
|
|
9
|
+
requireBytesWireType(tag, field);
|
|
9
10
|
message.clientHello = decodeClientHello(reader.bytes());
|
|
10
11
|
}
|
|
11
12
|
else if (field === 4) {
|
|
13
|
+
requireBytesWireType(tag, field);
|
|
12
14
|
message.clientFinish = decodeClientFinish(reader.bytes());
|
|
13
15
|
}
|
|
14
16
|
else {
|
|
@@ -28,8 +30,9 @@ function decodeClientHello(data) {
|
|
|
28
30
|
const reader = new ProtoReader(data);
|
|
29
31
|
let ephemeral;
|
|
30
32
|
while (!reader.done()) {
|
|
31
|
-
const tag = reader.
|
|
33
|
+
const tag = reader.tag();
|
|
32
34
|
if (tag >>> 3 === 1) {
|
|
35
|
+
requireBytesWireType(tag, 1);
|
|
33
36
|
ephemeral = reader.bytes();
|
|
34
37
|
}
|
|
35
38
|
else {
|
|
@@ -43,12 +46,14 @@ function decodeClientFinish(data) {
|
|
|
43
46
|
let payload;
|
|
44
47
|
let staticKey;
|
|
45
48
|
while (!reader.done()) {
|
|
46
|
-
const tag = reader.
|
|
49
|
+
const tag = reader.tag();
|
|
47
50
|
const field = tag >>> 3;
|
|
48
51
|
if (field === 1) {
|
|
52
|
+
requireBytesWireType(tag, field);
|
|
49
53
|
staticKey = reader.bytes();
|
|
50
54
|
}
|
|
51
55
|
else if (field === 2) {
|
|
56
|
+
requireBytesWireType(tag, field);
|
|
52
57
|
payload = reader.bytes();
|
|
53
58
|
}
|
|
54
59
|
else {
|
|
@@ -60,6 +65,12 @@ function decodeClientFinish(data) {
|
|
|
60
65
|
...(staticKey === undefined ? {} : { staticKey }),
|
|
61
66
|
};
|
|
62
67
|
}
|
|
68
|
+
function requireBytesWireType(tag, field) {
|
|
69
|
+
const wireType = tag & 7;
|
|
70
|
+
if (wireType !== 2) {
|
|
71
|
+
throw new Error(`Invalid WhatsApp handshake wire type ${wireType} for length-delimited field ${field}.`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
63
74
|
function encodeServerHello(serverHello) {
|
|
64
75
|
const writer = new ProtoWriter();
|
|
65
76
|
writer.bytesField(1, serverHello.ephemeral);
|
|
@@ -85,7 +96,7 @@ class ProtoReader {
|
|
|
85
96
|
}
|
|
86
97
|
skip(wireType) {
|
|
87
98
|
if (wireType === 0) {
|
|
88
|
-
this
|
|
99
|
+
this.#skipVarint();
|
|
89
100
|
return;
|
|
90
101
|
}
|
|
91
102
|
if (wireType === 1) {
|
|
@@ -106,6 +117,13 @@ class ProtoReader {
|
|
|
106
117
|
}
|
|
107
118
|
throw new Error(`Unsupported WhatsApp handshake wire type: ${wireType}.`);
|
|
108
119
|
}
|
|
120
|
+
tag() {
|
|
121
|
+
const tag = this.uint32();
|
|
122
|
+
if (tag >>> 3 === 0) {
|
|
123
|
+
throw new Error("Invalid WhatsApp handshake protobuf field number 0.");
|
|
124
|
+
}
|
|
125
|
+
return tag;
|
|
126
|
+
}
|
|
109
127
|
uint32() {
|
|
110
128
|
let value = 0;
|
|
111
129
|
let shift = 0;
|
|
@@ -116,6 +134,9 @@ class ProtoReader {
|
|
|
116
134
|
if (byte === undefined) {
|
|
117
135
|
throw new Error("Unexpected end of WhatsApp handshake protobuf.");
|
|
118
136
|
}
|
|
137
|
+
if (shift === 28 && byte > 0x0f) {
|
|
138
|
+
throw new Error("Invalid WhatsApp handshake varint.");
|
|
139
|
+
}
|
|
119
140
|
value |= (byte & 0x7f) << shift;
|
|
120
141
|
if ((byte & 0x80) === 0) {
|
|
121
142
|
return value >>> 0;
|
|
@@ -124,6 +145,20 @@ class ProtoReader {
|
|
|
124
145
|
}
|
|
125
146
|
throw new Error("Invalid WhatsApp handshake varint.");
|
|
126
147
|
}
|
|
148
|
+
#skipVarint() {
|
|
149
|
+
for (let index = 0; index < 10; index += 1) {
|
|
150
|
+
this.#require(1);
|
|
151
|
+
const byte = this.#buffer[this.#offset];
|
|
152
|
+
this.#offset += 1;
|
|
153
|
+
if (byte === undefined || (index === 9 && byte > 1)) {
|
|
154
|
+
throw new Error("Invalid WhatsApp handshake varint.");
|
|
155
|
+
}
|
|
156
|
+
if ((byte & 0x80) === 0) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
throw new Error("Invalid WhatsApp handshake varint.");
|
|
161
|
+
}
|
|
127
162
|
#require(length) {
|
|
128
163
|
if (this.#offset + length > this.#buffer.length) {
|
|
129
164
|
throw new Error("Unexpected end of WhatsApp handshake protobuf.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAmBrC,MAAM,UAAU,sBAAsB,CAAC,IAAgB;IACrD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC;QACxB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAyB;IAC9D,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAgB;IACzC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,SAAqB,CAAC;IAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAmB,CAAC;IACxB,IAAI,SAAqB,CAAC;IAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC;QACxB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO;QACL,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QAC7C,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAyD;IAClF,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,WAAW;IACf,OAAO,GAAG,CAAC,CAAC;IACH,OAAO,CAAS;IAEzB,YAAY,IAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,QAAgB;QACnB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtB,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM;QACJ,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,KAAK,GAAG,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC;YAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,KAAK,KAAK,CAAC,CAAC;YACrB,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF;AAED,MAAM,WAAW;IACN,MAAM,GAAa,EAAE,CAAC;IAE/B,UAAU,CAAC,KAAa,EAAE,KAAiB;QACzC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,MAAM;QACJ,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,SAAS,GAAG,KAAK,KAAK,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,OAAO,SAAS,GAAG,GAAG,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YACtC,SAAS,MAAM,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/handshake.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\n\ntype BytesField = Buffer | undefined;\n\nexport type HandshakeMessage = {\n clientFinish?: {\n payload?: Buffer;\n staticKey?: Buffer;\n };\n clientHello?: {\n ephemeral?: Buffer;\n };\n serverHello?: {\n ephemeral: Uint8Array;\n payload: Uint8Array;\n staticKey: Uint8Array;\n };\n};\n\nexport function decodeHandshakeMessage(data: Uint8Array): HandshakeMessage {\n const reader = new ProtoReader(data);\n const message: HandshakeMessage = {};\n while (!reader.done()) {\n const tag = reader.tag();\n const field = tag >>> 3;\n if (field === 2) {\n requireBytesWireType(tag, field);\n message.clientHello = decodeClientHello(reader.bytes());\n } else if (field === 4) {\n requireBytesWireType(tag, field);\n message.clientFinish = decodeClientFinish(reader.bytes());\n } else {\n reader.skip(tag & 7);\n }\n }\n return message;\n}\n\nexport function encodeHandshakeMessage(message: HandshakeMessage): Buffer {\n const writer = new ProtoWriter();\n if (message.serverHello) {\n writer.bytesField(3, encodeServerHello(message.serverHello));\n }\n return writer.finish();\n}\n\nfunction decodeClientHello(data: Uint8Array): NonNullable<HandshakeMessage[\"clientHello\"]> {\n const reader = new ProtoReader(data);\n let ephemeral: BytesField;\n while (!reader.done()) {\n const tag = reader.tag();\n if (tag >>> 3 === 1) {\n requireBytesWireType(tag, 1);\n ephemeral = reader.bytes();\n } else {\n reader.skip(tag & 7);\n }\n }\n return ephemeral === undefined ? {} : { ephemeral };\n}\n\nfunction decodeClientFinish(data: Uint8Array): NonNullable<HandshakeMessage[\"clientFinish\"]> {\n const reader = new ProtoReader(data);\n let payload: BytesField;\n let staticKey: BytesField;\n while (!reader.done()) {\n const tag = reader.tag();\n const field = tag >>> 3;\n if (field === 1) {\n requireBytesWireType(tag, field);\n staticKey = reader.bytes();\n } else if (field === 2) {\n requireBytesWireType(tag, field);\n payload = reader.bytes();\n } else {\n reader.skip(tag & 7);\n }\n }\n return {\n ...(payload === undefined ? {} : { payload }),\n ...(staticKey === undefined ? {} : { staticKey }),\n };\n}\n\nfunction requireBytesWireType(tag: number, field: number): void {\n const wireType = tag & 7;\n if (wireType !== 2) {\n throw new Error(\n `Invalid WhatsApp handshake wire type ${wireType} for length-delimited field ${field}.`,\n );\n }\n}\n\nfunction encodeServerHello(serverHello: NonNullable<HandshakeMessage[\"serverHello\"]>): Buffer {\n const writer = new ProtoWriter();\n writer.bytesField(1, serverHello.ephemeral);\n writer.bytesField(2, serverHello.staticKey);\n writer.bytesField(3, serverHello.payload);\n return writer.finish();\n}\n\nclass ProtoReader {\n #offset = 0;\n readonly #buffer: Buffer;\n\n constructor(data: Uint8Array) {\n this.#buffer = Buffer.from(data);\n }\n\n done(): boolean {\n return this.#offset >= this.#buffer.length;\n }\n\n bytes(): Buffer {\n const length = this.uint32();\n this.#require(length);\n const value = this.#buffer.subarray(this.#offset, this.#offset + length);\n this.#offset += length;\n return value;\n }\n\n skip(wireType: number): void {\n if (wireType === 0) {\n this.#skipVarint();\n return;\n }\n if (wireType === 1) {\n this.#require(8);\n this.#offset += 8;\n return;\n }\n if (wireType === 2) {\n const length = this.uint32();\n this.#require(length);\n this.#offset += length;\n return;\n }\n if (wireType === 5) {\n this.#require(4);\n this.#offset += 4;\n return;\n }\n throw new Error(`Unsupported WhatsApp handshake wire type: ${wireType}.`);\n }\n\n tag(): number {\n const tag = this.uint32();\n if (tag >>> 3 === 0) {\n throw new Error(\"Invalid WhatsApp handshake protobuf field number 0.\");\n }\n return tag;\n }\n\n uint32(): number {\n let value = 0;\n let shift = 0;\n while (shift < 32) {\n this.#require(1);\n const byte = this.#buffer[this.#offset];\n this.#offset += 1;\n if (byte === undefined) {\n throw new Error(\"Unexpected end of WhatsApp handshake protobuf.\");\n }\n if (shift === 28 && byte > 0x0f) {\n throw new Error(\"Invalid WhatsApp handshake varint.\");\n }\n value |= (byte & 0x7f) << shift;\n if ((byte & 0x80) === 0) {\n return value >>> 0;\n }\n shift += 7;\n }\n throw new Error(\"Invalid WhatsApp handshake varint.\");\n }\n\n #skipVarint(): void {\n for (let index = 0; index < 10; index += 1) {\n this.#require(1);\n const byte = this.#buffer[this.#offset];\n this.#offset += 1;\n if (byte === undefined || (index === 9 && byte > 1)) {\n throw new Error(\"Invalid WhatsApp handshake varint.\");\n }\n if ((byte & 0x80) === 0) {\n return;\n }\n }\n throw new Error(\"Invalid WhatsApp handshake varint.\");\n }\n\n #require(length: number): void {\n if (this.#offset + length > this.#buffer.length) {\n throw new Error(\"Unexpected end of WhatsApp handshake protobuf.\");\n }\n }\n}\n\nclass ProtoWriter {\n readonly #parts: Buffer[] = [];\n\n bytesField(field: number, value: Uint8Array): void {\n this.uint32((field << 3) | 2);\n this.uint32(value.byteLength);\n this.#parts.push(Buffer.from(value));\n }\n\n finish(): Buffer {\n return Buffer.concat(this.#parts);\n }\n\n uint32(value: number): void {\n let remaining = value >>> 0;\n const bytes: number[] = [];\n while (remaining > 127) {\n bytes.push((remaining & 0x7f) | 0x80);\n remaining >>>= 7;\n }\n bytes.push(remaining);\n this.#parts.push(Buffer.from(bytes));\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/signal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAoC,MAAM,aAAa,CAAC;AAEjG,MAAM,UAAU,UAAU,CAAC,IAAa,EAAE,EAAU;IAClD,OAAO;QACL,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;YACzD,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE;SAClD;QACD,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,OAAO;QACL,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;YAChE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE;YACxD,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE;SACxD;QACD,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../../../src/servers/whatsapp-wire/signal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAoC,MAAM,aAAa,CAAC;AAEjG,MAAM,UAAU,UAAU,CAAC,IAAa,EAAE,EAAU;IAClD,OAAO;QACL,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;YACzD,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE;SAClD;QACD,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,OAAO;QACL,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;YAChE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE;YACxD,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE;SACxD;QACD,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC","sourcesContent":["import type { BinaryNode } from \"./binary-node.js\";\nimport { encodeBigEndian, KEY_BUNDLE_TYPE, type KeyPair, type SignedKeyPair } from \"./crypto.js\";\n\nexport function xmppPreKey(pair: KeyPair, id: number): BinaryNode {\n return {\n attrs: {},\n content: [\n { attrs: {}, content: encodeBigEndian(id, 3), tag: \"id\" },\n { attrs: {}, content: pair.public, tag: \"value\" },\n ],\n tag: \"key\",\n };\n}\n\nexport function xmppSignedPreKey(key: SignedKeyPair): BinaryNode {\n return {\n attrs: {},\n content: [\n { attrs: {}, content: encodeBigEndian(key.keyId, 3), tag: \"id\" },\n { attrs: {}, content: key.keyPair.public, tag: \"value\" },\n { attrs: {}, content: key.signature, tag: \"signature\" },\n ],\n tag: \"skey\",\n };\n}\n\nexport { KEY_BUNDLE_TYPE };\n"]}
|
|
@@ -10,16 +10,17 @@ export type WhatsAppServerManifest = {
|
|
|
10
10
|
apiRoot: string;
|
|
11
11
|
baileysWebSocketUrl: string;
|
|
12
12
|
messagesUrl: string;
|
|
13
|
-
|
|
13
|
+
phoneNumberUrl: string;
|
|
14
|
+
statusUrl: string;
|
|
14
15
|
};
|
|
15
16
|
env: {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
CRABLINE_WHATSAPP_RECORDER_PATH: string;
|
|
21
|
-
CRABLINE_WHATSAPP_SELF_JID: string;
|
|
17
|
+
CLOUD_API_ACCESS_TOKEN: string;
|
|
18
|
+
CLOUD_API_VERSION: string;
|
|
19
|
+
WA_BASE_URL: string;
|
|
20
|
+
WA_PHONE_NUMBER_ID: string;
|
|
22
21
|
};
|
|
22
|
+
graphVersion: string;
|
|
23
|
+
phoneNumberId: string;
|
|
23
24
|
provider: "whatsapp";
|
|
24
25
|
recorderPath: string;
|
|
25
26
|
selfJid: string;
|
|
@@ -32,8 +33,12 @@ export type StartedWhatsAppServer = {
|
|
|
32
33
|
export type StartWhatsAppServerParams = {
|
|
33
34
|
accessToken?: string | undefined;
|
|
34
35
|
adminToken?: string | undefined;
|
|
36
|
+
displayPhoneNumber?: string | undefined;
|
|
37
|
+
graphVersion?: string | undefined;
|
|
35
38
|
host?: string | undefined;
|
|
39
|
+
maxPendingInboundMessages?: number | undefined;
|
|
36
40
|
onEvent?: ServerEventObserver | undefined;
|
|
41
|
+
phoneNumberId?: string | undefined;
|
|
37
42
|
port?: number | undefined;
|
|
38
43
|
recorderPath?: string | undefined;
|
|
39
44
|
selfJid?: string | undefined;
|