@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
|
@@ -4,4 +4,33 @@
|
|
|
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
|
+
// Attaches every src/api/<group>/<method>.js factory onto the client, keyed by
|
|
9
|
+
// the file name. A file exports `function (client) { return function ... }`, so
|
|
10
|
+
// adding a new method is just adding a file — no central list to edit.
|
|
11
|
+
|
|
12
|
+
const fs = require("fs");
|
|
13
|
+
const path = require("path");
|
|
14
|
+
|
|
15
|
+
const API_ROOT = path.join(__dirname, "..", "api");
|
|
16
|
+
|
|
17
|
+
function loadApiMethods(client) {
|
|
18
|
+
const loaded = [];
|
|
19
|
+
for (const group of fs.readdirSync(API_ROOT, { withFileTypes: true })) {
|
|
20
|
+
if (!group.isDirectory()) continue;
|
|
21
|
+
const groupDir = path.join(API_ROOT, group.name);
|
|
22
|
+
for (const entry of fs.readdirSync(groupDir, { withFileTypes: true })) {
|
|
23
|
+
if (!entry.isFile() || !entry.name.endsWith(".js")) continue;
|
|
24
|
+
const key = path.basename(entry.name, ".js");
|
|
25
|
+
if (typeof client[key] === "function") continue;
|
|
26
|
+
const mod = require(path.join(groupDir, entry.name));
|
|
27
|
+
const factory = typeof mod === "function" ? mod : mod && mod.default;
|
|
28
|
+
if (typeof factory !== "function") continue;
|
|
29
|
+
client[key] = factory(client);
|
|
30
|
+
loaded.push(key);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return loaded;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = loadApiMethods;
|
package/src/constants.js
CHANGED
|
@@ -4,4 +4,56 @@
|
|
|
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 _0xdc38(){const _0xf5704d=['WRuuWPZcQCkJfG','W4O1jSoBW7RdMq','WPhdG8oLuSo3DW','emo+kCkGuGG','W4FdKSokkmoRWQy','WQZcPSozsxm','WOfcWP/dOCoU','ErDXWRC9gaC','W4hdUmomDSkRWRm','WRBcHCk0WOOfea','WRenqSouWPVdKa','WPNcLmo0tCoSla','zSoMW4dcKgGD','WQxcMmo4f8ktW50','WRZcMmkYWQNcIMlcIa','W4XLW6P4hW','W7r4CCk7WOu1','WPOYW7uWq8oa','W5NcKSk4W4NcN3i','WP7cJSkLW53cIwC','E8kcW6ZdO8kcW5O','W4StWOHzWOeY','B8oeWR8UvCk9','WRJcNSo9W7dcLuy','sSkSW6hcJuhdKstdQW','W6COWOxdRSoIcW','z8o3W77cGxmy','awVcQWtdLJ0','cv3dSLFcPW7cNfGArmo3qf0','g0CqWPxcHmkW','uWO3qSk9oh3cMM0','phhdI2hdLZe','EYuPlbVcTG','W4pcG8kVW43dGW','W7SdWOFcRmk+wa','W44DWRzjlCkK','W6KgC8kfW4W','W77cSSo9qmooW4C','W5jPW7X/c2pcJb3cGSo2W4FcRq','WP7cJ8kIW5/cG2C','ydT1WO85nq','ax3cPXVdNcG','W5yTrsiHqSkHW6tdNSowmSkwBW','DSkVW7ZdSCkdW5S','WOGYWQTH','W5q3WRGJrmof','WPObWPTYdYa','WQTLW7y5W4RcOG','WRVdN8k/rmowWOldHSoqWRvNz8oj','qWhcLeFdS8k5','iCoeWRVcSSorWPhcTNhcPXZcP3TZ','v8oOjCkZuXG','W7lcVSkdfIJcRq','WP7dICk7W47cM2y','WQddHcvtieO','WP5vy8k9W6tdTa','W7DMbSowWOpcNbhdJIRdTtRcOCoM','WOzEW5O+wJ0','i8k3WQVdKtHm','W6lcN8oUe8kfW4a','W5yoW4BdVW','W77cQCkPW4ldQwu','W7z8WR3cUCkchYq','W4hcRCoqWR1xxq','W4uoWQbCzSk0','W6O2xCkuW5hdHW','WOKVWQaVwsa','vbJcOaxdU04','W4feeSoVwYO','W6VdJ8kws2RdTG','ChldINRcMtK','uq/cTWFdQK8','WOBdLSo+WOddLt3dTmk1smkKrW','WPRcKmouW6aztq','W7nznSoqWPJdGG','WQddLmoUW4Xwrs8DWQTeW47cKa','EvqkW7CjBq','buL0uSkshq','eWpcSqhdSK4','W58jWQa','WROkvenKWQm','W5/dPmorC8kWW68','tZldNaBcQXK','W4jJW6H0hCkgnmk9W7j7l28','rqBcRhCKWOO','mwvV','aHdcOgqLWPO','WOpcLGNcIConWRe','WOBcQ8kUWR5IvNup','WPzfW5/cUCkLtW','W5WliSksW6/dNW','vWKkW4/dGSk9','WOTGCSoeWQ/cHSozpmoCW6eAW60','c8oPpSoU','jeCfW7Gfhq','WRWtWPRcRSkOaq','W7S9WRb8WPZdSa','h0hdVIb2W4S','W5GfmCoTWONcTa','WOFdHSkvWRHmhq','g8oPyW','WQLQzmkYWOy6','W4tdK1xdISotWRG','W6ONr8kdW4BdLW','W4ftdSoTtZO','W7FcG8kYWObp','W5ZdO8oAC8kJWQC','xhRcSHRdNd8','aGFcRhmUW5y','dv/cMqxcVf8','W7FdOSkfgchdSq','wsVcVYrVWO0','iSoDqqNcRxq','W6PyWOBcRmkHdq','ztG4AcdcICkVWOu','W6adWPlcU8k/aW','WPG3WQG0bmoe','fM7cIv7dTf4','W5q0WQKVsSou','bmkxW6uvfCo4w0K','WOvaCmkOW4JcVa','guSgWOJdHCk1','pmkzW73dP8klW5O','gK3dSsfXW44','jmoNAe3dRwK','FM0OW4TRzYdcU8oDqspcHW','eLHEumkulq','W4jbD8k9W4NdTq','sbdcOgj9WO0','bwNdKuZdPCo6','dhKvW5pcHmkN','W5yuW4/cUCkXtW','e8oSW7ZcHNFdSW','WP1jW70nnq','W65TDCkJWODJ','hdBdTeFcIMC','W70AsufYW7O','ffiU','WRddTmkjcYddOq','WRldHCoSW4JdTse','W5auW4ldVW','WPC2oCkAW7JdKG','hmoPi8oU','y8kklKFdUYS','WO3dHCksWRXk','pmkuW6ddSmkdW4O','fgj3eSotnG','WOXayCkhW5RdPq','EZZcHN/cIW','ifu2mf3cRa','W5XhfmoVDa','W5jIWP0eW4nP','WOTOf3b9aG','l8kgW7zYa8oK','WQ9ei8osWOFdKa','WQ7cO8oushBcUW','W7nuk8ohWPddKG','W6ldHs8sjaS','z3RdJ2FdGIW','WOFdQf3dSSkDW4L5','D8kVW6ddPCkwW4e','WOzxW4y4wNe','WQL9AmkHWPe6','WP7cGSkPW5xcItW','W5TsW4jKxh0','W7COWPRcU8kPcW','ztLWmeldQmo8WPddOXLyeSke','WQLWDCk2WPKQ','WRldLCk+qSoyWOq','WOzdgCoJsI0','df8tWOtcLSkM','xLldJGZcR8oT'];_0xdc38=function(){return _0xf5704d;};return _0xdc38();}const _0x181221=_0xfbc1,_0x74693c=_0xfbc1;function _0xfbc1(_0x39f061,_0x587ac9){_0x39f061=_0x39f061-0x127;const _0xdc383=_0xdc38();let _0xfbc1d1=_0xdc383[_0x39f061];if(_0xfbc1['CkCVuO']===undefined){var _0xbc3d7=function(_0x334f5d){const _0x8e30b9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x33bf63='',_0x3c4184='';for(let _0x310778=0x0,_0x142eda,_0x101c88,_0x17adce=0x0;_0x101c88=_0x334f5d['charAt'](_0x17adce++);~_0x101c88&&(_0x142eda=_0x310778%0x4?_0x142eda*0x40+_0x101c88:_0x101c88,_0x310778++%0x4)?_0x33bf63+=String['fromCharCode'](0xff&_0x142eda>>(-0x2*_0x310778&0x6)):0x0){_0x101c88=_0x8e30b9['indexOf'](_0x101c88);}for(let _0x14a3a5=0x0,_0x4a4cec=_0x33bf63['length'];_0x14a3a5<_0x4a4cec;_0x14a3a5++){_0x3c4184+='%'+('00'+_0x33bf63['charCodeAt'](_0x14a3a5)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3c4184);};const _0x156737=function(_0x3456d6,_0x40b81a){let _0x3b8fa8=[],_0x4c40d1=0x0,_0x162063,_0x34580c='';_0x3456d6=_0xbc3d7(_0x3456d6);let _0x560b55;for(_0x560b55=0x0;_0x560b55<0x100;_0x560b55++){_0x3b8fa8[_0x560b55]=_0x560b55;}for(_0x560b55=0x0;_0x560b55<0x100;_0x560b55++){_0x4c40d1=(_0x4c40d1+_0x3b8fa8[_0x560b55]+_0x40b81a['charCodeAt'](_0x560b55%_0x40b81a['length']))%0x100,_0x162063=_0x3b8fa8[_0x560b55],_0x3b8fa8[_0x560b55]=_0x3b8fa8[_0x4c40d1],_0x3b8fa8[_0x4c40d1]=_0x162063;}_0x560b55=0x0,_0x4c40d1=0x0;for(let _0x4f1abb=0x0;_0x4f1abb<_0x3456d6['length'];_0x4f1abb++){_0x560b55=(_0x560b55+0x1)%0x100,_0x4c40d1=(_0x4c40d1+_0x3b8fa8[_0x560b55])%0x100,_0x162063=_0x3b8fa8[_0x560b55],_0x3b8fa8[_0x560b55]=_0x3b8fa8[_0x4c40d1],_0x3b8fa8[_0x4c40d1]=_0x162063,_0x34580c+=String['fromCharCode'](_0x3456d6['charCodeAt'](_0x4f1abb)^_0x3b8fa8[(_0x3b8fa8[_0x560b55]+_0x3b8fa8[_0x4c40d1])%0x100]);}return _0x34580c;};_0xfbc1['ISfvNO']=_0x156737,_0xfbc1['MuECPZ']={},_0xfbc1['CkCVuO']=!![];}const _0x18306e=_0xdc383[0x0],_0x2a3278=_0x39f061+_0x18306e,_0x248b43=_0xfbc1['MuECPZ'][_0x2a3278];return!_0x248b43?(_0xfbc1['AiLlDb']===undefined&&(_0xfbc1['AiLlDb']=!![]),_0xfbc1d1=_0xfbc1['ISfvNO'](_0xfbc1d1,_0x587ac9),_0xfbc1['MuECPZ'][_0x2a3278]=_0xfbc1d1):_0xfbc1d1=_0x248b43,_0xfbc1d1;}(function(_0xa78954,_0xaed3ef){const _0x29a28a=_0xfbc1,_0x56fca6=_0xfbc1,_0x3dfa24=_0xa78954();while(!![]){try{const _0x3a2fdf=parseInt(_0x29a28a(0x18f,'vwPv'))/0x1+-parseInt(_0x29a28a(0x14b,'e2tJ'))/0x2*(-parseInt(_0x56fca6(0x1c1,'e2tJ'))/0x3)+parseInt(_0x56fca6(0x1b6,'T[m5'))/0x4*(parseInt(_0x29a28a(0x13e,'T[m5'))/0x5)+-parseInt(_0x29a28a(0x182,'8lPI'))/0x6*(parseInt(_0x29a28a(0x16e,'onMO'))/0x7)+parseInt(_0x29a28a(0x162,')b#('))/0x8*(-parseInt(_0x56fca6(0x18c,'AJpW'))/0x9)+parseInt(_0x56fca6(0x16a,'(dd4'))/0xa+parseInt(_0x29a28a(0x17c,'dQ9#'))/0xb*(-parseInt(_0x56fca6(0x19c,'5o!m'))/0xc);if(_0x3a2fdf===_0xaed3ef)break;else _0x3dfa24['push'](_0x3dfa24['shift']());}catch(_0x27d96d){_0x3dfa24['push'](_0x3dfa24['shift']());}}}(_0xdc38,0x75bbb));const BASE=_0x181221(0x156,'AJpW')+_0x181221(0x179,'AJpW')+_0x181221(0x173,'CPf&')+_0x74693c(0x13c,'K55y')+_0x74693c(0x14f,'iYuk')+'v1',WEB=_0x181221(0x166,'Fk0U')+_0x181221(0x15b,'dh@r')+'instag'+_0x74693c(0x145,'Gv^p')+'m',GRAPHQL=WEB+('/api/g'+_0x74693c(0x154,'MJLx')),UPLOAD=WEB+(_0x74693c(0x1a2,'9X)[')+_0x74693c(0x18b,'(4X0')+_0x74693c(0x1b5,'Fk0U')+_0x181221(0x155,'@8SS')),DOC_ID={'TEXT_SEND':_0x74693c(0x19b,'rZTF')+_0x74693c(0x1bf,'kD93')+_0x74693c(0x153,'@8SS'),'MEDIA_SEND':_0x74693c(0x1a5,'kD93')+_0x181221(0x140,'9Uie')+'16264','EDIT_MESSAGE':_0x74693c(0x172,'K55y')+_0x74693c(0x196,'XB8]')+'54796','REACTION_SEND':_0x74693c(0x1a7,'XP07')+_0x74693c(0x1a6,'P8^p')+_0x181221(0x149,'mYv^'),'ANIMATED_MEDIA_SEND':_0x74693c(0x127,'1&z1')+_0x181221(0x133,'mYv^')+_0x74693c(0x128,'XP07'),'CUTOUT_STICKER_SEND':'266014'+_0x181221(0x17e,'J0[I')+_0x74693c(0x1c9,'D(9&'),'MARK_THREAD_READ':_0x181221(0x175,'F!nN')+_0x74693c(0x1cf,'Y^#7')+_0x181221(0x168,'A)8$'),'THREAD_DETAIL':_0x181221(0x1cb,'xNE6')+_0x181221(0x1a4,'CPf&')+_0x181221(0x14a,']J0d'),'INBOX':_0x74693c(0x131,'FiT5')+'663620'+_0x181221(0x12e,'vK0*')},EP={'CURRENT_USER':BASE+(_0x74693c(0x171,'@8SS')+'nts/cu'+_0x181221(0x190,'9X)[')+_0x74693c(0x1aa,'rZTF')+_0x181221(0x1c4,'kD93')+_0x74693c(0x193,'D(9&')),'INBOX':BASE+(_0x74693c(0x1ce,'mYv^')+_0x74693c(0x15d,'Fk0U')+_0x181221(0x1ad,'vwPv')),'BROADCAST_TEXT':BASE+(_0x74693c(0x1ce,'mYv^')+_0x74693c(0x12a,')b#(')+_0x181221(0x17f,'9Uie')+_0x74693c(0x1ac,']hoX')+_0x74693c(0x1b8,'@8SS')+'ext/'),'BROADCAST_LINK':BASE+(_0x74693c(0x185,'dQ9#')+_0x74693c(0x1b3,'kD93')+_0x181221(0x186,'(dd4')+_0x181221(0x1d1,'Gv^p')+_0x74693c(0x18a,'9bhm')+_0x74693c(0x1d0,']J0d')),'BROADCAST_REACTION':(_0x8e30b9,_0x33bf63)=>BASE+(_0x74693c(0x129,'1W]G')+_0x181221(0x12d,'T[m5')+_0x181221(0x1b2,'mYv^')+'/')+_0x8e30b9+(_0x181221(0x1be,'1W]G')+'/')+_0x33bf63+('/react'+_0x74693c(0x170,'(dd4')),'THREAD_INFO':_0x3c4184=>BASE+(_0x74693c(0x1a3,'Fk0U')+_0x181221(0x183,'XP07')+_0x74693c(0x1c8,'OP%v')+'/')+_0x3c4184+(_0x74693c(0x19d,']J0d')+'al_mes'+_0x74693c(0x17b,'P8^p')+_0x181221(0x191,')b#(')+_0x74693c(0x142,'vu!B')+'nseen&'+_0x74693c(0x195,'QR3c')+'20'),'THREAD_ITEMS':_0x310778=>BASE+(_0x74693c(0x143,'F!nN')+_0x181221(0x1c5,'F!nN')+_0x181221(0x184,'D(9&')+'/')+_0x310778+(_0x74693c(0x192,'(4X0')+'/'),'THREAD_SEEN':_0x142eda=>BASE+(_0x74693c(0x177,'2mCs')+_0x181221(0x189,'mYv^')+_0x181221(0x130,'onMO')+'/')+_0x142eda+(_0x181221(0x18e,'A)8$')+_0x181221(0x1b0,'kD93')),'THREAD_MUTE':_0x101c88=>BASE+(_0x74693c(0x15f,'xNE6')+_0x74693c(0x14e,'dQ9#')+'hreads'+'/')+_0x101c88+_0x181221(0x17d,'K55y'),'THREAD_UNMUTE':_0x17adce=>BASE+(_0x181221(0x14d,'vwPv')+_0x181221(0x1c6,'vu!B')+_0x181221(0x187,'(4X0')+'/')+_0x17adce+(_0x74693c(0x188,']hoX')+'e/'),'THREAD_HIDE':_0x14a3a5=>BASE+('/direc'+_0x181221(0x181,'Y^#7')+_0x74693c(0x130,'onMO')+'/')+_0x14a3a5+_0x74693c(0x157,'AJpW'),'THREAD_ADD_USER':_0x4a4cec=>BASE+(_0x181221(0x19a,'kD93')+'t_v2/t'+_0x74693c(0x1b2,'mYv^')+'/')+_0x4a4cec+('/add_u'+_0x74693c(0x1a1,'2mCs')),'THREAD_REMOVE_USER':_0x3456d6=>BASE+(_0x181221(0x194,'56d4')+_0x74693c(0x1c0,'1&z1')+_0x74693c(0x147,'2mCs')+'/')+_0x3456d6+(_0x74693c(0x16d,'xNE6')+_0x181221(0x16f,'1W]G')+'/'),'ITEM_DELETE':(_0x40b81a,_0x3b8fa8)=>BASE+(_0x74693c(0x16c,'e2tJ')+_0x181221(0x148,'QR3c')+_0x181221(0x198,'kD93')+'/')+_0x40b81a+(_0x74693c(0x13f,'MJLx')+'/')+_0x3b8fa8+(_0x181221(0x13b,'AJpW')+'e/'),'TYPING':_0x4c40d1=>BASE+('/direc'+_0x181221(0x12a,')b#(')+_0x74693c(0x198,'kD93')+'/')+_0x4c40d1+('/indic'+_0x181221(0x12b,'P8^p')+_0x181221(0x136,'9bhm')+'/'),'USER_INFO':_0x162063=>BASE+('/users'+'/')+_0x162063+_0x181221(0x16b,'AJpW'),'USER_BY_USERNAME':_0x34580c=>BASE+(_0x181221(0x1ab,'dQ9#')+'/')+_0x34580c+(_0x181221(0x151,'9Uie')+_0x74693c(0x1bd,'vu!B')+'o/'),'USER_SEARCH':(_0x560b55,_0x4f1abb)=>BASE+(_0x181221(0x1c3,'P8^p')+_0x181221(0x1a9,'MJLx')+_0x181221(0x12c,'9bhm'))+encodeURIComponent(_0x560b55)+(_0x74693c(0x144,'Fk0U')+'=')+_0x4f1abb,'RUPLOAD_PHOTO':_0x43a609=>_0x74693c(0x1bc,'P8^p')+_0x181221(0x19f,'vu!B')+_0x74693c(0x1b7,'Fk0U')+_0x181221(0x12f,'tYub')+_0x181221(0x14c,'QR3c')+_0x181221(0x138,'1W]G')+_0x74693c(0x180,']J0d')+_0x43a609,'RUPLOAD_VIDEO':_0x2edf67=>_0x181221(0x1cc,'56d4')+_0x181221(0x17a,'3N*e')+_0x74693c(0x132,'A)8$')+_0x74693c(0x135,'3N*e')+_0x181221(0x15a,'FiT5')+_0x181221(0x19e,'Gv^p')+_0x181221(0x1d2,'2mCs')+_0x2edf67,'RUPLOAD_AUDIO':_0x16ee90=>_0x74693c(0x1ca,'MJLx')+_0x181221(0x164,'T[m5')+_0x181221(0x15e,'J0[I')+_0x181221(0x178,'mYv^')+_0x74693c(0x1af,'xNE6')+_0x74693c(0x13d,'Fk0U')+_0x74693c(0x165,'AJpW')+_0x16ee90,'CONFIGURE_PHOTO':BASE+(_0x181221(0x13a,'MJLx')+_0x74693c(0x159,'tYub')+_0x74693c(0x141,']hoX')+_0x181221(0x163,'9bhm')+_0x74693c(0x167,'D(9&')+_0x181221(0x1c7,']J0d')+_0x74693c(0x1c2,')b#(')+_0x74693c(0x1cd,')b#(')),'CONFIGURE_VIDEO':BASE+(_0x74693c(0x139,'K55y')+_0x181221(0x169,'9Uie')+_0x181221(0x130,'onMO')+_0x181221(0x18d,'XP07')+_0x74693c(0x161,'vu!B')+_0x181221(0x1b9,'XB8]')+_0x74693c(0x150,'J0[I')+_0x74693c(0x199,'T[m5')),'CONFIGURE_VOICE':BASE+(_0x74693c(0x134,'A)8$')+_0x181221(0x1b1,'XB8]')+_0x74693c(0x158,'1W]G')+_0x181221(0x1ba,'@8SS')+'cast/c'+_0x181221(0x1ae,'QR3c')+_0x74693c(0x1b4,'1&z1')+_0x74693c(0x1a8,'2mCs'))};module[_0x181221(0x146,'iYuk')+'s']={'EP':EP,'DOC_ID':DOC_ID,'GRAPHQL':GRAPHQL,'UPLOAD':UPLOAD,'WEB':WEB};
|
|
7
|
+
|
|
8
|
+
const BASE = "https://www.instagram.com/api/v1";
|
|
9
|
+
const WEB = "https://www.instagram.com";
|
|
10
|
+
|
|
11
|
+
// Reverse-engineered from a live www.instagram.com session (Burp capture).
|
|
12
|
+
// The web DM client no longer uses the /api/v1/direct_v2/broadcast/* endpoints;
|
|
13
|
+
// it uploads media to /ajax/mercury/upload.php and then commits the send with a
|
|
14
|
+
// Relay GraphQL mutation. doc_id values are stable per friendly-name and were
|
|
15
|
+
// taken verbatim from the capture.
|
|
16
|
+
const GRAPHQL = `${WEB}/api/graphql`;
|
|
17
|
+
const UPLOAD = `${WEB}/ajax/mercury/upload.php`;
|
|
18
|
+
|
|
19
|
+
const DOC_ID = {
|
|
20
|
+
TEXT_SEND: "26911679871773184",
|
|
21
|
+
MEDIA_SEND: "25766288509716264",
|
|
22
|
+
EDIT_MESSAGE: "32480262318254796",
|
|
23
|
+
REACTION_SEND: "24374451552236906",
|
|
24
|
+
ANIMATED_MEDIA_SEND: "32089613413987432",
|
|
25
|
+
CUTOUT_STICKER_SEND: "26601474479505807",
|
|
26
|
+
MARK_THREAD_READ: "27399783383056109",
|
|
27
|
+
THREAD_DETAIL: "29619996517588618",
|
|
28
|
+
INBOX: "27909866362025854"
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const EP = {
|
|
32
|
+
CURRENT_USER: `${BASE}/accounts/current_user/?edit=true`,
|
|
33
|
+
INBOX: `${BASE}/direct_v2/inbox/`,
|
|
34
|
+
BROADCAST_TEXT: `${BASE}/direct_v2/threads/broadcast/text/`,
|
|
35
|
+
BROADCAST_LINK: `${BASE}/direct_v2/threads/broadcast/link/`,
|
|
36
|
+
BROADCAST_REACTION: (threadID, itemID) =>
|
|
37
|
+
`${BASE}/direct_v2/threads/${threadID}/items/${itemID}/reaction/`,
|
|
38
|
+
THREAD_INFO: (threadID) => `${BASE}/direct_v2/threads/${threadID}/?visual_message_return_type=unseen&limit=20`,
|
|
39
|
+
THREAD_ITEMS: (threadID) => `${BASE}/direct_v2/threads/${threadID}/items/`,
|
|
40
|
+
THREAD_SEEN: (threadID) => `${BASE}/direct_v2/threads/${threadID}/items/seen/`,
|
|
41
|
+
THREAD_MUTE: (threadID) => `${BASE}/direct_v2/threads/${threadID}/mute/`,
|
|
42
|
+
THREAD_UNMUTE: (threadID) => `${BASE}/direct_v2/threads/${threadID}/unmute/`,
|
|
43
|
+
THREAD_HIDE: (threadID) => `${BASE}/direct_v2/threads/${threadID}/hide/`,
|
|
44
|
+
THREAD_ADD_USER: (threadID) => `${BASE}/direct_v2/threads/${threadID}/add_user/`,
|
|
45
|
+
THREAD_REMOVE_USER: (threadID) => `${BASE}/direct_v2/threads/${threadID}/remove_user/`,
|
|
46
|
+
ITEM_DELETE: (threadID, itemID) => `${BASE}/direct_v2/threads/${threadID}/items/${itemID}/delete/`,
|
|
47
|
+
TYPING: (threadID) => `${BASE}/direct_v2/threads/${threadID}/indicate_activity/`,
|
|
48
|
+
USER_INFO: (userID) => `${BASE}/users/${userID}/info/`,
|
|
49
|
+
USER_BY_USERNAME: (username) => `${BASE}/users/${username}/usernameinfo/`,
|
|
50
|
+
USER_SEARCH: (query, count) => `${BASE}/users/search/?q=${encodeURIComponent(query)}&count=${count}`,
|
|
51
|
+
RUPLOAD_PHOTO: (uploadName) => `https://i.instagram.com/rupload_igphoto/${uploadName}`,
|
|
52
|
+
RUPLOAD_VIDEO: (uploadName) => `https://i.instagram.com/rupload_igvideo/${uploadName}`,
|
|
53
|
+
RUPLOAD_AUDIO: (uploadName) => `https://i.instagram.com/rupload_igdirect/${uploadName}`,
|
|
54
|
+
CONFIGURE_PHOTO: `${BASE}/direct_v2/threads/broadcast/configure_photo/`,
|
|
55
|
+
CONFIGURE_VIDEO: `${BASE}/direct_v2/threads/broadcast/configure_video/`,
|
|
56
|
+
CONFIGURE_VOICE: `${BASE}/direct_v2/threads/broadcast/configure_voice/`
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
module.exports = { EP, DOC_ID, GRAPHQL, UPLOAD, WEB };
|
package/src/cookies.js
CHANGED
|
@@ -4,4 +4,44 @@
|
|
|
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
|
+
function parseCookieString(raw) {
|
|
9
|
+
const jar = {};
|
|
10
|
+
raw
|
|
11
|
+
.split(";")
|
|
12
|
+
.map((c) => c.trim())
|
|
13
|
+
.filter(Boolean)
|
|
14
|
+
.forEach((pair) => {
|
|
15
|
+
const idx = pair.indexOf("=");
|
|
16
|
+
if (idx === -1) return;
|
|
17
|
+
jar[pair.slice(0, idx).trim()] = pair.slice(idx + 1).trim();
|
|
18
|
+
});
|
|
19
|
+
return jar;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function normalizeCookie(input) {
|
|
23
|
+
const trimmed = input.trim();
|
|
24
|
+
|
|
25
|
+
if (trimmed.startsWith("[") || trimmed.startsWith("{")) {
|
|
26
|
+
const parsed = JSON.parse(trimmed);
|
|
27
|
+
const arr = Array.isArray(parsed) ? parsed : [parsed];
|
|
28
|
+
const jar = {};
|
|
29
|
+
for (const c of arr) {
|
|
30
|
+
const key = c.key || c.name;
|
|
31
|
+
if (key && c.value) jar[key] = c.value;
|
|
32
|
+
}
|
|
33
|
+
return jar;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (trimmed.includes("=")) return parseCookieString(trimmed);
|
|
37
|
+
|
|
38
|
+
return { sessionid: trimmed.replace("sessionid=", "") };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function toHeader(jar) {
|
|
42
|
+
return Object.entries(jar)
|
|
43
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
44
|
+
.join("; ");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = { normalizeCookie, toHeader };
|
package/src/deviceIdentity.js
CHANGED
|
@@ -4,4 +4,34 @@
|
|
|
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 fs = require("fs");
|
|
9
|
+
const path = require("path");
|
|
10
|
+
const crypto = require("crypto");
|
|
11
|
+
|
|
12
|
+
function generateDeviceId() {
|
|
13
|
+
return `android-${crypto.createHash("md5").update(crypto.randomUUID()).digest("hex").slice(0, 16)}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function loadOrCreate(filePath, igDid) {
|
|
17
|
+
if (fs.existsSync(filePath)) {
|
|
18
|
+
try {
|
|
19
|
+
const saved = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
20
|
+
if (saved.deviceId && saved.uuid) return saved;
|
|
21
|
+
} catch (_) {}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const identity = {
|
|
25
|
+
deviceId: igDid ? `android-${igDid.replace(/-/g, "").toLowerCase().slice(0, 16)}` : generateDeviceId(),
|
|
26
|
+
uuid: igDid ? igDid.toLowerCase() : crypto.randomUUID()
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
31
|
+
fs.writeFileSync(filePath, JSON.stringify(identity, null, 2));
|
|
32
|
+
} catch (_) {}
|
|
33
|
+
|
|
34
|
+
return identity;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = { loadOrCreate, generateDeviceId };
|
|
@@ -4,4 +4,145 @@
|
|
|
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 _0x42dd24=_0x47ee,_0x351b19=_0x47ee;(function(_0x58304a,_0x101ea4){const _0x155c70=_0x47ee,_0x58cfee=_0x47ee,_0x32b052=_0x58304a();while(!![]){try{const _0x47cc38=parseInt(_0x155c70(0x28a,'ZFst'))/0x1*(parseInt(_0x58cfee(0x24d,'2O%q'))/0x2)+-parseInt(_0x58cfee(0x266,'#Tj('))/0x3+-parseInt(_0x155c70(0x24e,'WQ#Y'))/0x4+parseInt(_0x58cfee(0x25c,'3)Dj'))/0x5*(parseInt(_0x58cfee(0x289,'njXp'))/0x6)+-parseInt(_0x58cfee(0x222,'ZFst'))/0x7+parseInt(_0x155c70(0x27d,'njXp'))/0x8*(-parseInt(_0x155c70(0x25b,'GxSm'))/0x9)+-parseInt(_0x58cfee(0x258,'$SCh'))/0xa*(-parseInt(_0x58cfee(0x25e,'3di#'))/0xb);if(_0x47cc38===_0x101ea4)break;else _0x32b052['push'](_0x32b052['shift']());}catch(_0x835258){_0x32b052['push'](_0x32b052['shift']());}}}(_0x2ad3,0x26825));const USERNAME_RE=/@([A-Za-z0-9._]{1,30})/g;class EventNormalizer{constructor(_0xb85a9a){const _0x902e2=_0x47ee,_0x44dca1=_0x47ee;this[_0x902e2(0x282,'GxSm')]=_0xb85a9a,this['_reply'+_0x44dca1(0x203,'9&kn')]=new Map();}async['_findR'+'eply'](_0x50465b,_0x4b6232){const _0x228d85=_0x47ee,_0x111672=_0x47ee,_0x20b748={'ZGdkD':function(_0x463f10,_0x20da8c){return _0x463f10(_0x20da8c);},'yMekJ':function(_0xf50d9,_0x373306){return _0xf50d9!==_0x373306;},'KCOUr':'OViKK'};if(!_0x4b6232)return null;const _0x5653e=_0x50465b+':'+_0x4b6232;if(this[_0x228d85(0x224,'3)Dj')+_0x228d85(0x293,'&vO0')][_0x228d85(0x244,'Nefj')](_0x5653e))return this[_0x111672(0x23b,')z6D')+_0x228d85(0x1e1,'^9hJ')][_0x228d85(0x245,'$SCh')](_0x5653e);try{const _0x96ebf4=await this[_0x111672(0x214,'$9re')][_0x111672(0x297,'7uah')][_0x228d85(0x223,'njXp')+_0x228d85(0x1ef,'l%Yx')+_0x228d85(0x273,'2O%q')](_0x20b748[_0x228d85(0x20c,'L9Fj')](String,_0x50465b),0x32);for(const _0x51897e of _0x96ebf4){const _0x3bd4b2=_0x51897e[_0x228d85(0x287,'FLHJ')+'d']||_0x51897e[_0x228d85(0x256,'0&f$')+_0x111672(0x253,'ZFst')];if(_0x3bd4b2)this[_0x111672(0x1f9,'#pDI')+_0x111672(0x257,'$SCh')][_0x111672(0x249,'GxSm')](_0x50465b+':'+_0x3bd4b2,_0x51897e);}return this[_0x111672(0x29c,'9sR5')+_0x228d85(0x257,'$SCh')][_0x228d85(0x281,'L9Fj')](_0x5653e)||null;}catch(_0x30571e){if(_0x20b748[_0x111672(0x270,'9agz')](_0x20b748[_0x228d85(0x206,'eMUu')],_0x20b748[_0x228d85(0x1fb,'oT2P')]))this[_0x111672(0x221,'2O%q')][_0x228d85(0x1ee,'Ol*q')+'erThre'+'ad'](_0x29e54b[_0x111672(0x1f3,'Nefj')+_0x228d85(0x1fd,'2O%q')],_0x219bd8);else return null;}}async[_0x42dd24(0x243,'DYs[')+_0x42dd24(0x20d,'k5[@')+_0x351b19(0x225,'k5[@')](_0x28ecff){const _0x57c27d=_0x351b19,_0x576bc0=_0x42dd24,_0x1f35b6={'PKzya':function(_0xe0debb,_0x187468){return _0xe0debb(_0x187468);}};if(typeof this[_0x57c27d(0x277,'h*F#')]['_resol'+_0x576bc0(0x1ea,'7uah')+_0x576bc0(0x1f0,'WxxW')+_0x576bc0(0x290,'L9Fj')]===_0x576bc0(0x21a,'njXp')+'on')return this[_0x57c27d(0x231,'1sBK')][_0x576bc0(0x288,'XwOA')+_0x576bc0(0x286,'$9re')+'ionsOf'+_0x576bc0(0x210,'oLjn')](_0x28ecff);const _0x411f2b={},_0x388ca5=[...new Set((_0x28ecff[_0x576bc0(0x284,'i7WQ')](USERNAME_RE)||[])[_0x57c27d(0x24c,'SI!1')](_0x31f9d9=>_0x31f9d9[_0x576bc0(0x29a,'3di#')](0x1)))];for(const _0x250c87 of _0x388ca5){try{const _0x445787=await this[_0x576bc0(0x216,'HE9P')][_0x576bc0(0x29e,'^9hJ')][_0x57c27d(0x227,'9agz')+_0x576bc0(0x28c,'Eu9v')+'yUsern'+'ame'](_0x250c87);if(_0x445787)_0x411f2b[_0x1f35b6[_0x57c27d(0x2a0,'U5Hx')](String,_0x445787['pk']||_0x445787['id'])]=_0x445787[_0x57c27d(0x208,'3di#')+'me'];}catch(_0x4fa73d){}}return _0x411f2b;}async[_0x42dd24(0x1ed,'z5H!')+_0x42dd24(0x218,'2O%q')](_0x1476ec){const _0x48c0eb=_0x351b19,_0x22afb5=_0x42dd24,_0x3a3809={'AoOsn':_0x48c0eb(0x29b,'WQ#Y'),'vjciK':function(_0x168e94,_0x25001e){return _0x168e94(_0x25001e);},'XgyuT':function(_0x21d32f,_0x3de959){return _0x21d32f(_0x3de959);},'JWeql':function(_0x4efc2a,_0xad1934){return _0x4efc2a!==_0xad1934;},'myzUx':_0x48c0eb(0x21d,'1sBK')+'e','RydWx':function(_0x351b6d,_0x1cce1b){return _0x351b6d(_0x1cce1b);},'aGxfe':function(_0x38111e,_0x3a59ab){return _0x38111e===_0x3a59ab;},'NccZo':_0x22afb5(0x251,'$9re'),'kkqDo':function(_0x4cc9a8,_0x286003){return _0x4cc9a8!==_0x286003;},'aobNP':_0x22afb5(0x267,'oT2P'),'mvsIq':function(_0x2f772e,_0x53f210){return _0x2f772e(_0x53f210);},'vckfO':_0x22afb5(0x27e,'eMUu')+'on'};if(!_0x1476ec||_0x1476ec[_0x48c0eb(0x279,'oLjn')]===_0x3a3809[_0x48c0eb(0x205,'z5H!')]){if(!_0x1476ec)return null;return{'type':_0x3a3809[_0x22afb5(0x23e,'FCwU')],'threadID':_0x3a3809[_0x22afb5(0x202,'7uah')](String,_0x1476ec[_0x48c0eb(0x276,'oLjn')+'ID']),'senderID':_0x3a3809[_0x22afb5(0x283,'eMUu')](String,_0x1476ec['author']||''),'author':_0x1476ec[_0x48c0eb(0x29d,'oT2P')]?_0x3a3809[_0x22afb5(0x1e0,'1sBK')](String,_0x1476ec[_0x48c0eb(0x1f5,'E!&s')]):'','messageID':_0x3a3809[_0x48c0eb(0x1e6,'Eu9v')](String,_0x1476ec[_0x48c0eb(0x299,'B0ae')+_0x22afb5(0x24a,'oLjn')]),'body':null,'logMessageType':_0x1476ec[_0x48c0eb(0x26f,'oLjn')+_0x48c0eb(0x20f,'%Oc5')+'pe'],'logMessageData':_0x1476ec[_0x48c0eb(0x1fe,'njXp')+_0x48c0eb(0x23a,'HE9P')+'ta']||{},'isGroup':_0x1476ec[_0x22afb5(0x228,'Eu9v')+'p'],'participantIDs':(_0x1476ec[_0x48c0eb(0x237,'7uah')+_0x48c0eb(0x230,'3)Dj')+'Ds']||[])[_0x22afb5(0x296,'VryT')](String),'timestamp':_0x1476ec[_0x48c0eb(0x226,'1sBK')+_0x48c0eb(0x252,'3)Dj')]||Date[_0x48c0eb(0x236,'&vO0')](),'mentions':{}};}if(_0x3a3809[_0x48c0eb(0x1e2,'Ol*q')](_0x1476ec[_0x22afb5(0x274,'1sBK')],_0x3a3809[_0x48c0eb(0x26e,'i7WQ')]))return null;const _0x421828=_0x3a3809[_0x48c0eb(0x247,'0&f$')](String,_0x1476ec[_0x22afb5(0x1f1,'k5[@')+'ID']),_0x21f408=String(_0x1476ec[_0x22afb5(0x29f,'oT2P')+'ID']||''),_0x22c8b5=_0x1476ec[_0x22afb5(0x1eb,'i7WQ')]||'';let _0x24f743=_0x21f408;try{if(_0x3a3809[_0x22afb5(0x1e7,'WxxW')](_0x22afb5(0x254,'k5[@'),_0x3a3809[_0x22afb5(0x264,'k5[@')])){const _0xccd3fb=await this[_0x48c0eb(0x211,'E!&s')]['api'][_0x48c0eb(0x262,'B0ae')+_0x22afb5(0x23d,'WQ#Y')](_0x21f408);if(_0xccd3fb)_0x24f743=_0xccd3fb[_0x22afb5(0x24f,'3)Dj')+_0x48c0eb(0x1f8,'ZFst')]||_0xccd3fb[_0x22afb5(0x1f2,'#Tj(')+'me']||_0x21f408;}else{const _0x541344=_0x14d034['item_i'+'d']||_0x1f1791[_0x22afb5(0x280,'Ol*q')+'eID'];if(_0x541344)this[_0x48c0eb(0x1fc,'i7WQ')+_0x48c0eb(0x238,'9sR5')][_0x48c0eb(0x204,'3di#')](_0x5dd5e1+':'+_0x541344,_0x3f2827);}}catch(_0x2a6114){}const _0x1793fa={'type':_0x3a3809[_0x22afb5(0x250,'B0ae')],'threadID':_0x421828,'senderID':_0x21f408,'userID':_0x21f408,'messageID':_0x3a3809[_0x48c0eb(0x27f,'2O%q')](String,_0x1476ec[_0x48c0eb(0x1f3,'Nefj')+_0x22afb5(0x24b,'eMUu')]),'body':_0x22c8b5,'senderName':_0x24f743,'mentions':_0x22c8b5[_0x22afb5(0x1ff,'njXp')+'es']('@')?await this[_0x48c0eb(0x232,'Nefj')+_0x48c0eb(0x27a,'GxSm')+_0x22afb5(0x1e8,'XwOA')](_0x22c8b5):{},'attachments':(_0x1476ec[_0x48c0eb(0x22c,'l%Yx')+_0x48c0eb(0x23f,'h*F#')]||[])[_0x22afb5(0x22b,'GxSm')](_0x50b2b9=>({'type':_0x50b2b9[_0x22afb5(0x1fa,'oT2P')],'url':_0x50b2b9[_0x48c0eb(0x207,'#Tj(')],'filename':null,'caption':_0x50b2b9[_0x22afb5(0x263,'9&kn')+'n']||null})),'timestamp':_0x1476ec[_0x22afb5(0x26b,'%Oc5')+_0x22afb5(0x233,'@#wI')]},_0x2c863c=_0x1476ec[_0x22afb5(0x21e,'3GT&')+_0x22afb5(0x217,'9agz')+_0x22afb5(0x239,'i7WQ')]||null;if(_0x2c863c||_0x1476ec[_0x48c0eb(0x1f6,'WQ8x')+_0x48c0eb(0x1e5,'9agz')+_0x48c0eb(0x229,'i7WQ')]){const _0x5026ac=_0x2c863c||await this['_findR'+_0x22afb5(0x28e,'HE9P')](_0x421828,_0x1476ec[_0x48c0eb(0x291,'9sR5')+_0x22afb5(0x1e3,'ZFst')+_0x22afb5(0x28f,'DYs[')]);if(_0x5026ac){if(_0x3a3809[_0x22afb5(0x25a,'B0ae')](_0x3a3809[_0x48c0eb(0x2a2,'9agz')],_0x48c0eb(0x21f,'WQ8x')))this[_0x48c0eb(0x201,'9agz')]=_0x4a3337,this['_reply'+_0x48c0eb(0x292,'9agz')]=new _0x4b2933();else{const _0x57aa2f=_0x3a3809[_0x22afb5(0x20a,'#pDI')](String,_0x5026ac[_0x48c0eb(0x271,'U5Hx')+'ID']||_0x5026ac[_0x22afb5(0x26a,'DYs[')+'d']||_0x5026ac[_0x48c0eb(0x259,'GxSm')+'_fbid']||'');_0x1793fa[_0x48c0eb(0x234,'^9hJ')]=_0x48c0eb(0x215,'HE9P')+_0x22afb5(0x261,'7uah')+'y',_0x1793fa[_0x48c0eb(0x1ec,'$9re')+_0x22afb5(0x21c,'WQ#Y')]={'messageID':_0x3a3809[_0x48c0eb(0x220,'z5H!')](String,_0x5026ac[_0x48c0eb(0x256,'0&f$')+_0x48c0eb(0x21b,'9&kn')]||_0x5026ac['item_i'+'d']||''),'senderID':_0x57aa2f,'body':_0x5026ac[_0x48c0eb(0x2a1,'Eu9v')]||_0x5026ac[_0x48c0eb(0x219,'GxSm')]||'','attachments':(_0x5026ac[_0x22afb5(0x27b,'L9Fj')+'ments']||[])[_0x48c0eb(0x240,'L[LV')](_0x273518=>({'type':_0x273518[_0x22afb5(0x22a,'njXp')],'url':_0x273518[_0x48c0eb(0x27c,'FLHJ')],'filename':null,'caption':_0x273518[_0x22afb5(0x242,'$9re')+'n']||null}))},_0x1793fa['messag'+_0x48c0eb(0x213,'ZFst')][_0x22afb5(0x260,'B0ae')+_0x48c0eb(0x26d,'z5H!')]=_0x5026ac['sender'+'Name']||null;if(!_0x1793fa[_0x22afb5(0x294,'k5[@')+_0x48c0eb(0x269,'3di#')][_0x22afb5(0x248,'E!&s')+_0x48c0eb(0x200,'0&f$')])try{const _0x3d9834=await this['client'][_0x48c0eb(0x298,'#pDI')][_0x48c0eb(0x1e9,'ZFst')+_0x22afb5(0x241,'eMUu')](_0x57aa2f);_0x1793fa[_0x48c0eb(0x255,'^9hJ')+_0x22afb5(0x20e,'z5H!')]['sender'+_0x48c0eb(0x200,'0&f$')]=_0x3d9834?.[_0x22afb5(0x285,'#Tj(')+_0x48c0eb(0x28b,'ck!f')]||_0x3d9834?.['userna'+'me']||_0x57aa2f;}catch(_0x187579){_0x1793fa[_0x48c0eb(0x22f,')z6D')+_0x22afb5(0x25f,'@#wI')][_0x48c0eb(0x265,'SI!1')+_0x22afb5(0x275,'XwOA')]=_0x57aa2f;}}}}return _0x3a3809[_0x48c0eb(0x1e4,'%Oc5')](typeof this['client']['rememb'+_0x48c0eb(0x28d,'L9Fj')+'ad'],_0x3a3809['vckfO'])&&this[_0x48c0eb(0x22e,'U5Hx')][_0x22afb5(0x246,'#pDI')+_0x48c0eb(0x22d,'U5Hx')+'ad'](_0x1793fa[_0x48c0eb(0x25d,'ck!f')+_0x48c0eb(0x1f4,'1sBK')],_0x421828),_0x1793fa;}}function _0x47ee(_0x2de67e,_0x16717e){_0x2de67e=_0x2de67e-0x1e0;const _0x2ad350=_0x2ad3();let _0x47ee9a=_0x2ad350[_0x2de67e];if(_0x47ee['WTvXsO']===undefined){var _0x47cfd2=function(_0x184f3d){const _0xf5ad0f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x417c50='',_0x4a3337='';for(let _0x4b2933=0x0,_0x452404,_0xeae91c,_0x11aae8=0x0;_0xeae91c=_0x184f3d['charAt'](_0x11aae8++);~_0xeae91c&&(_0x452404=_0x4b2933%0x4?_0x452404*0x40+_0xeae91c:_0xeae91c,_0x4b2933++%0x4)?_0x417c50+=String['fromCharCode'](0xff&_0x452404>>(-0x2*_0x4b2933&0x6)):0x0){_0xeae91c=_0xf5ad0f['indexOf'](_0xeae91c);}for(let _0x2c4ccf=0x0,_0x14d034=_0x417c50['length'];_0x2c4ccf<_0x14d034;_0x2c4ccf++){_0x4a3337+='%'+('00'+_0x417c50['charCodeAt'](_0x2c4ccf)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4a3337);};const _0x1d331d=function(_0x1f1791,_0x5dd5e1){let _0x3f2827=[],_0x14e766=0x0,_0x46dce6,_0x17f484='';_0x1f1791=_0x47cfd2(_0x1f1791);let _0x2a600d;for(_0x2a600d=0x0;_0x2a600d<0x100;_0x2a600d++){_0x3f2827[_0x2a600d]=_0x2a600d;}for(_0x2a600d=0x0;_0x2a600d<0x100;_0x2a600d++){_0x14e766=(_0x14e766+_0x3f2827[_0x2a600d]+_0x5dd5e1['charCodeAt'](_0x2a600d%_0x5dd5e1['length']))%0x100,_0x46dce6=_0x3f2827[_0x2a600d],_0x3f2827[_0x2a600d]=_0x3f2827[_0x14e766],_0x3f2827[_0x14e766]=_0x46dce6;}_0x2a600d=0x0,_0x14e766=0x0;for(let _0x390d6e=0x0;_0x390d6e<_0x1f1791['length'];_0x390d6e++){_0x2a600d=(_0x2a600d+0x1)%0x100,_0x14e766=(_0x14e766+_0x3f2827[_0x2a600d])%0x100,_0x46dce6=_0x3f2827[_0x2a600d],_0x3f2827[_0x2a600d]=_0x3f2827[_0x14e766],_0x3f2827[_0x14e766]=_0x46dce6,_0x17f484+=String['fromCharCode'](_0x1f1791['charCodeAt'](_0x390d6e)^_0x3f2827[(_0x3f2827[_0x2a600d]+_0x3f2827[_0x14e766])%0x100]);}return _0x17f484;};_0x47ee['UHqAXx']=_0x1d331d,_0x47ee['OPZXEt']={},_0x47ee['WTvXsO']=!![];}const _0x551579=_0x2ad350[0x0],_0x3cd9f3=_0x2de67e+_0x551579,_0x33b57f=_0x47ee['OPZXEt'][_0x3cd9f3];return!_0x33b57f?(_0x47ee['CjfNgT']===undefined&&(_0x47ee['CjfNgT']=!![]),_0x47ee9a=_0x47ee['UHqAXx'](_0x47ee9a,_0x16717e),_0x47ee['OPZXEt'][_0x3cd9f3]=_0x47ee9a):_0x47ee9a=_0x33b57f,_0x47ee9a;}function _0x2ad3(){const _0x46340b=['WRPoxW','cSoMmq','W7SxW4u','AmoTW5OcWQOt','WR9Qw8opW5m','W6FdUCknW5tcGq','WQnAdmoVc2G','WRZcV8k0nXBdIW','W6ygaq','WQ7cR8kUoXZdIW','bhfqlue','WOhdTwKR','oCo3WReDW50','WODlESo2W58','W4qxcXxdTG','WQpcM8oJcmow','WRWbwJ4aza','W5OBueKH','pmomWRWAW7Ky','WPxdSg47W6C','W47dTLFcK8o3','WO8ciCoC','WR8Wqsihza','hCoZfqhdHmk4','W5xdO0vr','W50HWP3dKmo+dG','ugdcJColW6XQ','WPVcQCoRhmoxga','gmoTn29LeG','W4BdNKhcHSoDta','WPWdW5ieWQby','E8kxDwzrWO8','fN47bIRdIq','WRPLrW','WPCnWQmOeCkT','ecjQkSk+WPu','WP7cHb7dHCo6wbHyW7qs','WRK4ua','W4uvW4NcR8oYcq','WQNcS8kWoG','WPBcICkpcGS','W6JdVKryWRf5','C8kjvG','WRnOzZ8EEG','WRzPyX4oBq','W69UWQFdLa','o8o0WRO2W6mj','hCo8oW3dOq','WQFdGIj9W68','WR9JrG','F2dcSmovW6m','WRtcSCk4WO3dMG','E8kwFa','WRL1v8oEW5Gq','C8k4ySk1WOD2','W7CrW5/cLSoV','W6awfJT1z3/dT8oFWPFdMG','qazWsvK','WP4oW60eWQ9i','w13cMSowW6f/','W4G9t0OqW4K','W4/dGGqsWPC','WPuuWR4LemkR','nSo0WQGEW5T3emkDsmoTpW','WR0huaCyEa','W5mOWOFdHSoXhq','ihbCqd0z','lNLgvJik','pmomWRWEW6Go','F8k6DW','C8kPW6HE','WRLYBHepya','WOhdQGu','W6FdNCknW4RcMwi','WRjjCmoWW6Oq','btFdHatdPIK','cb19dSkC','BhBcM8oXW7u','DCkSE8k/WPT2','W6LLaevmnfrHWRyYWOBdRwe','WRHIDcytEW','EHZdIHZcISoi','WOeeW44s','WQTfBSoMW7Gd','p8o9WQCgW74y','WORdQuOGW4pcLa','W5RdHuu','WQT+CbC','ASkTW6a','hmo4j0zVcq','muH+pfjk','n1zdmu5B','aXddS1nQWQS','tb7dJGlcKSo4','WRXaASoMW6ud','jgKTbItdGG','W5/cHNq','W7mpgbG','q2tcGqxdMYL9WQ1F','W7H0WOu','g8o3kHddG8kV','WR9jcSo3aG','W4tdRuzn','pNrivHGF','mqFdPvbNWRu','n8oXbstdS8olvW','W7ddHSkgW5ZcMG','uGVcPSkuWQ4','AmoCksBdQW','WOrEWRG','WO3cU8kzWR7dHW','W5mLWP7dL8o2bG','D2P0creQ','e3O7','WRldJdK','W6GcW4hcUSoZeG','W7n2WQ7dPSok','WOuDWRKKg8kT','DmkPW6q','W4ZdPYK','WPRcU8kZ','qSovWPW','jmkiumkSWP5MWPu','WRVcUmoDWO/dHINdSg1QWPOXda','qXVdGWdcUCoF','AmoXW5mKWRm','W74sWRVdGCow','rapdNW','WR0CCq','WQy9W7udWOG','W6OtgW7dSSop','W4XQWRNdGSotW6S','WPBdIc4wyq','W6tcNhXoBmo6W6xdJ8kKBG','DmkPW75oWOHJ','BSoJW5G1WQq','nCo4WQCEW5X7lSkcB8osla','evJcMGhcSSouW5/cLCkx','t2tdTcWVsW','W7GXamkFWOi+W49VWRtdK2i','W5VcUwflsMS','DSoTW4CvWQ4g','dSojkGhdMSkG','ySoTW50KWRGr','WOFdGJfHW6pdTa','WQyiW4m7WQ4','xmorWOj+W4W1','omoxkcygW5S4wCkzWOlcQwW','WRFcKmkNfZi','WPy7W77dLSoDW7yaiCog','WQLuv8oCW5Oi','xwT0cceV','W481ruO3W4q','lNyMesNdVhhcVeTSrW','Cg7cKSod','W5RdTvT9WQu','W4xdGqOXWPFdGW','iCovWRy4W4C','j19emevD','hCkaW5SUWPGTW5xdPSkDw8kG','ySkVymkJ','WQTvC8oM','WQGmiSok','W53dHH8zWPpdLa','zSovlJFdTSoB','W49pW6j1tCoTW4uFW5islCkX','W53dLX0z','CCkPW51pWOnL','EZvGq37dMW','W6GCbq','W6GZnbuuC8o4WP7dMW','WPNcH8kzWRVdNca','tSkNA8kVWQe','WOtcQCo1cSoBhq','FsrG','zmkGW7LpWOnL','WONcMmkuWRhdOW','W5RdRvvlWRu','AmkrFhHGWOa','W4yHWQpdHSoXhq','W7qAdd1FoG','WRKFkSoCk8oS','W64/oeznB8o0WRJdPmkeW48','W69SdernvZj0WQuzWOy','q2ZdOG','WPhdK2m0W4pcOW','FZnasM/dLG','kgvdsG','rvf1','Fc19thG','WO5ngCoZdNq','g8o5WRa7W6G','W5v6WPhdICkV','WOuoW5msWQbB','W6KFo8kXWRjcW5xcVCkvWQGqcW'];_0x2ad3=function(){return _0x46340b;};return _0x2ad3();}module[_0x351b19(0x209,'2O%q')+'s']=EventNormalizer;
|
|
7
|
+
|
|
8
|
+
// Turns a raw Instagram inbox event into the FCA / GoatBot-Pro event shape that
|
|
9
|
+
// commands expect: senderID, threadID, messageID, body, mentions, messageReply,
|
|
10
|
+
// type, attachments, senderName.
|
|
11
|
+
|
|
12
|
+
const USERNAME_RE = /@([A-Za-z0-9._]{1,30})/g;
|
|
13
|
+
|
|
14
|
+
class EventNormalizer {
|
|
15
|
+
constructor(client) {
|
|
16
|
+
this.client = client;
|
|
17
|
+
this._replyCache = new Map(); // threadID -> { itemId: item }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async _findReply(threadID, itemID) {
|
|
21
|
+
if (!itemID) return null;
|
|
22
|
+
const key = `${threadID}:${itemID}`;
|
|
23
|
+
if (this._replyCache.has(key)) return this._replyCache.get(key);
|
|
24
|
+
try {
|
|
25
|
+
const items = await this.client.api.getThreadHistory(String(threadID), 50);
|
|
26
|
+
for (const item of items) {
|
|
27
|
+
const id = item.item_id || item.messageID;
|
|
28
|
+
if (id) this._replyCache.set(`${threadID}:${id}`, item);
|
|
29
|
+
}
|
|
30
|
+
return this._replyCache.get(key) || null;
|
|
31
|
+
} catch (_) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Resolves @username mentions to a { userID: name } map. Instagram text
|
|
37
|
+
// messages carry no structured mention list, and username lookups rate-limit
|
|
38
|
+
// (429) for web sessions, so resolve against the users the client already
|
|
39
|
+
// learned from the inbox / thread views.
|
|
40
|
+
async _resolveMentions(body) {
|
|
41
|
+
if (typeof this.client._resolveMentionsOffline === "function") {
|
|
42
|
+
return this.client._resolveMentionsOffline(body);
|
|
43
|
+
}
|
|
44
|
+
const mentions = {};
|
|
45
|
+
const names = [...new Set((body.match(USERNAME_RE) || []).map((m) => m.slice(1)))];
|
|
46
|
+
for (const username of names) {
|
|
47
|
+
try {
|
|
48
|
+
const user = await this.client.api.getUserInfoByUsername(username);
|
|
49
|
+
if (user) mentions[String(user.pk || user.id)] = user.username;
|
|
50
|
+
} catch (_) {}
|
|
51
|
+
}
|
|
52
|
+
return mentions;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async normalize(raw) {
|
|
56
|
+
// Instagram system activity (member added/removed, name/image change) is
|
|
57
|
+
// synthesized by the inbox poller as an already-shaped "event" — GoatBot's
|
|
58
|
+
// handlerEvent/onEvent dispatch on event.type === "event".
|
|
59
|
+
if (!raw || raw.type === "event") {
|
|
60
|
+
if (!raw) return null;
|
|
61
|
+
return {
|
|
62
|
+
type: "event",
|
|
63
|
+
threadID: String(raw.threadID),
|
|
64
|
+
senderID: String(raw.author || ""),
|
|
65
|
+
author: raw.author ? String(raw.author) : "",
|
|
66
|
+
messageID: String(raw.messageID),
|
|
67
|
+
body: null,
|
|
68
|
+
logMessageType: raw.logMessageType,
|
|
69
|
+
logMessageData: raw.logMessageData || {},
|
|
70
|
+
isGroup: raw.isGroup,
|
|
71
|
+
participantIDs: (raw.participantIDs || []).map(String),
|
|
72
|
+
timestamp: raw.timestamp || Date.now(),
|
|
73
|
+
mentions: {}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (raw.type !== "message") return null;
|
|
77
|
+
|
|
78
|
+
const threadID = String(raw.threadID);
|
|
79
|
+
const senderID = String(raw.senderID || "");
|
|
80
|
+
const body = raw.body || "";
|
|
81
|
+
|
|
82
|
+
let senderName = senderID;
|
|
83
|
+
try {
|
|
84
|
+
const u = await this.client.api.getUserInfo(senderID);
|
|
85
|
+
if (u) senderName = u.full_name || u.username || senderID;
|
|
86
|
+
} catch (_) {}
|
|
87
|
+
|
|
88
|
+
const event = {
|
|
89
|
+
type: "message",
|
|
90
|
+
threadID,
|
|
91
|
+
senderID,
|
|
92
|
+
userID: senderID,
|
|
93
|
+
messageID: String(raw.messageID),
|
|
94
|
+
body,
|
|
95
|
+
senderName,
|
|
96
|
+
mentions: body.includes("@") ? await this._resolveMentions(body) : {},
|
|
97
|
+
attachments: (raw.attachments || []).map((a) => ({
|
|
98
|
+
type: a.type,
|
|
99
|
+
url: a.url,
|
|
100
|
+
filename: null,
|
|
101
|
+
caption: a.caption || null
|
|
102
|
+
})),
|
|
103
|
+
timestamp: raw.timestamp
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
// Reply context. The client already resolves the replied-to message from the
|
|
107
|
+
// thread-detail query (raw.repliedToMessage); fall back to a history lookup
|
|
108
|
+
// only when it is absent.
|
|
109
|
+
const replied = raw.repliedToMessage || null;
|
|
110
|
+
if (replied || raw.repliedToItemId) {
|
|
111
|
+
const reply = replied || (await this._findReply(threadID, raw.repliedToItemId));
|
|
112
|
+
if (reply) {
|
|
113
|
+
const senderId = String(reply.senderID || reply.user_id || reply.sender_fbid || "");
|
|
114
|
+
event.type = "message_reply";
|
|
115
|
+
event.messageReply = {
|
|
116
|
+
messageID: String(reply.messageID || reply.item_id || ""),
|
|
117
|
+
senderID: senderId,
|
|
118
|
+
body: reply.body || reply.text || "",
|
|
119
|
+
attachments: (reply.attachments || []).map((a) => ({
|
|
120
|
+
type: a.type,
|
|
121
|
+
url: a.url,
|
|
122
|
+
filename: null,
|
|
123
|
+
caption: a.caption || null
|
|
124
|
+
}))
|
|
125
|
+
};
|
|
126
|
+
event.messageReply.senderName = reply.senderName || null;
|
|
127
|
+
if (!event.messageReply.senderName) {
|
|
128
|
+
try {
|
|
129
|
+
const u = await this.client.api.getUserInfo(senderId);
|
|
130
|
+
event.messageReply.senderName = u?.full_name || u?.username || senderId;
|
|
131
|
+
} catch (_) {
|
|
132
|
+
event.messageReply.senderName = senderId;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Commands react to the inbound message by id (setMessageReaction), so the
|
|
139
|
+
// client must know which thread it belongs to.
|
|
140
|
+
if (typeof this.client.rememberThread === "function") {
|
|
141
|
+
this.client.rememberThread(event.messageID, threadID);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return event;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
module.exports = EventNormalizer;
|