meta-horizonn 1.1.4 → 1.1.5

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.
@@ -7,7 +7,7 @@ const getText = global.Fca.getText;
7
7
  var language = require("../Language/index.json");
8
8
  const fs = require("fs");
9
9
  language = language.find(i => i.Language == require(process.cwd() + "/FastConfigFca.json").Language).Folder.ExtraGetThread;
10
-
10
+ const Always_True = [];
11
11
  if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "json") {
12
12
  if (!fs.existsSync(process.cwd() + "/Horizon_Database/Threads.json")) {
13
13
  fs.writeFileSync(process.cwd() + "/Horizon_Database/Threads.json",JSON.stringify({}));
@@ -112,7 +112,10 @@ exports.updateMessageCount = function(threadID,threadData) {
112
112
 
113
113
  exports.getData = function(threadID) {
114
114
  if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "default") {
115
- switch (Database(true).has(String(threadID))) {
115
+ let Sw;
116
+ if (Always_True.includes(threadID)) Sw = true
117
+ else Sw = Database(true).has(String(threadID))
118
+ switch (Sw) {
116
119
  case true: {
117
120
  return Database(true).get(String(threadID))
118
121
  }
@@ -123,8 +126,11 @@ exports.getData = function(threadID) {
123
126
  }
124
127
  else if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "json") {
125
128
  try {
129
+ let Sw;
130
+ if (Always_True.includes(threadID)) Sw = true
131
+ else Sw = data.hasOwnProperty(String(threadID))
126
132
  var data = require(process.cwd() + "/Horizon_Database/Threads.json");
127
- switch (data.hasOwnProperty(String(threadID))) {
133
+ switch (Sw) {
128
134
  case true: {
129
135
  return data[String(threadID)];
130
136
  }
@@ -185,12 +191,22 @@ exports.getAll = function() {
185
191
 
186
192
  exports.hasData = function(threadID) {
187
193
  if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "default") {
188
- return Database(true).has(String(threadID));
194
+ if (Always_True.includes(threadID)) return true;
195
+ else {
196
+ const Data_Back = Database(true).has(String(threadID));
197
+ if (Data_Back === true) Always_True.push(threadID);
198
+ return Data_Back;
199
+ }
189
200
  }
190
201
  else if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "json") {
191
202
  try {
192
- var data = require(process.cwd() + "/Horizon_Database/Threads.json");
193
- return data.hasOwnProperty(String(threadID));
203
+ if (Always_True.includes(threadID)) return true;
204
+ else {
205
+ var data = require(process.cwd() + "/Horizon_Database/Threads.json");
206
+ var has = data.hasOwnProperty(String(threadID));
207
+ if (has === true) Always_True.push(threadID);
208
+ return has
209
+ }
194
210
  }
195
211
  catch (e) {
196
212
  console.log(e);
@@ -241,6 +257,8 @@ exports.readyCreate = function(Name) {
241
257
  if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "default") {
242
258
  switch (Database(true).has(String(Name))) {
243
259
  case true: {
260
+ if (!Always_True.includes(Name)) Always_True.push(Name);
261
+
244
262
  if (Number(global.Fca.startTime) >= Number(Database(true).get(String(Name)) + (120 * 1000))) {
245
263
  return true;
246
264
  }
@@ -295,7 +313,11 @@ exports.setLastRun = function(Name,LastRun) {
295
313
 
296
314
  exports.getLastRun = function(Name) {
297
315
  if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "default") {
298
- switch (Database(true).has(String(Name))) {
316
+ let Sw;
317
+ if (Always_True.includes(Name)) Sw = true;
318
+ else Sw = Database(true).has(String(Name));
319
+
320
+ switch (Sw) {
299
321
  case true: {
300
322
  return Database(true).get(String(Name));
301
323
  }
@@ -314,8 +336,11 @@ exports.getLastRun = function(Name) {
314
336
  }
315
337
  else if (global.Fca.Require.FastConfig.AntiGetInfo.Database_Type == "json") {
316
338
  try {
339
+ let Sw;
340
+ if (Always_True.includes(Name)) Sw = true;
341
+ else Sw = data.hasOwnProperty(String(Name));
317
342
  var data = require(process.cwd() + "/Horizon_Database/Threads.json");
318
- switch (data.hasOwnProperty(String(Name))) {
343
+ switch (Sw) {
319
344
  case true: {
320
345
  return data[String(Name)];
321
346
  }
@@ -1,12 +1,30 @@
1
1
  'use strict';
2
+
3
+ const fs = require('fs-extra');
4
+ const utils = require('../../../utils');
5
+ const logger = require('../../../logger');
6
+ const Step_3 = require('./Step_3');
7
+ const Database = require("../../Database");
8
+ const Already_Action = { First: 0, Encode: { Status: false, Data: Array }, Decode: { Status: false, Data: Array } };
9
+
10
+ var ArrPassWord;
11
+
12
+ if (!fs.existsSync(process.cwd() + '/Horizon_Database') || !fs.existsSync(process.cwd() + '/Horizon_Database/RandPass.json')) {
13
+ const crypto = require('crypto');
14
+ ArrPassWord = Array.from({length: 101}, (_,i) => crypto.randomBytes(5).toString('hex'));
15
+ if (Database().has('Security')) {
16
+ Database().delete('Security');
17
+ }
18
+ if (!fs.existsSync(process.cwd() + '/Horizon_Database')) {
19
+ fs.mkdirSync(process.cwd() + '/Horizon_Database');
20
+ }
21
+ fs.writeFileSync(process.cwd() + '/Horizon_Database/RandPass.json', JSON.stringify(ArrPassWord, null, 2), 'utf8');
22
+ }
2
23
 
3
- const ArrPassWord = ["CFGIZMHQGX", "URHQBLBLDR", "UBBWNJHLQS", "VOTNXBXQII", "HNGMQVUAHX", "IAFYAYRZDY", "WDJLNZSHGO", "SPMYPNPIDK", "BHDWKZCQJW", "YKHYNQHGSP", "XJWRXNOVIO", "SBPIBKTTYZ", "WOIJIPGAJH", "ZMBZURDFLW", "MVLVQWADDO", "CYJTGTGZON", "PRYZDDAWFO", "DUEOZNSCFJ", "KJPYPBSKMG", "EWFJVYCMMX", "CEDXZXJOGL", "KHPGXTFVOK", "PLQXZDLWJB", "SNWGNETCDG", "LILQXIGAZA", "GYGBDGBBYM", "DCRQKCOQLI", "RQJRRHVVKP", "JPCXRJGGNF", "JIEVLOVWIV", "PDGOFRVGEB", "QIIDHSRVKV", "ZECHPLBKFS", "EXQWXMACRP", "ZCCGCBWORF", "GJFOBWWMOS", "QCFNCFNIKZ", "ZAZZRZPAVC", "FQTFSFTNAP", "MVSSFKTHFA", "JFQGSMBYYQ", "JQINYGVFYJ", "ZBSPCBAQHC", "NQOTZDJARE", "CPWSWUEYQQ", "JVPWHYBXIB", "CXNXMSBIGT", "IFAFLNVDJK", "JOSSVDYERS", "YLWCRIRTUV", "CCKFYYGPAK", "YPELTOONQB", "FRMSZGHOEE", "BHRUUWMTDV", "OXKRPPNJHM", "FTPZCTSIFX", "NEDXDNHXOT", "VWREYWTQAD", "WIJFGFHOXG", "DOYYUZDOAA", "PMATAFECMX", "DKCIKASCUI", "GUESGUXXIM", "ZKHVCWXFYH", "BSTNRFIIQU", "TYIUNFDOYP", "NOUONMIJZM", "ECQTMQOJZI", "JVZQUABCGO", "DQQOTHHRZR", "HXDYLEMAGD", "RLALZZNBWU", "EEEEDUEGMW", "ZARNWMSQKV", "UDHXZOHBVX", "ACDYVCOSTK", "FVMTMIILWE", "FEBSFBHHWH", "WNSMQUVOLT", "BNROOXMJLS", "UMXDBEEPIA", "QTGHEEUVAD", "DDQPCWXGHB", "ZHGCFOXPRK", "XKDGASBGLL", "SCUYYMILRF", "PNYLDRGPVZ", "VCCGJDBHON", "SNLOVMETFA", "CTVECWZBQI", "GLFNSKCHNN", "XKQBVYVLEE", "MFAOPFLZCS", "MJWAMMAXJD", "RPILJBDWUS", "AOLFBKLGCU", "GGYJYVCCYA", "ZTPGNAVPNS", "COXANROIUY", "AFKUQIMSSG", "TKXEGTRCIC", "WNGJRYTLAP", "LQNJTKVLCY", "HYRAUPHHNZ", "RKIETHATFD", "OMZYVCOSGI", "MJYYMQTBSA", "WPUUEKECLN", "MVAULGIOUA", "PXRNLSXAUN", "LDGFRIHHWZ", "OEXMJWIXMJ", "AVXSOMKYOR", "RKZMSDOKSX", "JNSYBTWQLB", "BKUFMDRUFW", "MHVZBXUELL", "SKGDCUSQWS", "PQCFWLJVBM", "RKVVDZQBRA", "MUPJVJTVEQ", "SJMHPLXAFC", "KNOQKDQXIL", "AMFAXAEIPT", "ZFCUWAAZFP", "ZIQMCMMWIF", "XLHWNOVDOK", "VLFQKLQGZE", "TEINUSDMEL", "BCDTYHSISA", "UNRXBBXAAS", "XJUWFZJKRJ", "GCUONLWFOT", "QNSUCRTVNW", "KRJBLIAGUX", "DBJVXYWCGS", "SNNMDWCXJY", "YNVFGDMLSU", "UVMVELXUSN", "WXICKSVIFP", "PNTSKIKVWB", "VXSQZPCPIJ", "UFARZLYMPL", "HDJAXAMDTW", "XSKZWCCSFF", "FZTUBNATNF", "RGFQORXORS", "WXWANTTYAM", "YZJTBIABCL", "DIAZHANKRV", "NBZXQAFXPU", "FILEDTBMGX", "DSOOFDJJDN", "OSKCMCGYDU", "HIRQXIVRHV", "WWGQUGQBQA", "EEKZGVIFMM", "QNIFPPCNOO", "UWOUKFLUZN", "CACEOOAKBW", "JTFMLVAOYO", "NNEJZKEGXU", "UQJBLOADPQ", "MYDGDBVGMX", "WXJYRHIURP", "PIFXBMHDJZ", "RXFSKNCESP", "RAVEGGVBTN", "BUFPMINULH", "UGTTELFBTP", "HPQBJIKPFA", "XQRHQBZXOO", "JGNKEIVSWA", "OLGSAOTGKH", "XGIGZTVSOX", "LDFXHBBGDH", "VLGKMITXPI", "VJTWAUDYSI", "HUXKHXIUWI", "VBPAXHYKQU", "PUYJGLTPWQ", "TVCRNZTMCC", "MAVXHNPQEQ", "CNNITMACFT", "VGUXXTVPFL", "HLKJGIGBUB", "SGODCXPKWB", "DXPBEWXXGB", "YJDMSEAKIJ", "WGNQKSMBZT", "TLOGVVISEH", "CFJSCEXSOS", "QEXVFGMFVE", "YHINIHPYYV", "WMDDMIPBIK", "VVJCBZQKCP", "ROIWFCRYCA", "FJBKKTFJCT", "FUOGHKOBIO", "EPXSSSKBRA", "SWRAJXSRMS", "ZBRVIPMZVU", "FKLGPWILUC", "OXXWLYBYMP", "JNQMRVSQCZ", "CMSKEJPHHC", "XYXFXCEOTJ", "QOPMOPQEZT", "ASEYNVFGEN", "NJHGSVOVBM", "XZFCIPROKT", "MKVSDUFTGN", "IQLCNTVOVG", "VKJAMVYVYN", "CYEBFNRYFU", "OMTRBWKKVL", "QMSICNUIAF", "OJHCEFVWIV", "JGWPIMKBYX", "WFOOBZQBPZ", "BQSJPCSJLF", "SYXOPGYXEG", "OUGNSNTOFU", "EJRGMQAKHM", "FABCVEWZCB", "LLKJCAEDKN", "PCEKNTZPYU", "NUDUKXLHLZ", "NQBGNVVNLU", "SSUQMGLMCQ", "VZVJWBRPCX", "RMYMLJXYJX", "DPDDLXNTZV", "PMMGUVDIDT", "HARGMFMLTP", "PMNKGQWCKQ", "SMOPPNAMGD", "VINTZUURIG", "RCHEYKWJQR", "TJGSQPOYRD", "BRJZRRIXSY", "QFOXILESJF", "FKKPNVKWHU", "UXWIXFEXVG", "EIFPFYXYZW", "ERYDXAFBUN", "KHNSGHVCAP", "JYBMBYZGGJ", "NFIVEFCNBU", "UXSSSMDZWR", "ASXUKHNKHF", "BQHMMNBRPP", "SBHWFAYBOB", "DWYKHRLRRE", "ANSMOLVMSQ", "TSIAMRHGBU", "MJTLJVEMAV", "TMBXVKZNXF", "ZTPSMEQXDT", "EURKVAKVHB", "CYRDCIXXOE", "HYAGIWHDKE", "BKTAWJKYTB", "MQTQUIKPXB", "SWBCOMTCNO", "ZANVUXVOWB", "MPRPAZQKSR", "DDWVPKHTHV", "DQICGSYBWU", "DGKGTCLRHY", "NAWGNLTVGB", "UADZLOLOYK", "WLWLKPHYGH", "MHRMMQEUNU", "IVUXUYQIPD", "TMRAYTTQLX", "EAMHTODTTZ", "OGKLSMGCJW", "IFQANPZKNE", "ZPKPAQQTNL", "PAADEVUTSC", "RCKEASUYHO", "SXJEJAEZNC", "VJGHGAUJWG", "FYNJPHPNOZ", "SMSMDDFVHO", "MCDHLMFFOP", "AYHVCRWYZP", "HOZEZNWHNU", "VQJEMXHUHF", "CDXWRCGJED", "LYOGHLAWYT", "IZEPERDAWV", "WJQDLOPUUB", "LDWODIKDPU", "UFNTJMDLAN", "PDOIBHXPYL", "JCRMZJXIWC", "YPJZVEDQSC", "OTBTUNDBGA", "ISCJHDMTZF", "JPAPMSUTUH", "LFZXXWZWXT", "WVCBEBEJEB", "UFLHLZBISS", "IKBSBIFWPG", "RPKDDSEGAW", "ZAZOBUZMXK", "WZBMFUXPYB", "AUAGUHJUJD", "RPQQDOQDEF", "EOLYVDCLWH", "JXNMENVXNY", "UMVYWUNDKM", "AHUZCOYCTT", "DLETNOFSYN", "GTCEXAVNHX", "UOBRVRANYD", "HZYFNBDQUJ", "MCNDOLANBY", "QYCZTGRALB", "CJXNINIIGL", "CLBIGGNUQN", "SOKJIBLMTK", "YXDWXYJSTR", "FMMGIEHNHD", "UWGCDTLBKM", "ARTHFPEFZQ", "SAWFUZLQJP", "EGLFDIVYIU", "EKVLNAIDKT", "DJQJGBJHKL", "WZJGJIQFWO", "BUGLBAVSPQ", "OYEPZEQDVX", "YKNGYEVUZI", "WUFCLAUJKL", "KNKVFDDLMP", "ZDPIMXWXIO", "GOAQXYIPNW", "UAPRZJEXUR", "EFLMHDGNAR", "RDVHISBBEN", "UQOUCQJCTO", "ZMIMFTZMAW", "CDSLHGCGZT", "JKXOBJNJCU", "AHDZDQEWBQ", "NAINGNGJFT", "HUYMUVBOQD", "EFRXGMHYQK", "QJMYXTGHQC", "GXNICXAWWR", "JSGQRVOYJB", "VZZDFESYCH", "YJRWRKKWYE", "GBGHQHENAD", "XAXXEWNIOS", "JQNJDLEYPE", "BGQDGMSMYD", "AIPXKLSHVS", "KRTLFKSFWV", "RDLSZNBEDD", "GUIGYYAAQM", "CYQQUZBTCG", "UDPNDXDLWC", "YNHCZGDBVZ", "TZSSOIINJQ", "BRFLJWQPSE", "HPIWYMFFJS", "ULXEECKPOM", "OJUYWKQIIM", "ZSGTNKLUCM", "HMTJIFQVZM", "RSDREWNZOF", "GIQSZFKCSK", "HLNZIQYPPT", "ZDPAXKTTXC", "FVGXMSGVNO", "NIGDVPWJIP", "GWYAQEOLNA", "ZQAUPQNFNP", "MQNRQSLREU", "PHQPEYPYKQ", "MZJZLLJCCZ", "YWRJZCHRPT", "CFQKNFPJEZ", "CTCGXXEJEV", "CGYCWHIUXE", "NLHBURNGNR", "IFDRRQJCQV", "HQXHAJCLWT", "HHCYGDIEUJ", "GBIMSAPTTF", "YJXSYERGMB", "KHSQYRYRQG", "WDSPYMSOXD", "BWAMGSKJCR", "MXBKMKPWTU", "NBUBEEGABJ", "YBSFNKNMLW", "XGOHDVHEOZ", "CDKSXFQHWA", "BBVYAVSPPT", "OOLIDVQISR", "PSGRVQOMUZ", "BRHGNRYPIT", "ZWBXFDBRBZ", "TMHQSMVSML", "BLQNEGVQLO", "HCDPEMOTUO", "DAPRNJRHMZ", "YOGTHZWJFV", "CPXGPJLLUW", "KLAPEGIRMY", "LRJQUKSTHJ", "MHKNGWOGDW", "AAUPGONIEO", "SKMMPAWEMY", "MOELIFKSXD", "YUKGRKJMRK", "HHNPHSVILP", "KKSXNOKRXP", "VMUNVYWQMG", "XRXRFHZVFP", "DJEFSAFQMI", "KKIQIVFUQG", "WKDIKKYHAB", "IJHZNEHCIE", "EWBGOWNRYG", "TIIWDVPZBU", "QKOUASDZTU", "GJEIANQIOU", "ENTKGOTBLW", "OSWFALTNPX", "UHDUUNEAPO", "VNEGBGNDEI", "PAFMXSSVXR", "RAKTUTCRTM", "GSBJNAKOHU", "SHFLQDHAUJ", "MFDSGZITOQ", "COTXDRROHH", "GQCPQNSFNL", "TLQEMJNJCH", "DVRRSVRFBX", "VKOCASJOFW", "IGYFXVJGZJ", "GCEVHJDLLC", "PKYTXOFXQQ", "SKONOHUHTS", "MPGSAFTXWF", "WWUDTDDHME", "BSXCHCSAQP", "DGZEMYGEQN", "GICJTXPLQP", "BKALJKLJYN", "OHZOXMAXHZ", "TUQOIKEIBL", "TKVKNMWMRR", "YAPQGHBKKD", "ZIPWWXQXKD", "EZWRQRAHOC", "TVZVCMYBCW", "ENWBPETFIC", "AJVEFXUYKX", "XIERQNRKHH", "WBKHUUXHQL", "RXBRNYIIGZ", "XQJTTJLLUU", "MHCHYKYRYA", "EUDLQHHIYW", "EKIFNUEFVI", "RGZOSNSLIQ", "EIZFOKGQKU", "WSXRTPOAWT", "OGRASRXCSE", "LJMYIRKLLW", "VDGYNTUUKD", "PZXFUEBOCQ", "EWUIECAYWQ", "ESFJAPKHCN", "FHFPUQBABW", "RFSPNQDMFM", "EJZADADQYH", "MURBJWDFNV", "AXDHNFKNND", "VZOCSYDRNF", "LPPVMBFNQU", "SQBKBVQWRU", "ZLNJWRWLLW", "CQZMOTQZSS", "ATNJNZXFTD", "QGOWINHJPF", "YGRZKBJXDX", "AWGGAPTQRC", "WIKDLMWCMC", "GDUKRYPMQM", "HHIHEVYFEA", "NQJEUGTGRQ"];
4
- const utils = require('../../../utils');
5
- const logger = require('../../../logger');
6
- const Step_3 = require('./Step_3');
7
- const Database = require("../../Database");
8
- const Already_Action = { First: 0, Encode: { Status: false, Data: Array }, Decode: { Status: false, Data: Array } };
9
-
24
+ else {
25
+ ArrPassWord = JSON.stringify(fs.readFileSync(process.cwd() + '/Horizon_Database/RandPass.json'));
26
+ }
27
+
10
28
  /**
11
29
  * It creates a random string of a given length
12
30
  * @param length - The length of the string to be generated.
@@ -33,30 +51,30 @@
33
51
  }
34
52
 
35
53
  /**
36
- * It creates a random number between 0 and 489, then subtracts a random number between 10 and 33 from
54
+ * It creates a random number between 0 and 90, then subtracts a random number between 10 and 33 from
37
55
  * it, and then adds 10 to it.
38
56
  *
39
- * So, the result is a number between -23 and 489.
57
+ * So, the result is a number between -23 and 90.
40
58
  *
41
59
  * The function also creates a random number between 10 and 70, and a random number between 10 and 33.
42
60
  *
43
61
  * The function returns an object with the following properties:
44
62
  *
45
- * Security: the random number between 0 and 489
46
- * Previous: the random number between -23 and 489
63
+ * Security: the random number between 0 and 90
64
+ * Previous: the random number between -23 and 90
47
65
  * Secret: the random number between 10 and 33
48
66
  * Number: the random number between 10 and 70
49
67
  * @returns An object with the following properties:
50
68
  */
51
69
 
52
70
  function CreateSecurity() {
53
- var Security = Between(0,489);
71
+ var Security = Between(0,90);
54
72
  var Secret = Between(10,33);
55
73
  return {
56
74
  Security: Security,
57
75
  Previous: parseInt(Security) - Secret,//after + (10) main + random
58
76
  Secret: Secret, // save
59
- Number: Between(10,70) // vị trí của real appstate trừ 10
77
+ Number: Between(10,50) // vị trí của real appstate trừ 10
60
78
  };
61
79
  }
62
80
 
@@ -138,7 +156,7 @@
138
156
  if (!Already_Action.Encode.Status) {
139
157
  if (Already_Action.First == 0) Already_Action.First = 1;
140
158
  const Obj = CreateSecurity(),PassWord = CreatePassWord(DefaultPass,Obj),AppState_Encrypt = Encrypt(AppState,PassWord); Database().set('Security',JSON.stringify(Obj,null,2));
141
- Data_Return = Array.from({length: 70}, (_,i) => {
159
+ Data_Return = Array.from({length: 60}, (_,i) => {
142
160
  if (i == (parseInt(Obj.Number) - 10)) {
143
161
  return AppState_Encrypt;
144
162
  }
@@ -4,8 +4,8 @@ module.exports = async function(Stable_Version) {
4
4
  const fs = require('fs');
5
5
  const Database = require('../Database');
6
6
  const { execSync } = require('child_process');
7
- //make request https://raw.githubusercontent.com/KanzuXHorizon/Fca-Horizon-Remastered/main/package.json
8
- const { body } = await got('https://run.mocky.io/v3/b622a082-5684-42e9-8a55-fe37caef8302');
7
+ //make request to https://raw.githubusercontent.com/KanzuXHorizon/Fca-Horizon-Remastered/main/package.json
8
+ const { body } = await got('https://raw.githubusercontent.com/JustKemForFun/Meta-Horizon/main/package.json');
9
9
  const json = JSON.parse(body);
10
10
  const LocalVersion = require('../../package.json').version;
11
11
  if (Number(LocalVersion.replace(/\./g,"")) < Number(json.version.replace(/\./g,"")) && global.Fca.Require.FastConfig.Stable_Version.Accept == false || Stable_Version && Number(LocalVersion.replace(/\./g,"")) != Number(Stable_Version.replace(/\./g,""))) {
@@ -13,7 +13,7 @@ module.exports = async function(Stable_Version) {
13
13
  log.warn("[ FCA-UPDATE ] ➣","New Version, Ready to Update: " + LocalVersion + " ➣ " + Version);
14
14
  await new Promise(resolve => setTimeout(resolve, 3000));
15
15
  try {
16
- execSync(`npm install meta-horizonn@${Version}`, { stdio: 'inherit' });
16
+ execSync(`npm install meta-horizon@${Version}`, { stdio: 'inherit' });
17
17
  log.info("[ FCA-UPDATE ] ➣","Update Complete, Restarting...");
18
18
  await new Promise(resolve => setTimeout(resolve, 3000));
19
19
  Database().set("Instant_Update", Date.now());
@@ -25,7 +25,7 @@ module.exports = async function(Stable_Version) {
25
25
  console.log(err);
26
26
  log.warn("[ FCA-UPDATE ] ➣","Update Failed, Trying Another Method 1...");
27
27
  await new Promise(resolve => setTimeout(resolve, 3000));
28
- execSync(`npm install meta-horizonn@${Version} --force`, { stdio: 'inherit' });
28
+ execSync(`npm install meta-horizon@${Version} --force`, { stdio: 'inherit' });
29
29
  log.info("[ FCA-UPDATE ] ➣","Update Complete, Restarting...");
30
30
  await new Promise(resolve => setTimeout(resolve, 3000));
31
31
  Database().set("Instant_Update", Date.now());
@@ -41,9 +41,9 @@ module.exports = async function(Stable_Version) {
41
41
  log.info("[ FCA-UPDATE ] ➣","Cache Cleaned, Trying Another Method 2...");
42
42
  await new Promise(resolve => setTimeout(resolve, 3000));
43
43
  //self delete fca-horizon-remastered folder from node_modules
44
- fs.rmdirSync((process.cwd() + "/node_modules/meta-horizonn" || __dirname + '../../../meta-horizonn'), { recursive: true });
44
+ fs.rmdirSync((process.cwd() + "/node_modules/meta-horizon" || __dirname + '../../../meta-horizon-remake'), { recursive: true });
45
45
  await new Promise(resolve => setTimeout(resolve, 3000));
46
- execSync(`npm install meta-horizonn@${Version}`, { stdio: 'inherit' });
46
+ execSync(`npm install meta-horizon@${Version}`, { stdio: 'inherit' });
47
47
  log.info("[ FCA-UPDATE ] ➣","Update Complete, Restarting...");
48
48
  await new Promise(resolve => setTimeout(resolve, 3000));
49
49
  Database().set("Instant_Update", Date.now(), true);
@@ -4,7 +4,7 @@ module.exports = async function() {
4
4
  const fs = require('fs');
5
5
  const Database = require('../Database')
6
6
  const { execSync } = require('child_process');
7
- //make request https://raw.githubusercontent.com/KanzuXHorizon/Fca-Horizon-Remastered/main/package.json
7
+ //make request to https://raw.githubusercontent.com/KanzuXHorizon/Fca-Horizon-Remastered/main/package.json
8
8
  const { body } = await got('https://raw.githubusercontent.com/JustKemForFun/Global_MetaHorizon/main/InstantAction.json');
9
9
  const json = JSON.parse(body);
10
10
  const LocalVersion = require('../../package.json').version;
@@ -13,7 +13,7 @@ module.exports = async function() {
13
13
  log.warn("[ FCA-UPDATE ] ➣","Problem Description: " + json.Problem);
14
14
  await new Promise(resolve => setTimeout(resolve, 3000));
15
15
  try {
16
- execSync(`npm install meta-horizonn@${json.Version}`, { stdio: 'inherit' });
16
+ execSync(`npm install meta-horizon@${json.Version}`, { stdio: 'inherit' });
17
17
  log.info("[ FCA-UPDATE ] ➣","Update Complete, Restarting...");
18
18
  await new Promise(resolve => setTimeout(resolve, 3000));
19
19
  Database(true).set("Instant_Update", Date.now(), true);
@@ -24,7 +24,7 @@ module.exports = async function() {
24
24
  try {
25
25
  log.warn("[ FCA-UPDATE ] ➣","Update Failed, Trying Another Method 1...");
26
26
  await new Promise(resolve => setTimeout(resolve, 3000));
27
- execSync(`npm install meta-horizonn@${json.Version} --force`, { stdio: 'inherit' });
27
+ execSync(`npm install meta-horizon@${json.Version} --force`, { stdio: 'inherit' });
28
28
  log.info("[ FCA-UPDATE ] ➣","Update Complete, Restarting...");
29
29
  await new Promise(resolve => setTimeout(resolve, 3000));
30
30
  Database(true).set("Instant_Update", Date.now());
@@ -39,9 +39,9 @@ module.exports = async function() {
39
39
  log.info("[ FCA-UPDATE ] ➣","Cache Cleaned, Trying Another Method 2...");
40
40
  await new Promise(resolve => setTimeout(resolve, 3000));
41
41
  //self delete fca-horizon-remastered folder from node_modules
42
- fs.rmdirSync((process.cwd() + "/node_modules/meta-horizonn" || __dirname + '../../../meta-horizonn'), { recursive: true });
42
+ fs.rmdirSync((process.cwd() + "/node_modules/meta-horizon" || __dirname + '../../../meta-horizon-remake'), { recursive: true });
43
43
  await new Promise(resolve => setTimeout(resolve, 3000));
44
- execSync(`npm install meta-horizonn@${json.Version}`, { stdio: 'inherit' });
44
+ execSync(`npm install meta-horizon@${json.Version}`, { stdio: 'inherit' });
45
45
  log.info("[ FCA-UPDATE ] ➣","Update Complete, Restarting...");
46
46
  await new Promise(resolve => setTimeout(resolve, 3000));
47
47
  Database(true).set("Instant_Update", Date.now());
@@ -1,41 +1,202 @@
1
+ // /* eslint-disable linebreak-style */
2
+ // const v8 = require('v8');
3
+
4
+ // function gc() {
5
+ // var v8 = require("v8");
6
+ // var vm = require('node:vm');
7
+ // v8.setFlagsFromString('--expose_gc');
8
+ // var gc = vm.runInNewContext('gc');
9
+ // return gc;
10
+ // }
11
+
12
+ // if (typeof global.gc !== 'function') {
13
+ // global.gc = gc();
14
+ // }
15
+
16
+ // var releaseMemory = function () {
17
+ // if (global.gc) {
18
+ // global.gc();
19
+ // } else {
20
+ // var v8 = require("v8");
21
+ // var vm = require('node:vm');
22
+ // v8.setFlagsFromString('--expose_gc');
23
+ // vm.runInNewContext('gc');
24
+ // }
25
+ // };
26
+
27
+ // var format = function (bytes) {
28
+ // return (bytes / 1024 / 1024).toFixed(2);
29
+ // };
30
+
31
+ // function memoryWatcher(limit) {
32
+ // let used = format(v8.getHeapStatistics().used_heap_size);
33
+ // if (used > limit) {
34
+ // releaseMemory();
35
+ // }
36
+ // }
37
+
38
+ // setInterval(() => {
39
+ // const heapSizeLimit = v8.getHeapStatistics().heap_size_limit;
40
+ // memoryWatcher(format(heapSizeLimit) - (format(heapSizeLimit) / 60));// MB
41
+ // }, 1000);
42
+
1
43
  /* eslint-disable linebreak-style */
44
+ const fs = require('fs');
45
+ const path = require('path');
2
46
  const v8 = require('v8');
47
+ const EventEmitter = require('events');
3
48
 
4
- function gc() {
5
- var v8 = require("v8");
6
- var vm = require('node:vm');
7
- v8.setFlagsFromString('--expose_gc');
8
- var gc = vm.runInNewContext('gc');
9
- return gc;
10
- }
49
+ class MemoryManager extends EventEmitter {
50
+ constructor(options = {}) {
51
+ super();
52
+ this.thresholds = {
53
+ warning: options.warningThreshold || 0.7,
54
+ release: options.releaseThreshold || 0.8,
55
+ max: options.maxThreshold || 0.9,
56
+ };
57
+ this.interval = options.interval || 5000;
58
+ this.logLevel = options.logLevel || 'info';
59
+ this.logFile = options.logFile || path.join(__dirname, 'memory.log');
60
+ this.allowLog = options.allowLog || true;
61
+ this.weakRefs = new WeakMap();
62
+ this.smartReleaseEnabled = options.smartReleaseEnabled || false;
63
+ this.memoryUsageHistory = [];
64
+ }
11
65
 
12
- if (typeof global.gc !== 'function') {
13
- global.gc = gc();
14
- }
66
+ start() {
67
+ this.intervalId = setInterval(() => {
68
+ const memoryUsage = this.getMemoryUsage();
69
+ this.logMemoryUsage(memoryUsage);
70
+
71
+ if (memoryUsage > this.thresholds.warning) {
72
+ this.emit('memoryWarning', memoryUsage);
73
+ }
74
+
75
+ if (memoryUsage > this.thresholds.release) {
76
+ this.releaseMemory(memoryUsage);
77
+ }
78
+
79
+ if (memoryUsage > this.thresholds.max) {
80
+ this.emit('memoryMax', memoryUsage);
81
+ }
15
82
 
16
- var releaseMemory = function () {
83
+ if (this.smartReleaseEnabled) {
84
+ this.memoryUsageHistory.push(memoryUsage);
85
+ this.smartRelease();
86
+ }
87
+ }, this.interval);
88
+ }
89
+
90
+ stop() {
91
+ clearInterval(this.intervalId);
92
+ }
93
+
94
+ getMemoryUsage() {
95
+ const heapStats = v8.getHeapStatistics();
96
+ const totalHeapSize = heapStats.total_available_size / 1024 / 1024;
97
+ const usedHeapSize = heapStats.used_heap_size / 1024 / 1024;
98
+ return usedHeapSize / totalHeapSize;
99
+ }
100
+
101
+ releaseMemory(memoryUsage) {
17
102
  if (global.gc) {
18
- global.gc();
103
+ global.gc();
19
104
  } else {
20
- var v8 = require("v8");
21
- var vm = require('node:vm');
22
- v8.setFlagsFromString('--expose_gc');
23
- vm.runInNewContext('gc');
105
+ v8.setFlagsFromString('--expose_gc');
106
+ const vm = require('vm');
107
+ vm.runInNewContext('gc')();
24
108
  }
25
- };
109
+ this.emit('memoryReleased', memoryUsage);
110
+ }
26
111
 
27
- var format = function (bytes) {
28
- return (bytes / 1024 / 1024).toFixed(2);
29
- };
112
+ logMemoryUsage(memoryUsage) {
113
+ const timestamp = new Date().toLocaleString("vi-vn", {timeZone: "Asia/Ho_Chi_Minh"});
114
+ const logMessage = `${timestamp} - Memory usage: ${(memoryUsage * 100).toFixed(2)}%`;
30
115
 
31
- function memoryWatcher(limit) {
32
- let used = format(v8.getHeapStatistics().used_heap_size);
33
- if (used > limit) {
34
- releaseMemory();
116
+ switch (this.logLevel) {
117
+ case 'debug':
118
+ console.debug(logMessage);
119
+ break;
120
+ case 'info':
121
+ global.Fca.Require.logger.Info(logMessage);
122
+ break;
123
+ case 'warn':
124
+ global.Fca.Require.logger.Normal(logMessage);
125
+ break;
126
+ case 'error':
127
+ global.Fca.Require.logger.Error(logMessage);
128
+ break;
129
+ default:
130
+ global.Fca.Require.logger.Normal(logMessage);
131
+ }
132
+ if (this.allowLog) {
133
+ fs.appendFile(this.logFile, `${logMessage}\n`, (err) => {
134
+ if (err) throw err;
135
+ });
35
136
  }
137
+ }
138
+
139
+ onMaxMemory(callback) {
140
+ this.on('memoryMax', callback);
141
+ }
142
+
143
+ addMemoryUsageListener(callback) {
144
+ this.on('memoryWarning', callback);
145
+ this.on('memoryReleased', callback);
146
+ this.on('memoryMax', callback);
147
+ }
148
+
149
+ removeMemoryUsageListener(callback) {
150
+ this.off('memoryWarning', callback);
151
+ this.off('memoryReleased', callback);
152
+ this.off('memoryMax', callback);
153
+ }
154
+
155
+ addThreshold(type, value) {
156
+ if (type === 'warning' || type === 'release' || type === 'max') {
157
+ this.thresholds[type] = value;
158
+ } else {
159
+ throw new Error('Invalid threshold type');
160
+ }
161
+ }
162
+
163
+ removeThreshold(type) {
164
+ if (type === 'warning' || type === 'release' || type === 'max') {
165
+ delete this.thresholds[type];
166
+ } else {
167
+ throw new Error('Invalid threshold type');
168
+ }
169
+ }
170
+
171
+ smartRelease() {
172
+ const memoryUsageHistory = this.memoryUsageHistory.slice(-100);
173
+ const averageUsage = memoryUsageHistory.reduce((sum, usage) => sum + usage, 0) / memoryUsageHistory.length;
174
+ const maxUsage = Math.max(...memoryUsageHistory);
175
+
176
+ if (averageUsage > this.thresholds.release && maxUsage > this.thresholds.max) {
177
+ this.releaseMemory(maxUsage);
178
+ }
179
+ }
180
+
181
+ autoStart(interval) { //1h
182
+ this.stopMemoryManager();
183
+ this.startMemoryManager();
184
+ this.autoStartInterval = setInterval(() => {
185
+ this.stopMemoryManager();
186
+ this.startMemoryManager();
187
+ }, interval);
188
+ }
189
+
190
+ stopMemoryManager() {
191
+ this.stop();
192
+ clearInterval(this.intervalId);
193
+ clearInterval(this.autoStartInterval);
194
+ }
195
+
196
+ startMemoryManager() {
197
+ this.start();
198
+ }
199
+
36
200
  }
37
201
 
38
- setInterval(() => {
39
- const heapSizeLimit = v8.getHeapStatistics().heap_size_limit;
40
- memoryWatcher(format(heapSizeLimit) - (format(heapSizeLimit) / 60));// MB
41
- }, 1000);
202
+ module.exports = MemoryManager;
@@ -0,0 +1,28 @@
1
+ const MemoryManager = require('./Release_Memory');
2
+ const path = require('path');
3
+
4
+ // Tạo một đối tượng MemoryManager với các tùy chọn cấu hình tối ưu
5
+ const memoryManager = new MemoryManager({
6
+ warningThreshold: 0.6, // Ngưỡng cảnh báo sử dụng bộ nhớ (60%)
7
+ releaseThreshold: 0.7, // Ngưỡng giải phóng bộ nhớ (70%)
8
+ maxThreshold: 0.8, // Ngưỡng tối đa sử dụng bộ nhớ (80%)
9
+ interval: 30000, // Khoảng thời gian kiểm tra bộ nhớ (30 giây)
10
+ logLevel: 'warn', // Chỉ ghi nhật ký khi có cảnh báo hoặc lỗi
11
+ logFile: path.join(__dirname, 'memory.log'), // Tệp nhật ký
12
+ smartReleaseEnabled: true, // Bật tính năng giải phóng bộ nhớ thông minh
13
+ });
14
+
15
+ memoryManager.addMemoryUsageListener((memoryUsage) => {
16
+ console.log(`Memory released: ${(memoryUsage * 100).toFixed(2)}%`);
17
+ });
18
+
19
+
20
+ // Bắt đầu quá trình quản lý bộ nhớ tự động
21
+ memoryManager.autoStart(3600000); // 1 giờ
22
+
23
+
24
+ // Lưu trữ dữ liệu quan trọng trong WeakMap
25
+ const importantData = { sensitive: 'data' };
26
+ memoryManager.weakRefs.set('aaaaaaaaa', importantData);
27
+
28
+ console.log(memoryManager.weakRefs.get('aaaaaaaaa'))
@@ -80,6 +80,7 @@
80
80
  "Ws_Success": "Đặt Dữ Liệu Cho Websocket Extension Thành Công !",
81
81
  "Ws_2Fa": "Đây là mã xác thực 2 yếu tố(2FA) của bạn cho Horizon_Extension, hãy sử dụng Google Authenticator để lấy mã phòng trường hợp quên mật khẩu hoặc yêu cầu xác minh !\n\n➣ Đây: %1",
82
82
  "Ws_2Fa_Check": "Hãy nhập mã 2Fa của bạn từ ứng dụng xác thực: ",
83
+ "Bypass_956": "Đang thử nghiệm coi bạn có dính checkpoint 956 hay không!",
83
84
 
84
85
  "WishMessage": [
85
86
  "Chúc Bạn Một Ngày Tốt Lành Nhé !!!",
@@ -188,11 +189,13 @@
188
189
  "Ws_Success": "Successfully set data for websocket extension!",
189
190
  "Ws_2Fa": "This is your two-factor authentication (2FA) code for horizon_extension. Please use Google Authenticator to retrieve the backup code in case you forget your password or require verification.\n\n ➣ Here: %1",
190
191
  "Ws_2Fa_Check": "Please enter your 2FA code from the authentication app: ",
192
+ "Bypass_956": "Testing to see if you get checkpoint 956 or not!",
191
193
 
192
194
  "WishMessage": [
193
195
  "Have a Nice Day !",
194
196
  "Please Report To Admin When There Is Error in FCA !",
195
- "Thank You For Using Meta Horizon's FCA !"
197
+ "Thank You For Using Meta Horizon's FCA !",
198
+ "I Love You So Muchhh 💞"
196
199
  ]
197
200
  },
198
201
  "ExtraGetThread": {