@kaikybrofc/omnizap-system 2.2.10 → 2.3.1

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/README.md +13 -13
  2. package/app/config/adminIdentity.js +1 -3
  3. package/app/connection/socketController.js +10 -20
  4. package/app/controllers/messageController.js +7 -28
  5. package/app/modules/aiModule/catCommand.js +29 -192
  6. package/app/modules/broadcastModule/noticeCommand.js +28 -97
  7. package/app/modules/gameModule/diceCommand.js +6 -32
  8. package/app/modules/playModule/playCommand.js +57 -258
  9. package/app/modules/quoteModule/quoteCommand.js +2 -4
  10. package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1 -13
  11. package/app/modules/statsModule/noMessageCommand.js +16 -84
  12. package/app/modules/statsModule/rankingCommand.js +5 -25
  13. package/app/modules/statsModule/rankingCommon.js +1 -9
  14. package/app/modules/stickerModule/convertToWebp.js +4 -27
  15. package/app/modules/stickerModule/stickerCommand.js +13 -24
  16. package/app/modules/stickerModule/stickerTextCommand.js +13 -25
  17. package/app/modules/stickerPackModule/autoPackCollectorService.js +16 -7
  18. package/app/modules/stickerPackModule/domainEventOutboxRepository.js +20 -36
  19. package/app/modules/stickerPackModule/domainEvents.js +2 -11
  20. package/app/modules/stickerPackModule/semanticReclassificationEngine.js +13 -50
  21. package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +2 -15
  22. package/app/modules/stickerPackModule/semanticThemeClusterService.js +14 -41
  23. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +25 -95
  24. package/app/modules/stickerPackModule/stickerAssetRepository.js +12 -31
  25. package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +13 -18
  26. package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +284 -709
  27. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +27 -106
  28. package/app/modules/stickerPackModule/stickerClassificationService.js +46 -77
  29. package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +13 -53
  30. package/app/modules/stickerPackModule/stickerDomainEventBus.js +10 -16
  31. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +40 -39
  32. package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +1 -4
  33. package/app/modules/stickerPackModule/stickerObjectStorageService.js +26 -26
  34. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +32 -187
  35. package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +6 -15
  36. package/app/modules/stickerPackModule/stickerPackItemRepository.js +6 -32
  37. package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +12 -36
  38. package/app/modules/stickerPackModule/stickerPackMessageService.js +12 -40
  39. package/app/modules/stickerPackModule/stickerPackRepository.js +23 -66
  40. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +9 -21
  41. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +10 -40
  42. package/app/modules/stickerPackModule/stickerPackService.js +50 -115
  43. package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +2 -21
  44. package/app/modules/stickerPackModule/stickerPackUtils.js +13 -3
  45. package/app/modules/stickerPackModule/stickerStorageService.js +16 -65
  46. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +4 -22
  47. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +14 -29
  48. package/app/modules/systemMetricsModule/pingCommand.js +9 -39
  49. package/app/modules/tiktokModule/tiktokCommand.js +17 -109
  50. package/app/modules/userModule/userCommand.js +2 -88
  51. package/app/observability/metrics.js +5 -16
  52. package/app/services/captchaService.js +1 -6
  53. package/app/services/dbWriteQueue.js +3 -18
  54. package/app/services/featureFlagService.js +2 -8
  55. package/app/services/newsBroadcastService.js +0 -1
  56. package/app/services/queueUtils.js +2 -4
  57. package/app/services/whatsappLoginLinkService.js +7 -9
  58. package/app/store/premiumUserStore.js +1 -2
  59. package/app/utils/antiLink/antiLinkModule.js +3 -233
  60. package/app/utils/logger/loggerModule.js +9 -34
  61. package/app/utils/systemMetrics/systemMetricsModule.js +1 -4
  62. package/database/index.js +1 -0
  63. package/database/init.js +1 -8
  64. package/database/migrations/20260228_0027_web_visit_event.sql +15 -0
  65. package/docker-compose.yml +27 -27
  66. package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +26 -0
  67. package/docs/seo/satellite-page-template.md +2 -0
  68. package/docs/seo/satellite-pages-phase1.json +40 -177
  69. package/eslint.config.js +2 -15
  70. package/index.js +8 -36
  71. package/ml/clip_classifier/README.md +4 -6
  72. package/observability/alert-rules.yml +12 -12
  73. package/observability/grafana/provisioning/dashboards/dashboards.yml +1 -1
  74. package/package.json +6 -3
  75. package/public/api-docs/index.html +220 -193
  76. package/public/bot-whatsapp-para-grupo/index.html +291 -261
  77. package/public/bot-whatsapp-sem-programar/index.html +291 -261
  78. package/public/comandos/index.html +421 -406
  79. package/public/como-automatizar-avisos-no-whatsapp/index.html +291 -261
  80. package/public/como-criar-comandos-whatsapp/index.html +291 -261
  81. package/public/como-evitar-spam-no-whatsapp/index.html +291 -261
  82. package/public/como-moderar-grupo-whatsapp/index.html +291 -261
  83. package/public/como-organizar-comunidade-whatsapp/index.html +291 -261
  84. package/public/css/github-project-panel.css +13 -8
  85. package/public/css/stickers-admin.css +25 -9
  86. package/public/css/styles.css +23 -16
  87. package/public/index.html +1106 -993
  88. package/public/js/apps/apiDocsApp.js +17 -167
  89. package/public/js/apps/createPackApp.js +69 -332
  90. package/public/js/apps/homeApp.js +274 -101
  91. package/public/js/apps/loginApp.js +3 -12
  92. package/public/js/apps/stickersAdminApp.js +190 -181
  93. package/public/js/apps/stickersApp.js +482 -1411
  94. package/public/js/apps/userApp.js +217 -1
  95. package/public/js/catalog.js +11 -74
  96. package/public/js/github-panel/components/ErrorState.js +1 -8
  97. package/public/js/github-panel/components/GithubProjectPanel.js +2 -9
  98. package/public/js/github-panel/components/SkeletonPanel.js +1 -11
  99. package/public/js/github-panel/components/StatCard.js +1 -7
  100. package/public/js/github-panel/vendor/react.js +1 -9
  101. package/public/js/runtime/react-runtime.js +1 -9
  102. package/public/licenca/index.html +200 -86
  103. package/public/login/index.html +315 -325
  104. package/public/melhor-bot-whatsapp-para-grupos/index.html +291 -261
  105. package/public/stickers/admin/index.html +14 -19
  106. package/public/stickers/create/index.html +39 -44
  107. package/public/stickers/index.html +96 -107
  108. package/public/termos-de-uso/index.html +369 -122
  109. package/public/user/index.html +527 -350
  110. package/scripts/cache-bust.mjs +5 -24
  111. package/scripts/generate-seo-satellite-pages.mjs +10 -13
  112. package/scripts/run-prettier-all.mjs +25 -0
  113. package/scripts/sticker-catalog-loadtest.mjs +13 -11
  114. package/scripts/sticker-worker-task.mjs +1 -4
  115. package/scripts/sync-readme-snapshot.mjs +3 -2
  116. package/server/auth/googleWebAuth/googleWebAuthService.js +614 -0
  117. package/server/controllers/stickerCatalogController.js +297 -632
  118. package/server/http/httpServer.js +2 -10
  119. package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +1 -8
  120. package/server/routes/stickerCatalog/catalogHandlers/catalogAuthHttp.js +1 -9
  121. package/server/routes/stickerCatalog/catalogHandlers/catalogPublicHttp.js +10 -11
  122. package/server/routes/stickerCatalog/catalogHandlers/catalogUploadHttp.js +1 -10
  123. package/server/routes/stickerCatalog/catalogRouter.js +11 -13
@@ -1,200 +1,227 @@
1
1
  <!doctype html>
2
2
  <html lang="pt-BR">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>OmniZap API Docs | Área de Desenvolvedor da API WhatsApp</title>
7
- <meta name="description" content="Área de desenvolvedor da API OmniZap para bots e automação WhatsApp: endpoints, casos de uso, exemplos práticos e integração do módulo de stickers." />
8
- <meta name="keywords" content="omnizap api, api whatsapp, bot whatsapp api, automação whatsapp, documentação api, integração stickers" />
9
- <meta name="author" content="OmniZap System" />
10
- <meta name="robots" content="index, follow, max-snippet:-1" />
11
- <link rel="canonical" href="https://omnizap.shop/api-docs/" />
12
- <link rel="icon" type="image/jpeg" href="https://iili.io/FC3FABe.jpg" />
13
- <link rel="apple-touch-icon" href="https://iili.io/FC3FABe.jpg" />
14
- <link rel="sitemap" type="application/xml" href="https://omnizap.shop/sitemap.xml" />
15
- <meta property="og:type" content="website" />
16
- <meta property="og:locale" content="pt_BR" />
17
- <meta property="og:site_name" content="OmniZap System" />
18
- <meta property="og:title" content="OmniZap API Docs | Área de Desenvolvedor" />
19
- <meta property="og:description" content="Documentação técnica da API OmniZap para bots WhatsApp, automações e integração com stickers." />
20
- <meta property="og:url" content="https://omnizap.shop/api-docs/" />
21
- <meta property="og:image" content="https://iili.io/fSNGag2.png" />
22
- <meta name="twitter:card" content="summary_large_image" />
23
- <meta name="twitter:title" content="OmniZap API Docs | Área de Desenvolvedor" />
24
- <meta name="twitter:description" content="Referência da API OmniZap para bots WhatsApp, automações e stickers." />
25
- <meta name="twitter:image" content="https://iili.io/fSNGag2.png" />
26
- <script type="application/ld+json">
27
- {
28
- "@context": "https://schema.org",
29
- "@type": "SoftwareApplication",
30
- "name": "OmniZap API",
31
- "applicationCategory": "DeveloperApplication",
32
- "operatingSystem": "Linux, Windows, macOS",
33
- "url": "https://omnizap.shop/api-docs/",
34
- "description": "API do OmniZap para bots e automação WhatsApp, com endpoints para catálogo de stickers, métricas e integrações técnicas.",
35
- "offers": {
36
- "@type": "Offer",
37
- "price": "0",
38
- "priceCurrency": "USD"
39
- }
40
- }
41
- </script>
42
- <script type="application/ld+json">
43
- {
44
- "@context": "https://schema.org",
45
- "@type": "FAQPage",
46
- "mainEntity": [
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>OmniZap API Docs | Área de Desenvolvedor da API WhatsApp</title>
7
+ <meta name="description" content="Área de desenvolvedor da API OmniZap para bots e automação WhatsApp: endpoints, casos de uso, exemplos práticos e integração do módulo de stickers." />
8
+ <meta name="keywords" content="omnizap api, api whatsapp, bot whatsapp api, automação whatsapp, documentação api, integração stickers" />
9
+ <meta name="author" content="OmniZap System" />
10
+ <meta name="robots" content="index, follow, max-snippet:-1" />
11
+ <link rel="canonical" href="https://omnizap.shop/api-docs/" />
12
+ <link rel="icon" type="image/jpeg" href="https://iili.io/FC3FABe.jpg" />
13
+ <link rel="apple-touch-icon" href="https://iili.io/FC3FABe.jpg" />
14
+ <link rel="sitemap" type="application/xml" href="https://omnizap.shop/sitemap.xml" />
15
+ <meta property="og:type" content="website" />
16
+ <meta property="og:locale" content="pt_BR" />
17
+ <meta property="og:site_name" content="OmniZap System" />
18
+ <meta property="og:title" content="OmniZap API Docs | Área de Desenvolvedor" />
19
+ <meta property="og:description" content="Documentação técnica da API OmniZap para bots WhatsApp, automações e integração com stickers." />
20
+ <meta property="og:url" content="https://omnizap.shop/api-docs/" />
21
+ <meta property="og:image" content="https://iili.io/fSNGag2.png" />
22
+ <meta name="twitter:card" content="summary_large_image" />
23
+ <meta name="twitter:title" content="OmniZap API Docs | Área de Desenvolvedor" />
24
+ <meta name="twitter:description" content="Referência da API OmniZap para bots WhatsApp, automações e stickers." />
25
+ <meta name="twitter:image" content="https://iili.io/fSNGag2.png" />
26
+ <script type="application/ld+json">
47
27
  {
48
- "@type": "Question",
49
- "name": "Para que serve a API OmniZap?",
50
- "acceptedAnswer": {
51
- "@type": "Answer",
52
- "text": "A API OmniZap permite integrar bots e fluxos de automação WhatsApp, incluindo catálogo de stickers, métricas e rotas para operações técnicas."
28
+ "@context": "https://schema.org",
29
+ "@type": "SoftwareApplication",
30
+ "name": "OmniZap API",
31
+ "applicationCategory": "DeveloperApplication",
32
+ "operatingSystem": "Linux, Windows, macOS",
33
+ "url": "https://omnizap.shop/api-docs/",
34
+ "description": "API do OmniZap para bots e automação WhatsApp, com endpoints para catálogo de stickers, métricas e integrações técnicas.",
35
+ "offers": {
36
+ "@type": "Offer",
37
+ "price": "0",
38
+ "priceCurrency": "USD"
53
39
  }
54
- },
55
- {
56
- "@type": "Question",
57
- "name": "Consigo usar os packs de stickers no meu bot?",
58
- "acceptedAnswer": {
59
- "@type": "Answer",
60
- "text": "Sim. Os packs públicos podem ser consultados por API e utilizados em fluxos do seu bot ou integração server-to-server."
61
- }
62
- },
63
- {
64
- "@type": "Question",
65
- "name": "A API tem exemplos práticos de integração?",
66
- "acceptedAnswer": {
67
- "@type": "Answer",
68
- "text": "Sim. A página inclui exemplos em cURL, JavaScript e Node.js para acelerar o início da integração."
69
- }
70
- },
40
+ }
41
+ </script>
42
+ <script type="application/ld+json">
71
43
  {
72
- "@type": "Question",
73
- "name": "Onde vejo o catálogo de stickers?",
74
- "acceptedAnswer": {
75
- "@type": "Answer",
76
- "text": "O catálogo está disponível em https://omnizap.shop/stickers/ e funciona como módulo integrado à plataforma OmniZap."
77
- }
44
+ "@context": "https://schema.org",
45
+ "@type": "FAQPage",
46
+ "mainEntity": [
47
+ {
48
+ "@type": "Question",
49
+ "name": "Para que serve a API OmniZap?",
50
+ "acceptedAnswer": {
51
+ "@type": "Answer",
52
+ "text": "A API OmniZap permite integrar bots e fluxos de automação WhatsApp, incluindo catálogo de stickers, métricas e rotas para operações técnicas."
53
+ }
54
+ },
55
+ {
56
+ "@type": "Question",
57
+ "name": "Consigo usar os packs de stickers no meu bot?",
58
+ "acceptedAnswer": {
59
+ "@type": "Answer",
60
+ "text": "Sim. Os packs públicos podem ser consultados por API e utilizados em fluxos do seu bot ou integração server-to-server."
61
+ }
62
+ },
63
+ {
64
+ "@type": "Question",
65
+ "name": "A API tem exemplos práticos de integração?",
66
+ "acceptedAnswer": {
67
+ "@type": "Answer",
68
+ "text": "Sim. A página inclui exemplos em cURL, JavaScript e Node.js para acelerar o início da integração."
69
+ }
70
+ },
71
+ {
72
+ "@type": "Question",
73
+ "name": "Onde vejo o catálogo de stickers?",
74
+ "acceptedAnswer": {
75
+ "@type": "Answer",
76
+ "text": "O catálogo está disponível em https://omnizap.shop/stickers/ e funciona como módulo integrado à plataforma OmniZap."
77
+ }
78
+ }
79
+ ]
80
+ }
81
+ </script>
82
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" rel="stylesheet" />
83
+ <style>
84
+ body {
85
+ margin: 0;
86
+ font-family:
87
+ ui-sans-serif,
88
+ system-ui,
89
+ -apple-system,
90
+ Segoe UI,
91
+ Roboto,
92
+ Arial,
93
+ sans-serif;
94
+ background: #0f172a;
95
+ color: #f8fafc;
96
+ }
97
+ .wrap {
98
+ width: min(1024px, 92vw);
99
+ margin: 0 auto;
100
+ padding: 30px 0;
101
+ }
102
+ h1,
103
+ h2 {
104
+ margin: 0 0 10px;
105
+ }
106
+ h1 {
107
+ font-size: 34px;
108
+ }
109
+ h2 {
110
+ font-size: 20px;
111
+ margin-top: 22px;
112
+ }
113
+ .section-title {
114
+ margin: 22px 0 10px;
115
+ }
116
+ .sub-title {
117
+ font-size: 18px;
118
+ margin: 0 0 10px;
119
+ }
120
+ p {
121
+ color: #94a3b8;
122
+ }
123
+ .card {
124
+ border: 1px solid rgba(255, 255, 255, 0.05);
125
+ background: #1e293b;
126
+ border-radius: 12px;
127
+ padding: 16px;
128
+ margin-bottom: 12px;
129
+ }
130
+ .list {
131
+ margin: 0;
132
+ padding-left: 18px;
133
+ color: #c5d4ea;
134
+ line-height: 1.7;
135
+ }
136
+ .status-row {
137
+ display: flex;
138
+ gap: 10px;
139
+ align-items: center;
140
+ flex-wrap: wrap;
141
+ margin-bottom: 10px;
142
+ }
143
+ .badge {
144
+ display: inline-flex;
145
+ align-items: center;
146
+ border-radius: 999px;
147
+ padding: 6px 10px;
148
+ border: 1px solid transparent;
149
+ font-size: 12px;
150
+ font-weight: 700;
151
+ letter-spacing: 0.2px;
152
+ }
153
+ .badge-ok {
154
+ color: #d8ffea;
155
+ background: #103724;
156
+ border-color: #1f6a42;
157
+ }
158
+ .badge-warn {
159
+ color: #f5eed6;
160
+ background: #34280f;
161
+ border-color: #6b5422;
162
+ }
163
+ .badge-bad {
164
+ color: #ffd8de;
165
+ background: #3a141d;
166
+ border-color: #713041;
167
+ }
168
+ .status-meta {
169
+ color: #94a3b8;
170
+ font-size: 13px;
171
+ }
172
+ .status-grid {
173
+ display: grid;
174
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
175
+ gap: 8px;
176
+ }
177
+ .status-item {
178
+ border: 1px solid rgba(255, 255, 255, 0.05);
179
+ border-radius: 10px;
180
+ padding: 10px;
181
+ background: #111827;
182
+ display: grid;
183
+ gap: 4px;
184
+ }
185
+ .status-item strong {
186
+ font-size: 12px;
187
+ color: #94a3b8;
188
+ text-transform: uppercase;
189
+ letter-spacing: 0.3px;
190
+ }
191
+ .status-item span {
192
+ font-size: 14px;
193
+ color: #f8fafc;
194
+ }
195
+ .status-error {
196
+ margin-top: 10px;
197
+ color: #ffb4c1;
198
+ font-size: 13px;
199
+ }
200
+ code,
201
+ pre {
202
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
203
+ background: #111827;
204
+ border-radius: 8px;
205
+ }
206
+ pre {
207
+ padding: 12px;
208
+ overflow: auto;
209
+ border: 1px solid rgba(255, 255, 255, 0.05);
210
+ color: #f8fafc;
211
+ }
212
+ .top a {
213
+ color: #2563eb;
214
+ text-decoration: none;
215
+ margin-right: 12px;
216
+ }
217
+ .icon {
218
+ margin-right: 8px;
219
+ color: #7c3aed;
78
220
  }
79
- ]
80
- }
81
- </script>
82
- <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" rel="stylesheet" />
83
- <style>
84
- body {
85
- margin: 0;
86
- font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
87
- background: #0f172a;
88
- color: #f8fafc;
89
- }
90
- .wrap { width: min(1024px, 92vw); margin: 0 auto; padding: 30px 0; }
91
- h1, h2 { margin: 0 0 10px; }
92
- h1 { font-size: 34px; }
93
- h2 { font-size: 20px; margin-top: 22px; }
94
- .section-title { margin: 22px 0 10px; }
95
- .sub-title { font-size: 18px; margin: 0 0 10px; }
96
- p { color: #94a3b8; }
97
- .card {
98
- border: 1px solid rgba(255, 255, 255, 0.05);
99
- background: #1e293b;
100
- border-radius: 12px;
101
- padding: 16px;
102
- margin-bottom: 12px;
103
- }
104
- .list {
105
- margin: 0;
106
- padding-left: 18px;
107
- color: #c5d4ea;
108
- line-height: 1.7;
109
- }
110
- .status-row {
111
- display: flex;
112
- gap: 10px;
113
- align-items: center;
114
- flex-wrap: wrap;
115
- margin-bottom: 10px;
116
- }
117
- .badge {
118
- display: inline-flex;
119
- align-items: center;
120
- border-radius: 999px;
121
- padding: 6px 10px;
122
- border: 1px solid transparent;
123
- font-size: 12px;
124
- font-weight: 700;
125
- letter-spacing: .2px;
126
- }
127
- .badge-ok {
128
- color: #d8ffea;
129
- background: #103724;
130
- border-color: #1f6a42;
131
- }
132
- .badge-warn {
133
- color: #f5eed6;
134
- background: #34280f;
135
- border-color: #6b5422;
136
- }
137
- .badge-bad {
138
- color: #ffd8de;
139
- background: #3a141d;
140
- border-color: #713041;
141
- }
142
- .status-meta {
143
- color: #94a3b8;
144
- font-size: 13px;
145
- }
146
- .status-grid {
147
- display: grid;
148
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
149
- gap: 8px;
150
- }
151
- .status-item {
152
- border: 1px solid rgba(255, 255, 255, 0.05);
153
- border-radius: 10px;
154
- padding: 10px;
155
- background: #111827;
156
- display: grid;
157
- gap: 4px;
158
- }
159
- .status-item strong {
160
- font-size: 12px;
161
- color: #94a3b8;
162
- text-transform: uppercase;
163
- letter-spacing: .3px;
164
- }
165
- .status-item span {
166
- font-size: 14px;
167
- color: #f8fafc;
168
- }
169
- .status-error {
170
- margin-top: 10px;
171
- color: #ffb4c1;
172
- font-size: 13px;
173
- }
174
- code, pre {
175
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
176
- background: #111827;
177
- border-radius: 8px;
178
- }
179
- pre {
180
- padding: 12px;
181
- overflow: auto;
182
- border: 1px solid rgba(255, 255, 255, 0.05);
183
- color: #f8fafc;
184
- }
185
- .top a {
186
- color: #2563eb;
187
- text-decoration: none;
188
- margin-right: 12px;
189
- }
190
- .icon {
191
- margin-right: 8px;
192
- color: #7c3aed;
193
- }
194
- </style>
195
- </head>
196
- <body>
197
- <div id="api-docs-react-root"></div>
198
- <script type="module" src="/js/apps/apiDocsApp.js?v=20260226-api-docs-plus"></script>
199
- </body>
221
+ </style>
222
+ </head>
223
+ <body>
224
+ <div id="api-docs-react-root"></div>
225
+ <script type="module" src="/js/apps/apiDocsApp.js?v=20260226-api-docs-plus"></script>
226
+ </body>
200
227
  </html>