diff --git a/src/WABinary/decode.ts b/src/WABinary/decode.ts index e8a745c0b3e..b0183d858c2 100644 --- a/src/WABinary/decode.ts +++ b/src/WABinary/decode.ts @@ -167,6 +167,29 @@ export const decodeDecompressedBinaryNode = ( return jidEncode(user, server, device) } + const readFbJid = () => { + const user = readString(readByte()!) + const device = readInt(2) + const server = readString(readByte()!) + return `${user}:${device}@${server}` + } + + const readInteropJid = () => { + const user = readString(readByte()!) + const device = readInt(2) + const integrator = readInt(2) + + let server = 'interop' + const beforeServer = indexRef.index + try { + server = readString(readByte()!) + } catch (err) { + indexRef.index = beforeServer + } + + return `${integrator}-${user}:${device}@${server}` + } + const readString = (tag: number): string => { if (tag >= 1 && tag < SINGLE_BYTE_TOKENS.length) { return SINGLE_BYTE_TOKENS[tag] || '' @@ -188,6 +211,10 @@ export const decodeDecompressedBinaryNode = ( return readStringFromChars(readInt(4)) case TAGS.JID_PAIR: return readJidPair() + case TAGS.FB_JID: + return readFbJid() + case TAGS.INTEROP_JID: + return readInteropJid() case TAGS.AD_JID: return readAdJid() case TAGS.HEX_8: diff --git a/src/WABinary/encode.ts b/src/WABinary/encode.ts index f8f31ab492a..c883e6ed21d 100644 --- a/src/WABinary/encode.ts +++ b/src/WABinary/encode.ts @@ -182,6 +182,11 @@ const encodeBinaryNodeInner = ( return } + if (str === '') { + writeStringRaw(str) + return + } + const tokenIndex = TOKEN_MAP[str] if (tokenIndex) { if (typeof tokenIndex.dict === 'number') { @@ -193,7 +198,7 @@ const encodeBinaryNodeInner = ( writePackedBytes(str, 'nibble') } else if (isHex(str)) { writePackedBytes(str, 'hex') - } else if (str) { + } else { const decodedJid = jidDecode(str) if (decodedJid) { writeJid(decodedJid)