@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,14 +3,65 @@ import { createRoot } from 'react-dom/client';
|
|
|
3
3
|
import htm from 'htm';
|
|
4
4
|
|
|
5
5
|
const html = htm.bind(React.createElement);
|
|
6
|
+
const rootElement = document.getElementById('terms-react-root');
|
|
7
|
+
|
|
8
|
+
const DEFAULT_SUPPORT_WHATSAPP_NUMBER = '';
|
|
9
|
+
const DEFAULT_SUPPORT_WHATSAPP_URL = '#';
|
|
10
|
+
const DEFAULT_SUPPORT_WHATSAPP_DISPLAY = 'Canal oficial';
|
|
11
|
+
const DEFAULT_SUPPORT_LGPD_TEXT = 'Olá, gostaria de exercer meus direitos de titular de dados (LGPD).';
|
|
12
|
+
|
|
13
|
+
const normalizePhoneDigits = (value) =>
|
|
14
|
+
String(value || '')
|
|
15
|
+
.replace(/\D+/g, '')
|
|
16
|
+
.slice(0, 15);
|
|
17
|
+
|
|
18
|
+
const formatWhatsappDisplay = (value) => {
|
|
19
|
+
const digits = normalizePhoneDigits(value);
|
|
20
|
+
if (!digits) return DEFAULT_SUPPORT_WHATSAPP_DISPLAY;
|
|
21
|
+
if (digits.startsWith('55') && digits.length === 12) {
|
|
22
|
+
return `+55 ${digits.slice(2, 4)} ${digits.slice(4, 8)}-${digits.slice(8)}`;
|
|
23
|
+
}
|
|
24
|
+
if (digits.startsWith('55') && digits.length === 13) {
|
|
25
|
+
return `+55 ${digits.slice(2, 4)} ${digits.slice(4, 9)}-${digits.slice(9)}`;
|
|
26
|
+
}
|
|
27
|
+
return `+${digits}`;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const buildWhatsappUrl = (value, text = '') => {
|
|
31
|
+
const digits = normalizePhoneDigits(value);
|
|
32
|
+
if (!digits) return '';
|
|
33
|
+
const normalizedText = String(text || '').trim();
|
|
34
|
+
if (!normalizedText) return `https://wa.me/${digits}`;
|
|
35
|
+
return `https://wa.me/${digits}?text=${encodeURIComponent(normalizedText)}`;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const isValidWhatsappUrl = (value) => /^https?:\/\/wa\.me\/\d{8,15}(?:\?.*)?$/i.test(String(value || '').trim());
|
|
39
|
+
|
|
40
|
+
const resolveSupportLinks = (root) => {
|
|
41
|
+
const dataset = root?.dataset || {};
|
|
42
|
+
const supportNumber = normalizePhoneDigits(dataset.whatsappSupportNumber) || DEFAULT_SUPPORT_WHATSAPP_NUMBER;
|
|
43
|
+
const rawSupportUrl = String(dataset.whatsappSupportUrl || '').trim();
|
|
44
|
+
const rawSupportLgpdUrl = String(dataset.whatsappSupportLgpdUrl || '').trim();
|
|
45
|
+
const rawSupportDisplay = String(dataset.whatsappSupportDisplay || '').trim();
|
|
46
|
+
const supportUrl = (isValidWhatsappUrl(rawSupportUrl) ? rawSupportUrl : buildWhatsappUrl(supportNumber)) || DEFAULT_SUPPORT_WHATSAPP_URL;
|
|
47
|
+
const supportLgpdUrl = (isValidWhatsappUrl(rawSupportLgpdUrl) ? rawSupportLgpdUrl : buildWhatsappUrl(supportNumber, DEFAULT_SUPPORT_LGPD_TEXT)) || supportUrl;
|
|
48
|
+
const supportDisplay = rawSupportDisplay && !/__WHATSAPP_(?:PUBLIC_CONTACT|SUPPORT)_/i.test(rawSupportDisplay) ? rawSupportDisplay : formatWhatsappDisplay(supportNumber);
|
|
49
|
+
return {
|
|
50
|
+
supportUrl,
|
|
51
|
+
supportLgpdUrl,
|
|
52
|
+
supportDisplay: supportDisplay || DEFAULT_SUPPORT_WHATSAPP_DISPLAY,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const { supportUrl: SUPPORT_WHATSAPP_URL, supportLgpdUrl: SUPPORT_WHATSAPP_LGPD_URL, supportDisplay: SUPPORT_WHATSAPP_DISPLAY } = resolveSupportLinks(rootElement);
|
|
6
57
|
|
|
7
58
|
const TERMS_CONTENT_HTML = String.raw`
|
|
8
59
|
<section class="terms-card" style="border-bottom: 4px solid hsla(142, 71%, 45%, 0.3)">
|
|
9
60
|
<h1>Termos de Uso</h1>
|
|
10
61
|
<span class="updated">Última atualização: 07/03/2026</span>
|
|
11
|
-
<p>Este instrumento regula o acesso e uso do site, API, painel e funcionalidades de automação disponibilizadas pelo
|
|
62
|
+
<p>Este instrumento regula o acesso e uso do site, API, painel e funcionalidades de automação disponibilizadas pelo Omnizap.</p>
|
|
12
63
|
<div class="flex flex-wrap gap-3 mt-6">
|
|
13
|
-
<a class="contact-btn wa" href="
|
|
64
|
+
<a class="contact-btn wa" href="${SUPPORT_WHATSAPP_URL}" target="_blank">WhatsApp Oficial</a>
|
|
14
65
|
<a class="contact-btn ig" href="https://www.instagram.com/kaikybrofc/" target="_blank">Instagram</a>
|
|
15
66
|
</div>
|
|
16
67
|
</section>
|
|
@@ -22,7 +73,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
22
73
|
<li>Nome empresarial: <strong>59.034.123 KAIKY BRITO RIBEIRO</strong>.</li>
|
|
23
74
|
<li>CNPJ: <strong>59.034.123/0001-96</strong>.</li>
|
|
24
75
|
<li>UF do registro: <strong>RR</strong>.</li>
|
|
25
|
-
<li>Canal de contato principal: <a href="
|
|
76
|
+
<li>Canal de contato principal: <a href="${SUPPORT_WHATSAPP_URL}" target="_blank" class="accent">${SUPPORT_WHATSAPP_URL}</a>.</li>
|
|
26
77
|
</ul>
|
|
27
78
|
</section>
|
|
28
79
|
|
|
@@ -39,8 +90,8 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
39
90
|
<section class="terms-card">
|
|
40
91
|
<h2>3. Definições contratuais</h2>
|
|
41
92
|
<ul>
|
|
42
|
-
<li><strong>Plataforma:</strong> ambiente digital
|
|
43
|
-
<li><strong>Serviço oficial:</strong> operação hospedada e controlada pelos canais oficiais do
|
|
93
|
+
<li><strong>Plataforma:</strong> ambiente digital Omnizap (site, API, integrações e painel).</li>
|
|
94
|
+
<li><strong>Serviço oficial:</strong> operação hospedada e controlada pelos canais oficiais do Omnizap (incluindo domínio omnizap.shop e endpoints oficiais).</li>
|
|
44
95
|
<li><strong>Instância derivada/self-host:</strong> fork, redistribuição ou implantação independente feita por terceiro a partir do código-fonte open source.</li>
|
|
45
96
|
<li><strong>Usuário:</strong> pessoa natural ou jurídica que acessa ou utiliza a plataforma.</li>
|
|
46
97
|
<li><strong>Conta:</strong> credencial de acesso vinculada a usuário, e-mail e/ou identificadores técnicos.</li>
|
|
@@ -52,7 +103,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
52
103
|
<section class="terms-card">
|
|
53
104
|
<h2>4. Objeto e escopo de uso</h2>
|
|
54
105
|
<ul>
|
|
55
|
-
<li>Estes Termos se aplicam ao uso do serviço oficial do
|
|
106
|
+
<li>Estes Termos se aplicam ao uso do serviço oficial do Omnizap (site, API, painel administrativo e módulos de automação operados pelos canais oficiais).</li>
|
|
56
107
|
<li>Forks, redistribuições e instâncias auto-hospedadas por terceiros não se vinculam automaticamente a estes Termos.</li>
|
|
57
108
|
<li>Em instância derivada/self-host, o operador dessa instância é responsável por publicar seus próprios termos, política de privacidade e instrumentos de conformidade.</li>
|
|
58
109
|
<li>A plataforma possui finalidade técnica e educacional, sem prejuízo de usos operacionais legítimos pelo usuário.</li>
|
|
@@ -124,7 +175,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
124
175
|
</ul>
|
|
125
176
|
<h3>8.2 Compromisso de sigilo e confidencialidade</h3>
|
|
126
177
|
<ul>
|
|
127
|
-
<li>O
|
|
178
|
+
<li>O Omnizap compromete-se a observar o sigilo e a confidencialidade das informações tratadas, nos limites legais e técnicos aplicáveis.</li>
|
|
128
179
|
<li>O acesso interno ao conteúdo é restrito por necessidade operacional (need-to-know), com controles de acesso e trilha de auditoria.</li>
|
|
129
180
|
<li>Operadores e fornecedores contratados para apoiar o serviço devem observar obrigações contratuais de confidencialidade e proteção de dados.</li>
|
|
130
181
|
<li>A divulgação de conteúdo a terceiros somente ocorrerá mediante obrigação legal, ordem judicial/requisição válida de autoridade competente ou autorização do usuário, quando cabível.</li>
|
|
@@ -152,7 +203,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
152
203
|
<p>Quando aplicável, o atendimento observará resposta simplificada imediata e declaração clara/completa em até 15 (quinze) dias, conforme LGPD art. 19.</p>
|
|
153
204
|
<p>Para exercício de direitos e demandas de privacidade:</p>
|
|
154
205
|
<div class="flex flex-wrap gap-3 mt-4">
|
|
155
|
-
<a class="contact-btn wa" href="
|
|
206
|
+
<a class="contact-btn wa" href="${SUPPORT_WHATSAPP_LGPD_URL}" target="_blank">Solicitar via WhatsApp</a>
|
|
156
207
|
<a class="contact-btn ig" href="https://www.instagram.com/kaikybrofc/" target="_blank">Contato no Instagram</a>
|
|
157
208
|
</div>
|
|
158
209
|
</section>
|
|
@@ -197,7 +248,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
197
248
|
<ul>
|
|
198
249
|
<li>O usuário declara possuir direitos, licenças e autorizações necessárias sobre os conteúdos submetidos à plataforma.</li>
|
|
199
250
|
<li>Conteúdo que infrinja direitos autorais, marca, imagem, privacidade ou legislação poderá ser removido, sem aviso prévio, para mitigação de risco jurídico.</li>
|
|
200
|
-
<li>O software, documentação, layout, sinais distintivos e demais ativos do
|
|
251
|
+
<li>O software, documentação, layout, sinais distintivos e demais ativos do Omnizap permanecem protegidos pela legislação aplicável, sem prejuízo dos direitos concedidos pela licença MIT sobre o código-fonte publicado no repositório oficial.</li>
|
|
201
252
|
<li>Pedidos de remoção por violação de direitos poderão ser enviados aos canais oficiais, com documentação mínima comprobatória.</li>
|
|
202
253
|
</ul>
|
|
203
254
|
</section>
|
|
@@ -223,7 +274,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
223
274
|
<section class="terms-card">
|
|
224
275
|
<h2>16. Responsabilidade do usuário e indenização regressiva</h2>
|
|
225
276
|
<ul>
|
|
226
|
-
<li>O usuário compromete-se a indenizar regressivamente o
|
|
277
|
+
<li>O usuário compromete-se a indenizar regressivamente o Omnizap por danos, custos e despesas decorrentes de uso ilícito ou violação destes Termos.</li>
|
|
227
278
|
<li>Incluem-se, quando aplicável, custos de defesa, perícia, cumprimento de ordem judicial e sanções atribuíveis à conduta do usuário.</li>
|
|
228
279
|
<li>Esta cláusula não afasta direitos inderrogáveis previstos em lei.</li>
|
|
229
280
|
</ul>
|
|
@@ -231,7 +282,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
231
282
|
|
|
232
283
|
<section class="terms-card">
|
|
233
284
|
<h2>17. Limitação de responsabilidade</h2>
|
|
234
|
-
<p>Na extensão máxima permitida pela legislação aplicável, o
|
|
285
|
+
<p>Na extensão máxima permitida pela legislação aplicável, o Omnizap não será responsável por danos indiretos, lucros cessantes, perdas de oportunidade, indisponibilidade de terceiros, bloqueios externos de conta, força maior, caso fortuito, atos de terceiros ou uso indevido da plataforma pelo usuário.</p>
|
|
235
286
|
<p class="note"><strong>Nota:</strong> nada neste instrumento regula responsabilidade nos casos em que a legislação brasileira expressamente proíba limitação ou exclusão.</p>
|
|
236
287
|
</section>
|
|
237
288
|
|
|
@@ -253,12 +304,12 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
253
304
|
<h2>20. Contato e foro</h2>
|
|
254
305
|
<p>Para questões contratuais, privacidade e proteção de dados, utilize os canais oficiais abaixo.</p>
|
|
255
306
|
<div class="flex flex-wrap gap-3 mt-4">
|
|
256
|
-
<a class="contact-btn wa" href="
|
|
307
|
+
<a class="contact-btn wa" href="${SUPPORT_WHATSAPP_URL}" target="_blank">WhatsApp oficial</a>
|
|
257
308
|
<a class="contact-btn ig" href="https://www.instagram.com/kaikybrofc/" target="_blank">Instagram oficial</a>
|
|
258
309
|
</div>
|
|
259
310
|
<ul class="mt-6">
|
|
260
|
-
<li>WhatsApp oficial: <strong
|
|
261
|
-
<li>Link direto: <a href="
|
|
311
|
+
<li>WhatsApp oficial: <strong>${SUPPORT_WHATSAPP_DISPLAY}</strong>.</li>
|
|
312
|
+
<li>Link direto: <a href="${SUPPORT_WHATSAPP_URL}" target="_blank" class="accent">${SUPPORT_WHATSAPP_URL}</a>.</li>
|
|
262
313
|
<li>Instagram oficial: <a href="https://www.instagram.com/kaikybrofc/" target="_blank" class="accent">https://www.instagram.com/kaikybrofc/</a>.</li>
|
|
263
314
|
<li>Contato complementar para notificações formais: privacidade@omnizap.shop.</li>
|
|
264
315
|
<li>Encarregado (LGPD art. 41): Kaiky Brito Ribeiro, contato pelo canal oficial de privacidade.</li>
|
|
@@ -303,7 +354,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
303
354
|
<h2>23. Cláusulas adicionais de proteção jurídica</h2>
|
|
304
355
|
<h3>23.1 Papéis LGPD entre as partes</h3>
|
|
305
356
|
<ul>
|
|
306
|
-
<li>Conforme o fluxo operacional, o
|
|
357
|
+
<li>Conforme o fluxo operacional, o Omnizap poderá atuar como controlador ou operador de dados pessoais, nos termos da LGPD.</li>
|
|
307
358
|
<li>Quando o tratamento decorrer de instruções do cliente/usuário, este permanecerá responsável pela legalidade da instrução e pela definição de finalidade.</li>
|
|
308
359
|
</ul>
|
|
309
360
|
<h3>23.2 Declaração de base legal pelo usuário/cliente</h3>
|
|
@@ -329,7 +380,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
329
380
|
</ul>
|
|
330
381
|
<h3>23.6 Limite global de responsabilidade financeira</h3>
|
|
331
382
|
<ul>
|
|
332
|
-
<li>Ressalvadas hipóteses de dolo, violação de sigilo, danos morais, danos à personalidade e demais limites legais inderrogáveis, a responsabilidade total do
|
|
383
|
+
<li>Ressalvadas hipóteses de dolo, violação de sigilo, danos morais, danos à personalidade e demais limites legais inderrogáveis, a responsabilidade total do Omnizap, por evento ou série de eventos relacionados, fica limitada ao montante efetivamente pago pelo usuário nos 12 (doze) meses anteriores ao fato gerador.</li>
|
|
333
384
|
</ul>
|
|
334
385
|
<h3>23.7 Cláusula penal calibrada e revisão judicial</h3>
|
|
335
386
|
<ul>
|
|
@@ -338,7 +389,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
338
389
|
</ul>
|
|
339
390
|
<h3>23.8 Suspensão imediata por risco jurídico ou técnico</h3>
|
|
340
391
|
<ul>
|
|
341
|
-
<li>O
|
|
392
|
+
<li>O Omnizap poderá suspender imediatamente contas, tokens, integrações ou endpoints em caso de risco iminente à segurança, fraude, abuso, decisão de autoridade ou potencial dano relevante a terceiros.</li>
|
|
342
393
|
</ul>
|
|
343
394
|
<h3>23.9 Procedimento de notice-and-takedown</h3>
|
|
344
395
|
<ul>
|
|
@@ -357,7 +408,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
357
408
|
<ul>
|
|
358
409
|
<li>A não exigência imediata de direito contratual não implicará renúncia.</li>
|
|
359
410
|
<li>Se qualquer cláusula for considerada inválida, as demais permanecerão eficazes.</li>
|
|
360
|
-
<li>É vedada a cessão de posição contratual pelo usuário sem anuência prévia e expressa do
|
|
411
|
+
<li>É vedada a cessão de posição contratual pelo usuário sem anuência prévia e expressa do Omnizap, ressalvadas hipóteses legais obrigatórias.</li>
|
|
361
412
|
</ul>
|
|
362
413
|
</section>
|
|
363
414
|
|
|
@@ -372,13 +423,13 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
372
423
|
</ul>
|
|
373
424
|
<h3>24.2 Branding e uso de marcas de terceiros</h3>
|
|
374
425
|
<ul>
|
|
375
|
-
<li>É vedado apresentar o
|
|
426
|
+
<li>É vedado apresentar o Omnizap como serviço oficial, parceiro certificado, afiliado ou endossado pela Meta/WhatsApp sem autorização formal e verificável.</li>
|
|
376
427
|
<li>É vedado utilizar logotipos, nomes comerciais, ícones ou identidade visual de terceiros fora das diretrizes oficiais de marca e sem o licenciamento pertinente.</li>
|
|
377
428
|
<li>Quando houver referência nominativa a marcas de terceiros, ela deverá ser estritamente descritiva, sem sugerir patrocínio, apoio institucional ou vínculo societário inexistente.</li>
|
|
378
429
|
</ul>
|
|
379
430
|
<h3>24.3 Contratação corporativa, DPA e alocação de risco</h3>
|
|
380
431
|
<ul>
|
|
381
|
-
<li>Para operação corporativa em escala do serviço oficial, o
|
|
432
|
+
<li>Para operação corporativa em escala do serviço oficial, o Omnizap poderá exigir contrato específico com cláusulas de proteção de dados, incluindo DPA (Data Processing Addendum).</li>
|
|
382
433
|
<li>O contrato poderá prever garantias expressas de base legal, dever de cooperação regulatória, indenização regressiva e limitação de responsabilidade em parâmetros economicamente proporcionais.</li>
|
|
383
434
|
<li>A recusa em firmar os instrumentos jurídicos mínimos poderá ensejar suspensão de funcionalidades de alto risco até regularização contratual.</li>
|
|
384
435
|
</ul>
|
|
@@ -390,7 +441,7 @@ const TERMS_CONTENT_HTML = String.raw`
|
|
|
390
441
|
</ul>
|
|
391
442
|
<h3>24.5 Plano formal de incidentes e gatilho ANPD/titulares</h3>
|
|
392
443
|
<ul>
|
|
393
|
-
<li>O
|
|
444
|
+
<li>O Omnizap manterá plano formal de resposta a incidentes com etapas de detecção, contenção, erradicação, recuperação e lições aprendidas.</li>
|
|
394
445
|
<li>Quando houver incidente com risco ou dano relevante aos titulares, será acionado fluxo formal de comunicação à ANPD e aos titulares potencialmente afetados, nos termos da legislação vigente.</li>
|
|
395
446
|
<li>Quando aplicável ao controlador, a comunicação regulatória observará os prazos legais vigentes, incluindo o prazo de 3 (três) dias úteis previsto no regulamento da ANPD, ressalvada legislação específica superveniente.</li>
|
|
396
447
|
<li>As comunicações incluirão, quando exigido, descrição do incidente, dados afetados, medidas técnicas/administrativas adotadas, riscos envolvidos, justificativa para eventual atraso e medidas para mitigar efeitos.</li>
|
|
@@ -456,7 +507,7 @@ const TermsReactApp = () => html`
|
|
|
456
507
|
</main>
|
|
457
508
|
|
|
458
509
|
<footer className="py-12 border-t border-base-200 mt-auto text-center">
|
|
459
|
-
<p className="text-[10px] font-bold uppercase tracking-[0.3em] text-base-content/20">© 2026 OMNIZAP
|
|
510
|
+
<p className="text-[10px] font-bold uppercase tracking-[0.3em] text-base-content/20">© 2026 OMNIZAP · TERMS OF SERVICE V2</p>
|
|
460
511
|
</footer>
|
|
461
512
|
</div>
|
|
462
513
|
`;
|
|
@@ -520,8 +571,6 @@ const TermsReactAppWithEffects = () => {
|
|
|
520
571
|
return html`<${TermsReactApp} />`;
|
|
521
572
|
};
|
|
522
573
|
|
|
523
|
-
const rootElement = document.getElementById('terms-react-root');
|
|
524
|
-
|
|
525
574
|
if (rootElement) {
|
|
526
575
|
const root = createRoot(rootElement);
|
|
527
576
|
root.render(html`<${TermsReactAppWithEffects} />`);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { now as __timeNow, nowIso as __timeNowIso, toUnixMs as __timeNowMs } from '#time';
|
|
1
2
|
const DEFAULT_API_BASE_PATH = '/api';
|
|
2
3
|
const DEFAULT_STICKERS_PATH = '/stickers';
|
|
3
4
|
const DEFAULT_LOGIN_PATH = '/login';
|
|
@@ -555,7 +556,7 @@ if (root) {
|
|
|
555
556
|
const formatRelativeTime = (value) => {
|
|
556
557
|
const ms = Date.parse(String(value || ''));
|
|
557
558
|
if (!Number.isFinite(ms)) return 'n/d';
|
|
558
|
-
const deltaMs =
|
|
559
|
+
const deltaMs = __timeNowMs() - ms;
|
|
559
560
|
const absMs = Math.abs(deltaMs);
|
|
560
561
|
const suffix = deltaMs >= 0 ? 'atrás' : 'à frente';
|
|
561
562
|
if (absMs < 1000) return 'agora';
|
|
@@ -2247,7 +2248,7 @@ if (root) {
|
|
|
2247
2248
|
|
|
2248
2249
|
const normalizedType = normalizeString(type || 'metrics').toLowerCase();
|
|
2249
2250
|
const normalizedFormat = normalizeString(format || 'json').toLowerCase();
|
|
2250
|
-
const fallbackName = `admin-${normalizedType}-${
|
|
2251
|
+
const fallbackName = `admin-${normalizedType}-${__timeNowMs()}.${normalizedFormat === 'csv' ? 'csv' : 'json'}`;
|
|
2251
2252
|
|
|
2252
2253
|
showAdminError('');
|
|
2253
2254
|
setButtonProcessing(triggerButton, 'Exportando...');
|
|
@@ -2303,7 +2304,7 @@ if (root) {
|
|
|
2303
2304
|
const manageHref = `${state.stickersPath.replace(/\/+$/, '') || DEFAULT_STICKERS_PATH}/perfil`;
|
|
2304
2305
|
if (ui.manageHeadLink) ui.manageHeadLink.href = manageHref;
|
|
2305
2306
|
if (ui.manageMainLink) ui.manageMainLink.href = manageHref;
|
|
2306
|
-
if (ui.currentYear) ui.currentYear.textContent = String(
|
|
2307
|
+
if (ui.currentYear) ui.currentYear.textContent = String(__timeNow().getFullYear());
|
|
2307
2308
|
applyEnvironmentBadge();
|
|
2308
2309
|
restoreCompactMode();
|
|
2309
2310
|
bindAdminCarousel();
|