HerzaJ commited on
Commit
03da033
·
verified ·
1 Parent(s): 9d9ec01

Update public/dashboard.html

Browse files
Files changed (1) hide show
  1. public/dashboard.html +145 -1209
public/dashboard.html CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>DashX - Modern API Dashboard</title>
7
- <meta name="description" content="DashX is a modern REST API dashboard platform that allows you to manage, monitor, and utilize various API tools with ease. Fully featured for developers with an intuitive interface and powerful analytics.">
8
  <meta name="keywords" content="API Dashboard, REST API, DashX, API Management, Developer Tools, API Analytics">
9
  <meta name="author" content="DashX Team">
10
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
@@ -12,850 +12,87 @@
12
  <link href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert2/11.10.8/sweetalert2.min.css" rel="stylesheet">
13
  <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
14
  <link href="styles.css" rel="stylesheet">
 
15
  <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
16
- <style>
17
- i.fas, i.fa, i.far, i.fab, i.fal,
18
- .fas, .fa, .far, .fab, .fal,
19
- i[class*="fa-"] {
20
- font-family: "Font Awesome 6 Free", "Font Awesome 6 Pro", "FontAwesome" !important;
21
- font-weight: 900 !important;
22
- font-style: normal !important;
23
- font-variant: normal !important;
24
- text-rendering: auto !important;
25
- line-height: 1 !important;
26
- -webkit-font-smoothing: antialiased !important;
27
- -moz-osx-font-smoothing: grayscale !important;
28
- display: inline-block !important;
29
- }
30
-
31
- .stat-item {
32
- text-align: center;
33
- padding: 1.5rem;
34
- background: rgba(255, 255, 255, 0.05);
35
- border-radius: 12px;
36
- border: 1px solid rgba(255, 255, 255, 0.1);
37
- }
38
-
39
- .stat-item .stat-value {
40
- display: block;
41
- font-size: 1.8rem;
42
- font-weight: 700;
43
- color: rgba(133, 48, 48, 0.9);
44
- margin-bottom: 0.5rem;
45
- }
46
-
47
- .stat-item .stat-label {
48
- display: block;
49
- font-size: 0.9rem;
50
- color: rgba(255, 255, 255, 0.7);
51
- }
52
-
53
- .stat-icon {
54
- font-size: 3rem !important;
55
- color: rgba(255, 168, 168, 0.9) !important;
56
- min-width: 80px !important;
57
- text-align: center !important;
58
- display: flex !important;
59
- align-items: center !important;
60
- justify-content: center !important;
61
- }
62
-
63
- .stat-icon i {
64
- font-size: 3rem !important;
65
- display: block !important;
66
- }
67
-
68
- .stat-info {
69
- flex: 1;
70
- }
71
-
72
- .stat-number {
73
- font-size: 2rem;
74
- font-weight: 700;
75
- color: rgba(255, 255, 255, 0.9);
76
- margin-bottom: 0.25rem;
77
- word-break: break-all;
78
- }
79
-
80
- .stat-label {
81
- font-size: 0.9rem;
82
- color: rgba(255, 255, 255, 0.7);
83
- }
84
-
85
- .section h2 i {
86
- color: #e74c3c !important;
87
- }
88
-
89
- .navbar {
90
- background: rgba(44, 62, 80, 0.95) !important;
91
- backdrop-filter: blur(10px);
92
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
93
- box-shadow: 0 2px 20px rgba(0, 0, 0, 0.2);
94
- }
95
-
96
- .navbar-brand {
97
- font-size: 1.5rem;
98
- font-weight: 700;
99
- color: #fff !important;
100
- }
101
-
102
- .navbar-brand i {
103
- color: #e74c3c;
104
- font-size: 1.8rem;
105
- margin-right: 0.5rem;
106
- }
107
-
108
- .nav-link {
109
- color: #ecf0f1 !important;
110
- font-weight: 500;
111
- transition: all 0.3s ease;
112
- padding: 0.5rem 1rem !important;
113
- border-radius: 8px;
114
- margin: 0 0.25rem;
115
- }
116
-
117
- .nav-link:hover {
118
- background: rgba(255, 255, 255, 0.1);
119
- transform: translateY(-1px);
120
- }
121
-
122
- .nav-link.text-danger {
123
- color: #e74c3c !important;
124
- }
125
-
126
- .nav-link.text-danger:hover {
127
- background: rgba(231, 76, 60, 0.1);
128
- color: #ff6b6b !important;
129
- }
130
-
131
- .glassmorphism {
132
- background: rgba(255, 255, 255, 0.1);
133
- backdrop-filter: blur(10px);
134
- -webkit-backdrop-filter: blur(10px);
135
- border: 1px solid rgba(255, 255, 255, 0.2);
136
- border-radius: 16px;
137
- box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
138
- }
139
-
140
- .reset-timer-card {
141
- margin-top: 2rem;
142
- padding: 1.5rem;
143
- border-radius: 12px;
144
- background: rgba(255, 255, 255, 0.05);
145
- backdrop-filter: blur(10px);
146
- border: 1px solid rgba(255, 255, 255, 0.1);
147
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
148
- }
149
-
150
- .timer-header {
151
- display: flex;
152
- align-items: center;
153
- gap: 1rem;
154
- margin-bottom: 1rem;
155
- }
156
-
157
- .timer-header i {
158
- font-size: 1.5rem;
159
- color: #853030;
160
- }
161
-
162
- .timer-header h3 {
163
- margin: 0;
164
- font-size: 1.2rem;
165
- color: rgba(255, 255, 255, 0.9);
166
- }
167
-
168
- .timer-header p {
169
- margin: 0;
170
- opacity: 0.7;
171
- font-size: 0.9rem;
172
- }
173
-
174
- .countdown-display {
175
- text-align: center;
176
- padding: 2rem 1rem;
177
- }
178
-
179
- .countdown-time {
180
- font-size: 3rem;
181
- font-weight: bold;
182
- color: #853030;
183
- font-family: 'Courier New', monospace;
184
- letter-spacing: 0.1em;
185
- text-shadow: 0 0 20px rgba(133, 48, 48, 0.3);
186
- }
187
-
188
- .countdown-label {
189
- margin-top: 0.5rem;
190
- opacity: 0.6;
191
- font-size: 0.9rem;
192
- color: rgba(255, 255, 255, 0.8);
193
- }
194
-
195
- .reset-progress-container {
196
- width: 100%;
197
- height: 8px;
198
- background: rgba(255, 255, 255, 0.1);
199
- border-radius: 4px;
200
- overflow: hidden;
201
- margin-top: 1rem;
202
- }
203
-
204
- .reset-progress {
205
- height: 100%;
206
- background: linear-gradient(90deg, #853030, #ff6b6b);
207
- transition: width 1s linear;
208
- width: 0%;
209
- box-shadow: 0 0 10px rgba(133, 48, 48, 0.5);
210
- }
211
-
212
- .reset-info {
213
- margin-top: 1rem;
214
- padding: 1rem;
215
- background: rgba(255, 255, 255, 0.05);
216
- border-radius: 8px;
217
- display: flex;
218
- justify-content: space-between;
219
- align-items: center;
220
- }
221
-
222
- .reset-info i {
223
- color: #853030;
224
- margin-right: 0.5rem;
225
- }
226
-
227
- .reset-info span {
228
- font-size: 0.9rem;
229
- color: rgba(255, 255, 255, 0.8);
230
- }
231
-
232
- .reset-info div:last-child {
233
- font-weight: bold;
234
- color: #853030;
235
- }
236
-
237
- @keyframes pulse {
238
- 0%, 100% { opacity: 1; }
239
- 50% { opacity: 0.7; }
240
- }
241
-
242
- .reset-countdown {
243
- animation: pulse 2s ease-in-out infinite;
244
- }
245
-
246
- .usage-overview {
247
- display: grid;
248
- grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
249
- gap: 1.5rem;
250
- margin-top: 1rem;
251
- }
252
-
253
- .usage-section {
254
- background: rgba(255, 255, 255, 0.05);
255
- backdrop-filter: blur(10px);
256
- -webkit-backdrop-filter: blur(10px);
257
- border: 1px solid rgba(255, 255, 255, 0.1);
258
- padding: 1.5rem;
259
- border-radius: 16px;
260
- box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.2);
261
- transition: all 0.3s ease;
262
- }
263
-
264
- .usage-section:hover {
265
- background: rgba(255, 255, 255, 0.08);
266
- transform: translateY(-2px);
267
- box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.3);
268
- }
269
-
270
- .usage-section h4 {
271
- margin-bottom: 1rem;
272
- color: rgba(255, 255, 255, 0.9);
273
- font-size: 1.1rem;
274
- font-weight: 600;
275
- display: flex;
276
- align-items: center;
277
- gap: 0.5rem;
278
- }
279
-
280
- .usage-section h4 i {
281
- color: rgba(133, 48, 48, 0.8);
282
- }
283
-
284
- .endpoint-list, .ip-list {
285
- display: flex;
286
- flex-direction: column;
287
- gap: 0.5rem;
288
- }
289
-
290
- .endpoint-item, .ip-item {
291
- display: flex;
292
- justify-content: space-between;
293
- align-items: center;
294
- padding: 0.75rem;
295
- background: rgba(255, 255, 255, 0.08);
296
- backdrop-filter: blur(5px);
297
- border-radius: 8px;
298
- border: 1px solid rgba(255, 255, 255, 0.1);
299
- transition: all 0.3s ease;
300
- }
301
-
302
- .endpoint-item:hover, .ip-item:hover {
303
- background: rgba(255, 255, 255, 0.12);
304
- transform: translateX(4px);
305
- }
306
-
307
- .endpoint-name, .ip-address {
308
- font-family: 'Courier New', monospace;
309
- font-weight: 500;
310
- color: rgba(255, 255, 255, 0.8);
311
- font-size: 0.9rem;
312
- }
313
-
314
- .endpoint-count, .ip-count {
315
- color: rgba(133, 48, 48, 0.9);
316
- font-weight: 600;
317
- background: rgba(133, 48, 48, 0.1);
318
- padding: 0.25rem 0.5rem;
319
- border-radius: 12px;
320
- font-size: 0.8rem;
321
- }
322
-
323
- .ip-time {
324
- font-size: 0.75rem;
325
- color: rgba(255, 255, 255, 0.6);
326
- font-style: italic;
327
- }
328
-
329
- .daily-usage {
330
- display: flex;
331
- flex-direction: column;
332
- gap: 0.75rem;
333
- }
334
-
335
- .usage-day {
336
- display: grid;
337
- grid-template-columns: 70px 1fr 50px;
338
- align-items: center;
339
- gap: 1rem;
340
- padding: 0.5rem;
341
- border-radius: 8px;
342
- transition: all 0.3s ease;
343
- }
344
-
345
- .usage-day:hover {
346
- background: rgba(255, 255, 255, 0.05);
347
- }
348
-
349
- .usage-date {
350
- font-size: 0.85rem;
351
- font-weight: 500;
352
- color: rgba(255, 255, 255, 0.8);
353
- }
354
-
355
- .usage-bar-container {
356
- background: rgba(255, 255, 255, 0.1);
357
- border-radius: 10px;
358
- height: 8px;
359
- overflow: hidden;
360
- position: relative;
361
- }
362
-
363
- .usage-bar {
364
- height: 100%;
365
- background: linear-gradient(90deg, rgba(133, 48, 48, 0.8), rgba(166, 69, 69, 0.9));
366
- border-radius: 10px;
367
- transition: width 0.6s ease;
368
- position: relative;
369
- }
370
-
371
- .usage-bar::after {
372
- content: '';
373
- position: absolute;
374
- top: 0;
375
- left: 0;
376
- right: 0;
377
- bottom: 0;
378
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
379
- animation: shimmer 2s infinite;
380
- }
381
-
382
- @keyframes shimmer {
383
- 0% { transform: translateX(-100%); }
384
- 100% { transform: translateX(100%); }
385
- }
386
-
387
- .usage-count {
388
- font-size: 0.85rem;
389
- font-weight: 600;
390
- color: rgba(133, 48, 48, 0.9);
391
- text-align: center;
392
- }
393
-
394
- .no-data {
395
- text-align: center;
396
- padding: 2rem;
397
- color: rgba(255, 255, 255, 0.5);
398
- font-style: italic;
399
- }
400
-
401
- .no-data-state, .error-state {
402
- text-align: center;
403
- padding: 3rem 2rem;
404
- color: rgba(255, 255, 255, 0.6);
405
- }
406
-
407
- .error-state i {
408
- color: #ff6b6b;
409
- font-size: 2.5rem;
410
- margin-bottom: 1rem;
411
- }
412
-
413
- .search-container {
414
- margin-bottom: 2rem;
415
- position: relative;
416
- }
417
-
418
- .search-input {
419
- width: 100%;
420
- padding: 1rem 1rem 1rem 3rem;
421
- border: 1px solid rgba(255, 255, 255, 0.2);
422
- border-radius: 16px;
423
- background: rgba(255, 255, 255, 0.05);
424
- backdrop-filter: blur(10px);
425
- font-size: 1rem;
426
- transition: all 0.3s ease;
427
- color: rgba(255, 255, 255, 0.9);
428
- }
429
-
430
- .search-input::placeholder {
431
- color: rgba(255, 255, 255, 0.5);
432
- }
433
-
434
- .search-input:focus {
435
- outline: none;
436
- border-color: rgba(133, 48, 48, 0.8);
437
- background: rgba(255, 255, 255, 0.08);
438
- box-shadow: 0 0 0 3px rgba(133, 48, 48, 0.1);
439
- }
440
-
441
- .search-icon {
442
- position: absolute;
443
- left: 1rem;
444
- top: 50%;
445
- transform: translateY(-50%);
446
- color: rgba(133, 48, 48, 0.8);
447
- font-size: 1.2rem;
448
- }
449
-
450
- .plugin-card {
451
- background: rgba(255, 255, 255, 0.05);
452
- backdrop-filter: blur(10px);
453
- -webkit-backdrop-filter: blur(10px);
454
- border: 1px solid rgba(255, 255, 255, 0.1);
455
- border-radius: 16px;
456
- overflow: hidden;
457
- transition: all 0.3s ease;
458
- margin-bottom: 1rem;
459
- }
460
-
461
- .plugin-card:hover {
462
- background: rgba(255, 255, 255, 0.08);
463
- transform: translateY(-2px);
464
- box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.3);
465
- }
466
-
467
- .plugin-info {
468
- margin-top: 0.5rem;
469
- font-size: 0.85rem;
470
- }
471
-
472
- .limit-info {
473
- background: rgba(133, 48, 48, 0.1);
474
- color: #853030;
475
- padding: 0.25rem 0.5rem;
476
- border-radius: 4px;
477
- font-weight: 500;
478
- }
479
-
480
- .user-item {
481
- background: rgba(255, 255, 255, 0.05);
482
- backdrop-filter: blur(10px);
483
- -webkit-backdrop-filter: blur(10px);
484
- border: 1px solid rgba(255, 255, 255, 0.1);
485
- padding: 1.5rem;
486
- border-radius: 16px;
487
- margin-bottom: 1rem;
488
- display: flex;
489
- justify-content: space-between;
490
- align-items: flex-start;
491
- transition: all 0.3s ease;
492
- }
493
-
494
- .user-item:hover {
495
- background: rgba(255, 255, 255, 0.08);
496
- transform: translateY(-2px);
497
- box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.3);
498
- }
499
-
500
- .user-item.temp-banned {
501
- border-left: 4px solid rgba(255, 193, 7, 0.8);
502
- background: rgba(255, 193, 7, 0.05);
503
- }
504
-
505
- .user-item.banned {
506
- border-left: 4px solid rgba(220, 53, 69, 0.8);
507
- background: rgba(220, 53, 69, 0.05);
508
- }
509
-
510
- .user-info {
511
- flex: 1;
512
- }
513
-
514
- .user-name {
515
- font-size: 1.2rem;
516
- font-weight: 600;
517
- color: rgba(255, 255, 255, 0.9);
518
- margin-bottom: 0.5rem;
519
- }
520
-
521
- .user-details {
522
- display: flex;
523
- flex-wrap: wrap;
524
- gap: 0.75rem;
525
- margin-bottom: 0.75rem;
526
- }
527
-
528
- .user-email {
529
- color: rgba(255, 255, 255, 0.7);
530
- font-size: 0.9rem;
531
- }
532
-
533
- .user-role {
534
- background: rgba(255, 255, 255, 0.1);
535
- backdrop-filter: blur(5px);
536
- color: rgba(255, 255, 255, 0.8);
537
- padding: 0.25rem 0.75rem;
538
- border-radius: 12px;
539
- font-size: 0.8rem;
540
- font-weight: 500;
541
- border: 1px solid rgba(255, 255, 255, 0.1);
542
- }
543
-
544
- .premium-badge {
545
- background: linear-gradient(45deg, rgba(255, 215, 0, 0.3), rgba(255, 237, 78, 0.3));
546
- backdrop-filter: blur(5px);
547
- color: rgba(255, 215, 0, 1);
548
- padding: 0.25rem 0.75rem;
549
- border-radius: 12px;
550
- font-size: 0.8rem;
551
- font-weight: 600;
552
- border: 1px solid rgba(255, 215, 0, 0.3);
553
- box-shadow: 0 0 10px rgba(255, 215, 0, 0.2);
554
- }
555
-
556
- .user-stats {
557
- display: flex;
558
- flex-wrap: wrap;
559
- gap: 1rem;
560
- font-size: 0.85rem;
561
- color: rgba(255, 255, 255, 0.7);
562
- margin-bottom: 0.75rem;
563
- }
564
-
565
- .ban-info {
566
- background: rgba(255, 193, 7, 0.1);
567
- backdrop-filter: blur(5px);
568
- border: 1px solid rgba(255, 193, 7, 0.3);
569
- padding: 0.75rem;
570
- border-radius: 8px;
571
- font-size: 0.85rem;
572
- color: rgba(255, 193, 7, 0.9);
573
- margin-top: 0.5rem;
574
- }
575
-
576
- .user-actions {
577
- display: flex;
578
- gap: 0.5rem;
579
- flex-wrap: wrap;
580
- }
581
-
582
- .pagination-controls {
583
- display: flex;
584
- justify-content: space-between;
585
- align-items: center;
586
- padding: 1rem;
587
- margin-top: 1rem;
588
- background: rgba(255, 255, 255, 0.05);
589
- backdrop-filter: blur(10px);
590
- border-radius: 12px;
591
- border: 1px solid rgba(255, 255, 255, 0.1);
592
- }
593
-
594
- .page-info {
595
- color: rgba(255, 255, 255, 0.8);
596
- font-weight: 500;
597
- }
598
-
599
- .users-pagination-info {
600
- color: rgba(255, 255, 255, 0.6);
601
- font-size: 0.9rem;
602
- margin-bottom: 1rem;
603
- text-align: center;
604
- padding: 0.5rem;
605
- background: rgba(255, 255, 255, 0.05);
606
- border-radius: 8px;
607
- backdrop-filter: blur(5px);
608
- }
609
-
610
- .btn {
611
- padding: 0.5rem 1rem;
612
- border: none;
613
- border-radius: 8px;
614
- font-weight: 500;
615
- cursor: pointer;
616
- transition: all 0.3s ease;
617
- text-decoration: none;
618
- display: inline-flex;
619
- align-items: center;
620
- gap: 0.5rem;
621
- font-size: 0.9rem;
622
- backdrop-filter: blur(10px);
623
- border: 1px solid rgba(255, 255, 255, 0.1);
624
- }
625
-
626
- .btn:disabled {
627
- opacity: 0.5;
628
- cursor: not-allowed;
629
- transform: none !important;
630
- }
631
-
632
- .btn-primary {
633
- background: rgba(133, 48, 48, 0.8);
634
- color: white;
635
- border: 1px solid rgba(133, 48, 48, 0.3);
636
- }
637
-
638
- .btn-primary:hover:not(:disabled) {
639
- background: rgba(133, 48, 48, 1);
640
- transform: translateY(-1px);
641
- box-shadow: 0 4px 12px rgba(133, 48, 48, 0.3);
642
- }
643
-
644
- .btn-secondary {
645
- background: rgba(108, 117, 125, 0.8);
646
- color: white;
647
- border: 1px solid rgba(108, 117, 125, 0.3);
648
- }
649
-
650
- .btn-secondary:hover:not(:disabled) {
651
- background: rgba(108, 117, 125, 1);
652
- transform: translateY(-1px);
653
- }
654
-
655
- .btn-warning {
656
- background: rgba(255, 193, 7, 0.8);
657
- color: rgba(133, 100, 4, 1);
658
- border: 1px solid rgba(255, 193, 7, 0.3);
659
- }
660
-
661
- .btn-warning:hover:not(:disabled) {
662
- background: rgba(255, 193, 7, 1);
663
- transform: translateY(-1px);
664
- box-shadow: 0 4px 12px rgba(255, 193, 7, 0.3);
665
- }
666
-
667
- .btn-success {
668
- background: rgba(40, 167, 69, 0.8);
669
- color: white;
670
- border: 1px solid rgba(40, 167, 69, 0.3);
671
- }
672
-
673
- .btn-success:hover:not(:disabled) {
674
- background: rgba(40, 167, 69, 1);
675
- transform: translateY(-1px);
676
- box-shadow: 0 4px 12px rgba(40, 167, 69, 0.3);
677
- }
678
-
679
- .btn-danger {
680
- background: rgba(220, 53, 69, 0.8);
681
- color: white;
682
- border: 1px solid rgba(220, 53, 69, 0.3);
683
- }
684
-
685
- .btn-danger:hover:not(:disabled) {
686
- background: rgba(220, 53, 69, 1);
687
- transform: translateY(-1px);
688
- box-shadow: 0 4px 12px rgba(220, 53, 69, 0.3);
689
- }
690
-
691
- .no-users-state {
692
- text-align: center;
693
- padding: 3rem;
694
- color: rgba(255, 255, 255, 0.6);
695
- }
696
-
697
- .admin-card {
698
- background: rgba(255, 255, 255, 0.05);
699
- backdrop-filter: blur(10px);
700
- -webkit-backdrop-filter: blur(10px);
701
- border: 1px solid rgba(255, 255, 255, 0.1);
702
- border-radius: 16px;
703
- padding: 2rem;
704
- margin-bottom: 2rem;
705
- transition: all 0.3s ease;
706
- }
707
-
708
- .admin-card:hover {
709
- background: rgba(255, 255, 255, 0.08);
710
- transform: translateY(-2px);
711
- box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.3);
712
- }
713
-
714
- .admin-card h3 {
715
- color: rgba(255, 255, 255, 0.9);
716
- margin-bottom: 1.5rem;
717
- display: flex;
718
- align-items: center;
719
- gap: 0.5rem;
720
- }
721
-
722
- .admin-card h3 i {
723
- color: rgba(133, 48, 48, 0.8);
724
- }
725
-
726
- .stats-cards {
727
- display: grid;
728
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
729
- gap: 1.5rem;
730
- margin-bottom: 2rem;
731
- }
732
-
733
- .stat-card {
734
- background: rgba(255, 255, 255, 0.05);
735
- backdrop-filter: blur(10px);
736
- -webkit-backdrop-filter: blur(10px);
737
- border: 1px solid rgba(255, 255, 255, 0.1);
738
- padding: 2rem;
739
- border-radius: 16px;
740
- display: flex;
741
- align-items: center;
742
- gap: 1rem;
743
- transition: all 0.3s ease;
744
- }
745
-
746
- .stat-card:hover {
747
- background: rgba(255, 255, 255, 0.08);
748
- transform: translateY(-3px);
749
- box-shadow: 0 15px 50px 0 rgba(31, 38, 135, 0.4);
750
- }
751
-
752
- .form-row {
753
- display: grid;
754
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
755
- gap: 1rem;
756
- margin-bottom: 1.5rem;
757
- }
758
-
759
- .form-group {
760
- display: flex;
761
- flex-direction: column;
762
- }
763
-
764
- .form-group label {
765
- color: rgba(255, 255, 255, 0.9);
766
- margin-bottom: 0.5rem;
767
- font-weight: 500;
768
- font-size: 0.9rem;
769
- }
770
-
771
- .form-group .required {
772
- color: #ff6b6b;
773
- margin-left: 0.25rem;
774
- }
775
-
776
- .form-group input,
777
- .form-group select {
778
- padding: 0.75rem;
779
- border: 1px solid rgba(255, 255, 255, 0.2);
780
- border-radius: 8px;
781
- background: rgba(255, 255, 255, 0.05);
782
- color: rgba(255, 255, 255, 0.9);
783
- font-size: 0.95rem;
784
- transition: all 0.3s ease;
785
- }
786
-
787
- .form-group input:focus,
788
- .form-group select:focus {
789
- outline: none;
790
- border-color: rgba(133, 48, 48, 0.8);
791
- background: rgba(255, 255, 255, 0.08);
792
- box-shadow: 0 0 0 3px rgba(133, 48, 48, 0.1);
793
- }
794
-
795
- .form-group input::placeholder {
796
- color: rgba(255, 255, 255, 0.4);
797
- }
798
-
799
- .form-group small {
800
- color: rgba(255, 255, 255, 0.5);
801
- font-size: 0.8rem;
802
- margin-top: 0.25rem;
803
- }
804
-
805
- @media (max-width: 768px) {
806
- .countdown-time {
807
- font-size: 2rem;
808
- }
809
-
810
- .reset-timer-card {
811
- padding: 1rem;
812
- }
813
-
814
- .usage-overview {
815
- grid-template-columns: 1fr;
816
- }
817
-
818
- .usage-day {
819
- grid-template-columns: 60px 1fr 40px;
820
- gap: 0.5rem;
821
- }
822
-
823
- .user-item {
824
- flex-direction: column;
825
- gap: 1rem;
826
- }
827
-
828
- .user-actions {
829
- width: 100%;
830
- justify-content: flex-end;
831
- }
832
-
833
- .pagination-controls {
834
- flex-direction: column;
835
- gap: 1rem;
836
- }
837
-
838
- .dashboard-container {
839
- flex-direction: column;
840
- }
841
-
842
- .sidebar {
843
- width: 100%;
844
- position: static;
845
- height: auto;
846
- }
847
-
848
- .form-row {
849
- grid-template-columns: 1fr;
850
- }
851
-
852
- .stats-cards {
853
- grid-template-columns: 1fr;
854
- }
855
- }
856
- </style>
857
  </head>
858
  <body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
859
  <nav class="navbar navbar-expand-lg navbar-dark">
860
  <div class="container">
861
  <a class="navbar-brand" href="/">
@@ -867,7 +104,7 @@
867
  <div class="collapse navbar-collapse" id="navbarNav">
868
  <ul class="navbar-nav ms-auto">
869
  <li class="nav-item">
870
- <a class="nav-link" href="/profile" onclick="goToProfile()">
871
  <i class="fas fa-user"></i> Profile
872
  </a>
873
  </li>
@@ -894,7 +131,7 @@
894
  <i class="fas fa-plug"></i> API Plugins
895
  </a>
896
  <a href="#server-stats" class="menu-item" onclick="showSection('server-stats')">
897
- <i class="fas fa-server"></i> Server Stats
898
  </a>
899
  <a href="#events" class="menu-item" onclick="showSection('events')">
900
  <i class="fas fa-calendar"></i> Events
@@ -916,308 +153,88 @@
916
  <div class="stats-cards">
917
  <div class="stat-card">
918
  <div class="stat-icon">
919
- <img src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.0/svgs/solid/key.svg" alt="key" style="width: 3rem; height: 3rem; filter: invert(78%) sepia(45%) saturate(548%) hue-rotate(314deg) brightness(101%) contrast(101%);">
920
- </div>
921
- <div class="stat-info">
922
- <div class="stat-number" id="userApiKey">Loading...</div>
923
- <div class="stat-label">API Key</div>
924
  </div>
 
 
925
  </div>
926
  <div class="stat-card">
927
  <div class="stat-icon">
928
- <img src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.0/svgs/solid/chart-pie.svg" alt="chart" style="width: 3rem; height: 3rem; filter: invert(78%) sepia(45%) saturate(548%) hue-rotate(314deg) brightness(101%) contrast(101%);">
929
- </div>
930
- <div class="stat-info">
931
- <div class="stat-number" id="userRequests">0</div>
932
- <div class="stat-label">Total Requests</div>
933
  </div>
 
 
934
  </div>
935
  <div class="stat-card">
936
  <div class="stat-icon">
937
- <img src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.0/svgs/solid/cloud.svg" alt="cloud" style="width: 3rem; height: 3rem; filter: invert(78%) sepia(45%) saturate(548%) hue-rotate(314deg) brightness(101%) contrast(101%);">
938
- </div>
939
- <div class="stat-info">
940
- <div class="stat-number" id="userRequestsToday">0</div>
941
- <div class="stat-label">Today's Requests</div>
942
  </div>
 
 
943
  </div>
944
  <div class="stat-card">
945
  <div class="stat-icon">
946
- <img src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.0/svgs/solid/gauge-high.svg" alt="gauge" style="width: 3rem; height: 3rem; filter: invert(78%) sepia(45%) saturate(548%) hue-rotate(314deg) brightness(101%) contrast(101%);">
947
- </div>
948
- <div class="stat-info">
949
- <div class="stat-number" id="userLimit">30</div>
950
- <div class="stat-label">Daily Limit</div>
951
  </div>
 
 
952
  </div>
953
  <div class="stat-card">
954
  <div class="stat-icon">
955
- <img src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.0/svgs/solid/battery-three-quarters.svg" alt="battery" style="width: 3rem; height: 3rem; filter: invert(78%) sepia(45%) saturate(548%) hue-rotate(314deg) brightness(101%) contrast(101%);">
956
- </div>
957
- <div class="stat-info">
958
- <div class="stat-number" id="userLimitToday">30</div>
959
- <div class="stat-label">Remaining Limit (Personal)</div>
960
- </div>
961
- </div>
962
- </div>
963
-
964
- <div class="reset-timer-card glassmorphism">
965
- <div class="timer-header">
966
- <i class="fas fa-clock"></i>
967
- <div>
968
- <h3>Next Reset</h3>
969
- <p>Daily limit resets at 00:00</p>
970
- </div>
971
- </div>
972
-
973
- <div class="countdown-display">
974
- <div class="countdown-time">
975
- <span class="reset-countdown">00:00:00</span>
976
- </div>
977
- <div class="countdown-label">
978
- Hours : Minutes : Seconds
979
- </div>
980
- </div>
981
-
982
- <div class="reset-progress-container">
983
- <div class="reset-progress"></div>
984
- </div>
985
-
986
- <div class="reset-info">
987
- <div>
988
- <i class="fas fa-info-circle"></i>
989
- <span>Your limit will be restored to maximum</span>
990
- </div>
991
- <div>
992
- <i class="fas fa-sync-alt"></i>
993
  </div>
 
 
994
  </div>
995
  </div>
 
996
 
997
- <div class="usage-overview">
998
- <div class="usage-section">
999
- <h4><i class="fas fa-chart-bar"></i> API Usage Overview</h4>
1000
- <div class="endpoint-list">
1001
- <div class="endpoint-item">
1002
- <span class="endpoint-name">Loading...</span>
1003
- <span class="endpoint-count">0 requests</span>
1004
- </div>
1005
- </div>
1006
- </div>
1007
-
1008
-
1009
-
1010
- <div class="usage-section">
1011
- <h4><i class="fas fa-calendar-alt"></i> Daily Usage (Last 7 Days)</h4>
1012
- <div class="daily-usage">
1013
- <div class="usage-day">
1014
- <span class="usage-date">Loading...</span>
1015
- <div class="usage-bar-container">
1016
- <div class="usage-bar" style="width: 0%;"></div>
1017
- </div>
1018
- <span class="usage-count">0</span>
1019
- </div>
1020
  </div>
 
 
1021
  </div>
1022
-
1023
- <div class="usage-section">
1024
- <h4><i class="fas fa-network-wired"></i> Recent IP Addresses</h4>
1025
- <div class="ip-list">
1026
- <div class="ip-item">
1027
- <div>
1028
- <span class="ip-address">Loading...</span>
1029
- <div class="ip-time">Just now</div>
1030
- </div>
1031
- <span class="ip-count">0 requests</span>
1032
- </div>
1033
  </div>
 
 
1034
  </div>
1035
  </div>
1036
  </div>
1037
 
1038
  <div id="plugins" class="section">
1039
  <h2><i class="fas fa-plug"></i> Available API Plugins</h2>
1040
- <p style="margin-bottom: 2rem; opacity: 0.8;">Discover and test our API endpoints with interactive documentation</p>
1041
-
1042
  <div class="search-container">
1043
  <i class="fas fa-search search-icon"></i>
1044
- <input type="text"
1045
- class="search-input"
1046
- placeholder="Search plugins by name, description, or tags..."
1047
- oninput="searchPlugins(this.value)"
1048
- id="pluginSearch">
1049
  </div>
1050
 
1051
  <div class="plugins-grid" id="pluginsGrid">
1052
  <div class="loading">
1053
- <i class="fas fa-spinner fa-spin" style="margin-right: 0.5rem;"></i>
1054
- Loading plugins...
1055
  </div>
1056
  </div>
1057
  </div>
1058
 
1059
- <!----- KENTOD --->
1060
-
1061
  <div id="server-stats" class="section">
1062
  <h2><i class="fas fa-server"></i> Server Statistics</h2>
1063
-
1064
- <!--- APA LIAT LIAT --->
1065
-
1066
- <div class="stats-cards">
1067
- <div class="stat-card">
1068
- <div class="stat-icon">
1069
- <img src="https://api.iconify.design/mdi/account-group.svg?color=%23ba68c8&width=48&height=48" alt="users">
1070
- </div>
1071
- <div class="stat-info">
1072
- <div class="stat-number" id="totalUsersCount">0</div>
1073
- <div class="stat-label">Total Users</div>
1074
- </div>
1075
- </div>
1076
- <div class="stat-card">
1077
- <div class="stat-icon">
1078
- <img src="https://api.iconify.design/mdi/account.svg?color=%23ce93d8&width=48&height=48" alt="user">
1079
- </div>
1080
- <div class="stat-info">
1081
- <div class="stat-number" id="regularUsersCount">0</div>
1082
- <div class="stat-label">Regular Users</div>
1083
- </div>
1084
- </div>
1085
- <div class="stat-card">
1086
- <div class="stat-icon">
1087
- <img src="https://api.iconify.design/mdi/crown.svg?color=%23ba68c8&width=48&height=48" alt="crown">
1088
- </div>
1089
- <div class="stat-info">
1090
- <div class="stat-number" id="premiumUsersCount">0</div>
1091
- <div class="stat-label">Premium Users</div>
1092
- </div>
1093
- </div>
1094
- </div>
1095
-
1096
- <div class="admin-card">
1097
- <h3><i class="fas fa-chart-pie"></i> User Role Distribution</h3>
1098
- <canvas id="roleChart" style="max-height: 300px;"></canvas>
1099
- </div>
1100
-
1101
- <div class="admin-card">
1102
- <h3><i class="fas fa-database"></i> Database Statistics</h3>
1103
- <div class="stats-grid" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem;">
1104
- <div class="stat-item">
1105
- <i class="fas fa-hdd" style="font-size: 2rem; color: rgba(133, 48, 48, 0.8); margin-bottom: 0.5rem;"></i>
1106
- <span class="stat-value" id="dbSize">0 MB</span>
1107
- <span class="stat-label">Database Size</span>
1108
- </div>
1109
- <div class="stat-item">
1110
- <i class="fas fa-memory" style="font-size: 2rem; color: rgba(133, 48, 48, 0.8); margin-bottom: 0.5rem;"></i>
1111
- <span class="stat-value" id="ramUsage">0 MB</span>
1112
- <span class="stat-label">RAM Usage</span>
1113
- </div>
1114
- <div class="stat-item">
1115
- <i class="fas fa-microchip" style="font-size: 2rem; color: rgba(133, 48, 48, 0.8); margin-bottom: 0.5rem;"></i>
1116
- <span class="stat-value" id="cpuUsage">0%</span>
1117
- <span class="stat-label">CPU Usage</span>
1118
- </div>
1119
- <div class="stat-item">
1120
- <i class="fas fa-server" style="font-size: 2rem; color: rgba(133, 48, 48, 0.8); margin-bottom: 0.5rem;"></i>
1121
- <span class="stat-value" id="storageUsed">0 GB</span>
1122
- <span class="stat-label">Storage Used</span>
1123
- </div>
1124
- </div>
1125
- </div>
1126
-
1127
- <div class="admin-card">
1128
- <h3><i class="fas fa-chart-bar"></i> Role Distribution Details</h3>
1129
- <div class="stats-grid" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem;">
1130
- <div class="stat-item">
1131
- <span class="stat-value" id="cheapCount">0</span>
1132
- <span class="stat-label">Cheap Role</span>
1133
- </div>
1134
- <div class="stat-item">
1135
- <span class="stat-value" id="premiumCount">0</span>
1136
- <span class="stat-label">Premium Role</span>
1137
- </div>
1138
- <div class="stat-item">
1139
- <span class="stat-value" id="vipCount">0</span>
1140
- <span class="stat-label">VIP Role</span>
1141
- </div>
1142
- <div class="stat-item">
1143
- <span class="stat-value" id="supremeCount">0</span>
1144
- <span class="stat-label">Supreme Role</span>
1145
- </div>
1146
- </div>
1147
- </div>
1148
- </div>
1149
-
1150
- <div id="api-stats" class="section">
1151
- <h2><i class="fas fa-chart-area"></i> API Statistics</h2>
1152
- <p style="margin-bottom: 2rem; opacity: 0.8;">Global API usage statistics and analytics</p>
1153
-
1154
  <div class="stats-cards">
1155
  <div class="stat-card">
1156
  <div class="stat-icon">
1157
- <i class="fas fa-globe"></i>
1158
- </div>
1159
- <div class="stat-info">
1160
- <div class="stat-number" id="globalTotalRequests">0</div>
1161
- <div class="stat-label">Total Requests (All Users)</div>
1162
- </div>
1163
- </div>
1164
- <div class="stat-card">
1165
- <div class="stat-icon">
1166
- <i class="fas fa-calendar-day"></i>
1167
- </div>
1168
- <div class="stat-info">
1169
- <div class="stat-number" id="globalTodayRequests">0</div>
1170
- <div class="stat-label">Today's Requests (All Users)</div>
1171
- </div>
1172
- </div>
1173
- <div class="stat-card">
1174
- <div class="stat-icon">
1175
- <i class="fas fa-check-circle"></i>
1176
- </div>
1177
- <div class="stat-info">
1178
- <div class="stat-number" id="successRate">0%</div>
1179
- <div class="stat-label">Success Rate</div>
1180
- </div>
1181
- </div>
1182
- <div class="stat-card">
1183
- <div class="stat-icon">
1184
- <i class="fas fa-times-circle"></i>
1185
- </div>
1186
- <div class="stat-info">
1187
- <div class="stat-number" id="failRate">0%</div>
1188
- <div class="stat-label">Fail Rate</div>
1189
- </div>
1190
- </div>
1191
- </div>
1192
-
1193
- <div class="charts-grid" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: 2rem; margin-top: 2rem;">
1194
- <div class="admin-card">
1195
- <h3><i class="fas fa-chart-pie"></i> Top Endpoints Distribution</h3>
1196
- <canvas id="topEndpointsChart" style="max-height: 350px;"></canvas>
1197
- </div>
1198
-
1199
- <div class="admin-card">
1200
- <h3><i class="fas fa-percentage"></i> Success vs Fail Rate</h3>
1201
- <canvas id="successFailChart" style="max-height: 350px;"></canvas>
1202
- </div>
1203
- </div>
1204
-
1205
- <div class="admin-card" style="margin-top: 2rem;">
1206
- <h3><i class="fas fa-chart-bar"></i> Daily Request Statistics (Last 7 Days)</h3>
1207
- <canvas id="dailyRequestsChart" style="max-height: 400px;"></canvas>
1208
- </div>
1209
-
1210
- <div class="admin-card" style="margin-top: 2rem;">
1211
- <h3><i class="fas fa-chart-line"></i> Hourly Trends (Last 24 Hours)</h3>
1212
- <canvas id="hourlyTrendsChart" style="max-height: 400px;"></canvas>
1213
- </div>
1214
-
1215
- <div class="admin-card" style="margin-top: 2rem;">
1216
- <h3><i class="fas fa-list-ol"></i> Top 10 Most Used Endpoints</h3>
1217
- <div id="topEndpointsList">
1218
- <div class="loading">
1219
- <i class="fas fa-spinner fa-spin"></i> Loading...
1220
  </div>
 
 
1221
  </div>
1222
  </div>
1223
  </div>
@@ -1227,9 +244,9 @@
1227
  <div class="events-container">
1228
  <div class="redeem-section">
1229
  <h3><i class="fas fa-gift"></i> Redeem Code</h3>
1230
- <p style="margin-bottom: 1.5rem; opacity: 0.8;">Enter a redeem code to unlock premium features or additional limits</p>
1231
  <div class="form-group">
1232
- <input type="text" id="redeemCode" placeholder="Enter your redeem code" style="text-transform: uppercase;">
1233
  <button onclick="redeemCode()" class="btn btn-primary">
1234
  <i class="fas fa-magic"></i> Redeem
1235
  </button>
@@ -1251,22 +268,6 @@
1251
  <i class="fas fa-save"></i> Update Profile
1252
  </button>
1253
  </div>
1254
-
1255
- <div class="setting-card" id="premiumSettings" style="display: none;">
1256
- <h3><i class="fas fa-crown"></i> Premium Features</h3>
1257
- <button onclick="regenerateApiKey()" class="btn btn-warning">
1258
- <i class="fas fa-sync"></i> Regenerate API Key
1259
- </button>
1260
- <p class="text-muted">Generate a new API key (Premium only)</p>
1261
- </div>
1262
-
1263
- <div class="setting-card danger-zone">
1264
- <h3><i class="fas fa-exclamation-triangle"></i> Danger Zone</h3>
1265
- <button onclick="deleteAccount()" class="btn btn-danger">
1266
- <i class="fas fa-trash"></i> Delete Account
1267
- </button>
1268
- <p class="text-muted">This action cannot be undone</p>
1269
- </div>
1270
  </div>
1271
  </div>
1272
 
@@ -1281,95 +282,37 @@
1281
  </div>
1282
  </div>
1283
  </div>
1284
-
1285
- <div class="admin-card">
1286
- <h3><i class="fas fa-user-tag"></i> Set User Role</h3>
1287
- <div class="form-row">
1288
- <div class="form-group" style="grid-column: 1 / -1;">
1289
- <label>Search User <span class="required">*</span></label>
1290
- <input type="text" id="searchUserInput" placeholder="Search by username or email" oninput="searchUsersForRole(this.value)">
1291
- <div id="userSearchResults" style="display: none; margin-top: 0.5rem; background: rgba(255,255,255,0.05); border-radius: 8px; max-height: 200px; overflow-y: auto;"></div>
1292
- </div>
1293
- <div class="form-group">
1294
- <label>Selected User</label>
1295
- <input type="text" id="selectedUserDisplay" placeholder="No user selected" readonly>
1296
- <input type="hidden" id="selectedUserId">
1297
- </div>
1298
- <div class="form-group">
1299
- <label>Role <span class="required">*</span></label>
1300
- <select id="assignRoleType">
1301
- <option value="cheap">Cheap (Limit 500)</option>
1302
- <option value="premium">Premium (Limit 1500)</option>
1303
- <option value="vip">VIP (Limit 2500)</option>
1304
- <option value="supreme">Supreme (Limit 3000)</option>
1305
- </select>
1306
- </div>
1307
- <div class="form-group">
1308
- <label>Custom API Key <span style="color: #666; font-size: 0.85em;">(Optional)</span></label>
1309
- <input type="text" id="customApiKey" placeholder="Leave empty for current key">
1310
- <small>All roles support custom API keys</small>
1311
- </div>
1312
- </div>
1313
- <button onclick="assignUserRole()" class="btn btn-primary">
1314
- <i class="fas fa-user-check"></i> Assign Role
1315
- </button>
1316
- </div>
1317
-
1318
- <div class="admin-card">
1319
- <h3><i class="fas fa-ticket-alt"></i> Create Redeem Code</h3>
1320
- <div class="form-row">
1321
- <div class="form-group">
1322
- <label>Type <span class="required">*</span></label>
1323
- <select id="redeemType">
1324
- <option value="limit">Limit Only</option>
1325
- <option value="premium">Premium Only</option>
1326
- <option value="both">Both</option>
1327
- </select>
1328
- </div>
1329
- <div class="form-group" id="limitContainer" style="display: none;">
1330
- <label>Limit Value</label>
1331
- <input type="number" id="limitValue" min="0" placeholder="Additional limit">
1332
- <small>Optional for Premium Only</small>
1333
- </div>
1334
- <div class="form-group" id="codeExpiredContainer" style="display: none;">
1335
- <label>Code Expired <span class="required">*</span></label>
1336
- <input type="datetime-local" id="codeExpired" required>
1337
- <small>When the code expires</small>
1338
- </div>
1339
- <div class="form-group" id="premiumExpiredContainer" style="display: none;">
1340
- <label>Premium Expired <span class="required">*</span></label>
1341
- <input type="datetime-local" id="premiumExpired">
1342
- <small>When premium access expires</small>
1343
- </div>
1344
- </div>
1345
- <button onclick="createRedeemCode()" class="btn btn-primary">
1346
- <i class="fas fa-plus"></i> Create Code
1347
- </button>
1348
- </div>
1349
-
1350
- <div class="admin-card">
1351
- <h3><i class="fas fa-chart-pie"></i> System Statistics</h3>
1352
- <div class="stats-grid">
1353
- <div class="stat-item">
1354
- <span class="stat-value" id="adminTotalUsers">0</span>
1355
- <span class="stat-label">Total Users</span>
1356
- </div>
1357
- <div class="stat-item">
1358
- <span class="stat-value" id="adminTotalRequests">0</span>
1359
- <span class="stat-label">Total Requests</span>
1360
- </div>
1361
- <div class="stat-item">
1362
- <span class="stat-value" id="adminTodayRequests">0</span>
1363
- <span class="stat-label">Today's Requests</span>
1364
- </div>
1365
- </div>
1366
- </div>
1367
  </div>
1368
  </div>
1369
  </div>
1370
  </div>
1371
 
1372
  <script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1373
  (function(){
1374
  function detectDevTools(){
1375
  const threshold = 160;
@@ -1389,13 +332,6 @@
1389
  setInterval(() => {
1390
  if(window.eruda) window.location.href = "/denied";
1391
  detectDevTools();
1392
- try{
1393
- console.profile();
1394
- console.profileEnd();
1395
- }catch(e){}
1396
- try{
1397
- if(console.clear.toString().length > 100) window.location.href = "/denied";
1398
- }catch(e){}
1399
  }, 1000);
1400
  })();
1401
  </script>
 
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>DashX - Modern API Dashboard</title>
7
+ <meta name="description" content="DashX is a modern REST API dashboard platform that allows you to manage, monitor, and utilize various API tools with ease.">
8
  <meta name="keywords" content="API Dashboard, REST API, DashX, API Management, Developer Tools, API Analytics">
9
  <meta name="author" content="DashX Team">
10
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
 
12
  <link href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert2/11.10.8/sweetalert2.min.css" rel="stylesheet">
13
  <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
14
  <link href="styles.css" rel="stylesheet">
15
+ <link href="mobile-styles.css" rel="stylesheet">
16
  <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  </head>
18
  <body>
19
+ <div class="mobile-header">
20
+ <div class="mobile-header-content">
21
+ <div class="mobile-header-left">
22
+ <button class="hamburger-btn" onclick="toggleDrawer()">
23
+ <i class="fas fa-bars"></i>
24
+ </button>
25
+ <div class="mobile-logo">
26
+ <i class="fas fa-bolt"></i> DashX
27
+ </div>
28
+ </div>
29
+ <div class="mobile-avatar">
30
+ <i class="fas fa-user"></i>
31
+ </div>
32
+ </div>
33
+ </div>
34
+
35
+ <div class="drawer-overlay" onclick="toggleDrawer()"></div>
36
+
37
+ <div class="sidebar-drawer">
38
+ <div class="drawer-header">
39
+ <h3>Menu</h3>
40
+ <button class="drawer-close" onclick="toggleDrawer()">
41
+ <i class="fas fa-times"></i>
42
+ </button>
43
+ </div>
44
+ <div class="drawer-menu">
45
+ <div class="drawer-section-title">Dashboard</div>
46
+ <a href="#overview" class="drawer-menu-item active" onclick="navigateTo('overview')">
47
+ <i class="fas fa-chart-line"></i>
48
+ <span>Overview</span>
49
+ </a>
50
+ <a href="#api-stats" class="drawer-menu-item" onclick="navigateTo('api-stats')">
51
+ <i class="fas fa-chart-area"></i>
52
+ <span>API Stats</span>
53
+ </a>
54
+ <a href="#server-stats" class="drawer-menu-item" onclick="navigateTo('server-stats')">
55
+ <i class="fas fa-server"></i>
56
+ <span>Server Stats</span>
57
+ </a>
58
+
59
+ <div class="drawer-section-title">API Features</div>
60
+ <a href="#plugins" class="drawer-menu-item" onclick="navigateTo('plugins')">
61
+ <i class="fas fa-plug"></i>
62
+ <span>API Plugins</span>
63
+ </a>
64
+
65
+ <div class="drawer-section-title">Account</div>
66
+ <a href="#events" class="drawer-menu-item" onclick="navigateTo('events')">
67
+ <i class="fas fa-calendar"></i>
68
+ <span>Events</span>
69
+ </a>
70
+ <a href="#settings" class="drawer-menu-item" onclick="navigateTo('settings')">
71
+ <i class="fas fa-cog"></i>
72
+ <span>Settings</span>
73
+ </a>
74
+
75
+ <div id="adminDrawerMenu" style="display: none;">
76
+ <div class="drawer-section-title">Admin</div>
77
+ <a href="#management" class="drawer-menu-item" onclick="navigateTo('management')">
78
+ <i class="fas fa-users-cog"></i>
79
+ <span>Management</span>
80
+ </a>
81
+ </div>
82
+
83
+ <div class="drawer-footer">
84
+ <a href="/profile" class="drawer-menu-item">
85
+ <i class="fas fa-user"></i>
86
+ <span>Profile</span>
87
+ </a>
88
+ <a href="#" class="drawer-menu-item" onclick="logout()" style="color: #e74c3c;">
89
+ <i class="fas fa-sign-out-alt"></i>
90
+ <span>Logout</span>
91
+ </a>
92
+ </div>
93
+ </div>
94
+ </div>
95
+
96
  <nav class="navbar navbar-expand-lg navbar-dark">
97
  <div class="container">
98
  <a class="navbar-brand" href="/">
 
104
  <div class="collapse navbar-collapse" id="navbarNav">
105
  <ul class="navbar-nav ms-auto">
106
  <li class="nav-item">
107
+ <a class="nav-link" href="/profile">
108
  <i class="fas fa-user"></i> Profile
109
  </a>
110
  </li>
 
131
  <i class="fas fa-plug"></i> API Plugins
132
  </a>
133
  <a href="#server-stats" class="menu-item" onclick="showSection('server-stats')">
134
+ <i class="fas fa-server"></i> Server Stats
135
  </a>
136
  <a href="#events" class="menu-item" onclick="showSection('events')">
137
  <i class="fas fa-calendar"></i> Events
 
153
  <div class="stats-cards">
154
  <div class="stat-card">
155
  <div class="stat-icon">
156
+ <i class="fas fa-key"></i>
 
 
 
 
157
  </div>
158
+ <div class="stat-number" id="userApiKey">Loading...</div>
159
+ <div class="stat-label">API Key</div>
160
  </div>
161
  <div class="stat-card">
162
  <div class="stat-icon">
163
+ <i class="fas fa-chart-pie"></i>
 
 
 
 
164
  </div>
165
+ <div class="stat-number" id="userRequests">0</div>
166
+ <div class="stat-label">Total Requests</div>
167
  </div>
168
  <div class="stat-card">
169
  <div class="stat-icon">
170
+ <i class="fas fa-cloud"></i>
 
 
 
 
171
  </div>
172
+ <div class="stat-number" id="userRequestsToday">0</div>
173
+ <div class="stat-label">Today's Requests</div>
174
  </div>
175
  <div class="stat-card">
176
  <div class="stat-icon">
177
+ <i class="fas fa-gauge-high"></i>
 
 
 
 
178
  </div>
179
+ <div class="stat-number" id="userLimit">30</div>
180
+ <div class="stat-label">Daily Limit</div>
181
  </div>
182
  <div class="stat-card">
183
  <div class="stat-icon">
184
+ <i class="fas fa-battery-three-quarters"></i>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  </div>
186
+ <div class="stat-number" id="userLimitToday">30</div>
187
+ <div class="stat-label">Remaining Limit</div>
188
  </div>
189
  </div>
190
+ </div>
191
 
192
+ <div id="api-stats" class="section">
193
+ <h2><i class="fas fa-chart-area"></i> API Statistics</h2>
194
+ <p style="margin-bottom: 2rem; opacity: 0.8;">Global API usage statistics and analytics</p>
195
+ <div class="stats-cards">
196
+ <div class="stat-card">
197
+ <div class="stat-icon">
198
+ <i class="fas fa-globe"></i>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  </div>
200
+ <div class="stat-number" id="globalTotalRequests">0</div>
201
+ <div class="stat-label">Total Requests</div>
202
  </div>
203
+ <div class="stat-card">
204
+ <div class="stat-icon">
205
+ <i class="fas fa-calendar-day"></i>
 
 
 
 
 
 
 
 
206
  </div>
207
+ <div class="stat-number" id="globalTodayRequests">0</div>
208
+ <div class="stat-label">Today's Requests</div>
209
  </div>
210
  </div>
211
  </div>
212
 
213
  <div id="plugins" class="section">
214
  <h2><i class="fas fa-plug"></i> Available API Plugins</h2>
215
+ <p style="margin-bottom: 2rem; opacity: 0.8;">Discover and test our API endpoints</p>
216
+
217
  <div class="search-container">
218
  <i class="fas fa-search search-icon"></i>
219
+ <input type="text" class="search-input" placeholder="Search plugins..." id="pluginSearch">
 
 
 
 
220
  </div>
221
 
222
  <div class="plugins-grid" id="pluginsGrid">
223
  <div class="loading">
224
+ <i class="fas fa-spinner fa-spin"></i> Loading plugins...
 
225
  </div>
226
  </div>
227
  </div>
228
 
 
 
229
  <div id="server-stats" class="section">
230
  <h2><i class="fas fa-server"></i> Server Statistics</h2>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  <div class="stats-cards">
232
  <div class="stat-card">
233
  <div class="stat-icon">
234
+ <i class="fas fa-users"></i>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  </div>
236
+ <div class="stat-number" id="totalUsersCount">0</div>
237
+ <div class="stat-label">Total Users</div>
238
  </div>
239
  </div>
240
  </div>
 
244
  <div class="events-container">
245
  <div class="redeem-section">
246
  <h3><i class="fas fa-gift"></i> Redeem Code</h3>
247
+ <p style="margin-bottom: 1.5rem; opacity: 0.8;">Enter a redeem code to unlock premium features</p>
248
  <div class="form-group">
249
+ <input type="text" id="redeemCode" placeholder="Enter your redeem code">
250
  <button onclick="redeemCode()" class="btn btn-primary">
251
  <i class="fas fa-magic"></i> Redeem
252
  </button>
 
268
  <i class="fas fa-save"></i> Update Profile
269
  </button>
270
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  </div>
272
  </div>
273
 
 
282
  </div>
283
  </div>
284
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  </div>
286
  </div>
287
  </div>
288
  </div>
289
 
290
  <script>
291
+ function toggleDrawer() {
292
+ const drawer = document.querySelector('.sidebar-drawer');
293
+ const overlay = document.querySelector('.drawer-overlay');
294
+ drawer.classList.toggle('active');
295
+ overlay.classList.toggle('active');
296
+ document.body.style.overflow = drawer.classList.contains('active') ? 'hidden' : '';
297
+ }
298
+
299
+ function navigateTo(sectionId) {
300
+ showSection(sectionId);
301
+ toggleDrawer();
302
+ }
303
+
304
+ function showSection(sectionId) {
305
+ document.querySelectorAll('.section').forEach(s => s.classList.remove('active'));
306
+ document.getElementById(sectionId).classList.add('active');
307
+
308
+ document.querySelectorAll('.menu-item, .drawer-menu-item').forEach(item => {
309
+ item.classList.remove('active');
310
+ if(item.getAttribute('href') === '#' + sectionId) {
311
+ item.classList.add('active');
312
+ }
313
+ });
314
+ }
315
+
316
  (function(){
317
  function detectDevTools(){
318
  const threshold = 160;
 
332
  setInterval(() => {
333
  if(window.eruda) window.location.href = "/denied";
334
  detectDevTools();
 
 
 
 
 
 
 
335
  }, 1000);
336
  })();
337
  </script>