fca-pretest
Version:
Facebook-chat-api made by Priyansh rajput
1,181 lines (1,105 loc) • 87.7 kB
JavaScript
'use strict';
/**
* Developers: @KanzuWakazaki - @HarryWakazaki
** A few words about developer appstate security.
*! Statement renouncing responsibility for the security of appstate encryption of the following operating systems: windows, Android, Linux operating systems,.. (maybe repl.it?),
*! because the above operating systems are private (except rep.it if the fraudster does not own your account or invite link to join).
*! If the intruder owns the computer, these private operating systems,the security of this fca cannot guarantee 100% of the time.
** If the grammar is wrong, please understand because I'm just a kid 🍵.
*/
/!-[ Global Set ]-!/
global.Fca = new Object({
isThread: new Array(),
isUser: new Array(),
startTime: Date.now(),
Setting: new Map(),
Version: require('./package.json').version,
Require: new Object({
fs: require("fs"),
Fetch: require('got'),
log: require("npmlog"),
utils: require("./utils"),
logger: require('./logger'),
languageFile: require('./Language/index.json'),
Database: require("./Extra/Database"),
Security: require('./Extra/Src/uuid')
}),
getText: function(/** @type {any[]} */...Data) {
var Main = (Data.splice(0,1)).toString();
for (let i = 0; i < Data.length; i++) Main = Main.replace(RegExp(`%${i + 1}`, 'g'), Data[i]);
return Main;
},
Data: new Object({
ObjPriyansh: {
"Language": "en",
"PreKey": "",
"AutoUpdate": false,
"MainColor": "#9900FF",
"MainName": "[ FCA-PRIYANSH ]",
"Logo": true,
"Uptime": true,
"Config": "default",
"Login2Fa": false,
"AutoLogin": false,
"BroadCast": true,
"AuthString": "SD4S XQ32 O2JA WXB3 FUX2 OPJ7 Q7JZ 4R6Z",
"EncryptFeature": true,
"ResetDataLogin": false,
"AutoRestartMinutes": 0,
"HTML": {
"HTML": true,
"UserName": "Guest"
}
},
CountTime: function() {
var fs = global.Fca.Require.fs;
if (fs.existsSync(__dirname + '/CountTime.json')) {
try {
var data = Number(fs.readFileSync(__dirname + '/CountTime.json', 'utf8')),
hours = Math.floor(data / (60 * 60));
}
catch (e) {
fs.writeFileSync(__dirname + '/CountTime.json', 0);
hours = 0;
}
}
else {
hours = 0;
}
return `${hours} Hours`;
}
}),
AutoLogin: async function () {
var Database = global.Fca.Require.Database;
var logger = global.Fca.Require.logger;
var Email = (await global.Fca.Require.Database.get('Account')).replace(RegExp('"', 'g'), ''); //hmm IDK
var PassWord = (await global.Fca.Require.Database.get('Password')).replace(RegExp('"', 'g'), '');
login({ email: Email, password: PassWord},async (error, api) => {
if (error) {
logger.Error(JSON.stringify(error,null,2), function() { logger.Error("AutoLogin Failed!", function() { process.exit(0); }) });
}
try {
await Database.set("TempState", api.getAppState());
}
catch(e) {
logger.Warning(global.Fca.Require.Language.Index.ErrDatabase);
logger.Error();
process.exit(0);
}
process.exit(1);
});
}
});
/!-[ Check File To Run Process ]-!/
let Boolean_Fca = ["AutoUpdate","Uptime","BroadCast","EncryptFeature","AutoLogin","ResetDataLogin","Login2Fa","Logo"];
let String_Fca = ["MainName","PreKey","Language","AuthString","Config"]
let Number_Fca = ["AutoRestartMinutes"];
let All_Variable = Boolean_Fca.concat(String_Fca,Number_Fca);
try {
if (!global.Fca.Require.fs.existsSync(process.cwd() + '/PriyanshFca.json')) {
global.Fca.Require.fs.writeFileSync(process.cwd() + "/PriyanshFca.json", JSON.stringify(global.Fca.Data.ObjPriyansh, null, "\t"));
process.exit(1);
}
try {
var DataLanguageSetting = require(process.cwd() + "/PriyanshFca.json");
}
catch (e) {
global.Fca.Require.logger.Error('Detect Your FastConfigFca Settings Invalid!, Carry out default restoration');
global.Fca.Require.fs.writeFileSync(process.cwd() + "/PriyanshFca.json", JSON.stringify(global.Fca.Data.ObjPriyansh, null, "\t"));
process.exit(1)
}
if (global.Fca.Require.fs.existsSync(process.cwd() + '/PriyanshFca.json')) {
try {
if (DataLanguageSetting.Logo != undefined) {
delete DataLanguageSetting.Logo
global.Fca.Require.fs.writeFileSync(process.cwd() + "/PriyanshFca.json", JSON.stringify(DataLanguageSetting, null, "\t"));
}
}
catch (e) {
console.log(e);
}
if (!global.Fca.Require.languageFile.some((/** @type {{ Language: string; }} */i) => i.Language == DataLanguageSetting.Language)) {
global.Fca.Require.logger.Warning("Not Support Language: " + DataLanguageSetting.Language + " Only 'en' and 'vi'");
process.exit(0);
}
var Language = global.Fca.Require.languageFile.find((/** @type {{ Language: string; }} */i) => i.Language == DataLanguageSetting.Language).Folder.Index;
global.Fca.Require.Language = global.Fca.Require.languageFile.find((/** @type {{ Language: string; }} */i) => i.Language == DataLanguageSetting.Language).Folder;
} else process.exit(1);
for (let i in DataLanguageSetting) {
if (Boolean_Fca.includes(i)) {
if (global.Fca.Require.utils.getType(DataLanguageSetting[i]) != "Boolean") return logger.Error(i + " Is Not A Boolean, Need To Be true Or false !", function() { process.exit(0) });
else continue;
}
else if (String_Fca.includes(i)) {
if (global.Fca.Require.utils.getType(DataLanguageSetting[i]) != "String") return logger.Error(i + " Is Not A String, Need To Be String!", function() { process.exit(0) });
else continue;
}
else if (Number_Fca.includes(i)) {
if (global.Fca.Require.utils.getType(DataLanguageSetting[i]) != "Number") return logger.Error(i + " Is Not A Number, Need To Be Number !", function() { process.exit(0) });
else continue;
}
}
for (let i of All_Variable) {
if (!DataLanguageSetting[All_Variable[i]] == undefined) {
DataLanguageSetting[All_Variable[i]] = global.Fca.Data.ObjPriyansh[All_Variable[i]];
global.Fca.Require.fs.writeFileSync(process.cwd() + "/PriyanshFca.json", JSON.stringify(DataLanguageSetting, null, "\t"));
}
else continue;
}
global.Fca.Require.Priyansh = DataLanguageSetting;
}
catch (e) {
console.log(e);
global.Fca.Require.logger.Error();
}
/!-[ Require config and use ]-!/
if (global.Fca.Require.Priyansh.Config != 'default') {
//do ssth
}
/!-[ Require All Package Need Use ]-!/
var utils = global.Fca.Require.utils,
logger = global.Fca.Require.logger,
fs = global.Fca.Require.fs,
getText = global.Fca.getText,
log = global.Fca.Require.log,
Fetch = global.Fca.Require.Fetch,
express = require("express")(),
{ join, resolve } = require('path'),
cheerio = require("cheerio"),
StateCrypt = {},
{ readFileSync } = require('fs-extra'),
Database = require("./Extra/Database"),
readline = require("readline"),
chalk = require("chalk"),
figlet = require("figlet"),
os = require("os"),
Security = require("./Extra/Security/Index");
/!-[ Set Variable For Process ]-!/
log.maxRecordSize = 100;
var checkVerified = null;
var Boolean_Option = ['online','selfListen','listenEvents','updatePresence','forceLogin','autoMarkDelivery','autoMarkRead','listenTyping','autoReconnect','emitReady'];
/!-[ Set And Check Template HTML ]-!/
var css = readFileSync(join(__dirname, 'Extra', 'Html', 'Classic', 'style.css'));
var js = readFileSync(join(__dirname, 'Extra', 'Html', 'Classic', 'script.js'));
/!-[ Function Generate HTML Template ]-!/
/**
* It returns a string of HTML code.
* @param UserName - The username of the user
* @param Type - The type of user, either "Free" or "Premium"
* @param link - The link to the music you want to play
* @returns A HTML file
*/
function ClassicHTML(UserName,Type,link) {
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Priyanshu Rajput Info</title>
<!--font awasome icons-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" integrity="sha512-9usAa10IRO0HhonpyAIVpjrylPvoDwiPUiKdWk5t3PyolY1cOd4DSE0Ga+ri4AuTroPR5aQvXU9xC6qOPnzFeg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<!--my css file-->
<link rel="stylesheet" href="style.css">
</head>
<body >
<video autoplay muted plays-inline loop>
<source src="https://imgur.com/aoGxVLX.mp4" type="video/mp4">
</video>
<div class="container">
<button class="call"><i class="fa-solid fa-phone"></i></button>
<div class="card move">
<div class="imgbox">
<img src="https://i.imgur.com/eDbdlvd.jpg" alt="">
</div>
<div class="name-job">
<h3>Priyansh Rajput</h3>
<h5>Web Developer</h5>
</div>
<div class="skills">
<button class="btn-Follow"><a href="https://facebook.com/Priyanshu.Rajput.Official" target="_blank">Follow</a></button>
<button class="btn-Message"><a href=" https://telegram.me/Priyanshrajput" target="_blank">Message!</a></button>
</div>
</div>
<div class="icons">
<div class="icon">
<i class="fa-brands fa-twitter front"></i>
<i class="fa-brands fa-twitter back"></i>
<i class="fa-brands fa-twitter left"></i>
<i class="fa-brands fa-twitter right"></i>
<i class="fa-brands fa-twitter top"></i>
<i class="fa-brands fa-twitter bottom"></i>
</div>
<div class="icon">
<i class="fa-brands fa-youtube front"></i>
<i class="fa-brands fa-youtube back"></i>
<i class="fa-brands fa-youtube left"></i>
<i class="fa-brands fa-youtube right"></i>
<i class="fa-brands fa-youtube top"></i>
<i class="fa-brands fa-youtube bottom"></i>
</div>
<div class="icon">
<i class="fa-brands fa-facebook-f front"></i>
<i class="fa-brands fa-facebook-f back"></i>
<i class="fa-brands fa-facebook-f left"></i>
<i class="fa-brands fa-facebook-f right"></i>
<i class="fa-brands fa-facebook-f top"></i>
<i class="fa-brands fa-facebook-f bottom"></i>
</div>
<div class="icon">
<i class="fa-brands fa-whatsapp front"></i>
<i class="fa-brands fa-whatsapp back"></i>
<i class="fa-brands fa-whatsapp left"></i>
<i class="fa-brands fa-whatsapp right"></i>
<i class="fa-brands fa-whatsapp top"></i>
<i class="fa-brands fa-whatsapp bottom"></i>
</div>
</div>
</div>
</body>
</html>
<script>
var container=document.querySelector('.container')
var icons=document.querySelector('.icons')
var call=document.querySelector('.call')
var body =document.querySelector('body')
var card=document.querySelector('.card')
// body.addEventListener('onload',function(){
setTimeout(function(){
container.classList.add('move')
},3000)
// })
setTimeout(function(){
icons.style="opacity: 0"
call.style="opacity: 0"
},2000)
setTimeout(function(){
card.classList.remove('move')
icons.style="opacity: 1"
call.style="opacity: 1"
},6000)
</script>
<style>/* @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300&display=swap'); */
* {
padding: 0;
margin: 0;
box-sizing: border-box;
font-family: 'Roboto', sans-serif;
}
:root {
--width: 250px;
--height: 260px;
--i-width: calc(var(--height)*0.25 - 23px);
}
@media only screen and (min-width:64.1875em){
video{
height: 100%;
width: 100%;
}
}
@media only screen and (min-width:46.1875em) and (max-width:63.9375em){
video{
position: fixed;
top:0;
left: 0;
right: 0;
bottom: 0;
background-color: #000;
height: 100%;
display: block;
}
}
@media only screen and (max-width:46.1875em){
video{
position: fixed;
top:0;
left: 0;
right: 0;
bottom: 0;
background-color: #000;
height: 100%;
display: block;
}
}
body {
height: 100vh;
width: 100vw;
background-color: black;
display: flex;
justify-content: center;
align-items: center;
perspective: 600px;
overflow: hidden;
}
body::before {
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: linear-gradient(#E91e63, #FF0);
clip-path: circle(22% at 30% 22%);
z-index: -1;
}
body::after {
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: linear-gradient(#FFF, #DA00FF);
clip-path: circle(25% at 70% 80%);
z-index: -1;
}
.container {
position: fixed;
transform-style: preserve-3d;
display: none;
z-index: 99;
}
@keyframes move{
0% {
transform: scale(0);
/* opacity: 0; */
border-radius: 50%;
}
25% {
transform: scale(0.20);
/* opacity: 0.3; */
border-radius: 25%;
}
50% {
transform: scale(0.50);
/* opacity: 0,6; */
}
75% {
transform: scale(0.75);
/* opacity: 0,6; */
}
100% {
transform: scale(1);
/* opacity: 1; */
}
}
.container.move{
animation: move linear 1.5s;
display: block;
}
.container::before{
content: "";
position: absolute;
top:-2px;
left: -2px;
width:calc(100% + 5px) ;
height: calc(100% + 5px);
border:3px solid linear-gradient(45deg,#e6fb04,#00ff66,#00ffff,#ff00ff
,#ff0099,#6e0dde,#ff3300,#099fff);
/* background: linear-gradient(45deg,#e6fb04,#00ff66,#00ffff,#ff00ff
,#ff0099,#6e0dde,#ff3300,#099fff); */
animation: animate 20s linear infinite;
background-size: 400%;
/* background:linear-gradient(transparent,#45f3ff,#45f3ff,#45f3ff,transparent); */
z-index: -1;
}
/* .container::after{
content: "";
position: absolute;
inset: 3px;
} */
@keyframes animate{
0%{
/* transform: translate(-50%,-50%) rotate(0deg); */
background-position: 0 0;
}
50%{
background-position:100% 0;
}
100%{
/* transform: translate(-50%,-50%) rotate(360deg); */
background-position: 0 0;
}
}
.card {
position: relative;
width: var(--width);
height: var(--height);
background-color: rgba(255, 255, 255, 0.02);
backdrop-filter: blur(9px);
border-top: 1px solid #FFF2;
border-left: 1px solid #FFF2;
box-shadow: 4px 4px 12px #0004;
color: #FFF;
overflow: hidden;
transition: transform 0.7s;
display: flex;
flex-wrap: wrap;
justify-content: center;
transition: 1s linear;
}
.card.move{
width: 120px;
height: 120px;
border-radius: 50%;
overflow: hidden;
padding: 0px;
}
.card.move .imgbox{
transform: translateY(0);
}
.card.move.card:before{
opacity: 0;
}
.card::before {
content: '';
position: absolute;
left: -99%;
width: 70px;
height: 400px;
background-color: #FFFB;
transform: rotate(38deg) translateY(-25%);
z-index: 1;
}
.container:hover .card:before {
animation: brightness 0.8s 1 forwards;
}
@keyframes brightness {
0% {
left: -99%;
}
100% {
left: 120%;
}
}
.imgbox {
width: 115px;
height: 115px;
border: 5px solid transparent;
box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.533);
border-radius: 50%;
overflow: hidden;
text-align: center;
transition: 1s;
transform: translateY(10px);
}
.imgbox:hover{
width: 100%;
height: 100%;
border: none;
border-radius: unset;
transform: translateY(0px);
}
.imgbox:hover.card{
padding: 0;
}
.imgbox img {
width: 100%;
height: 100%;
}
.name-job {
width: 100%;
text-align: center;
text-shadow: 1px 2px 2px #000;
/* margin-bottom: 40px; */
margin-top: 10px
}
.name-job h3 {
margin-bottom: 0.1em;
}
.name-job h5 {
color: rgb(36, 219, 36);
line-height: 25px;
}
.info {
grid-column: 2 / 4;
grid-row: 1 / 3;
padding: 7px;
line-height: 1.8;
font-weight: 200;
}
.skills {
display: flex;
justify-content: space-around;
align-items: center;
margin-bottom: 6px;
}
.skills button{
padding: 5px 10px;
width: 85px;
margin: 5px;
cursor: pointer;
}
.btn-Follow a{
text-decoration: none;
color: black;
}
.btn-Follow{
background-color: rgb(36, 219, 36);
border-radius: 1px;
border: none;
}
.btn-Follow:hover{
background-color: rgb(2, 250, 2);
}
.btn-Message a{
text-decoration: none;
color: rgb(36, 219, 36);
}
.btn-Message a:hover{
color: #000;
}
.btn-Message{
border: 1px solid rgb(36, 219, 36);
border-radius: 3px;
background-color: transparent;
color: #fff;
}
.btn-Message:hover{
background-color: rgb(2, 250, 2);
color: red;
}
.skills .fa-brands {
cursor: pointer;
position: relative;
width: 45px;
height: 45px;
background-color: #FFF5;
box-shadow: 0px 2px 4px #0008, 0px -1px 1px #FFF;
display: grid;
place-content: center;
font-size: 1.22em;
border-radius: 50%;
transition: 0.3s;
}
.skills .fa-brands:hover {
background-color: #FFF;
color: #222;
}
.call {
cursor: pointer;
position: absolute;
left: 10px;
top: 10px;
width: 40px;
height: 40px;
background-color: #555;
color: #FFF;
border: 2px solid #FFF;
display: grid;
place-content: center;
border-radius: 50%;
z-index: 1;
transition: 0.4s;
}
.call:focus {
transform: rotateY(45deg) translateX(120px) translateZ(-70px);
}
.call:focus ~ .card {
transform: rotateY(45deg) translateX(140px) translateZ(-120px);
}
.call:focus ~ .icons {
height: var(--height);
transform: translateZ(var(--i-width)) translateY(-50%);
}
.icon {
position: relative;
width: var(--i-width);
height: var(--i-width);
transform-style: preserve-3d;
transform: rotateX(-40deg) rotateY(45deg);
transition: 0.7s;
}
.icons {
position: absolute;
left: 5px;
top: 50%;
width: var(--i-width);
height: calc(var(--i-width)*4);
transition: 0.6s;
display: flex;
flex-direction: column;
justify-content: space-between;
transform: translateZ(calc(var(--i-width) * -1)) translateY(-50%);
transform-style: preserve-3d;
}
.icon .fa-brands {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: #222;
color: #0FF;
border: 1px dashed #0FF;
display: grid;
place-content: center;
font-size: 1.2em;
transition: 0.5s;
}
.call:hover {
border-color: #222;
color: #000;
background-color: #FC0;
}
.icon:hover {
cursor: pointer;
transform: rotateX(-40deg) rotateY(315deg);
}
.icon:hover .fa-brands {
border-color: inherit;
background-color: #FFF;
}
.icon:hover .fa-facebook-f {
color: #0000dd;
}
.icon:hover .fa-twitter {
color: #002fff;
}
.icon:hover .fa-youtube {
color: #F00;
}
.icon:hover .fa-whatsapp {
color: #0F0;
}
.front {
transform: translateZ(calc(var(--i-width)*0.5));
}
.back {
transform: translateZ(calc(var(--i-width)* -0.5));
}
.left {
transform: rotateY(-90deg) translateZ(calc(var(--i-width)* 0.5));
}
.right {
transform: rotateY(90deg) translateZ(calc(var(--i-width)* 0.5));
}
.bottom {
transform: rotateX(-90deg) translateZ(calc(var(--i-width)* 0.5));
}
.top {
transform: rotateX(90deg) translateZ(calc(var(--i-width)* 0.5));
}</style>`
//lazy to change
}
/!-[ Stating Http Infomation ]-!/
express.set('DFP', (process.env.port || 8000));
express.use(function(req, res, next) {
switch (req.url.split('?')[0]) {
case '/script.js': {
res.writeHead(200, { 'Content-Type': 'text/javascript' });
res.write(js);
break;
}
case '/style.css': {
res.writeHead(200, { 'Content-Type': 'text/css' });
res.write(css);
break;
}
// case '/History': {
// if (req.query.PassWord == process.env.REPL_OWNER) {
// res.writeHead(200, { 'Content-Type': 'application/json charset=utf-8' });
// res.write(JSON.stringify(console.history,null,2),'utf8');
// res.end();
// }
// else res.json({
// Status: false,
// Error: "Thiếu Params ?PassWord=PassWordCuaBan =))"
// });
// break;
// }
default: {
res.writeHead(200, "OK", { "Content-Type": "text/html" });
res.write(ClassicHTML(global.Fca.Require.Priyansh.HTML.UserName, global.Fca.Data.PremText.includes("Premium") ? "Premium": "Free", global.Fca.Require.Priyansh.HTML.MusicLink));
}
}
res.end();
})
global.Fca.Require.Web = express;
/!-[ Function setOptions ]-!/
/**
* @param {{ [x: string]: boolean; selfListen?: boolean; listenEvents?: boolean; listenTyping?: boolean; updatePresence?: boolean; forceLogin?: boolean; autoMarkDelivery?: boolean; autoMarkRead?: boolean; autoReconnect?: boolean; logRecordSize: any; online?: boolean; emitReady?: boolean; userAgent: any; logLevel?: any; pageID?: any; proxy?: any; }} globalOptions
* @param {{ [x: string]: any; logLevel?: any; forceLogin?: boolean; userAgent?: any; pauseLog?: any; logRecordSize?: any; pageID?: any; proxy?: any; }} options
*/
function setOptions(globalOptions, options) {
Object.keys(options).map(function(key) {
switch (Boolean_Option.includes(key)) {
case true: {
globalOptions[key] = Boolean(options[key]);
break;
}
case false: {
switch (key) {
case 'pauseLog': {
if (options.pauseLog) log.pause();
else log.resume();
break;
}
case 'logLevel': {
log.level = options.logLevel;
globalOptions.logLevel = options.logLevel;
break;
}
case 'logRecordSize': {
log.maxRecordSize = options.logRecordSize;
globalOptions.logRecordSize = options.logRecordSize;
break;
}
case 'pageID': {
globalOptions.pageID = options.pageID.toString();
break;
}
case 'userAgent': {
globalOptions.userAgent = (options.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36');
break;
}
case 'proxy': {
if (typeof options.proxy != "string") {
delete globalOptions.proxy;
utils.setProxy();
} else {
globalOptions.proxy = options.proxy;
utils.setProxy(globalOptions.proxy);
}
break;
}
default: {
log.warn("setOptions", "Unrecognized option given to setOptions: " + key);
break;
}
}
break;
}
}
});
}
/!-[ Function BuildAPI ]-!/
/**
* @param {any} globalOptions
* @param {string} html
* @param {{ getCookies: (arg0: string) => any[]; }} jar
*/
function buildAPI(globalOptions, html, jar) {
var maybeCookie = jar.getCookies("https://www.facebook.com").filter(function(/** @type {{ cookieString: () => string; }} */val) { return val.cookieString().split("=")[0] === "c_user"; });
if (maybeCookie.length === 0) {
switch (global.Fca.Require.Priyansh.AutoLogin) {
case true: {
global.Fca.Require.logger.Warning(global.Fca.Require.Language.Index.AutoLogin, function() {
return global.Fca.AutoLogin();
});
break;
}
case false: {
throw { error: global.Fca.Require.Language.Index.ErrAppState };
}
}
}
if (html.indexOf("/checkpoint/block/?next") > -1) log.warn("login", Language.CheckPointLevelI);
var userID = maybeCookie[0].cookieString().split("=")[1].toString();
process.env['UID'] = logger.Normal(getText(Language.UID,userID), userID);
try {
clearInterval(checkVerified);
} catch (e) {
console.log(e);
}
var clientID = (Math.random() * 2147483648 | 0).toString(16);
var CHECK_MQTT = {
oldFBMQTTMatch: html.match(/irisSeqID:"(.+?)",appID:219994525426954,endpoint:"(.+?)"/),
newFBMQTTMatch: html.match(/{"app_id":"219994525426954","endpoint":"(.+?)","iris_seq_id":"(.+?)"}/),
legacyFBMQTTMatch: html.match(/(\["MqttWebConfig",\[\],{fbid:")(.+?)(",appID:219994525426954,endpoint:")(.+?)(",pollingEndpoint:")(.+?)(3790])/)
}
let Slot = Object.keys(CHECK_MQTT);
var mqttEndpoint,region,irisSeqID;
Object.keys(CHECK_MQTT).map(function(MQTT) {
if (CHECK_MQTT[MQTT] && !region) {
switch (Slot.indexOf(MQTT)) {
case 0: {
irisSeqID = CHECK_MQTT[MQTT][1];
mqttEndpoint = CHECK_MQTT[MQTT][2];
region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
return;
}
case 1: {
irisSeqID = CHECK_MQTT[MQTT][2];
mqttEndpoint = CHECK_MQTT[MQTT][1].replace(/\\\//g, "/");
region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
return;
}
case 2: {
mqttEndpoint = CHECK_MQTT[MQTT][4];
region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
return;
}
}
return;
}
});
var ctx = {
userID: userID,
jar: jar,
clientID: clientID,
globalOptions: globalOptions,
loggedIn: true,
access_token: 'NONE',
clientMutationId: 0,
mqttClient: undefined,
lastSeqId: irisSeqID,
syncToken: undefined,
mqttEndpoint: mqttEndpoint,
region: region,
firstListen: true
};
var api = {
setOptions: setOptions.bind(null, globalOptions),
getAppState: function getAppState() {
return utils.getAppState(jar);
}
};
if (region && mqttEndpoint) {
//do sth
}
else {
log.warn("login", getText(Language.NoAreaData));
api["htmlData"] = html;
}
var defaultFuncs = utils.makeDefaults(html, userID, ctx);
fs.readdirSync(__dirname + "/src").filter((/** @type {string} */File) => File.endsWith(".js") && !File.includes('Dev_')).map((/** @type {string} */File) => api[File.split('.').slice(0, -1).join('.')] = require('./src/' + File)(defaultFuncs, api, ctx));
return {
ctx,
defaultFuncs,
api
};
}
/!-[ Function makeLogin ]-!/
/**
* @param {{ setCookie: (arg0: any, arg1: string) => void; }} jar
* @param {any} email
* @param {any} password
* @param {{ forceLogin: any; }} loginOptions
* @param {(err: any, api: any) => any} callback
* @param {any} prCallback
*/
function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
return function(/** @type {{ body: any; }} */res) {
var html = res.body,$ = cheerio.load(html),arr = [];
$("#login_form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
arr = arr.filter(function(v) {
return v.val && v.val.length;
});
var form = utils.arrToForm(arr);
form.lsd = utils.getFrom(html, "[\"LSD\",[],{\"token\":\"", "\"}");
form.lgndim = Buffer.from("{\"w\":1440,\"h\":900,\"aw\":1440,\"ah\":834,\"c\":24}").toString('base64');
form.email = email;
form.pass = password;
form.default_persistent = '0';
form.locale = 'en_US';
form.timezone = '240';
form.lgnjs = ~~(Date.now() / 1000);
html.split("\"_js_").slice(1).map((/** @type {any} */val) => {
jar.setCookie(utils.formatCookie(JSON.parse("[\"" + utils.getFrom(val, "", "]") + "]"), "facebook"),"https://www.facebook.com")
});
logger.Normal(Language.OnLogin);
return utils
.post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, form, loginOptions)
.then(utils.saveCookies(jar))
.then(function(/** @type {{ headers: any; }} */res) {
var headers = res.headers;
if (!headers.location) throw { error: Language.InvaildAccount };
// This means the account has login approvals turned on.
if (headers.location.indexOf('https://www.facebook.com/checkpoint/') > -1) {
logger.Warning(Language.TwoAuth);
var nextURL = 'https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php';
return utils
.get(headers.location, jar, null, loginOptions)
.then(utils.saveCookies(jar))
.then(async function(/** @type {{ body: any; }} */res) {
if (!await Database.get('ThroughAcc')) {
await Database.set('ThroughAcc', email);
}
else {
if (String((await Database.get('ThroughAcc'))).replace(RegExp('"','g'), '') != String(email).replace(RegExp('"','g'), '')) {
await Database.set('ThroughAcc', email);
if (await Database.get('Through2Fa')) {
await Database.delete('Through2Fa');
}
}
}
var html = res.body,$ = cheerio.load(html), arr = [];
$("form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
arr = arr.filter(v => { return v.val && v.val.length });
var form = utils.arrToForm(arr);
if (html.indexOf("checkpoint/?next") > -1) {
setTimeout(() => {
checkVerified = setInterval((_form) => {}, 5000, {
fb_dtsg: form.fb_dtsg,
jazoest: form.jazoest,
dpr: 1
});
}, 2500);
switch (global.Fca.Require.Priyansh.Login2Fa) {
case true: {
try {
const question = question => {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise(resolve => {
rl.question(question, answer => {
rl.close();
return resolve(answer);
});
});
};
async function EnterSecurityCode() {
try {
var Through2Fa = await Database.get('Through2Fa');
if (Through2Fa) {
Through2Fa.map(function(/** @type {{ key: string; value: string; expires: string; domain: string; path: string; }} */c) {
let str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
jar.setCookie(str, "http://" + c.domain);
})
var from2 = utils.arrToForm(arr);
from2.lsd = utils.getFrom(html, "[\"LSD\",[],{\"token\":\"", "\"}");
from2.lgndim = Buffer.from("{\"w\":1440,\"h\":900,\"aw\":1440,\"ah\":834,\"c\":24}").toString('base64');
from2.email = email;
from2.pass = password;
from2.default_persistent = '0';
from2.locale = 'en_US';
from2.timezone = '240';
from2.lgnjs = ~~(Date.now() / 1000);
return utils
.post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, from2, loginOptions)
.then(utils.saveCookies(jar))
.then(function(/** @type {{ headers: any; }} */res) {
var headers = res.headers;
if (!headers['set-cookie'][0].includes('deleted')) {
logger.Warning(Language.ErrThroughCookies, async function() {
await Database.delete('Through2Fa');
});
process.exit(1);
}
if (headers.location && headers.location.indexOf('https://www.facebook.com/checkpoint/') > -1) {
return utils
.get(headers.location, jar, null, loginOptions)
.then(utils.saveCookies(jar))
.then(function(/** @type {{ body: any; }} */res) {
var html = res.body,$ = cheerio.load(html), arr = [];
$("form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
arr = arr.filter(v => { return v.val && v.val.length });
var from2 = utils.arrToForm(arr);
if (html.indexOf("checkpoint/?next") > -1) {
setTimeout(() => {
checkVerified = setInterval((_form) => {}, 5000, {
fb_dtsg: from2.fb_dtsg,
jazoest: from2.jazoest,
dpr: 1
});
}, 2500);
if (!res.headers.location && res.headers['set-cookie'][0].includes('checkpoint')) {
try {
delete from2.name_action_selected;
from2['submit[Continue]'] = $("#checkpointSubmitButton").html();
return utils
.post(nextURL, jar, from2, loginOptions)
.then(utils.saveCookies(jar))
.then(function() {
from2['submit[This was me]'] = "This was me";
return utils.post(nextURL, jar, from2, loginOptions).then(utils.saveCookies(jar));
})
.then(function() {
delete from2['submit[This was me]'];
from2.name_action_selected = 'save_device';
from2['submit[Continue]'] = $("#checkpointSubmitButton").html();
return utils.post(nextURL, jar, from2, loginOptions).then(utils.saveCookies(jar));
})
.then(async function(/** @type {{ headers: any; body: string | string[]; }} */res) {
var headers = res.headers;
if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) throw { error: "wtf ??:D" };
var appState = utils.getAppState(jar,false);
await Database.set('Through2Fa', appState);
return loginHelper(appState, email, password, loginOptions, callback);
})
.catch((/** @type {any} */e) => callback(e));
}
catch (e) {
console.log(e)
}
}
}
})
}
return utils.get('https://www.facebook.com/', jar, null, loginOptions).then(utils.saveCookies(jar));
}).catch((/** @type {any} */e) => console.log(e));
}
}
catch (e) {
await Database.delete('Through2Fa');
}
var code = await question(Language.EnterSecurityCode);
try {
form.approvals_code = code;
form['submit[Continue]'] = $("#checkpointSubmitButton").html();
var prResolve,prReject;
var rtPromise = new Promise((resolve, reject) => { prResolve = resolve; prReject = reject; });
if (typeof code == "string") { //always strings
utils
.post(nextURL, jar, form, loginOptions)
.then(utils.saveCookies(jar))
.then(function(/** @type {{ body: string | Buffer; }} */res) {
var $ = cheerio.load(res.body);
var error = $("#approvals_code").parent().attr("data-xui-error");
if (error) {
logger.Warning(Language.InvaildTwoAuthCode,function() { EnterSecurityCode(); }); //bruh loop
};
})
.then(function() {
delete form.no_fido;delete form.approvals_code;
form.name_action_selected = 'save_device'; //'save_device' || 'dont_save;
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
})
.then(async function(/** @type {{ headers: any; body: string | string[]; }} */res) {
var headers = res.headers;
if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) {
try {
delete form.name_action_selected;
form['submit[Continue]'] = $("#checkpointSubmitButton").html();
return utils
.post(nextURL, jar, form, loginOptions)
.then(utils.saveCookies(jar))
.then(function() {
form['submit[This was me]'] = "This was me";
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
})
.then(function() {
delete form['submit[This was me]'];
form.name_action_selected = 'save_device';
form['submit[Continue]'] = $("#checkpointSubmitButton").html();
return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
})
.then(async function(/** @type {{ headers: any; body: string | string[]; }} */res) {
var headers = res.headers;
if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) throw { error: "wtf ??:D" };
var appState = utils.getAppState(jar,false);
await Database.set('Through2Fa', appState);
return loginHelper(appState, email, password, loginOptions, callback);
})
.catch((/** @type {any} */e) => callback(e));
}
catch (e) {
console.log(e)
}
}
var appState = utils.getAppState(jar,false);
if (callback === prCallback) {
callback = function(/** @type {any} */err, /** @type {any} */api) {
if (err) return prReject(err);
return prResolve(api);
};
}
await Database.set('Through2Fa', appState);
return loginHelper(appState, email, password, loginOptions, callback);
})