maris 0.0.1-security → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of maris might be problematic. Click here for more details.
- package/.editorconfig +12 -0
- package/.gitattributes +2 -0
- package/Extra/Database/index.js +469 -0
- package/Extra/ExtraAddons.js +82 -0
- package/Extra/ExtraFindUID.js +62 -0
- package/Extra/ExtraGetThread.js +340 -0
- package/Extra/ExtraScreenShot.js +430 -0
- package/Extra/ExtraUptimeRobot.js +38 -0
- package/Extra/Html/Classic/script.js +119 -0
- package/Extra/Html/Classic/style.css +8 -0
- package/Extra/Security/Index.js +173 -0
- package/Extra/Security/Step_1.js +6 -0
- package/Extra/Security/Step_2.js +22 -0
- package/Extra/Security/Step_3.js +22 -0
- package/Extra/Src/Change_Environment.js +24 -0
- package/Extra/Src/Check_Update.js +67 -0
- package/Extra/Src/History.js +115 -0
- package/Extra/Src/Instant_Update.js +65 -0
- package/Extra/Src/Last-Run.js +65 -0
- package/Extra/Src/Premium.js +81 -0
- package/Extra/Src/Release_Memory.js +41 -0
- package/Extra/Src/Websocket.js +213 -0
- package/Extra/Src/image/checkmate.jpg +0 -0
- package/Extra/Src/uuid.js +137 -0
- package/FastConfigFca.json +39 -0
- package/Func/AcceptAgreement.js +31 -0
- package/Func/ClearCache.js +64 -0
- package/Func/ReportV1.js +54 -0
- package/LICENSE +21 -0
- package/Language/index.json +216 -0
- package/Main.js +1192 -0
- package/README.md +140 -5
- package/SECURITY.md +18 -0
- package/broadcast.js +40 -0
- package/index.js +383 -0
- package/logger.js +66 -0
- package/package.json +95 -3
- package/src/Dev_Horizon_Data.js +125 -0
- package/src/Premium.js +25 -0
- package/src/Screenshot.js +83 -0
- package/src/addExternalModule.js +16 -0
- package/src/addUserToGroup.js +79 -0
- package/src/changeAdminStatus.js +79 -0
- package/src/changeArchivedStatus.js +41 -0
- package/src/changeAvt.js +85 -0
- package/src/changeBio.js +65 -0
- package/src/changeBlockedStatus.js +36 -0
- package/src/changeGroupImage.js +106 -0
- package/src/changeNickname.js +45 -0
- package/src/changeThreadColor.js +62 -0
- package/src/changeThreadEmoji.js +42 -0
- package/src/createNewGroup.js +70 -0
- package/src/createPoll.js +60 -0
- package/src/deleteMessage.js +45 -0
- package/src/deleteThread.js +43 -0
- package/src/forwardAttachment.js +48 -0
- package/src/getAccessToken.js +28 -0
- package/src/getCurrentUserID.js +7 -0
- package/src/getEmojiUrl.js +27 -0
- package/src/getFriendsList.js +73 -0
- package/src/getMessage.js +80 -0
- package/src/getThreadHistory.js +537 -0
- package/src/getThreadInfo.js +425 -0
- package/src/getThreadList.js +213 -0
- package/src/getThreadMain.js +220 -0
- package/src/getThreadPictures.js +59 -0
- package/src/getUID.js +59 -0
- package/src/getUserID.js +62 -0
- package/src/getUserInfo.js +113 -0
- package/src/getUserInfoMain.js +65 -0
- package/src/getUserInfoV2.js +32 -0
- package/src/getUserInfoV3.js +63 -0
- package/src/getUserInfoV4.js +55 -0
- package/src/getUserInfoV5.js +61 -0
- package/src/handleFriendRequest.js +46 -0
- package/src/handleMessageRequest.js +49 -0
- package/src/httpGet.js +49 -0
- package/src/httpPost.js +48 -0
- package/src/httpPostFormData.js +41 -0
- package/src/listenMqtt.js +787 -0
- package/src/logout.js +68 -0
- package/src/markAsDelivered.js +48 -0
- package/src/markAsRead.js +70 -0
- package/src/markAsReadAll.js +43 -0
- package/src/markAsSeen.js +51 -0
- package/src/muteThread.js +47 -0
- package/src/removeUserFromGroup.js +49 -0
- package/src/resolvePhotoUrl.js +37 -0
- package/src/searchForThread.js +43 -0
- package/src/sendMessage.js +379 -0
- package/src/sendTypingIndicator.js +80 -0
- package/src/setMessageReaction.js +109 -0
- package/src/setPostReaction.js +102 -0
- package/src/setTitle.js +74 -0
- package/src/threadColors.js +39 -0
- package/src/unfriend.js +43 -0
- package/src/unsendMessage.js +40 -0
- package/test/Data_Vtuan/A_README.md +1 -0
- package/test/Data_Vtuan/Database.db +0 -0
- package/test/Database_Test.js +4 -0
- package/test/Db2.js +530 -0
- package/test/data/shareAttach.js +146 -0
- package/test/data/something.mov +0 -0
- package/test/data/test.png +0 -0
- package/test/data/test.txt +7 -0
- package/test/env/.env +0 -0
- package/test/example-config.json +18 -0
- package/test/example-db.db +0 -0
- package/test/memoryleak.js +18 -0
- package/test/test-page.js +140 -0
- package/test/test.js +385 -0
- package/test/testv2.js +18 -0
- package/utils.js +1684 -0
package/.editorconfig
ADDED
package/.gitattributes
ADDED
@@ -0,0 +1,469 @@
|
|
1
|
+
/* eslint-disable no-self-assign */
|
2
|
+
/* eslint-disable linebreak-style */
|
3
|
+
const get = require('lodash/get');
|
4
|
+
const set = require('lodash/set');
|
5
|
+
const BetterDB = require("better-sqlite3");
|
6
|
+
const fs = require('fs-extra');
|
7
|
+
const request = require('request');
|
8
|
+
const deasync = require('deasync');
|
9
|
+
|
10
|
+
if (!fs.existsSync(process.cwd() + '/Data_Vtuan')) {
|
11
|
+
fs.mkdirSync(process.cwd() + '/Data_Vtuan');
|
12
|
+
fs.writeFileSync(process.cwd() + '/Data_Vtuan/A_README.md', 'This folder is used by ChernobyL(NANI =)) ) to store data. Do not delete this folder or any of the files in it.', 'utf8');
|
13
|
+
}
|
14
|
+
var db = new BetterDB(process.cwd() + "/Data_Vtuan/SyntheticDatabase.sqlite");
|
15
|
+
|
16
|
+
function Lset(key, value) {
|
17
|
+
if (!key)
|
18
|
+
throw new TypeError(
|
19
|
+
"No key specified."
|
20
|
+
);
|
21
|
+
return arbitrate("set",{
|
22
|
+
stringify: false,
|
23
|
+
id: key,
|
24
|
+
data: value,
|
25
|
+
ops: {},
|
26
|
+
});
|
27
|
+
}
|
28
|
+
|
29
|
+
function Lget(key) {
|
30
|
+
if (!key)
|
31
|
+
throw new TypeError(
|
32
|
+
"No key specified."
|
33
|
+
);
|
34
|
+
return arbitrate("fetch", { id: key, ops: {} || {} });
|
35
|
+
}
|
36
|
+
|
37
|
+
function Lhas(key) {
|
38
|
+
if (!key)
|
39
|
+
throw new TypeError(
|
40
|
+
"No key specified."
|
41
|
+
);
|
42
|
+
return arbitrate("has", { id: key, ops: {} });
|
43
|
+
}
|
44
|
+
|
45
|
+
function Lremove(key) {
|
46
|
+
if (!key)
|
47
|
+
throw new TypeError(
|
48
|
+
"No key specified."
|
49
|
+
);
|
50
|
+
return arbitrate("delete", { id: key, ops: {} });
|
51
|
+
}
|
52
|
+
|
53
|
+
function LremoveMultiple(key) {
|
54
|
+
if (!key)
|
55
|
+
throw new TypeError(
|
56
|
+
"No key specified."
|
57
|
+
);
|
58
|
+
try {
|
59
|
+
for (let i of key) {
|
60
|
+
arbitrate("delete", { id: i, ops: {} });
|
61
|
+
}
|
62
|
+
return true;
|
63
|
+
}
|
64
|
+
catch (err) {
|
65
|
+
return false;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
function Llist() {
|
70
|
+
return arbitrate("all",{ ops: {} });
|
71
|
+
}
|
72
|
+
|
73
|
+
function Replit_Set(key, value) {
|
74
|
+
try {
|
75
|
+
var done = false;
|
76
|
+
|
77
|
+
request({
|
78
|
+
url: process.env.REPLIT_DB_URL,
|
79
|
+
method: "POST",
|
80
|
+
headers: {
|
81
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
82
|
+
},
|
83
|
+
body: `${encodeURIComponent(key)}=${encodeURIComponent(JSON.stringify(value))}`
|
84
|
+
|
85
|
+
}, function (error, response, body) {
|
86
|
+
done = true;
|
87
|
+
});
|
88
|
+
|
89
|
+
deasync.loopWhile(function(){
|
90
|
+
return !done;
|
91
|
+
});
|
92
|
+
|
93
|
+
return;
|
94
|
+
|
95
|
+
}
|
96
|
+
catch (e) {
|
97
|
+
console.log(e);
|
98
|
+
return false;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
function Replit_Get(key) {
|
103
|
+
try {
|
104
|
+
var done = false;
|
105
|
+
var response = null;
|
106
|
+
|
107
|
+
request(process.env.REPLIT_DB_URL + "/" + key, function (error, res, body) {
|
108
|
+
if (!error && res.statusCode == 200) {
|
109
|
+
response = body;
|
110
|
+
}
|
111
|
+
done = true;
|
112
|
+
});
|
113
|
+
|
114
|
+
deasync.loopWhile(function(){
|
115
|
+
return !done;
|
116
|
+
});
|
117
|
+
|
118
|
+
return JSON.parse(response);
|
119
|
+
}
|
120
|
+
catch (e) {
|
121
|
+
console.log(e);
|
122
|
+
return false;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
function Replit_Has(key) {
|
127
|
+
try {
|
128
|
+
var done = false;
|
129
|
+
var response = null;
|
130
|
+
|
131
|
+
request(process.env.REPLIT_DB_URL + "/" + key, function (error, res, body) {
|
132
|
+
if (!error && res.statusCode == 200) {
|
133
|
+
response = body;
|
134
|
+
}
|
135
|
+
done = true;
|
136
|
+
});
|
137
|
+
|
138
|
+
deasync.loopWhile(function(){
|
139
|
+
return !done;
|
140
|
+
});
|
141
|
+
|
142
|
+
return response != null;
|
143
|
+
}
|
144
|
+
catch (e) {
|
145
|
+
console.log(e);
|
146
|
+
return false;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
function Replit_Remove(key) {
|
151
|
+
try {
|
152
|
+
var done = false;
|
153
|
+
request.delete(process.env.REPLIT_DB_URL + "/" + key , function (error, response, body) {
|
154
|
+
done = true;
|
155
|
+
});
|
156
|
+
|
157
|
+
deasync.loopWhile(function(){
|
158
|
+
return !done;
|
159
|
+
});
|
160
|
+
|
161
|
+
return;
|
162
|
+
}
|
163
|
+
catch (e) {
|
164
|
+
console.log(e);
|
165
|
+
return false;
|
166
|
+
}
|
167
|
+
}
|
168
|
+
function Replit_RemoveMultiple(keys) {
|
169
|
+
try {
|
170
|
+
for (const key of keys) {
|
171
|
+
request.delete(process.env.REPLIT_DB_URL + "/" + key , function (error, response, body) {});
|
172
|
+
}
|
173
|
+
return true;
|
174
|
+
}
|
175
|
+
catch (e) {
|
176
|
+
console.log(e);
|
177
|
+
return false;
|
178
|
+
}
|
179
|
+
}
|
180
|
+
|
181
|
+
function Replit_List() {
|
182
|
+
var done = false;
|
183
|
+
var response = null;
|
184
|
+
|
185
|
+
request(process.env.REPLIT_DB_URL + "?encode=true" + `&prefix=${encodeURIComponent("")}`, function (error, res, body) {
|
186
|
+
if (!error && res.statusCode == 200) {
|
187
|
+
response = body;
|
188
|
+
}
|
189
|
+
done = true;
|
190
|
+
|
191
|
+
});
|
192
|
+
|
193
|
+
deasync.loopWhile(function(){
|
194
|
+
return !done;
|
195
|
+
});
|
196
|
+
|
197
|
+
if (response.length === 0) {
|
198
|
+
return [];
|
199
|
+
}
|
200
|
+
return response.split("\n").map(decodeURIComponent);
|
201
|
+
}
|
202
|
+
|
203
|
+
|
204
|
+
var methods = {
|
205
|
+
fetch: function(db, params, options) {
|
206
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
207
|
+
if (!fetched) return null;
|
208
|
+
try {
|
209
|
+
fetched = JSON.parse(fetched.json);
|
210
|
+
} catch (e) {
|
211
|
+
fetched = fetched.json;
|
212
|
+
}
|
213
|
+
return fetched;
|
214
|
+
},
|
215
|
+
set: function(db, params, options) {
|
216
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
217
|
+
if (!fetched) {
|
218
|
+
db.prepare(`INSERT INTO ${options.table} (ID,json) VALUES (?,?)`).run(params.id, '{}');
|
219
|
+
fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
220
|
+
}
|
221
|
+
try {
|
222
|
+
fetched = JSON.parse(fetched);
|
223
|
+
} catch (e) {
|
224
|
+
fetched = fetched;
|
225
|
+
}
|
226
|
+
if (typeof fetched === 'object' && params.ops.target) {
|
227
|
+
params.data = JSON.parse(params.data);
|
228
|
+
params.data = set(fetched, params.ops.target, params.data);
|
229
|
+
}
|
230
|
+
else if (params.ops.target) throw new TypeError('Cannot target a non-object.');
|
231
|
+
db.prepare(`UPDATE ${options.table} SET json = (?) WHERE ID = (?)`).run(JSON.stringify(params.data), params.id);
|
232
|
+
let newData = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id).json;
|
233
|
+
if (newData === '{}') return null;
|
234
|
+
else {
|
235
|
+
try { newData = JSON.parse(newData);
|
236
|
+
}
|
237
|
+
catch (e) {
|
238
|
+
newData = newData;
|
239
|
+
}
|
240
|
+
return newData;
|
241
|
+
}
|
242
|
+
},
|
243
|
+
add: function addDB(db, params, options) {
|
244
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
245
|
+
if (!fetched) {
|
246
|
+
db.prepare(`INSERT INTO ${options.table} (ID,json) VALUES (?,?)`).run(params.id, '{}');
|
247
|
+
fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
248
|
+
}
|
249
|
+
if (params.ops.target) {
|
250
|
+
try {
|
251
|
+
fetched = JSON.parse(fetched);
|
252
|
+
}
|
253
|
+
catch (e) {
|
254
|
+
fetched = fetched;
|
255
|
+
}
|
256
|
+
let oldValue = get(fetched, params.ops.target);
|
257
|
+
if (oldValue === undefined) oldValue = 0;
|
258
|
+
else if (isNaN(oldValue)) throw new Error(`Data @ ID: "${params.id}" IS NOT A number.\nFOUND: ${fetched}\nEXPECTED: number`);
|
259
|
+
params.data = set(fetched, params.ops.target, oldValue + JSON.parse(params.data));
|
260
|
+
}
|
261
|
+
else {
|
262
|
+
if (fetched.json === '{}') fetched.json = 0;
|
263
|
+
try {
|
264
|
+
fetched.json = JSON.parse(fetched);
|
265
|
+
} catch (e) {
|
266
|
+
fetched.json = fetched.json;
|
267
|
+
}
|
268
|
+
if (isNaN(fetched.json)) throw new Error(`Data @ ID: "${params.id}" IS NOT A number.\nFOUND: ${fetched.json}\nEXPECTED: number`);
|
269
|
+
params.data = parseInt(fetched.json, 10) + parseInt(params.data, 10);
|
270
|
+
}
|
271
|
+
db.prepare(`UPDATE ${options.table} SET json = (?) WHERE ID = (?)`).run(JSON.stringify(params.data), params.id);
|
272
|
+
let newData = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id).json;
|
273
|
+
if (newData === '{}') return null;
|
274
|
+
else {
|
275
|
+
try {
|
276
|
+
newData = JSON.parse(newData);
|
277
|
+
}
|
278
|
+
catch (e) {
|
279
|
+
newData = newData;
|
280
|
+
}
|
281
|
+
return newData;
|
282
|
+
}
|
283
|
+
},
|
284
|
+
subtract: function subtractDB(db, params, options) {
|
285
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
286
|
+
if (!fetched) {
|
287
|
+
db.prepare(`INSERT INTO ${options.table} (ID,json) VALUES (?,?)`).run(params.id, '{}');
|
288
|
+
fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
289
|
+
}
|
290
|
+
if (params.ops.target) {
|
291
|
+
try { fetched = JSON.parse(fetched); } catch (e) {}
|
292
|
+
params.data = JSON.parse(params.data);
|
293
|
+
let oldValue = get(fetched, params.ops.target);
|
294
|
+
if (oldValue === undefined) oldValue = 0;
|
295
|
+
else if (isNaN(oldValue)) throw new Error('Target is not a number.');
|
296
|
+
params.data = set(fetched, params.ops.target, oldValue - params.data);
|
297
|
+
} else {
|
298
|
+
if (fetched.json === '{}') fetched.json = 0;
|
299
|
+
else fetched.json = JSON.parse(fetched.json);
|
300
|
+
try { fetched.json = JSON.parse(fetched); } catch (e) {}
|
301
|
+
if (isNaN(fetched.json)) throw new Error('Target is not a number.');
|
302
|
+
params.data = parseInt(fetched.json, 10) - parseInt(params.data, 10);
|
303
|
+
}
|
304
|
+
params.data = JSON.stringify(params.data);
|
305
|
+
db.prepare(`UPDATE ${options.table} SET json = (?) WHERE ID = (?)`).run(params.data, params.id);
|
306
|
+
let newData = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id).json;
|
307
|
+
if (newData === '{}') return null;
|
308
|
+
else {
|
309
|
+
try { newData = JSON.parse(newData); } catch (e) {}
|
310
|
+
return newData;
|
311
|
+
}
|
312
|
+
},
|
313
|
+
push: function pushDB(db, params, options) {
|
314
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
315
|
+
if (!fetched) {
|
316
|
+
db.prepare(`INSERT INTO ${options.table} (ID,json) VALUES (?,?)`).run(params.id, '{}');
|
317
|
+
fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
318
|
+
}
|
319
|
+
if (params.ops.target) {
|
320
|
+
fetched = JSON.parse(fetched.json);
|
321
|
+
try { fetched = JSON.parse(fetched); } catch (e) {}
|
322
|
+
params.data = JSON.parse(params.data);
|
323
|
+
if (typeof fetched !== 'object') throw new TypeError('Cannot push into a non-object.');
|
324
|
+
let oldArray = get(fetched, params.ops.target);
|
325
|
+
if (oldArray === undefined) oldArray = [];
|
326
|
+
else if (!Array.isArray(oldArray)) throw new TypeError('Target is not an array.');
|
327
|
+
oldArray.push(params.data);
|
328
|
+
params.data = set(fetched, params.ops.target, oldArray);
|
329
|
+
} else {
|
330
|
+
if (fetched.json === '{}') fetched.json = [];
|
331
|
+
else fetched.json = JSON.parse(fetched.json);
|
332
|
+
try { fetched.json = JSON.parse(fetched.json); } catch (e) {}
|
333
|
+
params.data = JSON.parse(params.data);
|
334
|
+
if (!Array.isArray(fetched.json)) throw new TypeError('Target is not an array.');
|
335
|
+
fetched.json.push(params.data);
|
336
|
+
params.data = fetched.json;
|
337
|
+
}
|
338
|
+
params.data = JSON.stringify(params.data);
|
339
|
+
db.prepare(`UPDATE ${options.table} SET json = (?) WHERE ID = (?)`).run(params.data, params.id);
|
340
|
+
let newData = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id).json;
|
341
|
+
if (newData === '{}') return null;
|
342
|
+
else {
|
343
|
+
newData = JSON.parse(newData);
|
344
|
+
try { newData = JSON.parse(newData); } catch (e) {}
|
345
|
+
return newData;
|
346
|
+
}
|
347
|
+
},
|
348
|
+
delete: function deleteDB(db, params, options) {
|
349
|
+
const unset = require('lodash/unset');
|
350
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
351
|
+
if (!fetched) return false;
|
352
|
+
else fetched = JSON.parse(fetched.json);
|
353
|
+
try { fetched = JSON.parse(fetched); } catch (e) {}
|
354
|
+
if (typeof fetched === 'object' && params.ops.target) {
|
355
|
+
unset(fetched, params.ops.target);
|
356
|
+
fetched = JSON.stringify(fetched);
|
357
|
+
db.prepare(`UPDATE ${options.table} SET json = (?) WHERE ID = (?)`).run(fetched, params.id);
|
358
|
+
return true;
|
359
|
+
}
|
360
|
+
else if (params.ops.target) throw new TypeError('Target is not an object.');
|
361
|
+
else db.prepare(`DELETE FROM ${options.table} WHERE ID = (?)`).run(params.id);
|
362
|
+
return true;
|
363
|
+
},
|
364
|
+
has: function hasDB(db, params, options) {
|
365
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
366
|
+
if (!fetched) return false;
|
367
|
+
else fetched = JSON.parse(fetched.json);
|
368
|
+
try { fetched = JSON.parse(fetched); } catch (e) {}
|
369
|
+
if (params.ops.target) fetched = get(fetched, params.ops.target);
|
370
|
+
return (typeof fetched != 'undefined');
|
371
|
+
},
|
372
|
+
all: function allDB(db, params, options) {
|
373
|
+
var stmt = db.prepare(`SELECT * FROM ${options.table} WHERE ID IS NOT NULL`);
|
374
|
+
let resp = [];
|
375
|
+
for (var row of stmt.iterate()) {
|
376
|
+
try {
|
377
|
+
resp.push({
|
378
|
+
ID: row.ID,
|
379
|
+
data: JSON.parse(row.json)
|
380
|
+
});
|
381
|
+
}
|
382
|
+
catch (e) {
|
383
|
+
return [];
|
384
|
+
}
|
385
|
+
}
|
386
|
+
return resp;
|
387
|
+
},
|
388
|
+
type: function typeDB(db, params, options) {
|
389
|
+
let fetched = db.prepare(`SELECT * FROM ${options.table} WHERE ID = (?)`).get(params.id);
|
390
|
+
if (!fetched) return null; // If empty, return null
|
391
|
+
fetched = JSON.parse(fetched.json);
|
392
|
+
try { fetched = JSON.parse(fetched); } catch (e) {}
|
393
|
+
if (params.ops.target) fetched = get(fetched, params.ops.target); // Get prop using dot notation
|
394
|
+
return typeof fetched;
|
395
|
+
},
|
396
|
+
clear: function clearDB(db, params, options) {
|
397
|
+
let fetched = db.prepare(`DELETE FROM ${options.table}`).run();
|
398
|
+
if(!fetched) return null;
|
399
|
+
return fetched.changes;
|
400
|
+
|
401
|
+
}
|
402
|
+
};
|
403
|
+
|
404
|
+
|
405
|
+
function arbitrate(method, params) {
|
406
|
+
let options = {table: "json"};
|
407
|
+
db.prepare(`CREATE TABLE IF NOT EXISTS ${options.table} (ID TEXT, json TEXT)`).run();
|
408
|
+
if (params.ops.target && params.ops.target[0] === ".") params.ops.target = params.ops.target.slice(1); // Remove prefix if necessary
|
409
|
+
if (params.data && params.data === Infinity) throw new TypeError(`You cannot set Infinity into the database @ ID: ${params.id}`);
|
410
|
+
if (params.id && typeof params.id == "string" && params.id.includes(".")) {
|
411
|
+
let unparsed = params.id.split(".");
|
412
|
+
params.id = unparsed.shift();
|
413
|
+
params.ops.target = unparsed.join(".");
|
414
|
+
}
|
415
|
+
return methods[method](db, params, options);
|
416
|
+
}
|
417
|
+
|
418
|
+
|
419
|
+
module.exports = function ChernobyL(Local) {
|
420
|
+
if (Local && process.env["REPL_ID"]) {
|
421
|
+
return {
|
422
|
+
set: Lset,
|
423
|
+
get: Lget,
|
424
|
+
has: Lhas,
|
425
|
+
delete: Lremove,
|
426
|
+
deleteMultiple: LremoveMultiple,
|
427
|
+
list: Llist
|
428
|
+
};
|
429
|
+
} else if (!Local && process.env["REPL_ID"]) {
|
430
|
+
return {
|
431
|
+
set: Replit_Set,
|
432
|
+
get: Replit_Get,
|
433
|
+
has: Replit_Has,
|
434
|
+
delete: Replit_Remove,
|
435
|
+
deleteMultiple: Replit_RemoveMultiple,
|
436
|
+
list: Replit_List
|
437
|
+
};
|
438
|
+
}
|
439
|
+
else if (Local && !process.env["REPL_ID"]) {
|
440
|
+
return {
|
441
|
+
set: Lset,
|
442
|
+
get: Lget,
|
443
|
+
has: Lhas,
|
444
|
+
delete: Lremove,
|
445
|
+
deleteMultiple: LremoveMultiple,
|
446
|
+
list: Llist
|
447
|
+
};
|
448
|
+
}
|
449
|
+
else if (!Local && !process.env["REPL_ID"]) {
|
450
|
+
return {
|
451
|
+
set: Lset,
|
452
|
+
get: Lget,
|
453
|
+
has: Lhas,
|
454
|
+
delete: Lremove,
|
455
|
+
deleteMultiple: LremoveMultiple,
|
456
|
+
list: Llist
|
457
|
+
};
|
458
|
+
}
|
459
|
+
else {
|
460
|
+
return {
|
461
|
+
set: Lset,
|
462
|
+
get: Lget,
|
463
|
+
has: Lhas,
|
464
|
+
delete: Lremove,
|
465
|
+
deleteMultiple: LremoveMultiple,
|
466
|
+
list: Llist
|
467
|
+
};
|
468
|
+
}
|
469
|
+
};
|
@@ -0,0 +1,82 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var utils = require('../utils');
|
4
|
+
var logger = require('../logger')
|
5
|
+
var OTP = require('totp-generator');
|
6
|
+
|
7
|
+
module.exports.getInfo = async function (id,jar,ctx,defaultFuncs) {
|
8
|
+
var AccessToken = await module.exports.getAccessToken(jar,ctx,defaultFuncs);
|
9
|
+
var { body:Data } = await utils.get(`https://graph.facebook.com/${id}?fields=age_range,picture,cover,name,first_name,email,about,birthday,gender,website,hometown,link,location,quotes,relationship_status,significant_other,username,subscribers.limite(0)&access_token=${AccessToken}`,jar,null,ctx.globalOptions);
|
10
|
+
var Format = {
|
11
|
+
id: JSON.parse(Data).id || "Không Có Dữ Liệu",
|
12
|
+
name: JSON.parse(Data).name || "Không Có Dữ Liệu",
|
13
|
+
first_name: JSON.parse(Data).first_name || "Không Có Dữ Liệu",
|
14
|
+
username: JSON.parse(Data).username || "Không Có Dữ Liệu",
|
15
|
+
link: JSON.parse(Data).link || "Không Có Dữ Liệu",
|
16
|
+
verified: JSON.parse(Data).verified || "Không Có Dữ Liệu",
|
17
|
+
about: JSON.parse(Data).about || "Không Có Dữ Liệu",
|
18
|
+
avatar: JSON.parse(Data).picture.data.url || "Không Có Dữ Liệu",
|
19
|
+
cover: JSON.parse(Data).cover.source || "Không Có Dữ Liệu",
|
20
|
+
birthday: JSON.parse(Data).birthday || "Không Có Dữ Liệu",
|
21
|
+
age: JSON.parse(Data).age_range.min || "Không Có Dữ Liệu",
|
22
|
+
follow: JSON.parse(Data).subscribers.summary.total_count || "Không Có Dữ Liệu",
|
23
|
+
gender: JSON.parse(Data).gender || "Không Có Dữ Liệu",
|
24
|
+
hometown: JSON.parse(Data).hometown || "Không Có Dữ Liệu",
|
25
|
+
email: JSON.parse(Data).email || "Không Có Dữ Liệu",
|
26
|
+
interested_in: JSON.parse(Data).interested_in || "Không Có Dữ Liệu",
|
27
|
+
location: JSON.parse(Data).location || "Không Có Dữ Liệu",
|
28
|
+
locale: JSON.parse(Data).locale || "Không Có Dữ Liệu",
|
29
|
+
relationship_status: JSON.parse(Data).relationship_status || "Không Có Dữ Liệu",
|
30
|
+
love: JSON.parse(Data).significant_other || "Không Có Dữ Liệu",
|
31
|
+
website: JSON.parse(Data).website || "Không Có Dữ Liệu",
|
32
|
+
quotes: JSON.parse(Data).quotes || "Không Có Dữ Liệu",
|
33
|
+
timezone: JSON.parse(Data).timezone || "Không Có Dữ Liệu",
|
34
|
+
updated_time: JSON.parse(Data).updated_time || "Không Có Dữ Liệu"
|
35
|
+
}
|
36
|
+
return Format;
|
37
|
+
}
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Help: @ManhG
|
41
|
+
* Author: @KanzuWakazaki
|
42
|
+
*/
|
43
|
+
|
44
|
+
module.exports.getAccessToken = async function (jar, ctx,defaultFuncs) {
|
45
|
+
if (global.Fca.Data.AccessToken) {
|
46
|
+
return global.Fca.Data.AccessToken;
|
47
|
+
}
|
48
|
+
else {
|
49
|
+
var nextURLS = "https://business.facebook.com/security/twofactor/reauth/enter/"
|
50
|
+
return defaultFuncs.get('https://business.facebook.com/business_locations', jar, null, ctx.globalOptions).then(async function(data) {
|
51
|
+
try {
|
52
|
+
if (/"],\["(.*?)","/.exec(/LMBootstrapper(.*?){"__m":"LMBootstrapper"}/.exec(data.body)[1])[1]) {
|
53
|
+
global.Fca.Data.AccessToken = /"],\["(.*?)","/.exec(/LMBootstrapper(.*?){"__m":"LMBootstrapper"}/.exec(data.body)[1])[1];
|
54
|
+
return /"],\["(.*?)","/.exec(/LMBootstrapper(.*?){"__m":"LMBootstrapper"}/.exec(data.body)[1])[1];
|
55
|
+
}
|
56
|
+
}
|
57
|
+
catch (_) {
|
58
|
+
if (global.Fca.Require.FastConfig.AuthString.includes('|')) return logger.Error(global.Fca.Require.Language.Index.Missing)
|
59
|
+
var OPTCODE = global.Fca.Require.FastConfig.AuthString.includes(" ") ? global.Fca.Require.FastConfig.AuthString.replace(RegExp(" ", 'g'), "") : global.Fca.Require.FastConfig.AuthString;
|
60
|
+
var Form = {
|
61
|
+
approvals_code: OTP(String(OPTCODE)),
|
62
|
+
save_device: false,
|
63
|
+
lsd: utils.getFrom(data.body, "[\"LSD\",[],{\"token\":\"", "\"}")
|
64
|
+
}
|
65
|
+
return defaultFuncs.post(nextURLS, jar, Form, ctx.globalOptions, {
|
66
|
+
referer: "https://business.facebook.com/security/twofactor/reauth/?twofac_next=https%3A%2F%2Fbusiness.facebook.com%2Fbusiness_locations&type=avoid_bypass&app_id=0&save_device=0",
|
67
|
+
}).then(async function(data) {
|
68
|
+
if (String(data.body).includes(false)) throw { Error: "Invaild OTP | FastConfigFca.json: AuthString" }
|
69
|
+
return defaultFuncs.get('https://business.facebook.com/business_locations', jar, null, ctx.globalOptions,{
|
70
|
+
referer: "https://business.facebook.com/security/twofactor/reauth/?twofac_next=https%3A%2F%2Fbusiness.facebook.com%2Fbusiness_locations&type=avoid_bypass&app_id=0&save_device=0",
|
71
|
+
}).then(async function(data) {
|
72
|
+
var Access_Token = /"],\["(.*?)","/.exec(/LMBootstrapper(.*?){"__m":"LMBootstrapper"}/.exec(data.body)[1])[1];
|
73
|
+
global.Fca.Data.AccessToken = Access_Token;
|
74
|
+
return Access_Token;
|
75
|
+
});
|
76
|
+
});
|
77
|
+
}
|
78
|
+
})
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
//hard working =))
|
@@ -0,0 +1,62 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const got = global.Fca.Require.Fetch;
|
4
|
+
|
5
|
+
/**
|
6
|
+
* @param {string | URL} url
|
7
|
+
* @param {{ sendMessage: (arg0: string, arg1: any) => any; }} api
|
8
|
+
*/
|
9
|
+
async function getUIDSlow(url,api) {
|
10
|
+
var FormData = require("form-data");
|
11
|
+
var Form = new FormData();
|
12
|
+
var Url = new URL(url);
|
13
|
+
Form.append('username', Url.pathname.replace(/\//g, ""));
|
14
|
+
try {
|
15
|
+
var data = await got.post('https://api.findids.net/api/get-uid-from-username',{
|
16
|
+
body: Form,
|
17
|
+
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.79 Safari/537.36'
|
18
|
+
})
|
19
|
+
} catch (e) {
|
20
|
+
console.log(global.Fca.Data.event.threadID,e)
|
21
|
+
return api.sendMessage("Lỗi: " + e.message,global.Fca.Data.event.threadID);
|
22
|
+
}
|
23
|
+
if (JSON.parse(data.body.toString()).status != 200) return api.sendMessage('Đã bị lỗi !',global.Fca.Data.event.threadID)
|
24
|
+
if (typeof JSON.parse(data.body.toString()).error === 'string') return "errr"
|
25
|
+
else return JSON.parse(data.body.toString()).data.id || "nịt";
|
26
|
+
}
|
27
|
+
|
28
|
+
/**
|
29
|
+
* @param {string | URL} url
|
30
|
+
* @param {{ sendMessage: (arg0: string, arg1: any, arg2: any) => any; }} api
|
31
|
+
*/
|
32
|
+
async function getUIDFast(url,api) {
|
33
|
+
var FormData = require("form-data");
|
34
|
+
var Form = new FormData();
|
35
|
+
var Url = new URL(url);
|
36
|
+
Form.append('link', Url.href);
|
37
|
+
try {
|
38
|
+
var data = await got.post('https://id.traodoisub.com/api.php',{
|
39
|
+
body: Form
|
40
|
+
})
|
41
|
+
} catch (e) {
|
42
|
+
return api.sendMessage("Lỗi: " + e.message,global.Fca.Data.event.threadID,global.Fca.Data.event.messageID);
|
43
|
+
}
|
44
|
+
if (JSON.parse(data.body.toString()).error) return api.sendMessage(JSON.parse(data.body.toString()).error,global.Fca.Data.event.threadID,global.Fca.Data.event.messageID);
|
45
|
+
else return JSON.parse(data.body.toString()).id || "co cai nit huhu";
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* @param {any} url
|
50
|
+
* @param {any} api
|
51
|
+
*/
|
52
|
+
async function getUID(url,api) {
|
53
|
+
var getUID = await getUIDFast(url,api);
|
54
|
+
if (!isNaN(getUID) == true) return getUID;
|
55
|
+
else {
|
56
|
+
let getUID = await getUIDSlow(url,api);
|
57
|
+
if (!isNaN(data) == true) return getUID;
|
58
|
+
else return null;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
module.exports = getUID;
|