@omnizap-system/omnizap 2.6.0 → 2.6.2
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.
- package/.env.example +58 -13
- package/.github/workflows/ci.yml +5 -5
- package/.github/workflows/codeql.yml +1 -1
- package/.github/workflows/db-migration-check.yml +2 -2
- package/.github/workflows/dependency-review.yml +1 -1
- package/.github/workflows/deploy.yml +2 -2
- package/.github/workflows/release.yml +2 -2
- package/.github/workflows/security-attest-provenance.yml +2 -2
- package/.github/workflows/security-gitleaks.yml +13 -4
- package/.github/workflows/security-runner-hardening.yml +2 -2
- package/.github/workflows/security-scorecard.yml +1 -1
- package/.github/workflows/security-zap-baseline.yml +1 -1
- package/.github/workflows/security-zap-full-scan.yml +2 -1
- package/.github/workflows/security-zizmor.yml +1 -1
- package/.github/workflows/wiki-sync.yml +1 -1
- package/.gitleaksignore +9 -0
- package/CODE_OF_CONDUCT.md +2 -2
- package/GEMINI.md +64 -0
- package/README.md +52 -82
- package/SECURITY.md +1 -1
- package/app/config/index.js +2 -0
- package/app/configParts/adminIdentity.js +5 -5
- package/app/configParts/baileysConfig.js +230 -58
- package/app/configParts/groupUtils.js +5 -0
- package/app/configParts/messagePersistenceService.js +145 -4
- package/app/configParts/sessionConfig.js +157 -0
- package/app/connection/baileysCompatibility.test.js +1 -1
- package/app/connection/groupOwnerWriteStateResolver.js +109 -0
- package/app/connection/socketController.js +660 -158
- package/app/connection/socketController.multiSession.test.js +108 -0
- package/app/controllers/messageController.js +1 -1
- package/app/controllers/messagePipeline/commandMiddleware.js +12 -10
- package/app/controllers/messagePipeline/conversationMiddleware.js +2 -1
- package/app/controllers/messagePipeline/messagePipelineMiddlewares.test.js +104 -0
- package/app/controllers/messagePipeline/preProcessingMiddlewares.js +80 -2
- package/app/controllers/messageProcessingPipeline.js +93 -13
- package/app/controllers/messageProcessingPipeline.test.js +200 -0
- package/app/modules/adminModule/AGENT.md +1 -1
- package/app/modules/adminModule/commandConfig.json +3318 -1347
- package/app/modules/adminModule/groupCommandHandlers.js +858 -15
- package/app/modules/adminModule/groupCommandHandlers.test.js +378 -11
- package/app/modules/adminModule/groupWarningRepository.js +152 -0
- package/app/modules/aiModule/AGENT.md +47 -30
- package/app/modules/aiModule/aiConfigRuntime.js +1 -0
- package/app/modules/aiModule/catCommand.js +135 -27
- package/app/modules/aiModule/commandConfig.json +114 -28
- package/app/modules/analyticsModule/messageAnalysisEventRepository.js +54 -6
- package/app/modules/gameModule/AGENT.md +1 -1
- package/app/modules/gameModule/commandConfig.json +29 -0
- package/app/modules/menuModule/AGENT.md +1 -1
- package/app/modules/menuModule/commandConfig.json +45 -10
- package/app/modules/menuModule/menuCatalogService.js +190 -0
- package/app/modules/menuModule/menuCommandUsageRepository.js +109 -0
- package/app/modules/menuModule/menuDynamicService.js +511 -0
- package/app/modules/menuModule/menuDynamicService.test.js +141 -0
- package/app/modules/menuModule/menus.js +36 -5
- package/app/modules/playModule/AGENT.md +10 -5
- package/app/modules/playModule/commandConfig.json +140 -12
- package/app/modules/playModule/playCommand.js +1 -1417
- package/app/modules/playModule/playCommandConstants.js +80 -0
- package/app/modules/playModule/playCommandCore.js +361 -0
- package/app/modules/playModule/playCommandHandlers.js +41 -0
- package/app/modules/playModule/playCommandMediaClient.js +1872 -0
- package/app/modules/playModule/playConfigRuntime.js +245 -4
- package/app/modules/playModule/playModuleCriticalFlows.test.js +152 -0
- package/app/modules/quoteModule/AGENT.md +1 -1
- package/app/modules/quoteModule/commandConfig.json +29 -0
- package/app/modules/quoteModule/quoteCommand.js +3 -2
- package/app/modules/rpgPokemonModule/AGENT.md +1 -1
- package/app/modules/rpgPokemonModule/commandConfig.json +29 -0
- package/app/modules/rpgPokemonModule/rpgBattleCanvasRenderer.js +5 -4
- package/app/modules/rpgPokemonModule/rpgBattleService.test.js +2 -1
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.js +2 -1
- package/app/modules/rpgPokemonModule/rpgPokemonService.js +38 -37
- package/app/modules/rpgPokemonModule/rpgProfileCanvasRenderer.js +4 -3
- package/app/modules/statsModule/AGENT.md +1 -1
- package/app/modules/statsModule/commandConfig.json +58 -0
- package/app/modules/statsModule/rankingCommon.js +5 -4
- package/app/modules/stickerModule/AGENT.md +1 -1
- package/app/modules/stickerModule/addStickerMetadata.js +4 -3
- package/app/modules/stickerModule/commandConfig.json +145 -0
- package/app/modules/stickerModule/stickerCommand.js +1 -1
- package/app/modules/stickerPackModule/AGENT.md +1 -1
- package/app/modules/stickerPackModule/autoPackCollectorService.js +5 -1
- package/app/modules/stickerPackModule/commandConfig.json +29 -0
- package/app/modules/stickerPackModule/semanticThemeClusterService.js +7 -6
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +10 -9
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +9 -8
- package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +3 -2
- package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +2 -1
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +80 -58
- package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +2 -1
- package/app/modules/stickerPackModule/stickerPackRepository.js +2 -1
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +5 -4
- package/app/modules/stickerPackModule/stickerPackService.js +13 -6
- package/app/modules/stickerPackModule/stickerStorageService.js +3 -2
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +2 -1
- package/app/modules/systemMetricsModule/AGENT.md +1 -1
- package/app/modules/systemMetricsModule/commandConfig.json +29 -0
- package/app/modules/systemMetricsModule/pingCommand.js +6 -5
- package/app/modules/tiktokModule/AGENT.md +1 -1
- package/app/modules/tiktokModule/commandConfig.json +29 -0
- package/app/modules/tiktokModule/tiktokCommand.js +2 -1
- package/app/modules/userModule/AGENT.md +1 -1
- package/app/modules/userModule/commandConfig.json +29 -0
- package/app/modules/userModule/userCommand.js +72 -23
- package/app/modules/waifuPicsModule/AGENT.md +57 -27
- package/app/modules/waifuPicsModule/commandConfig.json +87 -0
- package/app/modules/waifuPicsModule/waifuPicsCommand.js +3 -2
- package/app/observability/metrics.js +136 -0
- package/app/services/ai/commandConfigEnrichmentService.js +229 -47
- package/app/services/ai/conversationRouterService.js +4 -3
- package/app/services/ai/geminiService.js +132 -7
- package/app/services/ai/geminiService.test.js +59 -2
- package/app/services/ai/globalModuleAiHelpService.js +3 -2
- package/app/services/ai/messageCommandExecutionService.js +2 -1
- package/app/services/ai/moduleAiHelpCoreService.js +45 -14
- package/app/services/ai/moduleToolExecutorService.js +3 -2
- package/app/services/ai/moduleToolRegistryService.js +2 -1
- package/app/services/ai/toolCandidateSelectorService.js +6 -5
- package/app/services/auth/googleWebLinkService.js +3 -2
- package/app/services/auth/whatsappLoginLinkService.js +3 -2
- package/app/services/external/pokeApiService.js +4 -3
- package/app/services/group/groupMetadataService.js +24 -1
- package/app/services/infra/dbWriteQueue.js +57 -26
- package/app/services/infra/featureFlagService.js +2 -1
- package/app/services/messaging/captchaService.js +3 -2
- package/app/services/messaging/newsBroadcastService.js +846 -29
- package/app/services/multiSession/assignmentBalancerService.js +457 -0
- package/app/services/multiSession/groupOwnershipRepository.js +381 -0
- package/app/services/multiSession/groupOwnershipService.js +890 -0
- package/app/services/multiSession/groupOwnershipService.test.js +309 -0
- package/app/services/multiSession/sessionRegistryService.js +293 -0
- package/app/services/sticker/stickerFocusService.js +11 -10
- package/app/store/aiPromptStore.js +36 -19
- package/app/store/conversationSessionStore.js +7 -6
- package/app/store/groupConfigStore.js +41 -5
- package/app/store/premiumUserStore.js +21 -7
- package/app/utils/antiLink/antiLinkModule.js +352 -16
- package/app/workers/aiHelperContinuousLearningWorker.js +512 -0
- package/app/workers/aiLearningWorker.js +6 -5
- package/app/workers/commandConfigEnrichmentWorker.js +4 -3
- package/database/index.js +14 -8
- package/database/migrations/20260307_d0_hardening_down.sql +1 -1
- package/database/migrations/20260314_d7_canonical_sender_down.sql +1 -1
- package/database/migrations/20260406_d30_security_analytics_down.sql +1 -1
- package/database/migrations/20260411_d35_group_community_metadata_down.sql +59 -0
- package/database/migrations/20260411_d35_group_community_metadata_up.sql +62 -0
- package/database/migrations/20260412_d36_system_config_tables_down.sql +32 -0
- package/database/migrations/20260412_d36_system_config_tables_up.sql +66 -0
- package/database/migrations/20260413_d37_group_user_warnings_down.sql +11 -0
- package/database/migrations/20260413_d37_group_user_warnings_up.sql +24 -0
- package/database/migrations/20260414_d38_multi_session_foundation_down.sql +72 -0
- package/database/migrations/20260414_d38_multi_session_foundation_up.sql +125 -0
- package/database/migrations/20260414_d39_multi_session_cutover_down.sql +103 -0
- package/database/migrations/20260414_d39_multi_session_cutover_up.sql +83 -0
- package/database/schema.sql +102 -1
- package/docker-compose.yml +4 -1
- package/docs/compliance/acceptable-use-policy-2026-03-07.md +1 -1
- package/docs/compliance/dpa-b2b-standard-2026-03-07.md +1 -1
- package/docs/compliance/privacy-policy-2026-03-07.md +4 -4
- package/docs/security/dsar-lgpd-runbook-2026-03-07.md +1 -1
- package/docs/security/incident-response-lgpd-anpd-runbook-2026-03-07.md +1 -1
- package/docs/security/network-hardening-runbook-2026-03-07.md +53 -0
- package/docs/security/omnizap-static-security-headers.conf +25 -0
- package/docs/wiki/Home.md +1 -1
- package/ecosystem.prod.config.cjs +32 -12
- package/index.js +57 -23
- package/observability/alert-rules.yml +20 -0
- package/observability/grafana/dashboards/omnizap-system-admin.json +229 -0
- package/observability/mysql-setup.sql +4 -4
- package/observability/system-admin-observability.md +26 -0
- package/package.json +20 -6
- package/public/apple-touch-icon.png +0 -0
- package/public/comandos/commands-catalog.json +2853 -3326
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/js/apps/apiDocsApp.js +3 -2
- package/public/js/apps/commandsReactApp.js +280 -99
- package/public/js/apps/createPackApp.js +11 -10
- package/public/js/apps/homeReactApp.js +181 -130
- package/public/js/apps/loginReactApp.js +1 -1
- package/public/js/apps/stickersApp.js +263 -110
- package/public/js/apps/termsReactApp.js +73 -24
- package/public/js/apps/userApp.js +4 -3
- package/public/js/apps/userPasswordResetReactApp.js +406 -0
- package/public/js/apps/userReactApp.js +355 -280
- package/public/js/apps/userSystemAdmReactApp.js +1506 -0
- package/public/pages/api-docs.html +1 -1
- package/public/pages/aup.html +2 -2
- package/public/pages/dpa.html +3 -3
- package/public/pages/licenca.html +4 -4
- package/public/pages/login.html +1 -1
- package/public/pages/notice-and-takedown.html +2 -2
- package/public/pages/politica-de-privacidade.html +6 -6
- package/public/pages/seo-bot-whatsapp-para-grupo.html +3 -3
- package/public/pages/seo-bot-whatsapp-sem-programar.html +3 -3
- package/public/pages/seo-como-automatizar-avisos-no-whatsapp.html +3 -3
- package/public/pages/seo-como-criar-comandos-whatsapp.html +3 -3
- package/public/pages/seo-como-evitar-spam-no-whatsapp.html +3 -3
- package/public/pages/seo-como-moderar-grupo-whatsapp.html +3 -3
- package/public/pages/seo-como-organizar-comunidade-whatsapp.html +3 -3
- package/public/pages/seo-melhor-bot-whatsapp-para-grupos.html +3 -3
- package/public/pages/stickers-admin.html +1 -1
- package/public/pages/stickers-create.html +1 -1
- package/public/pages/stickers.html +6 -6
- package/public/pages/suboperadores.html +2 -2
- package/public/pages/termos-de-uso-texto-integral.html +6 -6
- package/public/pages/termos-de-uso.html +3 -3
- package/public/pages/user-password-reset.html +4 -5
- package/public/pages/user-systemadm.html +9 -463
- package/public/pages/user.html +2 -2
- package/scripts/clear-whatsapp-session.sh +123 -0
- package/scripts/core-ai-mode.mjs +163 -0
- package/scripts/deploy.sh +11 -1
- package/scripts/email-broadcast-terms-update.mjs +2 -1
- package/scripts/enrich-command-config-ux-openai.mjs +492 -0
- package/scripts/generate-commands-catalog.mjs +166 -2
- package/scripts/generate-module-agents.mjs +2 -1
- package/scripts/generate-seo-satellite-pages.mjs +5 -4
- package/scripts/github-deploy-notify.mjs +2 -1
- package/scripts/github-release-notify.mjs +25 -10
- package/scripts/new-whatsapp-session.sh +317 -0
- package/scripts/release.sh +2 -19
- package/scripts/security-smoketest.mjs +6 -5
- package/scripts/security-web-surface-check.mjs +218 -0
- package/scripts/sticker-catalog-loadtest.mjs +5 -4
- package/server/auth/googleWebAuth/googleWebAuthService.js +8 -7
- package/server/auth/jwt/webJwtService.js +1 -1
- package/server/auth/stickerCatalogAuthContext.js +2 -1
- package/server/auth/termsAcceptance/termsAcceptanceHandler.js +2 -1
- package/server/auth/userPassword/userPasswordAuthService.js +2 -1
- package/server/auth/userPassword/userPasswordRecoveryService.js +4 -3
- package/server/auth/webAccount/webAccountHandlers.js +9 -10
- package/server/controllers/admin/adminPanelHandlers.js +267 -16
- package/server/controllers/admin/systemAdminController.js +267 -0
- package/server/controllers/seo/stickerCatalogSeoContext.js +10 -9
- package/server/controllers/sticker/nonCatalogHandlers.js +2 -1
- package/server/controllers/sticker/stickerCatalogController.js +23 -36
- package/server/controllers/system/contactController.js +9 -17
- package/server/controllers/system/githubController.js +3 -2
- package/server/controllers/system/stickerCatalogSystemContext.js +41 -19
- package/server/controllers/system/systemController.js +254 -1
- package/server/controllers/system/systemMetricsController.js +2 -1
- package/server/controllers/userController.js +6 -0
- package/server/email/emailTemplateService.js +5 -3
- package/server/http/httpServer.js +11 -6
- package/server/middleware/rateLimit.js +2 -1
- package/server/middleware/securityHeaders.js +20 -1
- package/server/routes/admin/systemAdminRouter.js +6 -0
- package/server/routes/indexRouter.js +30 -6
- package/server/routes/observability/grafanaProxyRouter.js +254 -0
- package/server/routes/static/staticPageRouter.js +27 -1
- package/server/utils/publicContact.js +31 -0
- package/utils/time/timeModule.js +135 -0
- package/utils/time/timeModule.test.js +65 -0
- package/utils/whatsapp/contactEnv.js +39 -0
- package/vite.config.mjs +7 -1
- package/public/assets/images/brand-icon-192.png +0 -0
- package/scripts/sync-readme-snapshot.mjs +0 -133
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<title>
|
|
6
|
+
<title>Omnizap | System Admin</title>
|
|
7
7
|
<meta name="description" content="Painel System Admin do OmniZap com moderação, saúde, auditoria e operações." />
|
|
8
8
|
<meta name="robots" content="noindex, nofollow" />
|
|
9
9
|
<meta name="theme-color" content="#0b1220" />
|
|
@@ -41,468 +41,14 @@
|
|
|
41
41
|
</style>
|
|
42
42
|
</head>
|
|
43
43
|
<body>
|
|
44
|
-
<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
</a>
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<p>Painel corporativo de operações, segurança e moderação para bots e stickers.</p>
|
|
53
|
-
</div>
|
|
54
|
-
|
|
55
|
-
<ul class="nav-list" id="user-admin-nav">
|
|
56
|
-
<li>
|
|
57
|
-
<a class="nav-link" href="#overview">Dashboard <span class="nav-kbd">1</span></a>
|
|
58
|
-
</li>
|
|
59
|
-
<li>
|
|
60
|
-
<a class="nav-link" href="#moderacao">Moderação <span class="nav-kbd">2</span></a>
|
|
61
|
-
</li>
|
|
62
|
-
<li>
|
|
63
|
-
<a class="nav-link" href="#usuarios">Usuários <span class="nav-kbd">3</span></a>
|
|
64
|
-
</li>
|
|
65
|
-
<li>
|
|
66
|
-
<a class="nav-link" href="#sessoes">Sessões <span class="nav-kbd">4</span></a>
|
|
67
|
-
</li>
|
|
68
|
-
<li>
|
|
69
|
-
<a class="nav-link" href="#saude">Saúde <span class="nav-kbd">5</span></a>
|
|
70
|
-
</li>
|
|
71
|
-
<li>
|
|
72
|
-
<a class="nav-link" href="#auditoria">Auditoria <span class="nav-kbd">6</span></a>
|
|
73
|
-
</li>
|
|
74
|
-
<li>
|
|
75
|
-
<a class="nav-link" href="#alertas">Alertas <span class="nav-kbd">7</span></a>
|
|
76
|
-
</li>
|
|
77
|
-
<li>
|
|
78
|
-
<a class="nav-link" href="#exportacao">Exportação <span class="nav-kbd">8</span></a>
|
|
79
|
-
</li>
|
|
80
|
-
<li>
|
|
81
|
-
<a class="nav-link" href="#configuracoes">Configurações <span class="nav-kbd">9</span></a>
|
|
82
|
-
</li>
|
|
83
|
-
</ul>
|
|
84
|
-
|
|
85
|
-
<div class="sidebar-footer">
|
|
86
|
-
<a class="btn" href="/">Home</a>
|
|
87
|
-
<a class="btn" href="/user/">Minha Conta</a>
|
|
88
|
-
<a id="user-manage-head-link" class="btn" href="/stickers/perfil">Gerenciar Stickers</a>
|
|
89
|
-
</div>
|
|
90
|
-
</aside>
|
|
91
|
-
|
|
92
|
-
<div class="workspace">
|
|
93
|
-
<header class="topbar">
|
|
94
|
-
<div class="topbar-left">
|
|
95
|
-
<h2 class="topbar-title">System Admin</h2>
|
|
96
|
-
<div class="topbar-meta">
|
|
97
|
-
<span id="user-env-badge" class="chip env">Production</span>
|
|
98
|
-
<span id="user-global-status" class="chip status"><span class="top-status-dot"></span><span id="user-global-status-text">Online</span></span>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
|
|
102
|
-
<div class="topbar-right">
|
|
103
|
-
<button id="user-compact-toggle" type="button" class="btn ghost" aria-label="Alternar modo compacto">Modo compacto</button>
|
|
104
|
-
<div class="topbar-admin">
|
|
105
|
-
<img id="user-top-avatar" src="https://iili.io/FC3FABe.jpg" alt="Admin" />
|
|
106
|
-
<span id="user-top-admin-name">Admin</span>
|
|
107
|
-
</div>
|
|
108
|
-
</div>
|
|
109
|
-
</header>
|
|
110
|
-
|
|
111
|
-
<div class="viewport">
|
|
112
|
-
<section id="user-admin-panel" class="section admin-panel" hidden>
|
|
113
|
-
<p id="user-admin-status" class="admin-note" hidden></p>
|
|
114
|
-
|
|
115
|
-
<p id="user-admin-error" class="admin-error" hidden></p>
|
|
116
|
-
|
|
117
|
-
<form id="user-admin-unlock-form" class="admin-form" hidden>
|
|
118
|
-
<label for="user-admin-password" class="admin-label">Senha do painel admin</label>
|
|
119
|
-
<div class="admin-form-row">
|
|
120
|
-
<input id="user-admin-password" class="admin-input" type="password" autocomplete="current-password" placeholder="Digite sua senha" />
|
|
121
|
-
<button id="user-admin-unlock-btn" type="submit" class="btn">Desbloquear</button>
|
|
122
|
-
</div>
|
|
123
|
-
</form>
|
|
124
|
-
|
|
125
|
-
<div id="user-admin-overview" hidden>
|
|
126
|
-
<div class="admin-toolbar">
|
|
127
|
-
<div class="admin-toolbar-meta">
|
|
128
|
-
<p class="admin-last-updated">Última atualização: <span id="user-admin-last-updated">n/d</span></p>
|
|
129
|
-
<div id="user-admin-carousel-nav" class="admin-carousel-nav" aria-label="Navegação do carrossel administrativo">
|
|
130
|
-
<button id="user-admin-carousel-prev" type="button" class="admin-carousel-btn" aria-label="Slide anterior">Anterior</button>
|
|
131
|
-
<span id="user-admin-carousel-counter" class="admin-carousel-counter">1 / 1</span>
|
|
132
|
-
<button id="user-admin-carousel-next" type="button" class="admin-carousel-btn" aria-label="Próximo slide">Próximo</button>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
|
|
136
|
-
<form id="user-admin-search-form" class="admin-inline-form">
|
|
137
|
-
<input id="user-admin-search-input" class="admin-input" type="text" placeholder="Buscar por usuário, grupo, pack ou sessão" />
|
|
138
|
-
<button id="user-admin-search-btn" type="submit" class="btn">Buscar</button>
|
|
139
|
-
</form>
|
|
140
|
-
|
|
141
|
-
<div class="security-strip">
|
|
142
|
-
<span id="user-security-session" class="security-pill">Sessão segura</span>
|
|
143
|
-
<span id="user-security-encryption" class="security-pill">Criptografia ativa</span>
|
|
144
|
-
<span id="user-security-ip" class="security-pill">IP n/d</span>
|
|
145
|
-
<span id="user-security-2fa" class="security-pill">2FA n/d</span>
|
|
146
|
-
</div>
|
|
147
|
-
|
|
148
|
-
<div class="risk-strip">
|
|
149
|
-
<span id="user-risk-cpu" class="risk-pill">CPU normal</span>
|
|
150
|
-
<span id="user-risk-spam" class="risk-pill">Spam sob controle</span>
|
|
151
|
-
<span id="user-risk-bans" class="risk-pill">Bans estáveis</span>
|
|
152
|
-
<span id="user-risk-errors" class="risk-pill">Erros baixos</span>
|
|
153
|
-
</div>
|
|
154
|
-
|
|
155
|
-
<p id="user-admin-ops-status" class="admin-item-meta">Ações operacionais disponíveis.</p>
|
|
156
|
-
</div>
|
|
157
|
-
|
|
158
|
-
<div id="user-admin-layout" class="admin-layout admin-layout--enterprise is-carousel is-subpage">
|
|
159
|
-
<section id="overview" class="section section-kpis span-12" data-admin-page="overview">
|
|
160
|
-
<div class="section-head">
|
|
161
|
-
<div>
|
|
162
|
-
<h4 class="panel-title">Dashboard Estratégico</h4>
|
|
163
|
-
<p class="panel-subtitle">Métricas segmentadas por Operação, Sistema, Segurança e Usuários.</p>
|
|
164
|
-
</div>
|
|
165
|
-
</div>
|
|
166
|
-
|
|
167
|
-
<div class="admin-grid">
|
|
168
|
-
<article class="metric-card">
|
|
169
|
-
<p class="admin-metric-label">Bots online</p>
|
|
170
|
-
<p id="user-admin-bots-online" class="admin-metric-value">0</p>
|
|
171
|
-
<span class="trend up">Operação</span>
|
|
172
|
-
<p id="user-admin-bots-online-context" class="metric-context">vs ontem: n/d</p>
|
|
173
|
-
</article>
|
|
174
|
-
<article class="metric-card">
|
|
175
|
-
<p class="admin-metric-label">Mensagens hoje</p>
|
|
176
|
-
<p id="user-admin-messages-today" class="admin-metric-value">0</p>
|
|
177
|
-
<span class="trend up">Operação</span>
|
|
178
|
-
<p id="user-admin-messages-today-context" class="metric-context">vs ontem: n/d</p>
|
|
179
|
-
</article>
|
|
180
|
-
<article class="metric-card system">
|
|
181
|
-
<p class="admin-metric-label">Uptime</p>
|
|
182
|
-
<p id="user-admin-uptime" class="admin-metric-value">n/d</p>
|
|
183
|
-
<span class="trend up">Sistema</span>
|
|
184
|
-
<p id="user-admin-uptime-context" class="metric-context">janela: processo atual</p>
|
|
185
|
-
</article>
|
|
186
|
-
<article class="metric-card system">
|
|
187
|
-
<p class="admin-metric-label">Erros 5xx</p>
|
|
188
|
-
<p id="user-admin-errors-5xx" class="admin-metric-value">0</p>
|
|
189
|
-
<span class="trend warn">Sistema</span>
|
|
190
|
-
<p id="user-admin-errors-5xx-context" class="metric-context">vs ontem: n/d</p>
|
|
191
|
-
</article>
|
|
192
|
-
<article class="metric-card">
|
|
193
|
-
<p class="admin-metric-label">Packs (total)</p>
|
|
194
|
-
<p id="user-admin-total-packs" class="admin-metric-value">0</p>
|
|
195
|
-
<span class="trend up">Produto</span>
|
|
196
|
-
<p id="user-admin-total-packs-context" class="metric-context">delta 24h: n/d</p>
|
|
197
|
-
</article>
|
|
198
|
-
<article class="metric-card">
|
|
199
|
-
<p class="admin-metric-label">Stickers (total)</p>
|
|
200
|
-
<p id="user-admin-total-stickers" class="admin-metric-value">0</p>
|
|
201
|
-
<span class="trend up">Produto</span>
|
|
202
|
-
<p id="user-admin-total-stickers-context" class="metric-context">delta 24h: n/d</p>
|
|
203
|
-
</article>
|
|
204
|
-
<article class="metric-card security warning">
|
|
205
|
-
<p class="admin-metric-label">Spam bloqueado</p>
|
|
206
|
-
<p id="user-admin-spam-blocked" class="admin-metric-value">0</p>
|
|
207
|
-
<span class="trend warn">Segurança</span>
|
|
208
|
-
<p id="user-admin-spam-blocked-context" class="metric-context">vs ontem: n/d</p>
|
|
209
|
-
</article>
|
|
210
|
-
<article class="metric-card security critical">
|
|
211
|
-
<p class="admin-metric-label">Bans ativos</p>
|
|
212
|
-
<p id="user-admin-active-bans" class="admin-metric-value">0</p>
|
|
213
|
-
<span class="trend down">Segurança</span>
|
|
214
|
-
<p id="user-admin-active-bans-context" class="metric-context">delta 24h: n/d</p>
|
|
215
|
-
</article>
|
|
216
|
-
<article class="metric-card users">
|
|
217
|
-
<p class="admin-metric-label">Usuários Google</p>
|
|
218
|
-
<p id="user-admin-known-users" class="admin-metric-value">0</p>
|
|
219
|
-
<span class="trend up">Usuários</span>
|
|
220
|
-
<p id="user-admin-known-users-context" class="metric-context">delta 7d: n/d</p>
|
|
221
|
-
</article>
|
|
222
|
-
<article class="metric-card users">
|
|
223
|
-
<p class="admin-metric-label">Sessões Google</p>
|
|
224
|
-
<p id="user-admin-active-sessions" class="admin-metric-value">0</p>
|
|
225
|
-
<span class="trend warn">Usuários</span>
|
|
226
|
-
<p id="user-admin-active-sessions-context" class="metric-context">agora: n/d</p>
|
|
227
|
-
</article>
|
|
228
|
-
<article class="metric-card users">
|
|
229
|
-
<p class="admin-metric-label">Visitas 24h</p>
|
|
230
|
-
<p id="user-admin-visits-24h" class="admin-metric-value">0</p>
|
|
231
|
-
<span class="trend up">Usuários</span>
|
|
232
|
-
<p id="user-admin-visits-24h-context" class="metric-context">janela: 24h</p>
|
|
233
|
-
</article>
|
|
234
|
-
<article class="metric-card users">
|
|
235
|
-
<p class="admin-metric-label">Visitas 7d</p>
|
|
236
|
-
<p id="user-admin-visits-7d" class="admin-metric-value">0</p>
|
|
237
|
-
<span class="trend up">Usuários</span>
|
|
238
|
-
<p id="user-admin-visits-7d-context" class="metric-context">janela: 7 dias</p>
|
|
239
|
-
</article>
|
|
240
|
-
<article class="metric-card users">
|
|
241
|
-
<p class="admin-metric-label">Visitantes 7d</p>
|
|
242
|
-
<p id="user-admin-unique-visitors-7d" class="admin-metric-value">0</p>
|
|
243
|
-
<span class="trend up">Usuários</span>
|
|
244
|
-
<p id="user-admin-unique-visitors-7d-context" class="metric-context">janela: 7 dias</p>
|
|
245
|
-
</article>
|
|
246
|
-
</div>
|
|
247
|
-
</section>
|
|
248
|
-
|
|
249
|
-
<section id="saude" class="section section-health span-12" data-admin-page="saude">
|
|
250
|
-
<div class="section-head">
|
|
251
|
-
<div>
|
|
252
|
-
<h4 class="panel-title">Saúde do Sistema</h4>
|
|
253
|
-
<p class="panel-subtitle">Visão DevOps com barras de utilização e status de banco.</p>
|
|
254
|
-
</div>
|
|
255
|
-
</div>
|
|
256
|
-
|
|
257
|
-
<div class="health-grid">
|
|
258
|
-
<article class="health-card">
|
|
259
|
-
<div class="health-head">
|
|
260
|
-
<p class="admin-metric-label">CPU</p>
|
|
261
|
-
<p id="user-admin-health-cpu" class="admin-metric-value">n/d</p>
|
|
262
|
-
</div>
|
|
263
|
-
<div class="health-meter"><span id="user-admin-health-cpu-bar"></span></div>
|
|
264
|
-
<p id="user-admin-health-cpu-meta" class="health-meta">Limite recomendado: 88%</p>
|
|
265
|
-
</article>
|
|
266
|
-
<article class="health-card">
|
|
267
|
-
<div class="health-head">
|
|
268
|
-
<p class="admin-metric-label">RAM</p>
|
|
269
|
-
<p id="user-admin-health-ram" class="admin-metric-value">n/d</p>
|
|
270
|
-
</div>
|
|
271
|
-
<div class="health-meter"><span id="user-admin-health-ram-bar"></span></div>
|
|
272
|
-
<p id="user-admin-health-ram-meta" class="health-meta">Limite recomendado: 90%</p>
|
|
273
|
-
</article>
|
|
274
|
-
<article class="health-card">
|
|
275
|
-
<div class="health-head">
|
|
276
|
-
<p class="admin-metric-label">Latência p95</p>
|
|
277
|
-
<p id="user-admin-health-latency" class="admin-metric-value">n/d</p>
|
|
278
|
-
</div>
|
|
279
|
-
<div class="health-meter">
|
|
280
|
-
<span id="user-admin-health-latency-bar"></span>
|
|
281
|
-
</div>
|
|
282
|
-
<p id="user-admin-health-latency-meta" class="health-meta">Alerta acima de 300ms</p>
|
|
283
|
-
</article>
|
|
284
|
-
<article class="health-card">
|
|
285
|
-
<div class="health-head">
|
|
286
|
-
<p class="admin-metric-label">Fila pendente</p>
|
|
287
|
-
<p id="user-admin-health-queue" class="admin-metric-value">n/d</p>
|
|
288
|
-
</div>
|
|
289
|
-
<div class="health-meter"><span id="user-admin-health-queue-bar"></span></div>
|
|
290
|
-
<p id="user-admin-health-queue-meta" class="health-meta">Ideal: abaixo de 120 jobs</p>
|
|
291
|
-
</article>
|
|
292
|
-
<article class="health-card">
|
|
293
|
-
<div class="health-head">
|
|
294
|
-
<p class="admin-metric-label">Status DB</p>
|
|
295
|
-
<span id="user-admin-health-db-badge" class="db-badge">Status</span>
|
|
296
|
-
</div>
|
|
297
|
-
<p id="user-admin-health-db" class="admin-metric-value">n/d</p>
|
|
298
|
-
<p id="user-admin-health-db-meta" class="health-meta">SLA alvo: 99.95%</p>
|
|
299
|
-
</article>
|
|
300
|
-
</div>
|
|
301
|
-
</section>
|
|
302
|
-
|
|
303
|
-
<section id="moderacao" class="section section-security span-6" data-admin-page="moderacao">
|
|
304
|
-
<div class="section-head">
|
|
305
|
-
<div>
|
|
306
|
-
<h4 class="panel-title">Moderação</h4>
|
|
307
|
-
<p class="panel-subtitle">Timeline de incidentes e ações de contenção.</p>
|
|
308
|
-
</div>
|
|
309
|
-
</div>
|
|
310
|
-
|
|
311
|
-
<div class="filters">
|
|
312
|
-
<div class="filter-field">
|
|
313
|
-
<label for="user-admin-moderation-filter-severity">Severidade</label>
|
|
314
|
-
<select id="user-admin-moderation-filter-severity" class="admin-input">
|
|
315
|
-
<option value="all">Todas</option>
|
|
316
|
-
<option value="critical">Critical</option>
|
|
317
|
-
<option value="high">High</option>
|
|
318
|
-
<option value="medium">Medium</option>
|
|
319
|
-
<option value="low">Low</option>
|
|
320
|
-
</select>
|
|
321
|
-
</div>
|
|
322
|
-
<div class="filter-field">
|
|
323
|
-
<label for="user-admin-moderation-filter-type">Tipo</label>
|
|
324
|
-
<select id="user-admin-moderation-filter-type" class="admin-input">
|
|
325
|
-
<option value="all">Todos</option>
|
|
326
|
-
<option value="ban">Ban</option>
|
|
327
|
-
<option value="spam">Spam</option>
|
|
328
|
-
<option value="session">Sessão</option>
|
|
329
|
-
</select>
|
|
330
|
-
</div>
|
|
331
|
-
</div>
|
|
332
|
-
|
|
333
|
-
<div id="user-admin-moderation-list" class="admin-list timeline"></div>
|
|
334
|
-
<div id="user-admin-moderation-pagination" class="list-pagination" hidden>
|
|
335
|
-
<p id="user-admin-moderation-page-meta" class="list-pagination-meta"></p>
|
|
336
|
-
<div class="list-pagination-controls">
|
|
337
|
-
<button id="user-admin-moderation-prev" type="button" class="admin-mini-btn">Anterior</button>
|
|
338
|
-
<span id="user-admin-moderation-page-counter" class="list-pagination-counter">1 / 1</span>
|
|
339
|
-
<button id="user-admin-moderation-next" type="button" class="admin-mini-btn">Próxima</button>
|
|
340
|
-
</div>
|
|
341
|
-
</div>
|
|
342
|
-
</section>
|
|
343
|
-
|
|
344
|
-
<section id="auditoria" class="section section-security span-6" data-admin-page="auditoria">
|
|
345
|
-
<div class="section-head">
|
|
346
|
-
<div>
|
|
347
|
-
<h4 class="panel-title">Auditoria</h4>
|
|
348
|
-
<p class="panel-subtitle">Rastro de alterações administrativas e eventos sensíveis.</p>
|
|
349
|
-
</div>
|
|
350
|
-
</div>
|
|
351
|
-
|
|
352
|
-
<div class="filters">
|
|
353
|
-
<div class="filter-field">
|
|
354
|
-
<label for="user-admin-audit-filter-status">Status</label>
|
|
355
|
-
<select id="user-admin-audit-filter-status" class="admin-input">
|
|
356
|
-
<option value="all">Todos</option>
|
|
357
|
-
<option value="success">Success</option>
|
|
358
|
-
<option value="error">Error</option>
|
|
359
|
-
</select>
|
|
360
|
-
</div>
|
|
361
|
-
<div class="filter-field">
|
|
362
|
-
<label for="user-admin-audit-search">Busca</label>
|
|
363
|
-
<input id="user-admin-audit-search" class="admin-input" type="text" placeholder="Filtrar por ação, alvo ou admin" />
|
|
364
|
-
</div>
|
|
365
|
-
</div>
|
|
366
|
-
|
|
367
|
-
<div id="user-admin-audit-list" class="admin-list timeline"></div>
|
|
368
|
-
<div id="user-admin-audit-pagination" class="list-pagination" hidden>
|
|
369
|
-
<p id="user-admin-audit-page-meta" class="list-pagination-meta"></p>
|
|
370
|
-
<div class="list-pagination-controls">
|
|
371
|
-
<button id="user-admin-audit-prev" type="button" class="admin-mini-btn">Anterior</button>
|
|
372
|
-
<span id="user-admin-audit-page-counter" class="list-pagination-counter">1 / 1</span>
|
|
373
|
-
<button id="user-admin-audit-next" type="button" class="admin-mini-btn">Próxima</button>
|
|
374
|
-
</div>
|
|
375
|
-
</div>
|
|
376
|
-
</section>
|
|
377
|
-
|
|
378
|
-
<section id="usuarios" class="section section-users span-6" data-admin-page="usuarios">
|
|
379
|
-
<div class="section-head">
|
|
380
|
-
<div>
|
|
381
|
-
<h4 class="panel-title">Usuários</h4>
|
|
382
|
-
<p class="panel-subtitle">Contas mapeadas e ações de segurança.</p>
|
|
383
|
-
</div>
|
|
384
|
-
</div>
|
|
385
|
-
<div id="user-admin-users-list" class="admin-list"></div>
|
|
386
|
-
<div id="user-admin-users-pagination" class="list-pagination" hidden>
|
|
387
|
-
<p id="user-admin-users-page-meta" class="list-pagination-meta"></p>
|
|
388
|
-
<div class="list-pagination-controls">
|
|
389
|
-
<button id="user-admin-users-prev" type="button" class="admin-mini-btn">Anterior</button>
|
|
390
|
-
<span id="user-admin-users-page-counter" class="list-pagination-counter">1 / 1</span>
|
|
391
|
-
<button id="user-admin-users-next" type="button" class="admin-mini-btn">Próxima</button>
|
|
392
|
-
</div>
|
|
393
|
-
</div>
|
|
394
|
-
</section>
|
|
395
|
-
|
|
396
|
-
<section id="sessoes" class="section section-users span-6" data-admin-page="sessoes">
|
|
397
|
-
<div class="section-head">
|
|
398
|
-
<div>
|
|
399
|
-
<h4 class="panel-title">Sessões Ativas</h4>
|
|
400
|
-
<p class="panel-subtitle">Sessões autenticadas com opção de encerramento forçado.</p>
|
|
401
|
-
</div>
|
|
402
|
-
</div>
|
|
403
|
-
<div id="user-admin-sessions-list" class="admin-list"></div>
|
|
404
|
-
<div id="user-admin-sessions-pagination" class="list-pagination" hidden>
|
|
405
|
-
<p id="user-admin-sessions-page-meta" class="list-pagination-meta"></p>
|
|
406
|
-
<div class="list-pagination-controls">
|
|
407
|
-
<button id="user-admin-sessions-prev" type="button" class="admin-mini-btn">Anterior</button>
|
|
408
|
-
<span id="user-admin-sessions-page-counter" class="list-pagination-counter">1 / 1</span>
|
|
409
|
-
<button id="user-admin-sessions-next" type="button" class="admin-mini-btn">Próxima</button>
|
|
410
|
-
</div>
|
|
411
|
-
</div>
|
|
412
|
-
</section>
|
|
413
|
-
|
|
414
|
-
<section id="alertas" class="section section-security span-6" data-admin-page="alertas">
|
|
415
|
-
<div class="section-head">
|
|
416
|
-
<div>
|
|
417
|
-
<h4 class="panel-title">Alertas</h4>
|
|
418
|
-
<p class="panel-subtitle">Incidentes monitorados e criticidade operacional.</p>
|
|
419
|
-
</div>
|
|
420
|
-
</div>
|
|
421
|
-
<div id="user-admin-alerts-list" class="admin-list timeline"></div>
|
|
422
|
-
<div id="user-admin-alerts-pagination" class="list-pagination" hidden>
|
|
423
|
-
<p id="user-admin-alerts-page-meta" class="list-pagination-meta"></p>
|
|
424
|
-
<div class="list-pagination-controls">
|
|
425
|
-
<button id="user-admin-alerts-prev" type="button" class="admin-mini-btn">Anterior</button>
|
|
426
|
-
<span id="user-admin-alerts-page-counter" class="list-pagination-counter">1 / 1</span>
|
|
427
|
-
<button id="user-admin-alerts-next" type="button" class="admin-mini-btn">Próxima</button>
|
|
428
|
-
</div>
|
|
429
|
-
</div>
|
|
430
|
-
</section>
|
|
431
|
-
|
|
432
|
-
<section id="configuracoes" class="section section-governance span-6" data-admin-page="configuracoes">
|
|
433
|
-
<div class="section-head">
|
|
434
|
-
<div>
|
|
435
|
-
<h4 class="panel-title">Controle de Recursos</h4>
|
|
436
|
-
<p class="panel-subtitle">Feature flags e ajustes de rollout.</p>
|
|
437
|
-
</div>
|
|
438
|
-
</div>
|
|
439
|
-
<div id="user-admin-flags-list" class="admin-list"></div>
|
|
440
|
-
</section>
|
|
441
|
-
|
|
442
|
-
<section class="section section-security span-6" data-admin-page="configuracoes">
|
|
443
|
-
<div class="section-head">
|
|
444
|
-
<div>
|
|
445
|
-
<h4 class="panel-title">Bans</h4>
|
|
446
|
-
<p class="panel-subtitle">Estado das contas bloqueadas.</p>
|
|
447
|
-
</div>
|
|
448
|
-
</div>
|
|
449
|
-
<div id="user-admin-bans-list" class="admin-list"></div>
|
|
450
|
-
</section>
|
|
451
|
-
|
|
452
|
-
<section class="section section-governance span-6" data-admin-page="usuarios">
|
|
453
|
-
<div class="section-head">
|
|
454
|
-
<div>
|
|
455
|
-
<h4 class="panel-title">Busca Global</h4>
|
|
456
|
-
<p class="panel-subtitle">Resultados consolidados por usuário, grupo, pack e sessão.</p>
|
|
457
|
-
</div>
|
|
458
|
-
</div>
|
|
459
|
-
<div id="user-admin-search-results" class="admin-list"></div>
|
|
460
|
-
</section>
|
|
461
|
-
|
|
462
|
-
<section class="section section-governance span-12" data-admin-page="configuracoes">
|
|
463
|
-
<div class="section-head">
|
|
464
|
-
<div>
|
|
465
|
-
<h4 class="panel-title">Atalhos Operacionais</h4>
|
|
466
|
-
<p class="panel-subtitle">Ações de manutenção com confirmação para operações críticas.</p>
|
|
467
|
-
</div>
|
|
468
|
-
</div>
|
|
469
|
-
<div class="admin-item-actions">
|
|
470
|
-
<button type="button" class="admin-mini-btn" data-admin-op-action="restart_worker">Reiniciar worker</button>
|
|
471
|
-
<button type="button" class="admin-mini-btn" data-admin-op-action="clear_cache">Limpar cache</button>
|
|
472
|
-
<button type="button" class="admin-mini-btn" data-admin-op-action="reprocess_jobs">Reprocessar jobs</button>
|
|
473
|
-
</div>
|
|
474
|
-
</section>
|
|
475
|
-
|
|
476
|
-
<section id="exportacao" class="section section-governance span-12" data-admin-page="exportacao">
|
|
477
|
-
<div class="section-head">
|
|
478
|
-
<div>
|
|
479
|
-
<h4 class="panel-title">Exportação</h4>
|
|
480
|
-
<p class="panel-subtitle">Exportar métricas e eventos para auditoria externa.</p>
|
|
481
|
-
</div>
|
|
482
|
-
</div>
|
|
483
|
-
<div class="admin-item-actions">
|
|
484
|
-
<button id="user-admin-export-metrics-json" type="button" class="admin-mini-btn">Métricas JSON</button>
|
|
485
|
-
<button id="user-admin-export-metrics-csv" type="button" class="admin-mini-btn">Métricas CSV</button>
|
|
486
|
-
<button id="user-admin-export-events-json" type="button" class="admin-mini-btn">Eventos JSON</button>
|
|
487
|
-
<button id="user-admin-export-events-csv" type="button" class="admin-mini-btn">Eventos CSV</button>
|
|
488
|
-
</div>
|
|
489
|
-
</section>
|
|
490
|
-
</div>
|
|
491
|
-
|
|
492
|
-
<div class="admin-actions">
|
|
493
|
-
<button id="user-admin-refresh-btn" type="button" class="btn">Atualizar dados admin</button>
|
|
494
|
-
<button id="user-admin-logout-btn" type="button" class="btn">Sair do admin</button>
|
|
495
|
-
</div>
|
|
496
|
-
</div>
|
|
497
|
-
</section>
|
|
498
|
-
|
|
499
|
-
<p class="footer">OmniZap System · <span id="user-current-year"></span></p>
|
|
500
|
-
</div>
|
|
501
|
-
</div>
|
|
502
|
-
</main>
|
|
503
|
-
|
|
504
|
-
<div id="user-admin-toast-stack" class="toast-stack" aria-live="polite" aria-atomic="false"></div>
|
|
505
|
-
|
|
44
|
+
<div id="user-systemadm-react-root" data-api-base-path="/api" data-login-path="/login" data-stickers-path="/stickers"></div>
|
|
45
|
+
<noscript>
|
|
46
|
+
<main style="max-width: 680px; margin: 100px auto; text-align: center; padding: 20px">
|
|
47
|
+
<h1>System Admin</h1>
|
|
48
|
+
<p>Ative o JavaScript para carregar o painel administrativo.</p>
|
|
49
|
+
<a href="/user/" style="color: #22c55e">Voltar para Minha Conta</a>
|
|
50
|
+
</main>
|
|
51
|
+
</noscript>
|
|
506
52
|
<script type="module" src="/assets/js/user-systemadm.bundle.js"></script>
|
|
507
53
|
</body>
|
|
508
54
|
</html>
|
package/public/pages/user.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<title>Minha Conta |
|
|
6
|
+
<title>Minha Conta | Omnizap</title>
|
|
7
7
|
<meta name="robots" content="noindex, nofollow" />
|
|
8
8
|
<meta name="theme-color" content="#020617" />
|
|
9
9
|
<link rel="canonical" href="https://omnizap.shop/user/" />
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</style>
|
|
27
27
|
</head>
|
|
28
28
|
<body>
|
|
29
|
-
<div id="user-react-root" data-api-base-path="/api" data-login-path="/login"></div>
|
|
29
|
+
<div id="user-react-root" data-api-base-path="/api" data-login-path="/login" data-panel-path="/user" data-password-reset-web-path="/user/password-reset" data-support-whatsapp-number="" data-support-whatsapp-url=""></div>
|
|
30
30
|
<noscript>
|
|
31
31
|
<main style="max-width: 600px; margin: 100px auto; text-align: center; padding: 20px">
|
|
32
32
|
<h1>Dashboard do Usuário</h1>
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
+
ENV_FILE="${ENV_FILE:-$PROJECT_ROOT/.env}"
|
|
6
|
+
SESSION_ID_OVERRIDE=""
|
|
7
|
+
CLEAR_AUTH_FILES=0
|
|
8
|
+
|
|
9
|
+
log() {
|
|
10
|
+
printf '[clear-whatsapp-session] %s\n' "$*"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
fail() {
|
|
14
|
+
printf '[clear-whatsapp-session] erro: %s\n' "$*" >&2
|
|
15
|
+
exit 1
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
require_cmd() {
|
|
19
|
+
if ! command -v "$1" >/dev/null 2>&1; then
|
|
20
|
+
fail "comando ausente: $1"
|
|
21
|
+
fi
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
resolve_db_name() {
|
|
25
|
+
local base_name="$1"
|
|
26
|
+
local node_env="${2:-development}"
|
|
27
|
+
|
|
28
|
+
if [[ "$base_name" == *_dev || "$base_name" == *_prod ]]; then
|
|
29
|
+
printf '%s' "$base_name"
|
|
30
|
+
return 0
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
if [[ "$node_env" == "production" ]]; then
|
|
34
|
+
printf '%s_prod' "$base_name"
|
|
35
|
+
else
|
|
36
|
+
printf '%s_dev' "$base_name"
|
|
37
|
+
fi
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
usage() {
|
|
41
|
+
cat <<'EOF'
|
|
42
|
+
Uso:
|
|
43
|
+
bash scripts/clear-whatsapp-session.sh [opcoes]
|
|
44
|
+
|
|
45
|
+
Opcoes:
|
|
46
|
+
--session <id> Forca um session_id especifico (padrao: BAILEYS_AUTH_SESSION_ID ou "default")
|
|
47
|
+
--clear-auth-files Remove app/connection/auth/*.json tambem (evita rebootstrap da sessao antiga)
|
|
48
|
+
-h, --help Mostra esta ajuda
|
|
49
|
+
EOF
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
while [[ $# -gt 0 ]]; do
|
|
53
|
+
case "$1" in
|
|
54
|
+
--session)
|
|
55
|
+
[[ $# -ge 2 ]] || fail "faltou valor para --session"
|
|
56
|
+
SESSION_ID_OVERRIDE="$2"
|
|
57
|
+
shift 2
|
|
58
|
+
;;
|
|
59
|
+
--clear-auth-files)
|
|
60
|
+
CLEAR_AUTH_FILES=1
|
|
61
|
+
shift
|
|
62
|
+
;;
|
|
63
|
+
-h|--help)
|
|
64
|
+
usage
|
|
65
|
+
exit 0
|
|
66
|
+
;;
|
|
67
|
+
*)
|
|
68
|
+
fail "opcao invalida: $1 (use --help)"
|
|
69
|
+
;;
|
|
70
|
+
esac
|
|
71
|
+
done
|
|
72
|
+
|
|
73
|
+
require_cmd mysql
|
|
74
|
+
require_cmd base64
|
|
75
|
+
|
|
76
|
+
if [[ ! -f "$ENV_FILE" ]]; then
|
|
77
|
+
fail "arquivo .env nao encontrado em: $ENV_FILE"
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
set -a
|
|
81
|
+
# shellcheck disable=SC1090
|
|
82
|
+
source "$ENV_FILE"
|
|
83
|
+
set +a
|
|
84
|
+
|
|
85
|
+
DB_HOST="${DB_HOST:-}"
|
|
86
|
+
DB_USER="${DB_USER:-}"
|
|
87
|
+
DB_PASSWORD="${DB_PASSWORD:-}"
|
|
88
|
+
DB_NAME="${DB_NAME:-}"
|
|
89
|
+
NODE_ENV_VALUE="${NODE_ENV:-development}"
|
|
90
|
+
SESSION_ID="${SESSION_ID_OVERRIDE:-${BAILEYS_AUTH_SESSION_ID:-default}}"
|
|
91
|
+
|
|
92
|
+
[[ -n "$DB_HOST" ]] || fail "DB_HOST nao definido no .env"
|
|
93
|
+
[[ -n "$DB_USER" ]] || fail "DB_USER nao definido no .env"
|
|
94
|
+
[[ -n "$DB_PASSWORD" ]] || fail "DB_PASSWORD nao definido no .env"
|
|
95
|
+
[[ -n "$DB_NAME" ]] || fail "DB_NAME nao definido no .env"
|
|
96
|
+
[[ -n "$SESSION_ID" ]] || SESSION_ID="default"
|
|
97
|
+
|
|
98
|
+
DB_REAL_NAME="$(resolve_db_name "$DB_NAME" "$NODE_ENV_VALUE")"
|
|
99
|
+
SESSION_ID_B64="$(printf '%s' "$SESSION_ID" | base64 -w0)"
|
|
100
|
+
|
|
101
|
+
log "Limpando sessao '$SESSION_ID' na tabela baileys_auth_state (database: $DB_REAL_NAME)..."
|
|
102
|
+
|
|
103
|
+
mysql -h "$DB_HOST" -u "$DB_USER" "-p$DB_PASSWORD" "$DB_REAL_NAME" <<SQL
|
|
104
|
+
SET @sid = CONVERT(FROM_BASE64('${SESSION_ID_B64}') USING utf8mb4);
|
|
105
|
+
DELETE FROM baileys_auth_state WHERE session_id = @sid;
|
|
106
|
+
SELECT ROW_COUNT() AS removed_rows, @sid AS session_id;
|
|
107
|
+
SQL
|
|
108
|
+
|
|
109
|
+
if [[ "$CLEAR_AUTH_FILES" == "1" ]]; then
|
|
110
|
+
AUTH_DIR="$PROJECT_ROOT/app/connection/auth"
|
|
111
|
+
if compgen -G "$AUTH_DIR/*.json" >/dev/null 2>&1; then
|
|
112
|
+
rm -f "$AUTH_DIR"/*.json
|
|
113
|
+
log "Arquivos legados removidos em: $AUTH_DIR/*.json"
|
|
114
|
+
else
|
|
115
|
+
log "Nenhum arquivo legado encontrado em: $AUTH_DIR"
|
|
116
|
+
fi
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
if [[ "${BAILEYS_AUTH_BOOTSTRAP_FROM_FILES:-true}" == "true" && "$CLEAR_AUTH_FILES" != "1" ]]; then
|
|
120
|
+
log "Aviso: BAILEYS_AUTH_BOOTSTRAP_FROM_FILES=true. Considere usar --clear-auth-files para evitar restaurar sessao antiga."
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
log "Concluido. Reinicie o bot para gerar novo QR Code."
|