heimdall-api-platform 1.0.39 → 1.0.41

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 (50) hide show
  1. package/dist/lib/clients/http-client.js +1 -1
  2. package/dist/lib/commons-cache.js +1 -1
  3. package/dist/lib/commons-const.js +1 -1
  4. package/dist/lib/commons-elasticsearch.js +1 -1
  5. package/dist/lib/commons-errors.js +1 -1
  6. package/dist/lib/commons-opensearch.js +1 -1
  7. package/dist/lib/commons-splunk.js +1 -1
  8. package/dist/lib/commons-util.js +1 -1
  9. package/dist/lib/default-routes-docs.js +1 -1
  10. package/dist/lib/default-routes-pos.js +1 -1
  11. package/dist/lib/default-routes-pre.js +1 -1
  12. package/dist/lib/environment.js +1 -1
  13. package/dist/lib/factory/api-gateway.js +1 -1
  14. package/dist/lib/factory/client-factory.js +1 -1
  15. package/dist/lib/factory/function-factory.js +1 -1
  16. package/dist/lib/factory/operation-flow-factory.js +1 -1
  17. package/dist/lib/factory/server-factory.js +1 -1
  18. package/dist/lib/factory/transformation-function-factory.js +1 -1
  19. package/dist/lib/handle-route.js +1 -1
  20. package/dist/lib/index.js +1 -1
  21. package/dist/lib/jwt-util.js +1 -1
  22. package/dist/lib/license/license-service.js +1 -1
  23. package/dist/lib/models/base-context.js +1 -1
  24. package/dist/lib/models/elastic-index-data.js +1 -1
  25. package/dist/lib/models/flow-context.js +1 -1
  26. package/dist/lib/models/flow-indexed.js +1 -1
  27. package/dist/lib/models/operation-function-indexed.js +1 -1
  28. package/dist/lib/models/operation-function-transformation-indexed.js +1 -1
  29. package/dist/lib/models/operation-http-indexed.js +1 -1
  30. package/dist/lib/models/operation-mock-indexed.js +1 -1
  31. package/dist/lib/models/route-context.js +1 -1
  32. package/dist/lib/models/security-route.js +1 -1
  33. package/dist/lib/models/service-context.js +1 -1
  34. package/dist/lib/models/service-group.js +1 -1
  35. package/dist/lib/models/service-route.js +1 -1
  36. package/dist/lib/models/splunk-data.js +1 -1
  37. package/dist/lib/operations/abstract-operation.js +1 -1
  38. package/dist/lib/operations/function.js +1 -1
  39. package/dist/lib/operations/http.js +1 -1
  40. package/dist/lib/operations/mock.js +1 -1
  41. package/dist/lib/operations/monitor-check.js +1 -1
  42. package/dist/lib/orchestration-flow.js +1 -1
  43. package/dist/lib/router.js +1 -1
  44. package/dist/lib/security-validation.js +1 -1
  45. package/dist/lib/services/server.js +1 -1
  46. package/dist/lib/services/template-monitorcheck-route.js +1 -1
  47. package/dist/public/redoc.html +153 -132
  48. package/dist/public/scalardoc.html +173 -0
  49. package/dist/public/swagger.html +512 -73
  50. package/package.json +2 -1
@@ -1,100 +1,472 @@
1
1
  <!DOCTYPE html>
2
- <html lang="pt-BR">
2
+ <html lang="pt-BR" data-theme="light">
3
3
 
4
4
  <head>
5
- <meta charset="UTF-8" />
6
- <title>Pay2B API Reference</title>
7
- <meta name="viewport" content="width=device-width, initial-scale=1" />
5
+ <meta charset="UTF-8"/>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
7
+ <meta name="description"
8
+ content="Heimdall API Platform - Microgateway de alta performance para APIs, com orquestração inteligente, roteamento dinâmico e integração entre microsserviços"/>
9
+ <meta name="keywords"
10
+ content="API Gateway, microgateway, orquestração, roteamento dinâmico, Node.js, Redis, OpenSearch, Swagger, microsserviços, REST API, cache, throttling, observabilidade"/>
11
+ <meta name="author" content="P4F - Protonss4Fun"/>
12
+ <meta name="theme-color" content="#003d7a"/>
13
+ <meta property="og:title" content="Heimdall API Platform - Interactive Documentation"/>
14
+ <meta property="og:description"
15
+ content="Microgateway de alta performance com orquestração inteligente e roteamento dinâmico para APIs"/>
16
+ <meta property="og:type" content="website"/>
17
+ <meta property="og:url" content="https://www.protonss4fun.com.br"/>
18
+ <meta property="og:image"
19
+ content="https://static.wixstatic.com/media/20b3f7_42a596f7c2244e1f946ebb5fa8a8512f~mv2.png"/>
20
+ <meta name="twitter:card" content="summary_large_image"/>
21
+ <meta name="twitter:title" content="Heimdall API Platform - Interactive Documentation"/>
22
+ <meta name="twitter:description"
23
+ content="Microgateway de alta performance com orquestração inteligente e roteamento dinâmico para APIs"/>
24
+ <title>Heimdall API Platform - Interactive Documentation | Swagger UI</title>
8
25
 
9
- <link rel="icon" href="https://pay2b.com.br/favicon.ico" type="image/x-icon" />
26
+ <link rel="icon" href="https://static.wixstatic.com/media/20b3f7_42a596f7c2244e1f946ebb5fa8a8512f~mv2.png"
27
+ type="image/png"/>
28
+ <link rel="preconnect" href="https://fonts.googleapis.com"/>
29
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
30
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap"
31
+ rel="stylesheet"/>
10
32
 
11
- <!-- Swagger UI assets -->
12
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist/swagger-ui.css" />
33
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist/swagger-ui.css"/>
13
34
  <script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist/swagger-ui-bundle.js"></script>
14
35
  <script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist/swagger-ui-standalone-preset.js"></script>
15
36
 
16
37
  <style>
38
+ :root {
39
+ --primary-color: #003d7a;
40
+ --primary-hover: #002b5a;
41
+ --secondary-color: #b8d430;
42
+ --accent-color: #0ea5e9;
43
+ --bg-primary: #ffffff;
44
+ --bg-secondary: #f8fafc;
45
+ --bg-tertiary: #f1f5f9;
46
+ --text-primary: #0f172a;
47
+ --text-secondary: #475569;
48
+ --text-tertiary: #64748b;
49
+ --border-color: #e2e8f0;
50
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
51
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
52
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
53
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
54
+ --navbar-height: 64px;
55
+ --footer-height: 80px;
56
+ --transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
57
+ }
58
+
59
+ [data-theme="dark"] {
60
+ --primary-color: #0ea5e9;
61
+ --primary-hover: #0284c7;
62
+ --secondary-color: #b8d430;
63
+ --accent-color: #22d3ee;
64
+ --bg-primary: #0f172a;
65
+ --bg-secondary: #1e293b;
66
+ --bg-tertiary: #334155;
67
+ --text-primary: #f8fafc;
68
+ --text-secondary: #cbd5e1;
69
+ --text-tertiary: #94a3b8;
70
+ --border-color: #334155;
71
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
72
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
73
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -2px rgba(0, 0, 0, 0.4);
74
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.6), 0 10px 10px -5px rgba(0, 0, 0, 0.5);
75
+ }
76
+
77
+ * {
78
+ box-sizing: border-box;
79
+ }
80
+
81
+ html {
82
+ scroll-behavior: smooth;
83
+ }
84
+
17
85
  html,
18
86
  body {
19
87
  margin: 0;
20
88
  padding: 0;
21
- font-family: "Segoe UI", Roboto, sans-serif;
22
- background-color: #f5f6fa;
89
+ height: 100%;
90
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
91
+ background-color: var(--bg-secondary);
92
+ color: var(--text-primary);
93
+ transition: var(--transition-smooth);
94
+ -webkit-font-smoothing: antialiased;
95
+ -moz-osx-font-smoothing: grayscale;
23
96
  }
24
97
 
25
- .header {
26
- background-color: #1f2d3d;
27
- color: white;
28
- padding: 16px 32px;
98
+ .navbar {
99
+ position: sticky;
100
+ top: 0;
101
+ z-index: 1000;
102
+ background: var(--bg-primary);
103
+ backdrop-filter: blur(12px);
104
+ border-bottom: 1px solid var(--border-color);
105
+ box-shadow: var(--shadow-sm);
106
+ height: var(--navbar-height);
107
+ transition: var(--transition-smooth);
108
+ }
109
+
110
+ .navbar__container {
111
+ max-width: 1440px;
112
+ margin: 0 auto;
113
+ padding: 0 32px;
114
+ height: 100%;
29
115
  display: flex;
30
116
  align-items: center;
31
117
  justify-content: space-between;
32
118
  }
33
119
 
34
- .header-left {
120
+ .navbar__left {
35
121
  display: flex;
36
122
  align-items: center;
123
+ gap: 24px;
37
124
  }
38
125
 
39
- .header-left img {
40
- height: 36px;
41
- margin-right: 12px;
126
+ .navbar__logo {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 12px;
130
+ text-decoration: none;
131
+ transition: var(--transition-smooth);
42
132
  }
43
133
 
44
- .header-left h1 {
45
- font-size: 20px;
46
- margin: 0;
134
+ .navbar__logo:hover {
135
+ opacity: 0.85;
136
+ transform: translateY(-1px);
137
+ }
138
+
139
+ .navbar__logo-img {
140
+ height: 40px;
141
+ width: auto;
142
+ }
143
+
144
+ .navbar__logo-p4f {
145
+ height: 44px;
146
+ width: auto;
147
+ }
148
+
149
+ .navbar__title {
150
+ font-size: 16px;
151
+ font-weight: 600;
152
+ color: var(--text-primary);
153
+ letter-spacing: -0.02em;
154
+ }
155
+
156
+ .navbar__badge {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ padding: 4px 12px;
160
+ background: linear-gradient(135deg, #3B82F6, #06B6D4);
161
+ color: white;
162
+ border-radius: 16px;
163
+ font-size: 12px;
47
164
  font-weight: 600;
165
+ letter-spacing: 0.02em;
166
+ text-transform: uppercase;
167
+ box-shadow: var(--shadow-sm);
168
+ }
169
+
170
+ .navbar__right {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 16px;
174
+ }
175
+
176
+ .navbar__links {
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 24px;
180
+ }
181
+
182
+ .navbar__link {
183
+ color: var(--text-secondary);
184
+ text-decoration: none;
185
+ font-size: 14px;
186
+ font-weight: 500;
187
+ transition: var(--transition-smooth);
188
+ position: relative;
189
+ }
190
+
191
+ .navbar__link::after {
192
+ content: '';
193
+ position: absolute;
194
+ bottom: -4px;
195
+ left: 0;
196
+ width: 0;
197
+ height: 2px;
198
+ background: var(--primary-color);
199
+ transition: width 0.3s ease;
200
+ }
201
+
202
+ .navbar__link:hover {
203
+ color: var(--primary-color);
204
+ }
205
+
206
+ .navbar__link:hover::after {
207
+ width: 100%;
208
+ }
209
+
210
+ .theme-toggle {
211
+ display: flex;
212
+ align-items: center;
213
+ justify-content: center;
214
+ width: 40px;
215
+ height: 40px;
216
+ border: none;
217
+ background: var(--bg-tertiary);
218
+ border-radius: 10px;
219
+ cursor: pointer;
220
+ transition: var(--transition-smooth);
221
+ color: var(--text-primary);
222
+ font-size: 18px;
223
+ }
224
+
225
+ .theme-toggle:hover {
226
+ background: var(--primary-color);
227
+ color: white;
228
+ transform: rotate(15deg) scale(1.05);
229
+ }
230
+
231
+ .theme-toggle:active {
232
+ transform: rotate(15deg) scale(0.95);
233
+ }
234
+
235
+ .status-badge {
236
+ display: inline-flex;
237
+ align-items: center;
238
+ gap: 6px;
239
+ padding: 6px 12px;
240
+ background: var(--bg-tertiary);
241
+ border-radius: 8px;
242
+ font-size: 13px;
243
+ font-weight: 500;
244
+ color: var(--text-secondary);
245
+ }
246
+
247
+ .status-dot {
248
+ width: 8px;
249
+ height: 8px;
250
+ border-radius: 50%;
251
+ background: var(--secondary-color);
252
+ animation: pulse 2s infinite;
253
+ }
254
+
255
+ @keyframes pulse {
256
+ 0%, 100% {
257
+ opacity: 1;
258
+ }
259
+ 50% {
260
+ opacity: 0.5;
261
+ }
48
262
  }
49
263
 
50
264
  #swagger-ui {
51
265
  margin: 0 auto;
52
- max-width: 1400px;
53
- padding: 24px;
54
- background-color: white;
55
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.05);
266
+ max-width: 1440px;
267
+ padding: 16px 24px;
268
+ min-height: calc(100vh - var(--navbar-height) - var(--footer-height));
56
269
  }
57
270
 
58
- footer {
59
- background-color: #1f2d3d;
60
- color: white;
61
- padding: 20px 32px;
271
+ [data-theme="dark"] #swagger-ui {
272
+ filter: invert(0.88) hue-rotate(180deg);
273
+ }
274
+
275
+ [data-theme="dark"] #swagger-ui img,
276
+ [data-theme="dark"] #swagger-ui .swagger-ui .opblock-tag,
277
+ [data-theme="dark"] #swagger-ui .swagger-ui .opblock {
278
+ filter: invert(0.88) hue-rotate(180deg);
279
+ }
280
+
281
+ .swagger-ui .topbar {
282
+ display: none;
283
+ }
284
+
285
+ .pay2b-footer {
286
+ background: var(--bg-primary);
287
+ border-top: 1px solid var(--border-color);
288
+ padding: 24px 32px;
289
+ min-height: var(--footer-height);
290
+ transition: var(--transition-smooth);
291
+ }
292
+
293
+ .footer__container {
294
+ max-width: 1440px;
295
+ margin: 0 auto;
62
296
  display: flex;
297
+ align-items: center;
63
298
  justify-content: space-between;
299
+ flex-wrap: wrap;
300
+ gap: 24px;
301
+ }
302
+
303
+ .footer__left {
304
+ display: flex;
305
+ flex-direction: row;
306
+ align-items: center;
307
+ gap: 12px;
308
+ }
309
+
310
+ .footer__logo {
311
+ height: 32px;
312
+ width: auto;
313
+ opacity: 0.9;
314
+ transition: var(--transition-smooth);
315
+ }
316
+
317
+ .footer__logo:hover {
318
+ opacity: 1;
319
+ }
320
+
321
+ .footer__logo-p4f {
322
+ height: 44px;
323
+ width: auto;
324
+ object-fit: contain;
325
+ }
326
+
327
+ .footer__copyright {
328
+ font-size: 13px;
329
+ color: var(--text-tertiary);
330
+ font-weight: 400;
331
+ }
332
+
333
+ .footer__right {
334
+ display: flex;
335
+ flex-wrap: wrap;
336
+ align-items: center;
337
+ gap: 24px;
338
+ }
339
+
340
+ .footer__links {
341
+ display: flex;
64
342
  align-items: center;
343
+ gap: 20px;
65
344
  flex-wrap: wrap;
345
+ }
346
+
347
+ .footer__link {
348
+ color: var(--text-secondary);
349
+ text-decoration: none;
66
350
  font-size: 14px;
351
+ font-weight: 500;
352
+ transition: var(--transition-smooth);
353
+ position: relative;
354
+ }
355
+
356
+ .footer__link::after {
357
+ content: '';
358
+ position: absolute;
359
+ bottom: -2px;
360
+ left: 0;
361
+ width: 0;
362
+ height: 1px;
363
+ background: var(--primary-color);
364
+ transition: width 0.3s ease;
365
+ }
366
+
367
+ .footer__link:hover {
368
+ color: var(--primary-color);
67
369
  }
68
370
 
69
- footer .footer-left img {
70
- height: 26px;
371
+ .footer__link:hover::after {
372
+ width: 100%;
71
373
  }
72
374
 
73
- footer .footer-right {
375
+ .footer__social {
74
376
  display: flex;
75
- gap: 16px;
377
+ gap: 12px;
76
378
  }
77
379
 
78
- footer .footer-right a {
79
- color: #fff;
380
+ .footer__social-link {
381
+ display: flex;
382
+ align-items: center;
383
+ justify-content: center;
384
+ width: 36px;
385
+ height: 36px;
386
+ border-radius: 8px;
387
+ background: var(--bg-tertiary);
388
+ color: var(--text-secondary);
80
389
  text-decoration: none;
390
+ transition: var(--transition-smooth);
391
+ font-size: 16px;
81
392
  }
82
393
 
83
- footer .footer-right a:hover {
84
- opacity: 0.8;
394
+ .footer__social-link:hover {
395
+ background: var(--primary-color);
396
+ color: white;
397
+ transform: translateY(-2px);
398
+ box-shadow: var(--shadow-md);
399
+ }
400
+
401
+ .powered-by {
402
+ display: inline-flex;
403
+ align-items: center;
404
+ gap: 6px;
405
+ padding: 6px 14px;
406
+ background: linear-gradient(135deg, var(--accent-color), var(--primary-color));
407
+ color: white;
408
+ text-decoration: none;
409
+ border-radius: 8px;
410
+ font-size: 12px;
411
+ font-weight: 600;
412
+ letter-spacing: 0.02em;
413
+ transition: var(--transition-smooth);
414
+ box-shadow: var(--shadow-sm);
415
+ }
416
+
417
+ .powered-by:hover {
418
+ transform: translateY(-2px);
419
+ box-shadow: var(--shadow-md);
420
+ opacity: 0.9;
421
+ }
422
+
423
+ .powered-by::before {
424
+ content: '⚡';
425
+ font-size: 14px;
85
426
  }
86
427
 
87
428
  @media (max-width: 768px) {
429
+ .navbar__container {
430
+ padding: 0 16px;
431
+ }
88
432
 
89
- .header,
90
- footer {
91
- flex-direction: column;
92
- align-items: flex-start;
93
- gap: 12px;
433
+
434
+ .navbar__title {
435
+ font-size: 14px;
436
+ }
437
+
438
+ .navbar__badge {
439
+ display: none;
440
+ }
441
+
442
+ .status-badge span:last-child {
443
+ display: none;
94
444
  }
95
445
 
96
446
  #swagger-ui {
97
- padding: 12px;
447
+ padding: 12px 16px;
448
+ }
449
+
450
+ .footer__container {
451
+ flex-direction: column;
452
+ text-align: center;
453
+ gap: 16px;
454
+ }
455
+
456
+ .footer__right {
457
+ flex-direction: column;
458
+ gap: 16px;
459
+ }
460
+
461
+ .pay2b-footer {
462
+ padding: 20px 16px;
463
+ }
464
+ }
465
+
466
+ @media (prefers-reduced-motion: reduce) {
467
+ * {
468
+ animation: none !important;
469
+ transition: none !important;
98
470
  }
99
471
  }
100
472
  </style>
@@ -102,42 +474,109 @@
102
474
 
103
475
  <body>
104
476
 
105
- <div class="header">
106
- <div class="header-left">
107
- <img src="https://cdn-email.s3.us-east-1.amazonaws.com/images/pay2b-logo-header.png" alt="Pay2B Logo" />
108
- <h1>API Reference</h1>
477
+ <nav class="navbar">
478
+ <div class="navbar__container">
479
+ <div class="navbar__left">
480
+ <a href="/" class="navbar__logo">
481
+ <img src="https://static.wixstatic.com/media/20b3f7_42a596f7c2244e1f946ebb5fa8a8512f~mv2.png/v1/fill/w_90,h_93,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/Logo_fw.png"
482
+ alt="P4F Logo" class="navbar__logo-p4f"/>
483
+ <span class="navbar__title">API Interactive</span>
484
+ </a>
485
+ <span class="navbar__badge">Swagger</span>
486
+ </div>
487
+
488
+ <div class="navbar__right">
489
+ <div class="status-badge">
490
+ <span class="status-dot"></span>
491
+ <span>All Systems Operational</span>
492
+ </div>
493
+
494
+ <button class="theme-toggle" id="themeToggle" aria-label="Toggle theme">
495
+ <span id="themeIcon">🌙</span>
496
+ </button>
109
497
  </div>
110
498
  </div>
499
+ </nav>
111
500
 
112
- <div id="swagger-ui"></div>
501
+ <div id="swagger-ui"></div>
113
502
 
114
- <footer>
115
- <div class="footer-left">
116
- <img src="https://cdn-email.s3.us-east-1.amazonaws.com/images/pay2b-logo-header.png" alt="Pay2B Logo" />
503
+ <footer class="pay2b-footer">
504
+ <div class="footer__container">
505
+ <div class="footer__left">
506
+ <img src="https://static.wixstatic.com/media/20b3f7_42a596f7c2244e1f946ebb5fa8a8512f~mv2.png/v1/fill/w_90,h_93,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/Logo_fw.png"
507
+ alt="P4F Logo" class="footer__logo-p4f"/>
508
+ <p class="footer__copyright">© 2026 P4F. All rights reserved.</p>
117
509
  </div>
118
- <div class="footer-right">
119
- <a href="https://www.linkedin.com/company/pay2b" target="_blank">LinkedIn</a>
120
- <a href="https://www.instagram.com/pay2b.oficial" target="_blank">Instagram</a>
121
- <a href="https://www.pay2b.com.br/politica-de-privacidade" target="_blank">Política de privacidade</a>
510
+
511
+ <div class="footer__right">
512
+ <div class="footer__social">
513
+ <a href="https://www.linkedin.com/company/protonss4fun" class="footer__social-link" target="_blank"
514
+ rel="noopener noreferrer" aria-label="LinkedIn P4F"
515
+ style="background: linear-gradient(135deg, var(--accent-color), var(--primary-color)); color: white;">
516
+ in
517
+ </a>
518
+ </div>
519
+
520
+ <a href="https://www.protonss4fun.com.br/" class="powered-by" target="_blank" rel="noopener noreferrer">
521
+ Powered by P4F
522
+ </a>
122
523
  </div>
123
- </footer>
124
-
125
- <script>
126
- window.onload = () => {
127
- SwaggerUIBundle({
128
- url: "/docs/openapi.yaml",
129
- dom_id: "#swagger-ui",
130
- deepLinking: true,
131
- presets: [
132
- SwaggerUIBundle.presets.apis,
133
- SwaggerUIStandalonePreset
134
- ],
135
- layout: "StandaloneLayout",
136
- docExpansion: "none",
137
- operationsSorter: "alpha"
138
- });
139
- };
140
- </script>
524
+ </div>
525
+ </footer>
526
+
527
+ <script>
528
+ const themeToggle = document.getElementById('themeToggle');
529
+ const themeIcon = document.getElementById('themeIcon');
530
+ const html = document.documentElement;
531
+
532
+ const savedTheme = localStorage.getItem('theme') || 'light';
533
+ html.setAttribute('data-theme', savedTheme);
534
+ updateThemeIcon(savedTheme);
535
+
536
+ themeToggle.addEventListener('click', () => {
537
+ const currentTheme = html.getAttribute('data-theme');
538
+ const newTheme = currentTheme === 'light' ? 'dark' : 'light';
539
+ html.setAttribute('data-theme', newTheme);
540
+ localStorage.setItem('theme', newTheme);
541
+ updateThemeIcon(newTheme);
542
+ });
543
+
544
+ function updateThemeIcon(theme) {
545
+ themeIcon.textContent = theme === 'light' ? '🌙' : '☀️';
546
+ }
547
+
548
+ window.onload = () => {
549
+ SwaggerUIBundle({
550
+ url: "/docs/openapi.yaml",
551
+ dom_id: "#swagger-ui",
552
+ deepLinking: true,
553
+ defaultModelsExpandDepth: -1,
554
+ presets: [
555
+ SwaggerUIBundle.presets.apis,
556
+ SwaggerUIStandalonePreset
557
+ ],
558
+ plugins: [
559
+ SwaggerUIBundle.plugins.DownloadUrl
560
+ ],
561
+ layout: "StandaloneLayout",
562
+ docExpansion: "list",
563
+ operationsSorter: "alpha",
564
+ tagsSorter: "alpha",
565
+ filter: true,
566
+ displayRequestDuration: true,
567
+ tryItOutEnabled: true,
568
+ requestSnippetsEnabled: true,
569
+ persistAuthorization: true,
570
+ displayOperationId: false,
571
+ showExtensions: true,
572
+ showCommonExtensions: true,
573
+ defaultModelExpandDepth: 3,
574
+ supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch', 'options', 'head'],
575
+ validatorUrl: null
576
+ });
577
+
578
+ };
579
+ </script>
141
580
  </body>
142
581
 
143
- </html>
582
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "heimdall-api-platform",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "description": "",
5
5
  "main": "dist/lib/index.js",
6
6
  "license": "MIT",
@@ -53,6 +53,7 @@
53
53
  "node-cache": "^5.1.2",
54
54
  "object-hash": "^1.1.8",
55
55
  "pseudomap": "^1.0.2",
56
+ "r7insight_node": "^3.3.1",
56
57
  "redis": "^3.1.2",
57
58
  "redis-rate-limiter": "^1.2.0",
58
59
  "step": "^1.0.0",