nayan-test 3.4.9

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.

Potentially problematic release.


This version of nayan-test might be problematic. Click here for more details.

Files changed (139) hide show
  1. package/.cache/replit/__replit_disk_meta.json +1 -0
  2. package/.cache/replit/nix/env.json +1 -0
  3. package/.config/configstore/update-notifier-npm.json +4 -0
  4. package/.config/configstore/update-notifier-npm.json.1735545094 +4 -0
  5. package/.github/workflows/npm-publish.yml +33 -0
  6. package/.github/workflows/npm-publish2.yml +33 -0
  7. package/.github/workflows/publish.yml +20 -0
  8. package/.replit +80 -0
  9. package/.upm/store.json +1 -0
  10. package/CHANGELOG.md +2 -0
  11. package/DOCS.md +1947 -0
  12. package/Extra/Database/N +1 -0
  13. package/Extra/Database/index.js +469 -0
  14. package/Extra/ExtraAddons.js +82 -0
  15. package/Extra/ExtraFindUID.js +62 -0
  16. package/Extra/ExtraGetThread.js +340 -0
  17. package/Extra/ExtraScreenShot.js +430 -0
  18. package/Extra/ExtraUptimeRobot.js +38 -0
  19. package/Extra/Html/Classic/index.html +28 -0
  20. package/Extra/Html/Classic/script.js +119 -0
  21. package/Extra/Html/Classic/style.css +8 -0
  22. package/Extra/N +1 -0
  23. package/Extra/Security/Index.js +173 -0
  24. package/Extra/Security/N +1 -0
  25. package/Extra/Security/Step_1.js +6 -0
  26. package/Extra/Security/Step_2.js +22 -0
  27. package/Extra/Security/Step_3.js +22 -0
  28. package/Extra/Src/Change_Environment.js +24 -0
  29. package/Extra/Src/Check_Update.js +67 -0
  30. package/Extra/Src/History.js +115 -0
  31. package/Extra/Src/Instant_Update.js +65 -0
  32. package/Extra/Src/Last-Run.js +65 -0
  33. package/Extra/Src/N +1 -0
  34. package/Extra/Src/Premium.js +81 -0
  35. package/Extra/Src/Release_Memory.js +41 -0
  36. package/Extra/Src/Websocket.js +213 -0
  37. package/Extra/Src/uuid.js +137 -0
  38. package/Func/AcceptAgreement.js +31 -0
  39. package/Func/ClearCache.js +64 -0
  40. package/Func/N +1 -0
  41. package/Func/ReportV1.js +54 -0
  42. package/LICENSE +21 -0
  43. package/LICENSE-MIT +21 -0
  44. package/Language/index.js +1 -0
  45. package/Language/index.json +217 -0
  46. package/Main.js +1627 -0
  47. package/README.md +201 -0
  48. package/SECURITY.md +18 -0
  49. package/broadcast.js +40 -0
  50. package/index.js +383 -0
  51. package/logger.js +66 -0
  52. package/package.json +94 -0
  53. package/replit.nix +8 -0
  54. package/src/Dev_Horizon_Data.js +125 -0
  55. package/src/Premium.js +25 -0
  56. package/src/Screenshot.js +83 -0
  57. package/src/addExternalModule.js +16 -0
  58. package/src/addUserToGroup.js +79 -0
  59. package/src/changeAdminStatus.js +79 -0
  60. package/src/changeArchivedStatus.js +41 -0
  61. package/src/changeAvatar.js +127 -0
  62. package/src/changeAvt.js +85 -0
  63. package/src/changeBio.js +65 -0
  64. package/src/changeBlockedStatus.js +36 -0
  65. package/src/changeGroupImage.js +106 -0
  66. package/src/changeNickname.js +45 -0
  67. package/src/changeThreadColor.js +62 -0
  68. package/src/changeThreadEmoji.js +42 -0
  69. package/src/createNewGroup.js +70 -0
  70. package/src/createPoll.js +60 -0
  71. package/src/deleteMessage.js +45 -0
  72. package/src/deleteThread.js +43 -0
  73. package/src/forwardAttachment.js +48 -0
  74. package/src/getAccessToken.js +28 -0
  75. package/src/getCurrentUserID.js +7 -0
  76. package/src/getEmojiUrl.js +27 -0
  77. package/src/getFriendsList.js +73 -0
  78. package/src/getMessage.js +80 -0
  79. package/src/getThreadHistory.js +537 -0
  80. package/src/getThreadInfo.js +425 -0
  81. package/src/getThreadList.js +213 -0
  82. package/src/getThreadMain.js +220 -0
  83. package/src/getThreadPictures.js +59 -0
  84. package/src/getUID.js +59 -0
  85. package/src/getUserID.js +62 -0
  86. package/src/getUserInfo.js +113 -0
  87. package/src/getUserInfoMain.js +65 -0
  88. package/src/getUserInfoV2.js +32 -0
  89. package/src/getUserInfoV3.js +63 -0
  90. package/src/getUserInfoV4.js +55 -0
  91. package/src/getUserInfoV5.js +61 -0
  92. package/src/handleFriendRequest.js +46 -0
  93. package/src/handleMessageRequest.js +49 -0
  94. package/src/httpGet.js +49 -0
  95. package/src/httpPost.js +48 -0
  96. package/src/httpPostFormData.js +41 -0
  97. package/src/listenMqtt.js +787 -0
  98. package/src/logout.js +68 -0
  99. package/src/markAsDelivered.js +48 -0
  100. package/src/markAsRead.js +70 -0
  101. package/src/markAsReadAll.js +43 -0
  102. package/src/markAsSeen.js +51 -0
  103. package/src/muteThread.js +47 -0
  104. package/src/n +1 -0
  105. package/src/removeUserFromGroup.js +49 -0
  106. package/src/resolvePhotoUrl.js +37 -0
  107. package/src/searchForThread.js +43 -0
  108. package/src/sendMessage.js +379 -0
  109. package/src/sendTypingIndicator.js +80 -0
  110. package/src/setMessageReaction.js +109 -0
  111. package/src/setPostReaction.js +102 -0
  112. package/src/setTitle.js +74 -0
  113. package/src/threadColors.js +39 -0
  114. package/src/unfriend.js +43 -0
  115. package/src/unsendMessage.js +40 -0
  116. package/src/uploadAttachment.js +96 -0
  117. package/test/.env/.env +1 -0
  118. package/test/Database_Test.js +4 -0
  119. package/test/Db2.js +530 -0
  120. package/test/Horizon_Database/A_README.md +1 -0
  121. package/test/Horizon_Database/Database.db +0 -0
  122. package/test/Horizon_Database/N +1 -0
  123. package/test/Nayan_Database/A_README.md +1 -0
  124. package/test/Nayan_Database/Database.db +0 -0
  125. package/test/Nayan_Database/N +1 -0
  126. package/test/data/N +1 -0
  127. package/test/data/shareAttach.js +146 -0
  128. package/test/data/something.mov +0 -0
  129. package/test/data/test.png +0 -0
  130. package/test/data/test.txt +7 -0
  131. package/test/env.env +0 -0
  132. package/test/example-config.json +18 -0
  133. package/test/example-db.db +0 -0
  134. package/test/memoryleak.js +18 -0
  135. package/test/n +1 -0
  136. package/test/test-page.js +140 -0
  137. package/test/test.js +385 -0
  138. package/test/testv2.js +18 -0
  139. package/utils.js +1684 -0
package/Main.js ADDED
@@ -0,0 +1,1627 @@
1
+ 'use strict';
2
+
3
+ /!-[ Require config and use ]-!/
4
+
5
+ if (global.Fca.Require.FastConfig.Config != 'default') {
6
+ //do ssth
7
+ }
8
+
9
+ const Language = global.Fca.Require.languageFile.find((/** @type {{ Language: string; }} */i) => i.Language == global.Fca.Require.FastConfig.Language).Folder.Index;
10
+
11
+ /!-[ Require All Package Need Use ]-!/
12
+
13
+ var utils = global.Fca.Require.utils,
14
+ logger = global.Fca.Require.logger,
15
+ fs = global.Fca.Require.fs,
16
+ getText = global.Fca.getText,
17
+ log = global.Fca.Require.log,
18
+ express = require("express")(),
19
+ { join } = require('path'),
20
+ cheerio = require("cheerio"),
21
+ { readFileSync } = require('fs-extra'),
22
+ Database = require("./Extra/Database"),
23
+ readline = require("readline"),
24
+ chalk = require("chalk"),
25
+ figlet = require("figlet"),
26
+ os = require("os"),
27
+ deasync = require('deasync'),
28
+ Security = require("./Extra/Security/Index"),
29
+ { getAll, deleteAll } = require('./Extra/ExtraGetThread'),
30
+ ws = require('ws'),
31
+ Websocket = require('./Extra/Src/Websocket'),
32
+ Convert = require('ansi-to-html');
33
+
34
+ /!-[ Set Variable For Process ]-!/
35
+
36
+ log.maxRecordSize = 100;
37
+ var checkVerified = null;
38
+ const Boolean_Option = ['online','selfListen','listenEvents','updatePresence','forceLogin','autoMarkDelivery','autoMarkRead','listenTyping','autoReconnect','emitReady'];
39
+
40
+ /!-[ Set And Check Template HTML ]-!/
41
+
42
+ const css = readFileSync(join(__dirname, 'Extra', 'Html', 'Classic', 'style.css'));
43
+ const js = readFileSync(join(__dirname, 'Extra', 'Html', 'Classic', 'script.js'));
44
+
45
+ /!-[ Function Generate HTML Template ]-!/
46
+
47
+ /**
48
+ * It returns a string of HTML code.
49
+ * @param UserName - The username of the user
50
+ * @param Type - The type of user, either "Free" or "Premium"
51
+ * @param link - The link to the music you want to play
52
+ * @returns A HTML file
53
+ */
54
+
55
+ function ClassicHTML(UserName,Type,link) {
56
+ return
57
+ `<!DOCTYPE html>
58
+
59
+ <html>
60
+ <!--Please Volume up your mobile-->
61
+ <!--Automatically play when load this page-->
62
+ <audio autoplay="false" src="https://i.top4top.io/m_19290u0i99.mp3">
63
+ </audio>
64
+ <title>Rest Api - Daniel </title>
65
+ <style>
66
+ body{
67
+ margin: 0;
68
+ padding: 0;
69
+ background-color: #000000;
70
+ }
71
+ .ring{
72
+ position: absolute;
73
+ top: 50%;
74
+ left: 50%;
75
+ transform: translate(-50%, -50%);
76
+ width: 150px;
77
+ height: 150px;
78
+ background: transparent;
79
+ border: 3px solid #3c3c3c;
80
+ border-radius: 50%;
81
+ text-align: center;
82
+ line-height: 150px;
83
+ font-family: sans-serif;
84
+ font-size: 20px;
85
+ color: cyan;
86
+ letter-spacing: 5px;
87
+ text-transform: uppercase;
88
+ text-shadow: 0 0 26px cyan;
89
+ box-shadow: 0 0 26px rgba(26,26,26,26);
90
+ }
91
+
92
+ .ring:before{
93
+ content: '';
94
+ position: absolute;
95
+ top: -3px;
96
+ left: -3px;
97
+ width: 100%;
98
+ height: 100%;
99
+ border: 3px solid transparent;
100
+ border-top: 3px solid cyan;
101
+ border-right: 3px solid cyan;
102
+ border-radius: 50%;
103
+ animation: animateCircle 2s linear infinite;
104
+ }
105
+
106
+ span{
107
+ display: block;
108
+ position: absolute;
109
+ top: calc(50% - 2px);
110
+ left: 50%;
111
+ width: 50%;
112
+ height: 4px;
113
+ background-color: transparent;
114
+ transform-origin: left;
115
+ animation: animate 2s linear infinite;
116
+ }
117
+
118
+ span:before{
119
+ content: '';
120
+ position: absolute;
121
+ width: 16px;
122
+ height: 16px;
123
+ border-radius: 50%;
124
+ background-color: cyan;
125
+ top: -6px;
126
+ right: -8px;
127
+ box-shadow: 0 0 20px cyan;
128
+ }
129
+
130
+ @keyframes animateCircle{
131
+ 0%{
132
+ transform: rotate(0deg);
133
+ }100%{
134
+ transform: rotate(360deg);
135
+ }
136
+ }
137
+
138
+ @keyframes animate{
139
+ 0%{
140
+ transform: rotate(45deg);
141
+ }100%{
142
+ transform: rotate(405deg);
143
+ }
144
+ }
145
+ </style>
146
+
147
+ <div class="ring">
148
+ NAYAN
149
+ <span></span>
150
+ </div>
151
+ <a class="sp-circle-link" href="./index.html">${UserName}</a>
152
+ <style>
153
+ @import url('https://fonts.googleapis.com/css?family=Barlow');
154
+ body {
155
+
156
+ }
157
+
158
+ .container {
159
+ width: 100%;
160
+ position: relative;
161
+ overflow: hidden;
162
+ }
163
+
164
+ a {
165
+ text-decoration: none;
166
+ }
167
+
168
+ h1.main,
169
+ p.demos {
170
+ -webkit-animation-delay: 18s;
171
+ -moz-animation-delay: 18s;
172
+ -ms-animation-delay: 18s;
173
+ animation-delay: 18s;
174
+ }
175
+
176
+ .sp-container {
177
+ position: fixed;
178
+ top: 0px;
179
+ left: 0px;
180
+ width: 100%;
181
+ height: 100%;
182
+ z-index: 0;
183
+ background: -webkit-radial-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3) 35%, rgba(0, 0, 0, 0.7));
184
+ background: -moz-radial-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3) 35%, rgba(0, 0, 0, 0.7));
185
+ background: -ms-radial-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3) 35%, rgba(0, 0, 0, 0.7));
186
+ background: radial-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3) 35%, rgba(0, 0, 0, 0.7));
187
+ }
188
+
189
+ .sp-content {
190
+ position: absolute;
191
+ width: 100%;
192
+ height: 100%;
193
+ left: 0px;
194
+ top: 0px;
195
+ z-index: 50;
196
+ }
197
+
198
+ .sp-container h2 {
199
+ position: absolute;
200
+ top: 50%;
201
+ line-height: 100px;
202
+ height: 90px;
203
+ margin-top: -50px;
204
+ font-size: 90px;
205
+ width: 100%;
206
+ text-align: center;
207
+ color: transparent;
208
+ -webkit-animation: blurFadeInOut 3s ease-in backwards;
209
+ -moz-animation: blurFadeInOut 3s ease-in backwards;
210
+ -ms-animation: blurFadeInOut 3s ease-in backwards;
211
+ animation: blurFadeInOut 3s ease-in backwards;
212
+ }
213
+
214
+ .sp-container h2.frame-1 {
215
+ -webkit-animation-delay: 0s;
216
+ -moz-animation-delay: 0s;
217
+ -ms-animation-delay: 0s;
218
+ animation-delay: 0s;
219
+
220
+ }
221
+
222
+ .sp-container h2.frame-2 {
223
+ -webkit-animation-delay: 0s;
224
+ -moz-animation-delay: 0s;
225
+ -ms-animation-delay: 0s;
226
+ animation-delay: 0s;
227
+ }
228
+
229
+ .sp-container h2.frame-3 {
230
+ -webkit-animation-delay: 0s;
231
+ -moz-animation-delay: 0s;
232
+ -ms-animation-delay: 0s;
233
+ animation-delay: 0s;
234
+ }
235
+
236
+ .sp-container h2.frame-4 {
237
+ font-size: 200px;
238
+ -webkit-animation-delay: 0s;
239
+ -moz-animation-delay: 0s;
240
+ -ms-animation-delay: 0s;
241
+ animation-delay: 0s;
242
+ }
243
+
244
+ .sp-container h2.frame-5 {
245
+ -webkit-animation: none;
246
+ -moz-animation: none;
247
+ -ms-animation: none;
248
+ animation: none;
249
+ color: transparent;
250
+ text-shadow: 0px 0px 1px #fff;
251
+ }
252
+
253
+ .sp-container h2.frame-5 span {
254
+ -webkit-animation: blurFadeIn 3s ease-in 12s backwards;
255
+ -moz-animation: blurFadeIn 1s ease-in 12s backwards;
256
+ -ms-animation: blurFadeIn 3s ease-in 12s backwards;
257
+ animation: blurFadeIn 3s ease-in 12s backwards;
258
+ color: transparent;
259
+ text-shadow: 0px 0px 1px #fff;
260
+ }
261
+
262
+ .sp-container h2.frame-5 span:nth-child(2) {
263
+ -webkit-animation-delay: 13s;
264
+ -moz-animation-delay: 13s;
265
+ -ms-animation-delay: 13s;
266
+ animation-delay: 13s;
267
+ }
268
+
269
+ .sp-container h2.frame-5 span:nth-child(3) {
270
+ -webkit-animation-delay: 14s;
271
+ -moz-animation-delay: 14s;
272
+ -ms-animation-delay: 14s;
273
+ animation-delay: 14s;
274
+ }
275
+
276
+ .sp-globe {
277
+ position: absolute;
278
+ width: 500px;
279
+ height: 273px;
280
+ left: 50%;
281
+ top: 50%;
282
+ margin: -137px 0 0 -141px;
283
+ background: transparent url(http://web-sonick.zz.mu/images/sl/globe.png) no-repeat top left;
284
+ -webkit-animation: fadeInBack 3.6s linear 14s backwards;
285
+ -moz-animation: fadeInBack 3.6s linear 14s backwards;
286
+ -ms-animation: fadeInBack 3.6s linear 14s backwards;
287
+ animation: fadeInBack 3.6s linear 14s backwards;
288
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
289
+ filter: alpha(opacity=30);
290
+ opacity: 0.3;
291
+ -webkit-transform: scale(5);
292
+ -moz-transform: scale(5);
293
+ -o-transform: scale(5);
294
+ -ms-transform: scale(5);
295
+ transform: scale(5);
296
+ }
297
+
298
+ .sp-circle-link {
299
+ position: absolute;
300
+ font-family: 'Barlow';
301
+ left: 28%;
302
+ bottom: 100px;
303
+ text-align: center;
304
+ line-height: 100px;
305
+ width: 500px;
306
+ height: 100px;
307
+ background: #4af269;
308
+ color: #3f1616;
309
+ font-size: 25px;
310
+ border-radius: 5%;
311
+ -webkit-animation: fadeInRotate 1s linear 5s backwards;
312
+ -moz-animation: fadeInRotate 1s linear 5s backwards;
313
+ -ms-animation: fadeInRotate 1s linear 5s backwards;
314
+ animation: fadeInRotate 1s linear 5s backwards;
315
+ -webkit-transform: scale(1) rotate(0deg);
316
+ -moz-transform: scale(1) rotate(0deg);
317
+ -o-transform: scale(1) rotate(0deg);
318
+ -ms-transform: scale(1) rotate(0deg);
319
+ transform: scale(1) rotate(0deg);
320
+ }
321
+
322
+ .sp-circle-link:hover {
323
+ background: #85373b;
324
+ color: #fff;
325
+ }
326
+ /**/
327
+
328
+ @-webkit-keyframes blurFadeInOut {
329
+ 0% {
330
+ opacity: 0;
331
+ text-shadow: 0px 0px 40px #fff;
332
+ -webkit-transform: scale(1.3);
333
+ }
334
+ 20%,
335
+ 75% {
336
+ opacity: 1;
337
+ text-shadow: 0px 0px 1px #fff;
338
+ -webkit-transform: scale(1);
339
+ }
340
+ 100% {
341
+ opacity: 0;
342
+ text-shadow: 0px 0px 50px #fff;
343
+ -webkit-transform: scale(0);
344
+ }
345
+ }
346
+
347
+ @-webkit-keyframes blurFadeIn {
348
+ 0% {
349
+ opacity: 0;
350
+ text-shadow: 0px 0px 40px #fff;
351
+ -webkit-transform: scale(1.3);
352
+ }
353
+ 50% {
354
+ opacity: 0.5;
355
+ text-shadow: 0px 0px 10px #fff;
356
+ -webkit-transform: scale(1.1);
357
+ }
358
+ 100% {
359
+ opacity: 1;
360
+ text-shadow: 0px 0px 1px #fff;
361
+ -webkit-transform: scale(1);
362
+ }
363
+ }
364
+
365
+ @-webkit-keyframes fadeInBack {
366
+ 0% {
367
+ opacity: 0;
368
+ -webkit-transform: scale(0);
369
+ }
370
+ 50% {
371
+ opacity: 0.4;
372
+ -webkit-transform: scale(2);
373
+ }
374
+ 100% {
375
+ opacity: 0.2;
376
+ -webkit-transform: scale(5);
377
+ }
378
+ }
379
+
380
+ @-webkit-keyframes fadeInRotate {
381
+ 0% {
382
+ opacity: 0;
383
+ -webkit-transform: scale(0) rotate(360deg);
384
+ }
385
+ 100% {
386
+ opacity: 1;
387
+ -webkit-transform: scale(1) rotate(0deg);
388
+ }
389
+ }
390
+ /**/
391
+
392
+ @-moz-keyframes blurFadeInOut {
393
+ 0% {
394
+ opacity: 0;
395
+ text-shadow: 0px 0px 40px #fff;
396
+ -moz-transform: scale(1.3);
397
+ }
398
+ 20%,
399
+ 75% {
400
+ opacity: 1;
401
+ text-shadow: 0px 0px 1px #fff;
402
+ -moz-transform: scale(1);
403
+ }
404
+ 100% {
405
+ opacity: 0;
406
+ text-shadow: 0px 0px 50px #fff;
407
+ -moz-transform: scale(0);
408
+ }
409
+ }
410
+
411
+ @-moz-keyframes blurFadeIn {
412
+ 0% {
413
+ opacity: 0;
414
+ text-shadow: 0px 0px 40px #fff;
415
+ -moz-transform: scale(1.3);
416
+ }
417
+ 100% {
418
+ opacity: 1;
419
+ text-shadow: 0px 0px 1px #fff;
420
+ -moz-transform: scale(1);
421
+ }
422
+ }
423
+
424
+ @-moz-keyframes fadeInBack {
425
+ 0% {
426
+ opacity: 0;
427
+ -moz-transform: scale(0);
428
+ }
429
+ 50% {
430
+ opacity: 0.4;
431
+ -moz-transform: scale(2);
432
+ }
433
+ 100% {
434
+ opacity: 0.2;
435
+ -moz-transform: scale(5);
436
+ }
437
+ }
438
+
439
+ @-moz-keyframes fadeInRotate {
440
+ 0% {
441
+ opacity: 0;
442
+ -moz-transform: scale(0) rotate(360deg);
443
+ }
444
+ 100% {
445
+ opacity: 1;
446
+ -moz-transform: scale(1) rotate(0deg);
447
+ }
448
+ }
449
+ /**/
450
+
451
+ @keyframes blurFadeInOut {
452
+ 0% {
453
+ opacity: 0;
454
+ text-shadow: 0px 0px 40px #fff;
455
+ transform: scale(1.3);
456
+ }
457
+ 20%,
458
+ 75% {
459
+ opacity: 1;
460
+ text-shadow: 0px 0px 1px #fff;
461
+ transform: scale(1);
462
+ }
463
+ 100% {
464
+ opacity: 0;
465
+ text-shadow: 0px 0px 50px #fff;
466
+ transform: scale(0);
467
+ }
468
+ }
469
+
470
+ @keyframes blurFadeIn {
471
+ 0% {
472
+ opacity: 0;
473
+ text-shadow: 0px 0px 40px #fff;
474
+ transform: scale(1.3);
475
+ }
476
+ 50% {
477
+ opacity: 0.5;
478
+ text-shadow: 0px 0px 10px #fff;
479
+ transform: scale(1.1);
480
+ }
481
+ 100% {
482
+ opacity: 1;
483
+ text-shadow: 0px 0px 1px #fff;
484
+ transform: scale(1);
485
+ }
486
+ }
487
+
488
+ @keyframes fadeInBack {
489
+ 0% {
490
+ opacity: 0;
491
+ transform: scale(0);
492
+ }
493
+ 50% {
494
+ opacity: 0.4;
495
+ transform: scale(0);
496
+ }
497
+ 100% {
498
+ opacity: 0.2;
499
+ transform: scale(0);
500
+ }
501
+ }
502
+
503
+ @keyframes fadeInRotate {
504
+ 0% {
505
+ opacity: 0;
506
+ transform: scale(0) rotate(360deg);
507
+ }
508
+ 100% {
509
+ opacity: 1;
510
+ transform: scale(1) rotate(0deg);
511
+ }
512
+ }
513
+ </style>
514
+
515
+ </body></html>`
516
+ //lazy to change
517
+ }
518
+
519
+
520
+
521
+ /!-[ Stating Http Infomation ]-!/
522
+
523
+ express.set('DFP', (process.env.PORT || process.env.port || 80));
524
+
525
+ express.use(function(req, res, next) {
526
+ switch (req.url.split('?')[0]) {
527
+ case '/script.js': {
528
+ res.writeHead(200, { 'Content-Type': 'text/javascript' });
529
+ res.write(js);
530
+ break;
531
+ }
532
+ case '/style.css': {
533
+ res.writeHead(200, { 'Content-Type': 'text/css' });
534
+ res.write(css);
535
+ break;
536
+ }
537
+ // case '/History': {
538
+ // if (req.query.PassWord == process.env.REPL_OWNER) {
539
+ // res.writeHead(200, { 'Content-Type': 'application/json charset=utf-8' });
540
+ // res.write(JSON.stringify(console.history,null,2),'utf8');
541
+ // res.end();
542
+ // }
543
+ // else res.json({
544
+ // Status: false,
545
+ // Error: "Thiếu Params ?PassWord=PassWordCuaBan =))"
546
+ // });
547
+ // break;
548
+ // }
549
+ default: {
550
+ res.writeHead(200, "OK", { "Content-Type": "text/html" });
551
+ res.write(ClassicHTML(global.Fca.Require.FastConfig.HTML.UserName, "Premium Access", global.Fca.Require.FastConfig.HTML.MusicLink));
552
+ }
553
+ }
554
+ res.end();
555
+ })
556
+
557
+ var Server;
558
+ if (global.Fca.Require.FastConfig.HTML.HTML) Server = express.listen(express.get('DFP'))
559
+
560
+ if (global.Fca.Require.FastConfig.Websocket_Extension.Status) {
561
+ var convert = new Convert();
562
+ if (Server != undefined) {
563
+ const WebSocket = new ws.Server({ noServer: true });
564
+ const { Client, WSS } = Websocket.connect(WebSocket);
565
+ Server.on('upgrade', (req, socket, head) => {
566
+ WSS.handleUpgrade(req, socket, head, (wss) => {
567
+ WSS.emit('connection', wss, req);
568
+ });
569
+ });
570
+ console._log = console.__log
571
+ console.log = function(data) {
572
+ const All = Object.keys(Client)
573
+ console._log.apply(data,arguments)
574
+ try {
575
+ const log = (convert.toHtml(data) || data)
576
+ console.history.push(log)
577
+ for (let i of All) {
578
+ if (Client[i].Status) {
579
+ Client[i].Websocket.send(JSON.stringify({ Type: "Console", Data: log }));
580
+ }
581
+ else continue;
582
+ }
583
+ }
584
+ catch (e) {
585
+ return;
586
+ }
587
+ }
588
+ }
589
+ else {
590
+ const WebSocket = new ws.Server({ port: 80 });
591
+ const { Client } = Websocket.connect(WebSocket);
592
+ console._log = console.__log
593
+ console.log = function(data) {
594
+ const All = Object.keys(Client)
595
+ console._log.apply(data,arguments)
596
+ try {
597
+ const log = convert.toHtml(data)
598
+ console.history.push(log)
599
+ for (let i of All) {
600
+ if (Client[i].Status) {
601
+ Client[i].Websocket.send(JSON.stringify({ Type: "Console", Data: log }));
602
+ }
603
+ else continue;
604
+ }
605
+ }
606
+ catch (e) {
607
+ return
608
+ }
609
+ }
610
+ }
611
+
612
+ }
613
+
614
+ /!-[ Function setOptions ]-!/
615
+
616
+ /**
617
+ * @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
618
+ * @param {{ [x: string]: any; logLevel?: any; forceLogin?: boolean; userAgent?: any; pauseLog?: any; logRecordSize?: any; pageID?: any; proxy?: any; }} options
619
+ */
620
+
621
+ function setOptions(globalOptions, options) {
622
+ Object.keys(options).map(function(key) {
623
+ switch (Boolean_Option.includes(key)) {
624
+ case true: {
625
+ globalOptions[key] = Boolean(options[key]);
626
+ break;
627
+ }
628
+ case false: {
629
+ switch (key) {
630
+ case 'pauseLog': {
631
+ if (options.pauseLog) log.pause();
632
+ else log.resume();
633
+ break;
634
+ }
635
+ case 'logLevel': {
636
+ log.level = options.logLevel;
637
+ globalOptions.logLevel = options.logLevel;
638
+ break;
639
+ }
640
+ case 'logRecordSize': {
641
+ log.maxRecordSize = options.logRecordSize;
642
+ globalOptions.logRecordSize = options.logRecordSize;
643
+ break;
644
+ }
645
+ case 'pageID': {
646
+ globalOptions.pageID = options.pageID.toString();
647
+ break;
648
+ }
649
+ case 'userAgent': {
650
+ 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');
651
+ break;
652
+ }
653
+ case 'proxy': {
654
+ if (typeof options.proxy != "string") {
655
+ delete globalOptions.proxy;
656
+ utils.setProxy();
657
+ } else {
658
+ globalOptions.proxy = options.proxy;
659
+ utils.setProxy(globalOptions.proxy);
660
+ }
661
+ break;
662
+ }
663
+ default: {
664
+ log.warn("setOptions", "Unrecognized option given to setOptions: " + key);
665
+ break;
666
+ }
667
+ }
668
+ break;
669
+ }
670
+ }
671
+ });
672
+ }
673
+
674
+ /!-[ Function BuildAPI ]-!/
675
+
676
+ /**
677
+ * @param {any} globalOptions
678
+ * @param {string} html
679
+ * @param {{ getCookies: (arg0: string) => any[]; }} jar
680
+ */
681
+
682
+ function buildAPI(globalOptions, html, jar) {
683
+ var maybeCookie = jar.getCookies("https://www.facebook.com").filter(function(/** @type {{ cookieString: () => string; }} */val) { return val.cookieString().split("=")[0] === "c_user"; });
684
+
685
+ if (maybeCookie.length === 0) {
686
+ if (global.Fca.Require.FastConfig.AutoLogin) {
687
+ return global.Fca.Require.logger.Warning(global.Fca.Require.Language.Index.AutoLogin, function() {
688
+ global.Fca.Action('AutoLogin')
689
+ });
690
+ }
691
+ else if (!global.Fca.Require.FastConfig.AutoLogin) {
692
+ return global.Fca.Require.logger.Error(global.Fca.Require.Language.Index.ErrAppState);
693
+ }
694
+ }
695
+ else {
696
+ if (html.indexOf("/checkpoint/block/?next") > -1) log.warn("login", Language.CheckPointLevelI);
697
+
698
+ var userID = maybeCookie[0].cookieString().split("=")[1].toString();
699
+ process.env['UID'] = logger.Normal(getText(Language.UID,userID), userID);
700
+
701
+ try {
702
+ clearInterval(checkVerified);
703
+ } catch (e) {
704
+ console.log(e);
705
+ }
706
+
707
+ var clientID = (Math.random() * 2147483648 | 0).toString(16);
708
+
709
+ var CHECK_MQTT = {
710
+ oldFBMQTTMatch: html.match(/irisSeqID:"(.+?)",appID:219994525426954,endpoint:"(.+?)"/),
711
+ newFBMQTTMatch: html.match(/{"app_id":"219994525426954","endpoint":"(.+?)","iris_seq_id":"(.+?)"}/),
712
+ legacyFBMQTTMatch: html.match(/(\["MqttWebConfig",\[\],{fbid:")(.+?)(",appID:219994525426954,endpoint:")(.+?)(",pollingEndpoint:")(.+?)(3790])/)
713
+ }
714
+
715
+ let Slot = Object.keys(CHECK_MQTT);
716
+
717
+ var mqttEndpoint,region,irisSeqID;
718
+ Object.keys(CHECK_MQTT).map(function(MQTT) {
719
+ if (CHECK_MQTT[MQTT] && !region) {
720
+ switch (Slot.indexOf(MQTT)) {
721
+ case 0: {
722
+ irisSeqID = CHECK_MQTT[MQTT][1];
723
+ mqttEndpoint = CHECK_MQTT[MQTT][2];
724
+ region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
725
+ return;
726
+ }
727
+ case 1: {
728
+ irisSeqID = CHECK_MQTT[MQTT][2];
729
+ mqttEndpoint = CHECK_MQTT[MQTT][1].replace(/\\\//g, "/");
730
+ region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
731
+ return;
732
+ }
733
+ case 2: {
734
+ mqttEndpoint = CHECK_MQTT[MQTT][4];
735
+ region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
736
+ return;
737
+ }
738
+ }
739
+ return;
740
+ }
741
+ });
742
+
743
+ var ctx = {
744
+ userID: userID,
745
+ jar: jar,
746
+ clientID: clientID,
747
+ globalOptions: globalOptions,
748
+ loggedIn: true,
749
+ access_token: 'NONE',
750
+ clientMutationId: 0,
751
+ mqttClient: undefined,
752
+ lastSeqId: irisSeqID,
753
+ syncToken: undefined,
754
+ mqttEndpoint: mqttEndpoint,
755
+ region: region,
756
+ firstListen: true
757
+ };
758
+
759
+ var api = {
760
+ setOptions: setOptions.bind(null, globalOptions),
761
+ getAppState: function getAppState() {
762
+ return utils.getAppState(jar);
763
+ }
764
+ };
765
+
766
+ if (region && mqttEndpoint) {
767
+ //do sth
768
+ }
769
+ else {
770
+ log.warn("login", getText(Language.NoAreaData));
771
+ api["htmlData"] = html;
772
+ }
773
+
774
+ var defaultFuncs = utils.makeDefaults(html, userID, ctx);
775
+
776
+ fs.readdirSync(__dirname + "/src").filter((/** @type {string} */File) => File.endsWith(".js") && !File.includes('Dev_')).map((/** @type {string} */File) => {
777
+ if (File == 'getThreadInfo.js' && global.Fca.Require.FastConfig.AntiGetInfo.AntiGetThreadInfo != true || File == 'getUserInfo.js' && global.Fca.Require.FastConfig.AntiGetInfo.AntiGetUserInfo != true) api[File.split('.').slice(0, -1).join('.')] = require('./src/' + (File.includes('getThreadInfo') ? 'getThreadMain.js' : 'getUserInfoMain.js'))(defaultFuncs, api, ctx)
778
+ else api[File.split('.').slice(0, -1).join('.')] = require('./src/' + File)(defaultFuncs, api, ctx)
779
+ });
780
+
781
+ return {
782
+ ctx,
783
+ defaultFuncs,
784
+ api
785
+ };
786
+ }
787
+ }
788
+
789
+ /!-[ Function makeLogin ]-!/
790
+
791
+ /**
792
+ * @param {{ setCookie: (arg0: any, arg1: string) => void; }} jar
793
+ * @param {any} email
794
+ * @param {any} password
795
+ * @param {{ forceLogin: any; }} loginOptions
796
+ * @param {(err: any, api: any) => any} callback
797
+ * @param {any} prCallback
798
+ */
799
+
800
+ function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
801
+ return function(res) {
802
+ var html = res.body,$ = cheerio.load(html),arr = [];
803
+
804
+ $("#login_form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
805
+
806
+ arr = arr.filter(function(v) {
807
+ return v.val && v.val.length;
808
+ });
809
+ var form = utils.arrToForm(arr);
810
+ form.lsd = utils.getFrom(html, "[\"LSD\",[],{\"token\":\"", "\"}");
811
+ form.lgndim = Buffer.from("{\"w\":1440,\"h\":900,\"aw\":1440,\"ah\":834,\"c\":24}").toString('base64');
812
+ form.email = email;
813
+ form.pass = password;
814
+ form.default_persistent = '0';
815
+ form.locale = 'en_US';
816
+ form.timezone = '240';
817
+ form.lgnjs = ~~(Date.now() / 1000);
818
+
819
+ html.split("\"_js_").slice(1).map((val) => {
820
+ jar.setCookie(utils.formatCookie(JSON.parse("[\"" + utils.getFrom(val, "", "]") + "]"), "facebook"),"https://www.facebook.com")
821
+ });
822
+
823
+ logger.Normal(Language.OnLogin);
824
+ return utils
825
+ .post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, form, loginOptions)
826
+ .then(utils.saveCookies(jar))
827
+ .then(function(/** @type {{ headers: any; }} */res) {
828
+ var headers = res.headers;
829
+ if (!headers.location) throw { error: Language.InvaildAccount };
830
+
831
+ // This means the account has login approvals turned on.
832
+ if (headers.location.indexOf('https://www.facebook.com/checkpoint/') > -1) {
833
+ logger.Warning(Language.TwoAuth);
834
+ var nextURL = 'https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php';
835
+
836
+ return utils
837
+ .get(headers.location, jar, null, loginOptions)
838
+ .then(utils.saveCookies(jar))
839
+ .then(function(res) {
840
+ if (!Database().get('ThroughAcc')) {
841
+ Database().set('ThroughAcc', email);
842
+ }
843
+ else {
844
+ if (String((Database().get('ThroughAcc'))).replace(RegExp('"','g'), '') != String(email).replace(RegExp('"','g'), '')) {
845
+ Database().set('ThroughAcc', email);
846
+ if (Database().get('Through2Fa')) {
847
+ Database().delete('Through2Fa');
848
+ }
849
+ }
850
+ }
851
+ var html = res.body,$ = cheerio.load(html), arr = [];
852
+ $("form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
853
+ arr = arr.filter(v => { return v.val && v.val.length });
854
+ var form = utils.arrToForm(arr);
855
+ if (html.indexOf("checkpoint/?next") > -1) {
856
+ setTimeout(() => {
857
+ checkVerified = setInterval((_form) => {}, 5000, {
858
+ fb_dtsg: form.fb_dtsg,
859
+ jazoest: form.jazoest,
860
+ dpr: 1
861
+ });
862
+ }, 2500);
863
+ switch (global.Fca.Require.FastConfig.Login2Fa) {
864
+ case true: {
865
+ const question = question => {
866
+ const rl = readline.createInterface({
867
+ input: process.stdin,
868
+ output: process.stdout
869
+ });
870
+ var done,answ;
871
+ rl.question(question, answer => {
872
+ rl.close();
873
+ answ = answer;
874
+ done = true
875
+ })
876
+ deasync.loopWhile(function(){
877
+ return !done;
878
+ });
879
+ return answ;
880
+ };
881
+ try {
882
+ const Old_Cookie = Database().get('Through2Fa');
883
+ if (Old_Cookie) {
884
+ Old_Cookie.map(function(/** @type {{ key: string; value: string; expires: string; domain: string; path: string; }} */c) {
885
+ let str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
886
+ jar.setCookie(str, "http://" + c.domain);
887
+ });
888
+ let Form = utils.arrToForm(arr);
889
+ Form.lsd = utils.getFrom(html, "[\"LSD\",[],{\"token\":\"", "\"}");
890
+ Form.lgndim = Buffer.from("{\"w\":1440,\"h\":900,\"aw\":1440,\"ah\":834,\"c\":24}").toString('base64');
891
+ Form.email = email;
892
+ Form.pass = password;
893
+ Form.default_persistent = '0';
894
+ Form.locale = 'en_US';
895
+ Form.timezone = '240';
896
+ Form.lgnjs = ~~(Date.now() / 1000);
897
+ return utils
898
+ .post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, Form, loginOptions)
899
+ .then(utils.saveCookies(jar))
900
+ .then(function(res) {
901
+ let headers = res.headers
902
+ if (!headers['set-cookie'][0].includes('deleted')) {
903
+ logger.Warning(Language.ErrThroughCookies, function() {
904
+ Database().delete('Through2Fa');
905
+ });
906
+ process.exit(1);
907
+ }
908
+ if (headers.location && headers.location.indexOf('https://www.facebook.com/checkpoint/') > -1) {
909
+ return utils
910
+ .get(headers.location, jar, null, loginOptions)
911
+ .then(utils.saveCookies(jar))
912
+ .then(function(res) {
913
+ var html = res.body,$ = cheerio.load(html), arr = [];
914
+ $("form input").map((i, v) => arr.push({ val: $(v).val(), name: $(v).attr("name") }));
915
+ arr = arr.filter(v => { return v.val && v.val.length });
916
+ var Form = utils.arrToForm(arr);
917
+
918
+ if (html.indexOf("checkpoint/?next") > -1) {
919
+ setTimeout(() => {
920
+ checkVerified = setInterval((_form) => {}, 5000, {
921
+ fb_dtsg: Form.fb_dtsg,
922
+ jazoest: Form.jazoest,
923
+ dpr: 1
924
+ });
925
+ }, 2500);
926
+
927
+ if (!res.headers.location && res.headers['set-cookie'][0].includes('checkpoint')) {
928
+ try {
929
+ delete Form.name_action_selected;
930
+ Form['submit[Continue]'] = $("#checkpointSubmitButton").html();
931
+ return utils
932
+ .post(nextURL, jar, Form, loginOptions)
933
+ .then(utils.saveCookies(jar))
934
+ .then(function() {
935
+ Form['submit[This was me]'] = "This was me";
936
+ return utils.post(nextURL, jar, Form, loginOptions).then(utils.saveCookies(jar));
937
+ })
938
+ .then(function() {
939
+ delete Form['submit[This was me]'];
940
+ Form.name_action_selected = 'save_device';
941
+ Form['submit[Continue]'] = $("#checkpointSubmitButton").html();
942
+ return utils.post(nextURL, jar, Form, loginOptions).then(utils.saveCookies(jar));
943
+ })
944
+ .then(function(res) {
945
+ var headers = res.headers;
946
+ if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) {
947
+ Database().delete('Through2Fa');
948
+ process.exit(1);
949
+ }
950
+ var appState = utils.getAppState(jar,false);
951
+ Database().set('Through2Fa', appState);
952
+ return loginHelper(appState, email, password, loginOptions, callback);
953
+ })
954
+ .catch((e) => callback(e));
955
+ }
956
+ catch (e) {
957
+ console.log(e)
958
+ }
959
+ }
960
+ }
961
+ })
962
+ }
963
+ return utils.get('https://www.facebook.com/', jar, null, loginOptions).then(utils.saveCookies(jar));
964
+ })
965
+ .catch((e) => console.log(e));
966
+ }
967
+ }
968
+ catch (e) {
969
+ Database().delete('Through2Fa');
970
+ }
971
+ const Otp_code = require('totp-generator');
972
+ const Code = global.Fca.Require.FastConfig.AuthString.includes('|') == false ? Otp_code(global.Fca.Require.FastConfig.AuthString.includes(" ") ? global.Fca.Require.FastConfig.AuthString.replace(RegExp(" ", 'g'), "") : global.Fca.Require.FastConfig.AuthString) : question(Language.EnterSecurityCode);
973
+ try {
974
+ const approvals = function(N_Code) {
975
+ form.approvals_code = N_Code;
976
+ form['submit[Continue]'] = $("#checkpointSubmitButton").html();
977
+ var prResolve,prReject;
978
+ var rtPromise = new Promise((resolve, reject) => { prResolve = resolve; prReject = reject; });
979
+
980
+ if (typeof N_Code == "string") {
981
+ utils
982
+ .post(nextURL, jar, form, loginOptions)
983
+ .then(utils.saveCookies(jar))
984
+ .then(function(res) {
985
+ var $ = cheerio.load(res.body);
986
+ var error = $("#approvals_code").parent().attr("data-xui-error");
987
+ if (error) {
988
+ logger.Warning(Language.InvaildTwoAuthCode,function() { approvals(question(Language.EnterSecurityCode)) }); //bruh loop
989
+ };
990
+ })
991
+ .then(function() {
992
+ delete form.no_fido;delete form.approvals_code;
993
+ form.name_action_selected = 'save_device'; //'save_device' || 'dont_save;
994
+ return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
995
+ })
996
+ .then(function(res) {
997
+ var headers = res.headers;
998
+ if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) {
999
+ try {
1000
+ delete form.name_action_selected;
1001
+ form['submit[Continue]'] = $("#checkpointSubmitButton").html();
1002
+ return utils
1003
+ .post(nextURL, jar, form, loginOptions)
1004
+ .then(utils.saveCookies(jar))
1005
+ .then(function() {
1006
+ form['submit[This was me]'] = "This was me";
1007
+ return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
1008
+ })
1009
+ .then(function() {
1010
+ delete form['submit[This was me]'];
1011
+ form.name_action_selected = 'save_device';
1012
+ form['submit[Continue]'] = $("#checkpointSubmitButton").html();
1013
+ return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
1014
+ })
1015
+ .then(function(res) {
1016
+ var headers = res.headers;
1017
+ if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) throw { error: "wtf ??:D" };
1018
+ var appState = utils.getAppState(jar,false);
1019
+ Database().set('Through2Fa', appState);
1020
+ return loginHelper(appState, email, password, loginOptions, callback);
1021
+ })
1022
+ .catch((e) => callback(e));
1023
+ }
1024
+ catch (e) {
1025
+ console.log(e)
1026
+ }
1027
+ }
1028
+ var appState = utils.getAppState(jar,false);
1029
+ if (callback === prCallback) {
1030
+ callback = function(err, api) {
1031
+ if (err) return prReject(err);
1032
+ return prResolve(api);
1033
+ };
1034
+ }
1035
+ Database().set('Through2Fa', appState);
1036
+ return loginHelper(appState, email, password, loginOptions, callback);
1037
+ })
1038
+ .catch(function(err) {
1039
+ if (callback === prCallback) prReject(err);
1040
+ else callback(err);
1041
+ });
1042
+ }
1043
+ else {
1044
+ utils
1045
+ .post("https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php", jar, form, loginOptions, null, { "Referer": "https://www.facebook.com/checkpoint/?next" })
1046
+ .then(utils.saveCookies(jar))
1047
+ .then(function(res) {
1048
+ try {
1049
+ JSON.parse(res.body.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*/, ""));
1050
+ } catch (ex) {
1051
+ clearInterval(checkVerified);
1052
+ logger.Warning(Language.VerifiedCheck);
1053
+ if (callback === prCallback) {
1054
+ callback = function(err, api) {
1055
+ if (err) return prReject(err);
1056
+ return prResolve(api);
1057
+ };
1058
+ }
1059
+ let appState = utils.getAppState(jar,false);
1060
+ return loginHelper(appState, email, password, loginOptions, callback);
1061
+ }
1062
+ })
1063
+ .catch((ex) => {
1064
+ log.error("login", ex);
1065
+ if (callback === prCallback) prReject(ex);
1066
+ else callback(ex);
1067
+ });
1068
+ }
1069
+ return rtPromise;
1070
+ }
1071
+ return approvals(Code)
1072
+ }
1073
+ catch (e) {
1074
+ logger.Error(e)
1075
+ logger.Error();
1076
+ process.exit(0);
1077
+ }
1078
+ }
1079
+ case false: {
1080
+ throw {
1081
+ error: 'login-approval',
1082
+ continue: function submit2FA(code) {
1083
+ form.approvals_code = code;
1084
+ form['submit[Continue]'] = $("#checkpointSubmitButton").html(); //'Continue';
1085
+ var prResolve,prReject;
1086
+ var rtPromise = new Promise((resolve, reject) => { prResolve = resolve; prReject = reject; });
1087
+ if (typeof code == "string") {
1088
+ utils
1089
+ .post(nextURL, jar, form, loginOptions)
1090
+ .then(utils.saveCookies(jar))
1091
+ .then(function(/** @type {{ body: string | Buffer; }} */res) {
1092
+ var $ = cheerio.load(res.body);
1093
+ var error = $("#approvals_code").parent().attr("data-xui-error");
1094
+ if (error) {
1095
+ throw {
1096
+ error: 'login-approval',
1097
+ errordesc: Language.InvaildTwoAuthCode,
1098
+ lerror: error,
1099
+ continue: submit2FA
1100
+ };
1101
+ }
1102
+ })
1103
+ .then(function() {
1104
+ delete form.no_fido;delete form.approvals_code;
1105
+ form.name_action_selected = 'dont_save'; //'save_device' || 'dont_save;
1106
+ return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
1107
+ })
1108
+ .then(function(res) {
1109
+ var headers = res.headers;
1110
+ if (!headers.location && res.headers['set-cookie'][0].includes('checkpoint')) throw { error: Language.ApprovalsErr };
1111
+ var appState = utils.getAppState(jar,false);
1112
+ if (callback === prCallback) {
1113
+ callback = function(err, api) {
1114
+ if (err) return prReject(err);
1115
+ return prResolve(api);
1116
+ };
1117
+ }
1118
+ return loginHelper(appState, email, password, loginOptions, callback);
1119
+ })
1120
+ .catch(function(err) {
1121
+ if (callback === prCallback) prReject(err);
1122
+ else callback(err);
1123
+ });
1124
+ } else {
1125
+ utils
1126
+ .post("https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php", jar, form, loginOptions, null, { "Referer": "https://www.facebook.com/checkpoint/?next" })
1127
+ .then(utils.saveCookies(jar))
1128
+ .then((res) => {
1129
+ try {
1130
+ JSON.parse(res.body.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*/, ""));
1131
+ } catch (ex) {
1132
+ clearInterval(checkVerified);
1133
+ logger.Warning(Language.VerifiedCheck);
1134
+ if (callback === prCallback) {
1135
+ callback = function(err, api) {
1136
+ if (err) return prReject(err);
1137
+ return prResolve(api);
1138
+ };
1139
+ }
1140
+ return loginHelper(utils.getAppState(jar,false), email, password, loginOptions, callback);
1141
+ }
1142
+ })
1143
+ .catch((ex) => {
1144
+ log.error("login", ex);
1145
+ if (callback === prCallback) prReject(ex);
1146
+ else callback(ex);
1147
+ });
1148
+ }
1149
+ return rtPromise;
1150
+ }
1151
+ };
1152
+ }
1153
+ }
1154
+ } else {
1155
+ if (!loginOptions.forceLogin) throw { error: Language.ForceLoginNotEnable };
1156
+
1157
+ if (html.indexOf("Suspicious Login Attempt") > -1) form['submit[This was me]'] = "This was me";
1158
+ else form['submit[This Is Okay]'] = "This Is Okay";
1159
+
1160
+ return utils
1161
+ .post(nextURL, jar, form, loginOptions)
1162
+ .then(utils.saveCookies(jar))
1163
+ .then(function() {
1164
+ form.name_action_selected = 'dont_save';
1165
+
1166
+ return utils.post(nextURL, jar, form, loginOptions).then(utils.saveCookies(jar));
1167
+ })
1168
+ .then(function(res) {
1169
+ var headers = res.headers;
1170
+
1171
+ if (!headers.location && res.body.indexOf('Review Recent Login') > -1) throw { error: "Something went wrong with review recent login." };
1172
+
1173
+ var appState = utils.getAppState(jar,false);
1174
+
1175
+ return loginHelper(appState, email, password, loginOptions, callback);
1176
+ })
1177
+ .catch((e) => callback(e));
1178
+ }
1179
+ });
1180
+ }
1181
+ return utils.get('https://www.facebook.com/', jar, null, loginOptions).then(utils.saveCookies(jar));
1182
+ });
1183
+ };
1184
+ }
1185
+
1186
+ /!-[ Function backup ]-!/
1187
+
1188
+ /**
1189
+ * @param {string} data
1190
+ * @param {any} globalOptions
1191
+ * @param {any} callback
1192
+ * @param {any} prCallback
1193
+ */
1194
+
1195
+ function backup(data,globalOptions, callback, prCallback) {
1196
+ try {
1197
+ var appstate;
1198
+ try {
1199
+ appstate = JSON.parse(data)
1200
+ }
1201
+ catch(e) {
1202
+ appstate = data;
1203
+ }
1204
+ logger.Warning(Language.BackupNoti);
1205
+ try {
1206
+ loginHelper(appstate,null,null,globalOptions, callback, prCallback)
1207
+ }
1208
+ catch (e) {
1209
+ logger.Error(Language.ErrBackup);
1210
+ process.exit(0);
1211
+ }
1212
+ }
1213
+ catch (e) {
1214
+ return logger.Error();
1215
+ }
1216
+ }
1217
+
1218
+ /!-[ function loginHelper ]-!/
1219
+
1220
+ /**
1221
+ * @param {string | any[]} appState
1222
+ * @param {any} email
1223
+ * @param {any} password
1224
+ * @param {{ selfListen?: boolean; listenEvents?: boolean; listenTyping?: boolean; updatePresence?: boolean; forceLogin?: boolean; autoMarkDelivery?: boolean; autoMarkRead?: boolean; autoReconnect?: boolean; logRecordSize?: number; online?: boolean; emitReady?: boolean; userAgent?: string; pageID?: any; }} globalOptions
1225
+ * @param {(arg0: any, arg1: undefined) => void} callback
1226
+ * @param {(error: any, api: any) => any} [prCallback]
1227
+ */
1228
+
1229
+ function loginHelper(appState, email, password, globalOptions, callback, prCallback) {
1230
+ var mainPromise = null;
1231
+ var jar = utils.getJar();
1232
+
1233
+ try {
1234
+ if (appState) {
1235
+ logger.Normal(Language.OnProcess);
1236
+ switch (Database().has("FBKEY")) {
1237
+ case true: {
1238
+ process.env.FBKEY = Database().get("FBKEY");
1239
+ }
1240
+ break;
1241
+ case false: {
1242
+ const SecurityKey = global.Fca.Require.Security.create().apiKey;
1243
+ process.env['FBKEY'] = SecurityKey;
1244
+ Database().set('FBKEY', SecurityKey);
1245
+ }
1246
+ break;
1247
+ default: {
1248
+ const SecurityKey = global.Fca.Require.Security.create().apiKey;
1249
+ process.env['FBKEY'] = SecurityKey;
1250
+ Database().set('FBKEY', SecurityKey);
1251
+ }
1252
+ }
1253
+ try {
1254
+ switch (global.Fca.Require.FastConfig.EncryptFeature) {
1255
+ case true: {
1256
+ appState = JSON.parse(JSON.stringify(appState, null, "\t"));
1257
+ switch (utils.getType(appState)) {
1258
+ case "Array": {
1259
+ switch (utils.getType(appState[0])) {
1260
+ case "Object": {
1261
+ logger.Normal(Language.NotReadyToDecrypt);
1262
+ }
1263
+ break;
1264
+ case "String": {
1265
+ appState = Security(appState,process.env['FBKEY'],'Decrypt');
1266
+ logger.Normal(Language.DecryptSuccess);
1267
+ }
1268
+ break;
1269
+ default: {
1270
+ logger.Warning(Language.InvaildAppState);
1271
+ process.exit(0)
1272
+ }
1273
+ }
1274
+ }
1275
+ break;
1276
+ default: {
1277
+ logger.Warning(Language.InvaildAppState);
1278
+ process.exit(0)
1279
+ }
1280
+ }
1281
+ }
1282
+ break;
1283
+ case false: {
1284
+ switch (utils.getType(appState)) {
1285
+ case "Array": {
1286
+ switch (utils.getType(appState[0])) {
1287
+ case "Object": {
1288
+ logger.Normal(Language.EncryptStateOff);
1289
+ }
1290
+ break;
1291
+ case "String": {
1292
+ appState = Security(appState,process.env['FBKEY'],'Decrypt');
1293
+ logger.Normal(Language.EncryptStateOff);
1294
+ logger.Normal(Language.DecryptSuccess);
1295
+ }
1296
+ break;
1297
+ default: {
1298
+ logger.Warning(Language.InvaildAppState);
1299
+ process.exit(0)
1300
+ }
1301
+ }
1302
+ }
1303
+ break;
1304
+ default: {
1305
+ logger.Warning(Language.InvaildAppState);
1306
+ process.exit(0)
1307
+ }
1308
+ }
1309
+ }
1310
+ break;
1311
+ default: {
1312
+ logger.Warning(getText(Language.IsNotABoolean,global.Fca.Require.FastConfig.EncryptFeature))
1313
+ process.exit(0);
1314
+ }
1315
+ }
1316
+ }
1317
+ catch (e) {
1318
+ console.log(e);
1319
+ }
1320
+
1321
+ try {
1322
+ appState = JSON.parse(appState);
1323
+ }
1324
+ catch (e) {
1325
+ try {
1326
+ appState = appState;
1327
+ }
1328
+ catch (e) {
1329
+ return logger.Error();
1330
+ }
1331
+ }
1332
+ try {
1333
+ global.Fca.Data.AppState = appState;
1334
+ appState.map(function(/** @type {{ key: string; value: string; expires: string; domain: string; path: string; }} */c) {
1335
+ var str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
1336
+ jar.setCookie(str, "http://" + c.domain);
1337
+ });
1338
+ Database().set('Backup', appState);
1339
+ mainPromise = utils.get('https://www.facebook.com/', jar, null, globalOptions, { noRef: true }).then(utils.saveCookies(jar));
1340
+ }
1341
+ catch (e) {
1342
+ try {
1343
+ if (Database().has('Backup')) {
1344
+ return backup(Database().get('Backup'),globalOptions, callback, prCallback);
1345
+ }
1346
+ else {
1347
+ logger.Warning(Language.ErrBackup);
1348
+ process.exit(0);
1349
+ }
1350
+ }
1351
+ catch (e) {
1352
+ logger.Warning(Language.ErrBackup);
1353
+ process.exit(0);
1354
+ }
1355
+ }
1356
+ }
1357
+
1358
+ else {
1359
+ mainPromise = utils
1360
+ .get("https://www.facebook.com/", null, null, globalOptions, { noRef: true })
1361
+ .then(utils.saveCookies(jar))
1362
+ .then(makeLogin(jar, email, password, globalOptions, callback, prCallback))
1363
+ .then(function() {
1364
+ return utils.get('https://www.facebook.com/', jar, null, globalOptions).then(utils.saveCookies(jar));
1365
+ });
1366
+ }
1367
+ } catch (e) {
1368
+ console.log(e);
1369
+ }
1370
+
1371
+
1372
+ var ctx,api;
1373
+ mainPromise = mainPromise
1374
+ .then(function(res) {
1375
+ var reg = /<meta http-equiv="refresh" content="0;url=([^"]+)[^>]+>/,redirect = reg.exec(res.body);
1376
+ if (redirect && redirect[1]) return utils.get(redirect[1], jar, null, globalOptions).then(utils.saveCookies(jar));
1377
+ return res;
1378
+ })
1379
+ .then(function(res) {
1380
+ var html = res.body,Obj = buildAPI(globalOptions, html, jar);
1381
+ ctx = Obj.ctx;
1382
+ api = Obj.api;
1383
+ process.env.api = Obj.api;
1384
+ return res;
1385
+ });
1386
+ if (globalOptions.pageID) {
1387
+ mainPromise = mainPromise
1388
+ .then(function() {
1389
+ return utils.get('https://www.facebook.com/' + ctx.globalOptions.pageID + '/messages/?section=messages&subsection=inbox', ctx.jar, null, globalOptions);
1390
+ })
1391
+ .then(function(resData) {
1392
+ var url = utils.getFrom(resData.body, 'window.location.replace("https:\\/\\/www.facebook.com\\', '");').split('\\').join('');
1393
+ url = url.substring(0, url.length - 1);
1394
+ return utils.get('https://www.facebook.com' + url, ctx.jar, null, globalOptions);
1395
+ });
1396
+ }
1397
+ mainPromise
1398
+ .then(async() => {
1399
+ logger.Normal(getText(Language.LocalVersion,global.Fca.Version));
1400
+ logger.Normal(getText(Language.CountTime,global.Fca.Data.CountTime()))
1401
+ logger.Normal(Language.WishMessage[Math.floor(Math.random()*Language.WishMessage.length)]);
1402
+ require('./Extra/ExtraUptimeRobot')();
1403
+ callback(null, api);
1404
+ }).catch(function(/** @type {{ error: any; }} */e) {
1405
+ log.error("login", e.error || e);
1406
+ callback(e);
1407
+ });
1408
+ }
1409
+
1410
+ /**
1411
+ * It asks the user for their account and password, and then saves it to the database.
1412
+ */
1413
+
1414
+ function setUserNameAndPassWord() {
1415
+ let rl = readline.createInterface({
1416
+ input: process.stdin,
1417
+ output: process.stdout
1418
+ });
1419
+
1420
+ console.clear();
1421
+ console.log(figlet.textSync('NAYAN', {font: 'ANSI Shadow',horizontalLayout: 'default',verticalLayout: 'default',width: 0,whitespaceBreak: true }));
1422
+ console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "Operating System: " + chalk.bold.red(os.type()));
1423
+ console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "Machine Version: " + chalk.bold.red(os.version()));
1424
+ console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "NAYAN Version: " + chalk.bold.red(global.Fca.Version) + '\n');
1425
+ try {
1426
+ rl.question(Language.TypeAccount, (Account) => {
1427
+ if (!Account.includes("@") && global.Fca.Require.utils.getType(parseInt(Account)) != "Number") return logger.Normal(Language.TypeAccountError, function () { process.exit(1) }); //Very Human
1428
+ else rl.question(Language.TypePassword, function (Password) {
1429
+ rl.close();
1430
+ try {
1431
+ Database().set("Account", Account);
1432
+ Database().set("Password", Password);
1433
+ }
1434
+ catch (e) {
1435
+ logger.Warning(Language.ErrDataBase);
1436
+ logger.Error();
1437
+ process.exit(0);
1438
+ }
1439
+ if (global.Fca.Require.FastConfig.ResetDataLogin) {
1440
+ global.Fca.Require.FastConfig.ResetDataLogin = false;
1441
+ global.Fca.Require.fs.writeFileSync(process.cwd() + '/FastConfigNayan.json', JSON.stringify(global.Fca.Require.FastConfig, null, 4));
1442
+ }
1443
+ logger.Success(Language.SuccessSetData);
1444
+ process.exit(1);
1445
+ });
1446
+ })
1447
+ }
1448
+ catch (e) {
1449
+ logger.Error(e)
1450
+ }
1451
+ }
1452
+
1453
+ /**
1454
+ * @param {{ email: any; password: any; appState: any; }} loginData
1455
+ * @param {{}} options
1456
+ * @param {(error: any, api: any) => any} callback
1457
+ */
1458
+
1459
+ function login(loginData, options, callback) {
1460
+ if (utils.getType(options) === 'Function' || utils.getType(options) === 'AsyncFunction') {
1461
+ callback = options;
1462
+ options = {};
1463
+ }
1464
+
1465
+ var globalOptions = {
1466
+ selfListen: false,
1467
+ listenEvents: true,
1468
+ listenTyping: false,
1469
+ updatePresence: false,
1470
+ forceLogin: false,
1471
+ autoMarkDelivery: false,
1472
+ autoMarkRead: false,
1473
+ autoReconnect: true,
1474
+ logRecordSize: 100,
1475
+ online: false,
1476
+ emitReady: false,
1477
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8"
1478
+ };
1479
+
1480
+ var prCallback = null;
1481
+ if (utils.getType(callback) !== "Function" && utils.getType(callback) !== "AsyncFunction") {
1482
+ var rejectFunc = null;
1483
+ var resolveFunc = null;
1484
+ var returnPromise = new Promise(function(resolve, reject) {
1485
+ resolveFunc = resolve;
1486
+ rejectFunc = reject;
1487
+ });
1488
+ prCallback = function(error, api) {
1489
+ if (error) return rejectFunc(error);
1490
+ return resolveFunc(api);
1491
+ };
1492
+ callback = prCallback;
1493
+ }
1494
+
1495
+ if (loginData.email && loginData.password) {
1496
+ setOptions(globalOptions, {
1497
+ logLevel: "silent",
1498
+ forceLogin: true,
1499
+ userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36"
1500
+ });
1501
+ loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback, prCallback);
1502
+ }
1503
+ else if (loginData.appState) {
1504
+ setOptions(globalOptions, options);
1505
+ let All = (getAll()).filter(i => i.data.messageCount !== undefined);
1506
+ if (All.length >= 1) {
1507
+ deleteAll(All.map(obj => obj.data.threadID));
1508
+ }
1509
+
1510
+ if (global.Fca.Require.FastConfig.Websocket_Extension.Status) {
1511
+ const UserName = Database().get('Ws_UserName');
1512
+ const PassWord = Database().get("Ws_PassWord");
1513
+ if (!UserName || !PassWord || global.Fca.Require.FastConfig.Websocket_Extension.ResetData) {
1514
+ const question = question => {
1515
+ const rl = readline.createInterface({
1516
+ input: process.stdin,
1517
+ output: process.stdout
1518
+ });
1519
+ var done,answ;
1520
+ rl.question(question, answer => {
1521
+ rl.close();
1522
+ answ = answer;
1523
+ done = true
1524
+ })
1525
+ deasync.loopWhile(function(){
1526
+ return !done;
1527
+ });
1528
+ return answ;
1529
+ };
1530
+ console.clear();
1531
+ console.log(figlet.textSync('NAYAN', {font: 'ANSI Shadow',horizontalLayout: 'default',verticalLayout: 'default',width: 0,whitespaceBreak: true }));
1532
+ console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "Operating System: " + chalk.bold.red(os.type()));
1533
+ console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "Machine Version: " + chalk.bold.red(os.version()));
1534
+ console.log(chalk.bold.hex('#9900FF')("[</>]") + chalk.bold.yellow(' => ') + "NAYAN Version: " + chalk.bold.red(global.Fca.Version) + '\n');
1535
+ const UserName = question(Language.Ws_TypeUserName);
1536
+ const PassWord = question(Language.Ws_TypePassWord);
1537
+ if (!UserName || !PassWord) {
1538
+ logger.Warning("Dangerous action detected! Proceeding to automatically disable websocket_extension.");
1539
+ global.Fca.Require.FastConfig.Websocket_Extension.Status = false;
1540
+ global.Fca.Require.fs.writeFileSync(process.cwd() + "/FastConfigNayan.json", JSON.stringify(global.Fca.Require.FastConfig, null, "\t"));
1541
+ }
1542
+ else {
1543
+ try {
1544
+ Database().set('Ws_UserName', UserName);
1545
+ Database().set('Ws_PassWord', PassWord);
1546
+ logger.Success(Language.Ws_Success, function() {
1547
+ const speakeasy = require('speakeasy');
1548
+ const secret = (speakeasy.generateSecret({ length: 20 }));
1549
+ logger.Warning(getText(Language.Ws_2Fa, secret.base32))
1550
+ Database().set('Ws_2Fa', secret.base32);
1551
+ if (global.Fca.Require.FastConfig.Websocket_Extension.ResetData) {
1552
+ global.Fca.Require.FastConfig.Websocket_Extension.ResetData = false;
1553
+ global.Fca.Require.fs.writeFileSync(process.cwd() + '/FastConfigNayan.json', JSON.stringify(global.Fca.Require.FastConfig, null, 4));
1554
+ }
1555
+ question("Enter To Continue!");
1556
+ const ask = function() {
1557
+ const TFa_Check = question(Language.Ws_2Fa_Check)
1558
+ if (TFa_Check != speakeasy.totp({
1559
+ secret: secret.base32,
1560
+ encoding: 'base32'
1561
+ })) {
1562
+ logger.Warning("Mã Không Đúng vui lòng nhập lại(Incorrect code, please enter again.)")
1563
+ ask();
1564
+ }
1565
+ else {
1566
+ logger.Success("Success!");
1567
+ process.exit(1);
1568
+ }
1569
+ }
1570
+ return ask();
1571
+ });
1572
+ }
1573
+ catch (e) {
1574
+ console.log(e)
1575
+ logger.Warning("Error, auto turn off Websocket_extension");
1576
+ global.Fca.Require.FastConfig.Websocket_Extension.Status = false;
1577
+ global.Fca.Require.fs.writeFileSync(process.cwd() + "/FastConfigNayan.json", JSON.stringify(global.Fca.Require.FastConfig, null, "\t"));
1578
+ process.exit(1);
1579
+ }
1580
+ }
1581
+ }
1582
+ }
1583
+
1584
+ switch (global.Fca.Require.FastConfig.AutoLogin) {
1585
+ case true: {
1586
+ if (global.Fca.Require.FastConfig.ResetDataLogin) return setUserNameAndPassWord();
1587
+ else {
1588
+ try {
1589
+ const TempState = Database().get("TempState")
1590
+ if (TempState) {
1591
+ try {
1592
+ loginData.appState = JSON.parse(TempState);
1593
+ }
1594
+ catch (_) {
1595
+ loginData.appState = TempState;
1596
+ }
1597
+ Database().delete("TempState");
1598
+ }
1599
+ }
1600
+ catch (e) {
1601
+ console.log(e)
1602
+ Database().delete("TempState");
1603
+ logger.Warning(Language.ErrDataBase);
1604
+ logger.Error();
1605
+ process.exit(0);
1606
+ }
1607
+ try {
1608
+ if (Database().has('Account') && Database().has('Password')) return loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback, prCallback);
1609
+ else return setUserNameAndPassWord();
1610
+ }
1611
+ catch (e) {
1612
+ console.log(e)
1613
+ logger.Warning(Language.ErrDataBase);
1614
+ logger.Error();
1615
+ process.exit(0);
1616
+ }
1617
+ }
1618
+ }
1619
+ case false: {
1620
+ return loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback, prCallback);
1621
+ }
1622
+ }
1623
+ }
1624
+ return returnPromise;
1625
+ }
1626
+
1627
+ module.exports = login;