UNPKG

@dappaoffc/baileys-mod

Version:

WhatsApp API Modification By Dappa

199 lines (194 loc) 6.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAdditionalNode = exports.getBinaryNodeFilter = exports.binaryNodeToString = exports.getBinaryNodeMessages = exports.reduceBinaryNodeToDictionary = exports.assertNodeErrorFree = exports.getBinaryNodeChildUInt = exports.getBinaryNodeChildString = exports.getBinaryNodeChildBuffer = exports.getBinaryNodeChild = exports.getAllBinaryNodeChildren = exports.getBinaryNodeChildren = void 0; const boom_1 = require("@hapi/boom"); const WAProto_1 = require("../../WAProto"); const Utils_1 = require("../Utils") // some extra useful utilities const getBinaryNodeChildren = (node, childTag) => { if (Array.isArray(node?.content)) { return node.content.filter(item => item.tag === childTag) } return [] } exports.getBinaryNodeChildren = getBinaryNodeChildren; const getAllBinaryNodeChildren = ({ content }) => { if (Array.isArray(content)) { return content } return [] } exports.getAllBinaryNodeChildren = getAllBinaryNodeChildren; const getBinaryNodeChild = (node, childTag) => { if (Array.isArray(node?.content)) { return node?.content.find(item => item.tag === childTag) } } exports.getBinaryNodeChild = getBinaryNodeChild; const getBinaryNodeChildBuffer = (node, childTag) => { const child = getBinaryNodeChild(node, childTag)?.content if (Buffer.isBuffer(child) || child instanceof Uint8Array) { return child } } exports.getBinaryNodeChildBuffer = getBinaryNodeChildBuffer; const getBinaryNodeChildString = (node, childTag) => { const child = getBinaryNodeChild(node, childTag)?.content if (Buffer.isBuffer(child) || child instanceof Uint8Array) { return Buffer.from(child).toString('utf-8') } else if (typeof child === 'string') { return child } } exports.getBinaryNodeChildString = getBinaryNodeChildString; const getBinaryNodeChildUInt = (node, childTag, length) => { const buff = getBinaryNodeChildBuffer(node, childTag) if (buff) { return bufferToUInt(buff, length) } } exports.getBinaryNodeChildUInt = getBinaryNodeChildUInt; const assertNodeErrorFree = (node) => { const errNode = getBinaryNodeChild(node, 'error') if (errNode) { throw new boom_1.Boom(errNode.attrs.text || 'Unknown error', { data: +errNode.attrs.code }) } } exports.assertNodeErrorFree = assertNodeErrorFree; const reduceBinaryNodeToDictionary = (node, tag) => { const nodes = getBinaryNodeChildren(node, tag) const dict = nodes.reduce((dict, { attrs }) => { dict[attrs.name || attrs.config_code] = attrs.value || attrs.config_value return dict }, {}) return dict } exports.reduceBinaryNodeToDictionary = reduceBinaryNodeToDictionary; const getBinaryNodeMessages = ({ content }) => { const msgs = [] if (Array.isArray(content)) { for (const item of content) { if (item.tag === 'message') { msgs.push(WAProto_1.proto.WebMessageInfo.decode(item.content)) } } } return msgs } exports.getBinaryNodeMessages = getBinaryNodeMessages; function bufferToUInt(e, t) { let a = 0; for (let i = 0; i < t; i++) { a = 256 * a + e[i]; } return a; } const tabs = (n) => '\t'.repeat(n); function binaryNodeToString(node, i = 0) { if (!node) { return node; } if (typeof node === 'string') { return tabs(i) + node; } if (node instanceof Uint8Array) { return tabs(i) + Buffer.from(node).toString('hex'); } if (Array.isArray(node)) { return node.map((x) => tabs(i + 1) + binaryNodeToString(x, i + 1)).join('\n'); } const children = binaryNodeToString(node.content, i + 1); const tag = `<${node.tag} ${Object.entries(node.attrs || {}) .filter(([, v]) => v !== undefined) .map(([k, v]) => `${k}='${v}'`) .join(' ')}`; const content = children ? `>\n${children}\n${tabs(i)}</${node.tag}>` : '/>'; return tag + content; } exports.binaryNodeToString = binaryNodeToString; const getBinaryNodeFilter = (node) => { if (!Array.isArray(node)) return false return node.some(item => ['native_flow'].includes(item?.content?.[0]?.content?.[0]?.tag) || ['interactive', 'buttons', 'list'].includes(item?.content?.[0]?.tag) || ['hsm', 'biz'].includes(item?.tag) || ['bot'].includes(item?.tag) && item?.attrs?.biz_bot === '1' ) } exports.getBinaryNodeFilter = getBinaryNodeFilter; const getAdditionalNode = (name) => { if (name) name = name.toLowerCase() const ts = Utils_1.unixTimestampSeconds(new Date()) - 77980457 const order_response_name = { review_and_pay: 'order_details', review_order: 'order_status', payment_info: 'payment_info', payment_status: 'payment_status', payment_method: 'payment_method' } const flow_name = { cta_catalog: 'cta_catalog', mpm: 'mpm', call_request: 'call_permission_request', view_catalog: 'automated_greeting_message_view_catalog', wa_pay_detail: 'wa_payment_transaction_details', send_location: 'send_location', } if(order_response_name[name]) { return [{ tag: 'biz', attrs: { native_flow_name: order_response_name[name] }, content: [] }] } else if (flow_name[name] || name === 'interactive' || name === 'buttons') { return [{ tag: 'biz', attrs: { actual_actors: '2', host_storage: '2', privacy_mode_ts: `${ts}` }, content: [{ tag: 'engagement', attrs: { customer_service_state: 'open', conversation_state: 'open' } }, { tag: 'interactive', attrs: { type: 'native_flow', v: '1' }, content: [{ tag: 'native_flow', attrs: { v: '9', name: flow_name[name] ?? 'mixed', }, content: [] }] }] }] } else { return [{ tag: 'biz', attrs: { actual_actors: '2', host_storage: '2', privacy_mode_ts: `${ts}` }, content: [{ tag: 'engagement', attrs: { customer_service_state: 'open', conversation_state: 'open' } }] }] } } exports.getAdditionalNode = getAdditionalNode;