@eryxenx/insta-chat 2.0.1 → 2.0.4
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.
- package/CHANGELOG.md +112 -8
- package/index.js +105 -1
- package/module/login.js +51 -1
- package/package.json +9 -2
- package/src/api/action/getAppState.js +19 -1
- package/src/api/action/getCookies.js +7 -1
- package/src/api/action/getCurrentUserID.js +7 -1
- package/src/api/action/setOptions.js +8 -1
- package/src/api/messaging/editMessage.js +19 -1
- package/src/api/messaging/markAsRead.js +7 -1
- package/src/api/messaging/resolvePhotoUrl.js +8 -1
- package/src/api/messaging/sendMessage.js +45 -1
- package/src/api/messaging/sendMessageSync.js +8 -1
- package/src/api/messaging/sendTypingIndicator.js +7 -1
- package/src/api/messaging/setMessageReaction.js +19 -1
- package/src/api/messaging/shareContact.js +19 -1
- package/src/api/messaging/unsendMessage.js +16 -1
- package/src/api/realtime/getInbox.js +7 -1
- package/src/api/realtime/listen.js +7 -1
- package/src/api/realtime/stopListening.js +7 -1
- package/src/api/threads/getThreadHistory.js +16 -1
- package/src/api/threads/getThreadInfo.js +59 -1
- package/src/api/threads/getThreadList.js +22 -1
- package/src/api/users/getUID.js +12 -1
- package/src/api/users/getUserInfo.js +37 -1
- package/src/api.js +253 -1
- package/src/app/InstaClient.js +352 -1
- package/src/app/InstaContext.js +46 -1
- package/src/app/createFcaClient.js +59 -1
- package/src/app/loadApiMethods.js +30 -1
- package/src/constants.js +53 -1
- package/src/cookies.js +41 -1
- package/src/deviceIdentity.js +31 -1
- package/src/events/normalizeEvent.js +142 -1
- package/src/http.js +381 -1
- package/src/messageContent.js +73 -1
- package/src/methods/inbox.js +464 -1
- package/src/methods/media.js +224 -1
- package/src/methods/message.js +115 -1
- package/src/methods/reactions.js +52 -1
- package/src/methods/thread.js +96 -1
- package/src/methods/typing.js +35 -1
- package/src/methods/user.js +33 -1
- package/src/session.js +94 -1
- package/src/threadDetail.js +36 -1
- package/src/utils/antiSuspension.js +284 -0
- package/src/utils/dataDir.js +11 -0
- package/src/utils/errors.js +106 -0
- package/src/utils/format.js +38 -1
- package/src/utils/messageStyle.js +57 -1
- package/src/utils/sessionGuard.js +93 -0
package/src/http.js
CHANGED
|
@@ -4,4 +4,384 @@
|
|
|
4
4
|
* Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.
|
|
5
5
|
* Original author credit must be retained in all copies and derivatives.
|
|
6
6
|
*/
|
|
7
|
-
const _0x229175=_0x14ac,_0x2ccc81=_0x14ac;function _0x14ac(_0x549232,_0x2dcc2b){_0x549232=_0x549232-0x8f;const _0x150762=_0x1507();let _0x14ac88=_0x150762[_0x549232];if(_0x14ac['EBHpZB']===undefined){var _0x4c508d=function(_0x470cc6){const _0x225dd0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x531063='',_0x45a4ad='';for(let _0xf4174=0x0,_0x270ef3,_0x5ad280,_0x3baed4=0x0;_0x5ad280=_0x470cc6['charAt'](_0x3baed4++);~_0x5ad280&&(_0x270ef3=_0xf4174%0x4?_0x270ef3*0x40+_0x5ad280:_0x5ad280,_0xf4174++%0x4)?_0x531063+=String['fromCharCode'](0xff&_0x270ef3>>(-0x2*_0xf4174&0x6)):0x0){_0x5ad280=_0x225dd0['indexOf'](_0x5ad280);}for(let _0x25e18b=0x0,_0x18d700=_0x531063['length'];_0x25e18b<_0x18d700;_0x25e18b++){_0x45a4ad+='%'+('00'+_0x531063['charCodeAt'](_0x25e18b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x45a4ad);};const _0x40ddf1=function(_0x481e4d,_0x15cf92){let _0x260e3c=[],_0x39b808=0x0,_0x358955,_0x2e72bf='';_0x481e4d=_0x4c508d(_0x481e4d);let _0x495324;for(_0x495324=0x0;_0x495324<0x100;_0x495324++){_0x260e3c[_0x495324]=_0x495324;}for(_0x495324=0x0;_0x495324<0x100;_0x495324++){_0x39b808=(_0x39b808+_0x260e3c[_0x495324]+_0x15cf92['charCodeAt'](_0x495324%_0x15cf92['length']))%0x100,_0x358955=_0x260e3c[_0x495324],_0x260e3c[_0x495324]=_0x260e3c[_0x39b808],_0x260e3c[_0x39b808]=_0x358955;}_0x495324=0x0,_0x39b808=0x0;for(let _0x12e49e=0x0;_0x12e49e<_0x481e4d['length'];_0x12e49e++){_0x495324=(_0x495324+0x1)%0x100,_0x39b808=(_0x39b808+_0x260e3c[_0x495324])%0x100,_0x358955=_0x260e3c[_0x495324],_0x260e3c[_0x495324]=_0x260e3c[_0x39b808],_0x260e3c[_0x39b808]=_0x358955,_0x2e72bf+=String['fromCharCode'](_0x481e4d['charCodeAt'](_0x12e49e)^_0x260e3c[(_0x260e3c[_0x495324]+_0x260e3c[_0x39b808])%0x100]);}return _0x2e72bf;};_0x14ac['bTOUQA']=_0x40ddf1,_0x14ac['JDayoF']={},_0x14ac['EBHpZB']=!![];}const _0x135ff5=_0x150762[0x0],_0x4ada10=_0x549232+_0x135ff5,_0x4b4989=_0x14ac['JDayoF'][_0x4ada10];return!_0x4b4989?(_0x14ac['VJhlJu']===undefined&&(_0x14ac['VJhlJu']=!![]),_0x14ac88=_0x14ac['bTOUQA'](_0x14ac88,_0x2dcc2b),_0x14ac['JDayoF'][_0x4ada10]=_0x14ac88):_0x14ac88=_0x4b4989,_0x14ac88;}function _0x1507(){const _0x213ed9=['qSoWWRhcMG','WPZdQG4vamk1','W5O6baVdN8oO','dmooBxFcHmoW','WO3dRSol','h8orwqen','naxcQ3rkWO0','WRZdRNRdOc9k','W43dRSkPWO/cIKq','jSoUqd4sza','drLTWPNdKse','WRVdGMFdSsLD','W7WwW67cPCkQWOu','W7JdGsxdJCk2Ea','BXH6tCoiWQC','ss9sqtG','W7/dOWiMB8or','WRdcIG4MzCks','W5eOW6ddQmkU','WRmaWQLjrq','WR3cT3OBp8oW','qJFdVmkk','smo6WPZcP1a','jXLNFmocWQS','gqJcPG','WOtcIsGoW4RcKW','WQSlnSoFWRTd','hSoxrXGy','WQWWmCozWQ1w','W7hdLNtcICoHW5GEWOicyCkPW7JcIa','WQ/dHqmTz8oq','C8knWP/dQCksW6K','FI3dUmkjzLu','WPddHmoBWQr9W6S','DCkOeZldS8ow','WPZcNsG1','WPtdJs8FCq','kmo8tZ0vjq','bvZcJCo+WPNdUq','mCoRiXy','pXtcOxDgWP0','WOFcUHCrW64','W7tcPguF','wbnXW5rTzq','DCkTegfjFdZcL3iSW73dOry','WRRcJJyPW40n','nmkBgmkQt8oK','jSkog8k1t8oO','C8oaWPW','W67cGSo2zSkwkW','bmoEWOlcSCodW70','qmomWPBdQaOn','WRvEfCkNWRNcOW','hCkPkCoI','W4ZdUae','WOpdO8oszNSg','CSoTWP3cV1Pt','suSNWQy3pW','WRhdLWK','nCo7rZutjG','WP4kWPDPuCkh','W73cLCkbn8orCa','pmkIW7XTWR4k','pSo2WRy','j0egkfhdLa','WQxcJSoXja','W6ywW7ddMmkSWPK','rLhdHW','W49PWOpdPhzV','mHFcTq','WRZdJ8kRmmoqmG','dCorCLW','aSozWPxcKSohW7e','C8knWOhdMCksW68','W4jPWOO','tmkkWRtcU8opW7e','WR7cPWa5W78r','W7hcUwuzECoY','WP3dOc8y','WQHlBmkfW7Gx','xSkpWP7dOSkwW60','WQTMW6xdONP4','WOSNWRTzsW','rLNdJrlcPZm','WRJcVmovWOLd','gmofwG','sJvHW4f0W6q','W77cPw4','WRSipmofWQTy','gIG/WOW','oaJcVNrD','WOldMCkNj8oxtq','ociVWRlcPq','WQhdQMtdTG','WQ7dV2ddVcGk','WQXYW7pdUxz7','hSonWOFcSCoaWR4','lCkPjSkFAG','CCohWRZcQK1r','EmkLW746W5iF','WQ7dGrKABCoo','rSkAW57dPmkzWRa','W6yHcaZdUCo5','W4hdHxzWW7JcHq','kmo0EtaokG','jbVcMmkG','DXbbwaFcIq','wKVdMG','gmo5rJ4xiG','DHDXBXVcGq','WORdQJivaCkO','mmkxlmoIwq','ArRdN8kUW6xcRbbbW7SSWRiw','WPZcNSoqiCokvW','WOZcImoyWRi','z8ovWPFcReO','oCk3W7f/WQK','D8kJqa','WO3cH8oyWQfJWQm','WQXMW6VdRNC','fcRcMmkk','mWxcPxHh','WORdS3ZcLq','a8oPWQBcUmo4','b8klh2NdVbm','nSo8WQhcKrP+','W7PvBSkzW7WhWPWoW791W7ZcMW','WQ8nn8op','gqtcRCkHcCom','wXJdLWJcPdS','WRlcGd3dQCk2WOe','W4vZWOS','W5uIbb7dKmoU','WQ/dLSkYc8omDa','agRcKmoBWPS','xdNdM1qQWO8','W7tcTe4gy8oW','i8kwW47dRqSd','lSodWOpdUmknW6G','mCkkhmkN','AYtdTCkoqa','W7ycumkxWQZcVaDSEG','WPVcImo9oSoxhW','BaVdL8k+ra','khe6W5f8WR8','W6GyW5FdICkg','AsRdRmkCtrC','WR/cTCo4bSo0','gw03WOe/WQiCWOFcU8k7WRBdPCkl','xfldIIxcQtS','WPZcPLZdOcnx','rcLQ','c8k7g8oKq8ot','iCk0gSkJvW','WOpcIY84W5VdJq','BSkRBhpdR8ow','q8oXWRNcNxz7','W7ldKNJcImoPWQzTWQuCrSke','zKCUAmoiWRO','WOpcGmojWQbzWR8','fYZcJSkaWQlcKq','WO3cRgNdRSo6zW','cMFcVrv6W4O','xepdJa/cQdm','WO/cICo9mq','W4RcM0y6zmoJ','W47dQSkPWQ0','WONdVtqoaq','W6NcK1T7o8kfemoDWQldSCo1W4K','i8oIWPZcN8ok','WRRdKSk2','W7ZcLf95WPbE','o8o8WQhcGa','j8o0WRHGW4qr','tee8WPeRja','WQbFeSkHWPFcTa','WP3cT3xdPmo1Da','bxtcGmo+WR3dRa','qvBdIa/cOtu','iSoGW60','WQNdKbOMqG','ESkPxhhcT8on','i8oQwW','W6hcS28w','W4FdRsW','nSkhaCkJsmoZ','CSkfWRVcTKXz','WOJdQSod','kmoDWPxcTSoQW7u','hqdcHW','W7xdLmkVWQNcKW','WOtdTJK','wmooWPNcPSohW7m','WQ/cIrO+W5ar','x8kPqgJdV8ow','WQOxk8onWRXy','WOhcIs8+W4C','gmoPtcipiG','DIZdVa','e8olWOtcTq','xCoUyfZcJCkU','WQxdQNVcVJvq','W7NdQdldLq','WO7cK8ohiColwq','cCkHkmo0xSox','WQhdR2JdOt8y','WRtcJH7dICkRWOm','qJT8','W6ldP8kfWQRcOq','imk7W7GLW71E','o1dcHZLY','W47dRSk5W7FdHuG','WQFdMmkoeSoj','aY/cOCkWWRNcIq','BIddVmkF','W43cIwibDmoN','wNOQWPu9','aslcVSkfWRi','jeam','W7VdGsVdLmk1WO8','CX1uAsVcIq','re8PWOO9iW','dahcVxPwWRm','W4BdOGNcLq','W5tcRZK','WONcMCoeWOjg','DGDADG','WQbFfq','WQ3dMmkXk8oKBq','W6BcHamOzCoy','WOFcJsi','W7lcQtVcP2q','WR4tlG','fW/cG8kBbmkn','ialcVCkgfq','hbOIWQWpks05','oGVcSM5cWPS','f8o2qKFcQa','C0hdJmkDaG','CWzhFrZcIq','k8o5WQH/WPu','WPZdHSofWR1OWQK','WPZcHYGP','WPBcVwm','WP/cVh7dTCoN','f8oFE0FcGmoG','zgxdKZxcIq','iCoxwIGpgG','W5THWOhdPxDJ','W57dNcOuW7JcMCkFW5m','WOZcUxBdTa','WRlcIX0L','WPFdPSoSrwC','W6vRWO7cGcdcHq','WQhdMM3dN8k2WP8','nmoJWR/cIrzZ','WRTdWRFcUSo5W5JcUCotW6ZdIx3dIW','tui6WOa2ja','tfVdLWpcQca','WO7dPXKvaCk7','EWL8A8ogWQu','W7/dU24tzmo2','F8oeqG','W6ydW7FdU8k6W5a','WP7dVxVcGa','W5mNksZdOW','y8okWQVcQKXF','W4/dJ8kJE8kkbG','CgVdUSkusae','emkLW7H5WR8c','WPlcQ38','wvKK','tYPDAa','WQPqaSo9WPFcVW','phhcMGr7','W6qwW7NdPmkSWPK','mu44omkwW7e','WRpcHcJdMq','AbldMCkOW6BcQM9WW6SzWPyFWQi','W4BdUqRcNq','W4hdRWdcGSky','W6dcT2Cb','WPu+WOjTsq','mCkwogtdRIC','WOGNWPP8Ea','ymkCWPNdNmkX','WORdQxZcIq','WOtdPSovzfWw','aHyK','W5i/ca','WONcMCoNjSoqxW','W6DPW5dcKaFcNG','zSoyxSkcDmoQW6lcQmol','WP5yW6ZdP2X7','iCkLW7vnWQ0','Brn6FmooWQ0','WQDLW5VdUwXS','FIRdQ8ki','E8kdWR3dGmkx','fSooWPxcPSor','rdv5W6PUW7q','WPhdTwRcKKlcNq','WRpcNWa5W5ar','fb/cP8kF','hmoAzfRcLG','oCkobSkHuSoV','WOtdRtWdFq','W7VcPuyDD8oW','W4RdHCkmW7feWQK','DmojWPhcU1bc','FfbAD8oxWQ0','pCkFhmk2vCk9','eCoiWRtcOmorW7C','c8ojEcG3','B8knWPZdQmoaWQy','kCk0W5L+WR8m','WR7cImo0WRb6','gmofwIevjq','WOldKCoJiSoohq','meRcMG','jSo6WQdcIY9X','DmoxWPFcRu0B','zmomWOZcUW','WPpdPSouBuut','W71QWO/cMdC','WQ3dKr4H','WOWgWPbK','gSkxdMJdQbW','j8osWO9PWRq','bmkxnhi','n8oVwJK','emoDWPS','W7ldGaq7BCoE','W7xdLmk5WRxcIW','WPywpmoA','ix/cIWnaW4y','qSkEW4tdPCksWQjxhSoTb8oUW7S','WRVdVNVdTGPm','W4xdPry','W7pdGX46W45q','W6NdNLH5WOfl','FXzbFHZdIW','nCo7rci','wc99W50','jSkFgSkVsmoG','W77cJh40Ea','nmo/wIivja','W7hcUMmxFSoJ','CIVdICkAv1S','nLJcJa','AgCFWQaheq','WOVcHSobWRz+W6G','WO8wWOzO','j8o0WRL+WQLm','dH46WO3cGNa','WP3dUxVcON7cIW','W63dPJpdMa','tCkEuKNcG8oY','wetcNIJcKNq','WOJcUxFdSSoX','WRzua8k3','WPZcJSo7oa','WQhcKZNcKSk/WOu','lSo8WRLS','B8kJs3G','W4RdQH/cN8koW6i','WPpcUw/dPmo8','sCkjnXRdLSkRdY/dH3OYCG','uehdU8kMga','W7WEWQZcVSo6W50','W4ZdQCkzWRJcLKW','vLRdKXtcNG','W6DLWPpcKaNcHW','mmkfrCktDCkR','WQNdHCk3oG','WQdcO8oLWR5n','pvm+imkxW6y','eSkkWRFcSCobW7S','W43dHSo/','WONcMCoCWR9JWQu','WR7dMxddHW8','e8opWRhcOa','WOJcNCoKpCoixa','mmkxn8oHwCoy','B8kYt3VdQmoz','WQVcIcG','t14JWOKXmW','WPldVx3cKNtcKa','jCk3W6DLWQKy','qL03','wX5NW4DIW7m','oK47o8kxWOtcNKVdNZFcSa','mSozW4JcVSojWRu','CIBdRCkEurC','W5ldPWdcNSkiW74','W7jHWOK','b8o4WPxcPCoxW7u','ivFcHHjH','fZZcVSkj','oxaGW5y','oMdcRtbz','bCkDmW','WQFcHdK','WRGLWO5+Ea','WPZcK8oMomkurq','qeeK','W6fRWQ7cGbtcGW','WOVcM8ovWQn+WQK','WQddPvNdSJre','oCo0WQjJWRzl','hYJcPmkSWPG','kNC2W59MW7u','tfJdKblcOZO','iSkZWR8XWRPw','W61rWQ7cRJC','lq3cVNv/WP8','WRtcJrOEW5Wn','WQ1qfCkaWPVcOG','W5/dHWhdNCk5','W5pdOGRcNSk7W7a','W6/cO0ldMXjO','WRpcTZGUW50','B0mhWPCV','a8kfWPNcUSoaW78','WQhcHYe0W4pcJa','gmkdW5dcL8okW6i','WRRdS1hdPdq','W4P3WPJcHXxcGW','iCoglmkVvCo3','EmkNwN0','xKVdJCoCA20','gCkPkmoKvq','W5m3fWhdLmoV','W4xdSXxcN8kzW6u','d8kCog7dQq','omo8WQb+','W7fLWONcLq','WO3cNdiYW4hdJW','mqRcGxPDWP8','zmoeWPxcUXnz','W7JdPZm','WR8fnCoEWQ0','WO7cGmocWRC','EHrPz8oj','Bue9WPe9pG','WR/cGWyMW5aB','pCk3W61EWQma','yXVcNGRcRZ8','WQ0bgmoF','WRxcTv7dHSoo','hq7cJ1ldSwlcSCo4BXZcI8kiuq','WPJcVmoKW7ZdKbZcG1FcUbhdUSoUW4u','EYFdHSkFuuK'];_0x1507=function(){return _0x213ed9;};return _0x1507();}(function(_0x30ea7b,_0x5c5a5d){const _0x2e1260=_0x14ac,_0x4f85bf=_0x14ac,_0x3cb660=_0x30ea7b();while(!![]){try{const _0x46ffec=-parseInt(_0x2e1260(0x245,'cSS!'))/0x1+parseInt(_0x4f85bf(0x110,'Svtm'))/0x2+-parseInt(_0x4f85bf(0x17f,'au69'))/0x3+parseInt(_0x4f85bf(0x134,'Gqsk'))/0x4*(-parseInt(_0x4f85bf(0x197,'I0bJ'))/0x5)+parseInt(_0x2e1260(0x1f2,'A[1x'))/0x6+-parseInt(_0x4f85bf(0x126,'cSS!'))/0x7+parseInt(_0x2e1260(0xfb,'p9qQ'))/0x8*(parseInt(_0x2e1260(0x1d3,'$aWw'))/0x9);if(_0x46ffec===_0x5c5a5d)break;else _0x3cb660['push'](_0x3cb660['shift']());}catch(_0x4575ac){_0x3cb660['push'](_0x3cb660['shift']());}}}(_0x1507,0x3416f));const axios=require(_0x229175(0xb7,'Kn1Q')),crypto=require(_0x229175(0x1a7,'Ou9L')),{wrapper}=require(_0x2ccc81(0x21b,'N7ud')+_0x2ccc81(0x1cd,'o9DQ')+_0x2ccc81(0xd9,'*oiB')+_0x2ccc81(0x248,'Ea#r')),{CookieJar}=require(_0x2ccc81(0xa2,'&R5%')+_0x229175(0x222,'@JAM')),USER_AGENT=_0x2ccc81(0x1b8,'QC*x')+_0x229175(0x224,'l%R1')+'(Windo'+_0x2ccc81(0x176,'8FO9')+_0x229175(0x23a,'MP!*')+_0x229175(0x208,'Ea#r')+_0x2ccc81(0xbb,'o9DQ')+'AppleW'+_0x2ccc81(0xf9,'*gWI')+_0x229175(0x11b,'kaA[')+_0x2ccc81(0x1b4,'*oiB')+_0x229175(0x1cf,'8FO9')+_0x2ccc81(0x189,'MP!*')+_0x2ccc81(0x1b9,'MP!*')+_0x2ccc81(0xe1,'O4rM')+_0x2ccc81(0x188,'I0bJ')+_0x2ccc81(0x175,'au69')+_0x229175(0x181,'Svtm')+_0x2ccc81(0xf0,'AXZJ'),IG_APP_ID=_0x2ccc81(0x124,'I0bJ')+_0x229175(0x215,'q4PN')+_0x229175(0xea,'q4PN'),ASBD_ID=_0x2ccc81(0x198,'a4fr'),ORIGIN=_0x229175(0x147,'Gqsk')+_0x2ccc81(0x163,'o9DQ')+_0x229175(0x228,'8FO9')+_0x229175(0x1e1,'Svtm')+'m',QPL_ACTIVE_FLOW_IDS=_0x2ccc81(0x206,'N7ud')+_0x229175(0xcd,'8FO9');function jazoest(_0x180094){const _0x145e87=_0x229175,_0x5b78ea=_0x2ccc81,_0x781853={'nfuHN':function(_0x5bc133,_0x2a5249){return _0x5bc133(_0x2a5249);}};let _0x25dc49=0x0;for(const _0x567d98 of _0x781853[_0x145e87(0x1aa,'JeqC')](String,_0x180094))_0x25dc49+=_0x567d98[_0x5b78ea(0x1f5,'&R5%')+_0x5b78ea(0x1d0,'l%R1')](0x0);return'2'+_0x25dc49;}class HttpClient{constructor(_0x412a57){const _0x2a429b=_0x2ccc81,_0x1f52d0=_0x2ccc81,_0x3d205e={'LdecR':_0x2a429b(0xcb,'DoSO'),'EIlSM':function(_0x17c57c,_0x35327a){return _0x17c57c(_0x35327a);}};this[_0x1f52d0(0x17c,'$^!9')]=_0x412a57;if(!this[_0x2a429b(0x170,'*W7@')][_0x2a429b(0xff,'q4PN')+_0x2a429b(0x24a,'$^!9')])this[_0x1f52d0(0xc7,'@JAM')][_0x2a429b(0xd3,'l%R1')+_0x2a429b(0x1a1,'ono3')]=crypto[_0x1f52d0(0x108,'I6!m')+_0x1f52d0(0x122,'gECY')](0x10)[_0x2a429b(0x11a,'Ea#r')+'ng'](_0x3d205e[_0x1f52d0(0xfe,'*xCW')]);this[_0x2a429b(0x130,'u7a5')]=new CookieJar();for(const [_0x31d366,_0x2eb2aa]of Object[_0x1f52d0(0x24b,'Ou9L')+'s'](this[_0x2a429b(0xe6,'&R5%')])){try{this[_0x2a429b(0xdf,'[Y9O')][_0x1f52d0(0xa5,'8FO9')+_0x2a429b(0x90,'*gWI')+'c'](_0x31d366+'='+_0x2eb2aa+(_0x1f52d0(0x220,'MP!*')+_0x2a429b(0x1f7,'$^!9')+_0x2a429b(0x190,'$^!9')+_0x2a429b(0x11c,'&R5%')+_0x2a429b(0xd8,'au69')+'/'),ORIGIN);}catch(_0xcb7792){}}this[_0x1f52d0(0x20c,'DoSO')]=_0x3d205e[_0x1f52d0(0xa3,'kaA[')](wrapper,axios[_0x2a429b(0x1ab,'EEmB')]({'jar':this[_0x1f52d0(0x14f,'cSS!')],'withCredentials':!![],'headers':{'User-Agent':USER_AGENT,'X-IG-App-ID':IG_APP_ID},'timeout':0x7530}));}[_0x229175(0x1dd,'$aWw')+_0x2ccc81(0x191,'A[1x')](_0x56e4c0){const _0xfbe08b=_0x229175,_0x1a2497=_0x229175,_0x237bbd=this['jar'][_0xfbe08b(0x20e,'p9qQ')+_0xfbe08b(0xaf,'Ou9L')+'nc'](ORIGIN),_0x410779=_0x237bbd[_0x1a2497(0x8f,'l%R1')](_0x443ad4=>_0x443ad4[_0xfbe08b(0xf6,'QC*x')]===_0x56e4c0);return _0x410779?_0x410779[_0xfbe08b(0x1bf,'GDm3')]:this[_0x1a2497(0x178,'xcqS')][_0x56e4c0];}[_0x229175(0xb4,'kaA[')](){const _0x527e8f=_0x229175,_0x5eeb31=_0x229175;return crypto[_0x527e8f(0x1f3,'8h^!')+_0x5eeb31(0x23e,'JeqC')]();}[_0x2ccc81(0x1fa,'M9oU')+_0x2ccc81(0x1f1,'l%R1')+_0x2ccc81(0x12f,'DoSO')](){const _0x372826=_0x2ccc81,_0x56b667=_0x229175,_0x430f68={'PUyZI':function(_0x48872b,_0x122acb){return _0x48872b(_0x122acb);},'odRXH':function(_0x2dc15d,_0x43f5d5){return _0x2dc15d|_0x43f5d5;}},_0x1e94e7=_0x430f68[_0x372826(0x229,'Ou9L')](BigInt,Date[_0x372826(0x1a5,'p9qQ')]()),_0x41d000=_0x430f68[_0x372826(0x231,'u7a5')](BigInt,Math[_0x56b667(0x22f,'!U)@')](Math[_0x56b667(0x210,'M9oU')]()*0x400000));return _0x430f68[_0x56b667(0x180,'*xCW')](_0x1e94e7<<0x16n,_0x41d000)[_0x56b667(0x1d6,'Kn1Q')+'ng']();}[_0x229175(0x239,'8h^!')+_0x2ccc81(0x150,'Lbqa')+_0x229175(0x1c3,'Vq76')](_0x2b994d){const _0x5824eb=_0x229175,_0x1a183b=_0x2ccc81;this[_0x5824eb(0xd1,'o9DQ')+'n']=_0x2b994d||null;if(_0x2b994d){if(_0x2b994d[_0x5824eb(0xcf,'Kn1Q')])this[_0x1a183b(0x22c,'@JAM')]=_0x2b994d[_0x5824eb(0x195,'p9qQ')];if(_0x2b994d[_0x5824eb(0xb0,'JeqC')+'g'])this[_0x1a183b(0x148,'MP!*')]=_0x2b994d[_0x1a183b(0x202,'o9DQ')+'g'];if(_0x2b994d[_0x1a183b(0x1db,'!U)@')+'t'])this[_0x5824eb(0x105,'au69')+'t']=_0x2b994d[_0x1a183b(0x1c0,'n6k]')+'t'];}}[_0x2ccc81(0x1ee,'QC*x')+_0x229175(0x153,'DoSO')+_0x2ccc81(0x166,'M9oU')](){const _0x869df0=_0x2ccc81,_0x2f852a=_0x229175;return!!(this[_0x869df0(0x132,'kaA[')+'n']&&this[_0x869df0(0x204,'Gqsk')+'n'][_0x869df0(0x15d,'$aWw')]&&this[_0x2f852a(0x1dc,'*oiB')+'n'][_0x869df0(0x19d,'gECY')]);}async[_0x2ccc81(0x243,'Kn1Q')+_0x2ccc81(0x92,'A[1x')+'ens'](){const _0x1a9a72=_0x2ccc81,_0x4146e4=_0x2ccc81,_0x6abfd1={'HJImG':_0x1a9a72(0xbc,'Lbqa'),'hnrlQ':_0x1a9a72(0xc2,'8FO9')+'te','YIQJu':_0x4146e4(0xfc,'!U)@')+'nt','wiWFr':_0x4146e4(0x1d4,'&R5%')+'g','nshGa':_0x4146e4(0x17d,'liKT')+'t','KmEAZ':function(_0x437c20,_0x1fde1e){return _0x437c20(_0x1fde1e);}};if(this[_0x1a9a72(0x98,'@JAM')]&&this[_0x1a9a72(0x16d,'cSS!')])return{'fbDtsg':this[_0x1a9a72(0x138,'19m8')],'lsd':this[_0x4146e4(0x21a,'!U)@')]};const _0x260c8a=await this[_0x1a9a72(0x112,'8FO9')][_0x1a9a72(0xba,'N7ud')](ORIGIN+'/',{'headers':{'Sec-Fetch-Site':_0x6abfd1[_0x1a9a72(0x187,'Ou9L')],'Sec-Fetch-Mode':_0x6abfd1[_0x1a9a72(0x154,'Y$@q')],'Sec-Fetch-Dest':_0x6abfd1[_0x4146e4(0x142,'8h^!')]}}),_0x5bc18f=typeof _0x260c8a[_0x4146e4(0x1bd,'$^!9')]===_0x4146e4(0xb3,'8FO9')?_0x260c8a[_0x1a9a72(0x247,'Ou9L')]:'',_0x2a605b=_0x5bc18f[_0x4146e4(0x17e,'Dzpk')](/"LSD",\[\],\{"token":"([^"]+)"/)||_0x5bc18f[_0x1a9a72(0x24e,'!U)@')](/lsd":"([^"]+)"/);if(_0x2a605b)this[_0x4146e4(0x20f,'8h^!')]=_0x2a605b[0x1];const _0x700dc9=_0x5bc18f[_0x4146e4(0xd4,'QC*x')](/DTSGInitialData",\[\],\{"token":"([^"]+)"/)||_0x5bc18f[_0x1a9a72(0x24c,'19m8')](/"fb_dtsg":"([^"]+)"/);if(_0x700dc9)this[_0x4146e4(0x14b,'O4rM')]=_0x700dc9[0x1];if(!this[_0x1a9a72(0x182,'$aWw')])this[_0x4146e4(0x113,'Kn1Q')]=this[_0x1a9a72(0x1e3,'I0bJ')+_0x4146e4(0xd6,'&R5%')](_0x6abfd1[_0x4146e4(0x10c,'DoSO')]);this['jazoes'+'t']=this['getCoo'+'kie'](_0x6abfd1[_0x1a9a72(0x136,'O4rM')])||this[_0x4146e4(0x123,'Svtm')+'t'];if(this[_0x1a9a72(0x237,'Ea#r')]&&!this[_0x4146e4(0xed,'p9qQ')+'t'])this[_0x4146e4(0x194,'O4rM')+'t']=_0x6abfd1[_0x1a9a72(0x1d1,'Dzpk')](jazoest,this[_0x1a9a72(0x242,'q4PN')]);return{'fbDtsg':this[_0x4146e4(0x246,'kaA[')],'lsd':this[_0x1a9a72(0x11e,'Dzpk')]};}[_0x2ccc81(0xcc,'MP!*')+_0x2ccc81(0x13b,'MP!*')](_0xb00973={}){const _0x2403b6=_0x2ccc81,_0x1c3b76=_0x2ccc81,_0x445d94={'THlKh':_0x2403b6(0x116,'Gqsk'),'duaHu':_0x1c3b76(0x185,'Gqsk')+_0x2403b6(0x1df,'u7a5')+'.9','xBNYL':_0x2403b6(0x1c7,'Ea#r')+_0x2403b6(0x1cb,'I0bJ'),'VaXcp':_0x2403b6(0x139,'&R5%'),'kRLLA':'empty','qRyTI':'\x22Windo'+_0x2403b6(0xc3,'Lbqa')},_0x567070=this[_0x2403b6(0x1dc,'*oiB')+'n']||{};return{'Cookie':this[_0x1c3b76(0x225,'a4fr')+_0x2403b6(0x20d,'Ea#r')+'r'](),'User-Agent':USER_AGENT,'X-IG-App-ID':IG_APP_ID,'X-Asbd-Id':ASBD_ID,'X-CSRFToken':this[_0x1c3b76(0x173,'AXZJ')+_0x2403b6(0x21f,'I6!m')](_0x2403b6(0xff,'q4PN')+_0x2403b6(0x1ed,'*gWI'))||'','X-Fb-Lsd':_0x567070[_0x2403b6(0x20f,'8h^!')]||this[_0x2403b6(0x20b,'liKT')]||'','X-IG-WWW-Claim':'0','X-IG-Max-Touch-Points':'0','Accept':_0x445d94[_0x2403b6(0xb9,'MP!*')],'Accept-Language':_0x445d94['duaHu'],'Origin':ORIGIN,'Sec-Fetch-Site':_0x445d94[_0x2403b6(0x236,'Gqsk')],'Sec-Fetch-Mode':_0x445d94[_0x1c3b76(0x14c,'Ou9L')],'Sec-Fetch-Dest':_0x445d94[_0x1c3b76(0x1fe,'QC*x')],'Sec-Ch-Ua':_0x1c3b76(0x1e5,'8h^!')+_0x2403b6(0xca,'Ea#r')+_0x1c3b76(0x1ad,'O4rM')+_0x1c3b76(0x97,'gECY')+_0x2403b6(0x212,'N7ud')+_0x2403b6(0xbd,'Vq76')+_0x2403b6(0x200,'p9qQ')+_0x1c3b76(0x144,'Ou9L')+'t(A:Br'+_0x2403b6(0x1be,'*xCW')+_0x2403b6(0xf7,'*oiB'),'Sec-Ch-Ua-Mobile':'?0','Sec-Ch-Ua-Platform':_0x445d94[_0x2403b6(0x18c,'*oiB')],'X-Requested-With':_0x1c3b76(0xb5,'@JAM')+_0x1c3b76(0x19c,'MP!*')+'st',..._0xb00973};}[_0x229175(0x241,'M9oU')+_0x229175(0x1e2,'OOsO')+'r'](){const _0x4e1e33=_0x229175,_0x3fa789=_0x2ccc81,_0x4f39b9={};for(const [_0x5e29b5,_0x439fb6]of Object[_0x4e1e33(0xbf,'xcqS')+'s'](this[_0x4e1e33(0x125,'A[1x')]||{}))_0x4f39b9[_0x5e29b5]=_0x439fb6;for(const _0x244d24 of this[_0x3fa789(0x130,'u7a5')][_0x4e1e33(0x23f,'q4PN')+_0x3fa789(0x13d,'AXZJ')+'nc'](ORIGIN))_0x4f39b9[_0x244d24[_0x4e1e33(0x214,'Lbqa')]]=_0x244d24[_0x4e1e33(0x249,'O4rM')];return Object[_0x4e1e33(0x137,'I0bJ')+'s'](_0x4f39b9)[_0x3fa789(0x1d9,'DoSO')](([_0x2654b5,_0x5b17d2])=>_0x2654b5+'='+_0x5b17d2)[_0x3fa789(0x159,'ono3')](';\x20');}[_0x229175(0xd5,'M9oU')+_0x2ccc81(0x23d,'M9oU')+'ms'](_0x26e18e){const _0x2f6596=_0x2ccc81,_0x5e3f73=_0x229175,_0x5d97c4={'jHCoM':function(_0x195473,_0x58e889){return _0x195473!==_0x58e889;},'tCVlZ':function(_0x241f98,_0x413715){return _0x241f98!==_0x413715;}},_0x4033ee=this[_0x2f6596(0x16a,'M9oU')+'n']||{},_0x1deb75={'av':_0x4033ee['av'],'__d':_0x2f6596(0x11f,'p9qQ'),'__user':'0','__a':'1','__req':this[_0x5e3f73(0x12b,'ono3')+'eq'](),'__hs':_0x4033ee[_0x5e3f73(0x120,'q4PN')],'dpr':_0x4033ee[_0x2f6596(0xc6,'M9oU')],'__ccg':_0x4033ee[_0x5e3f73(0x1e7,'Svtm')],'__rev':_0x4033ee[_0x5e3f73(0xce,'$aWw')],'__s':_0x4033ee[_0x5e3f73(0x22a,'M9oU')],'__hsi':_0x4033ee[_0x2f6596(0x244,'GDm3')],'__dyn':_0x4033ee[_0x5e3f73(0x1eb,'Ea#r')],'__csr':_0x4033ee[_0x2f6596(0x1b5,'QC*x')],'__hsdp':_0x4033ee[_0x5e3f73(0xe7,'@JAM')],'__hblp':_0x4033ee[_0x5e3f73(0xc1,'cSS!')],'__sjsp':_0x4033ee[_0x5e3f73(0x135,'19m8')],'__comet_req':_0x4033ee['__come'+_0x5e3f73(0xa9,'Gqsk')],'fb_dtsg':_0x4033ee['fb_dts'+'g']||this['fbDtsg'],'jazoest':_0x4033ee[_0x2f6596(0xed,'p9qQ')+'t']||this[_0x2f6596(0x226,'19m8')+'t'],'lsd':_0x4033ee[_0x5e3f73(0xa7,'[Y9O')]||this[_0x2f6596(0x93,'I6!m')],'__spin_r':_0x4033ee['__spin'+'_r'],'__spin_b':_0x4033ee[_0x5e3f73(0x18f,'GDm3')+'_b'],'__spin_t':_0x4033ee[_0x5e3f73(0x14d,'M9oU')+'_t'],'__crn':_0x5e3f73(0x16f,'Ou9L')+_0x5e3f73(0x235,'MP!*')+'Polari'+_0x5e3f73(0x196,'[Y9O')+_0x2f6596(0x1e0,'*oiB')+_0x5e3f73(0xfa,'*gWI')},_0x59f071={};for(const [_0x1800dc,_0x2349b0]of Object['entrie'+'s']({..._0x1deb75,..._0x26e18e})){if(_0x5d97c4[_0x5e3f73(0xfd,'au69')](_0x2349b0,undefined)&&_0x5d97c4[_0x2f6596(0x250,'MP!*')](_0x2349b0,null)&&_0x2349b0!=='')_0x59f071[_0x1800dc]=_0x2349b0;}return _0x59f071;}[_0x2ccc81(0x230,'N7ud')+'eq'](){const _0x878572=_0x229175,_0xe1596c=_0x2ccc81,_0x180231={'AmTrw':function(_0x3f53a0,_0x57dd81){return _0x3f53a0+_0x57dd81;}};return this[_0x878572(0x15e,'l%R1')]=_0x180231[_0xe1596c(0x1b6,'p9qQ')](this[_0xe1596c(0x216,'kaA[')]||0x0,0x1),this[_0x878572(0x1ea,'&R5%')][_0xe1596c(0xb2,'gECY')+'ng'](0x24);}async[_0x229175(0x1a2,'A[1x')](_0x4e320a,_0x48ebbf){const _0x5ce191=_0x2ccc81,_0x2dcfad=_0x2ccc81,_0x43793c={'YZgZP':function(_0x37b070,_0x546426){return _0x37b070(_0x546426);},'ttwoJ':function(_0x5dae14,_0x3bcc49){return _0x5dae14||_0x3bcc49;},'IiBVy':function(_0x3d9d2c,_0x1f387c){return _0x3d9d2c===_0x1f387c;},'mstdT':_0x5ce191(0x1f0,'M9oU'),'uxXwr':function(_0x844033,_0x2510b3){return _0x844033!==_0x2510b3;},'xRdjI':function(_0x2d5587,_0x544154){return _0x2d5587!==_0x544154;}},_0x22ffdb={};for(const [_0x160f8a,_0x37233d]of Object['entrie'+'s'](_0x43793c[_0x2dcfad(0xc4,'8h^!')](_0x48ebbf,{}))){if(_0x43793c[_0x5ce191(0x1f9,'8h^!')](_0x5ce191(0x158,'Vq76'),_0x43793c['mstdT'])){let _0x48279e=0x0;for(const _0x3b8657 of _0x43793c[_0x2dcfad(0x1e4,'q4PN')](_0x270ef3,_0x5ad280))_0x48279e+=_0x3b8657[_0x2dcfad(0xec,'q4PN')+_0x2dcfad(0x18d,'MP!*')](0x0);return'2'+_0x48279e;}else{if(_0x43793c[_0x2dcfad(0x1ba,'*oiB')](_0x37233d,undefined)&&_0x43793c['xRdjI'](_0x37233d,null))_0x22ffdb[_0x160f8a]=_0x37233d;}}const _0x163a3e=await this[_0x5ce191(0xc9,'Gqsk')][_0x5ce191(0x19b,'Y$@q')](_0x4e320a,{'params':_0x22ffdb,'headers':this[_0x2dcfad(0xcc,'MP!*')+_0x2dcfad(0x128,'liKT')]()});return _0x163a3e[_0x2dcfad(0x17b,'Vq76')];}async[_0x229175(0x143,'@JAM')+_0x2ccc81(0x24d,'JeqC')](){const _0x3a8f0e=_0x229175,_0x34a33a=_0x229175,_0xfa529c={'EXiXz':_0x3a8f0e(0x21d,'MP!*')+_0x34a33a(0x161,'*oiB')+_0x34a33a(0x171,'Vq76')+_0x3a8f0e(0x107,'M9oU')+_0x34a33a(0x223,'Kn1Q'),'aHjoV':function(_0x5dead3,_0x2d1668){return _0x5dead3(_0x2d1668);}};try{if(!this[_0x3a8f0e(0x1b0,'o9DQ')+_0x3a8f0e(0x1a9,'Vq76')+_0x34a33a(0x20a,'GDm3')]())await this[_0x34a33a(0x243,'Kn1Q')+_0x34a33a(0x21e,'a4fr')+_0x3a8f0e(0x1c8,'OOsO')]();const _0x39348c=await this[_0x3a8f0e(0x209,'xcqS')+_0x3a8f0e(0x12d,'a4fr')](_0xfa529c[_0x3a8f0e(0xe2,'gECY')],_0x34a33a(0x238,'Vq76')+_0x3a8f0e(0x99,'Ea#r')+'29813',{},ORIGIN+(_0x34a33a(0x15c,'8h^!')+_0x3a8f0e(0x1b7,'MP!*')+'x/'));return _0xfa529c['aHjoV'](Boolean,_0x39348c&&_0x39348c[_0x3a8f0e(0xd7,'MP!*')]);}catch(_0x3c831a){return![];}}async[_0x2ccc81(0x10d,'Y$@q')+'rm'](_0x278355,_0x2ef2b1){const _0x399a1b=_0x2ccc81,_0x441018=_0x2ccc81,_0x2fba44={'wTXUV':_0x399a1b(0x10f,'Lbqa')+_0x399a1b(0x1de,'M9oU')+_0x399a1b(0x1f6,'Ou9L')+_0x399a1b(0xc5,'$^!9')+_0x441018(0x19a,'liKT')+_0x441018(0xe3,'$aWw')+_0x399a1b(0x193,'AXZJ')+'=UTF-8'},_0x5bb1a4=new URLSearchParams(_0x2ef2b1)[_0x399a1b(0xb2,'gECY')+'ng'](),_0x1c9fa7=await this[_0x441018(0x1d7,'n6k]')][_0x441018(0x174,'OOsO')](_0x278355,_0x5bb1a4,{'headers':this['_webHe'+_0x399a1b(0x1c2,'ono3')]({'Content-Type':_0x2fba44[_0x441018(0x227,'*W7@')]})});return _0x1c9fa7[_0x399a1b(0xb6,'$aWw')];}async[_0x2ccc81(0xf4,'N7ud')+_0x229175(0xf1,'Ou9L')](_0x112537,_0x2af39f,_0xafb59c,_0x39a9e8){const _0xe4e9ed=_0x2ccc81,_0x44c9cf=_0x2ccc81,_0x798b2b={'lZtFh':_0xe4e9ed(0xee,'!U)@')+'odern','KRmSO':_0xe4e9ed(0x186,'N7ud'),'xUSZQ':_0x44c9cf(0x192,'p9qQ')+_0xe4e9ed(0xa0,'EEmB')+_0x44c9cf(0x14e,'kaA[')+_0x44c9cf(0x1a4,'kaA[')+_0x44c9cf(0x22d,'l%R1')+_0x44c9cf(0x205,'Ea#r')};if(!this[_0x44c9cf(0x217,'Svtm')+_0xe4e9ed(0x1b3,'liKT')+'rams']())await this[_0x44c9cf(0x22b,'[Y9O')+_0xe4e9ed(0xe5,'JeqC')+_0x44c9cf(0x162,'liKT')]();const _0x346408=new URLSearchParams(this[_0x44c9cf(0x11d,'O4rM')+_0x44c9cf(0x16c,'&R5%')+'ms']({'fb_api_caller_class':_0x798b2b[_0x44c9cf(0x169,'@JAM')],'fb_api_req_friendly_name':_0x112537,'server_timestamps':_0x798b2b[_0x44c9cf(0x106,'8FO9')],'qpl_active_flow_ids':QPL_ACTIVE_FLOW_IDS,'fb_api_analytics_tags':JSON[_0xe4e9ed(0xb1,'Dzpk')+_0x44c9cf(0x218,'8FO9')]([_0xe4e9ed(0x1d8,'au69')+'tive_f'+_0xe4e9ed(0x13c,'[Y9O')+'s='+QPL_ACTIVE_FLOW_IDS]),'variables':JSON[_0x44c9cf(0x168,'Gqsk')+'ify'](_0xafb59c),'doc_id':_0x2af39f})),_0x1622ee=await this[_0x44c9cf(0x16b,'@JAM')][_0xe4e9ed(0x102,'QC*x')](ORIGIN+(_0x44c9cf(0x1e9,'@JAM')+_0xe4e9ed(0x18e,'kaA[')),_0x346408[_0xe4e9ed(0x1a6,'Y$@q')+'ng'](),{'headers':this[_0x44c9cf(0x1fb,'cSS!')+_0x44c9cf(0x140,'au69')]({'Content-Type':_0x798b2b[_0xe4e9ed(0x1ae,'Y$@q')],'X-Fb-Friendly-Name':_0x112537,'Referer':_0x39a9e8||ORIGIN+(_0x44c9cf(0x1ec,'I0bJ')+_0xe4e9ed(0x101,'Ou9L')+'x/')})});return _0x1622ee[_0x44c9cf(0x118,'AXZJ')];}async['postRu'+_0x229175(0xe9,'JeqC')](_0x4c3ceb,_0x279c5f,{filename:_0x5a328c,contentType:_0x22257c,referer:_0x4f9180,typeHeader:_0x244fdf}={}){const _0x2700c2=_0x229175,_0x5b8727=_0x2ccc81,_0x58ef06={'qNNEa':_0x2700c2(0xa8,'GDm3')+_0x5b8727(0x22e,'u7a5'),'iMaaT':function(_0x369d04,_0x25e7a2){return _0x369d04||_0x25e7a2;},'DhCQQ':_0x2700c2(0x203,'Gqsk')+_0x5b8727(0x233,'*oiB')+_0x2700c2(0x199,'&R5%')+_0x2700c2(0x114,'I0bJ'),'DVmre':function(_0x2d972b,_0x415a2e){return _0x2d972b||_0x415a2e;},'zoLMj':function(_0x2b25c4,_0x3c834b){return _0x2b25c4(_0x3c834b);},'LSQyK':_0x2700c2(0xef,'liKT'),'XKpPq':_0x5b8727(0xf8,'l%R1'),'OsJEX':_0x5b8727(0x164,'o9DQ')+_0x5b8727(0xc8,'Dzpk'),'BNAqk':_0x2700c2(0x151,'Ea#r')+_0x5b8727(0x152,'Ea#r'),'FKxJN':_0x5b8727(0x16e,'p9qQ')+_0x2700c2(0xac,'Ea#r')+_0x2700c2(0x15b,'Lbqa')};if(!this[_0x5b8727(0x1b1,'xcqS')+'sionPa'+_0x5b8727(0x10a,'Dzpk')]())await this[_0x2700c2(0x1ef,'l%R1')+_0x2700c2(0x1ce,'O4rM')+_0x5b8727(0xf3,'xcqS')]();const _0x1bd624=new URLSearchParams(this[_0x5b8727(0x1bb,'Y$@q')+_0x2700c2(0x1c6,'!U)@')+'ms']({})),_0x13e0f8=_0x5b8727(0x117,'Svtm')+_0x5b8727(0x9a,'a4fr')+_0x5b8727(0x121,'xcqS')+_0x5b8727(0x213,'O4rM')+_0x2700c2(0x1e6,'8h^!')+_0x4c3ceb+'/'+crypto[_0x5b8727(0x184,'Y$@q')+_0x2700c2(0x1d5,'Ea#r')]()+'?'+_0x1bd624[_0x2700c2(0xdb,'kaA[')+'ng'](),_0x455176=this[_0x5b8727(0x23f,'q4PN')+_0x2700c2(0x131,'n6k]')](_0x58ef06[_0x2700c2(0x9f,'&R5%')])||'',_0x3815e2={'Content-Type':_0x58ef06[_0x2700c2(0x12a,'*W7@')](_0x22257c,_0x58ef06[_0x2700c2(0x1a0,'gECY')]),'X-Entity-Type':_0x58ef06[_0x5b8727(0x1a3,'*W7@')](_0x22257c,_0x2700c2(0x1fd,'!U)@')+_0x5b8727(0x9e,'kaA[')+_0x5b8727(0x165,'q4PN')+'stream'),'X-Entity-Length':_0x58ef06[_0x2700c2(0x13a,'a4fr')](String,_0x279c5f[_0x5b8727(0x141,'Gqsk')]),'X-Entity-Name':_0x5a328c||_0x58ef06[_0x2700c2(0x149,'M9oU')],'X-IG-D':_0x58ef06[_0x2700c2(0x1da,'M9oU')],'X-IG-Max-Touch-Points':'0','Offset':'0','X-Fb-Qpl-Active-Flows':_0x58ef06[_0x2700c2(0x1e8,'*W7@')],'Sec-Fetch-Site':_0x58ef06[_0x2700c2(0x1b2,'OOsO')],'Referer':_0x4f9180||ORIGIN+'/'};if(_0x455176)_0x3815e2['IG-U-D'+_0x2700c2(0xa6,'*oiB')+_0x2700c2(0x18a,'DoSO')]=_0x58ef06[_0x5b8727(0xe4,'N7ud')](String,_0x455176);if(_0x244fdf)_0x3815e2[_0x244fdf]=_0x58ef06['FKxJN'];const _0x286b6d=await this[_0x5b8727(0x145,'Ea#r')][_0x2700c2(0x21c,'au69')](_0x13e0f8,_0x279c5f,{'headers':this[_0x2700c2(0x15f,'gECY')+_0x2700c2(0x104,'Dzpk')](_0x3815e2),'maxBodyLength':Infinity,'maxContentLength':Infinity});return _0x286b6d[_0x2700c2(0x1c4,'Y$@q')];}async['postMu'+_0x2ccc81(0x94,'n6k]')+'t'](_0x54f1fe,_0xaad7d,_0xbfabeb){const _0x49ec6f=_0x229175,_0x50fd8a=_0x2ccc81,_0x333cad={'jqDBR':_0x49ec6f(0x103,'Dzpk'),'ZAxGJ':function(_0x190783,_0x44da89){return _0x190783(_0x44da89);},'foTBO':_0x49ec6f(0x18b,'Ou9L')+_0x49ec6f(0x1c5,'QC*x')+_0x50fd8a(0xaa,'QC*x')+_0x50fd8a(0x207,'MP!*'),'ymmrX':function(_0x33d9f3,_0x57a893){return _0x33d9f3(_0x57a893);},'HlXfD':'file'};if(!this['hasSes'+_0x49ec6f(0x1af,'!U)@')+_0x50fd8a(0x129,'@JAM')]())await this[_0x50fd8a(0xbe,'p9qQ')+_0x49ec6f(0x95,'N7ud')+_0x50fd8a(0x240,'*xCW')]();const _0x52705e=_0x49ec6f(0x23c,'QC*x')+_0x50fd8a(0x221,'o9DQ')+_0x50fd8a(0xab,'$^!9')+_0x49ec6f(0xda,'OOsO')+crypto[_0x50fd8a(0x1f4,'a4fr')+'Bytes'](0xc)[_0x49ec6f(0x157,'ono3')+'ng'](_0x333cad[_0x50fd8a(0x119,'n6k]')]),_0x3ea9c1=[];for(const _0x5d28a1 of _0xaad7d){_0x3ea9c1[_0x50fd8a(0x1f8,'QC*x')](Buffer[_0x49ec6f(0x179,'kaA[')]('--'+_0x52705e+'\x0d\x0a'));let _0x4231d4=_0x49ec6f(0xd2,'$^!9')+_0x50fd8a(0x1bc,'Gqsk')+_0x50fd8a(0x13e,'o9DQ')+_0x49ec6f(0xae,'I0bJ')+_0x49ec6f(0x115,'@JAM')+_0x49ec6f(0xf5,'8h^!')+'=\x22'+_0x5d28a1[_0x50fd8a(0x232,'*oiB')]+'\x22';if(_0x5d28a1['filena'+'me'])_0x4231d4+=_0x49ec6f(0xeb,'A[1x')+_0x50fd8a(0x14a,'a4fr')+_0x5d28a1[_0x50fd8a(0xdc,'GDm3')+'me']+'\x22';_0x3ea9c1[_0x50fd8a(0x167,'[Y9O')](Buffer[_0x49ec6f(0x1ff,'@JAM')](_0x4231d4+'\x0d\x0a'));if(_0x5d28a1[_0x50fd8a(0x1ac,'8FO9')+'tType'])_0x3ea9c1[_0x50fd8a(0x15a,'M9oU')](Buffer[_0x50fd8a(0xf2,'q4PN')](_0x50fd8a(0x1cc,'p9qQ')+_0x50fd8a(0x146,'I0bJ')+':\x20'+_0x5d28a1[_0x49ec6f(0x252,'Lbqa')+_0x50fd8a(0xe8,'p9qQ')]+'\x0d\x0a'));_0x3ea9c1[_0x50fd8a(0x12e,'AXZJ')](Buffer['from']('\x0d\x0a')),_0x3ea9c1[_0x50fd8a(0x156,'*W7@')](Buffer[_0x49ec6f(0x251,'ono3')+'er'](_0x5d28a1[_0x49ec6f(0x1c9,'l%R1')])?_0x5d28a1[_0x49ec6f(0x1bf,'GDm3')]:Buffer[_0x49ec6f(0x13f,'*gWI')](_0x333cad[_0x50fd8a(0x96,'cSS!')](String,_0x5d28a1[_0x50fd8a(0x177,'Dzpk')]))),_0x3ea9c1[_0x49ec6f(0x155,'8h^!')](Buffer[_0x49ec6f(0x127,'liKT')]('\x0d\x0a'));}_0x3ea9c1[_0x49ec6f(0x19f,'EEmB')](Buffer[_0x49ec6f(0x19e,'JeqC')]('--'+_0x52705e+_0x49ec6f(0x1fc,'$^!9')));const _0x47a5fd=Buffer[_0x50fd8a(0xc0,'Dzpk')](_0x3ea9c1),_0x65a290=_0xaad7d[_0x49ec6f(0x1ca,'Ou9L')](_0x225dc2=>_0x225dc2[_0x49ec6f(0x172,'u7a5')+'me'])||_0xaad7d[0x0],_0x2200d6=new URLSearchParams(this[_0x50fd8a(0x1bb,'Y$@q')+_0x49ec6f(0x1a8,'*oiB')+'ms']({'hl':'en'})),_0x2d68e4=await this[_0x50fd8a(0x111,'p9qQ')][_0x50fd8a(0x24f,'AXZJ')](_0x54f1fe+'?'+_0x2200d6[_0x50fd8a(0xde,'A[1x')+'ng'](),_0x47a5fd,{'headers':this[_0x50fd8a(0x23b,'n6k]')+_0x49ec6f(0x100,'Vq76')]({'Content-Type':_0x49ec6f(0x234,'19m8')+_0x49ec6f(0x17a,'A[1x')+_0x50fd8a(0x133,'Y$@q')+_0x50fd8a(0x10e,'A[1x')+_0x49ec6f(0xdd,'*oiB')+_0x52705e,'X-Entity-Type':_0x65a290?.['conten'+_0x50fd8a(0x12c,'*W7@')]||_0x333cad[_0x50fd8a(0xa1,'Svtm')],'X-Entity-Length':_0x333cad[_0x49ec6f(0x183,'8FO9')](String,_0x65a290?.[_0x49ec6f(0x9c,'&R5%')]?.[_0x49ec6f(0x211,'*W7@')+_0x49ec6f(0x10b,'o9DQ')]||0x0),'X-Entity-Name':_0x65a290?.[_0x49ec6f(0x219,'I6!m')+'me']||_0x333cad[_0x50fd8a(0xe0,'$aWw')],'X-Instagram-Rupload-Params':'{}','Offset':'0','Referer':_0xbfabeb||ORIGIN+(_0x49ec6f(0xd0,'MP!*')+_0x49ec6f(0x91,'8FO9')+'x/')}),'maxBodyLength':Infinity,'maxContentLength':Infinity});return _0x2d68e4[_0x50fd8a(0x9b,'Gqsk')];}}module[_0x2ccc81(0x1c1,'liKT')+'s']=HttpClient;
|
|
7
|
+
|
|
8
|
+
const axios = require("axios");
|
|
9
|
+
const crypto = require("crypto");
|
|
10
|
+
const { wrapper } = require("axios-cookiejar-support");
|
|
11
|
+
const { CookieJar } = require("tough-cookie");
|
|
12
|
+
const { classify, inspectBody, toIgError, retryAfterMs } = require("./utils/errors");
|
|
13
|
+
const { globalAntiSuspension } = require("./utils/antiSuspension");
|
|
14
|
+
|
|
15
|
+
// The cookie comes from a www.instagram.com browser session, so the client must
|
|
16
|
+
// present the matching web User-Agent. Sending an Android app UA with a web
|
|
17
|
+
// session cookie makes Instagram reject every API call with
|
|
18
|
+
// 400 feedback_required / is_spam.
|
|
19
|
+
const USER_AGENT =
|
|
20
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36";
|
|
21
|
+
const IG_APP_ID = "936619743392459";
|
|
22
|
+
const ASBD_ID = "359341";
|
|
23
|
+
const ORIGIN = "https://www.instagram.com";
|
|
24
|
+
// Quick-promotion flow id the web client attaches to every Direct GraphQL call.
|
|
25
|
+
const QPL_ACTIVE_FLOW_IDS = "354954279";
|
|
26
|
+
|
|
27
|
+
// Meta's jazoest = "2" + sum of the char codes of fb_dtsg.
|
|
28
|
+
function jazoest(fbDtsg) {
|
|
29
|
+
let sum = 0;
|
|
30
|
+
for (const ch of String(fbDtsg)) sum += ch.charCodeAt(0);
|
|
31
|
+
return `2${sum}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
class HttpClient {
|
|
35
|
+
constructor(initialCookies) {
|
|
36
|
+
this.seed = initialCookies;
|
|
37
|
+
if (!this.seed.csrftoken) this.seed.csrftoken = crypto.randomBytes(16).toString("hex");
|
|
38
|
+
|
|
39
|
+
this.jar = new CookieJar();
|
|
40
|
+
for (const [key, value] of Object.entries(this.seed)) {
|
|
41
|
+
try {
|
|
42
|
+
this.jar.setCookieSync(`${key}=${value}; Domain=.instagram.com; Path=/`, ORIGIN);
|
|
43
|
+
} catch (_) {}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
this.client = wrapper(
|
|
47
|
+
axios.create({
|
|
48
|
+
jar: this.jar,
|
|
49
|
+
withCredentials: true,
|
|
50
|
+
headers: { "User-Agent": USER_AGENT, "X-IG-App-ID": IG_APP_ID },
|
|
51
|
+
timeout: 30000,
|
|
52
|
+
maxRedirects: 0
|
|
53
|
+
})
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
this.wwwClaim = null;
|
|
57
|
+
this.client.interceptors.response.use(
|
|
58
|
+
(res) => this._onResponse(res),
|
|
59
|
+
(err) => Promise.reject(this._onError(err))
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
_rememberClaim(res) {
|
|
64
|
+
const claim = res && res.headers && res.headers["x-ig-set-www-claim"];
|
|
65
|
+
if (claim && typeof claim === "string") this.wwwClaim = claim;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
_onResponse(res) {
|
|
69
|
+
this._rememberClaim(res);
|
|
70
|
+
const info = inspectBody(res.data);
|
|
71
|
+
if (info && ["auth", "challenge", "suspended", "blocked", "rate_limited"].includes(info.kind)) {
|
|
72
|
+
const err = toIgError(new Error(info.message || `Instagram refused the request (${info.kind})`), {
|
|
73
|
+
...info,
|
|
74
|
+
status: res.status
|
|
75
|
+
});
|
|
76
|
+
err.response = res;
|
|
77
|
+
if (["challenge", "suspended", "blocked"].includes(info.kind)) globalAntiSuspension.noteSendError(err);
|
|
78
|
+
return Promise.reject(err);
|
|
79
|
+
}
|
|
80
|
+
return res;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
_onError(err) {
|
|
84
|
+
this._rememberClaim(err && err.response);
|
|
85
|
+
const info = classify(err);
|
|
86
|
+
if (["challenge", "blocked", "suspended"].includes(info.kind)) globalAntiSuspension.noteSendError(err);
|
|
87
|
+
return toIgError(err, info);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
getCookie(key) {
|
|
91
|
+
const cookies = this.jar.getCookiesSync(ORIGIN);
|
|
92
|
+
const found = cookies.find((c) => c.key === key);
|
|
93
|
+
return found ? found.value : this.seed[key];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
uuid() {
|
|
97
|
+
return crypto.randomUUID();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Instagram's offline threading id is (unix_ms << 22) | random 22 bits, packed
|
|
101
|
+
// into a 64-bit integer. Sends whose id does not decode to a plausible recent
|
|
102
|
+
// timestamp are rejected with "Invalid Parameter".
|
|
103
|
+
offlineThreadingId() {
|
|
104
|
+
const ms = BigInt(Date.now());
|
|
105
|
+
const rand = BigInt(Math.floor(Math.random() * 0x400000));
|
|
106
|
+
return ((ms << 22n) | rand).toString();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Instagram's web API rejects any request that does not carry the same
|
|
110
|
+
// browser-session params (__dyn, __csr, __hs, __hsi, __s, __hsdp, ...) that
|
|
111
|
+
// www.instagram.com itself sends. They are generated by the web JS bundle, but
|
|
112
|
+
// are session-scoped rather than per-request, so they can be harvested once
|
|
113
|
+
// from a real browser session (see scripts/harvestSession.js) and reused here.
|
|
114
|
+
setSessionParams(params) {
|
|
115
|
+
this.session = params || null;
|
|
116
|
+
if (params) {
|
|
117
|
+
if (params.lsd) this.lsd = params.lsd;
|
|
118
|
+
if (params.fb_dtsg) this.fbDtsg = params.fb_dtsg;
|
|
119
|
+
if (params.jazoest) this.jazoest = params.jazoest;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
hasSessionParams() {
|
|
124
|
+
return !!(this.session && this.session.__dyn && this.session.__hsi);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Seeds fb_dtsg/jazoest/lsd from the home page HTML (used as a fallback when no
|
|
128
|
+
// harvested session params are supplied).
|
|
129
|
+
async bootstrapTokens() {
|
|
130
|
+
if (this.fbDtsg && this.lsd) return { fbDtsg: this.fbDtsg, lsd: this.lsd };
|
|
131
|
+
const res = await this.client.get(`${ORIGIN}/`, {
|
|
132
|
+
maxRedirects: 5,
|
|
133
|
+
headers: { "Sec-Fetch-Site": "none", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Dest": "document" }
|
|
134
|
+
});
|
|
135
|
+
const html = typeof res.data === "string" ? res.data : "";
|
|
136
|
+
const lsdMatch = html.match(/"LSD",\[\],\{"token":"([^"]+)"/) || html.match(/lsd":"([^"]+)"/);
|
|
137
|
+
if (lsdMatch) this.lsd = lsdMatch[1];
|
|
138
|
+
|
|
139
|
+
const dtsgMatch =
|
|
140
|
+
html.match(/DTSGInitialData",\[\],\{"token":"([^"]+)"/) ||
|
|
141
|
+
html.match(/"fb_dtsg":"([^"]+)"/);
|
|
142
|
+
if (dtsgMatch) this.fbDtsg = dtsgMatch[1];
|
|
143
|
+
if (!this.fbDtsg) this.fbDtsg = this.getCookie("fb_dtsg");
|
|
144
|
+
|
|
145
|
+
this.jazoest = this.getCookie("jazoest") || this.jazoest;
|
|
146
|
+
if (this.fbDtsg && !this.jazoest) this.jazoest = jazoest(this.fbDtsg);
|
|
147
|
+
return { fbDtsg: this.fbDtsg, lsd: this.lsd };
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Full browser-like headers. Instagram checks these alongside the query params.
|
|
151
|
+
_webHeaders(extra = {}) {
|
|
152
|
+
const s = this.session || {};
|
|
153
|
+
return {
|
|
154
|
+
Cookie: this._cookieHeader(),
|
|
155
|
+
"User-Agent": USER_AGENT,
|
|
156
|
+
"X-IG-App-ID": IG_APP_ID,
|
|
157
|
+
"X-Asbd-Id": ASBD_ID,
|
|
158
|
+
"X-CSRFToken": this.getCookie("csrftoken") || "",
|
|
159
|
+
"X-Fb-Lsd": s.lsd || this.lsd || "",
|
|
160
|
+
"X-IG-WWW-Claim": this.wwwClaim || "0",
|
|
161
|
+
"X-IG-Max-Touch-Points": "0",
|
|
162
|
+
Accept: "*/*",
|
|
163
|
+
"Accept-Language": "en-US,en;q=0.9",
|
|
164
|
+
Origin: ORIGIN,
|
|
165
|
+
"Sec-Fetch-Site": "same-origin",
|
|
166
|
+
"Sec-Fetch-Mode": "cors",
|
|
167
|
+
"Sec-Fetch-Dest": "empty",
|
|
168
|
+
"Sec-Ch-Ua": '"Google Chrome";v="155", "Chromium";v="155", "Not(A:Brand";v="24"',
|
|
169
|
+
"Sec-Ch-Ua-Mobile": "?0",
|
|
170
|
+
"Sec-Ch-Ua-Platform": '"Windows"',
|
|
171
|
+
"X-Requested-With": "XMLHttpRequest",
|
|
172
|
+
...extra
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
_cookieHeader() {
|
|
177
|
+
const jar = {};
|
|
178
|
+
for (const [k, v] of Object.entries(this.seed || {})) jar[k] = v;
|
|
179
|
+
for (const c of this.jar.getCookiesSync(ORIGIN)) jar[c.key] = c.value;
|
|
180
|
+
return Object.entries(jar)
|
|
181
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
182
|
+
.join("; ");
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// The session params, with __req bumped per request like the web client does.
|
|
186
|
+
_sessionParams(extra) {
|
|
187
|
+
const s = this.session || {};
|
|
188
|
+
const base = {
|
|
189
|
+
av: s.av,
|
|
190
|
+
__d: "www",
|
|
191
|
+
__user: "0",
|
|
192
|
+
__a: "1",
|
|
193
|
+
__req: this._nextReq(),
|
|
194
|
+
__hs: s.__hs,
|
|
195
|
+
dpr: s.dpr,
|
|
196
|
+
__ccg: s.__ccg,
|
|
197
|
+
__rev: s.__rev,
|
|
198
|
+
__s: s.__s,
|
|
199
|
+
__hsi: s.__hsi,
|
|
200
|
+
__dyn: s.__dyn,
|
|
201
|
+
__csr: s.__csr,
|
|
202
|
+
__hsdp: s.__hsdp,
|
|
203
|
+
__hblp: s.__hblp,
|
|
204
|
+
__sjsp: s.__sjsp,
|
|
205
|
+
__comet_req: s.__comet_req,
|
|
206
|
+
fb_dtsg: s.fb_dtsg || this.fbDtsg,
|
|
207
|
+
jazoest: s.jazoest || this.jazoest,
|
|
208
|
+
lsd: s.lsd || this.lsd,
|
|
209
|
+
__spin_r: s.__spin_r,
|
|
210
|
+
__spin_b: s.__spin_b,
|
|
211
|
+
__spin_t: s.__spin_t,
|
|
212
|
+
__crn: "comet.igweb.PolarisDirectInboxRoute"
|
|
213
|
+
};
|
|
214
|
+
const out = {};
|
|
215
|
+
for (const [k, v] of Object.entries({ ...base, ...extra })) {
|
|
216
|
+
if (v !== undefined && v !== null && v !== "") out[k] = v;
|
|
217
|
+
}
|
|
218
|
+
return out;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
_nextReq() {
|
|
222
|
+
this._req = (this._req || 0) + 1;
|
|
223
|
+
return this._req.toString(36);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
async get(url, params) {
|
|
227
|
+
const clean = {};
|
|
228
|
+
for (const [k, v] of Object.entries(params || {})) {
|
|
229
|
+
if (v !== undefined && v !== null) clean[k] = v;
|
|
230
|
+
}
|
|
231
|
+
const res = await this.client.get(url, { params: clean, headers: this._webHeaders() });
|
|
232
|
+
return res.data;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
async checkSession({ attempts = 3 } = {}) {
|
|
236
|
+
let last = null;
|
|
237
|
+
for (let i = 0; i < attempts; i++) {
|
|
238
|
+
try {
|
|
239
|
+
if (!this.hasSessionParams()) await this.bootstrapTokens();
|
|
240
|
+
const res = await this.postGraphQL(
|
|
241
|
+
"useFeatureLimitsOffMsysQuery",
|
|
242
|
+
"28374543635529813",
|
|
243
|
+
{},
|
|
244
|
+
`${ORIGIN}/direct/inbox/`
|
|
245
|
+
);
|
|
246
|
+
if (res && res.data) return { state: "ok" };
|
|
247
|
+
return { state: "auth", error: last };
|
|
248
|
+
} catch (err) {
|
|
249
|
+
last = err;
|
|
250
|
+
const kind = err.igKind || classify(err).kind;
|
|
251
|
+
if (kind === "rate_limited") {
|
|
252
|
+
return { state: "rate_limited", error: err, retryAfterMs: retryAfterMs(err) || 60000 };
|
|
253
|
+
}
|
|
254
|
+
if (kind === "transient" || kind === "unknown") {
|
|
255
|
+
if (i < attempts - 1) {
|
|
256
|
+
await new Promise((resolve) => setTimeout(resolve, 3000 * (i + 1) + Math.random() * 2000));
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
return { state: "transient", error: err, retryAfterMs: 30000 };
|
|
260
|
+
}
|
|
261
|
+
const state = kind === "blocked" ? "challenge" : kind;
|
|
262
|
+
return { state, error: err };
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return { state: "transient", error: last, retryAfterMs: 30000 };
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
async isLoggedIn() {
|
|
269
|
+
const result = await this.checkSession({ attempts: 1 });
|
|
270
|
+
return result.state === "ok";
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
async postForm(url, fields) {
|
|
274
|
+
const body = new URLSearchParams(fields).toString();
|
|
275
|
+
const res = await this.client.post(url, body, {
|
|
276
|
+
headers: this._webHeaders({ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" })
|
|
277
|
+
});
|
|
278
|
+
return res.data;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Sends a Relay GraphQL operation with the full web session context.
|
|
282
|
+
//
|
|
283
|
+
// Instagram answers a rejected operation with HTTP 200 and a top-level
|
|
284
|
+
// `errors` array, so a bare `return res.data` makes a failed mutation look
|
|
285
|
+
// like a success and the message is silently dropped. Callers that perform a
|
|
286
|
+
// write pass `{ throwOnError: true }` so the rejection surfaces as an error.
|
|
287
|
+
async postGraphQL(friendlyName, docId, variables, referer, opts = {}) {
|
|
288
|
+
if (!this.hasSessionParams()) await this.bootstrapTokens();
|
|
289
|
+
const params = new URLSearchParams(
|
|
290
|
+
this._sessionParams({
|
|
291
|
+
fb_api_caller_class: "RelayModern",
|
|
292
|
+
fb_api_req_friendly_name: friendlyName,
|
|
293
|
+
server_timestamps: "true",
|
|
294
|
+
qpl_active_flow_ids: QPL_ACTIVE_FLOW_IDS,
|
|
295
|
+
fb_api_analytics_tags: JSON.stringify([`qpl_active_flow_ids=${QPL_ACTIVE_FLOW_IDS}`]),
|
|
296
|
+
variables: JSON.stringify(variables),
|
|
297
|
+
doc_id: docId
|
|
298
|
+
})
|
|
299
|
+
);
|
|
300
|
+
const res = await this.client.post(`${ORIGIN}/api/graphql`, params.toString(), {
|
|
301
|
+
headers: this._webHeaders({
|
|
302
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
303
|
+
"X-Fb-Friendly-Name": friendlyName,
|
|
304
|
+
Referer: referer || `${ORIGIN}/direct/inbox/`
|
|
305
|
+
})
|
|
306
|
+
});
|
|
307
|
+
if (opts.throwOnError && res.data && Array.isArray(res.data.errors) && res.data.errors.length) {
|
|
308
|
+
const err = new Error(res.data.errors[0]?.message || `${friendlyName} failed`);
|
|
309
|
+
err.name = "InstagramGraphQLError";
|
|
310
|
+
err.friendlyName = friendlyName;
|
|
311
|
+
err.errors = res.data.errors;
|
|
312
|
+
throw err;
|
|
313
|
+
}
|
|
314
|
+
return res.data;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Direct-message media upload. The DM composer does NOT use
|
|
318
|
+
// /ajax/mercury/upload.php (that endpoint's response is unusable for
|
|
319
|
+
// IGDirectMediaSendMutation); it PUTs the raw bytes to
|
|
320
|
+
// https://rupload.instagram.com/<consumer>/<uuid> with the full web session
|
|
321
|
+
// params on the query string, and reads back { media_id }.
|
|
322
|
+
async postRupload(consumer, buffer, { filename, contentType, referer, typeHeader } = {}) {
|
|
323
|
+
if (!this.hasSessionParams()) await this.bootstrapTokens();
|
|
324
|
+
const params = new URLSearchParams(this._sessionParams({}));
|
|
325
|
+
const url = `https://rupload.instagram.com/${consumer}/${crypto.randomUUID()}?${params.toString()}`;
|
|
326
|
+
const dsUserId = this.getCookie("ds_user_id") || "";
|
|
327
|
+
const extra = {
|
|
328
|
+
"Content-Type": contentType || "application/octet-stream",
|
|
329
|
+
"X-Entity-Type": contentType || "application/octet-stream",
|
|
330
|
+
"X-Entity-Length": String(buffer.length),
|
|
331
|
+
"X-Entity-Name": filename || "file",
|
|
332
|
+
"X-IG-D": "www",
|
|
333
|
+
"X-IG-Max-Touch-Points": "0",
|
|
334
|
+
Offset: "0",
|
|
335
|
+
"X-Fb-Qpl-Active-Flows": "521485957",
|
|
336
|
+
"Sec-Fetch-Site": "cross-site",
|
|
337
|
+
Referer: referer || `${ORIGIN}/`
|
|
338
|
+
};
|
|
339
|
+
if (dsUserId) extra["IG-U-DS-User-ID"] = String(dsUserId);
|
|
340
|
+
if (typeHeader) extra[typeHeader] = "FILE_ATTACHMENT";
|
|
341
|
+
const res = await this.client.post(url, buffer, {
|
|
342
|
+
headers: this._webHeaders(extra),
|
|
343
|
+
maxBodyLength: Infinity,
|
|
344
|
+
maxContentLength: Infinity
|
|
345
|
+
});
|
|
346
|
+
return res.data;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Builds a multipart/form-data body by hand so we avoid pulling in a form-data
|
|
350
|
+
// dependency, and so field order matches the browser capture.
|
|
351
|
+
async postMultipart(url, parts, referer) {
|
|
352
|
+
if (!this.hasSessionParams()) await this.bootstrapTokens();
|
|
353
|
+
const boundary = `----WebKitFormBoundary${crypto.randomBytes(12).toString("hex")}`;
|
|
354
|
+
const chunks = [];
|
|
355
|
+
for (const part of parts) {
|
|
356
|
+
chunks.push(Buffer.from(`--${boundary}\r\n`));
|
|
357
|
+
let disposition = `Content-Disposition: form-data; name="${part.name}"`;
|
|
358
|
+
if (part.filename) disposition += `; filename="${part.filename}"`;
|
|
359
|
+
chunks.push(Buffer.from(disposition + "\r\n"));
|
|
360
|
+
if (part.contentType) chunks.push(Buffer.from(`Content-Type: ${part.contentType}\r\n`));
|
|
361
|
+
chunks.push(Buffer.from("\r\n"));
|
|
362
|
+
chunks.push(Buffer.isBuffer(part.value) ? part.value : Buffer.from(String(part.value)));
|
|
363
|
+
chunks.push(Buffer.from("\r\n"));
|
|
364
|
+
}
|
|
365
|
+
chunks.push(Buffer.from(`--${boundary}--\r\n`));
|
|
366
|
+
const body = Buffer.concat(chunks);
|
|
367
|
+
|
|
368
|
+
const filePart = parts.find((p) => p.filename) || parts[0];
|
|
369
|
+
const params = new URLSearchParams(this._sessionParams({ hl: "en" }));
|
|
370
|
+
const res = await this.client.post(`${url}?${params.toString()}`, body, {
|
|
371
|
+
headers: this._webHeaders({
|
|
372
|
+
"Content-Type": `multipart/form-data; boundary=${boundary}`,
|
|
373
|
+
"X-Entity-Type": filePart?.contentType || "application/octet-stream",
|
|
374
|
+
"X-Entity-Length": String(filePart?.value?.byteLength || 0),
|
|
375
|
+
"X-Entity-Name": filePart?.filename || "file",
|
|
376
|
+
"X-Instagram-Rupload-Params": "{}",
|
|
377
|
+
Offset: "0",
|
|
378
|
+
Referer: referer || `${ORIGIN}/direct/inbox/`
|
|
379
|
+
}),
|
|
380
|
+
maxBodyLength: Infinity,
|
|
381
|
+
maxContentLength: Infinity
|
|
382
|
+
});
|
|
383
|
+
return res.data;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
module.exports = HttpClient;
|
package/src/messageContent.js
CHANGED
|
@@ -4,4 +4,76 @@
|
|
|
4
4
|
* Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.
|
|
5
5
|
* Original author credit must be retained in all copies and derivatives.
|
|
6
6
|
*/
|
|
7
|
-
const _0x138483=_0x5aaa;(function(_0x2aaa67,_0x20f5c4){const _0xfc33d5=_0x5aaa,_0x2bf1f7=_0x5aaa,_0x5dcad2=_0x2aaa67();while(!![]){try{const _0x2a44b2=parseInt(_0xfc33d5(0xb1,'PX#M'))/0x1+parseInt(_0xfc33d5(0x10c,']VVu'))/0x2+-parseInt(_0x2bf1f7(0xb5,'EBL7'))/0x3*(parseInt(_0xfc33d5(0xcb,'QkB0'))/0x4)+parseInt(_0xfc33d5(0xee,'qQ11'))/0x5*(-parseInt(_0xfc33d5(0xd2,'9ySR'))/0x6)+-parseInt(_0x2bf1f7(0xc2,'DbH]'))/0x7*(parseInt(_0xfc33d5(0xab,'vvhJ'))/0x8)+parseInt(_0x2bf1f7(0xc4,'UcvP'))/0x9+-parseInt(_0x2bf1f7(0xfe,'IK$Z'))/0xa;if(_0x2a44b2===_0x20f5c4)break;else _0x5dcad2['push'](_0x5dcad2['shift']());}catch(_0x124554){_0x5dcad2['push'](_0x5dcad2['shift']());}}}(_0x1e27,0xdfbf1));function _0x5aaa(_0x1fe7aa,_0x51157b){_0x1fe7aa=_0x1fe7aa-0x90;const _0x1e273a=_0x1e27();let _0x5aaabe=_0x1e273a[_0x1fe7aa];if(_0x5aaa['BYmdih']===undefined){var _0x1f9229=function(_0x171121){const _0x245278='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x23ebdb='',_0x1822d9='';for(let _0x2f2f41=0x0,_0x43b4c9,_0x5682c1,_0x1b278e=0x0;_0x5682c1=_0x171121['charAt'](_0x1b278e++);~_0x5682c1&&(_0x43b4c9=_0x2f2f41%0x4?_0x43b4c9*0x40+_0x5682c1:_0x5682c1,_0x2f2f41++%0x4)?_0x23ebdb+=String['fromCharCode'](0xff&_0x43b4c9>>(-0x2*_0x2f2f41&0x6)):0x0){_0x5682c1=_0x245278['indexOf'](_0x5682c1);}for(let _0x5f5dca=0x0,_0x27a282=_0x23ebdb['length'];_0x5f5dca<_0x27a282;_0x5f5dca++){_0x1822d9+='%'+('00'+_0x23ebdb['charCodeAt'](_0x5f5dca)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1822d9);};const _0x578954=function(_0x25e394,_0x45a54f){let _0x4c5dad=[],_0x313687=0x0,_0x2b1c22,_0xb1c070='';_0x25e394=_0x1f9229(_0x25e394);let _0x5f21e9;for(_0x5f21e9=0x0;_0x5f21e9<0x100;_0x5f21e9++){_0x4c5dad[_0x5f21e9]=_0x5f21e9;}for(_0x5f21e9=0x0;_0x5f21e9<0x100;_0x5f21e9++){_0x313687=(_0x313687+_0x4c5dad[_0x5f21e9]+_0x45a54f['charCodeAt'](_0x5f21e9%_0x45a54f['length']))%0x100,_0x2b1c22=_0x4c5dad[_0x5f21e9],_0x4c5dad[_0x5f21e9]=_0x4c5dad[_0x313687],_0x4c5dad[_0x313687]=_0x2b1c22;}_0x5f21e9=0x0,_0x313687=0x0;for(let _0x150e3=0x0;_0x150e3<_0x25e394['length'];_0x150e3++){_0x5f21e9=(_0x5f21e9+0x1)%0x100,_0x313687=(_0x313687+_0x4c5dad[_0x5f21e9])%0x100,_0x2b1c22=_0x4c5dad[_0x5f21e9],_0x4c5dad[_0x5f21e9]=_0x4c5dad[_0x313687],_0x4c5dad[_0x313687]=_0x2b1c22,_0xb1c070+=String['fromCharCode'](_0x25e394['charCodeAt'](_0x150e3)^_0x4c5dad[(_0x4c5dad[_0x5f21e9]+_0x4c5dad[_0x313687])%0x100]);}return _0xb1c070;};_0x5aaa['UYEMeX']=_0x578954,_0x5aaa['jtvfbt']={},_0x5aaa['BYmdih']=!![];}const _0x325b3f=_0x1e273a[0x0],_0x44ec93=_0x1fe7aa+_0x325b3f,_0x570ddb=_0x5aaa['jtvfbt'][_0x44ec93];return!_0x570ddb?(_0x5aaa['QzSAeO']===undefined&&(_0x5aaa['QzSAeO']=!![]),_0x5aaabe=_0x5aaa['UYEMeX'](_0x5aaabe,_0x51157b),_0x5aaa['jtvfbt'][_0x44ec93]=_0x5aaabe):_0x5aaabe=_0x570ddb,_0x5aaabe;}function textOf(_0x2b1c3d){const _0x3473fe=_0x5aaa,_0x223548=_0x5aaa;return _0x2b1c3d?.[_0x3473fe(0xf3,'IK$Z')+'ody']||_0x2b1c3d?.[_0x3473fe(0x9d,'iLCb')+'t']?.[_0x3473fe(0xbd,'UcvP')+_0x223548(0x9c,'fku0')]||_0x2b1c3d?.[_0x3473fe(0xc9,'Tpzw')+'t']?.[_0x3473fe(0xe8,'6AWm')+_0x3473fe(0x97,'jzW#')+'y']||'';}function _0x1e27(){const _0x23953f=['FWxcImo0WQTL','gmkIWO4','oSoEWQvVrJ4','W7RcGWbmW4RdPq','WRa5W7hdT08','iSoRwa','l8opWRxdGmouka','gmkIWOS','y8kCW7u1ghZdPcyNhN3dQSk6','W5a/o8oFW64','W6dcTCoKmfRcLG','W6dcG8o9lfNcHW','iSk5WONcUJZdIq','W73dU8oMWQVcQ8k6','WRZdK0GaWQlcTWi2W749bmocpa','W6r5kwBcKvO','W4WWpHNcNG','n8kQgqaTjG','W5iLW73cICkXWRG','ENtdOLmxWP8','W61NA3ldVG','WQlcJmokf8kvW4u','WOX7sdtdVW','AmoLW7NdSSorwG','W47dICoZW5xcJZ/cJG','W6/dVSooWOpcOq','W4ZcVmkCW7lcOsq','WP5Mts/dTq','WQzOr8kbWRHwbCkTW7PpW7BdHa','W5PMh8o5W6a','W7z9tvNdPa','WRtcKCoi','WRRcMCkEEqtcOdi','W79bAK7dQa','mZzvFh7cPW','kSoWzmo8W55J','BftdTgCj','W4aWmSobtYq','k8ozWQrWqcG','W7zfD8ocW4VdSmkZc3hdMgOF','W6ZcH8oX','WOVcMfhdV8kLya','WORdLrFdH1O','W7u+mXpcPmoe','BrVcQZ99xW','W5FcHCo+pu/cNq','dCoNvmoWW4vI','aSomAmo2W4rz','WQi8W43dNgpcSa','ACkGaSkoW6NdGwddJZzcyHu','b8kAzmoyWPug','WQGRW4C','FqFcLSoFWQn4','WQi+fmkXWPW','W6jZyN4','CMldV0yd','W7/cSCkNW7RcQZm','iCo3WPW4W5TS','wdpcHaHnuG','thZdT0zWdW','WOaIhudcPmoo','hCowWRJdJCoEoG','W4iRkmoussi','EmoqoSoRdCo7W4LRba','W7NdV38eW4y','W51MlxFcNxW','W7NcI8oOkSkkW65F','FNpdPvmtWPi','WQVdRmokWQhcJsvNWOhcRSof','W5yfW4dcG8kV','W6KkmCkvWPG','omoeWQ9Ytcm','BSkzW7m/hhVcKduMfhZdJq','W6ldS3uvW5O','WOT+WPhdSIW','W69Hu8kCohS','WRqRnINcPqfWWOuzvsZcHG','jCkGBCoQfG','lf3dImktW7eMWPVdQmkCnSk0WRnE','W7fujxq','W4WHkmouCY8','W7fVaxxcNfy','AXRcLa','W6/dUCoMWQlcR8kd','jSkUWPtcUaRdJG','W6SOgq','W73cVmkEW6q','mYH1AwNcTq','iSokWPL2','W6r/rbtdT8k1csddL8k4BYK','gSkpWOtcM8klW7u','ASo8W5JdV2tcNwhdKMpcQSk/WRJdIq','W7SIbCowW7Gq','WOjyWPRdUb/cNa','W4FdTNGuW5bQ','D8oHW7ZdSmoB','W4CzWPS7Fvm','W61Mymkm','WRnRsmkrdxm0','dmkKWPpcNSkgW4i','W596hCoUW6S2','hmktECoXWPS','W61ME3RdSLG','W68hl8k9','WOPBWPldSHS','ymkGcCkkWP7cGLBdKYja','o8k4WQ3cVIFdJq','W6/cKXXrW7O','W7TLohxcLKS','W7JcJXXDW7O','o8k9orO8','oCkzW7rptK3dQSoKxdhdLrm','WOBcGXG','W5n0BxldTq','W7m/bSokW6Sd','W5mPWPWIEvO','W6RcP8kDW6hcPZi','zv7dJ0Pl','wKxdSeeA','xr7cIbTa','WONcK0VdRSkuDW','r1fkWRPU','W658F8kilxi','W7GxW6RdSv3dOa','W4TTlNNcNa','g8ouwCo3WO8','WRtcKCon','fCk9WOBcOmkrW48','W44pgb/cPSon','W5qhW4pcPuJdNSkxWQPtj0DT','WPDzWR/dUGNcJq','W5a9W6dcJCk8WQq','WOxdIdK','WP9zCGZcNCokWOvMWPC','WP1MqYNdVW'];_0x1e27=function(){return _0x23953f;};return _0x1e27();}function firstUrl(..._0x1c2872){const _0x2ceae0=_0x5aaa,_0x2efaed=_0x5aaa;for(const _0x464ec8 of _0x1c2872){if(!_0x464ec8)continue;if(Array[_0x2ceae0(0xc0,'B87I')+'y'](_0x464ec8)){const _0x5f403e=_0x464ec8['find'](_0xa915e6=>_0xa915e6&&(_0xa915e6[_0x2efaed(0xec,'ao)6')+_0x2efaed(0xa3,'1ih[')+_0x2efaed(0xa4,'toVj')]||_0xa915e6[_0x2ceae0(0xff,'TwfJ')+_0x2efaed(0xc3,'6AWm')+_0x2efaed(0xf7,'6AWm')]||_0xa915e6[_0x2ceae0(0xbe,']VVu')]||_0xa915e6[_0x2ceae0(0xe7,'vvhJ')]));if(_0x5f403e)return _0x5f403e[_0x2ceae0(0x115,'SBC9')+_0x2efaed(0x92,'[MNZ')+_0x2ceae0(0xe9,'qQ11')]||_0x5f403e[_0x2efaed(0xdd,'jUXv')+_0x2efaed(0xcd,'Gjij')+'url']||_0x5f403e[_0x2efaed(0x10f,'vvhJ')]||_0x5f403e['uri'];continue;}const _0x61535d=_0x464ec8[_0x2ceae0(0xcf,'EBL7')+_0x2efaed(0xb9,'SBC9')+_0x2ceae0(0xb4,'QkB0')]||_0x464ec8[_0x2efaed(0x116,'PX#M')+_0x2efaed(0x98,'jzW#')+_0x2ceae0(0xbb,'iLCb')]||_0x464ec8[_0x2efaed(0xed,'(NeI')]||_0x464ec8[_0x2efaed(0xf1,'6AWm')];if(_0x61535d)return _0x61535d;}return null;}function attachmentsFromContent(_0x3a0087){const _0x2859eb=_0x5aaa,_0x56f574=_0x5aaa,_0x316898={'hHbgR':function(_0x275aaf,_0x33eff7,_0x5c9286){return _0x275aaf(_0x33eff7,_0x5c9286);},'lIQKe':_0x2859eb(0xef,'FZ59'),'xHTca':_0x56f574(0xe2,'lWt^'),'fQysJ':_0x2859eb(0xc7,'rQhz')+_0x2859eb(0xe4,'Qs^i')+'AudioC'+_0x2859eb(0xe1,'[MNZ'),'gLTop':_0x56f574(0x106,'FZ59'),'NeNfd':_0x2859eb(0xa5,'DbH]')+_0x2859eb(0xe3,'QkB0')+_0x2859eb(0xbc,'c9W!')+_0x56f574(0xba,'TwfJ')+_0x56f574(0xa2,'0kyb')+'nt','sSeUy':function(_0x13db65,_0x99ba8f,_0x225ab8){return _0x13db65(_0x99ba8f,_0x225ab8);},'EBasj':_0x56f574(0xd9,'O5^h'),'AtPRC':_0x2859eb(0x10b,'FZ59'),'JMbKR':function(_0x30ec12,_0x3512f3){return _0x30ec12(_0x3512f3);},'wvOJK':_0x2859eb(0xca,'QkB0')};if(!_0x3a0087)return[];const _0x52f273=_0x54176d=>Array[_0x2859eb(0xd3,'UcvP')+'y'](_0x54176d)?_0x54176d[0x0]:_0x54176d,_0x49179a=(_0x548db9,_0x5cb76c)=>_0x5cb76c?[{'type':_0x548db9,'url':_0x5cb76c,'caption':null}]:[];switch(_0x3a0087[_0x56f574(0x94,'qQ11')+_0x2859eb(0x9f,'EBL7')]){case _0x56f574(0xa5,'DbH]')+_0x56f574(0x99,'fku0')+_0x2859eb(0xaa,'TwfJ')+_0x56f574(0xd5,'TwfJ'):return _0x316898[_0x56f574(0xb3,'L8dz')](_0x49179a,_0x316898[_0x56f574(0x9e,'FPQb')],firstUrl(_0x3a0087[_0x56f574(0xac,'i&Bh')+_0x2859eb(0xa0,'i&Bh')],_0x3a0087[_0x56f574(0x112,'B87I')],_0x3a0087[_0x56f574(0xd1,'L8dz')]));case _0x56f574(0xa6,'DX@V')+_0x56f574(0x103,'i&Bh')+_0x56f574(0x10a,'jUXv')+_0x56f574(0x96,'Q&Wi')+'t':return _0x49179a(_0x316898[_0x2859eb(0xd7,'Mnpz')],firstUrl(_0x3a0087[_0x56f574(0x107,'5syf')],_0x3a0087[_0x56f574(0xb2,'rQhz')]));case _0x316898[_0x56f574(0x100,'qQ11')]:return _0x316898[_0x2859eb(0xb6,'qUmz')](_0x49179a,_0x316898[_0x56f574(0xae,'ao)6')],firstUrl(_0x3a0087[_0x2859eb(0xf2,'PX#M')],_0x3a0087[_0x2859eb(0xd4,'IK$Z')],_0x3a0087[_0x56f574(0xf6,'DX@V')+_0x56f574(0xf5,'9ySR')]));case _0x316898[_0x56f574(0xf9,']VVu')]:return _0x316898[_0x56f574(0x114,'i&Bh')](_0x49179a,_0x316898[_0x56f574(0xdf,'i&Bh')],_0x316898[_0x2859eb(0x111,'EBL7')](firstUrl,_0x3a0087[_0x2859eb(0xc6,'L8dz')+_0x56f574(0xa1,'jUXv')+'ia'],_0x3a0087[_0x2859eb(0xbf,'jUXv')]));case _0x56f574(0xfd,'c9W!')+_0x2859eb(0xe4,'Qs^i')+_0x56f574(0x95,'1ih[')+_0x56f574(0xc1,'b$)H'):return _0x316898[_0x56f574(0xe0,'1ih[')](_0x49179a,_0x316898['AtPRC'],_0x3a0087[_0x56f574(0x91,'Q&Wi')]?.[_0x2859eb(0xfc,'UcvP')+_0x56f574(0xdc,'Tpzw')+'e']?.[_0x56f574(0xf7,'6AWm')]||_0x316898[_0x2859eb(0xe6,'9ySR')](textOf,{'content':_0x3a0087})||null);default:{const _0x272879=_0x52f273(_0x3a0087[_0x56f574(0xcc,'6AWm')+_0x56f574(0xa9,'rQhz')])||_0x3a0087[_0x2859eb(0xc8,'5syf')]||_0x3a0087[_0x2859eb(0xd6,'IK$Z')]||_0x3a0087[_0x56f574(0x104,'EBL7')],_0x9f3640=firstUrl(_0x272879);if(!_0x9f3640)return[];return[{'type':_0x316898[_0x2859eb(0xf4,'fku0')],'url':_0x9f3640,'caption':null}];}}}function normalizeRepliedMessage(_0x5de99b,_0x22e89f={}){const _0x248ba9=_0x5aaa,_0x3247b7=_0x5aaa,_0xbeec05={'AiALo':function(_0x5c2661,_0x1bf991){return _0x5c2661!=_0x1bf991;},'hlsMk':function(_0xb44c88,_0x33920d){return _0xb44c88(_0x33920d);},'zoBBu':function(_0x5643cc,_0x4cf131){return _0x5643cc(_0x4cf131);},'MLgyI':function(_0x5cc5a0,_0x1dc59b){return _0x5cc5a0(_0x1dc59b);}};if(!_0x5de99b)return null;const _0x5dc90a=_0xbeec05[_0x248ba9(0x109,'c9W!')](_0x5de99b[_0x248ba9(0x9b,'HQn9')+_0x3247b7(0xe5,'TwfJ')],null)?String(_0x5de99b['sender'+_0x3247b7(0xda,'EBL7')]):null,_0x4ff9ce=_0x5dc90a&&_0x22e89f[_0x5dc90a]?_0x22e89f[_0x5dc90a]:_0x5dc90a;return{'messageID':_0xbeec05[_0x248ba9(0xce,'HQn9')](String,_0x5de99b['id']||_0x5de99b[_0x248ba9(0xdb,']VVu')+_0x248ba9(0xb8,'TwfJ')]||''),'senderID':_0x4ff9ce,'sender_fbid':_0x5dc90a,'senderName':_0x5de99b['sender']?.[_0x248ba9(0xd0,'zLWe')]||null,'body':_0xbeec05[_0x248ba9(0x10e,'EBL7')](textOf,_0x5de99b),'text':_0xbeec05[_0x3247b7(0x93,'(NeI')](textOf,_0x5de99b),'itemType':String(_0x5de99b[_0x3247b7(0xb0,'PX#M')+_0x248ba9(0x101,'Mnpz')]||'')[_0x3247b7(0xeb,'L8dz')+_0x248ba9(0x10d,'Gjij')](),'content_type':_0x5de99b[_0x248ba9(0x105,'vvhJ')+_0x3247b7(0xfa,'Q&Wi')],'attachments':_0xbeec05[_0x3247b7(0xde,'toVj')](attachmentsFromContent,_0x5de99b[_0x248ba9(0xa7,'SBC9')+'t']),'clientContext':_0x5de99b[_0x248ba9(0x102,'ao)6')+_0x3247b7(0x113,'jzW#')+'xt']||null,'timestamp':_0xbeec05[_0x3247b7(0xaf,'zLWe')](Number,_0x5de99b[_0x248ba9(0xfb,'Q&Wi')+_0x3247b7(0xf0,'iLCb')])||null};}module[_0x138483(0xc5,']VVu')+'s']={'textOf':textOf,'attachmentsFromContent':attachmentsFromContent,'normalizeRepliedMessage':normalizeRepliedMessage};
|
|
7
|
+
|
|
8
|
+
// Parsers for the Relay slide-message content shapes returned by
|
|
9
|
+
// PolarisDirectInboxQuery and IGDThreadDetailQuery. Both queries wrap a
|
|
10
|
+
// message as a node with { content_type, text_body, content }, where content
|
|
11
|
+
// carries a typed __typename and the media under a type-specific key.
|
|
12
|
+
|
|
13
|
+
function textOf(node) {
|
|
14
|
+
return node?.text_body || node?.content?.text_body || node?.content?.xma_text_body || "";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function firstUrl(...candidates) {
|
|
18
|
+
for (const c of candidates) {
|
|
19
|
+
if (!c) continue;
|
|
20
|
+
if (Array.isArray(c)) {
|
|
21
|
+
const hit = c.find((x) => x && (x.attachment_cdn_url || x.preview_cdn_url || x.url || x.uri));
|
|
22
|
+
if (hit) return hit.attachment_cdn_url || hit.preview_cdn_url || hit.url || hit.uri;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const url = c.attachment_cdn_url || c.preview_cdn_url || c.url || c.uri;
|
|
26
|
+
if (url) return url;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Maps a slide-message content object to an fca-style attachment array.
|
|
32
|
+
function attachmentsFromContent(content) {
|
|
33
|
+
if (!content) return [];
|
|
34
|
+
const pick = (arr) => (Array.isArray(arr) ? arr[0] : arr);
|
|
35
|
+
const one = (type, url) => (url ? [{ type, url, caption: null }] : []);
|
|
36
|
+
|
|
37
|
+
switch (content.__typename) {
|
|
38
|
+
case "SlideMessageImageContent":
|
|
39
|
+
return one("photo", firstUrl(content.attachments, content.images, content.image));
|
|
40
|
+
case "SlideMessageVideosContent":
|
|
41
|
+
return one("video", firstUrl(content.videos, content.video));
|
|
42
|
+
case "SlideMessageAudioContent":
|
|
43
|
+
return one("audio", firstUrl(content.audios, content.audio, content.audio_src));
|
|
44
|
+
case "SlideMessageAnimatedMediaContent":
|
|
45
|
+
return one("gif", firstUrl(content.animated_media, content.gifs));
|
|
46
|
+
case "SlideMessageXMAContent":
|
|
47
|
+
return one("share", content.xma?.preview_image?.url || textOf({ content }) || null);
|
|
48
|
+
default: {
|
|
49
|
+
const o = pick(content.attachments) || content.image || content.video || content.audio;
|
|
50
|
+
const url = firstUrl(o);
|
|
51
|
+
if (!url) return [];
|
|
52
|
+
return [{ type: "file", url, caption: null }];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Builds an fca-shaped reply context from a raw replied_to_message node. The
|
|
58
|
+
// sender fbid is mapped to the participant's Instagram id when the caller
|
|
59
|
+
// passes a lookup table.
|
|
60
|
+
function normalizeRepliedMessage(replied, fbidToIgid = {}) {
|
|
61
|
+
if (!replied) return null;
|
|
62
|
+
const senderFbid = replied.sender_fbid != null ? String(replied.sender_fbid) : null;
|
|
63
|
+
const mapped = senderFbid && fbidToIgid[senderFbid] ? fbidToIgid[senderFbid] : senderFbid;
|
|
64
|
+
return {
|
|
65
|
+
messageID: String(replied.id || replied.message_id || ""),
|
|
66
|
+
senderID: mapped,
|
|
67
|
+
sender_fbid: senderFbid,
|
|
68
|
+
senderName: replied.sender?.name || null,
|
|
69
|
+
body: textOf(replied),
|
|
70
|
+
text: textOf(replied),
|
|
71
|
+
itemType: String(replied.content_type || "").toLowerCase(),
|
|
72
|
+
content_type: replied.content_type,
|
|
73
|
+
attachments: attachmentsFromContent(replied.content),
|
|
74
|
+
clientContext: replied.client_context || null,
|
|
75
|
+
timestamp: Number(replied.timestamp_ms) || null
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
module.exports = { textOf, attachmentsFromContent, normalizeRepliedMessage };
|