lotusbail
Version:
WhatsApp API x Button by PL
8 lines (7 loc) • 2.7 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0});exports.encodeWAM=void 0;const constants_1=require("./constants"),getHeaderBitLength=d=>256>d?2:3,encodeWAM=d=>{d.buffer=[];encodeWAMHeader(d);encodeEvents(d);console.log(d.buffer);var b=d.buffer.map(a=>a.length).reduce((a,c)=>a+c);b=Buffer.alloc(b);let e=0;for(const a of d.buffer)a.copy(b,e),e+=a.length;return b};exports.encodeWAM=encodeWAM;
function encodeWAMHeader(d){const b=Buffer.alloc(8);b.write("WAM",0,"utf8");b.writeUInt8(d.protocolVersion,3);b.writeUInt8(1,4);b.writeUInt16BE(d.sequence,5);b.writeUInt8(0,7);d.buffer.push(b)}function encodeGlobalAttributes(d,b){for(const [e,a]of Object.entries(b)){b=constants_1.WEB_GLOBALS.find(f=>(null===f||void 0===f?void 0:f.name)===e).id;let c=a;"boolean"===typeof c&&(c=c?1:0);d.buffer.push(serializeData(b,c,constants_1.FLAG_GLOBAL))}}
function encodeEvents(d){for(const [b,{props:e,globals:a}]of d.events.map(c=>Object.entries(c)[0])){encodeGlobalAttributes(d,a);const c=constants_1.WEB_EVENTS.find(g=>g.name===b),f=Object.entries(e);let h=!1;for(const [,g]of f)h||=null!==g;d.buffer.push(serializeData(c.id,-c.weight,h?constants_1.FLAG_EVENT:constants_1.FLAG_EVENT|constants_1.FLAG_EXTENDED));for(let g=0;g<f.length;g++){const [l,m]=f[g],n=c.props[l][0];h=g<f.length-1;let k=m;"boolean"===typeof k&&(k=k?1:0);d.buffer.push(serializeData(n,
k,h?constants_1.FLAG_EVENT:constants_1.FLAG_FIELD|constants_1.FLAG_EXTENDED))}}}
function serializeData(d,b,e){var a=getHeaderBitLength(d);let c=0;if(null===b){if(e===constants_1.FLAG_GLOBAL)return a=Buffer.alloc(a),serializeHeader(a,c,d,e),a}else{if("number"===typeof b&&Number.isInteger(b))return 0===b||1===b?(a=Buffer.alloc(a),serializeHeader(a,c,d,e|b+1<<4)):-128<=b&&128>b?(a=Buffer.alloc(a+1),c=serializeHeader(a,c,d,e|48),a.writeInt8(b,c)):-32768<=b&&32768>b?(a=Buffer.alloc(a+2),c=serializeHeader(a,c,d,e|64),a.writeInt16LE(b,c)):-2147483648<=b&&2147483648>b?(a=Buffer.alloc(a+
4),c=serializeHeader(a,c,d,e|80),a.writeInt32LE(b,c)):(a=Buffer.alloc(a+8),c=serializeHeader(a,c,d,e|112),a.writeDoubleLE(b,c)),a;if("number"===typeof b)return a=Buffer.alloc(a+8),c=serializeHeader(a,c,d,e|112),a.writeDoubleLE(b,c),a;if("string"===typeof b){const f=Buffer.byteLength(b,"utf8");256>f?(a=Buffer.alloc(a+1+f),c=serializeHeader(a,c,d,e|128),a.writeUint8(f,c++)):65536>f?(a=Buffer.alloc(a+2+f),c=serializeHeader(a,c,d,e|144),a.writeUInt16LE(f,c),c+=2):(a=Buffer.alloc(a+4+f),c=serializeHeader(a,
c,d,e|160),a.writeUInt32LE(f,c),c+=4);a.write(b,c,"utf8");return a}}throw"missing";}function serializeHeader(d,b,e,a){256>e?(d.writeUInt8(a,b),b+=1,d.writeUInt8(e,b),b+=1):(d.writeUInt8(a|constants_1.FLAG_BYTE,b),b+=1,d.writeUInt16LE(e,b),b+=2);return b};