@lazyneoaz/nkxchat 1.0.0

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.
Files changed (123) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +199 -0
  3. package/examples/login-with-cookies.js +102 -0
  4. package/examples/verify.js +70 -0
  5. package/index.js +2 -0
  6. package/package.json +84 -0
  7. package/src/apis/addExternalModule.js +24 -0
  8. package/src/apis/addUserToGroup.js +108 -0
  9. package/src/apis/changeAdminStatus.js +148 -0
  10. package/src/apis/changeArchivedStatus.js +61 -0
  11. package/src/apis/changeAvatar.js +103 -0
  12. package/src/apis/changeBio.js +69 -0
  13. package/src/apis/changeBlockedStatus.js +54 -0
  14. package/src/apis/changeGroupImage.js +136 -0
  15. package/src/apis/changeThreadColor.js +116 -0
  16. package/src/apis/changeThreadEmoji.js +53 -0
  17. package/src/apis/comment.js +207 -0
  18. package/src/apis/createAITheme.js +129 -0
  19. package/src/apis/createNewGroup.js +79 -0
  20. package/src/apis/createPoll.js +73 -0
  21. package/src/apis/deleteMessage.js +44 -0
  22. package/src/apis/deleteThread.js +52 -0
  23. package/src/apis/editMessage.js +70 -0
  24. package/src/apis/emoji.js +124 -0
  25. package/src/apis/enableAutoSaveAppState.js +69 -0
  26. package/src/apis/fetchThemeData.js +113 -0
  27. package/src/apis/follow.js +81 -0
  28. package/src/apis/forwardAttachment.js +178 -0
  29. package/src/apis/forwardMessage.js +52 -0
  30. package/src/apis/friend.js +243 -0
  31. package/src/apis/gcmember.js +122 -0
  32. package/src/apis/gcname.js +123 -0
  33. package/src/apis/gcrule.js +119 -0
  34. package/src/apis/getAccess.js +111 -0
  35. package/src/apis/getBotInfo.js +88 -0
  36. package/src/apis/getBotInitialData.js +43 -0
  37. package/src/apis/getEmojiUrl.js +40 -0
  38. package/src/apis/getFriendsList.js +79 -0
  39. package/src/apis/getMessage.js +423 -0
  40. package/src/apis/getTheme.js +123 -0
  41. package/src/apis/getThemeInfo.js +116 -0
  42. package/src/apis/getThemePictures.js +87 -0
  43. package/src/apis/getThreadColors.js +119 -0
  44. package/src/apis/getThreadHistory.js +239 -0
  45. package/src/apis/getThreadInfo.js +267 -0
  46. package/src/apis/getThreadList.js +232 -0
  47. package/src/apis/getThreadPictures.js +58 -0
  48. package/src/apis/getUserID.js +117 -0
  49. package/src/apis/getUserInfo.js +513 -0
  50. package/src/apis/getUserInfoV2.js +146 -0
  51. package/src/apis/handleFriendRequest.js +66 -0
  52. package/src/apis/handleMessageRequest.js +50 -0
  53. package/src/apis/httpGet.js +63 -0
  54. package/src/apis/httpPost.js +89 -0
  55. package/src/apis/httpPostFormData.js +69 -0
  56. package/src/apis/listenMqtt.js +924 -0
  57. package/src/apis/listenSpeed.js +178 -0
  58. package/src/apis/logout.js +63 -0
  59. package/src/apis/markAsDelivered.js +47 -0
  60. package/src/apis/markAsRead.js +95 -0
  61. package/src/apis/markAsReadAll.js +40 -0
  62. package/src/apis/markAsSeen.js +70 -0
  63. package/src/apis/mqttDeltaValue.js +252 -0
  64. package/src/apis/muteThread.js +45 -0
  65. package/src/apis/nickname.js +132 -0
  66. package/src/apis/notes.js +163 -0
  67. package/src/apis/pinMessage.js +150 -0
  68. package/src/apis/produceMetaTheme.js +160 -0
  69. package/src/apis/realtime.js +182 -0
  70. package/src/apis/refreshFb_dtsg.js +94 -0
  71. package/src/apis/removeUserFromGroup.js +117 -0
  72. package/src/apis/resolvePhotoUrl.js +58 -0
  73. package/src/apis/searchForThread.js +154 -0
  74. package/src/apis/sendEffect.js +306 -0
  75. package/src/apis/sendMessage.js +353 -0
  76. package/src/apis/sendMessageMqtt.js +255 -0
  77. package/src/apis/sendTypingIndicator.js +40 -0
  78. package/src/apis/setMessageReaction.js +27 -0
  79. package/src/apis/setMessageReactionMqtt.js +61 -0
  80. package/src/apis/setPostReaction.js +118 -0
  81. package/src/apis/setThreadTheme.js +210 -0
  82. package/src/apis/setThreadThemeMqtt.js +94 -0
  83. package/src/apis/setTitle.js +26 -0
  84. package/src/apis/share.js +106 -0
  85. package/src/apis/shareContact.js +66 -0
  86. package/src/apis/stickers.js +257 -0
  87. package/src/apis/story.js +181 -0
  88. package/src/apis/theme.js +233 -0
  89. package/src/apis/unfriend.js +47 -0
  90. package/src/apis/unsendMessage.js +17 -0
  91. package/src/apis/uploadAttachment.js +87 -0
  92. package/src/database/appStateBackup.js +189 -0
  93. package/src/database/models/index.js +56 -0
  94. package/src/database/models/thread.js +31 -0
  95. package/src/database/models/user.js +32 -0
  96. package/src/database/threadData.js +101 -0
  97. package/src/database/userData.js +90 -0
  98. package/src/engine/client.js +92 -0
  99. package/src/engine/models/buildAPI.js +118 -0
  100. package/src/engine/models/loginHelper.js +492 -0
  101. package/src/engine/models/setOptions.js +88 -0
  102. package/src/types/index.d.ts +498 -0
  103. package/src/utils/antiSuspension.js +516 -0
  104. package/src/utils/auth-helpers.js +149 -0
  105. package/src/utils/autoReLogin.js +237 -0
  106. package/src/utils/axios.js +368 -0
  107. package/src/utils/cache.js +54 -0
  108. package/src/utils/clients.js +279 -0
  109. package/src/utils/constants.js +525 -0
  110. package/src/utils/formatters/data/formatAttachment.js +370 -0
  111. package/src/utils/formatters/data/formatDelta.js +109 -0
  112. package/src/utils/formatters/index.js +159 -0
  113. package/src/utils/formatters/value/formatCookie.js +91 -0
  114. package/src/utils/formatters/value/formatDate.js +36 -0
  115. package/src/utils/formatters/value/formatID.js +16 -0
  116. package/src/utils/formatters.js +1369 -0
  117. package/src/utils/headers.js +235 -0
  118. package/src/utils/index.js +152 -0
  119. package/src/utils/monitoring.js +333 -0
  120. package/src/utils/rateLimiter.js +251 -0
  121. package/src/utils/tokenRefresh.js +285 -0
  122. package/src/utils/user-agents.js +238 -0
  123. package/src/utils/validation.js +157 -0
@@ -0,0 +1,525 @@
1
+ /* eslint-disable no-prototype-builtins */
2
+ "use strict";
3
+
4
+ const path = require("path");
5
+ const fs = require("fs");
6
+
7
+ const pc = require('picocolors');
8
+ const _gradientLib = require('gradient-string');
9
+ const gradientFn = _gradientLib.default || _gradientLib;
10
+ const cliProgress = require('cli-progress');
11
+ const _oraLib = require('ora');
12
+ const Ora = _oraLib.default || _oraLib;
13
+
14
+ const ws = "[NKXCHAT]";
15
+
16
+ let h;
17
+ const i = {};
18
+ const j = {
19
+ _: "%",
20
+ A: "%2",
21
+ B: "000",
22
+ C: "%7d",
23
+ D: "%7b%22",
24
+ E: "%2c%22",
25
+ F: "%22%3a",
26
+ G: "%2c%22ut%22%3a1",
27
+ H: "%2c%22bls%22%3a",
28
+ I: "%2c%22n%22%3a%22%",
29
+ J: "%22%3a%7b%22i%22%3a0%7d",
30
+ K: "%2c%22pt%22%3a0%2c%22vis%22%3a",
31
+ L: "%2c%22ch%22%3a%7b%22h%22%3a%22",
32
+ M: "%7b%22v%22%3a2%2c%22time%22%3a1",
33
+ N: ".channel%22%2c%22sub%22%3a%5b",
34
+ O: "%2c%22sb%22%3a1%2c%22t%22%3a%5b",
35
+ P: "%2c%22ud%22%3a100%2c%22lc%22%3a0",
36
+ Q: "%5d%2c%22f%22%3anull%2c%22uct%22%3a",
37
+ R: ".channel%22%2c%22sub%22%3a%5b1%5d",
38
+ S: "%22%2c%22m%22%3a0%7d%2c%7b%22i%22%3a",
39
+ T: "%2c%22blc%22%3a1%2c%22snd%22%3a1%2c%22ct%22%3a",
40
+ U: "%2c%22blc%22%3a0%2c%22snd%22%3a1%2c%22ct%22%3a",
41
+ V: "%2c%22blc%22%3a0%2c%22snd%22%3a0%2c%22ct%22%3a",
42
+ W: "%2c%22s%22%3a0%2c%22blo%22%3a0%7d%2c%22bl%22%3a%7b%22ac%22%3a",
43
+ X: "%2c%22ri%22%3a0%7d%2c%22state%22%3a%7b%22p%22%3a0%2c%22ut%22%3a1",
44
+ Y: "%2c%22pt%22%3a0%2c%22vis%22%3a1%2c%22bls%22%3a0%2c%22blc%22%3a0%2c%22snd%22%3a1%2c%22ct%22%3a",
45
+ Z: "%2c%22sb%22%3a1%2c%22t%22%3a%5b%5d%2c%22f%22%3anull%2c%22uct%22%3a0%2c%22s%22%3a0%2c%22blo%22%3a0%7d%2c%22bl%22%3a%7b%22ac%22%3a",
46
+ };
47
+ (function () {
48
+ const l = [];
49
+ for (const m in j) {
50
+ i[j[m]] = m;
51
+ l.push(j[m]);
52
+ }
53
+ l.reverse();
54
+ h = new RegExp(l.join("|"), "g");
55
+ })();
56
+
57
+ const NUM_TO_MONTH = [
58
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
59
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
60
+ ];
61
+ const NUM_TO_DAY = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
62
+
63
+ function getRandom(arr) {
64
+ return arr[Math.floor(Math.random() * arr.length)];
65
+ }
66
+
67
+ function padZeros(val, len) {
68
+ val = String(val);
69
+ len = len || 2;
70
+ while (val.length < len) val = "0" + val;
71
+ return val;
72
+ }
73
+
74
+ function generateThreadingID(clientID) {
75
+ const k = Date.now();
76
+ const l = Math.floor(Math.random() * 4294967295);
77
+ const m = clientID;
78
+ return "<" + k + ":" + l + "-" + m + "@mail.projektitan.com>";
79
+ }
80
+
81
+ function binaryToDecimal(data) {
82
+ let ret = "";
83
+ while (data !== "0") {
84
+ let end = 0;
85
+ let fullName = "";
86
+ let i = 0;
87
+ for (; i < data.length; i++) {
88
+ end = 2 * end + parseInt(data[i], 10);
89
+ if (end >= 10) {
90
+ fullName += "1";
91
+ end -= 10;
92
+ } else {
93
+ fullName += "0";
94
+ }
95
+ }
96
+ ret = end.toString() + ret;
97
+ data = fullName.slice(fullName.indexOf("1"));
98
+ }
99
+ return ret;
100
+ }
101
+
102
+ function generateOfflineThreadingID() {
103
+ const ret = Date.now();
104
+ const value = Math.floor(Math.random() * 4294967295);
105
+ const str = ("0000000000000000000000" + value.toString(2)).slice(-22);
106
+ const msgs = ret.toString(2) + str;
107
+ return binaryToDecimal(msgs);
108
+ }
109
+
110
+ function presenceEncode(str) {
111
+ return encodeURIComponent(str)
112
+ .replace(/([_A-Z])|%../g, function (m, n) {
113
+ return n ? "%" + n.charCodeAt(0).toString(16) : m;
114
+ })
115
+ .toLowerCase()
116
+ .replace(h, function (m) {
117
+ return i[m];
118
+ });
119
+ }
120
+
121
+ function presenceDecode(str) {
122
+ return decodeURIComponent(
123
+ str.replace(/[_A-Z]/g, function (m) {
124
+ return j[m];
125
+ })
126
+ );
127
+ }
128
+
129
+ function generatePresence(userID) {
130
+ const time = Date.now();
131
+ return (
132
+ "E" +
133
+ presenceEncode(
134
+ JSON.stringify({
135
+ v: 3,
136
+ time: parseInt(time / 1000, 10),
137
+ user: userID,
138
+ state: {
139
+ ut: 0,
140
+ t2: [],
141
+ lm2: null,
142
+ uct2: time,
143
+ tr: null,
144
+ tw: Math.floor(Math.random() * 4294967295) + 1,
145
+ at: time,
146
+ },
147
+ ch: {
148
+ ["p_" + userID]: 0,
149
+ },
150
+ })
151
+ )
152
+ );
153
+ }
154
+
155
+ function generateAccessiblityCookie() {
156
+ const time = Date.now();
157
+ return encodeURIComponent(
158
+ JSON.stringify({
159
+ sr: 0,
160
+ "sr-ts": time,
161
+ jk: 0,
162
+ "jk-ts": time,
163
+ kb: 0,
164
+ "kb-ts": time,
165
+ hcm: 0,
166
+ "hcm-ts": time,
167
+ })
168
+ );
169
+ }
170
+
171
+ function getGUID() {
172
+ let sectionLength = Date.now();
173
+ const id = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
174
+ const r = Math.floor((sectionLength + Math.random() * 16) % 16);
175
+ sectionLength = Math.floor(sectionLength / 16);
176
+ const _guid = (c == "x" ? r : (r & 7) | 8).toString(16);
177
+ return _guid;
178
+ });
179
+ return id;
180
+ }
181
+
182
+ function getFrom(str, startToken, endToken) {
183
+ const start = str.indexOf(startToken) + startToken.length;
184
+ if (start < startToken.length) return "";
185
+
186
+ const lastHalf = str.substring(start);
187
+ const end = lastHalf.indexOf(endToken);
188
+ if (end === -1) {
189
+ throw Error(
190
+ "Could not find endTime `" + endToken + "` in the given string."
191
+ );
192
+ }
193
+ return lastHalf.substring(0, end);
194
+ }
195
+
196
+ function makeParsable(html) {
197
+ const withoutForLoop = html.replace(/for\s*\(\s*;\s*;\s*\)\s*/, "");
198
+ const maybeMultipleObjects = withoutForLoop.split(/\}\r\n *\{/);
199
+ if (maybeMultipleObjects.length === 1) return maybeMultipleObjects;
200
+
201
+ return "[" + maybeMultipleObjects.join("},{") + "]";
202
+ }
203
+
204
+ function arrToForm(form) {
205
+ return arrayToObject(
206
+ form,
207
+ function (v) {
208
+ return v.name;
209
+ },
210
+ function (v) {
211
+ return v.val;
212
+ }
213
+ );
214
+ }
215
+
216
+ function arrayToObject(arr, getKey, getValue) {
217
+ return arr.reduce(function (acc, val) {
218
+ acc[getKey(val)] = getValue(val);
219
+ return acc;
220
+ }, {});
221
+ }
222
+
223
+ function getSignatureID() {
224
+ return Math.floor(Math.random() * 2147483648).toString(16);
225
+ }
226
+
227
+ function generateTimestampRelative() {
228
+ const d = new Date();
229
+ return d.getHours() + ":" + padZeros(d.getMinutes());
230
+ }
231
+
232
+ function getType(obj) {
233
+ return Object.prototype.toString.call(obj).slice(8, -1);
234
+ }
235
+
236
+ // ─── Theme system ───────────────────────────────────────────────────────────
237
+
238
+ const FCA_THEME = (process.env.FCA_LOG_THEME || 'cyberpunk').toLowerCase();
239
+
240
+ const THEME_GRADIENTS = {
241
+ cyberpunk: gradientFn(['#ff00cc', '#3333ff']),
242
+ neon: gradientFn(['#39ff14', '#00b4d8']),
243
+ sunset: gradientFn(['#ff6b35', '#f7c59f']),
244
+ ocean: gradientFn(['#0077b6', '#90e0ef']),
245
+ minimal: null,
246
+ };
247
+
248
+ function getThemeGradient() {
249
+ return THEME_GRADIENTS[FCA_THEME] || THEME_GRADIENTS.cyberpunk;
250
+ }
251
+
252
+ function applyTheme(text) {
253
+ const g = getThemeGradient();
254
+ if (!g) return pc.bold(text);
255
+ try { return g(text); } catch (_) { return pc.bold(text); }
256
+ }
257
+
258
+ function styledLevel(level) {
259
+ switch (level) {
260
+ case 'TRACE': return pc.dim(pc.gray(level));
261
+ case 'DEBUG': return pc.cyan(level);
262
+ case 'INFO': return pc.blue(level);
263
+ case 'LOG': return pc.green(level);
264
+ case 'SUCCESS': return pc.bold(pc.green(level));
265
+ case 'WARN': return pc.bold(pc.yellow(level));
266
+ case 'ERROR': return pc.bold(pc.red(level));
267
+ case 'CRITICAL': return pc.bgRed(pc.bold(pc.white(level)));
268
+ default: return level;
269
+ }
270
+ }
271
+
272
+ // ─── Logger state ───────────────────────────────────────────────────────────
273
+
274
+ let logging = true;
275
+ let logLevel = 'info';
276
+
277
+ const logLevels = {
278
+ trace: 0,
279
+ debug: 1,
280
+ info: 2,
281
+ warn: 3,
282
+ error: 4,
283
+ silent: 5
284
+ };
285
+
286
+ function logOptions(bool) {
287
+ logging = bool;
288
+ }
289
+
290
+ function setLogLevel(level) {
291
+ if (logLevels.hasOwnProperty(level)) {
292
+ logLevel = level;
293
+ }
294
+ }
295
+
296
+ function getTimestamp() {
297
+ const now = new Date();
298
+ return `[${padZeros(now.getHours())}:${padZeros(now.getMinutes())}:${padZeros(now.getSeconds())}]`;
299
+ }
300
+
301
+ function shouldLog(level) {
302
+ return logging && logLevels[level] >= logLevels[logLevel];
303
+ }
304
+
305
+ function fmtLabel() {
306
+ return applyTheme(ws);
307
+ }
308
+
309
+ function printLog(level, args) {
310
+ const ts = pc.dim(getTimestamp());
311
+ const lbl = fmtLabel();
312
+ const lvl = styledLevel(level);
313
+ const out = args.map(a => (typeof a === 'string' ? a : JSON.stringify(a)));
314
+
315
+ if (level === 'ERROR' || level === 'CRITICAL') {
316
+ console.error(ts, lbl, lvl, ...out);
317
+ } else if (level === 'WARN') {
318
+ console.warn(ts, lbl, lvl, ...out);
319
+ } else {
320
+ console.log(ts, lbl, lvl, ...out);
321
+ }
322
+ }
323
+
324
+ function trace(...args) {
325
+ if (!shouldLog('trace')) return;
326
+ printLog('TRACE', args);
327
+ }
328
+
329
+ function debug(...args) {
330
+ if (!shouldLog('debug')) return;
331
+ printLog('DEBUG', args);
332
+ }
333
+
334
+ function info(...args) {
335
+ if (!shouldLog('info')) return;
336
+ printLog('INFO', args);
337
+ }
338
+
339
+ function log(...args) {
340
+ if (!shouldLog('info')) return;
341
+ printLog('LOG', args);
342
+ }
343
+
344
+ function success(...args) {
345
+ if (logging === false) return;
346
+ printLog('SUCCESS', args);
347
+ }
348
+
349
+ function warn(...args) {
350
+ if (!shouldLog('warn')) return;
351
+ printLog('WARN', args);
352
+ }
353
+
354
+ function error(...args) {
355
+ if (!shouldLog('error')) return;
356
+ printLog('ERROR', args);
357
+ }
358
+
359
+ function critical(...args) {
360
+ if (!shouldLog('error')) return;
361
+ printLog('CRITICAL', args);
362
+ }
363
+
364
+ function banner(message) {
365
+ if (!shouldLog('info')) return;
366
+ console.log(message);
367
+ }
368
+
369
+ // ─── Spinner helpers ─────────────────────────────────────────────────────────
370
+
371
+ function createSpinner(text) {
372
+ try {
373
+ return Ora({ text, color: 'cyan', spinner: 'dots' }).start();
374
+ } catch (_) {
375
+ return {
376
+ text,
377
+ succeed(t) { log(t || this.text); },
378
+ fail(t) { error(t || this.text); },
379
+ warn(t) { warn(t || this.text); },
380
+ stop() {},
381
+ };
382
+ }
383
+ }
384
+
385
+ // ─── Progress bar (API method loader) ────────────────────────────────────────
386
+
387
+ function runMethodLoadProgress(files, loadFn) {
388
+ if (!files || files.length === 0) return;
389
+ if (!shouldLog('info')) {
390
+ files.forEach(f => { try { loadFn(f); } catch (_) {} });
391
+ return;
392
+ }
393
+
394
+ let bar;
395
+ try {
396
+ bar = new cliProgress.SingleBar({
397
+ format: `${applyTheme(ws)} ${pc.cyan('{bar}')} {percentage}% | {value}/{total} modules`,
398
+ barCompleteChar: '█',
399
+ barIncompleteChar: '░',
400
+ hideCursor: true,
401
+ clearOnComplete: true,
402
+ }, cliProgress.Presets.shades_classic);
403
+ bar.start(files.length, 0);
404
+ } catch (_) {
405
+ bar = null;
406
+ }
407
+
408
+ files.forEach((f, idx) => {
409
+ try { loadFn(f); } catch (_) {}
410
+ if (bar) bar.update(idx + 1);
411
+ });
412
+
413
+ if (bar) {
414
+ bar.stop();
415
+ success(`Loaded ${files.length} API modules`);
416
+ }
417
+ }
418
+
419
+ // ─── Version / credits ───────────────────────────────────────────────────────
420
+
421
+ function readLocalPackage() {
422
+ try {
423
+ const pkgPath = path.resolve(__dirname, "..", "..", "package.json");
424
+ const data = fs.readFileSync(pkgPath, "utf8");
425
+ const json = JSON.parse(data);
426
+ return { name: json.name || "@lazyneoaz/nkxchat", version: json.version || "1.0.0" };
427
+ } catch (_) {
428
+ return { name: "@lazyneoaz/nkxchat", version: "1.0.0" };
429
+ }
430
+ }
431
+
432
+ async function checkLatestVersion(pkgName) {
433
+ try {
434
+ const https = require('https');
435
+ return await new Promise((resolve) => {
436
+ const req = https.get(`https://registry.npmjs.org/${pkgName}/latest`, { timeout: 4000 }, (res) => {
437
+ let data = '';
438
+ res.on('data', chunk => { data += chunk; });
439
+ res.on('end', () => {
440
+ try {
441
+ const json = JSON.parse(data);
442
+ resolve(json && json.version ? String(json.version) : null);
443
+ } catch (_) { resolve(null); }
444
+ });
445
+ });
446
+ req.on('error', () => resolve(null));
447
+ req.on('timeout', () => { req.destroy(); resolve(null); });
448
+ });
449
+ } catch (_) {
450
+ return null;
451
+ }
452
+ }
453
+
454
+ function version() {
455
+ if (!shouldLog('info')) return;
456
+ const { name, version: ver } = readLocalPackage();
457
+ log(`${name} v${ver}`);
458
+ Promise.resolve()
459
+ .then(() => checkLatestVersion(name))
460
+ .then((latest) => {
461
+ if (!latest) return;
462
+ if (latest !== ver) {
463
+ warn(`New version available: v${latest}. Update: npm i ${name}@latest`);
464
+ } else {
465
+ log(`You are on the latest version (v${ver})`);
466
+ }
467
+ })
468
+ .catch(() => {});
469
+ }
470
+
471
+ function credits() {
472
+ if (!shouldLog('info')) return;
473
+ const { name, version: ver } = readLocalPackage();
474
+ console.log(applyTheme(`${name} v${ver}`));
475
+ console.log(pc.dim(' Developed and maintained by NeoKEX'));
476
+ console.log(pc.dim(' GitHub : https://github.com/lazyneoaz'));
477
+ console.log(pc.dim(' Website : https://neoaz.is-a.dev'));
478
+ console.log(pc.dim(` npm : https://www.npmjs.com/package/${name}`));
479
+ }
480
+
481
+ function startupBanner() {
482
+ if (!shouldLog('info')) return;
483
+ credits();
484
+ version();
485
+ log('Initializing...');
486
+ }
487
+
488
+ module.exports = {
489
+ ws,
490
+ logOptions,
491
+ setLogLevel,
492
+ trace,
493
+ debug,
494
+ info,
495
+ log,
496
+ success,
497
+ warn,
498
+ error,
499
+ critical,
500
+ banner,
501
+ credits,
502
+ version,
503
+ startupBanner,
504
+ createSpinner,
505
+ runMethodLoadProgress,
506
+ getRandom,
507
+ padZeros,
508
+ generateThreadingID,
509
+ binaryToDecimal,
510
+ generateOfflineThreadingID,
511
+ presenceEncode,
512
+ presenceDecode,
513
+ generatePresence,
514
+ generateAccessiblityCookie,
515
+ getGUID,
516
+ getFrom,
517
+ makeParsable,
518
+ arrToForm,
519
+ arrayToObject,
520
+ getSignatureID,
521
+ generateTimestampRelative,
522
+ getType,
523
+ NUM_TO_MONTH,
524
+ NUM_TO_DAY,
525
+ };