@cdteam/cdwa 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +112 -2
  3. package/dist/auth/index.cjs +191 -0
  4. package/dist/auth/index.cjs.map +1 -0
  5. package/dist/auth/index.d.cts +25 -0
  6. package/dist/auth/index.d.ts +25 -0
  7. package/dist/auth/index.js +183 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/binary/index.cjs +414 -0
  10. package/dist/binary/index.cjs.map +1 -0
  11. package/dist/binary/index.d.cts +92 -0
  12. package/dist/binary/index.d.ts +92 -0
  13. package/dist/binary/index.js +407 -0
  14. package/dist/binary/index.js.map +1 -0
  15. package/dist/crypto/index.cjs +207 -0
  16. package/dist/crypto/index.cjs.map +1 -0
  17. package/dist/crypto/index.d.cts +91 -0
  18. package/dist/crypto/index.d.ts +91 -0
  19. package/dist/crypto/index.js +201 -0
  20. package/dist/crypto/index.js.map +1 -0
  21. package/dist/index-CcMoHfPz.d.cts +70 -0
  22. package/dist/index-CcMoHfPz.d.ts +70 -0
  23. package/dist/index.cjs +1254 -0
  24. package/dist/index.cjs.map +1 -0
  25. package/dist/index.d.cts +97 -0
  26. package/dist/index.d.ts +97 -0
  27. package/dist/index.js +1224 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/messages/index.cjs +662 -0
  30. package/dist/messages/index.cjs.map +1 -0
  31. package/dist/messages/index.d.cts +122 -0
  32. package/dist/messages/index.d.ts +122 -0
  33. package/dist/messages/index.js +659 -0
  34. package/dist/messages/index.js.map +1 -0
  35. package/dist/signal/index.cjs +38 -0
  36. package/dist/signal/index.cjs.map +1 -0
  37. package/dist/signal/index.d.cts +30 -0
  38. package/dist/signal/index.d.ts +30 -0
  39. package/dist/signal/index.js +36 -0
  40. package/dist/signal/index.js.map +1 -0
  41. package/package.json +91 -4
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crypto/index.ts","../../src/messages/media.ts","../../src/binary/constants.ts","../../src/binary/encoder.ts","../../src/binary/decoder.ts","../../src/binary/index.ts","../../src/messages/builder.ts"],"names":["sha256","randomBytes"],"mappings":"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","file":"index.js","sourcesContent":["import { x25519 } from '@noble/curves/ed25519'\nimport { hkdf } from '@noble/hashes/hkdf'\nimport { sha256 } from '@noble/hashes/sha256'\nimport { gcm } from '@noble/ciphers/aes'\nimport { randomBytes } from 'crypto'\nimport type { KeyPair } from '../types/index.js'\n\n/**\n * Utilitários criptográficos de alta performance e segurança para o protocolo WhatsApp\n */\n\nexport class CryptoEngine {\n /**\n * Gera um novo par de chaves Curve25519 (Diffie-Hellman)\n */\n static generateKeyPair(): KeyPair {\n const priv = randomBytes(32)\n const pub = x25519.getPublicKey(priv)\n return {\n private: new Uint8Array(priv),\n public: new Uint8Array(pub),\n }\n }\n\n /**\n * Executa Diffie-Hellman compartilhado (Shared Secret) usando Curve25519\n */\n static sharedKey(privateKey: Uint8Array, publicKey: Uint8Array): Uint8Array {\n return x25519.getSharedSecret(privateKey, publicKey)\n }\n\n /**\n * HKDF baseado em SHA-256 para derivação segura de chaves (RFC 5869)\n */\n static deriveKey(\n secret: Uint8Array,\n info: string | Uint8Array,\n salt?: Uint8Array,\n length = 32\n ): Uint8Array {\n const infoBytes = typeof info === 'string' ? new TextEncoder().encode(info) : info\n return hkdf(sha256, secret, salt, infoBytes, length)\n }\n\n /**\n * Encriptação autenticada com AES-256-GCM\n */\n static aesGcmEncrypt(\n key: Uint8Array,\n plaintext: Uint8Array,\n iv: Uint8Array,\n additionalData?: Uint8Array\n ): Uint8Array {\n const cipher = gcm(key, iv, additionalData)\n return cipher.encrypt(plaintext)\n }\n\n /**\n * Decriptação autenticada com AES-256-GCM\n */\n static aesGcmDecrypt(\n key: Uint8Array,\n ciphertext: Uint8Array,\n iv: Uint8Array,\n additionalData?: Uint8Array\n ): Uint8Array {\n const cipher = gcm(key, iv, additionalData)\n return cipher.decrypt(ciphertext)\n }\n\n /**\n * Encripta um payload com uma senha mestra (para proteger credenciais at-rest)\n */\n static encryptAtRest(payload: Uint8Array, masterPassphrase: string): { iv: string; salt: string; data: string } {\n const salt = randomBytes(16)\n const iv = randomBytes(12)\n const key = hkdf(sha256, new TextEncoder().encode(masterPassphrase), salt, new TextEncoder().encode('cdwa-at-rest'), 32)\n const encrypted = this.aesGcmEncrypt(key, payload, iv)\n\n return {\n salt: Buffer.from(salt).toString('hex'),\n iv: Buffer.from(iv).toString('hex'),\n data: Buffer.from(encrypted).toString('base64'),\n }\n }\n\n /**\n * Decripta um payload protegido com a senha mestra\n */\n static decryptAtRest(\n encryptedBundle: { iv: string; salt: string; data: string },\n masterPassphrase: string\n ): Uint8Array {\n const salt = Buffer.from(encryptedBundle.salt, 'hex')\n const iv = Buffer.from(encryptedBundle.iv, 'hex')\n const data = Buffer.from(encryptedBundle.data, 'base64')\n const key = hkdf(sha256, new TextEncoder().encode(masterPassphrase), salt, new TextEncoder().encode('cdwa-at-rest'), 32)\n\n return this.aesGcmDecrypt(key, data, iv)\n }\n}\n\nexport * from './noise.js'\n\n","import { randomBytes, createCipheriv, createHmac } from 'crypto'\nimport { sha256 } from '@noble/hashes/sha256'\nimport { CryptoEngine } from '../crypto/index.js'\n\nexport type MediaType = 'image' | 'video' | 'audio' | 'document'\n\nexport interface EncryptedMediaResult {\n mediaKey: Uint8Array\n ciphertext: Uint8Array\n fileSha256: Uint8Array\n fileEncSha256: Uint8Array\n mac: Uint8Array\n}\n\nconst MEDIA_HKDF_INFO: Record<MediaType, string> = {\n image: 'WhatsApp Image Keys',\n video: 'WhatsApp Video Keys',\n audio: 'WhatsApp Audio Keys',\n document: 'WhatsApp Document Keys',\n}\n\n/**\n * Pipeline de criptografia E2EE para mídias do WhatsApp\n */\nexport class MediaCrypto {\n /**\n * Criptografa o arquivo de mídia de acordo com o padrão RFC do WhatsApp\n */\n static encryptMedia(mediaBuffer: Uint8Array, type: MediaType): EncryptedMediaResult {\n // 1. Gera uma chave aleatória de 32 bytes para a mídia\n const mediaKey = randomBytes(32)\n const info = MEDIA_HKDF_INFO[type]\n\n // 2. Expande para 112 bytes: [iv (16b), cipherKey (32b), macKey (32b), refKey (32b)]\n const expandedKeys = CryptoEngine.deriveKey(new Uint8Array(mediaKey), info, undefined, 112)\n const iv = expandedKeys.slice(0, 16)\n const cipherKey = expandedKeys.slice(16, 48)\n const macKey = expandedKeys.slice(48, 80)\n\n // 3. SHA-256 do arquivo original limpo\n const fileSha256 = sha256(mediaBuffer)\n\n // 4. Encripta o buffer com AES-256-CBC\n const cipher = createCipheriv('aes-256-cbc', Buffer.from(cipherKey), Buffer.from(iv))\n const encryptedBody = Buffer.concat([cipher.update(Buffer.from(mediaBuffer)), cipher.final()])\n\n // 5. Gera HMAC-SHA256 dos dados criptografados (truncado em 10 bytes)\n const hmac = createHmac('sha256', Buffer.from(macKey))\n hmac.update(Buffer.from(iv))\n hmac.update(encryptedBody)\n const fullMac = hmac.digest()\n const mac = fullMac.subarray(0, 10)\n\n // 6. Payload final encriptado: [encryptedBody] + [mac (10b)]\n const finalCiphertext = new Uint8Array(encryptedBody.length + mac.length)\n finalCiphertext.set(encryptedBody, 0)\n finalCiphertext.set(mac, encryptedBody.length)\n\n // 7. SHA-256 do arquivo encriptado\n const fileEncSha256 = sha256(finalCiphertext)\n\n return {\n mediaKey: new Uint8Array(mediaKey),\n ciphertext: finalCiphertext,\n fileSha256: new Uint8Array(fileSha256),\n fileEncSha256: new Uint8Array(fileEncSha256),\n mac: new Uint8Array(mac),\n }\n }\n}\n","/**\n * Constantes e tokens de indexação do protocolo WABinary do WhatsApp\n */\n\nexport const WABinaryConstants = {\n LIST_EMPTY: 0,\n STREAM_END: 2,\n DICTIONARY_0: 236,\n DICTIONARY_1: 237,\n DICTIONARY_2: 238,\n DICTIONARY_3: 239,\n LIST_8: 248,\n LIST_16: 249,\n JID_PAIR: 250,\n HEX_8: 251,\n BINARY_8: 252,\n BINARY_20: 253,\n BINARY_32: 254,\n NIBBLE_8: 255,\n SINGLE_BYTE_MAX: 256,\n}\n\n/**\n * Tabela de tokens simples comuns do WhatsApp\n */\nexport const SINGLE_BYTE_TOKENS = [\n '',\n '',\n '',\n '200',\n '400',\n '404',\n '500',\n '501',\n '502',\n 'action',\n 'add',\n 'after',\n 'archive',\n 'author',\n 'available',\n 'battery',\n 'before',\n 'body',\n 'broadcast',\n 'chat',\n 'clear',\n 'code',\n 'composing',\n 'config',\n 'contacts',\n 'count',\n 'create',\n 'debug',\n 'delete',\n 'demote',\n 'duplicate',\n 'encoding',\n 'error',\n 'false',\n 'filehash',\n 'from',\n 'g.us',\n 'group',\n 'groups_v2',\n 'height',\n 'ib',\n 'id',\n 'image',\n 'in',\n 'index',\n 'invis',\n 'item',\n 'jid',\n 'kind',\n 'last',\n 'leave',\n 'live',\n 'log',\n 'media',\n 'message',\n 'mimetype',\n 'missing',\n 'modify',\n 'name',\n 'notification',\n 'notify',\n 'out',\n 'owner',\n 'participant',\n 'paused',\n 'picture',\n 'played',\n 'presence',\n 'preview',\n 'promote',\n 'query',\n 'raw',\n 'read',\n 'receipt',\n 'received',\n 'recipient',\n 'recording',\n 'relay',\n 'remove',\n 'response',\n 'resume',\n 'retry',\n 's.whatsapp.net',\n 'seconds',\n 'set',\n 'size',\n 'status',\n 'subject',\n 'subscribe',\n 't',\n 'text',\n 'to',\n 'true',\n 'type',\n 'unarchive',\n 'unavailable',\n 'url',\n 'user',\n 'value',\n 'web',\n 'width',\n 'mute',\n 'read_only',\n 'admin',\n 'creator',\n 'short',\n 'update',\n 'powersave',\n 'rich',\n 'modify_tag',\n 'message_info',\n 'opaque',\n 'contact',\n 'unlink',\n 'iq',\n 'ping',\n 'version',\n 'client',\n 'pair-device',\n 'pair-success',\n 'success',\n 'failure',\n]\n\n// Mapa reverso para encoding ultra veloz O(1)\nexport const TOKEN_MAP = new Map<string, number>()\nSINGLE_BYTE_TOKENS.forEach((token, index) => {\n if (token) {\n TOKEN_MAP.set(token, index)\n }\n})\n","import { WABinaryConstants, TOKEN_MAP } from './constants.js'\nimport type { BinaryNode } from '../types/index.js'\n\n/**\n * Codificador de stanzas XML em bytes compatíveis com o WhatsApp Web (WABinary)\n */\nexport class BinaryEncoder {\n private buffer: number[] = []\n\n encode(node: BinaryNode): Uint8Array {\n this.buffer = []\n this.writeNode(node)\n return new Uint8Array(this.buffer)\n }\n\n private writeByte(byte: number) {\n this.buffer.push(byte & 0xff)\n }\n\n private writeBytes(bytes: Uint8Array | number[]) {\n for (let i = 0; i < bytes.length; i++) {\n this.writeByte(bytes[i]!)\n }\n }\n\n private writeInt16(value: number) {\n this.writeByte((value >> 8) & 0xff)\n this.writeByte(value & 0xff)\n }\n\n private writeInt32(value: number) {\n this.writeByte((value >> 24) & 0xff)\n this.writeByte((value >> 16) & 0xff)\n this.writeByte((value >> 8) & 0xff)\n this.writeByte(value & 0xff)\n }\n\n private writeListStart(size: number) {\n if (size === 0) {\n this.writeByte(WABinaryConstants.LIST_EMPTY)\n } else if (size < 256) {\n this.writeByte(WABinaryConstants.LIST_8)\n this.writeByte(size)\n } else {\n this.writeByte(WABinaryConstants.LIST_16)\n this.writeInt16(size)\n }\n }\n\n private writeString(str: string) {\n const tokenIndex = TOKEN_MAP.get(str)\n if (tokenIndex !== undefined) {\n this.writeByte(tokenIndex)\n return\n }\n\n const encoded = new TextEncoder().encode(str)\n if (encoded.length < 256) {\n this.writeByte(WABinaryConstants.BINARY_8)\n this.writeByte(encoded.length)\n } else {\n this.writeByte(WABinaryConstants.BINARY_32)\n this.writeInt32(encoded.length)\n }\n this.writeBytes(encoded)\n }\n\n private writeNode(node: BinaryNode) {\n const numAttrs = Object.keys(node.attrs).length\n const hasContent = node.content !== undefined\n\n // Um nó é serializado como uma lista de:\n // [tag, attrs, content (se houver)] -> tamanho total = 1 + (numAttrs * 2) + (hasContent ? 1 : 0)\n const listSize = 1 + numAttrs * 2 + (hasContent ? 1 : 0)\n this.writeListStart(listSize)\n\n // Escreve a Tag\n this.writeString(node.tag)\n\n // Escreve os Atributos (Pares chave=valor)\n for (const [key, value] of Object.entries(node.attrs)) {\n if (value !== undefined) {\n this.writeString(key)\n this.writeString(String(value))\n }\n }\n\n // Escreve o Conteúdo (Nós filhos, string ou buffer)\n if (hasContent) {\n if (Array.isArray(node.content)) {\n this.writeListStart(node.content.length)\n for (const child of node.content) {\n this.writeNode(child)\n }\n } else if (typeof node.content === 'string') {\n this.writeString(node.content)\n } else if (node.content instanceof Uint8Array) {\n if (node.content.length < 256) {\n this.writeByte(WABinaryConstants.BINARY_8)\n this.writeByte(node.content.length)\n } else {\n this.writeByte(WABinaryConstants.BINARY_32)\n this.writeInt32(node.content.length)\n }\n this.writeBytes(node.content)\n }\n }\n }\n}\n","import { WABinaryConstants, SINGLE_BYTE_TOKENS } from './constants.js'\nimport type { BinaryNode, BinaryNodeAttributes } from '../types/index.js'\n\n/**\n * Decodificador de stanzas do WhatsApp a partir de fluxos de bytes WABinary\n */\nexport class BinaryDecoder {\n private buffer: Uint8Array = new Uint8Array(0)\n private offset = 0\n\n decode(buffer: Uint8Array): BinaryNode {\n this.buffer = buffer\n this.offset = 0\n return this.readNode()\n }\n\n private readByte(): number {\n if (this.offset >= this.buffer.length) {\n throw new Error(`Unexpected EOF in WABinary stream at offset ${this.offset}`)\n }\n const b = this.buffer[this.offset]!\n this.offset += 1\n return b\n }\n\n private readBytes(length: number): Uint8Array {\n if (this.offset + length > this.buffer.length) {\n throw new Error(`Buffer underrun: requested ${length} bytes, have ${this.buffer.length - this.offset}`)\n }\n const slice = this.buffer.slice(this.offset, this.offset + length)\n this.offset += length\n return slice\n }\n\n private readInt16(): number {\n const b0 = this.readByte()\n const b1 = this.readByte()\n return (b0 << 8) | b1\n }\n\n private readInt32(): number {\n const b0 = this.readByte()\n const b1 = this.readByte()\n const b2 = this.readByte()\n const b3 = this.readByte()\n return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3\n }\n\n private readListSize(): number {\n const tag = this.readByte()\n if (tag === WABinaryConstants.LIST_EMPTY) {\n return 0\n }\n if (tag === WABinaryConstants.LIST_8) {\n return this.readByte()\n }\n if (tag === WABinaryConstants.LIST_16) {\n return this.readInt16()\n }\n throw new Error(`Invalid list tag byte: ${tag}`)\n }\n\n private readString(): string {\n const tag = this.readByte()\n\n if (tag < SINGLE_BYTE_TOKENS.length && SINGLE_BYTE_TOKENS[tag]) {\n return SINGLE_BYTE_TOKENS[tag]!\n }\n\n if (tag === WABinaryConstants.BINARY_8) {\n const length = this.readByte()\n const bytes = this.readBytes(length)\n return new TextDecoder().decode(bytes)\n }\n\n if (tag === WABinaryConstants.BINARY_32) {\n const length = this.readInt32()\n const bytes = this.readBytes(length)\n return new TextDecoder().decode(bytes)\n }\n\n throw new Error(`Unsupported string tag: ${tag} at offset ${this.offset - 1}`)\n }\n\n private readNode(): BinaryNode {\n const listSize = this.readListSize()\n if (listSize === 0) {\n throw new Error('Invalid empty node')\n }\n\n const tag = this.readString()\n const attrs: BinaryNodeAttributes = {}\n let remaining = listSize - 1\n\n // Lê pares de chave e valor de atributos\n while (remaining > 1) {\n const key = this.readString()\n const val = this.readString()\n attrs[key] = val\n remaining -= 2\n }\n\n let content: BinaryNode[] | string | Uint8Array | undefined\n\n if (remaining === 1) {\n const peekByte = this.buffer[this.offset]\n if (\n peekByte === WABinaryConstants.LIST_EMPTY ||\n peekByte === WABinaryConstants.LIST_8 ||\n peekByte === WABinaryConstants.LIST_16\n ) {\n const childCount = this.readListSize()\n const children: BinaryNode[] = []\n for (let i = 0; i < childCount; i++) {\n children.push(this.readNode())\n }\n content = children\n } else if (peekByte === WABinaryConstants.BINARY_8 || peekByte === WABinaryConstants.BINARY_32) {\n const nextTag = this.readByte()\n const length = nextTag === WABinaryConstants.BINARY_8 ? this.readByte() : this.readInt32()\n content = this.readBytes(length)\n } else {\n content = this.readString()\n }\n }\n\n return { tag, attrs, content }\n }\n}\n","import type { BinaryNode } from '../types/index.js'\nimport { BinaryEncoder } from './encoder.js'\nimport { BinaryDecoder } from './decoder.js'\n\nexport * from './constants.js'\nexport * from './encoder.js'\nexport * from './decoder.js'\n\n/**\n * Utilitários para manipulação de stanzas e nós binários (WABinary)\n */\nexport class BinaryProtocol {\n private static encoder = new BinaryEncoder()\n private static decoder = new BinaryDecoder()\n\n /**\n * Converte um BinaryNode para bytes WABinary\n */\n static encode(node: BinaryNode): Uint8Array {\n return this.encoder.encode(node)\n }\n\n /**\n * Converte bytes WABinary de volta para um BinaryNode estruturado\n */\n static decode(buffer: Uint8Array): BinaryNode {\n return this.decoder.decode(buffer)\n }\n\n /**\n * Constrói um nó binário com validação de formato\n */\n static createNode(\n tag: string,\n attrs: Record<string, string | number | undefined> = {},\n content?: BinaryNode[] | string | Uint8Array\n ): BinaryNode {\n return {\n tag,\n attrs,\n content,\n }\n }\n\n /**\n * Localiza o primeiro filho correspondente à tag fornecida\n */\n static getChildNode(node: BinaryNode, childTag: string): BinaryNode | undefined {\n if (Array.isArray(node.content)) {\n return node.content.find((child) => child.tag === childTag)\n }\n return undefined\n }\n\n /**\n * Extrai todos os nós filhos que batem com uma determinada tag\n */\n static getChildrenNodes(node: BinaryNode, childTag: string): BinaryNode[] {\n if (Array.isArray(node.content)) {\n return node.content.filter((child) => child.tag === childTag)\n }\n return []\n }\n\n /**\n * Converte o nó para representação em string legível para debug\n */\n static stringify(node: BinaryNode, indent = 0): string {\n const spaces = ' '.repeat(indent)\n const attrsStr = Object.entries(node.attrs)\n .map(([k, v]) => `${k}=\"${v}\"`)\n .join(' ')\n\n const openTag = attrsStr ? `<${node.tag} ${attrsStr}>` : `<${node.tag}>`\n\n if (!node.content) {\n return `${spaces}<${node.tag} ${attrsStr} />`\n }\n\n if (Array.isArray(node.content)) {\n const children = node.content.map((c) => this.stringify(c, indent + 1)).join('\\n')\n return `${spaces}${openTag}\\n${children}\\n${spaces}</${node.tag}>`\n }\n\n const contentStr =\n node.content instanceof Uint8Array\n ? `[Buffer ${node.content.length}b]`\n : String(node.content)\n\n return `${spaces}${openTag}${contentStr}</${node.tag}>`\n }\n}\n","import { BinaryProtocol } from '../binary/index.js'\nimport { MediaCrypto } from './media.js'\nimport type { AnyMessageContent, MessageOptions } from './types.js'\nimport type { BinaryNode } from '../types/index.js'\n\n/**\n * Construtor de nós e stanzas de mensagens do WhatsApp\n */\nexport class MessageBuilder {\n /**\n * Converte qualquer conteúdo de mensagem em uma stanza <message> pronta para transmissão\n */\n static async buildMessageNode(\n jid: string,\n content: AnyMessageContent,\n options: MessageOptions = {}\n ): Promise<{ node: BinaryNode; messageId: string }> {\n const messageId = `3EB0${Date.now().toString(16).toUpperCase()}${Math.floor(Math.random() * 10000)}`\n const timestamp = options.timestamp || Math.floor(Date.now() / 1000)\n\n const messageAttrs: Record<string, string | number | undefined> = {\n id: messageId,\n to: jid,\n type: 'text',\n t: timestamp,\n }\n\n let payloadContent: Uint8Array | BinaryNode[] = new Uint8Array(0)\n\n // 1. Mensagem de Texto\n if ('text' in content) {\n payloadContent = new TextEncoder().encode(content.text)\n }\n\n // 2. Mensagem de Imagem\n else if ('image' in content) {\n messageAttrs.type = 'media'\n messageAttrs.mediatype = 'image'\n const buffer = await this.resolveMediaBuffer(content.image)\n const encrypted = MediaCrypto.encryptMedia(buffer, 'image')\n\n payloadContent = [\n BinaryProtocol.createNode('image', {\n mimetype: content.mimetype || 'image/jpeg',\n caption: content.caption,\n fileLength: buffer.length,\n fileSha256: Buffer.from(encrypted.fileSha256).toString('base64'),\n fileEncSha256: Buffer.from(encrypted.fileEncSha256).toString('base64'),\n mediaKey: Buffer.from(encrypted.mediaKey).toString('base64'),\n }),\n ]\n }\n\n // 3. Mensagem de Vídeo\n else if ('video' in content) {\n messageAttrs.type = 'media'\n messageAttrs.mediatype = 'video'\n const buffer = await this.resolveMediaBuffer(content.video)\n const encrypted = MediaCrypto.encryptMedia(buffer, 'video')\n\n payloadContent = [\n BinaryProtocol.createNode('video', {\n mimetype: content.mimetype || 'video/mp4',\n caption: content.caption,\n gifPlayback: content.gifPlayback ? 'true' : undefined,\n ptv: content.ptv ? 'true' : undefined,\n fileLength: buffer.length,\n fileSha256: Buffer.from(encrypted.fileSha256).toString('base64'),\n fileEncSha256: Buffer.from(encrypted.fileEncSha256).toString('base64'),\n mediaKey: Buffer.from(encrypted.mediaKey).toString('base64'),\n }),\n ]\n }\n\n // 4. Mensagem de Áudio\n else if ('audio' in content) {\n messageAttrs.type = 'media'\n messageAttrs.mediatype = 'audio'\n const buffer = await this.resolveMediaBuffer(content.audio)\n const encrypted = MediaCrypto.encryptMedia(buffer, 'audio')\n\n payloadContent = [\n BinaryProtocol.createNode('audio', {\n mimetype: content.mimetype || (content.ptt ? 'audio/ogg; codecs=opus' : 'audio/mp4'),\n ptt: content.ptt ? 'true' : 'false',\n fileLength: buffer.length,\n fileSha256: Buffer.from(encrypted.fileSha256).toString('base64'),\n fileEncSha256: Buffer.from(encrypted.fileEncSha256).toString('base64'),\n mediaKey: Buffer.from(encrypted.mediaKey).toString('base64'),\n }),\n ]\n }\n\n // 5. Mensagem de Documento\n else if ('document' in content) {\n messageAttrs.type = 'media'\n messageAttrs.mediatype = 'document'\n const buffer = await this.resolveMediaBuffer(content.document)\n const encrypted = MediaCrypto.encryptMedia(buffer, 'document')\n\n payloadContent = [\n BinaryProtocol.createNode('document', {\n mimetype: content.mimetype,\n fileName: content.fileName || 'file',\n caption: content.caption,\n fileLength: buffer.length,\n fileSha256: Buffer.from(encrypted.fileSha256).toString('base64'),\n fileEncSha256: Buffer.from(encrypted.fileEncSha256).toString('base64'),\n mediaKey: Buffer.from(encrypted.mediaKey).toString('base64'),\n }),\n ]\n }\n\n // 6. Mensagem de Localização\n else if ('location' in content) {\n messageAttrs.type = 'location'\n payloadContent = [\n BinaryProtocol.createNode('location', {\n degreesLatitude: content.location.degreesLatitude,\n degreesLongitude: content.location.degreesLongitude,\n name: content.location.name,\n address: content.location.address,\n url: content.location.url,\n }),\n ]\n }\n\n // 7. Mensagem de Contato\n else if ('contact' in content) {\n messageAttrs.type = 'contact'\n payloadContent = [\n BinaryProtocol.createNode('contact', {\n displayName: content.contact.displayName,\n vcard: content.contact.vcard,\n }),\n ]\n }\n\n // 8. Mensagem de Múltiplos Contatos\n else if ('contacts' in content) {\n messageAttrs.type = 'contacts'\n const contactNodes = content.contacts.contacts.map((c) =>\n BinaryProtocol.createNode('contact', {\n displayName: c.displayName,\n vcard: c.vcard,\n })\n )\n payloadContent = [\n BinaryProtocol.createNode(\n 'contacts',\n { displayName: content.contacts.displayName },\n contactNodes\n ),\n ]\n }\n\n // 9. Reação\n else if ('react' in content) {\n messageAttrs.type = 'reaction'\n payloadContent = [\n BinaryProtocol.createNode('reaction', {\n text: content.react.text,\n targetId: content.react.key.id,\n targetJid: content.react.key.remoteJid,\n }),\n ]\n }\n\n // Monta o nó final da mensagem\n const node = BinaryProtocol.createNode('message', messageAttrs, payloadContent)\n\n return {\n node,\n messageId,\n }\n }\n\n /**\n * Resolve diferentes fontes de mídia (Buffer, Uint8Array ou URL) para um Uint8Array em memória\n */\n private static async resolveMediaBuffer(source: unknown): Promise<Uint8Array> {\n if (source instanceof Uint8Array) {\n return source\n }\n if (Buffer.isBuffer(source)) {\n return new Uint8Array(source)\n }\n if (typeof source === 'object' && source !== null && 'url' in source) {\n const res = await fetch((source as { url: string }).url)\n const arrayBuf = await res.arrayBuffer()\n return new Uint8Array(arrayBuf)\n }\n throw new Error('Unsupported media source format')\n }\n}\n"]}
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ // src/signal/index.ts
4
+ var SignalEngine = class {
5
+ keyStore;
6
+ constructor(keyStore) {
7
+ this.keyStore = keyStore;
8
+ }
9
+ /**
10
+ * Inicializa ou recupera uma sessão de Double Ratchet com um contato/dispositivo
11
+ */
12
+ async getSession(address) {
13
+ const sessions = await this.keyStore.get("session", [address]);
14
+ return sessions[address] || null;
15
+ }
16
+ /**
17
+ * Salva uma sessão atualizada após troca de chaves
18
+ */
19
+ async saveSession(address, sessionData) {
20
+ await this.keyStore.set({
21
+ session: {
22
+ [address]: sessionData
23
+ }
24
+ });
25
+ }
26
+ /**
27
+ * Gerenciamento de chaves de remetente (Sender Keys) para envio otimizado em grupos
28
+ */
29
+ async getGroupSenderKey(groupId, senderId) {
30
+ const keyKey = `${groupId}::${senderId}`;
31
+ const keys = await this.keyStore.get("sender-key", [keyKey]);
32
+ return keys[keyKey] || null;
33
+ }
34
+ };
35
+
36
+ exports.SignalEngine = SignalEngine;
37
+ //# sourceMappingURL=index.cjs.map
38
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/signal/index.ts"],"names":[],"mappings":";;;AAUO,IAAM,eAAN,MAAmB;AAAA,EAChB,QAAA;AAAA,EAER,YAAY,QAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,OAAA,EAA0D;AACzE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,IAA6B,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AACtF,IAAA,OAAO,QAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,OAAA,EAAiB,WAAA,EAAqD;AACtF,IAAA,MAAM,IAAA,CAAK,SAAS,GAAA,CAAI;AAAA,MACtB,OAAA,EAAS;AAAA,QACP,CAAC,OAAO,GAAG;AAAA;AACb,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,OAAA,EAAiB,QAAA,EAA2D;AAClG,IAAA,MAAM,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA;AACtC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,CAAS,IAA6B,YAAA,EAAc,CAAC,MAAM,CAAC,CAAA;AACpF,IAAA,OAAO,IAAA,CAAK,MAAM,CAAA,IAAK,IAAA;AAAA,EACzB;AACF","file":"index.cjs","sourcesContent":["import type { SignalKeyStore } from '../types/index.js'\n\nexport interface SignalSessionCipher {\n encrypt(plaintext: Uint8Array): Promise<{ type: number; body: Uint8Array }>\n decrypt(ciphertext: Uint8Array): Promise<Uint8Array>\n}\n\n/**\n * Motor de gerenciamento do protocolo Signal para criptografia ponta a ponta (E2EE)\n */\nexport class SignalEngine {\n private keyStore: SignalKeyStore\n\n constructor(keyStore: SignalKeyStore) {\n this.keyStore = keyStore\n }\n\n /**\n * Inicializa ou recupera uma sessão de Double Ratchet com um contato/dispositivo\n */\n async getSession(address: string): Promise<Record<string, unknown> | null> {\n const sessions = await this.keyStore.get<Record<string, unknown>>('session', [address])\n return sessions[address] || null\n }\n\n /**\n * Salva uma sessão atualizada após troca de chaves\n */\n async saveSession(address: string, sessionData: Record<string, unknown>): Promise<void> {\n await this.keyStore.set({\n session: {\n [address]: sessionData,\n },\n })\n }\n\n /**\n * Gerenciamento de chaves de remetente (Sender Keys) para envio otimizado em grupos\n */\n async getGroupSenderKey(groupId: string, senderId: string): Promise<Record<string, unknown> | null> {\n const keyKey = `${groupId}::${senderId}`\n const keys = await this.keyStore.get<Record<string, unknown>>('sender-key', [keyKey])\n return keys[keyKey] || null\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import { S as SignalKeyStore } from '../index-CcMoHfPz.cjs';
2
+
3
+ interface SignalSessionCipher {
4
+ encrypt(plaintext: Uint8Array): Promise<{
5
+ type: number;
6
+ body: Uint8Array;
7
+ }>;
8
+ decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;
9
+ }
10
+ /**
11
+ * Motor de gerenciamento do protocolo Signal para criptografia ponta a ponta (E2EE)
12
+ */
13
+ declare class SignalEngine {
14
+ private keyStore;
15
+ constructor(keyStore: SignalKeyStore);
16
+ /**
17
+ * Inicializa ou recupera uma sessão de Double Ratchet com um contato/dispositivo
18
+ */
19
+ getSession(address: string): Promise<Record<string, unknown> | null>;
20
+ /**
21
+ * Salva uma sessão atualizada após troca de chaves
22
+ */
23
+ saveSession(address: string, sessionData: Record<string, unknown>): Promise<void>;
24
+ /**
25
+ * Gerenciamento de chaves de remetente (Sender Keys) para envio otimizado em grupos
26
+ */
27
+ getGroupSenderKey(groupId: string, senderId: string): Promise<Record<string, unknown> | null>;
28
+ }
29
+
30
+ export { SignalEngine, type SignalSessionCipher };
@@ -0,0 +1,30 @@
1
+ import { S as SignalKeyStore } from '../index-CcMoHfPz.js';
2
+
3
+ interface SignalSessionCipher {
4
+ encrypt(plaintext: Uint8Array): Promise<{
5
+ type: number;
6
+ body: Uint8Array;
7
+ }>;
8
+ decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;
9
+ }
10
+ /**
11
+ * Motor de gerenciamento do protocolo Signal para criptografia ponta a ponta (E2EE)
12
+ */
13
+ declare class SignalEngine {
14
+ private keyStore;
15
+ constructor(keyStore: SignalKeyStore);
16
+ /**
17
+ * Inicializa ou recupera uma sessão de Double Ratchet com um contato/dispositivo
18
+ */
19
+ getSession(address: string): Promise<Record<string, unknown> | null>;
20
+ /**
21
+ * Salva uma sessão atualizada após troca de chaves
22
+ */
23
+ saveSession(address: string, sessionData: Record<string, unknown>): Promise<void>;
24
+ /**
25
+ * Gerenciamento de chaves de remetente (Sender Keys) para envio otimizado em grupos
26
+ */
27
+ getGroupSenderKey(groupId: string, senderId: string): Promise<Record<string, unknown> | null>;
28
+ }
29
+
30
+ export { SignalEngine, type SignalSessionCipher };
@@ -0,0 +1,36 @@
1
+ // src/signal/index.ts
2
+ var SignalEngine = class {
3
+ keyStore;
4
+ constructor(keyStore) {
5
+ this.keyStore = keyStore;
6
+ }
7
+ /**
8
+ * Inicializa ou recupera uma sessão de Double Ratchet com um contato/dispositivo
9
+ */
10
+ async getSession(address) {
11
+ const sessions = await this.keyStore.get("session", [address]);
12
+ return sessions[address] || null;
13
+ }
14
+ /**
15
+ * Salva uma sessão atualizada após troca de chaves
16
+ */
17
+ async saveSession(address, sessionData) {
18
+ await this.keyStore.set({
19
+ session: {
20
+ [address]: sessionData
21
+ }
22
+ });
23
+ }
24
+ /**
25
+ * Gerenciamento de chaves de remetente (Sender Keys) para envio otimizado em grupos
26
+ */
27
+ async getGroupSenderKey(groupId, senderId) {
28
+ const keyKey = `${groupId}::${senderId}`;
29
+ const keys = await this.keyStore.get("sender-key", [keyKey]);
30
+ return keys[keyKey] || null;
31
+ }
32
+ };
33
+
34
+ export { SignalEngine };
35
+ //# sourceMappingURL=index.js.map
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/signal/index.ts"],"names":[],"mappings":";AAUO,IAAM,eAAN,MAAmB;AAAA,EAChB,QAAA;AAAA,EAER,YAAY,QAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,OAAA,EAA0D;AACzE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,IAA6B,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AACtF,IAAA,OAAO,QAAA,CAAS,OAAO,CAAA,IAAK,IAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,OAAA,EAAiB,WAAA,EAAqD;AACtF,IAAA,MAAM,IAAA,CAAK,SAAS,GAAA,CAAI;AAAA,MACtB,OAAA,EAAS;AAAA,QACP,CAAC,OAAO,GAAG;AAAA;AACb,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,OAAA,EAAiB,QAAA,EAA2D;AAClG,IAAA,MAAM,MAAA,GAAS,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA;AACtC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,CAAS,IAA6B,YAAA,EAAc,CAAC,MAAM,CAAC,CAAA;AACpF,IAAA,OAAO,IAAA,CAAK,MAAM,CAAA,IAAK,IAAA;AAAA,EACzB;AACF","file":"index.js","sourcesContent":["import type { SignalKeyStore } from '../types/index.js'\n\nexport interface SignalSessionCipher {\n encrypt(plaintext: Uint8Array): Promise<{ type: number; body: Uint8Array }>\n decrypt(ciphertext: Uint8Array): Promise<Uint8Array>\n}\n\n/**\n * Motor de gerenciamento do protocolo Signal para criptografia ponta a ponta (E2EE)\n */\nexport class SignalEngine {\n private keyStore: SignalKeyStore\n\n constructor(keyStore: SignalKeyStore) {\n this.keyStore = keyStore\n }\n\n /**\n * Inicializa ou recupera uma sessão de Double Ratchet com um contato/dispositivo\n */\n async getSession(address: string): Promise<Record<string, unknown> | null> {\n const sessions = await this.keyStore.get<Record<string, unknown>>('session', [address])\n return sessions[address] || null\n }\n\n /**\n * Salva uma sessão atualizada após troca de chaves\n */\n async saveSession(address: string, sessionData: Record<string, unknown>): Promise<void> {\n await this.keyStore.set({\n session: {\n [address]: sessionData,\n },\n })\n }\n\n /**\n * Gerenciamento de chaves de remetente (Sender Keys) para envio otimizado em grupos\n */\n async getGroupSenderKey(groupId: string, senderId: string): Promise<Record<string, unknown> | null> {\n const keyKey = `${groupId}::${senderId}`\n const keys = await this.keyStore.get<Record<string, unknown>>('sender-key', [keyKey])\n return keys[keyKey] || null\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,93 @@
1
1
  {
2
2
  "name": "@cdteam/cdwa",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Modern, highly secure and modular WhatsApp Web Multi-Device protocol engine for Node.js and TypeScript",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./crypto": {
16
+ "types": "./dist/crypto/index.d.ts",
17
+ "import": "./dist/crypto/index.js",
18
+ "require": "./dist/crypto/index.cjs"
19
+ },
20
+ "./auth": {
21
+ "types": "./dist/auth/index.d.ts",
22
+ "import": "./dist/auth/index.js",
23
+ "require": "./dist/auth/index.cjs"
24
+ },
25
+ "./signal": {
26
+ "types": "./dist/signal/index.d.ts",
27
+ "import": "./dist/signal/index.js",
28
+ "require": "./dist/signal/index.cjs"
29
+ },
30
+ "./binary": {
31
+ "types": "./dist/binary/index.d.ts",
32
+ "import": "./dist/binary/index.js",
33
+ "require": "./dist/binary/index.cjs"
34
+ },
35
+ "./messages": {
36
+ "types": "./dist/messages/index.d.ts",
37
+ "import": "./dist/messages/index.js",
38
+ "require": "./dist/messages/index.cjs"
39
+ }
40
+ },
41
+ "files": [
42
+ "dist",
43
+ "proto",
44
+ "README.md",
45
+ "LICENSE"
46
+ ],
47
+ "scripts": {
48
+ "build": "tsup",
49
+ "dev": "tsup --watch",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest",
52
+ "lint": "tsc --noEmit",
53
+ "example": "tsx examples/example.ts",
54
+ "example:js": "node examples/example.js",
55
+ "example:cjs": "node examples/example.cjs",
56
+ "prepublishOnly": "npm run build"
57
+ },
58
+ "keywords": [
59
+ "whatsapp",
60
+ "whatsapp-web",
61
+ "baileys",
62
+ "multi-device",
63
+ "signal-protocol",
64
+ "noise-protocol",
65
+ "bot",
66
+ "chat"
67
+ ],
68
+ "author": "CDTeam",
69
+ "license": "MIT",
70
+ "dependencies": {
71
+ "@noble/ciphers": "^1.1.0",
72
+ "@noble/curves": "^1.7.0",
73
+ "@noble/hashes": "^1.6.0",
74
+ "protobufjs": "^7.4.0",
75
+ "ws": "^8.18.0"
76
+ },
77
+ "devDependencies": {
78
+ "@types/node": "^22.10.0",
79
+ "@types/ws": "^8.5.13",
80
+ "tsup": "^8.3.5",
81
+ "tsx": "^4.19.2",
82
+ "typescript": "^5.7.2",
83
+ "vitest": "^5.1.0"
84
+ },
85
+ "engines": {
86
+ "node": ">=18.0.0"
87
+ },
88
+ "allowScripts": {
89
+ "protobufjs@7.6.6": true,
90
+ "esbuild@0.28.2": true,
91
+ "esbuild@0.27.2": true
92
+ }
93
+ }