UNPKG

lotusbail

Version:

WhatsApp API x Button by PL

11 lines (10 loc) 4.57 kB
Object.defineProperty(exports,"__esModule",{value:!0});exports.encodeSignedDeviceIdentity=exports.configureSuccessfulPairing=exports.generateRegistrationNode=exports.generateLoginNode=void 0; const boom_1=require("@hapi/boom"),crypto_1=require("crypto"),WAProto_1=require("../../WAProto"),Defaults_1=require("../Defaults"),WABinary_1=require("../WABinary"),crypto_2=require("./crypto"),generics_1=require("./generics"),signal_1=require("./signal"),getUserAgent=a=>({appVersion:{primary:a.version[0],secondary:a.version[1],tertiary:a.version[2]},platform:WAProto_1.proto.ClientPayload.UserAgent.Platform.WEB,releaseChannel:WAProto_1.proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,osVersion:"0.1", device:"Desktop",osBuildNumber:"0.1",localeLanguageIso6391:"en",mnc:"000",mcc:"000",localeCountryIso31661Alpha2:a.countryCode}),PLATFORM_MAP={"Mac OS":WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN,Windows:WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WIN32},getWebInfo=a=>{let b=WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER;a.syncFullHistory&&PLATFORM_MAP[a.browser[0]]&&(b=PLATFORM_MAP[a.browser[0]]);return{webSubPlatform:b}},getClientPayload=a=>{const b={connectType:WAProto_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN, connectReason:WAProto_1.proto.ClientPayload.ConnectReason.USER_ACTIVATED,userAgent:getUserAgent(a)};b.webInfo=getWebInfo(a);return b},generateLoginNode=(a,b)=>{const {user:d,device:f}=(0,WABinary_1.jidDecode)(a);a={...getClientPayload(b),passive:!1,pull:!0,username:+d,device:f};return WAProto_1.proto.ClientPayload.fromObject(a)};exports.generateLoginNode=generateLoginNode; const getPlatformType=a=>{a=a.toUpperCase();return WAProto_1.proto.DeviceProps.PlatformType[a]||WAProto_1.proto.DeviceProps.PlatformType.DESKTOP},generateRegistrationNode=({registrationId:a,signedPreKey:b,signedIdentityKey:d},f)=>{const g=(0,crypto_1.createHash)("md5").update(f.version.join(".")).digest();var c={os:f.browser[0],platformType:getPlatformType(f.browser[1]),requireFullSync:f.syncFullHistory};c=WAProto_1.proto.DeviceProps.encode(c).finish();a={...getClientPayload(f),passive:!1,pull:!1, devicePairingData:{buildHash:g,deviceProps:c,eRegid:(0,generics_1.encodeBigEndian)(a),eKeytype:Defaults_1.KEY_BUNDLE_TYPE,eIdent:d.public,eSkeyId:(0,generics_1.encodeBigEndian)(b.keyId,3),eSkeyVal:b.keyPair.public,eSkeySig:b.signature}};return WAProto_1.proto.ClientPayload.fromObject(a)};exports.generateRegistrationNode=generateRegistrationNode; const configureSuccessfulPairing=(a,{advSecretKey:b,signedIdentityKey:d,signalIdentities:f})=>{var g=a.attrs.id,c=(0,WABinary_1.getBinaryNodeChild)(a,"pair-success"),e=(0,WABinary_1.getBinaryNodeChild)(c,"device-identity");const k=(0,WABinary_1.getBinaryNodeChild)(c,"platform");var h=(0,WABinary_1.getBinaryNodeChild)(c,"device");c=(0,WABinary_1.getBinaryNodeChild)(c,"biz");if(!e||!h)throw new boom_1.Boom("Missing device-identity or device in pair success node",{data:a});a=null===c||void 0===c?void 0: c.attrs.name;h=h.attrs.jid;const {details:m,hmac:q,accountType:n}=WAProto_1.proto.ADVSignedDeviceIdentityHMAC.decode(e.content);c=(e=void 0!==n&&n===WAProto_1.proto.ADVEncryptionType.HOSTED)?Buffer.from([6,5]):Buffer.alloc(0);b=(0,crypto_2.hmacSign)(Buffer.concat([c,m]),Buffer.from(b,"base64"));if(0!==Buffer.compare(q,b))throw new boom_1.Boom("Invalid account signature");b=WAProto_1.proto.ADVSignedDeviceIdentity.decode(m);const {accountSignatureKey:l,accountSignature:r,details:p}=b;c=Buffer.concat([Buffer.from([6, 0]),p,d.public]);if(!crypto_2.Curve.verify(l,c,r))throw new boom_1.Boom("Failed to verify account signature");e=e?Buffer.from([6,6]):Buffer.from([6,1]);e=Buffer.concat([e,p,d.public,l]);b.deviceSignature=crypto_2.Curve.sign(d.private,e);d=(0,signal_1.createSignalIdentity)(h,l);e=(0,exports.encodeSignedDeviceIdentity)(b,!1);c=WAProto_1.proto.ADVDeviceIdentity.decode(b.details);g={tag:"iq",attrs:{to:WABinary_1.S_WHATSAPP_NET,type:"result",id:g},content:[{tag:"pair-device-sign",attrs:{},content:[{tag:"device-identity", attrs:{"key-index":c.keyIndex.toString()},content:e}]}]};return{creds:{account:b,me:{id:h,name:a},signalIdentities:[...(f||[]),d],platform:null===k||void 0===k?void 0:k.attrs.name},reply:g}};exports.configureSuccessfulPairing=configureSuccessfulPairing;const encodeSignedDeviceIdentity=(a,b)=>{var d;a={...a};b&&null!==(d=a.accountSignatureKey)&&void 0!==d&&d.length||(a.accountSignatureKey=null);return WAProto_1.proto.ADVSignedDeviceIdentity.encode(a).finish()};exports.encodeSignedDeviceIdentity=encodeSignedDeviceIdentity;