@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/methods/media.js
CHANGED
|
@@ -4,4 +4,227 @@
|
|
|
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 _0x1ad26b=_0x6016,_0x2b9d35=_0x6016;(function(_0x2bd093,_0x31bb22){const _0x504daa=_0x6016,_0x2eceee=_0x6016,_0x4378fb=_0x2bd093();while(!![]){try{const _0x5bd9f7=parseInt(_0x504daa(0x16c,'jakI'))/0x1*(-parseInt(_0x504daa(0x211,'nOeQ'))/0x2)+parseInt(_0x2eceee(0x21c,'^gjH'))/0x3+-parseInt(_0x2eceee(0x198,'(ezT'))/0x4*(parseInt(_0x2eceee(0x18f,'[S#l'))/0x5)+parseInt(_0x504daa(0x20c,'gNN8'))/0x6+-parseInt(_0x2eceee(0x233,'Rs(v'))/0x7*(-parseInt(_0x2eceee(0x1cc,'*klT'))/0x8)+parseInt(_0x504daa(0x1c3,'gNN8'))/0x9*(parseInt(_0x504daa(0x177,'MZLt'))/0xa)+-parseInt(_0x504daa(0x180,'$9(U'))/0xb*(-parseInt(_0x504daa(0x263,'j0%^'))/0xc);if(_0x5bd9f7===_0x31bb22)break;else _0x4378fb['push'](_0x4378fb['shift']());}catch(_0x290936){_0x4378fb['push'](_0x4378fb['shift']());}}}(_0x1634,0xd7810));const axios=require(_0x1ad26b(0x1a4,'SyK5')),{UPLOAD,DOC_ID,EP}=require(_0x1ad26b(0x18b,'IprB')+_0x2b9d35(0x1a7,'d$#&'));function _0x6016(_0x3baf1c,_0xbf50cf){_0x3baf1c=_0x3baf1c-0x15f;const _0x163485=_0x1634();let _0x601602=_0x163485[_0x3baf1c];if(_0x6016['UOfbIK']===undefined){var _0x5914bf=function(_0x2e6000){const _0x1e9aec='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5b2d49='',_0x3ee542='';for(let _0x5891d0=0x0,_0x59bd37,_0x3cf249,_0x5dc676=0x0;_0x3cf249=_0x2e6000['charAt'](_0x5dc676++);~_0x3cf249&&(_0x59bd37=_0x5891d0%0x4?_0x59bd37*0x40+_0x3cf249:_0x3cf249,_0x5891d0++%0x4)?_0x5b2d49+=String['fromCharCode'](0xff&_0x59bd37>>(-0x2*_0x5891d0&0x6)):0x0){_0x3cf249=_0x1e9aec['indexOf'](_0x3cf249);}for(let _0x551b39=0x0,_0x301085=_0x5b2d49['length'];_0x551b39<_0x301085;_0x551b39++){_0x3ee542+='%'+('00'+_0x5b2d49['charCodeAt'](_0x551b39)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3ee542);};const _0x53e6a3=function(_0x17c1f8,_0x2cf5c6){let _0x217c63=[],_0x377b5f=0x0,_0x2a14b8,_0x5ce69a='';_0x17c1f8=_0x5914bf(_0x17c1f8);let _0x4e2fd0;for(_0x4e2fd0=0x0;_0x4e2fd0<0x100;_0x4e2fd0++){_0x217c63[_0x4e2fd0]=_0x4e2fd0;}for(_0x4e2fd0=0x0;_0x4e2fd0<0x100;_0x4e2fd0++){_0x377b5f=(_0x377b5f+_0x217c63[_0x4e2fd0]+_0x2cf5c6['charCodeAt'](_0x4e2fd0%_0x2cf5c6['length']))%0x100,_0x2a14b8=_0x217c63[_0x4e2fd0],_0x217c63[_0x4e2fd0]=_0x217c63[_0x377b5f],_0x217c63[_0x377b5f]=_0x2a14b8;}_0x4e2fd0=0x0,_0x377b5f=0x0;for(let _0x396bc2=0x0;_0x396bc2<_0x17c1f8['length'];_0x396bc2++){_0x4e2fd0=(_0x4e2fd0+0x1)%0x100,_0x377b5f=(_0x377b5f+_0x217c63[_0x4e2fd0])%0x100,_0x2a14b8=_0x217c63[_0x4e2fd0],_0x217c63[_0x4e2fd0]=_0x217c63[_0x377b5f],_0x217c63[_0x377b5f]=_0x2a14b8,_0x5ce69a+=String['fromCharCode'](_0x17c1f8['charCodeAt'](_0x396bc2)^_0x217c63[(_0x217c63[_0x4e2fd0]+_0x217c63[_0x377b5f])%0x100]);}return _0x5ce69a;};_0x6016['oEfJbP']=_0x53e6a3,_0x6016['PoNOVS']={},_0x6016['UOfbIK']=!![];}const _0x8a932d=_0x163485[0x0],_0x3d01b6=_0x3baf1c+_0x8a932d,_0x209575=_0x6016['PoNOVS'][_0x3d01b6];return!_0x209575?(_0x6016['qsyluS']===undefined&&(_0x6016['qsyluS']=!![]),_0x601602=_0x6016['oEfJbP'](_0x601602,_0xbf50cf),_0x6016['PoNOVS'][_0x3d01b6]=_0x601602):_0x601602=_0x209575,_0x601602;}function _0x1634(){const _0x5e942b=['sSohAmoxWP9u','bNZdTmokqg8','jSk4WQFcRci','W6tcT0qKf8kg','a8oOW5Tr','aw4WW6G2WPC','omkzWQa','aCkJgN7dPmoU','WR/dVSkAW5RcG8ocWPFcNuG','WOi+W6KgW4K1','W7NcP8kFbCovqq','r8kJeYZcQG0','hKfI','W4tcIdaAW73cUW','h8oqhq','wSkEjKW','W49DW7VcR0NcLa','W4NcI3ekqW','gKzJ','qHqIFCkshvtcP8krW4amW6WY','A1KqW6OLW54','W4pdV8oTW7Cr','awRdSSoj','W6HgW5i','WRWrWPxdSuWzWQPTaG','W7ZdTSkzz8otdW','Du7dOCorcq','pvtcNG','WQ/cTCoFn8kDnmobvmoTDtO','aCkiWRPaW4Xq','nLlcJqq','d2ZdQCou','WOzCW4W','p8kjWRzBW4zU','W6yendm','r2RdUmooqKu','mK5UjCoSxa','uSo2rYhcTmo+W47cJSkGnSkc','yu/dIq','fSo3amomBJi','WQ1IWQG','m8kzWQfbW4XF','g8o0W7Hnb0y','WP06W4lcNSkOW5DquG','ofieW4q','tmonW7hdH0un','pWeSW6Cqla','wmonW63dVhul','W7VdHctdTSk6rG','x8oXFSon','b8kKeNNdOa','dSkeW58H','W4lcLIWfoSkFl8oIi8kPWQpcMvW','W4/cJKaIrmko','ySovneBcImk1','q8oGECoj','W4r+W5hcNmklWRS','zeFdKConoa','wCkFirxcKIe','W5xcJYRcT8o7W5O','W4PVW4pcQmkX','lu3dHfnjWRzIWQTbc8koySow','F8oDmrVdJq','a8kZj3xdU8ot','W51aW7ZcPgW','WQvIWO7dL8ktWOu','W7BdJCoHW7yh','WOqgrmozWRVcKa','dCoCfMWObq','WQGhvCoBWQdcGG','WPz+iKNcUCoT','qCkIW6DsduCwaa','W5L1W4NdGMG','W6JcNJSqW48','a8kqWO7dLKxcHq','vCk8xmoCzdi','WRuNba','WOT4mN/cOCoM','WQbRW5uGWRRcKq','WPnczSo5WQhcOW','WROLbCkIWP7cNq','WR5MW5z0WQq','WOKmW74','iSo2k2qQ','rSonW7ddQ0id','eSobW6LblW','aCouku/dMu0','d8kZha','jfRcNqdcHr4','WP0BpZVcVIy','W4dcMcVcOG','FCk+ehW','zSk6WP8','Fwqq','WRatW7BcHXW','AmopWP5uW41tWQSh','W6RcQCoB','WQJdI8k+CeSyW6TxWO5E','le98kSokrG','c8odBSkKqCke','CSkjnXy','w2CqW7CYW7W','W5baW4NdMuWh','W5pcU8oiW6RcLCop','W6X1v8ouWQdcNWvIW6G','bKldUSovsG','F8oDoa','BCoroutcG8kl','W7JcQCoAW6G','cmoqhg0rnq','lCkzWRXwW7Lz','W7VdIIddL8kTbG','CrdcKG','WODoESoWWRBcLG','yNyCW70','WROLnCoQWOlcLW','qSkEduhdGaa','WQ9VWRFdJmkQ','W4HVW4RcQSkkW64','dvdcLGJcHYG','WQzIWR7dLSkaWR8','WObanuJcT8o3','A8k9WPlcLW','W5lcNZhcSG','W7pcLb8y','ChenW60','WPuyW74jW4iG','kSk4W6FcMNJcUa','fSkfW5G5','yKyeWPu','W6NcKmoJlxXZ','fCkvW4u1C8o4','A8k8qColtcK','W65hW4/dMvG7','dSkyb3JdSCoc','W4tdG8k8q8oR','W6hcMLiVva','W4GHWQVdU8oaW6S','gN3cNJZcMG','nIraWQXKWOJdVYGVW4yxomkG','W4pcLc4B','WOKmW6JcVtFcLG','WRfFECoNWQS','W7/dGJm','W5ZdGmoZW6el','W7JcMb1QW4JcVq','b8o+W5Hal0O','w2xdTa','ix4gW40','ou0sW4qf','W7zgW4hcMCkv','W5pcIde','W6j2W5tdMW','WOiBW6pcUq','WQa6W47cJsm','pfBcRq3cMcq','sSkPo17dIXe','W5xcJsZcV8oTW5y','ErXWWRvbpW','WPFdIM9SECob','aSohACk2','WR9kWR/dM8kiWOe','yNtdRSo6hmkK','yNpdO8oMhq','WQf3WR/dMa','W5xdLCkTqmoK','W5pcVZSyW47cPG','WRuKcmoSWPFcUW','BmomW6ChWPSgW60VmNNcS2m/','WPLWW63cKmo9W7n8xIHO','W6RcPCofW7NcNSoi','ACkwir/cLYy','vmk6smoetW','WQxcLxJcImkqBx9aW6SB','c8oYmeaT','WPGJpJxcHG','WOpdINnxx8oa','W6/cMmo1o3y','v8kTqmoTDdO','WO8cW78uW40G','W4BcGmoMW5pcMG','a0RdUmocqLq','W5XMW4RcJCkC','FCo5WR7cJL3cS8kVW6pcHq','WQ7dJvGmWP/dUCk2eHZdPbvP','WO0LfW','WPymW63cSbdcOa','xhddSSoHfSkR','x8k8wW','d8oaza','WObxFSoeWPq','WO93W4m6WOZcPW','W6RcTSkld8oiAG','zrjQ','WRu1bCoRWP/cKq','W6VcNmo0pa','W6LgW5q','WPCipdNcSIS','r8kyo3RdMWu','wmoeW6RdU0y','DmkvjHFcUce','W4GHWQ0','cmoqhg0ymW','WR5szSo5WRFcLG','p1BcIHBcJY8','c33dS8odu04','ECoDju3cJmkj','WOldHgRdO8kZW7ZdUIX1uNy','DSknWOFdNu3cGa','mmojDuBdJWZcTwGkdLa','WPqbW6pcOdNcLG','W4a2WRq','W7XgW4JdK2KB','W4fvC8oHWQ3cHq','W7OaWQ4en8oJ','cCoPsmoDuqPLFG','lCkzWRXwW79E','WQTyeKNcPmoM','ie4NW5GzWQS','k049W4u','xCkplfhdGaq','z8k6qmobCIK','iSkgW6aqta','WOpdINnxwCob','oCkFW403t8o5','WQaLeSo2','WPtdINjXESoo','BXZcKGyRW60','i8kgWOtdNfy','DKq5W70K','W5FcIrxcS8oMW5e','smkAW5S2','oSkzWR1WW5Xx','W7KrwJddN8oU','W6vnW6hcHCkkW6q','q8oCW7FdQa','e8kIhxtdK8op','z8kOWPlcHG','W7lcManLW4G','WOrZFSoNWR3cLG','WOafoCowWQ/cOq','WPyzW78i','amkvW5K','wCkRxCooEd4','WO96jvpcS8oT','W5GKusFdSa','W67dV8ouW4S','W6VcP8ku','WOnQmKNcUCoC','xCkEmfZdUaO','ufxdTmoK','D8o1WRNdRJJdQCowW4VcLSouWRNcU8ol','W6VdU8ku','W7irWQ8dlmkL','i8kGW6FcT38','umoeWP9LD8oLe8kDBwK','WPydW78uW6S1','cCkeW4qxuCo/','ymkvnq','Amk5WPtcQCoBWOe','ESkOWOFcGSovWOC','W5PDW6C','u2/dSq','EmoDo0xcU8kf','DmoKBmolWOH8','W6auWQCdnW','eSkIeNtdHCoo'];_0x1634=function(){return _0x5e942b;};return _0x1634();}class MediaMethods{constructor(_0x485ba2,_0x1d6d11){const _0x5d5ab9=_0x2b9d35,_0x3533c0=_0x2b9d35;this[_0x5d5ab9(0x183,'1BGK')]=_0x485ba2,this[_0x5d5ab9(0x23a,'iZtZ')+'ty']=_0x1d6d11;}[_0x1ad26b(0x19e,'jsX[')+_0x2b9d35(0x1d7,'*klT')+_0x1ad26b(0x1e9,'u[Xp')+'d'](){const _0x1af392=_0x2b9d35,_0x1e2489=_0x2b9d35;return this[_0x1af392(0x25a,'LiZ7')][_0x1af392(0x20f,'jsX[')+_0x1af392(0x253,'Nh*5')+'dingId']();}[_0x1ad26b(0x206,'lw8*')+_0x2b9d35(0x20a,'vnXT')+'er'](_0x448f6e){const _0x3d67fa=_0x2b9d35,_0x4ea67f=_0x2b9d35;return _0x3d67fa(0x19c,'[S#l')+_0x3d67fa(0x1ba,'WkvN')+_0x3d67fa(0x217,'oMdw')+_0x3d67fa(0x202,'Y1lv')+'m/dire'+_0x4ea67f(0x166,'d6F0')+_0x448f6e+'/';}[_0x2b9d35(0x241,'IprB')+_0x1ad26b(0x1f3,'nOeQ')](_0x51fd67=''){const _0x4890ba=_0x1ad26b,_0x30fa20=_0x2b9d35,_0x126d09={'ZYwiy':_0x4890ba(0x192,'Y1lv')+_0x4890ba(0x18a,'JvWm'),'ePBuF':_0x4890ba(0x230,'JvWm')+_0x30fa20(0x191,'HHd^')+'le','DSBYu':'file_t'+_0x4890ba(0x1c1,']Sl7'),'DvKAo':_0x4890ba(0x1c7,'Jwii')+_0x4890ba(0x1ed,'xGxl')+_0x30fa20(0x1b0,'*klT'),'YCYmm':_0x4890ba(0x16e,'dDgs')+_0x30fa20(0x168,'Z4S0'),'rHTLn':_0x4890ba(0x18d,'gNN8')+_0x4890ba(0x1f5,'^gjH')+_0x4890ba(0x25b,'dDgs'),'VVouW':_0x4890ba(0x185,'gNN8')+_0x30fa20(0x190,'6@vv'),'ZKSZT':_0x4890ba(0x258,']*oC')+_0x4890ba(0x267,'G)L)')+'f','HQFFN':_0x4890ba(0x19a,'KgIE')+_0x30fa20(0x1f0,'vnXT')},_0x48d70f=_0x126d09[_0x30fa20(0x1ec,'iBoW')][_0x30fa20(0x162,'iZtZ')]('|');let _0x4ce4aa=0x0;while(!![]){switch(_0x48d70f[_0x4ce4aa++]){case'0':return{'consumer':_0x126d09[_0x30fa20(0x1b9,'Z4S0')],'typeHeader':_0x126d09[_0x30fa20(0x1fe,'igQ$')]};case'1':if(/^image\//i[_0x30fa20(0x245,'*klT')](_0x51fd67))return{'consumer':_0x126d09[_0x30fa20(0x242,'j0%^')],'typeHeader':'image_'+_0x4890ba(0x1c8,'jsX[')};continue;case'2':if(/^video\//i[_0x4890ba(0x227,'*&Ed')](_0x51fd67))return{'consumer':_0x4890ba(0x1af,'IprB')+_0x30fa20(0x203,'(ezT')+_0x30fa20(0x1fb,'vnXT'),'typeHeader':_0x126d09[_0x30fa20(0x1b7,']AM(')]};continue;case'3':if(/^audio\//i[_0x4890ba(0x195,'%)51')](_0x51fd67))return{'consumer':_0x126d09[_0x30fa20(0x175,'iBoW')],'typeHeader':_0x126d09[_0x30fa20(0x1ac,'u[Xp')]};continue;case'4':if(/^image\/gif/i[_0x30fa20(0x1d0,'jakI')](_0x51fd67))return{'consumer':_0x126d09[_0x30fa20(0x1f4,'LiZ7')],'typeHeader':_0x126d09[_0x4890ba(0x209,'$9(U')]};continue;}break;}}async[_0x2b9d35(0x22f,'Nh*5')+'d'](_0x44f7d6,{buffer:_0x57a79f,filename:_0x3aa33a,contentType:_0x16f60c,voice:_0xae9f3a}){const _0x3ad18e=_0x1ad26b,_0x1aaac9=_0x2b9d35,_0x2c83cb={'pFAMX':function(_0x25f4aa,_0x485958){return _0x25f4aa/_0x485958;},'dhmsK':function(_0x5500a2,_0x21903a){return _0x5500a2%_0x21903a;},'lcgkN':function(_0xddc1d0,_0x56428e){return _0xddc1d0===_0x56428e;},'rPLdr':_0x3ad18e(0x252,'^gjH'),'QZxch':_0x1aaac9(0x212,']AM('),'fpmjY':function(_0x2ea1c6,_0x591a68){return _0x2ea1c6===_0x591a68;},'JLOOj':function(_0x213be0,_0x504d65){return _0x213be0>=_0x504d65;},'gcaic':function(_0x1611ae,_0x501dd0){return _0x1611ae(_0x501dd0);}},{consumer:_0x4a411f,typeHeader:_0x3b84c8}=this[_0x3ad18e(0x1ca,'u[Xp')+_0x3ad18e(0x1b6,'igQ$')](_0x16f60c);let _0x2e2da4;for(let _0x183f0d=0x0;;_0x183f0d++){if(_0x2c83cb[_0x3ad18e(0x210,'IprB')](_0x2c83cb[_0x3ad18e(0x249,']Sl7')],_0x2c83cb[_0x1aaac9(0x259,'#FTJ')]))_0x8d4686[_0x3ad18e(0x1e4,'j0%^')](_0x3ed4eb[_0x3ad18e(0x184,'!6Jd')](0x1,_0x2c83cb[_0x1aaac9(0x1a6,'LiZ7')](_0x2c83cb[_0x3ad18e(0x1d9,'k3yD')](_0x57604a[_0xe49051],0x80),0x7f)));else try{_0x2e2da4=await this[_0x1aaac9(0x24f,'HHd^')][_0x1aaac9(0x1b2,'!PET')+_0x3ad18e(0x21a,'[S#l')](_0x4a411f,_0x57a79f,{'filename':_0x3aa33a,'contentType':_0x16f60c,'typeHeader':_0x3b84c8,'referer':this['_threa'+_0x3ad18e(0x200,'WkvN')+'er'](_0x44f7d6)});break;}catch(_0x414e82){const _0x28ca95=_0x414e82['respon'+'se']?.['status'],_0x4d1205=_0x2c83cb['fpmjY'](_0x28ca95,0x19c)||/AuthorizationFailedError|temporary failure/i[_0x3ad18e(0x1be,'Rs(v')](_0x414e82[_0x1aaac9(0x1b8,'HHd^')+'e']||'');if(!_0x4d1205||_0x2c83cb[_0x3ad18e(0x218,'jakI')](_0x183f0d,0x2))throw _0x414e82;await new Promise(_0x18572d=>setTimeout(_0x18572d,0x5dc*(_0x183f0d+0x1)));}}const _0x23f528=_0x2e2da4?.[_0x3ad18e(0x1f1,'igQ$')+'id']??_0x2e2da4?.[_0x3ad18e(0x1dc,'k3yD')+'id_str']??_0x2e2da4?.[_0x3ad18e(0x1df,'Rs(v')];if(!_0x23f528)throw new Error(_0x3ad18e(0x1ae,'VPo3')+_0x3ad18e(0x187,'1BGK')+_0x3ad18e(0x1a2,'KgIE')+JSON[_0x3ad18e(0x1e2,'oMdw')+_0x1aaac9(0x176,'MZLt')](_0x2e2da4)[_0x1aaac9(0x22b,'HHd^')](0x0,0x12c));return{'fbid':_0x2c83cb[_0x1aaac9(0x196,'W%ba')](String,_0x23f528)};}[_0x2b9d35(0x161,'%)51')+_0x2b9d35(0x188,'MZLt')+'on'](_0x47638b){const _0x525be5=_0x2b9d35,_0x1c6a8b=_0x2b9d35,_0x50082a={'eJEFo':function(_0x55edce,_0x193632){return _0x55edce(_0x193632);}},_0x429480=_0x50082a['eJEFo'](String,_0x47638b)[_0x525be5(0x232,'KgIE')+'e'](/^for \(;;\);/,'');try{return JSON[_0x1c6a8b(0x215,'*&Ed')](_0x429480);}catch(_0x295cdf){return null;}}async[_0x2b9d35(0x229,'vWPT')+_0x2b9d35(0x199,'iBoW')](_0x1a69e7,_0x37ee09,_0x1640eb={}){const _0x1b53ca=_0x1ad26b,_0x5a8eae=_0x1ad26b,_0x3d6c69={'fefDI':_0x1b53ca(0x24e,'[S#l')+_0x1b53ca(0x24a,'Rs(v')+_0x5a8eae(0x164,'%)51')+_0x1b53ca(0x268,'G)L)')+'n','UStUp':function(_0x1f5fa9,_0x2cca62){return _0x1f5fa9(_0x2cca62);}};return this[_0x5a8eae(0x19b,'%)51')][_0x5a8eae(0x264,'oMdw')+_0x1b53ca(0x222,'Nh*5')](_0x3d6c69[_0x1b53ca(0x1a0,'[S#l')],DOC_ID[_0x5a8eae(0x169,'6@vv')+_0x5a8eae(0x1bf,'WkvN')],{'attachment_fbid':String(_0x37ee09),'thread_id':_0x3d6c69[_0x1b53ca(0x1b5,'!6Jd')](String,_0x1a69e7),'offline_threading_id':this['_offli'+_0x1b53ca(0x1a5,'k3yD')+_0x1b53ca(0x20b,'*klT')+'d'](),'reply_to_message_id':_0x1640eb[_0x1b53ca(0x1b3,'Nh*5')+_0x1b53ca(0x178,']Sl7')+_0x1b53ca(0x23f,'6@vv')]||null,'forwarded_from_thread_id':null,'is_forwarded_from_own_message':null},this[_0x1b53ca(0x181,'gNN8')+_0x5a8eae(0x16d,'oMdw')+'er'](_0x1a69e7));}async[_0x2b9d35(0x1ad,'vnXT')](_0x1c15d2,_0x33524d,_0x6b330f){const _0x1eff49=_0x2b9d35,_0x4195e6=_0x1ad26b,_0x5ec718=await this[_0x1eff49(0x1a9,'d$#&')+'d'](_0x1c15d2,_0x33524d),_0x6bb140=_0x5ec718[_0x1eff49(0x1d6,']Sl7')]||_0x5ec718[_0x1eff49(0x1a8,']AM(')+'id']||_0x5ec718[_0x4195e6(0x25c,']*oC')+'id'];if(!_0x6bb140)throw new Error(_0x4195e6(0x1bd,'vWPT')+_0x4195e6(0x239,'Nh*5')+_0x4195e6(0x1b4,'*klT')+_0x4195e6(0x234,'VPo3')+'\x20id:\x20'+JSON[_0x1eff49(0x1e2,'oMdw')+_0x4195e6(0x221,'Jwii')](_0x5ec718));const _0x547ba3=await this[_0x1eff49(0x1db,'JvWm')+_0x4195e6(0x205,'k3yD')](_0x1c15d2,_0x6bb140,_0x6b330f);return _0x6b330f[_0x4195e6(0x1e1,']Sl7')]&&await this[_0x4195e6(0x1c9,']Sl7')+_0x4195e6(0x21f,'lw8*')](_0x1c15d2,_0x6b330f[_0x1eff49(0x173,'WkvN')]),_0x547ba3;}async[_0x1ad26b(0x223,'!PET')+_0x2b9d35(0x201,'Rs(v')](_0x5f596f,_0x538d76){const _0x5e0691=_0x2b9d35,_0x419b13=_0x2b9d35,_0x5e05b0={'Pxors':_0x5e0691(0x23d,']*oC')+_0x419b13(0x1a3,'W%ba')+_0x419b13(0x1e8,'IprB')+_0x5e0691(0x1aa,']*oC'),'FrXkg':function(_0x1a0927,_0x2f5e3b){return _0x1a0927(_0x2f5e3b);},'PHmaY':_0x5e0691(0x1b1,']*oC')+_0x419b13(0x1dd,']*oC')+_0x5e0691(0x167,'iBoW')+_0x5e0691(0x1ea,'W%ba')+'ad','YGWEA':function(_0x1632c4,_0xdf0c2e){return _0x1632c4(_0xdf0c2e);}};try{await this[_0x419b13(0x197,'j0%^')][_0x5e0691(0x24d,'#FTJ')+'aphQL'](_0x5e05b0[_0x419b13(0x1f2,'Nh*5')],DOC_ID[_0x419b13(0x254,'*klT')+_0x5e0691(0x21d,'vWPT')],{'ig_thread_igid':_0x5e05b0['FrXkg'](String,_0x5f596f),'offline_threading_id':this[_0x419b13(0x244,'j0%^')+_0x5e0691(0x1ff,'JvWm')+_0x419b13(0x16b,'W%ba')+'d'](),'replied_to_client_context':null,'replied_to_item_id':null,'reply_to_message_id':null,'sampled':null,'text':{'sensitive_string_value':_0x5e05b0['FrXkg'](String,_0x538d76)},'mentions':[],'mentioned_user_ids':[],'commands':null,'forwarded_from_thread_id':null,'is_forwarded_from_own_message':null,'send_attribution':_0x5e05b0[_0x5e0691(0x213,'vWPT')]},this['_threa'+_0x419b13(0x219,'1BGK')+'er'](_0x5f596f));}catch(_0x532b6b){await this[_0x419b13(0x251,'G)L)')][_0x5e0691(0x1f6,'Z4S0')+'rm'](EP['BROADC'+_0x5e0691(0x16f,'jsX[')+'XT'],{'action':_0x419b13(0x22e,']AM(')+_0x419b13(0x1ce,'KgIE'),'thread_ids':JSON[_0x5e0691(0x240,'WkvN')+_0x419b13(0x1c0,'G)L)')]([_0x5e05b0[_0x419b13(0x19d,'lw8*')](String,_0x5f596f)]),'client_context':this['http']['uuid'](),'offline_threading_id':this[_0x5e0691(0x1c6,'MZLt')+'neThre'+_0x419b13(0x165,'1BGK')+'d'](),'text':_0x5e05b0[_0x5e0691(0x1eb,'$9(U')](String,_0x538d76)});}}[_0x1ad26b(0x1cb,'jakI')+_0x2b9d35(0x237,'xGxl')](_0xddda2a){const _0x3b6c10=_0x1ad26b,_0x1fc9f7=_0x2b9d35,_0x149978={'HNgYp':function(_0x3d4d21,_0x7037fa){return _0x3d4d21/_0x7037fa;}},_0x33b482=[],_0xd0d9cb=Math[_0x3b6c10(0x170,'MZLt')](0x1,Math[_0x3b6c10(0x262,'d6F0')](_0x149978[_0x1fc9f7(0x1ee,'JvWm')](_0xddda2a['length'],0xc8)));for(let _0x2a89d3=0x0;_0x2a89d3<_0xddda2a[_0x3b6c10(0x231,'1BGK')];_0x2a89d3+=_0xd0d9cb){_0x33b482[_0x1fc9f7(0x255,'oMdw')](Math[_0x1fc9f7(0x1d4,'B6qB')](0x1,_0x149978[_0x1fc9f7(0x17e,'lw8*')](_0xddda2a[_0x2a89d3]%0x80,0x7f)));}return _0x33b482;}async['sendPh'+_0x2b9d35(0x1e3,'d6F0')+_0x2b9d35(0x16a,'gNN8')](_0x4e360e,_0x5e6570,_0x38a29a={}){const _0x40a85c=_0x2b9d35,_0x312865=_0x2b9d35,_0x528cf0={'TzzSJ':_0x40a85c(0x1d3,'nOeQ')+_0x312865(0x208,'k3yD')};return this['_send'](_0x4e360e,{'buffer':_0x5e6570,'filename':_0x38a29a[_0x312865(0x1cf,'KgIE')+'me']||_0x312865(0x236,'igQ$')+Date['now']()+_0x312865(0x24b,'j0%^'),'contentType':_0x528cf0[_0x40a85c(0x1c2,'igQ$')]},_0x38a29a);}async[_0x1ad26b(0x1d2,'gNN8')+_0x1ad26b(0x1bb,'W%ba')](_0x48021b,_0x110350,_0x3548ff={}){const _0x4029a7=_0x1ad26b,_0x79938d=_0x2b9d35,_0x1a06f2=require('fs');return this[_0x4029a7(0x214,'(ezT')+'otoBuf'+_0x4029a7(0x1f7,'lw8*')](_0x48021b,_0x1a06f2[_0x4029a7(0x22c,'jsX[')+_0x79938d(0x23e,'6@vv')](_0x110350),_0x3548ff);}async[_0x1ad26b(0x250,'W%ba')+_0x1ad26b(0x265,'j0%^')+_0x2b9d35(0x25e,'lw8*')](_0x51f120,_0x30ccff,_0xb1b16e={}){const _0x3ebc51=_0x2b9d35,_0xb016b5=_0x2b9d35,_0x513e25={'EtMLN':_0x3ebc51(0x19f,'Rs(v')+_0xb016b5(0x1f9,'6@vv')},_0x53c5ca=await axios[_0xb016b5(0x17b,'u[Xp')](_0x30ccff,{'responseType':_0x513e25[_0x3ebc51(0x179,'LiZ7')]});return this[_0xb016b5(0x1e7,'j0%^')+_0x3ebc51(0x216,'IprB')+_0x3ebc51(0x256,'j0%^')](_0x51f120,Buffer['from'](_0x53c5ca[_0xb016b5(0x1de,'G)L)')]),_0xb1b16e);}async[_0x2b9d35(0x243,'(ezT')+_0x2b9d35(0x246,'(ezT')+_0x2b9d35(0x18c,'k3yD')](_0x24c0e3,_0x123840,_0x259651={}){const _0x87e00=_0x1ad26b,_0x5eb0cf=_0x1ad26b,_0x4bec29={'ZLdum':_0x87e00(0x1e6,'*&Ed')+_0x5eb0cf(0x260,'LiZ7')};return this[_0x87e00(0x207,'lw8*')](_0x24c0e3,{'buffer':_0x123840,'filename':_0x259651[_0x5eb0cf(0x1d5,'Nh*5')+'me']||_0x87e00(0x1bc,'JvWm')+Date[_0x5eb0cf(0x15f,'lw8*')]()+_0x5eb0cf(0x1e5,'6@vv'),'contentType':_0x4bec29[_0x5eb0cf(0x1fa,'[S#l')]},_0x259651);}async[_0x2b9d35(0x25d,'WkvN')+_0x1ad26b(0x172,']AM(')](_0x268ebc,_0x4c0009,_0x3a2b45={}){const _0x1b80b1=_0x2b9d35,_0x3b7966=_0x1ad26b,_0x1eedaa={'aZgqm':function(_0x3042ba,_0x4db818){return _0x3042ba(_0x4db818);}},_0x70d104=_0x1eedaa[_0x1b80b1(0x1cd,'1BGK')](require,'fs');return this[_0x1b80b1(0x238,'u[Xp')+_0x3b7966(0x24c,'gNN8')+_0x3b7966(0x1c4,'jakI')](_0x268ebc,_0x70d104[_0x1b80b1(0x163,'W%ba')+_0x1b80b1(0x1d8,'WkvN')](_0x4c0009),_0x3a2b45);}async[_0x1ad26b(0x247,'B6qB')+_0x1ad26b(0x1da,'[S#l')+_0x1ad26b(0x1f8,'6@vv')](_0x4c6c85,_0x8f35de,_0x18d65e={}){const _0x3b04fe=_0x2b9d35,_0x5a6fbd=_0x2b9d35,_0x156241=await axios[_0x3b04fe(0x22d,'xGxl')](_0x8f35de,{'responseType':_0x3b04fe(0x257,'IprB')+'uffer'});return this[_0x3b04fe(0x174,'SyK5')+_0x3b04fe(0x24c,'gNN8')+_0x5a6fbd(0x256,'j0%^')](_0x4c6c85,Buffer[_0x5a6fbd(0x1fd,'igQ$')](_0x156241[_0x3b04fe(0x204,'Jwii')]),_0x18d65e);}async[_0x2b9d35(0x160,'KgIE')+_0x1ad26b(0x22a,'WkvN')+_0x1ad26b(0x269,'SyK5')](_0x5a074f,_0x53ef71,_0x35c1fd={}){const _0x547402=_0x1ad26b,_0x1e3ab9=_0x1ad26b,_0x2d6dad={'mXjPB':_0x547402(0x261,'iZtZ')+_0x547402(0x17f,'JvWm')};return this['_send'](_0x5a074f,{'buffer':_0x53ef71,'filename':_0x35c1fd[_0x547402(0x20e,'jakI')+'me']||_0x547402(0x226,'*klT')+_0x547402(0x1e0,'^gjH')+Date[_0x547402(0x225,'Y1lv')]()+_0x547402(0x186,'vWPT'),'contentType':_0x2d6dad['mXjPB'],'voice':!![]},_0x35c1fd);}async[_0x1ad26b(0x171,'vnXT')+'ice'](_0x3b460a,_0x4fc096,_0x58fd45={}){const _0x2acd1d=_0x2b9d35,_0x33152f=_0x2b9d35,_0x3d8b03=require('fs');return this[_0x2acd1d(0x23c,'gNN8')+'iceBuf'+_0x33152f(0x228,'u[Xp')](_0x3b460a,_0x3d8b03[_0x2acd1d(0x21e,'igQ$')+_0x2acd1d(0x18e,'Z4S0')](_0x4fc096),_0x58fd45);}async[_0x2b9d35(0x1d1,']AM(')+_0x1ad26b(0x194,'nOeQ')+_0x1ad26b(0x1fc,'u[Xp')](_0x1a6519,_0x313bb9,_0x534802={}){const _0x2ba4de=_0x2b9d35,_0x1fdf98=_0x1ad26b,_0x1f183a=await axios[_0x2ba4de(0x220,'IprB')](_0x313bb9,{'responseType':_0x1fdf98(0x17d,'$9(U')+_0x1fdf98(0x248,'VPo3')});return this[_0x1fdf98(0x193,'HHd^')+'iceBuf'+_0x2ba4de(0x266,'jsX[')](_0x1a6519,Buffer[_0x1fdf98(0x17a,'1BGK')](_0x1f183a[_0x1fdf98(0x182,'JvWm')]),_0x534802);}}module[_0x1ad26b(0x224,'dDgs')+'s']=MediaMethods;
|
|
7
|
+
|
|
8
|
+
const axios = require("axios");
|
|
9
|
+
const { UPLOAD, DOC_ID, EP } = require("../constants");
|
|
10
|
+
const { globalAntiSuspension } = require("../utils/antiSuspension");
|
|
11
|
+
|
|
12
|
+
// Instagram's web DM client uploads a file to /ajax/mercury/upload.php and then
|
|
13
|
+
// commits the send with the IGDirectMediaSendMutation Relay operation. This is
|
|
14
|
+
// the flow captured from a live www.instagram.com session — the old mobile
|
|
15
|
+
// rupload_igphoto/rupload_igvideo/configure_* endpoints are not used here.
|
|
16
|
+
class MediaMethods {
|
|
17
|
+
constructor(http, identity) {
|
|
18
|
+
this.http = http;
|
|
19
|
+
this.identity = identity;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
_offlineThreadingId() {
|
|
23
|
+
return this.http.offlineThreadingId();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
_threadReferer(threadID) {
|
|
27
|
+
return `https://www.instagram.com/direct/t/${threadID}/`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Maps a MIME type to the rupload consumer segment + the type header the DM
|
|
31
|
+
// composer sends alongside it (video_type/image_type/audio_type/file_type).
|
|
32
|
+
_consumer(contentType = "") {
|
|
33
|
+
if (/^image\/gif/i.test(contentType)) return { consumer: "messenger_gif", typeHeader: "image_type" };
|
|
34
|
+
if (/^image\//i.test(contentType)) return { consumer: "messenger_image", typeHeader: "image_type" };
|
|
35
|
+
if (/^video\//i.test(contentType)) return { consumer: "messenger_video", typeHeader: "video_type" };
|
|
36
|
+
if (/^audio\//i.test(contentType)) return { consumer: "messenger_audio", typeHeader: "audio_type" };
|
|
37
|
+
return { consumer: "messenger_file", typeHeader: "file_type" };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async _upload(threadID, { buffer, filename, contentType, voice }) {
|
|
41
|
+
const { consumer, typeHeader } = this._consumer(contentType);
|
|
42
|
+
|
|
43
|
+
// Instagram intermittently answers the upload with HTTP 412
|
|
44
|
+
// AuthorizationFailedError even for a valid session; a short backoff retry
|
|
45
|
+
// clears it (observed as a transient rate-limit, not a real auth failure).
|
|
46
|
+
let data;
|
|
47
|
+
for (let attempt = 0; ; attempt++) {
|
|
48
|
+
try {
|
|
49
|
+
data = await this.http.postRupload(consumer, buffer, {
|
|
50
|
+
filename,
|
|
51
|
+
contentType,
|
|
52
|
+
typeHeader,
|
|
53
|
+
referer: this._threadReferer(threadID)
|
|
54
|
+
});
|
|
55
|
+
break;
|
|
56
|
+
} catch (error) {
|
|
57
|
+
const status = error.response?.status;
|
|
58
|
+
const retriable = status === 412 || /AuthorizationFailedError|temporary failure/i.test(error.message || "");
|
|
59
|
+
if (!retriable || attempt >= 2) throw error;
|
|
60
|
+
await new Promise((r) => setTimeout(r, 1500 * (attempt + 1)));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const mediaId = data?.media_id ?? data?.media_id_str ?? data?.fbid;
|
|
64
|
+
if (!mediaId) {
|
|
65
|
+
throw new Error(`Upload rejected: ${JSON.stringify(data).slice(0, 300)}`);
|
|
66
|
+
}
|
|
67
|
+
return { fbid: String(mediaId) };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// IG prefixes JSON responses with "for (;;);" to defeat JSON hijacking.
|
|
71
|
+
_parseAntiJson(text) {
|
|
72
|
+
const cleaned = String(text).replace(/^for \(;;\);/, "");
|
|
73
|
+
try {
|
|
74
|
+
return JSON.parse(cleaned);
|
|
75
|
+
} catch (_) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async _commitMedia(threadID, attachmentFbid, options = {}) {
|
|
81
|
+
return this.http.postGraphQL(
|
|
82
|
+
"IGDirectMediaSendMutation",
|
|
83
|
+
DOC_ID.MEDIA_SEND,
|
|
84
|
+
{
|
|
85
|
+
attachment_fbid: String(attachmentFbid),
|
|
86
|
+
thread_id: String(threadID),
|
|
87
|
+
offline_threading_id: this._offlineThreadingId(),
|
|
88
|
+
reply_to_message_id: options.replyToMessageId || null,
|
|
89
|
+
forwarded_from_thread_id: null,
|
|
90
|
+
is_forwarded_from_own_message: null
|
|
91
|
+
},
|
|
92
|
+
this._threadReferer(threadID),
|
|
93
|
+
{ throwOnError: true }
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async _send(threadID, uploadOptions, options) {
|
|
98
|
+
// Instagram's DM media mutation has no caption field, so an attachment with
|
|
99
|
+
// text is necessarily two messages. The recipient-visible contract is that
|
|
100
|
+
// the caption reaches Instagram before the media (so the text renders on top
|
|
101
|
+
// and the image underneath — what GoatBot-Pro commands intend).
|
|
102
|
+
//
|
|
103
|
+
// The upload is by far the slow part of a media send. If the caption is
|
|
104
|
+
// committed while the upload is still in flight, the text appears at once
|
|
105
|
+
// and the image arrives a couple of seconds later on its own. Doing the
|
|
106
|
+
// upload first and then committing caption + media back-to-back makes the
|
|
107
|
+
// two land together, which is what a person perceives as "one message".
|
|
108
|
+
const metadata = await this._upload(threadID, uploadOptions);
|
|
109
|
+
const fbid = metadata.fbid || metadata.video_id || metadata.audio_id;
|
|
110
|
+
if (!fbid) throw new Error(`Upload returned no media id: ${JSON.stringify(metadata)}`);
|
|
111
|
+
let result;
|
|
112
|
+
try {
|
|
113
|
+
if (options.text) {
|
|
114
|
+
await globalAntiSuspension.waitForTurn(threadID);
|
|
115
|
+
await this._sendCaption(threadID, options.text);
|
|
116
|
+
}
|
|
117
|
+
// Count the media against the same pacing/volume budget, but with no gap
|
|
118
|
+
// after a caption so the image immediately follows the text.
|
|
119
|
+
await globalAntiSuspension.waitForTurn(threadID, { immediate: !!options.text });
|
|
120
|
+
result = await this._commitMedia(threadID, fbid, options);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
globalAntiSuspension.noteSendError(error);
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Media sends have no caption field, so the attached text is sent as a
|
|
129
|
+
// separate message ahead of the media (same as the app does when you attach a
|
|
130
|
+
// message, except the app shows the typed text above the attachment).
|
|
131
|
+
async _sendCaption(threadID, text) {
|
|
132
|
+
try {
|
|
133
|
+
await this.http.postGraphQL(
|
|
134
|
+
"IGDirectTextSendMutation",
|
|
135
|
+
DOC_ID.TEXT_SEND,
|
|
136
|
+
{
|
|
137
|
+
ig_thread_igid: String(threadID),
|
|
138
|
+
offline_threading_id: this._offlineThreadingId(),
|
|
139
|
+
replied_to_client_context: null,
|
|
140
|
+
replied_to_item_id: null,
|
|
141
|
+
reply_to_message_id: null,
|
|
142
|
+
sampled: null,
|
|
143
|
+
text: { sensitive_string_value: String(text) },
|
|
144
|
+
mentions: [],
|
|
145
|
+
mentioned_user_ids: [],
|
|
146
|
+
commands: null,
|
|
147
|
+
forwarded_from_thread_id: null,
|
|
148
|
+
is_forwarded_from_own_message: null,
|
|
149
|
+
send_attribution: "igd_web_chat_tab:in_thread"
|
|
150
|
+
},
|
|
151
|
+
this._threadReferer(threadID),
|
|
152
|
+
{ throwOnError: true }
|
|
153
|
+
);
|
|
154
|
+
} catch (_) {
|
|
155
|
+
await this.http.postForm(EP.BROADCAST_TEXT, {
|
|
156
|
+
action: "send_item",
|
|
157
|
+
thread_ids: JSON.stringify([String(threadID)]),
|
|
158
|
+
client_context: this.http.uuid(),
|
|
159
|
+
offline_threading_id: this._offlineThreadingId(),
|
|
160
|
+
text: String(text)
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
_waveform(buffer) {
|
|
166
|
+
const samples = [];
|
|
167
|
+
const step = Math.max(1, Math.floor(buffer.length / 200));
|
|
168
|
+
for (let i = 0; i < buffer.length; i += step) {
|
|
169
|
+
samples.push(Math.min(1, (buffer[i] % 128) / 127));
|
|
170
|
+
}
|
|
171
|
+
return samples;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
async sendPhotoBuffer(threadID, buffer, options = {}) {
|
|
175
|
+
return this._send(threadID, {
|
|
176
|
+
buffer,
|
|
177
|
+
filename: options.filename || `photo_${Date.now()}.jpg`,
|
|
178
|
+
contentType: "image/jpeg"
|
|
179
|
+
}, options);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async sendPhoto(threadID, filePath, options = {}) {
|
|
183
|
+
const fs = require("fs");
|
|
184
|
+
return this.sendPhotoBuffer(threadID, fs.readFileSync(filePath), options);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
async sendPhotoFromUrl(threadID, url, options = {}) {
|
|
188
|
+
const res = await axios.get(url, { responseType: "arraybuffer" });
|
|
189
|
+
return this.sendPhotoBuffer(threadID, Buffer.from(res.data), options);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async sendVideoBuffer(threadID, buffer, options = {}) {
|
|
193
|
+
return this._send(threadID, {
|
|
194
|
+
buffer,
|
|
195
|
+
filename: options.filename || `video_${Date.now()}.mp4`,
|
|
196
|
+
contentType: "video/mp4"
|
|
197
|
+
}, options);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
async sendVideo(threadID, filePath, options = {}) {
|
|
201
|
+
const fs = require("fs");
|
|
202
|
+
return this.sendVideoBuffer(threadID, fs.readFileSync(filePath), options);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async sendVideoFromUrl(threadID, url, options = {}) {
|
|
206
|
+
const res = await axios.get(url, { responseType: "arraybuffer" });
|
|
207
|
+
return this.sendVideoBuffer(threadID, Buffer.from(res.data), options);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async sendVoiceBuffer(threadID, buffer, options = {}) {
|
|
211
|
+
return this._send(threadID, {
|
|
212
|
+
buffer,
|
|
213
|
+
filename: options.filename || `audioclip-${Date.now()}.ogg`,
|
|
214
|
+
contentType: "audio/ogg",
|
|
215
|
+
voice: true
|
|
216
|
+
}, options);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async sendVoice(threadID, filePath, options = {}) {
|
|
220
|
+
const fs = require("fs");
|
|
221
|
+
return this.sendVoiceBuffer(threadID, fs.readFileSync(filePath), options);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
async sendVoiceFromUrl(threadID, url, options = {}) {
|
|
225
|
+
const res = await axios.get(url, { responseType: "arraybuffer" });
|
|
226
|
+
return this.sendVoiceBuffer(threadID, Buffer.from(res.data), options);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
module.exports = MediaMethods;
|
package/src/methods/message.js
CHANGED
|
@@ -4,4 +4,118 @@
|
|
|
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 _0x48132d=_0x3764,_0xb386a9=_0x3764;function _0x3e66(){const _0x6a1c1=['mgWnpa','WQ1VW4O','h0RdIY0uWO7dSCkwW6LmW63cPCks','W4pdLvVcUJhdUq','WQNcMYqfwmoI','DNdcHCkM','imoDqMO','iGtdGhdcRvW','DmodW4BdUSka','ENT2','W65mWOGmhvO','W5pcHCo2W7PZlW','W57dKSkveWfU','W4vuWO9+WOvTW4ZdUmkrD8oHW6HQ','fmoTewRcNvq','jSoJwK3dTW','z8k0WR1/iCkn','FexcOSk+WQW','W47cMr/dUSoj','WR3cSam','WPW7kf3cPq','WPJcPWmUs8ov','qJ3cNNf3','WRDVW63cObS','gY16WQz4W5C','W6LrW7aJW6ZdNq','W6BcVIJcJfNcJG','hrP7hqi','W4JcN8kbW5/dRCkK','WQBcSWJdQmoiWRa','WRZdMCoqW5b0fq','W5ZcOSoWW7Oe','W4CSW6xcJSo7','WRRdSKXkW7C','W4pcVmkSWQGCyuRcI2mIW5VcGq','f8o4o0lcGa','BcJcVfXLW7G','amk4WRxcL8o2WQPjBX5SDCoGWRC','wgGGyW','W63cLSoKW44Z','E8k3WRv3','WQ3cMYmBs8oI','wCo7W7FdNG','WP3cMCojaW9N','ecddM2VcVa','D8oxiG/cHxe','W5FcNSo3xmoKmG','W7O7W7jLwmoBWO09WQ4eFxid','W4ldO8oKWOXr','vNFcMmotWPG','W4WIsYiRWOu/W6ddNCkBW44DWPC','fCoYbMlcNW','W4ddJ33cKIC','WPFdKSo2W7vkjq','WORdKSoyW6FdICktvwTN','W5/dOmo8WQzG','W6S+W57cLtldLSosia','WPNcKSojba9N','W7npWPW','pdj4vCoFWRS','WR97WPWZca','W5T6WRemohC','WQVdRvDVW7ZcPW','WO8bW5eO','WQGWWPOeichcIJK','CYVcLCk/WPSC','pmkdl1GVW7K','asTIkSktWQ7dKfqqmHzszq','EstdV0/dICk6','DrBdRG','W6RcUXXxW6RcKCk7WRvl','WRjgchJdL8kd','BmkJs3NdPde','oSoNW6SGFmosW5jVc8kMlfS','sYddV8kqW43dHK1J','W75GW6G9W7a','WQhcOrRdTa','W5ldNmoqWQTOdq','W4tdHSoMWQPVhq','W6aJgGW4xwZdSG','W4OPEIxdTW','WRfEsqJdQ8ot','W7RdVW8uW7ddN8oXoH/cTrbkWPm','W47cKH8','W5dcI8oXxmoLoW','WRldRuO','W7XoWR0ugW','WPNdJgxcHCk2ytddLqRcI0iyWPK','A8kMW7rNzW','sHpcNxPOW58','WRTKWRKHk8kb','WPJcImooaa','qNKKF8ojW78','WQjIdayzEa','WR1vW5pcGGZdUa','kcVdN2hcR1W','W43cHmoYW70R','EMxcHCk3','W60uubVdG8ku','EqJdP1ldNSkV','q8kQuZBdMXy2vmo/W49HFq','W59aWQOOhIS','W7/cHCoLW7eNiq','qCkvWP96oSkg','W64tWQNcQdKN','W7pdMmoHWR55','xtmWESosW78','WPBcLgtdHe3dJXuSWOrlcmoI','W57dLeBcRG','W6lcNb/cLKRcJa','E2hcKSonWQxcJG','CgKGvSkh','pCoCx34','pgyxpmoTWPe','yMNcHCoMWPtcHa','WONdVHhcRb8','hmkdl1G9W6u','W6tcHCoJW6G6Fa','BdXuFmk4W4dcQhrVW7q8DG','WRf+W5pcNq','WPJcPWmUsSoi','WP3dUCoHW60'];_0x3e66=function(){return _0x6a1c1;};return _0x3e66();}(function(_0x1e7b4b,_0x1f4111){const _0x3d9249=_0x3764,_0x449d5b=_0x3764,_0xaffd27=_0x1e7b4b();while(!![]){try{const _0xcbd3db=-parseInt(_0x3d9249(0xd2,'!W!%'))/0x1+-parseInt(_0x449d5b(0x99,'hfPP'))/0x2+-parseInt(_0x449d5b(0xba,'7nr#'))/0x3*(parseInt(_0x3d9249(0x8e,'EZS3'))/0x4)+parseInt(_0x449d5b(0xa5,'9St@'))/0x5*(-parseInt(_0x449d5b(0xcc,'9B7#'))/0x6)+parseInt(_0x449d5b(0xdd,'^!kn'))/0x7+parseInt(_0x449d5b(0xa8,'IhTv'))/0x8+-parseInt(_0x3d9249(0x9c,'&9J2'))/0x9*(-parseInt(_0x449d5b(0x78,'8If!'))/0xa);if(_0xcbd3db===_0x1f4111)break;else _0xaffd27['push'](_0xaffd27['shift']());}catch(_0x5da444){_0xaffd27['push'](_0xaffd27['shift']());}}}(_0x3e66,0xaff0b));const {EP,DOC_ID}=require(_0x48132d(0xdc,'!hwu')+_0x48132d(0xb3,'9St@'));function _0x3764(_0x3299e4,_0x19cefd){_0x3299e4=_0x3299e4-0x76;const _0x3e6690=_0x3e66();let _0x37640d=_0x3e6690[_0x3299e4];if(_0x3764['ZRQfzU']===undefined){var _0x251eef=function(_0x2f236c){const _0x59f1a6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x824700='',_0x7197cf='';for(let _0x2095b0=0x0,_0x305c17,_0x388f1c,_0x110d93=0x0;_0x388f1c=_0x2f236c['charAt'](_0x110d93++);~_0x388f1c&&(_0x305c17=_0x2095b0%0x4?_0x305c17*0x40+_0x388f1c:_0x388f1c,_0x2095b0++%0x4)?_0x824700+=String['fromCharCode'](0xff&_0x305c17>>(-0x2*_0x2095b0&0x6)):0x0){_0x388f1c=_0x59f1a6['indexOf'](_0x388f1c);}for(let _0x2e75f0=0x0,_0xd104f6=_0x824700['length'];_0x2e75f0<_0xd104f6;_0x2e75f0++){_0x7197cf+='%'+('00'+_0x824700['charCodeAt'](_0x2e75f0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x7197cf);};const _0x275dd5=function(_0x5d54eb,_0xe25e01){let _0x391a85=[],_0x19f16e=0x0,_0x1c369a,_0xdf152e='';_0x5d54eb=_0x251eef(_0x5d54eb);let _0x97daf9;for(_0x97daf9=0x0;_0x97daf9<0x100;_0x97daf9++){_0x391a85[_0x97daf9]=_0x97daf9;}for(_0x97daf9=0x0;_0x97daf9<0x100;_0x97daf9++){_0x19f16e=(_0x19f16e+_0x391a85[_0x97daf9]+_0xe25e01['charCodeAt'](_0x97daf9%_0xe25e01['length']))%0x100,_0x1c369a=_0x391a85[_0x97daf9],_0x391a85[_0x97daf9]=_0x391a85[_0x19f16e],_0x391a85[_0x19f16e]=_0x1c369a;}_0x97daf9=0x0,_0x19f16e=0x0;for(let _0x47f9a1=0x0;_0x47f9a1<_0x5d54eb['length'];_0x47f9a1++){_0x97daf9=(_0x97daf9+0x1)%0x100,_0x19f16e=(_0x19f16e+_0x391a85[_0x97daf9])%0x100,_0x1c369a=_0x391a85[_0x97daf9],_0x391a85[_0x97daf9]=_0x391a85[_0x19f16e],_0x391a85[_0x19f16e]=_0x1c369a,_0xdf152e+=String['fromCharCode'](_0x5d54eb['charCodeAt'](_0x47f9a1)^_0x391a85[(_0x391a85[_0x97daf9]+_0x391a85[_0x19f16e])%0x100]);}return _0xdf152e;};_0x3764['OOtlrP']=_0x275dd5,_0x3764['apAwxO']={},_0x3764['ZRQfzU']=!![];}const _0x145929=_0x3e6690[0x0],_0x2a646d=_0x3299e4+_0x145929,_0x3ed66a=_0x3764['apAwxO'][_0x2a646d];return!_0x3ed66a?(_0x3764['FbUUfF']===undefined&&(_0x3764['FbUUfF']=!![]),_0x37640d=_0x3764['OOtlrP'](_0x37640d,_0x19cefd),_0x3764['apAwxO'][_0x2a646d]=_0x37640d):_0x37640d=_0x3ed66a,_0x37640d;}class MessageMethods{constructor(_0x29ed72){const _0x35e1fd=_0xb386a9;this[_0x35e1fd(0x80,'0GB(')]=_0x29ed72;}async[_0xb386a9(0x7e,'J$TG')](_0x2406bb,_0x2dc9d0,_0x5aed6c=null){const _0x31dc49=_0xb386a9,_0x3cc195=_0x48132d,_0x15fd5e={'TXDZk':function(_0x2cfade,_0x502bd5){return _0x2cfade==_0x502bd5;},'nHiia':function(_0x17325d,_0x51a362){return _0x17325d===_0x51a362;},'PSgbM':_0x31dc49(0xb5,'[MAi'),'fgXGo':function(_0x1d3fef,_0x4585b0){return _0x1d3fef(_0x4585b0);},'sKqCP':function(_0x43ede6,_0x1fe219){return _0x43ede6(_0x1fe219);},'DqnAJ':_0x3cc195(0xc4,'%B]C')+_0x3cc195(0x8b,'8If!')+_0x31dc49(0xdb,'7NhK')+_0x3cc195(0x83,'lInV')+'ad','Aueeb':_0x31dc49(0x98,'job4')+_0x3cc195(0xe3,'#bOe')},_0x5f4fc0=_0x15fd5e[_0x3cc195(0xa6,'enXU')](_0x5aed6c,null)?null:_0x15fd5e[_0x3cc195(0x8d,'&Yw@')](typeof _0x5aed6c,_0x15fd5e[_0x31dc49(0xef,'7NhK')])?_0x5aed6c[_0x31dc49(0x81,'!hwu')+_0x31dc49(0xa9,'SiO&')]||_0x5aed6c['id']||null:_0x15fd5e[_0x31dc49(0xac,'$uvG')](String,_0x5aed6c);try{return await this[_0x3cc195(0xcd,'EZS3')][_0x3cc195(0xe5,'zrdx')+_0x31dc49(0xeb,'v9zl')](_0x31dc49(0xc3,'SiO&')+_0x31dc49(0xbe,'$tb*')+_0x31dc49(0xca,'job4')+_0x3cc195(0xaa,'pGr$'),DOC_ID['TEXT_S'+'END'],{'ig_thread_igid':String(_0x2dc9d0),'offline_threading_id':this[_0x31dc49(0xc6,'Gf]V')][_0x31dc49(0xed,'#bOe')+_0x31dc49(0x9a,'rhD!')+_0x3cc195(0xaf,'!W!%')](),'recipient_igids':null,'replied_to_client_context':null,'replied_to_item_id':null,'reply_to_message_id':_0x5f4fc0,'sampled':null,'text':{'sensitive_string_value':_0x15fd5e[_0x31dc49(0x86,'&Yw@')](String,_0x2406bb)},'mentions':[],'mentioned_user_ids':[],'commands':null,'forwarded_from_thread_id':null,'is_forwarded_from_own_message':null,'send_attribution':_0x15fd5e[_0x31dc49(0x87,'%B]C')]},_0x31dc49(0xd3,'Z$xq')+_0x31dc49(0x91,'Xl#P')+_0x3cc195(0x8f,'!hwu')+'ram.co'+_0x3cc195(0xc0,'hfPP')+_0x3cc195(0xae,'J$TG')+_0x2dc9d0+'/');}catch(_0x4230d9){const _0xa5b1fb=this[_0x31dc49(0xa2,'#bOe')][_0x3cc195(0xd6,'Gf]V')](),_0x1c95d8={'action':_0x15fd5e[_0x31dc49(0xb6,'7NhK')],'thread_ids':JSON[_0x3cc195(0xbc,'7NhK')+_0x3cc195(0x9b,'rhD!')]([_0x15fd5e[_0x31dc49(0x79,'7nr#')](String,_0x2dc9d0)]),'client_context':_0xa5b1fb,'offline_threading_id':_0xa5b1fb,'text':_0x15fd5e[_0x3cc195(0xdf,'Gf]V')](String,_0x2406bb)};if(_0x5f4fc0)_0x1c95d8[_0x31dc49(0xb2,'hfPP')+_0x31dc49(0xb4,'EZS3')+_0x31dc49(0xda,'$uvG')]=_0x5f4fc0;return this[_0x3cc195(0xd5,'dDIN')][_0x31dc49(0xc8,'%B]C')+'rm'](EP[_0x31dc49(0x7a,'!W!%')+_0x3cc195(0xd4,'zrdx')+'XT'],_0x1c95d8);}}async[_0x48132d(0xa1,'K)dh')](_0x3b8b48,_0x39e896,_0x76ed2b=null){const _0x16eed7=_0x48132d;return this[_0x16eed7(0x95,'^!kn')](_0x39e896,_0x3b8b48,_0x76ed2b);}async['sendLi'+'nk'](_0x5793e9,_0x560693,_0x1209b8){const _0x150f48=_0x48132d,_0x5d2693=_0x48132d,_0x36d5c1={'knRXe':_0x150f48(0xb8,'enXU')+_0x5d2693(0xd1,'EZS3'),'agsVz':function(_0xe85888,_0x2cc2ff){return _0xe85888||_0x2cc2ff;}};return this[_0x5d2693(0xb1,'!hwu')][_0x5d2693(0xb0,'L@m@')+'rm'](EP[_0x5d2693(0x9e,'Hz*h')+_0x150f48(0x93,'$uvG')+'NK'],{'action':_0x36d5c1[_0x5d2693(0x8a,'Z$xq')],'thread_ids':JSON['string'+_0x5d2693(0xd9,'Xl#P')]([String(_0x5793e9)]),'client_context':this[_0x150f48(0xcd,'EZS3')][_0x150f48(0xc2,'Z$xq')](),'link_text':_0x36d5c1[_0x150f48(0x7d,'7NhK')](_0x1209b8,_0x560693),'link_urls':JSON[_0x5d2693(0x84,'pGr$')+_0x150f48(0x90,'$uvG')]([_0x560693])});}async[_0x48132d(0xa4,'&Yw@')](_0x4a1fbb,_0x4894df){const _0x586c1c=_0xb386a9,_0x4c9d14=_0xb386a9,_0x149c62={'zMldW':function(_0x15ef79,_0x487034){return _0x15ef79===_0x487034;}},_0x50111b=await this[_0x586c1c(0x7c,'hfPP')][_0x586c1c(0xce,'zrdx')+'rm'](EP[_0x586c1c(0xee,'8If!')+_0x4c9d14(0xd8,'0GB(')](_0x4a1fbb,_0x4894df),{});return _0x149c62[_0x586c1c(0x76,'C9!A')](_0x50111b?.[_0x4c9d14(0xec,'mvrf')],'ok');}async[_0x48132d(0xd0,'9B7#')](_0x15d637,_0x37248b,_0x3e827c){const _0x4df6ac=_0xb386a9,_0x23a346=_0x48132d,_0x19ad4e={'hzDpq':_0x4df6ac(0xbd,'J$TG')+_0x23a346(0xa3,'&Yw@')+_0x23a346(0xea,'SiO&')+_0x23a346(0xd7,'[MAi')+_0x4df6ac(0xab,'&9J2'),'bAShE':function(_0x5998a3,_0x364812){return _0x5998a3(_0x364812);},'neJMH':function(_0x7b8995,_0x452af2){return _0x7b8995(_0x452af2);},'dUHmw':function(_0x5e550b,_0x29662d){return _0x5e550b(_0x29662d);},'dmegp':function(_0xbb0a94,_0x31b489){return _0xbb0a94(_0x31b489);},'Bptqx':function(_0x35bedd,_0x20b90d){return _0x35bedd!==_0x20b90d;},'Winop':_0x23a346(0xe6,'!W!%')};try{const _0x4bae2b=await this[_0x23a346(0xcf,'8If!')][_0x4df6ac(0x94,'&9J2')+_0x4df6ac(0x77,'&9J2')](_0x19ad4e[_0x4df6ac(0xc9,'ySps')],DOC_ID[_0x23a346(0xbb,'7)wZ')+_0x23a346(0x7f,'zrdx')],{'thread_id':_0x19ad4e[_0x4df6ac(0xe1,'dDIN')](String,_0x15d637),'target_item_id':null,'target_message_id':_0x19ad4e[_0x4df6ac(0xe2,'yY7(')](String,_0x37248b),'body':{'sensitive_string_value':_0x19ad4e[_0x4df6ac(0xe7,'EZS3')](String,_0x3e827c)},'offline_threading_id':this['http'][_0x4df6ac(0xe0,'J$TG')+_0x23a346(0xe9,'K)dh')+_0x23a346(0x9d,'SfM9')]()},_0x23a346(0xcb,'7NhK')+_0x23a346(0xa7,'enXU')+_0x4df6ac(0xc7,'9B7#')+_0x4df6ac(0xe8,'s)]&')+_0x4df6ac(0x97,'dDIN')+_0x23a346(0xc5,'Xl#P')+_0x15d637+'/'),_0x435309=_0x19ad4e[_0x23a346(0xe4,'Tw53')](Boolean,_0x4bae2b&&_0x4bae2b[_0x23a346(0xb7,'dDIN')])&&!_0x4bae2b[_0x4df6ac(0xde,'7nr#')];return _0x435309?{'messageID':_0x19ad4e[_0x23a346(0x89,'7nr#')](String,_0x37248b),'edited':!![]}:![];}catch(_0x201a5f){if(_0x19ad4e[_0x23a346(0xbf,'&Yw@')](_0x19ad4e[_0x4df6ac(0x82,'[MAi')],_0x23a346(0x92,'L@m@')))return![];else this[_0x23a346(0xd5,'dDIN')]=_0x824700;}}}module[_0xb386a9(0xb9,'rhD!')+'s']=MessageMethods;
|
|
7
|
+
|
|
8
|
+
const { EP, DOC_ID } = require("../constants");
|
|
9
|
+
const { globalAntiSuspension } = require("../utils/antiSuspension");
|
|
10
|
+
const { classify } = require("../utils/errors");
|
|
11
|
+
|
|
12
|
+
const NO_FALLBACK_KINDS = new Set(["rate_limited", "challenge", "blocked", "suspended", "auth"]);
|
|
13
|
+
|
|
14
|
+
class MessageMethods {
|
|
15
|
+
constructor(http) {
|
|
16
|
+
this.http = http;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Confirmed send path from a live web session: the IGDirectTextSendMutation
|
|
20
|
+
// Relay operation. Falls back to the legacy broadcast endpoint if GraphQL
|
|
21
|
+
// rejects (e.g. doc_id rotated).
|
|
22
|
+
//
|
|
23
|
+
// `replyToItemId` is the target message id (Instagram's "mid.$..." id, exposed
|
|
24
|
+
// as item_id/messageID on every history/inbox item). The web client passes it
|
|
25
|
+
// in `reply_to_message_id` and leaves `replied_to_item_id` /
|
|
26
|
+
// `replied_to_client_context` null — captured live from IGDirectTextSendMutation
|
|
27
|
+
// (doc_id 26911679871773184). Passing it anywhere else sets a pointer without
|
|
28
|
+
// rendering the quote bubble.
|
|
29
|
+
async send(text, threadID, replyToItemId = null) {
|
|
30
|
+
// Pace outbound traffic so a personal account does not look scripted.
|
|
31
|
+
await globalAntiSuspension.waitForTurn(threadID);
|
|
32
|
+
const replyId =
|
|
33
|
+
replyToItemId == null
|
|
34
|
+
? null
|
|
35
|
+
: typeof replyToItemId === "object"
|
|
36
|
+
? (replyToItemId.messageID || replyToItemId.id || null)
|
|
37
|
+
: String(replyToItemId);
|
|
38
|
+
try {
|
|
39
|
+
return await this.http.postGraphQL(
|
|
40
|
+
"IGDirectTextSendMutation",
|
|
41
|
+
DOC_ID.TEXT_SEND,
|
|
42
|
+
{
|
|
43
|
+
ig_thread_igid: String(threadID),
|
|
44
|
+
offline_threading_id: this.http.offlineThreadingId(),
|
|
45
|
+
recipient_igids: null,
|
|
46
|
+
replied_to_client_context: null,
|
|
47
|
+
replied_to_item_id: null,
|
|
48
|
+
reply_to_message_id: replyId,
|
|
49
|
+
sampled: null,
|
|
50
|
+
text: { sensitive_string_value: String(text) },
|
|
51
|
+
mentions: [],
|
|
52
|
+
mentioned_user_ids: [],
|
|
53
|
+
commands: null,
|
|
54
|
+
forwarded_from_thread_id: null,
|
|
55
|
+
is_forwarded_from_own_message: null,
|
|
56
|
+
send_attribution: "igd_web_chat_tab:in_thread"
|
|
57
|
+
},
|
|
58
|
+
`https://www.instagram.com/direct/t/${threadID}/`,
|
|
59
|
+
{ throwOnError: true }
|
|
60
|
+
);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
globalAntiSuspension.noteSendError(error);
|
|
63
|
+
const kind = error.igKind || classify(error).kind;
|
|
64
|
+
if (NO_FALLBACK_KINDS.has(kind) || globalAntiSuspension.isCoolingDown()) throw error;
|
|
65
|
+
const clientContextId = this.http.uuid();
|
|
66
|
+
const params = {
|
|
67
|
+
action: "send_item",
|
|
68
|
+
thread_ids: JSON.stringify([String(threadID)]),
|
|
69
|
+
client_context: clientContextId,
|
|
70
|
+
offline_threading_id: clientContextId,
|
|
71
|
+
text: String(text)
|
|
72
|
+
};
|
|
73
|
+
if (replyId) params.replied_to_item_id = replyId;
|
|
74
|
+
return this.http.postForm(EP.BROADCAST_TEXT, params);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async reply(threadID, text, replyToItemId = null) {
|
|
79
|
+
return this.send(text, threadID, replyToItemId);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async sendLink(threadID, link, text) {
|
|
83
|
+
return this.http.postForm(EP.BROADCAST_LINK, {
|
|
84
|
+
action: "send_item",
|
|
85
|
+
thread_ids: JSON.stringify([String(threadID)]),
|
|
86
|
+
client_context: this.http.uuid(),
|
|
87
|
+
link_text: text || link,
|
|
88
|
+
link_urls: JSON.stringify([link])
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
async unsend(threadID, itemID) {
|
|
93
|
+
const res = await this.http.postForm(EP.ITEM_DELETE(threadID, itemID), {});
|
|
94
|
+
return res?.status === "ok";
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Instagram lets you edit an outgoing DM within 15 minutes of sending it.
|
|
98
|
+
// Captured live from the web app (IGDirectEditMessageMutation).
|
|
99
|
+
async edit(threadID, itemID, text) {
|
|
100
|
+
try {
|
|
101
|
+
const res = await this.http.postGraphQL(
|
|
102
|
+
"IGDirectEditMessageMutation",
|
|
103
|
+
DOC_ID.EDIT_MESSAGE,
|
|
104
|
+
{
|
|
105
|
+
thread_id: String(threadID),
|
|
106
|
+
target_item_id: null,
|
|
107
|
+
target_message_id: String(itemID),
|
|
108
|
+
body: { sensitive_string_value: String(text) },
|
|
109
|
+
offline_threading_id: this.http.offlineThreadingId()
|
|
110
|
+
},
|
|
111
|
+
`https://www.instagram.com/direct/t/${threadID}/`
|
|
112
|
+
);
|
|
113
|
+
const ok = Boolean(res && res.data) && !res.errors;
|
|
114
|
+
return ok ? { messageID: String(itemID), edited: true } : false;
|
|
115
|
+
} catch (_) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
module.exports = MessageMethods;
|
package/src/methods/reactions.js
CHANGED
|
@@ -4,4 +4,55 @@
|
|
|
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
|
-
|
|
7
|
+
|
|
8
|
+
const { DOC_ID } = require("../constants");
|
|
9
|
+
const { globalAntiSuspension } = require("../utils/antiSuspension");
|
|
10
|
+
|
|
11
|
+
class ReactionMethods {
|
|
12
|
+
constructor(http) {
|
|
13
|
+
this.http = http;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Confirmed from the live web bundle (CometDirectPageWeb): reactions go
|
|
17
|
+
// through the IGDirectReactionMutation Relay operation with a flat `input`.
|
|
18
|
+
// The legacy /api/v1/direct_v2/.../reaction/ REST endpoint now 404s.
|
|
19
|
+
async _mutate(threadID, itemID, reactionStatus, emoji) {
|
|
20
|
+
return this.http.postGraphQL(
|
|
21
|
+
"IGDirectReactionMutation",
|
|
22
|
+
DOC_ID.REACTION_SEND,
|
|
23
|
+
{
|
|
24
|
+
input: {
|
|
25
|
+
emoji: emoji || "",
|
|
26
|
+
item_id: String(itemID),
|
|
27
|
+
message_id: String(itemID),
|
|
28
|
+
reaction_status: reactionStatus,
|
|
29
|
+
thread_id: String(threadID)
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
`https://www.instagram.com/direct/t/${threadID}/`,
|
|
33
|
+
{ throwOnError: true }
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async send(threadID, itemID, emoji) {
|
|
38
|
+
await globalAntiSuspension.waitForTurn(threadID);
|
|
39
|
+
try {
|
|
40
|
+
return await this._mutate(threadID, itemID, "created", emoji || "❤️");
|
|
41
|
+
} catch (error) {
|
|
42
|
+
globalAntiSuspension.noteSendError(error);
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async remove(threadID, itemID) {
|
|
48
|
+
await globalAntiSuspension.waitForTurn(threadID);
|
|
49
|
+
try {
|
|
50
|
+
return await this._mutate(threadID, itemID, "deleted", "");
|
|
51
|
+
} catch (error) {
|
|
52
|
+
globalAntiSuspension.noteSendError(error);
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = ReactionMethods;
|
package/src/methods/thread.js
CHANGED
|
@@ -4,4 +4,99 @@
|
|
|
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 _0x258357=_0x5ab7,_0x494131=_0x5ab7;function _0x5ab7(_0x5a8b7c,_0x1d0a21){_0x5a8b7c=_0x5a8b7c-0x8b;const _0x513985=_0x5139();let _0x5ab79f=_0x513985[_0x5a8b7c];if(_0x5ab7['ztMskN']===undefined){var _0x1a8d28=function(_0x4347dd){const _0x370177='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x29013e='',_0x52cb3e='';for(let _0x4bfd9e=0x0,_0x3989b1,_0x525687,_0x2cfeff=0x0;_0x525687=_0x4347dd['charAt'](_0x2cfeff++);~_0x525687&&(_0x3989b1=_0x4bfd9e%0x4?_0x3989b1*0x40+_0x525687:_0x525687,_0x4bfd9e++%0x4)?_0x29013e+=String['fromCharCode'](0xff&_0x3989b1>>(-0x2*_0x4bfd9e&0x6)):0x0){_0x525687=_0x370177['indexOf'](_0x525687);}for(let _0x31e5bc=0x0,_0x4ca085=_0x29013e['length'];_0x31e5bc<_0x4ca085;_0x31e5bc++){_0x52cb3e+='%'+('00'+_0x29013e['charCodeAt'](_0x31e5bc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x52cb3e);};const _0x3ecf0e=function(_0x58a474,_0x3e9293){let _0x326269=[],_0x25a171=0x0,_0x5a920c,_0x27648c='';_0x58a474=_0x1a8d28(_0x58a474);let _0x23d75f;for(_0x23d75f=0x0;_0x23d75f<0x100;_0x23d75f++){_0x326269[_0x23d75f]=_0x23d75f;}for(_0x23d75f=0x0;_0x23d75f<0x100;_0x23d75f++){_0x25a171=(_0x25a171+_0x326269[_0x23d75f]+_0x3e9293['charCodeAt'](_0x23d75f%_0x3e9293['length']))%0x100,_0x5a920c=_0x326269[_0x23d75f],_0x326269[_0x23d75f]=_0x326269[_0x25a171],_0x326269[_0x25a171]=_0x5a920c;}_0x23d75f=0x0,_0x25a171=0x0;for(let _0x3b5c1c=0x0;_0x3b5c1c<_0x58a474['length'];_0x3b5c1c++){_0x23d75f=(_0x23d75f+0x1)%0x100,_0x25a171=(_0x25a171+_0x326269[_0x23d75f])%0x100,_0x5a920c=_0x326269[_0x23d75f],_0x326269[_0x23d75f]=_0x326269[_0x25a171],_0x326269[_0x25a171]=_0x5a920c,_0x27648c+=String['fromCharCode'](_0x58a474['charCodeAt'](_0x3b5c1c)^_0x326269[(_0x326269[_0x23d75f]+_0x326269[_0x25a171])%0x100]);}return _0x27648c;};_0x5ab7['udHJEz']=_0x3ecf0e,_0x5ab7['zOhUqm']={},_0x5ab7['ztMskN']=!![];}const _0x119fdb=_0x513985[0x0],_0xaa3752=_0x5a8b7c+_0x119fdb,_0x46854a=_0x5ab7['zOhUqm'][_0xaa3752];return!_0x46854a?(_0x5ab7['vWRAKD']===undefined&&(_0x5ab7['vWRAKD']=!![]),_0x5ab79f=_0x5ab7['udHJEz'](_0x5ab79f,_0x1d0a21),_0x5ab7['zOhUqm'][_0xaa3752]=_0x5ab79f):_0x5ab79f=_0x46854a,_0x5ab79f;}(function(_0x16982f,_0x8259b0){const _0x1a382c=_0x5ab7,_0x3dfcd2=_0x5ab7,_0x229311=_0x16982f();while(!![]){try{const _0x18fcec=-parseInt(_0x1a382c(0xb5,'4XhW'))/0x1+parseInt(_0x1a382c(0xab,'nlz6'))/0x2*(-parseInt(_0x3dfcd2(0xc5,'(jGp'))/0x3)+parseInt(_0x1a382c(0xe6,'^l2G'))/0x4+-parseInt(_0x3dfcd2(0xec,'MI$K'))/0x5*(-parseInt(_0x3dfcd2(0xcd,'$Ge$'))/0x6)+-parseInt(_0x3dfcd2(0xf1,'sIJr'))/0x7+parseInt(_0x1a382c(0xee,'wpD0'))/0x8+-parseInt(_0x3dfcd2(0x95,'fCRl'))/0x9*(-parseInt(_0x3dfcd2(0x91,'i%6#'))/0xa);if(_0x18fcec===_0x8259b0)break;else _0x229311['push'](_0x229311['shift']());}catch(_0x4d7fff){_0x229311['push'](_0x229311['shift']());}}}(_0x5139,0x1f60d));const {DOC_ID,EP}=require(_0x258357(0xdc,'c(sI')+_0x258357(0xad,'(jGp')),{textOf,attachmentsFromContent,normalizeRepliedMessage}=require(_0x494131(0x93,'4XhW')+_0x258357(0xd9,'4XhW')+_0x258357(0xd3,'nlz6')),{fetchThreadDetail,threadFbidMap}=require(_0x494131(0x109,'1Vck')+'eadDet'+_0x258357(0xaf,'ZXv)'));class ThreadMethods{constructor(_0x18fe19){const _0x45f784=_0x494131;this[_0x45f784(0xcc,'#h^[')]=_0x18fe19;}async[_0x258357(0xd6,'^l2G')+'o'](_0x273680){const _0x7e613a=_0x258357,_0x43ad49=_0x258357;try{const _0x2769ca=await this[_0x7e613a(0x8f,'gtyj')][_0x43ad49(0xa8,'4XhW')](EP[_0x43ad49(0xac,'MI$K')+_0x7e613a(0xed,'dJ&&')](_0x273680));if(_0x2769ca?.[_0x7e613a(0xe7,'wpD0')])return _0x2769ca[_0x7e613a(0xa9,'4$hR')];}catch(_0x453fc9){}return this[_0x43ad49(0xe5,'xD&U')+'etail'](_0x273680);}async[_0x258357(0x8c,'jUo3')+_0x494131(0xdb,'1ULe')](_0x5b1ea4,_0x466dbd=0x14,_0x34cb23=null){const _0xf26d44=_0x258357,_0x4879d5=_0x494131,_0x195c22={'OmSCB':function(_0x4c00f7,_0x4b195b,_0x55037e,_0x12c206,_0xdcba9b){return _0x4c00f7(_0x4b195b,_0x55037e,_0x12c206,_0xdcba9b);}};return _0x195c22[_0xf26d44(0xf9,'4XhW')](fetchThreadDetail,this[_0xf26d44(0xae,'xD&U')],_0x5b1ea4,_0x466dbd,_0x34cb23);}async[_0x494131(0x102,'Ugh#')+_0x258357(0xa1,'nlz6')](_0x23f926,_0x175785=0x14,_0x4ee262=null){const _0xe651ef=_0x258357,_0x376b8f=_0x494131,_0x57af38={'eCRpf':function(_0x23bec0,_0x26af21){return _0x23bec0(_0x26af21);},'vSDBB':function(_0x599cad,_0x1f51f0){return _0x599cad===_0x1f51f0;},'vAkax':_0xe651ef(0xa4,'eHzq'),'QFNDm':_0x376b8f(0x106,'yqr7'),'ukgIA':function(_0x379d12,_0x409805){return _0x379d12!=_0x409805;},'txIjD':function(_0x5cfea9,_0x1c0a45,_0x322ba2){return _0x5cfea9(_0x1c0a45,_0x322ba2);},'IJXnR':function(_0x28ccaa,_0x4f64fd){return _0x28ccaa(_0x4f64fd);}},_0x18dbce=await this[_0x376b8f(0xc2,'Zbe8')+_0xe651ef(0xf3,'(OTu')](_0x23f926,_0x175785,_0x4ee262);if(!_0x18dbce)return[];const _0x4d2d2b=_0x18dbce[_0xe651ef(0xbf,'QP@3')+_0x376b8f(0xcb,'4XhW')+'es']?.[_0x376b8f(0xe2,'#olC')]||[],_0x9a6923=threadFbidMap(_0x18dbce);return _0x4d2d2b[_0x376b8f(0x94,'C@ae')](_0xf4c6d3=>{const _0x2e4f23=_0xe651ef,_0x525682=_0x376b8f,_0x3b0958={'NcPZl':function(_0x561edf,_0x950df0){const _0xb2603d=_0x5ab7;return _0x57af38[_0xb2603d(0xaa,'4$hR')](_0x561edf,_0x950df0);}};if(_0x57af38['vSDBB'](_0x57af38[_0x2e4f23(0x100,'MI$K')],_0x57af38[_0x525682(0x10b,'$Ge$')]))return this[_0x525682(0xfc,'wpD0')][_0x2e4f23(0xb3,'fCRl')+'rm'](_0x225da8[_0x525682(0xc1,'4$hR')+_0x525682(0xa6,'yqr7')+_0x525682(0xfa,'14yI')](_0x20d8ad),{'_uuid':this[_0x2e4f23(0xeb,'jUo3')][_0x525682(0xfe,'s7OM')](),'user_id':_0x3b0958[_0x2e4f23(0xf8,'14yI')](_0x21effc,_0x549a1f)});else{const _0x496c9d=_0xf4c6d3[_0x2e4f23(0xa0,'4$hR')]||_0xf4c6d3,_0x305594=_0x57af38['ukgIA'](_0x496c9d[_0x525682(0x103,'gtyj')+_0x525682(0xb6,'8u0w')],null)?String(_0x496c9d[_0x2e4f23(0xc3,'jUo3')+_0x2e4f23(0xb2,'OVdU')]):null;return{'messageID':_0x496c9d['id'],'item_id':_0x496c9d['id'],'senderID':_0x305594&&_0x9a6923[_0x305594]?_0x9a6923[_0x305594]:_0x305594,'user_id':_0x305594,'sender_fbid':_0x305594,'senderName':_0x496c9d[_0x525682(0xc0,'8)MT')]?.[_0x2e4f23(0x8e,'Ugh#')]||null,'body':_0x57af38[_0x525682(0xa7,'nlz6')](textOf,_0x496c9d),'text':textOf(_0x496c9d),'itemType':_0x57af38[_0x2e4f23(0xbd,'in5!')](String,_0x496c9d[_0x2e4f23(0xdd,'qwG1')+_0x525682(0xd5,'1ULe')]||'')[_0x525682(0x8d,'in5!')+_0x2e4f23(0xd2,'h*jS')](),'content_type':_0x496c9d[_0x2e4f23(0x9e,'i%6#')+_0x2e4f23(0xc4,'$Ge$')],'attachments':_0x57af38[_0x525682(0xb7,'Zbe8')](attachmentsFromContent,_0x496c9d[_0x2e4f23(0xe0,'#h^[')+'t']),'repliedToItemId':_0x496c9d[_0x525682(0xc8,'ZXv)')+_0x2e4f23(0xea,'Uu&J')+_0x525682(0xa3,'Ugh#')+_0x2e4f23(0x90,'8u0w')]||null,'repliedToMessage':_0x57af38[_0x2e4f23(0xb4,'dJ&&')](normalizeRepliedMessage,_0x496c9d[_0x2e4f23(0xf6,'yqr7')+'d_to_m'+_0x2e4f23(0xd1,'8)MT')],_0x9a6923),'clientContext':_0x496c9d[_0x2e4f23(0x8b,'$Ge$')+_0x2e4f23(0xef,'8)MT')+'xt']||null,'offlineThreadingId':_0x57af38[_0x525682(0xc9,'4$hR')](_0x496c9d[_0x525682(0xb0,'Ugh#')+_0x2e4f23(0xe8,'TMb)')+_0x525682(0xa2,'fCRl')+'id'],null)?String(_0x496c9d[_0x525682(0xc7,'qwG1')+_0x525682(0x9a,'c(sI')+_0x525682(0xbc,'s7OM')+'id']):null,'timestamp':_0x57af38['IJXnR'](Number,_0x496c9d[_0x525682(0x101,'fCRl')+_0x2e4f23(0x104,'c(sI')])||null};}});}async['markSe'+'en'](_0x1ee739,_0x1958db){const _0x4b2213=_0x494131,_0x1648e5=_0x258357;return this[_0x4b2213(0xdf,'(jGp')][_0x1648e5(0xb8,'Zbe8')+'rm'](EP[_0x1648e5(0x9c,'6)H(')+_0x1648e5(0xa5,'fCRl')](_0x1ee739),{'item_id':_0x1958db});}async[_0x258357(0xe1,'hXFr')](_0x505cec){const _0x1eb58e=_0x494131,_0xe11ae8=_0x258357;return this[_0x1eb58e(0xd8,'fCRl')][_0x1eb58e(0xe9,'s7OM')+'rm'](EP[_0x1eb58e(0xfb,'Pjig')+'_MUTE'](_0x505cec),{});}async['unmute'](_0x4cda98){const _0x18f894=_0x258357,_0x46a172=_0x494131;return this['http'][_0x18f894(0xe4,'Uu&J')+'rm'](EP[_0x46a172(0x108,'wQ#O')+_0x18f894(0xbe,'qwG1')+'E'](_0x4cda98),{});}async[_0x258357(0x98,'1ULe')](_0x43b8f5){const _0x2e69cc=_0x494131,_0x112a96=_0x258357;return this[_0x2e69cc(0xd7,'Zbe8')][_0x2e69cc(0x105,'MI$K')+'rm'](EP[_0x2e69cc(0xcf,'fCRl')+'_HIDE'](_0x43b8f5),{});}async[_0x494131(0xca,'#h^[')+'rs'](_0x19cf92,_0x171f83){const _0x2a4fe8=_0x494131,_0x42ec63=_0x258357,_0x2a7399=(Array[_0x2a4fe8(0x99,'hXFr')+'y'](_0x171f83)?_0x171f83:[_0x171f83])[_0x2a4fe8(0xf2,'nlz6')](String);return this[_0x42ec63(0xeb,'jUo3')][_0x42ec63(0xce,'h*jS')+'rm'](EP[_0x42ec63(0x9c,'6)H(')+_0x2a4fe8(0xde,'eHzq')+_0x2a4fe8(0xb9,'s7OM')](_0x19cf92),{'_uuid':this[_0x42ec63(0xba,'OVdU')][_0x2a4fe8(0x9d,'xD&U')](),'user_ids':JSON[_0x2a4fe8(0x97,'FYQT')+_0x42ec63(0xf4,'hXFr')](_0x2a7399)});}async[_0x494131(0xbb,'#h^[')+_0x494131(0x10a,'1ULe')](_0x58eb3a,_0x29b02d){const _0xa7172a=_0x258357,_0x5f2262=_0x258357,_0x5cb71b={'FvJrP':function(_0x375fd6,_0xd20ff9){return _0x375fd6(_0xd20ff9);}};return this[_0xa7172a(0x92,'8)MT')][_0x5f2262(0x9f,'(jGp')+'rm'](EP[_0x5f2262(0xb1,'QP@3')+_0xa7172a(0x96,'#h^[')+_0x5f2262(0xf7,'6)H(')](_0x58eb3a),{'_uuid':this[_0xa7172a(0xcc,'#h^[')][_0xa7172a(0xe3,'Ugh#')](),'user_id':_0x5cb71b[_0xa7172a(0xf0,'14yI')](String,_0x29b02d)});}}function _0x5139(){const _0x153005=['WPKfWQVcMuNcPa','W7FcIt1x','W57dOCkDthBdHSkd','aCkrrxO','W7aBWQ/cHCoWDMjNW4ZcH0ZcSa','WOpcLSkTvCk7','DwmhF8kiW6i','WRJdHSoXW5K3zG','pWlcU8o3eCkt','l3ZcGxWOpW','WOxcUmk1qmkfWRq','W7L2rgb9','edxcTCoIeMa/wGlcSSkYuq','a3LdaCkkBW','W7tdNmoeW6VcKMS','WOpdPSkbrW','W6OmW4lcOeO','W5GMW6xcGuNdLq','W6PacSoYW6pcMa','W6z2w8opW5zm','WRhdGSoOW7q','jbpcOCoJ','FmoHWRq','WRe7zd3dMSoLFSknW5ZdVqKdW7e','W51HW43cVG','WQuSWQbQCci','W67dVIG','mdiNy8kTW6vQW7C','ae44z8oRnq','WOhcLIlcJuJcNa','WR7dVmkaua','EmolW5OaW4BdSq','k07cHuS3kq','W7awWQ7cH8o1DeLKW4RcSM/cVW','W71IlSk7kKW','WOFcISoBW4O','W6nSoNRcISk/','WRfnW6JdGSkbkW','WQq/WPhcQq','m1VdMYq','yg4dDmkCW4K','WRRdKmo2W7a5Ca','nSoOWQaqmG','xLKVx8k1','W6X8B2b8W6S','iNFdUY0i','W6XNW7S','WR44WOFcQrVdIa','WQ8tWQFcVbW','FGdcM2TCW4VdPxO5WRa0','WQhcN8kuCCkcWP8','WRjwW7RdMmkZnW','WPRcI8ogW54','jCkXWO4','WRddHCoJW703EW','wa0jjWRcMG','b03cHCkhWR4','CwuzBSk9W7K','W7bTAb7cUq','WRO7WRy2iMJdRMC1WQPVca','FmoUWRihW7O','m8kfWP4sAq','jSkPWR8wsCoa','j8kHFG','mf/cK8kE','lxKqrCosbG','fCkarxdcRCkC','W7DArCoqW4C','WRBcKufuW7qn','FYKYbI7cGq','W4zWW5FcQSoyW64','WP4yWQFcItVdQa','mmkJWRGbz8oR','W79aemo1W67cRG','W48vW7JcNvFdHa','W7DmW7ddK8kFc3e','qNFcOfxdO8kK','WOBcOML1W4G3','nSk9WPlcOdmS','WR87WPlcHtS','pNGzF8oxbG','W6zNW7X0Ddy','n2GjwG','WO54WRRdNr/dS0JcU3T0yG','gYJdRtvVW6u','vui4x8k6W5i','fd7cUSoQhqSFzIpcH8km','W5bMW4RcR8oAW7K','gqtdVZjm','kuddJdmA','eSkWW6bDWQVcJmkIWQmDWOddKq7dTa','WQldISkqtfFcLG','zSkrlLhdSa4','pSkYWRGs','Ax4EAG','W7HJW6HIvJ4','FYhdGXf1FSoQACobW5tdOcnW','WRpdOCkfxeS','yd/dNKaQiG','WORcQ2fTW4q3','cmozWOiNpGW','WQLwW6/dHG','phmtxSobdq','FmonW68x','s1u7W57dHa','WQRdLSoSW7u','v2dcO07dL8k/','WPtcMSogW43cNNi','mmonBIVcQvRdMctcH8kOW5FcPG','W6VcLtTcyCoJ','egpdRxfSEG','bmklx2RcJmkS','q1dcPfxdJSk9','W6rrcSoH','W43dP8ktyCkTWQ0EW68','W5TCBZlcSG','WQ7dIxWwmSk3W4u8WOBdSCoYWPO','W6P2W5BcOmojW7K','WQ7dUCk8w34','edZcVSoHfwTmuq3cI8kJtWS','kLxdMq','jCoKzCo4WOG','EmoEW6i','W6/cOCowaXxcKNZdR8oNW67cIa','W4flwKfAW5G','W6X1kCkTlLO','WQBdRmkMC0i','W4rVW5XevW','WQ3dKmkJEMVdMW'];_0x5139=function(){return _0x153005;};return _0x5139();}module[_0x258357(0xc6,'Uu&J')+'s']=ThreadMethods;
|
|
7
|
+
|
|
8
|
+
const { DOC_ID, EP } = require("../constants");
|
|
9
|
+
const { textOf, attachmentsFromContent, normalizeRepliedMessage } = require("../messageContent");
|
|
10
|
+
const { fetchThreadDetail, threadFbidMap } = require("../threadDetail");
|
|
11
|
+
|
|
12
|
+
class ThreadMethods {
|
|
13
|
+
constructor(http) {
|
|
14
|
+
this.http = http;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Legacy REST first (fast when it works), then the GraphQL thread-detail
|
|
18
|
+
// query. /direct_v2/threads/<id>/ returns 404 on modern web sessions.
|
|
19
|
+
async getInfo(threadID) {
|
|
20
|
+
try {
|
|
21
|
+
const res = await this.http.get(EP.THREAD_INFO(threadID));
|
|
22
|
+
if (res?.thread) return res.thread;
|
|
23
|
+
} catch (_) {}
|
|
24
|
+
return this.fetchDetail(threadID);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Raw IGDThreadDetailQuery payload. Returns null when Instagram answers with
|
|
28
|
+
// a GraphQL error object (some malformed ids), not an HTTP error.
|
|
29
|
+
async fetchDetail(threadID, limit = 20, afterCursor = null) {
|
|
30
|
+
return fetchThreadDetail(this.http, threadID, limit, afterCursor);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// fca-shaped message history: each item carries a stable id, the sender's
|
|
34
|
+
// Instagram user id, the text body, a timestamp and any media attachment.
|
|
35
|
+
// IG's inbound reply linkage (replied_to_message) is preserved so the bot's
|
|
36
|
+
// event normalizer can resolve reply targets without a second round-trip.
|
|
37
|
+
async getHistory(threadID, limit = 20, afterCursor = null) {
|
|
38
|
+
const thread = await this.fetchDetail(threadID, limit, afterCursor);
|
|
39
|
+
if (!thread) return [];
|
|
40
|
+
const edges = thread.slide_messages?.edges || [];
|
|
41
|
+
const fbidToIgid = threadFbidMap(thread);
|
|
42
|
+
|
|
43
|
+
return edges.map((e) => {
|
|
44
|
+
const n = e.node || e;
|
|
45
|
+
const senderFbid = n.sender_fbid != null ? String(n.sender_fbid) : null;
|
|
46
|
+
return {
|
|
47
|
+
messageID: n.id,
|
|
48
|
+
item_id: n.id,
|
|
49
|
+
senderID: senderFbid && fbidToIgid[senderFbid] ? fbidToIgid[senderFbid] : senderFbid,
|
|
50
|
+
user_id: senderFbid,
|
|
51
|
+
sender_fbid: senderFbid,
|
|
52
|
+
senderName: n.sender?.name || null,
|
|
53
|
+
body: textOf(n),
|
|
54
|
+
text: textOf(n),
|
|
55
|
+
itemType: String(n.content_type || "").toLowerCase(),
|
|
56
|
+
content_type: n.content_type,
|
|
57
|
+
attachments: attachmentsFromContent(n.content),
|
|
58
|
+
repliedToItemId: n.replied_to_message_id || null,
|
|
59
|
+
repliedToMessage: normalizeRepliedMessage(n.replied_to_message, fbidToIgid),
|
|
60
|
+
clientContext: n.client_context || null,
|
|
61
|
+
offlineThreadingId: n.offline_threading_id != null ? String(n.offline_threading_id) : null,
|
|
62
|
+
timestamp: Number(n.timestamp_ms) || null
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async markSeen(threadID, itemID) {
|
|
68
|
+
return this.http.postForm(EP.THREAD_SEEN(threadID), { item_id: itemID });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async mute(threadID) {
|
|
72
|
+
return this.http.postForm(EP.THREAD_MUTE(threadID), {});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async unmute(threadID) {
|
|
76
|
+
return this.http.postForm(EP.THREAD_UNMUTE(threadID), {});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async hide(threadID) {
|
|
80
|
+
return this.http.postForm(EP.THREAD_HIDE(threadID), {});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Adds participants to a group DM. Instagram expects a JSON-encoded
|
|
84
|
+
// `user_ids` array plus the client's `_uuid` (confirmed against instagrapi's
|
|
85
|
+
// direct_thread_add_users, which the web/app endpoints share).
|
|
86
|
+
async addUsers(threadID, userIds) {
|
|
87
|
+
const ids = (Array.isArray(userIds) ? userIds : [userIds]).map(String);
|
|
88
|
+
return this.http.postForm(EP.THREAD_ADD_USER(threadID), {
|
|
89
|
+
_uuid: this.http.uuid(),
|
|
90
|
+
user_ids: JSON.stringify(ids)
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async removeUser(threadID, userID) {
|
|
95
|
+
return this.http.postForm(EP.THREAD_REMOVE_USER(threadID), {
|
|
96
|
+
_uuid: this.http.uuid(),
|
|
97
|
+
user_id: String(userID)
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
module.exports = ThreadMethods;
|