@eryxenx/insta-chat 2.0.0 → 2.0.3
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 +95 -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 +218 -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 +269 -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,221 @@
|
|
|
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 _0x39f2f3=_0x52e6,_0x579ce2=_0x52e6;(function(_0x5c8093,_0x471198){const _0xf75455=_0x52e6,_0x398621=_0x52e6,_0x8ac74c=_0x5c8093();while(!![]){try{const _0x42db23=-parseInt(_0xf75455(0x1cf,'[(v]'))/0x1*(parseInt(_0xf75455(0x117,'nW8&'))/0x2)+parseInt(_0x398621(0x179,'ECa$'))/0x3*(parseInt(_0xf75455(0x1c4,'ECa$'))/0x4)+-parseInt(_0xf75455(0x145,'nW8&'))/0x5*(-parseInt(_0x398621(0x1a0,'D]PJ'))/0x6)+-parseInt(_0x398621(0x118,'LSOb'))/0x7+-parseInt(_0x398621(0x11d,'OM]W'))/0x8+parseInt(_0x398621(0x1c7,'W1up'))/0x9*(-parseInt(_0xf75455(0x185,'uPuI'))/0xa)+parseInt(_0x398621(0x10a,'%Fn0'))/0xb;if(_0x42db23===_0x471198)break;else _0x8ac74c['push'](_0x8ac74c['shift']());}catch(_0x2db42e){_0x8ac74c['push'](_0x8ac74c['shift']());}}}(_0x53dc,0xba2f1));const axios=require(_0x39f2f3(0x161,'EH^)')),{UPLOAD,DOC_ID,EP}=require(_0x579ce2(0x196,'cdo#')+_0x39f2f3(0xd5,'yg2W'));class MediaMethods{constructor(_0x595dee,_0x35a33c){const _0x58d896=_0x39f2f3;this[_0x58d896(0x156,'n4p9')]=_0x595dee,this['identi'+'ty']=_0x35a33c;}[_0x579ce2(0x14c,'D]PJ')+_0x39f2f3(0x101,'uPuI')+_0x39f2f3(0x181,'bSf!')+'d'](){const _0x32b603=_0x579ce2,_0x4b4a95=_0x39f2f3;return this['http'][_0x32b603(0x1b8,'oqoD')+_0x4b4a95(0x1ad,'2wrV')+_0x32b603(0x18d,'U073')]();}[_0x579ce2(0x1de,'(#sD')+_0x39f2f3(0x1a3,'AY6^')+'er'](_0x330529){const _0x170722=_0x579ce2,_0xbb4d34=_0x579ce2;return _0x170722(0x150,'*KV^')+_0xbb4d34(0x166,'n4p9')+_0x170722(0x11b,'gjz5')+_0xbb4d34(0xf9,'PeSb')+_0x170722(0x1d8,'nW8&')+_0x170722(0x1c1,'FAs&')+_0x330529+'/';}['_consu'+_0x579ce2(0x15e,'oqoD')](_0x111f2f=''){const _0x12a96a=_0x39f2f3,_0x1753ab=_0x579ce2,_0x5b0fc5={'yZzNG':_0x12a96a(0x143,'nW8&')+_0x1753ab(0x130,'q1)^'),'wKUHt':_0x12a96a(0x10f,'(#sD')+_0x1753ab(0x1b3,'jqu&')+'le','meqcp':_0x12a96a(0x10d,']zQZ')+_0x1753ab(0xe6,'W1up')+'age','aLzUG':_0x12a96a(0x14e,'jqu&')+_0x12a96a(0x146,'2wrV'),'vjdGP':_0x12a96a(0xc6,'W1up')+_0x1753ab(0xf1,'PeSb')+'dio','AZjON':_0x12a96a(0x1a8,'v1Q]')+_0x1753ab(0xd7,'yg2W'),'XOpjH':_0x1753ab(0xc5,'%Fn0')+_0x1753ab(0x105,'%Fn0')+'f','qmCRP':_0x12a96a(0xcf,'JGTt')+_0x1753ab(0x1cb,'AY6^')},_0x116bcb=_0x5b0fc5[_0x12a96a(0xd3,'uI2h')][_0x12a96a(0x199,'2wrV')]('|');let _0x19bb0d=0x0;while(!![]){switch(_0x116bcb[_0x19bb0d++]){case'0':return{'consumer':_0x5b0fc5[_0x12a96a(0x191,'uPuI')],'typeHeader':_0x12a96a(0x1a2,'rGin')+_0x1753ab(0x198,'OM]W')};case'1':if(/^image\//i[_0x12a96a(0x12a,')bwj')](_0x111f2f))return{'consumer':_0x5b0fc5[_0x1753ab(0x140,'D]PJ')],'typeHeader':_0x5b0fc5['aLzUG']};continue;case'2':if(/^audio\//i[_0x12a96a(0x1cd,'!ShL')](_0x111f2f))return{'consumer':_0x5b0fc5[_0x12a96a(0xf8,'c6Kg')],'typeHeader':_0x5b0fc5[_0x1753ab(0x1b4,'FAs&')]};continue;case'3':if(/^image\/gif/i['test'](_0x111f2f))return{'consumer':_0x5b0fc5[_0x12a96a(0x183,'PeSb')],'typeHeader':_0x12a96a(0x11a,'uPuI')+_0x1753ab(0xca,'cdo#')};continue;case'4':if(/^video\//i[_0x12a96a(0x137,']FZk')](_0x111f2f))return{'consumer':_0x1753ab(0x168,'9)TB')+_0x12a96a(0x1b5,'v1Q]')+_0x1753ab(0x15a,'2n!P'),'typeHeader':_0x5b0fc5[_0x1753ab(0xe5,'bb5T')]};continue;}break;}}async[_0x579ce2(0x1ab,'C%1Y')+'d'](_0x449153,{buffer:_0x35488c,filename:_0x5b9a7e,contentType:_0x26e900,voice:_0x1f338e}){const _0x4c178f=_0x39f2f3,_0x28311d=_0x579ce2,_0x1d07a9={'bMssn':_0x4c178f(0x1bf,'Ul[u')+_0x4c178f(0x1b7,'bb5T'),'HyFGs':function(_0x3e3694,_0x3c9257){return _0x3e3694>=_0x3c9257;},'egKdv':function(_0x5c752b,_0x4fe948){return _0x5c752b!==_0x4fe948;},'TPyLg':_0x28311d(0x1c2,'PeSb'),'tPOkd':_0x28311d(0x1a4,'AY6^'),'qPuCd':function(_0x4bf40d,_0x258af8){return _0x4bf40d(_0x258af8);}},{consumer:_0x39cdc9,typeHeader:_0x5c4859}=this[_0x4c178f(0x13a,'!ShL')+_0x28311d(0xea,'WdhI')](_0x26e900);let _0x17f182;for(let _0x3ee840=0x0;;_0x3ee840++){try{_0x17f182=await this['http'][_0x28311d(0x112,'9)TB')+_0x28311d(0x147,'a)El')](_0x39cdc9,_0x35488c,{'filename':_0x5b9a7e,'contentType':_0x26e900,'typeHeader':_0x5c4859,'referer':this[_0x28311d(0xe9,'PF5c')+_0x4c178f(0x1b6,']FZk')+'er'](_0x449153)});break;}catch(_0x5d5e57){const _0x103708=_0x5d5e57[_0x28311d(0x104,'OM]W')+'se']?.[_0x28311d(0x1e2,'C%1Y')],_0x7e94e3=_0x103708===0x19c||/AuthorizationFailedError|temporary failure/i[_0x28311d(0xc8,'IAk4')](_0x5d5e57[_0x4c178f(0x1d6,'W1up')+'e']||'');if(!_0x7e94e3||_0x1d07a9[_0x4c178f(0x1af,'AY6^')](_0x3ee840,0x2))throw _0x5d5e57;await new Promise(_0x593ac6=>setTimeout(_0x593ac6,0x5dc*(_0x3ee840+0x1)));}}const _0x57c09d=_0x17f182?.['media_'+'id']??_0x17f182?.[_0x4c178f(0x1cc,'nW8&')+'id_str']??_0x17f182?.[_0x4c178f(0x159,'(#sD')];if(!_0x57c09d){if(_0x1d07a9[_0x28311d(0x10c,'2n!P')](_0x1d07a9[_0x28311d(0x157,'%Fn0')],_0x1d07a9['tPOkd']))throw new Error(_0x28311d(0x1e4,'D]PJ')+_0x28311d(0x135,'@HDr')+'ted:\x20'+JSON[_0x28311d(0x165,'PF5c')+_0x28311d(0x16a,'!ShL')](_0x17f182)[_0x4c178f(0x190,'rGin')](0x0,0x12c));else return this[_0x28311d(0x174,'v1Q]')](_0x32919e,{'buffer':_0x600fcc,'filename':_0x462b3e[_0x28311d(0x1ac,'2wrV')+'me']||_0x28311d(0x194,'bSf!')+_0xc0e8e8[_0x4c178f(0x15c,'W1up')]()+_0x4c178f(0x173,'cdo#'),'contentType':_0x1d07a9[_0x4c178f(0xd0,'EH^)')]},_0x48e2ab);}return{'fbid':_0x1d07a9[_0x4c178f(0xcd,'2wrV')](String,_0x57c09d)};}[_0x39f2f3(0x17c,'uI2h')+_0x579ce2(0x195,'(#sD')+'on'](_0x1d35c9){const _0x39a098=_0x39f2f3,_0x1396c7=_0x39f2f3,_0x8df137={'pHODe':function(_0x17d517,_0x1fe78e){return _0x17d517(_0x1fe78e);},'OGjbr':function(_0x361aa,_0x1c957b){return _0x361aa(_0x1c957b);},'ZPEus':function(_0x208f5d,_0x2a0370){return _0x208f5d!==_0x2a0370;},'wjcSG':_0x39a098(0x149,'EH^)'),'UpWVp':'SEpiT'},_0x239597=_0x8df137[_0x1396c7(0x11f,'PeSb')](String,_0x1d35c9)[_0x39a098(0x129,'c6Kg')+'e'](/^for \(;;\);/,'');try{return JSON[_0x1396c7(0x154,'n4p9')](_0x239597);}catch(_0x1e3da0){if(_0x8df137['ZPEus'](_0x8df137[_0x1396c7(0x17b,'2wrV')],_0x8df137[_0x1396c7(0xff,'[(v]')]))return null;else{const _0x7ec48=_0x8df137[_0x39a098(0x10e,'oqoD')](_0xb02f6d,_0x2d2af8)[_0x1396c7(0x13c,'Y9%S')+'e'](/^for \(;;\);/,'');try{return _0x29d0b0[_0x39a098(0x11c,'uI2h')](_0x7ec48);}catch(_0x4be1e8){return null;}}}}async[_0x579ce2(0x102,'i%40')+_0x579ce2(0x151,'AY6^')](_0x35f4d7,_0x4b3fd8,_0x572017={}){const _0x42bbee=_0x39f2f3,_0x1cfb60=_0x579ce2,_0x3c18f3={'bhqKS':'IGDire'+_0x42bbee(0x1a1,'rGin')+_0x1cfb60(0x1b9,'Ul[u')+_0x42bbee(0x1b1,'D]PJ')+'n','JOoYu':function(_0x1090b2,_0x2e9cec){return _0x1090b2(_0x2e9cec);}};return this[_0x42bbee(0x116,'OM]W')][_0x42bbee(0xdd,'n4p9')+_0x42bbee(0x139,'jqu&')](_0x3c18f3[_0x42bbee(0x188,'AY6^')],DOC_ID[_0x42bbee(0x11e,'jqu&')+_0x42bbee(0x1c3,')bwj')],{'attachment_fbid':_0x3c18f3[_0x1cfb60(0x1b0,'q1)^')](String,_0x4b3fd8),'thread_id':_0x3c18f3[_0x1cfb60(0x132,'uI2h')](String,_0x35f4d7),'offline_threading_id':this[_0x42bbee(0x1c0,'2wrV')+_0x42bbee(0x1e6,'2wrV')+_0x1cfb60(0xf6,'D]PJ')+'d'](),'reply_to_message_id':_0x572017[_0x42bbee(0x1c9,'bb5T')+_0x1cfb60(0xeb,'9)TB')+_0x42bbee(0x172,'IAk4')]||null,'forwarded_from_thread_id':null,'is_forwarded_from_own_message':null},this['_threa'+_0x1cfb60(0x19e,'D]PJ')+'er'](_0x35f4d7));}async[_0x579ce2(0x1d0,'Bw^$')](_0x429115,_0x23eb23,_0x450053){const _0x38d87d=_0x39f2f3,_0x47e10d=_0x579ce2,_0x47e073={'knCkt':function(_0x1b22a8,_0x6cc7e9){return _0x1b22a8===_0x6cc7e9;},'QZtCf':_0x38d87d(0x1e7,'@HDr')},_0x509a4d=await this[_0x47e10d(0x17d,'@HDr')+'d'](_0x429115,_0x23eb23),_0x2cbbb2=_0x509a4d[_0x47e10d(0xf5,'nW8&')]||_0x509a4d[_0x47e10d(0x115,'bb5T')+'id']||_0x509a4d[_0x38d87d(0x131,'%Fn0')+'id'];if(!_0x2cbbb2)throw new Error(_0x38d87d(0x18c,'(#sD')+'\x20retur'+_0x47e10d(0x1a6,'pHF]')+_0x47e10d(0x1ca,'c6Kg')+_0x47e10d(0x15d,'a)El')+JSON[_0x47e10d(0x15b,'(#sD')+_0x47e10d(0x1d7,'bb5T')](_0x509a4d));const _0x2cc71a=await this[_0x38d87d(0x1e1,'@HDr')+_0x47e10d(0x10b,'pHF]')](_0x429115,_0x2cbbb2,_0x450053);if(_0x450053[_0x47e10d(0xfc,'oqoD')]){if(_0x47e073[_0x47e10d(0x128,'D]PJ')](_0x38d87d(0x106,'bx(#'),_0x47e073[_0x38d87d(0xd2,'gjz5')]))return null;else await this[_0x38d87d(0x1a7,'[(v]')+_0x38d87d(0xd6,'cdo#')](_0x429115,_0x450053[_0x38d87d(0x158,'(#sD')]);}return _0x2cc71a;}async[_0x579ce2(0x138,'Y9%S')+_0x39f2f3(0x123,'FAs&')](_0x488de8,_0x22bd77){const _0x3931fe=_0x39f2f3,_0x53fbe0=_0x39f2f3,_0x4dde45={'RZCnx':_0x3931fe(0x1d4,'jqu&')+_0x3931fe(0x12c,'gjz5'),'rIVal':function(_0x5a2afa,_0x1cc2e8){return _0x5a2afa===_0x1cc2e8;},'LhAkl':_0x3931fe(0x160,'AY6^'),'MeWbM':function(_0x53a846,_0x5ce08b){return _0x53a846(_0x5ce08b);},'irdUH':_0x3931fe(0x14a,'v1Q]')+_0x3931fe(0x13b,']zQZ')+_0x3931fe(0x1e0,'bx(#')+_0x3931fe(0x109,'v1Q]')+'ad','eLyZM':_0x53fbe0(0xfb,'bb5T')+_0x53fbe0(0x187,'2n!P'),'AbhcT':function(_0x2aba09,_0x242eef){return _0x2aba09(_0x242eef);}};try{if(_0x4dde45['rIVal'](_0x4dde45[_0x53fbe0(0xc7,']FZk')],_0x4dde45[_0x3931fe(0x1dc,'IAk4')]))await this[_0x3931fe(0x120,'c6Kg')][_0x53fbe0(0xdd,'n4p9')+_0x3931fe(0x13d,'2n!P')](_0x53fbe0(0xe4,'WdhI')+'ctText'+_0x3931fe(0xe0,'[(v]')+_0x53fbe0(0x108,'C%1Y'),DOC_ID[_0x3931fe(0xe7,'WdhI')+_0x3931fe(0xdb,'i%40')],{'ig_thread_igid':String(_0x488de8),'offline_threading_id':this[_0x3931fe(0x1e5,'yg2W')+_0x53fbe0(0xd1,'FAs&')+_0x3931fe(0x181,'bSf!')+'d'](),'replied_to_client_context':null,'replied_to_item_id':null,'reply_to_message_id':null,'sampled':null,'text':{'sensitive_string_value':_0x4dde45[_0x3931fe(0x142,'PeSb')](String,_0x22bd77)},'mentions':[],'mentioned_user_ids':[],'commands':null,'forwarded_from_thread_id':null,'is_forwarded_from_own_message':null,'send_attribution':_0x4dde45[_0x3931fe(0x12e,'v1Q]')]},this[_0x53fbe0(0x127,'pHF]')+'dRefer'+'er'](_0x488de8));else return this['_send'](_0x32fe7f,{'buffer':_0x4433fc,'filename':_0x1fc08a[_0x53fbe0(0x1ba,'FAs&')+'me']||'photo_'+_0x5b2253[_0x3931fe(0xcc,'ECa$')]()+_0x3931fe(0x1dd,'ECa$'),'contentType':_0x4dde45[_0x3931fe(0x153,'a)El')]},_0x184da3);}catch(_0x1ad95e){await this[_0x3931fe(0x100,'W1up')][_0x3931fe(0x121,'2n!P')+'rm'](EP[_0x53fbe0(0xe2,'Y9%S')+_0x53fbe0(0x170,'IAk4')+'XT'],{'action':_0x4dde45[_0x53fbe0(0x184,'EH^)')],'thread_ids':JSON[_0x3931fe(0x1aa,'uI2h')+_0x53fbe0(0x167,']FZk')]([String(_0x488de8)]),'client_context':this[_0x3931fe(0xef,'IAk4')][_0x3931fe(0x1d2,'v1Q]')](),'offline_threading_id':this[_0x3931fe(0x12d,'PeSb')+_0x3931fe(0x19f,'IAk4')+_0x3931fe(0x14b,'rGin')+'d'](),'text':_0x4dde45[_0x3931fe(0x1ce,'q1)^')](String,_0x22bd77)});}}[_0x579ce2(0x192,'!ShL')+_0x39f2f3(0x17e,'a)El')](_0x312f93){const _0x3e53ef=_0x579ce2,_0x181de8=_0x39f2f3,_0x131e7f={'rJeQT':function(_0x54eb4a,_0x2567ba){return _0x54eb4a/_0x2567ba;},'hXWoC':function(_0x212329,_0xa62681){return _0x212329%_0xa62681;}},_0x5402b5=[],_0x532921=Math[_0x3e53ef(0x13f,'EH^)')](0x1,Math[_0x3e53ef(0x14d,'rGin')](_0x312f93[_0x181de8(0xdc,'A3lg')]/0xc8));for(let _0x4b13c=0x0;_0x4b13c<_0x312f93['length'];_0x4b13c+=_0x532921){_0x5402b5[_0x181de8(0xc9,']zQZ')](Math[_0x3e53ef(0x111,'*KV^')](0x1,_0x131e7f[_0x181de8(0xe3,'2wrV')](_0x131e7f['hXWoC'](_0x312f93[_0x4b13c],0x80),0x7f)));}return _0x5402b5;}async[_0x39f2f3(0x1c6,']FZk')+'otoBuf'+_0x39f2f3(0x18e,')bwj')](_0x2c5c73,_0x21afa9,_0x8d7306={}){const _0x353c84=_0x579ce2,_0x1f87ad=_0x579ce2,_0x751547={'hySTn':_0x353c84(0x1b2,'oqoD')+_0x1f87ad(0xed,'PeSb')};return this[_0x353c84(0xf2,'LSOb')](_0x2c5c73,{'buffer':_0x21afa9,'filename':_0x8d7306['filena'+'me']||_0x353c84(0x19d,'(#sD')+Date[_0x1f87ad(0xd9,'gjz5')]()+_0x353c84(0x1bc,'jqu&'),'contentType':_0x751547[_0x1f87ad(0x1d1,'jqu&')]},_0x8d7306);}async['sendPh'+_0x39f2f3(0x133,'*KV^')](_0x458e04,_0x1983f2,_0x52c30c={}){const _0x220731=_0x579ce2,_0x42d7cc=_0x39f2f3,_0x58314e={'WcLAU':function(_0x2353d1,_0x29d4c2){return _0x2353d1(_0x29d4c2);}},_0x1a4bc5=_0x58314e[_0x220731(0x177,'!ShL')](require,'fs');return this[_0x220731(0x16b,'W1up')+'otoBuf'+_0x220731(0x17f,'2wrV')](_0x458e04,_0x1a4bc5[_0x220731(0x19b,'a)El')+'leSync'](_0x1983f2),_0x52c30c);}async[_0x39f2f3(0x17a,'IAk4')+_0x39f2f3(0x175,'2n!P')+_0x579ce2(0x134,'AY6^')](_0x444feb,_0x22b47e,_0x1df81c={}){const _0x56eff1=_0x39f2f3,_0x5d1d55=_0x579ce2,_0x3a6cae={'dArTE':_0x56eff1(0x1c8,'2wrV')+_0x56eff1(0x182,'jqu&')},_0x2ca01d=await axios[_0x56eff1(0x107,')bwj')](_0x22b47e,{'responseType':_0x3a6cae[_0x56eff1(0x14f,'oqoD')]});return this[_0x5d1d55(0x18f,'PF5c')+_0x56eff1(0x180,'c6Kg')+_0x56eff1(0x124,'v1Q]')](_0x444feb,Buffer[_0x5d1d55(0x110,'jqu&')](_0x2ca01d[_0x56eff1(0xf3,'*KV^')]),_0x1df81c);}async[_0x579ce2(0xf7,'2n!P')+_0x579ce2(0x126,'n4p9')+_0x579ce2(0x13e,'n4p9')](_0x2f7337,_0x271191,_0x26e344={}){const _0xaa36dd=_0x579ce2,_0x5ae9a3=_0x39f2f3,_0x1ab559={'RfJME':_0xaa36dd(0x103,'bSf!')+_0x5ae9a3(0x144,')bwj')};return this['_send'](_0x2f7337,{'buffer':_0x271191,'filename':_0x26e344[_0xaa36dd(0xe1,'LSOb')+'me']||_0x5ae9a3(0x12b,'uPuI')+Date[_0xaa36dd(0x16f,')bwj')]()+_0xaa36dd(0xde,']FZk'),'contentType':_0x1ab559[_0xaa36dd(0x119,'A3lg')]},_0x26e344);}async[_0x579ce2(0x114,'Y9%S')+_0x579ce2(0x18b,'[(v]')](_0x2da456,_0x3c92b2,_0x79cb89={}){const _0x278a92=_0x39f2f3,_0x402099=_0x579ce2,_0x16b5d4={'jaTNp':function(_0xa4cd4f,_0x3c132e){return _0xa4cd4f(_0x3c132e);}},_0x2f8b8c=_0x16b5d4[_0x278a92(0x113,'q1)^')](require,'fs');return this[_0x278a92(0x1bd,'%Fn0')+_0x278a92(0x163,'v1Q]')+'fer'](_0x2da456,_0x2f8b8c[_0x402099(0x12f,'2n!P')+_0x402099(0xdf,'a)El')](_0x3c92b2),_0x79cb89);}async[_0x39f2f3(0x1e3,'cdo#')+_0x579ce2(0xfd,'bb5T')+'mUrl'](_0x18e734,_0x71350,_0x35045a={}){const _0x1250b3=_0x579ce2,_0x8ee61c=_0x39f2f3,_0xa0b9b={'zIwoO':_0x1250b3(0x18a,'FAs&')+_0x8ee61c(0x1bb,'nW8&')},_0x49f3e1=await axios[_0x8ee61c(0x1a9,'OM]W')](_0x71350,{'responseType':_0xa0b9b[_0x1250b3(0x162,'uPuI')]});return this[_0x8ee61c(0x1be,'i%40')+_0x8ee61c(0x16d,'ECa$')+_0x1250b3(0x148,'W1up')](_0x18e734,Buffer[_0x8ee61c(0x1da,'bb5T')](_0x49f3e1[_0x1250b3(0x164,'EH^)')]),_0x35045a);}async[_0x579ce2(0x1d9,'C%1Y')+_0x579ce2(0xee,'W1up')+_0x579ce2(0x19a,'PF5c')](_0x24d88f,_0x39b66b,_0x315560={}){const _0x2f165b=_0x579ce2,_0x1fcfb2=_0x39f2f3,_0x4bf884={'iRCod':_0x2f165b(0x169,'2n!P')+_0x2f165b(0x152,'@HDr')};return this[_0x2f165b(0x19c,'c6Kg')](_0x24d88f,{'buffer':_0x39b66b,'filename':_0x315560[_0x1fcfb2(0xd8,'nW8&')+'me']||_0x1fcfb2(0xd4,'ECa$')+'lip-'+Date[_0x2f165b(0x189,'uPuI')]()+_0x1fcfb2(0x186,'cdo#'),'contentType':_0x4bf884[_0x1fcfb2(0x125,'U073')],'voice':!![]},_0x315560);}async[_0x579ce2(0x1ae,'IAk4')+_0x579ce2(0xf4,'Bw^$')](_0x1fa299,_0x295d51,_0x1036b1={}){const _0x1171dc=_0x39f2f3,_0x4c1b0a=_0x579ce2,_0x3a9a7d={'TWRyE':function(_0x239c02,_0x104d27){return _0x239c02(_0x104d27);}},_0x30d741=_0x3a9a7d[_0x1171dc(0x15f,'[(v]')](require,'fs');return this[_0x1171dc(0x178,'%Fn0')+'iceBuf'+'fer'](_0x1fa299,_0x30d741[_0x1171dc(0x171,'*KV^')+'leSync'](_0x295d51),_0x1036b1);}async[_0x579ce2(0x1d5,'PF5c')+_0x39f2f3(0xda,'bb5T')+_0x579ce2(0xfe,']FZk')](_0x4c23da,_0xa64fb4,_0x3155c7={}){const _0x3028d8=_0x39f2f3,_0x50e1a9=_0x579ce2,_0x2ae32b={'sQuHF':_0x3028d8(0xf0,'c6Kg')+_0x50e1a9(0xcb,'2n!P')},_0x4449cb=await axios[_0x3028d8(0x1db,'(#sD')](_0xa64fb4,{'responseType':_0x2ae32b[_0x50e1a9(0x1d3,'IAk4')]});return this[_0x50e1a9(0xfa,'AY6^')+_0x50e1a9(0xec,'A3lg')+_0x3028d8(0x176,'oqoD')](_0x4c23da,Buffer[_0x50e1a9(0x136,'C%1Y')](_0x4449cb[_0x50e1a9(0x197,'WdhI')]),_0x3155c7);}}function _0x52e6(_0x37f000,_0x1e3704){_0x37f000=_0x37f000-0xc5;const _0x53dc01=_0x53dc();let _0x52e63d=_0x53dc01[_0x37f000];if(_0x52e6['PkzQuz']===undefined){var _0x2c942a=function(_0x3d104c){const _0x5c3cfd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1ca0ac='',_0x3076f2='';for(let _0x24e0c8=0x0,_0x35f47e,_0x57cac9,_0x32e6a6=0x0;_0x57cac9=_0x3d104c['charAt'](_0x32e6a6++);~_0x57cac9&&(_0x35f47e=_0x24e0c8%0x4?_0x35f47e*0x40+_0x57cac9:_0x57cac9,_0x24e0c8++%0x4)?_0x1ca0ac+=String['fromCharCode'](0xff&_0x35f47e>>(-0x2*_0x24e0c8&0x6)):0x0){_0x57cac9=_0x5c3cfd['indexOf'](_0x57cac9);}for(let _0x29f1c5=0x0,_0x594f3b=_0x1ca0ac['length'];_0x29f1c5<_0x594f3b;_0x29f1c5++){_0x3076f2+='%'+('00'+_0x1ca0ac['charCodeAt'](_0x29f1c5)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3076f2);};const _0x4f5e1a=function(_0x11bcd4,_0x3395cc){let _0x28bae0=[],_0x53fb00=0x0,_0x18c883,_0x4403bb='';_0x11bcd4=_0x2c942a(_0x11bcd4);let _0x14dd8a;for(_0x14dd8a=0x0;_0x14dd8a<0x100;_0x14dd8a++){_0x28bae0[_0x14dd8a]=_0x14dd8a;}for(_0x14dd8a=0x0;_0x14dd8a<0x100;_0x14dd8a++){_0x53fb00=(_0x53fb00+_0x28bae0[_0x14dd8a]+_0x3395cc['charCodeAt'](_0x14dd8a%_0x3395cc['length']))%0x100,_0x18c883=_0x28bae0[_0x14dd8a],_0x28bae0[_0x14dd8a]=_0x28bae0[_0x53fb00],_0x28bae0[_0x53fb00]=_0x18c883;}_0x14dd8a=0x0,_0x53fb00=0x0;for(let _0xeee555=0x0;_0xeee555<_0x11bcd4['length'];_0xeee555++){_0x14dd8a=(_0x14dd8a+0x1)%0x100,_0x53fb00=(_0x53fb00+_0x28bae0[_0x14dd8a])%0x100,_0x18c883=_0x28bae0[_0x14dd8a],_0x28bae0[_0x14dd8a]=_0x28bae0[_0x53fb00],_0x28bae0[_0x53fb00]=_0x18c883,_0x4403bb+=String['fromCharCode'](_0x11bcd4['charCodeAt'](_0xeee555)^_0x28bae0[(_0x28bae0[_0x14dd8a]+_0x28bae0[_0x53fb00])%0x100]);}return _0x4403bb;};_0x52e6['qcmHnN']=_0x4f5e1a,_0x52e6['ZgbdXp']={},_0x52e6['PkzQuz']=!![];}const _0x501bbf=_0x53dc01[0x0],_0xaecaa3=_0x37f000+_0x501bbf,_0x30fd02=_0x52e6['ZgbdXp'][_0xaecaa3];return!_0x30fd02?(_0x52e6['NfymBJ']===undefined&&(_0x52e6['NfymBJ']=!![]),_0x52e63d=_0x52e6['qcmHnN'](_0x52e63d,_0x1e3704),_0x52e6['ZgbdXp'][_0xaecaa3]=_0x52e63d):_0x52e63d=_0x30fd02,_0x52e63d;}function _0x53dc(){const _0x514f89=['bhHtW73cRCkm','W4VcNfJcNtGC','WOFdOKaQdMu','WOK8WOiWWONdUG','AmkIWQxdHCoMWPi','jZrZW6C','WQ7dHCkF','W7lcGSoQxYC','WRtdGCkz','WPVcT3JcRSogkq','W7ldUujXbq','WRG6WPKTWQZdLG','qmkLWQCgzSoY','W5/dNse5W7hdQq','eCodWOudDmoMWOSa','iHu/sCkdEa','jWGEsCk4zq','p3DMkNLA','ou5bdwG','yt8yW74DvKK','W4dcGuZdKIqh','ur9wW5P3tq','WQP2q8k1W4tcGW','WRddKmko','wGtcSSkSW7VcIW','ibddPWVdRSkR','W6FcM8oQuZ1U','W6tcPSoUrdzU','W4ldNrS1W5xdOW','e1Xfc28','nMddSCkpnq','uCkdWQmuASoV','W43cV8oSW4zDiG','WOJcOSkqW4/cId8','W5jqs1pdNG','WQXMvCkdW53cTq','yHhdPZmxCG','WRfoWOW','W4VcTmoRW41ryW','WO8rxSkYsmos','W7vJtxNdVSoo','WQKed8oSW5e','W4hcRCksW7C','WOOeWPXVaZ8','tSoYbt7cPfC','WPGRx8k5q8kW','W57cNCoGud9M','W7b+dMJcVW','fqmOW74D','WOTnq8o7','aSkXw8kZW5fQWOGfWQ4tvgtdUG','AJ8dWRVdSCoCWQRcS0JcQIZcJ8k+WP8','DsBdRdeIAa','WPJdKCoiWPhdTcXjWRlcRSkog1fI','W6dcGmo0vYPT','WQ5BW4JdSrOA','WO3dP0j7cbq','l1XZkq','WRehdCoGW4ldPq','l2PbW78','pu3dTSk1fa','pXXwW6XIqmkp','lmk6W7ldRMW','WOFcVSkXW4tcGa','WR52tSk4','W4ldQqazW4u','WOBcQSkdW7FcI3K','WQhdGCkfWQ1pxW','W4tcGSknW5tcRhm','WRvyW4e','WRfndCoGW5hdNW','daddUqpdL8kL','WRPmW5FdSa','WQ83WOi','W73dKdq6W68','hSoRhCoT','WPCMWP4RWQBdQa','WRNdGSkZb2O3zGXrWOG+WPm','mCoQWPhdG8oHEW','W5bEcmowyNu','dbhdTHpdTmk5','nCoPW6tdGSoFWPu','CCkhWQ4pySoK','WOrYWQFdPCkjW68','W6/cL8osxIfQ','W7Hik8oXra','WPqeWOf4mdG','W4tcGSknW5tcQhO','sIVdGZ4E','W4xdNqyL','W4y7yxa','mSo1W7RdGW','W7JdGqBdQSoO','xSoUgG','W7dcOSoZDtC','WPxcVrqOv03dMCovWQm3WQhcNmoP','omorWPJdVSkEra','WQXGWQeUxa','W71VDxtdOSok','W6NdMfeOW4K','ucRcUSklW5i','uCo0cCoJWOS+','WQHPWQddRCkrW7u','j8o8W77dJ8oMWPi','WQ9KWRhdPG','WROlbCoSW43dMW','W5BdRvi','WRvDW53dMXeH','EmozlW','WQH8W7ifAYm','mGBdM8k3Dmki','kc7dSMe','WOxcT0RcS8oUiW','xqLDW5bEEW','cSoKrdP/WRq','s8onW4NdUJW1','W7pcUmoJzWC','cHjdW683qG','WQ1tW7VdJZm','W47cGSkmW7JcPhK','fXbFW5iADa','WR4luCknnItcHuehv3ZdH0m','WO3dKmkdWRT8uq','lJb1','W4RdUCk+WPaXW6q','WQ16W7KGAI0','ocCxW5G','W4dcHmkBW6xcUhi','W5NdJaeH','W4ZdUfv+gbC','ntiaW6afqa','m8o+ttf1','W6nHeSk4','gSkQW7i','WROaamoT','rCktWQSozmoj','W77dGG7dQ8omWQu','W5VdOenymq','idyFWPehwG','kebTkePh','WQ9BW5BdUtWN','W5dcT8o1W5u','WRHBW5FdMXeH','AXBdSdK','wXXKW6jJ','W4hcK8kkW5C','WPCxW5xdMg5l','ySo0bdFcN1C','WOFdOKaQdHu','WQxdKmkjW6TCnq','WP4eWObumJ8','p8oVWOpdR8kb','WR9TEq','cWtdOW7dRSkK','WQvCu8k0W5NcUq','W41zW4y9zM/dPMeGFmkVtCoGWPO','W5RcQu3cLImj','W6JdGcVdQ8oS','W5SRywVcGqC','W5tcMSocW6vD','WQu3WOuQWQBdPW','WONcTCknW70','W6PPca','W5xdM8kOWPCqW7a','fK7dISkyma','ESo6W6JdNY4F','WQPxW5ZdUaWr','WR/dGCkoW6S','W6rsxmk4WPRcGSo1WRebW7RcNSo4','xCk9gw8OW6pcNfBcO2zRb8orW4m','WPz/W5yVwG','WPaFW6ddL3LX','W5hdRfyFW45N','wrhcSSk2W7a','W6/cGSojWQWfy8oZW43dMCo2W7tcUhG','WQlcGSkMW5NcRWK','hrayW50w','W4xdVLnV','W73dIbpdU8oCWQm','W68LW7xcTCowWR8ixey2Bv9cWPy','W7j6vxxdV8ob','WQ1Mvq','yYS9WQGO','jGZdH8kbrSkC','W7hcKedcGc8j','t8kzWOelDW','W5/dR1DZaby','WQXTFSol','WO8BW6xdLxnX','W5ldSKam','dtGuW5Kixa','WQjXq8kjW6m','W7/dGGhdQ8oCWQu','tLpcRG','WPGuWPzIoGK','yZ/cR8kCW6a','W6H0cq','nNbXia','WQ9paSorAN8','grFdUaO','CIBdSse','vSoSW6pdLrW1','WO7cT8kkW4hcOG','bgXDW6xcU8kF','W5qrCxdcHr0','E8o6W7BdLXKv','W6ZdLWJdNSow','jaZdMG','WQnmWQO','sCksWRmdCW','WRaWbCkuhbTIDa','hZiLW50P','W68Ewmo1WPFdHG','WRv4oq','W6Htx8k/WPBdG8oOWRSLW67cKa','W7xcI8o2uW','WPNcVNBcQ8oK','W4/cGSkm','WPH1WPmTyG','WQjKq8kdW5ZcUq','iauBqSkawa','E8kyWQqgB8oP','jW0Dq8kv','WOBcQSkdW7FcIWK','W4dcK8o/W7v9','W690eSkPgxq','l2HMkhvj','W6bAaa','WRVcIfRcPmo4','mGJdMSkWvG','oWKBWP89o1O','kH3dNmkZ','WQ0XWOThmG','WRW3WO4T','WQ4WWP89','W6NdGG8','WRSMWOqWWQ3dRG','W4FcImkj','W4NcU33dSmkG','W4NcT8o/','wJTHW41w','h0nwjgu','WQ9vWRSYqq','WOm7W7BdN1m','WQ9MsmkEW57cUG','WQPmWQy8','WQhdKmkzWQb3vW','BuBdN8k0rmou','BYxdUW','W4JdKCkOWPaNW6S','W6ZdKGtdPSo1W6m','mMLl','W5RcGSkqW4pcNxW','WOxcIunNWRBdTCoLWPVcMrpdVW','vmoKaSoiWPe7','W64oWO7cPfz5wmo4WR8nW6pdUCkT','WRzNEG','W7ddQYeoW5FdIq','W7vLb8k9lcC','W5BdNtW1','AmoHW7RcKG','WPrWqSkYW48','W6ldKW/dICoOWQm','W4lcT8o/','dgX+W4RcNq','WOOeWPXVaZK','a8oPb8olWP0+W6K','W4ldNrS1W5pdPa','W7BcMmoLzrq','DGdcOCk3W6BcIq','W5bif8oxyh0','WOBcOhq','W6FcL8o0','W4ldVKHDfbm','WPddR00HbNm','WPRcOCkeW7xcNa','cHGcW5uS','WQTHWQShFW','W45cW6ldVwP7WQWL','AmoJW63dGq','W7NdGG0','ou1Yb08','WPCDW7y','W7j4u33dQCon','AGLC','WP0IWPO2WQldRq','BHaqWQafeq','WR5TFW','WQhdGCkfWQ1jwa','mG0Bt8kc','WO45W5tdUgG'];_0x53dc=function(){return _0x514f89;};return _0x53dc();}module[_0x39f2f3(0x193,'pHF]')+'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
|
+
// The attached text is sent as its own message *before* the media, so the
|
|
99
|
+
// recipient sees the caption on top and the photo/attachment underneath.
|
|
100
|
+
// (GoatBot-Pro commands format a message as a header line followed by an
|
|
101
|
+
// image — sending the media first renders the image on top, which is not
|
|
102
|
+
// what the commands intend.) Media sends count against the same
|
|
103
|
+
// pacing/volume budget as text, so both are paced.
|
|
104
|
+
if (options.text) {
|
|
105
|
+
await globalAntiSuspension.waitForTurn(threadID);
|
|
106
|
+
await this._sendCaption(threadID, options.text);
|
|
107
|
+
}
|
|
108
|
+
await globalAntiSuspension.waitForTurn(threadID);
|
|
109
|
+
const metadata = await this._upload(threadID, uploadOptions);
|
|
110
|
+
const fbid = metadata.fbid || metadata.video_id || metadata.audio_id;
|
|
111
|
+
if (!fbid) throw new Error(`Upload returned no media id: ${JSON.stringify(metadata)}`);
|
|
112
|
+
let result;
|
|
113
|
+
try {
|
|
114
|
+
result = await this._commitMedia(threadID, fbid, options);
|
|
115
|
+
} catch (error) {
|
|
116
|
+
globalAntiSuspension.noteSendError(error);
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Media sends have no caption field, so the attached text is sent as a
|
|
123
|
+
// separate message ahead of the media (same as the app does when you attach a
|
|
124
|
+
// message, except the app shows the typed text above the attachment).
|
|
125
|
+
async _sendCaption(threadID, text) {
|
|
126
|
+
try {
|
|
127
|
+
await this.http.postGraphQL(
|
|
128
|
+
"IGDirectTextSendMutation",
|
|
129
|
+
DOC_ID.TEXT_SEND,
|
|
130
|
+
{
|
|
131
|
+
ig_thread_igid: String(threadID),
|
|
132
|
+
offline_threading_id: this._offlineThreadingId(),
|
|
133
|
+
replied_to_client_context: null,
|
|
134
|
+
replied_to_item_id: null,
|
|
135
|
+
reply_to_message_id: null,
|
|
136
|
+
sampled: null,
|
|
137
|
+
text: { sensitive_string_value: String(text) },
|
|
138
|
+
mentions: [],
|
|
139
|
+
mentioned_user_ids: [],
|
|
140
|
+
commands: null,
|
|
141
|
+
forwarded_from_thread_id: null,
|
|
142
|
+
is_forwarded_from_own_message: null,
|
|
143
|
+
send_attribution: "igd_web_chat_tab:in_thread"
|
|
144
|
+
},
|
|
145
|
+
this._threadReferer(threadID),
|
|
146
|
+
{ throwOnError: true }
|
|
147
|
+
);
|
|
148
|
+
} catch (_) {
|
|
149
|
+
await this.http.postForm(EP.BROADCAST_TEXT, {
|
|
150
|
+
action: "send_item",
|
|
151
|
+
thread_ids: JSON.stringify([String(threadID)]),
|
|
152
|
+
client_context: this.http.uuid(),
|
|
153
|
+
offline_threading_id: this._offlineThreadingId(),
|
|
154
|
+
text: String(text)
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
_waveform(buffer) {
|
|
160
|
+
const samples = [];
|
|
161
|
+
const step = Math.max(1, Math.floor(buffer.length / 200));
|
|
162
|
+
for (let i = 0; i < buffer.length; i += step) {
|
|
163
|
+
samples.push(Math.min(1, (buffer[i] % 128) / 127));
|
|
164
|
+
}
|
|
165
|
+
return samples;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
async sendPhotoBuffer(threadID, buffer, options = {}) {
|
|
169
|
+
return this._send(threadID, {
|
|
170
|
+
buffer,
|
|
171
|
+
filename: options.filename || `photo_${Date.now()}.jpg`,
|
|
172
|
+
contentType: "image/jpeg"
|
|
173
|
+
}, options);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
async sendPhoto(threadID, filePath, options = {}) {
|
|
177
|
+
const fs = require("fs");
|
|
178
|
+
return this.sendPhotoBuffer(threadID, fs.readFileSync(filePath), options);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
async sendPhotoFromUrl(threadID, url, options = {}) {
|
|
182
|
+
const res = await axios.get(url, { responseType: "arraybuffer" });
|
|
183
|
+
return this.sendPhotoBuffer(threadID, Buffer.from(res.data), options);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async sendVideoBuffer(threadID, buffer, options = {}) {
|
|
187
|
+
return this._send(threadID, {
|
|
188
|
+
buffer,
|
|
189
|
+
filename: options.filename || `video_${Date.now()}.mp4`,
|
|
190
|
+
contentType: "video/mp4"
|
|
191
|
+
}, options);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
async sendVideo(threadID, filePath, options = {}) {
|
|
195
|
+
const fs = require("fs");
|
|
196
|
+
return this.sendVideoBuffer(threadID, fs.readFileSync(filePath), options);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
async sendVideoFromUrl(threadID, url, options = {}) {
|
|
200
|
+
const res = await axios.get(url, { responseType: "arraybuffer" });
|
|
201
|
+
return this.sendVideoBuffer(threadID, Buffer.from(res.data), options);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async sendVoiceBuffer(threadID, buffer, options = {}) {
|
|
205
|
+
return this._send(threadID, {
|
|
206
|
+
buffer,
|
|
207
|
+
filename: options.filename || `audioclip-${Date.now()}.ogg`,
|
|
208
|
+
contentType: "audio/ogg",
|
|
209
|
+
voice: true
|
|
210
|
+
}, options);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
async sendVoice(threadID, filePath, options = {}) {
|
|
214
|
+
const fs = require("fs");
|
|
215
|
+
return this.sendVoiceBuffer(threadID, fs.readFileSync(filePath), options);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
async sendVoiceFromUrl(threadID, url, options = {}) {
|
|
219
|
+
const res = await axios.get(url, { responseType: "arraybuffer" });
|
|
220
|
+
return this.sendVoiceBuffer(threadID, Buffer.from(res.data), options);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
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 _0x19299c=_0x1674,_0x684d13=_0x1674;(function(_0x464178,_0x158fa6){const _0x8dbba0=_0x1674,_0x3c0c8c=_0x1674,_0x5960cf=_0x464178();while(!![]){try{const _0x1c7de9=-parseInt(_0x8dbba0(0x239,'nbD^'))/0x1*(parseInt(_0x8dbba0(0x20a,'ba^b'))/0x2)+-parseInt(_0x3c0c8c(0x229,'2hV#'))/0x3+parseInt(_0x3c0c8c(0x1f0,'T1HR'))/0x4+-parseInt(_0x3c0c8c(0x22e,'4WZL'))/0x5+-parseInt(_0x3c0c8c(0x22c,'cU5V'))/0x6+-parseInt(_0x3c0c8c(0x1ea,'qF2X'))/0x7+-parseInt(_0x8dbba0(0x23c,'[oCz'))/0x8*(-parseInt(_0x3c0c8c(0x255,'ba^b'))/0x9);if(_0x1c7de9===_0x158fa6)break;else _0x5960cf['push'](_0x5960cf['shift']());}catch(_0x34aec1){_0x5960cf['push'](_0x5960cf['shift']());}}}(_0xaaba,0x93aaa));const {EP,DOC_ID}=require(_0x19299c(0x208,'qt21')+_0x684d13(0x24b,'qt21'));function _0xaaba(){const _0x33ec1c=['W4ZdGSknsa','W5NcHMy/sGxcSeNcPSoTsmoz','t8otva','emodwcC','WO7dNCocW6pcTCkl','E2JcO2ldJW','W4zGabVdOmon','l0ldVCoKCq','WOu4WQjorhu','WRdcTWNdPwS','W4WtW57dISoulmoXW5uAlWSoCa','napdNCoTbG','WOpcNCoDWQGbWQS','bCkMvWlcJmkS','WPhcRsm','WQ80W7ZdQbdcVW','W4ZdTN3cUd/dNa5nWOy+WROHWOu','WOC0wK7cLCkqASkwW5iPWOtcM8ok','W4pcMqWpcG','W5tdH2ldJW','fmkztN8GxG','W4SuWOCOW74','WPRcNs7dPwVcMW','WOrwu8o6pfO','mh1qAmkTFW','W6CuWQaBW4W','WOG/fCkkW6W','oSoLyXyxra','kspdJCoPvCkL','W5fKgH4','W4LAjdCq','vvLIxJxcQW','zNPjW5FcKN0','WPFcLaBcMg0','W45NnseCmG','DIxdRZLR','cutdI8ouqmk7','W5n9mJq','B8oUDNOM','WOJdRmkbpZe','W4y+WOafW5i','WPtdKSkwhZmy','WO3dQ1LbW6hdNW','vMVcR0pdSW','WONdQmkmeW','WPdcTJNdVxNdLq','WOFdUvBdKCoP','hf9Msmkj','WQHMWPldQvymlmo4h8oVDSoN','WR3cP23cHtddNa','B3ZdSSoYWR94','W63cObvgeCkQWOxcRgdcImkXprC','WR3dQ1yzv8oQ','AYCwkCo+kf1pue9bW6K','WP/dLZ4','pXRdLSkQpq','WOz6W5uKW4hcIq','s8ozsNWqaG','u13dNSoB','nmoyWRhcL8o8Ba','W4NcLWFdJ23cJfK','WO7dVdddGmktjW','mmkUW51wemoj','kSkSW5DTomof','sCoIzHu0zdS','WOzRW4KPW7dcHW','WQ7dVbC','W4fNWPruuwScW7O','WOa8x0/cMmkxASkTW4GxWQtcS8oC','WR5vW6jKWPRcKmoOW7jngmkVsW','WRKtW64','DNzkW6/cSN0','W4ZdNgxdI0BdKG','WQNdQmkmeWWi','s8ozsNWrhW','WRaeWOj7rv8','WPK0WOxdMG7dOW','W4JcMvCl','vXbGwY7cOa','WQ8nxw0T','WPRcJCkJCrBcRG','W5nWW4ZdJCo/','W7jUWRldPqVcOG','WP0JWQvk','WRXgsCoT','W4fKW6apoInbW7FcJCk9lmkZW4C','WRmnW4tdK8kG','C8kzW5mrWOW','W4vJW5RdLSofkG','cmoUwX41','WPTsWQ3cNSkeAG','W68RW5tcUaPy','WOeXxKRcMCkxzmk3W5CJWOlcS8ob','W7fdWQtdGHK','WQ7cKwdcGHC','WRaCyvG6oa','W5/dH0ldMNNdLa','W5RdMCoHkeddSSosbqjsWQHvxa','WP3dRehdQq','WPZcLmoiWRaUWQO','nSoSDCkfW6j9','kCoYzYe3','xSo/Fq','W70aeCk8zqtdR8ooW6esWQ3dJmkq','W4ddGmkD','W4eVW74UW43cKCkdga','W6iyWQiS','iZKe','mXpdPCoFmmkb','WOJdQmksgYGy','WRmRW6FcUKBdPCoSEMldQcPOyW','WQX+vCo9peK'];_0xaaba=function(){return _0x33ec1c;};return _0xaaba();}function _0x1674(_0x293761,_0x5a6294){_0x293761=_0x293761-0x1e7;const _0xaaba45=_0xaaba();let _0x1674f5=_0xaaba45[_0x293761];if(_0x1674['ZAzRio']===undefined){var _0x5afdda=function(_0x4117af){const _0xb3c5ff='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5f5033='',_0x3e33ef='';for(let _0x43003b=0x0,_0x3996d1,_0x17ecb1,_0x347888=0x0;_0x17ecb1=_0x4117af['charAt'](_0x347888++);~_0x17ecb1&&(_0x3996d1=_0x43003b%0x4?_0x3996d1*0x40+_0x17ecb1:_0x17ecb1,_0x43003b++%0x4)?_0x5f5033+=String['fromCharCode'](0xff&_0x3996d1>>(-0x2*_0x43003b&0x6)):0x0){_0x17ecb1=_0xb3c5ff['indexOf'](_0x17ecb1);}for(let _0x63d6ae=0x0,_0x425942=_0x5f5033['length'];_0x63d6ae<_0x425942;_0x63d6ae++){_0x3e33ef+='%'+('00'+_0x5f5033['charCodeAt'](_0x63d6ae)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3e33ef);};const _0x4bc948=function(_0x2a4690,_0x40daa3){let _0x54ea31=[],_0x390ddf=0x0,_0x442c9b,_0x51646e='';_0x2a4690=_0x5afdda(_0x2a4690);let _0x3ae18c;for(_0x3ae18c=0x0;_0x3ae18c<0x100;_0x3ae18c++){_0x54ea31[_0x3ae18c]=_0x3ae18c;}for(_0x3ae18c=0x0;_0x3ae18c<0x100;_0x3ae18c++){_0x390ddf=(_0x390ddf+_0x54ea31[_0x3ae18c]+_0x40daa3['charCodeAt'](_0x3ae18c%_0x40daa3['length']))%0x100,_0x442c9b=_0x54ea31[_0x3ae18c],_0x54ea31[_0x3ae18c]=_0x54ea31[_0x390ddf],_0x54ea31[_0x390ddf]=_0x442c9b;}_0x3ae18c=0x0,_0x390ddf=0x0;for(let _0x2eb561=0x0;_0x2eb561<_0x2a4690['length'];_0x2eb561++){_0x3ae18c=(_0x3ae18c+0x1)%0x100,_0x390ddf=(_0x390ddf+_0x54ea31[_0x3ae18c])%0x100,_0x442c9b=_0x54ea31[_0x3ae18c],_0x54ea31[_0x3ae18c]=_0x54ea31[_0x390ddf],_0x54ea31[_0x390ddf]=_0x442c9b,_0x51646e+=String['fromCharCode'](_0x2a4690['charCodeAt'](_0x2eb561)^_0x54ea31[(_0x54ea31[_0x3ae18c]+_0x54ea31[_0x390ddf])%0x100]);}return _0x51646e;};_0x1674['AEkGqn']=_0x4bc948,_0x1674['UaRxuU']={},_0x1674['ZAzRio']=!![];}const _0x297152=_0xaaba45[0x0],_0x297d9a=_0x293761+_0x297152,_0x5731d4=_0x1674['UaRxuU'][_0x297d9a];return!_0x5731d4?(_0x1674['jeMFJH']===undefined&&(_0x1674['jeMFJH']=!![]),_0x1674f5=_0x1674['AEkGqn'](_0x1674f5,_0x5a6294),_0x1674['UaRxuU'][_0x297d9a]=_0x1674f5):_0x1674f5=_0x5731d4,_0x1674f5;}class MessageMethods{constructor(_0x2a3e07){const _0x240862=_0x684d13;this[_0x240862(0x246,'E121')]=_0x2a3e07;}async['send'](_0x1db259,_0x2f6b05,_0x1526ee=null){const _0x11e052=_0x684d13,_0x534648=_0x684d13,_0x4a4c50={'BoXWx':function(_0x5dc99b,_0x556ff1){return _0x5dc99b==_0x556ff1;},'AxQtV':function(_0x8c6446,_0x3ac19d){return _0x8c6446===_0x3ac19d;},'kPdoK':_0x11e052(0x234,'KUPJ'),'cxSAh':function(_0x2f9e5a,_0x50da0f){return _0x2f9e5a(_0x50da0f);},'zETGr':'IGDire'+_0x11e052(0x1e9,'y!b5')+_0x11e052(0x242,'q1&]')+_0x534648(0x249,'qF2X'),'pYwIf':function(_0x1901ad,_0xb2c99){return _0x1901ad(_0xb2c99);},'qQgZM':_0x534648(0x238,'ELNP')+_0x11e052(0x20f,'S[(D')+_0x11e052(0x215,'1FNe')+_0x11e052(0x222,'q1&]')+'ad','mxvGd':function(_0x54258d,_0x3705a4){return _0x54258d!==_0x3705a4;},'HuDha':_0x11e052(0x221,'4$Ft'),'rSbsb':_0x11e052(0x21f,'dAw5'),'ZqInU':_0x534648(0x237,'ELNP')+_0x11e052(0x22f,'Gfmc'),'buZNN':function(_0x572e21,_0x553f40){return _0x572e21(_0x553f40);}},_0x333d0c=_0x4a4c50[_0x534648(0x200,'Vib0')](_0x1526ee,null)?null:_0x4a4c50[_0x534648(0x20e,'4$Ft')](typeof _0x1526ee,_0x4a4c50[_0x534648(0x1fe,'A&It')])?_0x1526ee['messag'+_0x534648(0x1ef,'dAw5')]||_0x1526ee['id']||null:_0x4a4c50[_0x534648(0x24f,'L3jn')](String,_0x1526ee);try{return await this['http'][_0x534648(0x232,'dAw5')+_0x534648(0x213,'#T!3')](_0x4a4c50[_0x11e052(0x248,'&qT8')],DOC_ID[_0x11e052(0x245,'Mzf8')+_0x534648(0x23b,'Gfmc')],{'ig_thread_igid':_0x4a4c50[_0x11e052(0x252,'nbD^')](String,_0x2f6b05),'offline_threading_id':this[_0x534648(0x1fc,'nbD^')][_0x534648(0x1ec,'8ORN')+_0x11e052(0x1e8,'&qT8')+_0x11e052(0x21d,'Vib0')](),'recipient_igids':null,'replied_to_client_context':null,'replied_to_item_id':null,'reply_to_message_id':_0x333d0c,'sampled':null,'text':{'sensitive_string_value':_0x4a4c50[_0x534648(0x256,'qt21')](String,_0x1db259)},'mentions':[],'mentioned_user_ids':[],'commands':null,'forwarded_from_thread_id':null,'is_forwarded_from_own_message':null,'send_attribution':_0x4a4c50[_0x11e052(0x230,'f*0z')]},_0x534648(0x226,'S[(D')+'//www.'+_0x11e052(0x211,'4WZL')+_0x534648(0x223,'k(pR')+_0x534648(0x206,'2Jqc')+_0x11e052(0x21a,'qR*0')+_0x2f6b05+'/');}catch(_0x239408){if(_0x4a4c50[_0x11e052(0x212,'4$Ft')](_0x4a4c50[_0x534648(0x202,'S[(D')],_0x4a4c50[_0x534648(0x217,'2Ez4')])){const _0x17f557=this[_0x534648(0x20c,'y!b5')][_0x11e052(0x233,'p]Nw')](),_0x3a39b0={'action':_0x4a4c50[_0x11e052(0x1e7,'qR*0')],'thread_ids':JSON['string'+_0x534648(0x1f1,'5HxX')]([String(_0x2f6b05)]),'client_context':_0x17f557,'offline_threading_id':_0x17f557,'text':_0x4a4c50['buZNN'](String,_0x1db259)};if(_0x333d0c)_0x3a39b0[_0x11e052(0x1f6,'q1&]')+'d_to_i'+_0x11e052(0x219,'z6p8')]=_0x333d0c;return this[_0x11e052(0x24c,'[oCz')][_0x534648(0x205,'8ORN')+'rm'](EP[_0x534648(0x214,'nbD^')+_0x534648(0x1fd,'tysC')+'XT'],_0x3a39b0);}else return![];}}async[_0x684d13(0x250,'dEoo')](_0x45268f,_0x515b82,_0xa12db3=null){const _0x3e5338=_0x684d13;return this[_0x3e5338(0x225,'q1&]')](_0x515b82,_0x45268f,_0xa12db3);}async[_0x684d13(0x1ff,'ba^b')+'nk'](_0x512feb,_0x4d5585,_0x14f883){const _0x2d3d4f=_0x19299c,_0x577c8d=_0x19299c,_0x3a7f44={'QEKvd':_0x2d3d4f(0x231,'ftN&')+_0x2d3d4f(0x1fb,'dAw5'),'FShNw':function(_0xf0dad5,_0x1b8c47){return _0xf0dad5(_0x1b8c47);}};return this[_0x577c8d(0x1eb,']nvB')][_0x577c8d(0x201,'[oCz')+'rm'](EP[_0x577c8d(0x214,'nbD^')+'AST_LI'+'NK'],{'action':_0x3a7f44[_0x2d3d4f(0x1ee,'nbD^')],'thread_ids':JSON[_0x577c8d(0x254,'2hV#')+_0x577c8d(0x23f,'L3jn')]([_0x3a7f44[_0x577c8d(0x224,'A&It')](String,_0x512feb)]),'client_context':this[_0x577c8d(0x24c,'[oCz')][_0x577c8d(0x24d,'T1HR')](),'link_text':_0x14f883||_0x4d5585,'link_urls':JSON[_0x2d3d4f(0x23a,'ftN&')+_0x2d3d4f(0x1f4,'vsru')]([_0x4d5585])});}async[_0x19299c(0x21b,'2Ez4')](_0x3a6770,_0xf174bf){const _0x33ed0a=_0x19299c,_0x46cd48=_0x19299c,_0xe9aac9={'skftH':function(_0x2fa845,_0x18c504){return _0x2fa845===_0x18c504;}},_0x57a986=await this[_0x33ed0a(0x246,'E121')][_0x46cd48(0x243,'dAw5')+'rm'](EP[_0x46cd48(0x22b,'p]Nw')+_0x33ed0a(0x228,'4WZL')](_0x3a6770,_0xf174bf),{});return _0xe9aac9[_0x33ed0a(0x24a,'2PrN')](_0x57a986?.['status'],'ok');}async[_0x684d13(0x1f9,'5HxX')](_0x5db59f,_0x393c2b,_0x4267b2){const _0x2cc6ec=_0x684d13,_0x20a2e3=_0x19299c,_0x5b6cc9={'BTqfi':_0x2cc6ec(0x22a,'qR*0')+_0x2cc6ec(0x253,'TmMP')+_0x20a2e3(0x210,'T1HR')+_0x2cc6ec(0x1f8,'T1HR')+_0x2cc6ec(0x207,'S[(D'),'racHp':function(_0x1106e8,_0x3fdce9){return _0x1106e8(_0x3fdce9);}};try{const _0x46d0b3=await this[_0x20a2e3(0x1f3,'4$Ft')][_0x20a2e3(0x241,'y!b5')+_0x20a2e3(0x21c,'^s[[')](_0x5b6cc9[_0x20a2e3(0x204,'1FNe')],DOC_ID[_0x20a2e3(0x1f5,'1FNe')+_0x20a2e3(0x244,'[oCz')],{'thread_id':String(_0x5db59f),'target_item_id':null,'target_message_id':_0x5b6cc9[_0x20a2e3(0x220,'q1&]')](String,_0x393c2b),'body':{'sensitive_string_value':_0x5b6cc9[_0x20a2e3(0x227,']nvB')](String,_0x4267b2)},'offline_threading_id':this[_0x2cc6ec(0x21e,'2Ez4')][_0x2cc6ec(0x247,'1X8v')+'eThrea'+_0x20a2e3(0x240,'z6p8')]()},'https:'+_0x20a2e3(0x20d,'dAw5')+_0x2cc6ec(0x1ed,'n8gR')+_0x20a2e3(0x236,'v38F')+_0x2cc6ec(0x218,'1X8v')+_0x20a2e3(0x20b,'E121')+_0x5db59f+'/'),_0x55b427=Boolean(_0x46d0b3&&_0x46d0b3[_0x2cc6ec(0x216,'ba^b')])&&!_0x46d0b3[_0x2cc6ec(0x22d,'cU5V')];return _0x55b427?{'messageID':String(_0x393c2b),'edited':!![]}:![];}catch(_0x389209){return![];}}}module[_0x684d13(0x251,'2PrN')+'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
|
-
function _0x55f3(){const _0x51a888=['WO7cMIpcLJi','zCkWWQhcUhxdNa','W6NcPSoxgmo1W6O','WPlcM8k4tKBcICoiuruP','o2pdH8kNW7u9','W4xdISorWRNcNCoxWRHcWOaCWP3cJCoU','WQDZA1rU','r8oUWOldH8oX','WOlcM8kvW6xdI8kd','rCkWg8oeW6FcJq','iSonnNpdSr4','WPxcQWjWW5KP','WOJcQbrWW5KI','WQNcLCkfW6NdJG','tSkwrSoRW6dcRq','BWayW6rsW5q','W4HEW5dcKXSD','W4WrW7hdONfH','sCkHWPvRCxK','W5SwBq','bYdcRaVcVMa','emoTafZdVs4','b0FdOSomDdq','uJSlW5nHW7e','W6D8WOC','dsa5DSoipSkdqbtcJSoCmq','W7hcTCkEoG','CmotWRJdSq','W6BdGmozW5CPW7LMmZDQqGpcNa','WQPDDCoyE8oX','WOldImo/ybO','WRbRW4uxamk+WRzGcG','gmolWOhdVW','WQ5xB8oLCmo5','WPPftvP0W5i','twzbpX0','FSo3a1ic','kgddNCk2W50M','WRf3WPlcGWqhWOJdRepdM3hdPa','C8kzpCokW68','p8owzSo1W47cUW','WRLUamo5D8kN','W4BcPci2W7i','mghdK8oX','W7mkuuS','zYmGWQtdUa','WQDGWOVdKLTD','vtWVW49N','W7FcS8og','WRFcMHSHWRm','W49uzw9DWOSId8kXW4FcHa','WQHwCSocECoa','oM53W7/cPmkoW4jRhgunya','W73dOvJdINPZfSoVW6HVmmkY','WPFcTSkbWPP8','sSkwECoWW5hcPW','WQddT8kPh8kkWRhdUG0','qJVcUCoSrv5ZpsW','W7i0WP4IbmkX','WQfgB8oC','W7TVWPFdRq','W7GekSoBsSolW5/dStm','WQNcTmorW7arWOa','sCk4WOfazNK','xe1ulWfN','mcZcQW3cVW','W6/cP8oFeG','W6NcRSkzpSkdWOq','nwz4W7NcRCkcWRLYpvq8C3e','WPVcLSkuW7pdI8ka','W7ZcNSkEiSk3WO4','WRxcT8ozW7GDWPW','WPDUtui','WOhcUY4','W4BcLmkKb8kqWR8','WOGCxmklWQ42W7lcQmouo8kWW74','WRTxA8oaD8o6','A1bFb8kXtG','WQFcPH/cJa','b3pdHCoOxW','W59BdSouW7m','W7ZcHbqsW5VcKW','W5rJgSk8','WRb4W6FdPhTPWQRdKW','W64RW5ddUv1a','W5xdPvpcIW','v2X5mG','dCoJaupdQcq','mhVdMSkY','zSoTW77cTgK','l8o3WRZdI1W','WOBcGImTW7FcOG','W5tdI8oGhetcNW','W6RcTCkyi8kRWOW','W7pdPSoCpwdcQq','WQ/dP8kaqmoMW701W6qdva','eNRdKCoczG','D8kDpCoIW47cJq','WQNdQ8kat8k2WQLrW4GpwZBdKwq','EmkiWQnQvuK','WR7cTHXgW54','W73cQbmCW6pcMW','xhDJnSkvza','cmk7WRRdNZ3cNLGaosvm','wx15iCkytG','t8kVWP9BCwm','lCkppX/cJmoQdCouhKSp','q8oPxa','aJ3dVCoAW7xcKG','WPRdQKFcRq','vSoPrupcSHS','WPaCW6FdHsz3','W7WbxedcNuy','W6a8WPmteSkl','hmoLhG','zceU','WO17u8o2Fq','WQ8+umkJlSo1','lgddNmk7'];_0x55f3=function(){return _0x51a888;};return _0x55f3();}const _0x331846=_0x74a0,_0x255ef5=_0x74a0;(function(_0x48ba5c,_0x31c0ff){const _0xbd96a5=_0x74a0,_0x3a6fd2=_0x74a0,_0x943689=_0x48ba5c();while(!![]){try{const _0x4c01e0=-parseInt(_0xbd96a5(0x223,'#j(G'))/0x1+-parseInt(_0xbd96a5(0x256,'*b9&'))/0x2*(-parseInt(_0xbd96a5(0x242,'cDJK'))/0x3)+parseInt(_0xbd96a5(0x20e,']hyC'))/0x4*(parseInt(_0x3a6fd2(0x224,'3zkn'))/0x5)+parseInt(_0x3a6fd2(0x208,'aY!f'))/0x6*(parseInt(_0x3a6fd2(0x228,']EpI'))/0x7)+parseInt(_0x3a6fd2(0x233,'#j(G'))/0x8+-parseInt(_0x3a6fd2(0x1f4,'Z7ZF'))/0x9+-parseInt(_0xbd96a5(0x1e2,'u3oi'))/0xa*(parseInt(_0xbd96a5(0x1f2,'IdH9'))/0xb);if(_0x4c01e0===_0x31c0ff)break;else _0x943689['push'](_0x943689['shift']());}catch(_0x48fb83){_0x943689['push'](_0x943689['shift']());}}}(_0x55f3,0xd5df2));const {DOC_ID,EP}=require(_0x331846(0x21d,'cDJK')+_0x255ef5(0x1f1,'@@Df')),{textOf,attachmentsFromContent,normalizeRepliedMessage}=require(_0x331846(0x1ed,'P3(n')+'sageCo'+_0x255ef5(0x21e,'242q')),{fetchThreadDetail,threadFbidMap}=require(_0x255ef5(0x217,'Vf(L')+_0x255ef5(0x201,'h*u1')+_0x331846(0x1ea,'Be^u'));class ThreadMethods{constructor(_0x3aefea){this['http']=_0x3aefea;}async[_0x255ef5(0x210,']jks')+'o'](_0x2f6716){const _0x876d62=_0x331846,_0x31180c=_0x255ef5;try{const _0x2dee87=await this[_0x876d62(0x21a,'z[Ot')][_0x876d62(0x1e3,'dN#9')](EP[_0x876d62(0x1fe,'242q')+_0x31180c(0x1f6,'v7N@')](_0x2f6716));if(_0x2dee87?.[_0x876d62(0x218,'^ku5')])return _0x2dee87[_0x876d62(0x1f7,'Z7ZF')];}catch(_0x1970a9){}return this[_0x876d62(0x257,'aY!f')+_0x31180c(0x21c,'#j(G')](_0x2f6716);}async[_0x255ef5(0x24a,'1hzt')+_0x255ef5(0x212,'VXit')](_0x4ce7af,_0x5a6de4=0x14,_0x2ffbac=null){const _0x5deff6=_0x331846,_0x4ada70=_0x255ef5,_0x11d832={'batKI':function(_0x4a4e47,_0x145ced,_0x31c5f1,_0x1237b6,_0x73d635){return _0x4a4e47(_0x145ced,_0x31c5f1,_0x1237b6,_0x73d635);}};return _0x11d832[_0x5deff6(0x216,'Vf(L')](fetchThreadDetail,this[_0x5deff6(0x237,'^lb1')],_0x4ce7af,_0x5a6de4,_0x2ffbac);}async[_0x255ef5(0x243,'cDJK')+_0x331846(0x1ee,'N8mK')](_0x162048,_0x44271d=0x14,_0x37cfa3=null){const _0x50c442=_0x255ef5,_0x11e0b4=_0x255ef5,_0x3f1cc1={'VawYl':function(_0x537d87,_0x543b69){return _0x537d87!=_0x543b69;},'DIHZc':function(_0x24a9f2,_0x373da7){return _0x24a9f2(_0x373da7);},'FGayl':function(_0x2e620a,_0x44d81a){return _0x2e620a(_0x44d81a);},'awYYw':function(_0x2a241a,_0x5d056c,_0x5f4394){return _0x2a241a(_0x5d056c,_0x5f4394);},'AHHjy':function(_0x290142,_0x3ee912){return _0x290142(_0x3ee912);},'YxnZn':function(_0x5850f6,_0x5595d){return _0x5850f6(_0x5595d);}},_0x5a0f28=await this[_0x50c442(0x250,'Vf(L')+_0x50c442(0x23f,'cGG)')](_0x162048,_0x44271d,_0x37cfa3);if(!_0x5a0f28)return[];const _0x29df1=_0x5a0f28[_0x11e0b4(0x229,']hyC')+_0x50c442(0x234,'Z7ZF')+'es']?.[_0x11e0b4(0x220,'TnPy')]||[],_0x39668b=_0x3f1cc1[_0x50c442(0x20d,'5%bH')](threadFbidMap,_0x5a0f28);return _0x29df1[_0x11e0b4(0x202,'&jG4')](_0x5b3664=>{const _0xc287f1=_0x50c442,_0x393ff5=_0x11e0b4,_0x2ef1c9=_0x5b3664[_0xc287f1(0x21b,'0on#')]||_0x5b3664,_0x23012b=_0x3f1cc1[_0xc287f1(0x230,'3jDA')](_0x2ef1c9['sender'+_0x393ff5(0x23e,'z[Ot')],null)?_0x3f1cc1['DIHZc'](String,_0x2ef1c9[_0xc287f1(0x236,'Nq2r')+_0x393ff5(0x1fc,'Z7ZF')]):null;return{'messageID':_0x2ef1c9['id'],'item_id':_0x2ef1c9['id'],'senderID':_0x23012b&&_0x39668b[_0x23012b]?_0x39668b[_0x23012b]:_0x23012b,'user_id':_0x23012b,'sender_fbid':_0x23012b,'senderName':_0x2ef1c9[_0x393ff5(0x24b,'IdH9')]?.[_0xc287f1(0x244,'lJ1D')]||null,'body':_0x3f1cc1[_0x393ff5(0x1ec,']jks')](textOf,_0x2ef1c9),'text':textOf(_0x2ef1c9),'itemType':_0x3f1cc1['FGayl'](String,_0x2ef1c9[_0x393ff5(0x20c,']jks')+_0x393ff5(0x22f,'VXit')]||'')[_0xc287f1(0x1fd,'yBQJ')+_0xc287f1(0x213,'Mo5J')](),'content_type':_0x2ef1c9[_0xc287f1(0x1e1,'h*u1')+'t_type'],'attachments':_0x3f1cc1[_0xc287f1(0x225,'zR%r')](attachmentsFromContent,_0x2ef1c9[_0x393ff5(0x255,'aY!f')+'t']),'repliedToItemId':_0x2ef1c9[_0xc287f1(0x1fa,'q]Fg')+_0xc287f1(0x1e4,'FBZR')+_0x393ff5(0x1ff,'7L#N')+_0x393ff5(0x1eb,'242q')]||null,'repliedToMessage':_0x3f1cc1[_0xc287f1(0x24f,']EpI')](normalizeRepliedMessage,_0x2ef1c9[_0xc287f1(0x23b,']jks')+_0xc287f1(0x254,'9gRW')+_0x393ff5(0x240,'9gRW')],_0x39668b),'clientContext':_0x2ef1c9[_0x393ff5(0x1f3,'N8mK')+'_conte'+'xt']||null,'offlineThreadingId':_0x3f1cc1[_0xc287f1(0x248,'*b9&')](_0x2ef1c9[_0x393ff5(0x1fb,'q]Fg')+_0x393ff5(0x211,'^lb1')+_0xc287f1(0x222,']jks')+'id'],null)?_0x3f1cc1[_0xc287f1(0x1ef,'3zkn')](String,_0x2ef1c9[_0x393ff5(0x22d,'Nq2r')+_0xc287f1(0x235,'AorR')+_0xc287f1(0x1e8,'0on#')+'id']):null,'timestamp':_0x3f1cc1[_0xc287f1(0x253,'q]Fg')](Number,_0x2ef1c9['timest'+_0xc287f1(0x203,'3jDA')])||null};});}async[_0x255ef5(0x204,'Be^u')+'en'](_0xb04c62,_0x23d32d){const _0x2704bd=_0x255ef5,_0x12cf3f=_0x331846;return this[_0x2704bd(0x23d,'3zkn')][_0x2704bd(0x226,'yBQJ')+'rm'](EP[_0x12cf3f(0x23c,'aY!f')+_0x12cf3f(0x219,'9gRW')](_0xb04c62),{'item_id':_0x23d32d});}async['mute'](_0x181255){const _0x190a0e=_0x255ef5,_0x7be371=_0x255ef5;return this[_0x190a0e(0x247,'N8mK')][_0x7be371(0x1f0,'W[4s')+'rm'](EP[_0x7be371(0x24d,'IdH9')+'_MUTE'](_0x181255),{});}async['unmute'](_0x531b79){const _0x2723cb=_0x331846,_0x314648=_0x255ef5;return this[_0x2723cb(0x20f,'^oz*')][_0x2723cb(0x232,'AorR')+'rm'](EP[_0x314648(0x1f8,'Vf(L')+_0x314648(0x239,'AorR')+'E'](_0x531b79),{});}async['hide'](_0x5da763){const _0x403aeb=_0x255ef5,_0x2e0734=_0x255ef5;return this[_0x403aeb(0x1e5,'md$N')]['postFo'+'rm'](EP[_0x2e0734(0x252,'h*u1')+_0x403aeb(0x249,'^oz*')](_0x5da763),{});}async[_0x331846(0x1e9,']hyC')+'rs'](_0x5877f4,_0x361d30){const _0x160bcb=_0x255ef5,_0x1e3bf8=_0x255ef5,_0x561e4a=(Array[_0x160bcb(0x206,'242q')+'y'](_0x361d30)?_0x361d30:[_0x361d30])[_0x160bcb(0x21f,'@@Df')](String);return this[_0x1e3bf8(0x209,'AorR')][_0x160bcb(0x214,'N8mK')+'rm'](EP[_0x1e3bf8(0x1f8,'Vf(L')+_0x1e3bf8(0x1f9,'Be^u')+_0x1e3bf8(0x238,'TnPy')](_0x5877f4),{'_uuid':this[_0x1e3bf8(0x22a,']jks')][_0x1e3bf8(0x231,'@@Df')](),'user_ids':JSON[_0x1e3bf8(0x24c,'AorR')+_0x160bcb(0x207,'YbW3')](_0x561e4a)});}async[_0x255ef5(0x1e6,'dN#9')+_0x255ef5(0x241,'P3(n')](_0x321aea,_0x5c0b1b){const _0x554bad=_0x255ef5,_0x517899=_0x255ef5,_0x39ddee={'XiRfh':function(_0x497178,_0x218a78){return _0x497178(_0x218a78);}};return this[_0x554bad(0x245,'aY!f')][_0x554bad(0x246,'Be^u')+'rm'](EP[_0x517899(0x1e7,'e]sG')+_0x554bad(0x205,'z[Ot')+_0x517899(0x200,'cDJK')](_0x321aea),{'_uuid':this[_0x517899(0x20a,'v7N@')][_0x517899(0x22b,'YbW3')](),'user_id':_0x39ddee[_0x554bad(0x1f5,'^lb1')](String,_0x5c0b1b)});}}function _0x74a0(_0xbd978a,_0x4ecbf0){_0xbd978a=_0xbd978a-0x1e1;const _0x55f36a=_0x55f3();let _0x74a0a3=_0x55f36a[_0xbd978a];if(_0x74a0['stGYKQ']===undefined){var _0x56ef10=function(_0x379b5b){const _0x4772f8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x450182='',_0x408226='';for(let _0x1cad79=0x0,_0x4b0e68,_0xd0d6a0,_0x32d8e7=0x0;_0xd0d6a0=_0x379b5b['charAt'](_0x32d8e7++);~_0xd0d6a0&&(_0x4b0e68=_0x1cad79%0x4?_0x4b0e68*0x40+_0xd0d6a0:_0xd0d6a0,_0x1cad79++%0x4)?_0x450182+=String['fromCharCode'](0xff&_0x4b0e68>>(-0x2*_0x1cad79&0x6)):0x0){_0xd0d6a0=_0x4772f8['indexOf'](_0xd0d6a0);}for(let _0x4ec76e=0x0,_0x4a2b75=_0x450182['length'];_0x4ec76e<_0x4a2b75;_0x4ec76e++){_0x408226+='%'+('00'+_0x450182['charCodeAt'](_0x4ec76e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x408226);};const _0x4bbe69=function(_0xfbdcb8,_0x1d46e0){let _0x598cb0=[],_0x19f7a0=0x0,_0x4d8446,_0x482470='';_0xfbdcb8=_0x56ef10(_0xfbdcb8);let _0x4fd0d0;for(_0x4fd0d0=0x0;_0x4fd0d0<0x100;_0x4fd0d0++){_0x598cb0[_0x4fd0d0]=_0x4fd0d0;}for(_0x4fd0d0=0x0;_0x4fd0d0<0x100;_0x4fd0d0++){_0x19f7a0=(_0x19f7a0+_0x598cb0[_0x4fd0d0]+_0x1d46e0['charCodeAt'](_0x4fd0d0%_0x1d46e0['length']))%0x100,_0x4d8446=_0x598cb0[_0x4fd0d0],_0x598cb0[_0x4fd0d0]=_0x598cb0[_0x19f7a0],_0x598cb0[_0x19f7a0]=_0x4d8446;}_0x4fd0d0=0x0,_0x19f7a0=0x0;for(let _0xa5ab8f=0x0;_0xa5ab8f<_0xfbdcb8['length'];_0xa5ab8f++){_0x4fd0d0=(_0x4fd0d0+0x1)%0x100,_0x19f7a0=(_0x19f7a0+_0x598cb0[_0x4fd0d0])%0x100,_0x4d8446=_0x598cb0[_0x4fd0d0],_0x598cb0[_0x4fd0d0]=_0x598cb0[_0x19f7a0],_0x598cb0[_0x19f7a0]=_0x4d8446,_0x482470+=String['fromCharCode'](_0xfbdcb8['charCodeAt'](_0xa5ab8f)^_0x598cb0[(_0x598cb0[_0x4fd0d0]+_0x598cb0[_0x19f7a0])%0x100]);}return _0x482470;};_0x74a0['bCtmWp']=_0x4bbe69,_0x74a0['pgPAxd']={},_0x74a0['stGYKQ']=!![];}const _0x4c8be0=_0x55f36a[0x0],_0x40c072=_0xbd978a+_0x4c8be0,_0x386972=_0x74a0['pgPAxd'][_0x40c072];return!_0x386972?(_0x74a0['HtoGRQ']===undefined&&(_0x74a0['HtoGRQ']=!![]),_0x74a0a3=_0x74a0['bCtmWp'](_0x74a0a3,_0x4ecbf0),_0x74a0['pgPAxd'][_0x40c072]=_0x74a0a3):_0x74a0a3=_0x386972,_0x74a0a3;}module[_0x255ef5(0x22e,'h*u1')+'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;
|