@omnizap-system/omnizap 2.5.12

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 (425) hide show
  1. package/.clusterfuzzlite/Dockerfile +10 -0
  2. package/.env.example +907 -0
  3. package/.github/codeql/codeql-config.yml +10 -0
  4. package/.github/dependabot.yml +35 -0
  5. package/.github/workflows/ci.yml +73 -0
  6. package/.github/workflows/codeql.yml +106 -0
  7. package/.github/workflows/db-migration-check.yml +98 -0
  8. package/.github/workflows/dependency-review.yml +22 -0
  9. package/.github/workflows/deploy.yml +95 -0
  10. package/.github/workflows/release.yml +106 -0
  11. package/.github/workflows/security-attest-provenance.yml +51 -0
  12. package/.github/workflows/security-gitleaks.yml +34 -0
  13. package/.github/workflows/security-runner-hardening.yml +31 -0
  14. package/.github/workflows/security-scorecard.yml +44 -0
  15. package/.github/workflows/security-zap-baseline.yml +44 -0
  16. package/.github/workflows/security-zap-full-scan.yml +43 -0
  17. package/.github/workflows/security-zizmor.yml +36 -0
  18. package/.github/workflows/wiki-sync.yml +44 -0
  19. package/.gitleaks.toml +15 -0
  20. package/.prettierrc +34 -0
  21. package/CODE_OF_CONDUCT.md +114 -0
  22. package/LICENSE +56 -0
  23. package/README.md +110 -0
  24. package/SECURITY.md +110 -0
  25. package/app/config/index.js +4 -0
  26. package/app/configParts/adminIdentity.js +92 -0
  27. package/app/configParts/baileysConfig.js +1818 -0
  28. package/app/configParts/groupUtils.js +692 -0
  29. package/app/configParts/loggerConfig.js +394 -0
  30. package/app/configParts/messagePersistenceService.js +305 -0
  31. package/app/connection/baileysCompatibility.test.js +40 -0
  32. package/app/connection/baileysDbAuthState.js +344 -0
  33. package/app/connection/socketController.js +2243 -0
  34. package/app/controllers/messageController.js +7 -0
  35. package/app/controllers/messagePipeline/commandMiddleware.js +146 -0
  36. package/app/controllers/messagePipeline/conversationMiddleware.js +183 -0
  37. package/app/controllers/messagePipeline/messagePipelineMiddlewares.test.js +522 -0
  38. package/app/controllers/messagePipeline/postProcessingMiddleware.js +41 -0
  39. package/app/controllers/messagePipeline/preProcessingMiddlewares.js +166 -0
  40. package/app/controllers/messageProcessingPipeline.js +699 -0
  41. package/app/modules/adminModule/AGENT.md +4056 -0
  42. package/app/modules/adminModule/adminAiHelpService.js +56 -0
  43. package/app/modules/adminModule/adminConfigRuntime.js +177 -0
  44. package/app/modules/adminModule/commandConfig.json +7122 -0
  45. package/app/modules/adminModule/groupCommandHandlers.js +1823 -0
  46. package/app/modules/adminModule/groupCommandHandlers.test.js +350 -0
  47. package/app/modules/adminModule/groupEventHandlers.js +399 -0
  48. package/app/modules/aiModule/AGENT.md +547 -0
  49. package/app/modules/aiModule/aiAiHelpService.js +14 -0
  50. package/app/modules/aiModule/aiConfigRuntime.js +135 -0
  51. package/app/modules/aiModule/catCommand.js +967 -0
  52. package/app/modules/aiModule/commandConfig.json +981 -0
  53. package/app/modules/analyticsModule/messageAnalysisEventRepository.js +83 -0
  54. package/app/modules/gameModule/AGENT.md +196 -0
  55. package/app/modules/gameModule/commandConfig.json +366 -0
  56. package/app/modules/gameModule/diceCommand.js +42 -0
  57. package/app/modules/gameModule/gameAiHelpService.js +14 -0
  58. package/app/modules/gameModule/gameConfigRuntime.js +68 -0
  59. package/app/modules/menuModule/AGENT.md +205 -0
  60. package/app/modules/menuModule/commandConfig.json +366 -0
  61. package/app/modules/menuModule/common.js +316 -0
  62. package/app/modules/menuModule/menuAiHelpService.js +14 -0
  63. package/app/modules/menuModule/menuConfigRuntime.js +68 -0
  64. package/app/modules/menuModule/menus.js +66 -0
  65. package/app/modules/playModule/AGENT.md +321 -0
  66. package/app/modules/playModule/commandConfig.json +584 -0
  67. package/app/modules/playModule/playAiHelpService.js +14 -0
  68. package/app/modules/playModule/playCommand.js +1417 -0
  69. package/app/modules/playModule/playConfigRuntime.js +68 -0
  70. package/app/modules/quoteModule/AGENT.md +199 -0
  71. package/app/modules/quoteModule/commandConfig.json +366 -0
  72. package/app/modules/quoteModule/quoteAiHelpService.js +14 -0
  73. package/app/modules/quoteModule/quoteCommand.js +842 -0
  74. package/app/modules/quoteModule/quoteConfigRuntime.js +68 -0
  75. package/app/modules/rpgPokemonModule/AGENT.md +229 -0
  76. package/app/modules/rpgPokemonModule/commandConfig.json +386 -0
  77. package/app/modules/rpgPokemonModule/rpgBattleCanvasRenderer.js +795 -0
  78. package/app/modules/rpgPokemonModule/rpgBattleService.js +2110 -0
  79. package/app/modules/rpgPokemonModule/rpgBattleService.test.js +770 -0
  80. package/app/modules/rpgPokemonModule/rpgEvolutionUtils.js +22 -0
  81. package/app/modules/rpgPokemonModule/rpgPokemonAiHelpService.js +14 -0
  82. package/app/modules/rpgPokemonModule/rpgPokemonCommand.js +174 -0
  83. package/app/modules/rpgPokemonModule/rpgPokemonConfigRuntime.js +68 -0
  84. package/app/modules/rpgPokemonModule/rpgPokemonDomain.js +192 -0
  85. package/app/modules/rpgPokemonModule/rpgPokemonDomain.test.js +93 -0
  86. package/app/modules/rpgPokemonModule/rpgPokemonEvolution.test.js +46 -0
  87. package/app/modules/rpgPokemonModule/rpgPokemonMessages.js +746 -0
  88. package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1847 -0
  89. package/app/modules/rpgPokemonModule/rpgPokemonService.js +6839 -0
  90. package/app/modules/rpgPokemonModule/rpgProfileCanvasRenderer.js +354 -0
  91. package/app/modules/statsModule/AGENT.md +320 -0
  92. package/app/modules/statsModule/commandConfig.json +540 -0
  93. package/app/modules/statsModule/globalRankingCommand.js +64 -0
  94. package/app/modules/statsModule/rankingCommand.js +41 -0
  95. package/app/modules/statsModule/rankingCommon.js +1305 -0
  96. package/app/modules/statsModule/statsAiHelpService.js +14 -0
  97. package/app/modules/statsModule/statsConfigRuntime.js +68 -0
  98. package/app/modules/stickerModule/AGENT.md +692 -0
  99. package/app/modules/stickerModule/addStickerMetadata.js +239 -0
  100. package/app/modules/stickerModule/commandConfig.json +1216 -0
  101. package/app/modules/stickerModule/convertToWebp.js +367 -0
  102. package/app/modules/stickerModule/stickerAiHelpService.js +14 -0
  103. package/app/modules/stickerModule/stickerCommand.js +446 -0
  104. package/app/modules/stickerModule/stickerConfigRuntime.js +68 -0
  105. package/app/modules/stickerModule/stickerConvertCommand.js +159 -0
  106. package/app/modules/stickerModule/stickerTextCommand.js +653 -0
  107. package/app/modules/stickerPackModule/AGENT.md +215 -0
  108. package/app/modules/stickerPackModule/autoPackCollectorRuntime.js +20 -0
  109. package/app/modules/stickerPackModule/autoPackCollectorService.js +357 -0
  110. package/app/modules/stickerPackModule/commandConfig.json +387 -0
  111. package/app/modules/stickerPackModule/domainEventOutboxRepository.js +227 -0
  112. package/app/modules/stickerPackModule/domainEvents.js +52 -0
  113. package/app/modules/stickerPackModule/semanticReclassificationEngine.js +429 -0
  114. package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +75 -0
  115. package/app/modules/stickerPackModule/semanticThemeClusterService.js +544 -0
  116. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +400 -0
  117. package/app/modules/stickerPackModule/stickerAssetRepository.js +400 -0
  118. package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +175 -0
  119. package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +3702 -0
  120. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +559 -0
  121. package/app/modules/stickerPackModule/stickerClassificationService.js +557 -0
  122. package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +249 -0
  123. package/app/modules/stickerPackModule/stickerDomainEventBus.js +65 -0
  124. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +208 -0
  125. package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +99 -0
  126. package/app/modules/stickerPackModule/stickerObjectStorageService.js +285 -0
  127. package/app/modules/stickerPackModule/stickerPackAiHelpService.js +14 -0
  128. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +1148 -0
  129. package/app/modules/stickerPackModule/stickerPackConfigRuntime.js +68 -0
  130. package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +152 -0
  131. package/app/modules/stickerPackModule/stickerPackErrors.js +30 -0
  132. package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +101 -0
  133. package/app/modules/stickerPackModule/stickerPackItemRepository.js +432 -0
  134. package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +313 -0
  135. package/app/modules/stickerPackModule/stickerPackMessageService.js +268 -0
  136. package/app/modules/stickerPackModule/stickerPackRepository.js +450 -0
  137. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +179 -0
  138. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +271 -0
  139. package/app/modules/stickerPackModule/stickerPackService.js +733 -0
  140. package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +32 -0
  141. package/app/modules/stickerPackModule/stickerPackUtils.js +107 -0
  142. package/app/modules/stickerPackModule/stickerStorageService.js +559 -0
  143. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +242 -0
  144. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +242 -0
  145. package/app/modules/systemMetricsModule/AGENT.md +193 -0
  146. package/app/modules/systemMetricsModule/commandConfig.json +344 -0
  147. package/app/modules/systemMetricsModule/pingCommand.js +399 -0
  148. package/app/modules/systemMetricsModule/systemMetricsAiHelpService.js +14 -0
  149. package/app/modules/systemMetricsModule/systemMetricsConfigRuntime.js +68 -0
  150. package/app/modules/tiktokModule/AGENT.md +196 -0
  151. package/app/modules/tiktokModule/commandConfig.json +366 -0
  152. package/app/modules/tiktokModule/tiktokAiHelpService.js +14 -0
  153. package/app/modules/tiktokModule/tiktokCommand.js +716 -0
  154. package/app/modules/tiktokModule/tiktokConfigRuntime.js +68 -0
  155. package/app/modules/userModule/AGENT.md +200 -0
  156. package/app/modules/userModule/commandConfig.json +386 -0
  157. package/app/modules/userModule/userAiHelpService.js +14 -0
  158. package/app/modules/userModule/userCommand.js +1155 -0
  159. package/app/modules/userModule/userConfigRuntime.js +68 -0
  160. package/app/modules/waifuPicsModule/AGENT.md +431 -0
  161. package/app/modules/waifuPicsModule/commandConfig.json +780 -0
  162. package/app/modules/waifuPicsModule/waifuPicsAiHelpService.js +14 -0
  163. package/app/modules/waifuPicsModule/waifuPicsCommand.js +586 -0
  164. package/app/modules/waifuPicsModule/waifuPicsConfigRuntime.js +68 -0
  165. package/app/observability/metrics.js +766 -0
  166. package/app/services/ai/aiHelpResponseCacheRepository.js +280 -0
  167. package/app/services/ai/aiLearningRepository.js +400 -0
  168. package/app/services/ai/commandConfigEnrichmentRepository.js +769 -0
  169. package/app/services/ai/commandConfigEnrichmentService.js +452 -0
  170. package/app/services/ai/commandConfigValidationService.js +443 -0
  171. package/app/services/ai/commandToolBuilderService.js +192 -0
  172. package/app/services/ai/conversationRouterService.js +516 -0
  173. package/app/services/ai/geminiService.js +115 -0
  174. package/app/services/ai/geminiService.test.js +87 -0
  175. package/app/services/ai/globalModuleAiHelpService.js +1412 -0
  176. package/app/services/ai/globalToolCallingService.js +203 -0
  177. package/app/services/ai/messageCommandExecutionService.js +391 -0
  178. package/app/services/ai/moduleAiHelpCoreService.js +1099 -0
  179. package/app/services/ai/moduleAiHelpWrapperFactory.js +65 -0
  180. package/app/services/ai/moduleCommandConfigRuntimeService.js +113 -0
  181. package/app/services/ai/moduleToolExecutorService.js +464 -0
  182. package/app/services/ai/moduleToolRegistryService.js +178 -0
  183. package/app/services/ai/toolCandidateSelectorService.js +781 -0
  184. package/app/services/auth/googleWebLinkService.js +80 -0
  185. package/app/services/auth/whatsappLoginLinkService.js +230 -0
  186. package/app/services/external/pokeApiService.js +398 -0
  187. package/app/services/group/groupMetadataService.js +311 -0
  188. package/app/services/infra/dbWriteQueue.js +874 -0
  189. package/app/services/infra/featureFlagService.js +131 -0
  190. package/app/services/infra/queueUtils.js +55 -0
  191. package/app/services/messaging/captchaService.js +491 -0
  192. package/app/services/messaging/messagePersistenceService.js +1 -0
  193. package/app/services/messaging/newsBroadcastService.js +347 -0
  194. package/app/services/sticker/stickerFocusService.js +347 -0
  195. package/app/services/sticker/stickerFocusService.test.js +43 -0
  196. package/app/store/aiPromptStore.js +38 -0
  197. package/app/store/conversationSessionStore.js +131 -0
  198. package/app/store/groupConfigStore.js +58 -0
  199. package/app/store/premiumUserStore.js +54 -0
  200. package/app/utils/antiLink/antiLinkModule.js +700 -0
  201. package/app/utils/http/getImageBufferModule.js +18 -0
  202. package/app/utils/json/jsonSanitizer.js +113 -0
  203. package/app/utils/json/jsonSanitizer.test.js +40 -0
  204. package/app/utils/systemMetrics/systemMetricsModule.js +88 -0
  205. package/app/workers/aiLearningWorker.js +605 -0
  206. package/app/workers/commandConfigEnrichmentWorker.js +242 -0
  207. package/database/index.js +2075 -0
  208. package/database/init.js +151 -0
  209. package/database/migrations/.gitkeep +0 -0
  210. package/database/migrations/20260307_d0_hardening_down.sql +64 -0
  211. package/database/migrations/20260307_d0_hardening_up.sql +79 -0
  212. package/database/migrations/20260307_d1_terms_acceptance_down.sql +11 -0
  213. package/database/migrations/20260307_d1_terms_acceptance_up.sql +37 -0
  214. package/database/migrations/20260307_d2_auth_hardening_down.sql +75 -0
  215. package/database/migrations/20260307_d2_auth_hardening_up.sql +100 -0
  216. package/database/migrations/20260314_d7_canonical_sender_down.sql +53 -0
  217. package/database/migrations/20260314_d7_canonical_sender_up.sql +114 -0
  218. package/database/migrations/20260406_d30_security_analytics_down.sql +95 -0
  219. package/database/migrations/20260406_d30_security_analytics_up.sql +292 -0
  220. package/database/migrations/20260407_d31_web_google_session_token_hardening_down.sql +2 -0
  221. package/database/migrations/20260407_d31_web_google_session_token_hardening_up.sql +17 -0
  222. package/database/migrations/20260408_d32_ai_help_response_cache_down.sql +1 -0
  223. package/database/migrations/20260408_d32_ai_help_response_cache_up.sql +22 -0
  224. package/database/migrations/20260409_d33_ai_learning_tables_down.sql +4 -0
  225. package/database/migrations/20260409_d33_ai_learning_tables_up.sql +52 -0
  226. package/database/migrations/20260410_d34_command_config_enrichment_down.sql +3 -0
  227. package/database/migrations/20260410_d34_command_config_enrichment_up.sql +48 -0
  228. package/database/schema.sql +1186 -0
  229. package/docker-compose.yml +104 -0
  230. package/docs/audits/stickerCatalogController-out-of-scope.md +103 -0
  231. package/docs/audits/stickerCatalogController-symbols.md +58 -0
  232. package/docs/compliance/acceptable-use-policy-2026-03-07.md +35 -0
  233. package/docs/compliance/dpa-b2b-standard-2026-03-07.md +80 -0
  234. package/docs/compliance/monthly-compliance-checklist-2026-03-07.md +88 -0
  235. package/docs/compliance/notice-and-takedown-policy-2026-03-07.md +34 -0
  236. package/docs/compliance/privacy-policy-2026-03-07.md +75 -0
  237. package/docs/compliance/subprocessors-inventory-2026-03-07.md +16 -0
  238. package/docs/database/production-db-evolution-runbook-2026q1.md +365 -0
  239. package/docs/security/dsar-lgpd-runbook-2026-03-07.md +86 -0
  240. package/docs/security/incident-response-lgpd-anpd-runbook-2026-03-07.md +77 -0
  241. package/docs/security/network-hardening-runbook-2026-03-07.md +137 -0
  242. package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +238 -0
  243. package/docs/seo/satellite-page-template.md +116 -0
  244. package/docs/seo/satellite-pages-phase1.json +364 -0
  245. package/docs/wiki/Home.md +120 -0
  246. package/docs/wiki/pair-extraordinaire-2026-03-08.md +3 -0
  247. package/docs/wiki/recent-changes-2026-03-08.md +47 -0
  248. package/ecosystem.prod.config.cjs +135 -0
  249. package/eslint.config.js +89 -0
  250. package/index.js +488 -0
  251. package/ml/clip_classifier/Dockerfile +18 -0
  252. package/ml/clip_classifier/README.md +118 -0
  253. package/ml/clip_classifier/adaptive_scoring.py +40 -0
  254. package/ml/clip_classifier/classifier.py +654 -0
  255. package/ml/clip_classifier/embedding_store.py +481 -0
  256. package/ml/clip_classifier/env_loader.py +15 -0
  257. package/ml/clip_classifier/llm_label_expander.py +144 -0
  258. package/ml/clip_classifier/main.py +213 -0
  259. package/ml/clip_classifier/requirements.txt +10 -0
  260. package/ml/clip_classifier/similarity_engine.py +74 -0
  261. package/new-logo.png +0 -0
  262. package/observability/alert-rules.yml +60 -0
  263. package/observability/grafana/dashboards/omnizap-mysql.json +136 -0
  264. package/observability/grafana/dashboards/omnizap-overview.json +170 -0
  265. package/observability/grafana/provisioning/dashboards/dashboards.yml +11 -0
  266. package/observability/grafana/provisioning/datasources/datasources.yml +15 -0
  267. package/observability/loki-config.yml +38 -0
  268. package/observability/mysql-setup.sql +46 -0
  269. package/observability/prometheus.yml +35 -0
  270. package/observability/promtail-config.yml +84 -0
  271. package/observability/sticker-catalog-slo.md +83 -0
  272. package/observability/sticker-scale-hardening-rollout.md +128 -0
  273. package/package.json +144 -0
  274. package/public/apple-touch-icon.png +0 -0
  275. package/public/assets/css/commands-react.input.css +71 -0
  276. package/public/assets/css/create-pack-react.input.css +31 -0
  277. package/public/assets/css/home-react.input.css +106 -0
  278. package/public/assets/css/login-react.input.css +58 -0
  279. package/public/assets/css/stickers-react.input.css +18 -0
  280. package/public/assets/css/terms-react.input.css +115 -0
  281. package/public/assets/css/user-react.input.css +57 -0
  282. package/public/assets/images/brand-icon-192.png +0 -0
  283. package/public/assets/images/brand-logo-128.webp +0 -0
  284. package/public/assets/images/hero-banner-1280.jpg +0 -0
  285. package/public/comandos/commands-catalog.json +4517 -0
  286. package/public/css/api-docs.css +161 -0
  287. package/public/css/stickers-admin.css +1288 -0
  288. package/public/css/styles.css +679 -0
  289. package/public/css/systemadm/admin.css +474 -0
  290. package/public/css/systemadm/base.css +73 -0
  291. package/public/css/systemadm/components.css +662 -0
  292. package/public/css/systemadm/layout.css +229 -0
  293. package/public/css/systemadm/tokens.css +56 -0
  294. package/public/favicon-16x16.png +0 -0
  295. package/public/favicon-32x32.png +0 -0
  296. package/public/favicon.ico +0 -0
  297. package/public/js/apps/apiDocsApp.js +235 -0
  298. package/public/js/apps/commandsReactApp.js +528 -0
  299. package/public/js/apps/createPackApp.js +1646 -0
  300. package/public/js/apps/homeReactApp.js +942 -0
  301. package/public/js/apps/loginReactApp.js +496 -0
  302. package/public/js/apps/stickersAdminApp.js +1753 -0
  303. package/public/js/apps/stickersApp.js +3797 -0
  304. package/public/js/apps/termsReactApp.js +528 -0
  305. package/public/js/apps/userApp.js +2540 -0
  306. package/public/js/apps/userProfile/actions.js +66 -0
  307. package/public/js/apps/userReactApp.js +547 -0
  308. package/public/js/catalog.js +950 -0
  309. package/public/pages/api-docs.html +40 -0
  310. package/public/pages/aup.html +158 -0
  311. package/public/pages/comandos.html +41 -0
  312. package/public/pages/dpa.html +227 -0
  313. package/public/pages/home.html +45 -0
  314. package/public/pages/licenca.html +182 -0
  315. package/public/pages/login.html +40 -0
  316. package/public/pages/notice-and-takedown.html +234 -0
  317. package/public/pages/politica-de-privacidade.html +251 -0
  318. package/public/pages/seo-bot-whatsapp-para-grupo.html +350 -0
  319. package/public/pages/seo-bot-whatsapp-sem-programar.html +350 -0
  320. package/public/pages/seo-como-automatizar-avisos-no-whatsapp.html +350 -0
  321. package/public/pages/seo-como-criar-comandos-whatsapp.html +350 -0
  322. package/public/pages/seo-como-evitar-spam-no-whatsapp.html +350 -0
  323. package/public/pages/seo-como-moderar-grupo-whatsapp.html +350 -0
  324. package/public/pages/seo-como-organizar-comunidade-whatsapp.html +350 -0
  325. package/public/pages/seo-melhor-bot-whatsapp-para-grupos.html +350 -0
  326. package/public/pages/stickers-admin.html +31 -0
  327. package/public/pages/stickers-create.html +41 -0
  328. package/public/pages/stickers.html +45 -0
  329. package/public/pages/suboperadores.html +237 -0
  330. package/public/pages/termos-de-uso-texto-integral.html +241 -0
  331. package/public/pages/termos-de-uso.html +41 -0
  332. package/public/pages/user-password-reset.html +32 -0
  333. package/public/pages/user-systemadm.html +508 -0
  334. package/public/pages/user.html +39 -0
  335. package/public/robots.txt +9 -0
  336. package/public/site.webmanifest +24 -0
  337. package/public/sitemap.xml +98 -0
  338. package/schemas/command-config.schema.json +582 -0
  339. package/scripts/baileys-compat-smoke.mjs +12 -0
  340. package/scripts/cache-bust.mjs +142 -0
  341. package/scripts/deploy.sh +916 -0
  342. package/scripts/email-broadcast-terms-update.mjs +170 -0
  343. package/scripts/enrich-command-discovery-fields.mjs +286 -0
  344. package/scripts/generate-command-config-schema.mjs +273 -0
  345. package/scripts/generate-commands-catalog.mjs +308 -0
  346. package/scripts/generate-module-agents.mjs +631 -0
  347. package/scripts/generate-seo-satellite-pages.mjs +400 -0
  348. package/scripts/github-deploy-notify.mjs +174 -0
  349. package/scripts/github-release-notify.mjs +219 -0
  350. package/scripts/release.sh +599 -0
  351. package/scripts/run-codeql-local.sh +116 -0
  352. package/scripts/run-prettier-all.mjs +25 -0
  353. package/scripts/security-smoketest.mjs +581 -0
  354. package/scripts/sticker-catalog-loadtest.mjs +210 -0
  355. package/scripts/sticker-worker-task.mjs +119 -0
  356. package/scripts/sync-readme-snapshot.mjs +133 -0
  357. package/scripts/validate-command-config-schema.mjs +130 -0
  358. package/scripts/validate-command-configs.mjs +15 -0
  359. package/scripts/wiki-sync.sh +191 -0
  360. package/server/auth/googleWebAuth/googleWebAuthRuntime.js +62 -0
  361. package/server/auth/googleWebAuth/googleWebAuthService.js +807 -0
  362. package/server/auth/jwt/webJwtService.js +147 -0
  363. package/server/auth/stickerCatalogAuthContext.js +165 -0
  364. package/server/auth/termsAcceptance/termsAcceptanceHandler.js +189 -0
  365. package/server/auth/userPassword/index.js +14 -0
  366. package/server/auth/userPassword/userPasswordAuthService.js +422 -0
  367. package/server/auth/userPassword/userPasswordCrypto.js +199 -0
  368. package/server/auth/userPassword/userPasswordCrypto.test.js +76 -0
  369. package/server/auth/userPassword/userPasswordRecoveryService.js +728 -0
  370. package/server/auth/validation/authSchemas.js +236 -0
  371. package/server/auth/webAccount/webAccountHandlers.js +1434 -0
  372. package/server/controllers/admin/adminBanService.js +138 -0
  373. package/server/controllers/admin/adminPanelHandlers.js +2083 -0
  374. package/server/controllers/admin/stickerCatalogAdminContext.js +17 -0
  375. package/server/controllers/admin/systemAdminController.js +201 -0
  376. package/server/controllers/email/emailAutomationController.js +239 -0
  377. package/server/controllers/metricsController.js +21 -0
  378. package/server/controllers/seo/stickerCatalogSeoContext.js +514 -0
  379. package/server/controllers/sticker/nonCatalogHandlers.js +303 -0
  380. package/server/controllers/sticker/stickerCatalogController.js +4700 -0
  381. package/server/controllers/system/contactController.js +115 -0
  382. package/server/controllers/system/githubController.js +137 -0
  383. package/server/controllers/system/stickerCatalogSystemContext.js +758 -0
  384. package/server/controllers/system/storageController.js +154 -0
  385. package/server/controllers/system/systemController.js +135 -0
  386. package/server/controllers/system/systemMetricsController.js +156 -0
  387. package/server/controllers/system/visitController.js +90 -0
  388. package/server/controllers/userController.js +145 -0
  389. package/server/email/emailAutomationRuntime.js +225 -0
  390. package/server/email/emailAutomationService.js +125 -0
  391. package/server/email/emailOutboxRepository.js +282 -0
  392. package/server/email/emailTemplateService.js +480 -0
  393. package/server/email/emailTransportService.js +156 -0
  394. package/server/http/clientIp.js +95 -0
  395. package/server/http/httpRequestUtils.js +262 -0
  396. package/server/http/httpRequestUtils.test.js +80 -0
  397. package/server/http/httpServer.js +180 -0
  398. package/server/http/requestContext.js +20 -0
  399. package/server/http/siteRoutingUtils.js +87 -0
  400. package/server/index.js +1 -0
  401. package/server/middleware/cachePolicy.js +26 -0
  402. package/server/middleware/cachePolicyHelpers.js +1 -0
  403. package/server/middleware/endpointRateLimit.js +181 -0
  404. package/server/middleware/rateLimit.js +70 -0
  405. package/server/middleware/requireAdminAuth.js +48 -0
  406. package/server/middleware/securityHeaders.js +97 -0
  407. package/server/routes/admin/systemAdminRouter.js +64 -0
  408. package/server/routes/email/emailAutomationRouter.js +46 -0
  409. package/server/routes/health/healthRouter.js +41 -0
  410. package/server/routes/indexRouter.js +234 -0
  411. package/server/routes/metrics/metricsRouter.js +58 -0
  412. package/server/routes/static/staticPageRouter.js +134 -0
  413. package/server/routes/sticker/catalogHandlers/catalogAdminHttp.js +105 -0
  414. package/server/routes/sticker/catalogHandlers/catalogAuthHttp.js +77 -0
  415. package/server/routes/sticker/catalogHandlers/catalogPublicHttp.js +120 -0
  416. package/server/routes/sticker/catalogHandlers/catalogUploadHttp.js +83 -0
  417. package/server/routes/sticker/catalogRouter.js +77 -0
  418. package/server/routes/sticker/stickerApiRouter.js +84 -0
  419. package/server/routes/sticker/stickerDataRouter.js +145 -0
  420. package/server/routes/sticker/stickerSiteRouter.js +43 -0
  421. package/server/routes/user/userApiPaths.js +66 -0
  422. package/server/routes/user/userRouter.js +65 -0
  423. package/server/utils/safePath.js +26 -0
  424. package/utils/logger/loggerModule.js +35 -0
  425. package/vite.config.mjs +38 -0
@@ -0,0 +1,528 @@
1
+ import React from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import htm from 'htm';
4
+
5
+ const html = htm.bind(React.createElement);
6
+
7
+ const TERMS_CONTENT_HTML = String.raw`
8
+ <section class="terms-card" style="border-bottom: 4px solid hsla(142, 71%, 45%, 0.3)">
9
+ <h1>Termos de Uso</h1>
10
+ <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 OmniZap System.</p>
12
+ <div class="flex flex-wrap gap-3 mt-6">
13
+ <a class="contact-btn wa" href="https://wa.me/559591122954" target="_blank">WhatsApp Oficial</a>
14
+ <a class="contact-btn ig" href="https://www.instagram.com/kaikybrofc/" target="_blank">Instagram</a>
15
+ </div>
16
+ </section>
17
+
18
+ <section class="terms-card">
19
+ <h2>1. Identificação do responsável</h2>
20
+ <ul>
21
+ <li>Responsável/Titular: <strong>Kaiky Brito Ribeiro</strong>.</li>
22
+ <li>Nome empresarial: <strong>59.034.123 KAIKY BRITO RIBEIRO</strong>.</li>
23
+ <li>CNPJ: <strong>59.034.123/0001-96</strong>.</li>
24
+ <li>UF do registro: <strong>RR</strong>.</li>
25
+ <li>Canal de contato principal: <a href="https://wa.me/559591122954" target="_blank" class="accent">https://wa.me/559591122954</a>.</li>
26
+ </ul>
27
+ </section>
28
+
29
+ <section class="terms-card">
30
+ <h2>2. Aceitação, vigência e capacidade civil</h2>
31
+ <ul>
32
+ <li>O uso da plataforma caracteriza aceite eletrônico, livre e informado destes Termos.</li>
33
+ <li>O usuário declara possuir capacidade civil para contratar ou, quando aplicável, estar assistido/representado por responsável legal.</li>
34
+ <li>Se o usuário atuar em nome de pessoa jurídica, declara possuir poderes para vincular a organização a este instrumento.</li>
35
+ <li>Estes Termos permanecem vigentes enquanto houver uso da plataforma ou obrigações legais/contratuais pendentes.</li>
36
+ </ul>
37
+ </section>
38
+
39
+ <section class="terms-card">
40
+ <h2>3. Definições contratuais</h2>
41
+ <ul>
42
+ <li><strong>Plataforma:</strong> ambiente digital OmniZap System (site, API, integrações e painel).</li>
43
+ <li><strong>Serviço oficial:</strong> operação hospedada e controlada pelos canais oficiais do OmniZap System (incluindo domínio omnizap.shop e endpoints oficiais).</li>
44
+ <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
+ <li><strong>Usuário:</strong> pessoa natural ou jurídica que acessa ou utiliza a plataforma.</li>
46
+ <li><strong>Conta:</strong> credencial de acesso vinculada a usuário, e-mail e/ou identificadores técnicos.</li>
47
+ <li><strong>Dados pessoais:</strong> informações relacionadas a pessoa natural identificada ou identificável, nos termos da LGPD.</li>
48
+ <li><strong>Operador:</strong> terceiro que trata dados em nome do controlador, conforme art. 5º, VII, da LGPD.</li>
49
+ </ul>
50
+ </section>
51
+
52
+ <section class="terms-card">
53
+ <h2>4. Objeto e escopo de uso</h2>
54
+ <ul>
55
+ <li>Estes Termos se aplicam ao uso do serviço oficial do OmniZap System (site, API, painel administrativo e módulos de automação operados pelos canais oficiais).</li>
56
+ <li>Forks, redistribuições e instâncias auto-hospedadas por terceiros não se vinculam automaticamente a estes Termos.</li>
57
+ <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
+ <li>A plataforma possui finalidade técnica e educacional, sem prejuízo de usos operacionais legítimos pelo usuário.</li>
59
+ <li>O usuário é integralmente responsável pela regularidade jurídica do uso que fizer do sistema em seu contexto de negócio.</li>
60
+ </ul>
61
+ </section>
62
+
63
+ <section class="terms-card">
64
+ <h2>5. Cadastro, autenticação e segurança da conta</h2>
65
+ <ul>
66
+ <li>O usuário deve fornecer dados verdadeiros, atualizados e completos para cadastro e manutenção da conta.</li>
67
+ <li>Credenciais, tokens e sessões são pessoais e intransferíveis, cabendo ao usuário o dever de guarda e sigilo.</li>
68
+ <li>O responsável pela conta responde pelas ações realizadas com suas credenciais, ressalvadas hipóteses de falha de segurança comprovadamente atribuível à plataforma ou fraude sem culpa do usuário.</li>
69
+ <li>Podem ser aplicadas medidas adicionais de verificação de identidade em hipóteses de risco, fraude, abuso ou exigência legal.</li>
70
+ </ul>
71
+ <h3>5.1 Redefinição de senha e controles antiabuso</h3>
72
+ <ul>
73
+ <li>Fluxos de recuperação de acesso podem exigir e-mail válido, token temporário, expiração automática e uso único do link.</li>
74
+ <li>Podem ser aplicados limite de tentativas, janela mínima entre solicitações e bloqueio temporário por comportamento suspeito.</li>
75
+ <li>Eventos críticos de segurança podem ser registrados para trilha de auditoria e prevenção de incidentes.</li>
76
+ </ul>
77
+ </section>
78
+
79
+ <section class="terms-card">
80
+ <h2>6. Uso permitido e condutas proibidas</h2>
81
+ <ul>
82
+ <li>É permitido utilizar a plataforma para automação e integração, desde que observadas a legislação aplicável e as políticas de terceiros integrados.</li>
83
+ <li>É vedado o uso para spam, fraude, phishing, engenharia social, assédio, malware, invasão de sistemas ou qualquer prática ilícita.</li>
84
+ <li>É vedado burlar controles técnicos, limitações comerciais, políticas de uso ou termos de plataformas terceiras (incluindo provedores de mensageria) no contexto do serviço oficial, por mascaramento indevido de origem ou automações não autorizadas.</li>
85
+ <li>Esta vedação não restringe, por si só, os direitos de uso, estudo, modificação e redistribuição do código-fonte licenciado sob MIT fora da operação oficial, desde que observadas a legislação aplicável e as licenças de terceiros.</li>
86
+ <li>É vedada a coleta, o tratamento ou o compartilhamento de dados de terceiros sem base legal adequada.</li>
87
+ <li>É vedado o uso para monitoramento clandestino de comunicações sem ciência dos envolvidos ou sem base legal aplicável.</li>
88
+ <li>É vedado testar vulnerabilidades, realizar varreduras agressivas ou provocar degradação de serviço sem autorização formal prévia.</li>
89
+ <li>O usuário responderá civil, administrativa e criminalmente por conteúdo e operações executadas por sua conta.</li>
90
+ </ul>
91
+ </section>
92
+
93
+ <section class="terms-card">
94
+ <h2>7. Tratamento de dados e fundamentos jurídicos</h2>
95
+ <p>O tratamento de dados pessoais poderá ocorrer, conforme o caso concreto, com fundamento nas bases legais do art. 7º da LGPD, incluindo:</p>
96
+ <ul>
97
+ <li>execução de contrato e de procedimentos preliminares relacionados à contratação;</li>
98
+ <li>cumprimento de obrigação legal ou regulatória;</li>
99
+ <li>exercício regular de direitos em processo judicial, administrativo ou arbitral;</li>
100
+ <li>legítimo interesse do controlador, observados direitos e liberdades fundamentais do titular;</li>
101
+ <li>consentimento, quando exigido pela legislação aplicável.</li>
102
+ </ul>
103
+ </section>
104
+
105
+ <section class="terms-card">
106
+ <h2 id="politica-de-privacidade">8. Política de Privacidade (resumo contratual)</h2>
107
+ <p>Esta cláusula é complementar. A versão principal e separada está em <a href="/politica-de-privacidade/" class="accent">/politica-de-privacidade/</a>.</p>
108
+ <ul>
109
+ <li><strong>Finalidade:</strong> dados são tratados para operação da plataforma, autenticação, segurança, suporte e evolução técnica do serviço.</li>
110
+ <li><strong>Necessidade:</strong> coleta limitada ao mínimo necessário para execução das funcionalidades contratadas/ativadas.</li>
111
+ <li><strong>Transparência:</strong> este documento descreve categorias de dados, finalidades e hipóteses de compartilhamento.</li>
112
+ <li><strong>Qualidade dos dados:</strong> o titular poderá solicitar correções de dados incompletos, inexatos ou desatualizados.</li>
113
+ <li><strong>Segurança:</strong> são adotadas medidas técnicas e administrativas razoáveis para redução de risco de acesso indevido ou vazamento.</li>
114
+ <li><strong>Governança:</strong> são observados controles de minimização, retenção por prazo, controle de acesso por perfil e registro de acesso a conteúdo sensível, quando tecnicamente aplicável.</li>
115
+ <li><strong>Não comercialização:</strong> dados pessoais não são comercializados como produto.</li>
116
+ </ul>
117
+ <h3>8.1 Coleta integral de mensagens (quando habilitada)</h3>
118
+ <p>Para execução de funcionalidades de automação, suporte técnico, auditoria, segurança e prevenção de abuso, a plataforma poderá coletar e tratar mensagens de forma integral no contexto conectado pelo usuário.</p>
119
+ <ul>
120
+ <li>Podem ser tratados conteúdo textual, áudios, imagens, vídeos, documentos, links e metadados técnicos relacionados às mensagens.</li>
121
+ <li>Em ambientes de grupo/comunidade, o usuário que adiciona e opera o bot declara ser responsável por informar participantes e garantir base legal adequada para o tratamento.</li>
122
+ <li>Quando exigido pela legislação aplicável, o usuário deverá obter consentimento válido ou adotar outra hipótese legal legítima antes da coleta.</li>
123
+ <li>Dados podem ser usados para evidências de segurança, mitigação de fraude, investigação de abuso e exercício regular de direitos.</li>
124
+ </ul>
125
+ <h3>8.2 Compromisso de sigilo e confidencialidade</h3>
126
+ <ul>
127
+ <li>O OmniZap System compromete-se a observar o sigilo e a confidencialidade das informações tratadas, nos limites legais e técnicos aplicáveis.</li>
128
+ <li>O acesso interno ao conteúdo é restrito por necessidade operacional (need-to-know), com controles de acesso e trilha de auditoria.</li>
129
+ <li>Operadores e fornecedores contratados para apoiar o serviço devem observar obrigações contratuais de confidencialidade e proteção de dados.</li>
130
+ <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>
131
+ </ul>
132
+ <h3>8.3 Dever de sigilo profissional e penalidade contratual</h3>
133
+ <ul>
134
+ <li>O usuário, seus prepostos, colaboradores e terceiros por ele autorizados assumem dever de sigilo profissional sobre dados, mensagens, credenciais e informações confidenciais acessadas por meio da plataforma.</li>
135
+ <li>É vedada a divulgação, cópia, compartilhamento, comercialização, publicação ou uso para finalidade diversa daquela legitimamente autorizada.</li>
136
+ <li>A violação comprovada do dever de sigilo, por ação ou omissão, poderá sujeitar o infrator ao pagamento de multa contratual de <strong>até R$ 10.000,00 (dez mil reais) por incidente comprovado</strong>, graduada por gravidade, extensão do dano e cooperação na mitigação, sem prejuízo de perdas e danos e medidas legais cabíveis.</li>
137
+ <li>Em relações de consumo, a aplicação de multa e indenização observará proporcionalidade, boa-fé objetiva, normas de ordem pública e direitos inderrogáveis do consumidor.</li>
138
+ </ul>
139
+ </section>
140
+
141
+ <section class="terms-card">
142
+ <h2>9. Direitos do titular (LGPD)</h2>
143
+ <p>Nos termos do art. 18 da Lei nº 13.709/2018 (LGPD), o titular poderá requerer, quando cabível:</p>
144
+ <ul>
145
+ <li>confirmação da existência de tratamento e acesso aos dados;</li>
146
+ <li>correção de dados incompletos, inexatos ou desatualizados;</li>
147
+ <li>anonimização, bloqueio ou eliminação de dados desnecessários, excessivos ou tratados em desconformidade;</li>
148
+ <li>portabilidade, eliminação de dados tratados com consentimento e informação sobre compartilhamentos;</li>
149
+ <li>revogação do consentimento e oposição ao tratamento, observados os limites legais;</li>
150
+ <li>peticionar perante a ANPD e demais autoridades competentes, nos termos da lei.</li>
151
+ </ul>
152
+ <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
+ <p>Para exercício de direitos e demandas de privacidade:</p>
154
+ <div class="flex flex-wrap gap-3 mt-4">
155
+ <a class="contact-btn wa" href="https://wa.me/559591122954?text=Ol%C3%A1%2C%20gostaria%20de%20exercer%20meus%20direitos%20de%20titular%20de%20dados%20(LGPD)." target="_blank">Solicitar via WhatsApp</a>
156
+ <a class="contact-btn ig" href="https://www.instagram.com/kaikybrofc/" target="_blank">Contato no Instagram</a>
157
+ </div>
158
+ </section>
159
+
160
+ <section class="terms-card">
161
+ <h2>10. Compartilhamento, operadores e transferência internacional</h2>
162
+ <ul>
163
+ <li>Poderá haver compartilhamento com operadores e fornecedores de infraestrutura, monitoramento, autenticação, comunicação e suporte.</li>
164
+ <li>Compartilhamentos com terceiros ocorrerão no limite necessário para execução das finalidades legítimas da plataforma.</li>
165
+ <li>Operadores que tratem conteúdo de mensagens deverão observar dever de confidencialidade, segurança da informação e uso restrito à finalidade contratada.</li>
166
+ <li>Dados poderão ser fornecidos a autoridades públicas mediante obrigação legal, ordem judicial ou requisição válida.</li>
167
+ <li>Em transferências internacionais, serão adotados mecanismos compatíveis com a LGPD e regulamentação da ANPD, incluindo cláusulas contratuais e medidas técnicas de segurança.</li>
168
+ <li>O inventário público de suboperadores em <a href="/suboperadores/" class="accent">/suboperadores/</a> descreve categorias, escopo de dados, região de processamento e status de atualização.</li>
169
+ </ul>
170
+ </section>
171
+
172
+ <section class="terms-card">
173
+ <h2>11. Retenção, registros e evidências digitais</h2>
174
+ <ul>
175
+ <li>Dados e logs podem ser armazenados pelo período necessário para cumprimento de finalidades contratuais, segurança e obrigações legais.</li>
176
+ <li>Quando tecnicamente viável, registros de acesso a mensagens poderão conter identificador do agente, data/hora, tipo de operação e justificativa operacional.</li>
177
+ <li>Quando aplicável ao modelo operacional da plataforma, registros de acesso a aplicações poderão ser mantidos nos termos do Marco Civil da Internet.</li>
178
+ <li>Backups e registros de auditoria podem subsistir por prazo adicional para continuidade, recuperação e integridade probatória.</li>
179
+ <li>Após o término da finalidade, os dados poderão ser eliminados, bloqueados ou anonimizados, ressalvadas hipóteses legais de retenção.</li>
180
+ </ul>
181
+ </section>
182
+
183
+ <section class="terms-card">
184
+ <h2>12. Segurança da informação e resposta a incidentes</h2>
185
+ <ul>
186
+ <li>São adotadas práticas de hardening, controle de acesso, limitação de taxa, segregação de ambientes e monitoramento de eventos críticos.</li>
187
+ <li>São adotadas salvaguardas de criptografia em trânsito e, quando aplicável ao cenário técnico, em repouso para dados e backups sensíveis.</li>
188
+ <li>Nenhum ambiente computacional é integralmente imune a falhas; por isso, não há garantia de invulnerabilidade absoluta.</li>
189
+ <li>Na hipótese de incidente relevante envolvendo dados pessoais, serão adotadas as medidas técnicas, administrativas e legais cabíveis.</li>
190
+ <li>O plano formal de resposta a incidentes poderá incluir comitê de crise, análise de impacto, preservação de evidências e gatilho para comunicação à ANPD e aos titulares, quando exigido pela legislação aplicável.</li>
191
+ <li>Quando exigido em lei, serão realizadas comunicações às autoridades competentes e aos titulares afetados.</li>
192
+ </ul>
193
+ </section>
194
+
195
+ <section class="terms-card">
196
+ <h2>13. Propriedade intelectual e conteúdo de terceiros</h2>
197
+ <ul>
198
+ <li>O usuário declara possuir direitos, licenças e autorizações necessárias sobre os conteúdos submetidos à plataforma.</li>
199
+ <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 OmniZap System 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
+ <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
+ </ul>
203
+ </section>
204
+
205
+ <section class="terms-card">
206
+ <h2>14. API, disponibilidade e alterações técnicas</h2>
207
+ <ul>
208
+ <li>A API e demais recursos podem sofrer evolução, descontinuidade, limitação de uso, versionamento e janelas de manutenção.</li>
209
+ <li>Não se garante disponibilidade contínua, latência mínima, compatibilidade irrestrita com terceiros ou ausência completa de falhas.</li>
210
+ <li>Integrações com serviços de terceiros dependem de condições externas e podem ser alteradas sem controle direto da plataforma.</li>
211
+ </ul>
212
+ </section>
213
+
214
+ <section class="terms-card">
215
+ <h2>15. Suspensão, bloqueio cautelar e encerramento</h2>
216
+ <ul>
217
+ <li>Poderá ocorrer suspensão ou bloqueio cautelar em caso de indício de abuso, fraude, violação de segurança, risco regulatório ou ordem de autoridade competente.</li>
218
+ <li>O acesso poderá ser encerrado em caso de descumprimento contratual, uso ilícito, inobservância de políticas técnicas ou determinação legal.</li>
219
+ <li>O usuário poderá encerrar o uso a qualquer momento, observadas obrigações pendentes e retenções legalmente obrigatórias.</li>
220
+ </ul>
221
+ </section>
222
+
223
+ <section class="terms-card">
224
+ <h2>16. Responsabilidade do usuário e indenização regressiva</h2>
225
+ <ul>
226
+ <li>O usuário compromete-se a indenizar regressivamente o OmniZap System por danos, custos e despesas decorrentes de uso ilícito ou violação destes Termos.</li>
227
+ <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
+ <li>Esta cláusula não afasta direitos inderrogáveis previstos em lei.</li>
229
+ </ul>
230
+ </section>
231
+
232
+ <section class="terms-card">
233
+ <h2>17. Limitação de responsabilidade</h2>
234
+ <p>Na extensão máxima permitida pela legislação aplicável, o OmniZap System 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
+ <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
+ </section>
237
+
238
+ <section class="terms-card">
239
+ <h2>18. Comunicações, notificações e validade eletrônica</h2>
240
+ <ul>
241
+ <li>Comunicações operacionais e de segurança podem ser realizadas por e-mail, painéis internos, avisos no site e canais oficiais de atendimento.</li>
242
+ <li>O usuário reconhece validade jurídica de registros eletrônicos, logs, comprovantes de envio e trilhas de auditoria como meios de prova.</li>
243
+ <li>Notificações devem conter identificação mínima do solicitante e descrição objetiva da demanda para tratamento adequado.</li>
244
+ </ul>
245
+ </section>
246
+
247
+ <section class="terms-card">
248
+ <h2>19. Alterações destes Termos</h2>
249
+ <p>Estes Termos poderão ser atualizados para refletir mudanças legais, regulatórias, jurisprudenciais, técnicas ou operacionais. Em alterações materiais, será publicado aviso com antecedência razoável e registro de versão/data nesta página. A continuidade de uso após vigência da nova versão caracteriza novo aceite, sem prejuízo dos direitos legais do usuário.</p>
250
+ </section>
251
+
252
+ <section class="terms-card">
253
+ <h2>20. Contato e foro</h2>
254
+ <p>Para questões contratuais, privacidade e proteção de dados, utilize os canais oficiais abaixo.</p>
255
+ <div class="flex flex-wrap gap-3 mt-4">
256
+ <a class="contact-btn wa" href="https://wa.me/559591122954" target="_blank">WhatsApp oficial</a>
257
+ <a class="contact-btn ig" href="https://www.instagram.com/kaikybrofc/" target="_blank">Instagram oficial</a>
258
+ </div>
259
+ <ul class="mt-6">
260
+ <li>WhatsApp oficial: <strong>+55 95 9112-2954</strong>.</li>
261
+ <li>Link direto: <a href="https://wa.me/559591122954" target="_blank" class="accent">https://wa.me/559591122954</a>.</li>
262
+ <li>Instagram oficial: <a href="https://www.instagram.com/kaikybrofc/" target="_blank" class="accent">https://www.instagram.com/kaikybrofc/</a>.</li>
263
+ <li>Contato complementar para notificações formais: privacidade@omnizap.shop.</li>
264
+ <li>Encarregado (LGPD art. 41): Kaiky Brito Ribeiro, contato pelo canal oficial de privacidade.</li>
265
+ <li>Para relações empresariais (B2B), fica eleito o foro da Comarca de Boa Vista/RR, ressalvadas hipóteses legais de competência absoluta. Em relações de consumo, prevalece o foro do domicílio do consumidor quando a legislação assim determinar.</li>
266
+ </ul>
267
+ </section>
268
+
269
+ <section class="terms-card">
270
+ <h2>21. Referências legais oficiais (Brasil)</h2>
271
+ <ul>
272
+ <li>Constituição Federal de 1988 (direitos e garantias fundamentais): <a href="https://www.planalto.gov.br/ccivil_03/constituicao/constituicao.htm" target="_blank" class="accent">Planalto</a>.</li>
273
+ <li>Lei nº 13.709/2018 (Lei Geral de Proteção de Dados Pessoais - LGPD): <a href="https://www.planalto.gov.br/ccivil_03/_ato2015-2018/2018/lei/l13709.htm" target="_blank" class="accent">Planalto</a>.</li>
274
+ <li>Lei nº 12.965/2014 (Marco Civil da Internet): <a href="https://www.planalto.gov.br/ccivil_03/_ato2011-2014/2014/lei/l12965.htm" target="_blank" class="accent">Planalto</a>.</li>
275
+ <li>Decreto nº 8.771/2016 (regulamenta o Marco Civil da Internet): <a href="https://www.planalto.gov.br/ccivil_03/_ato2015-2018/2016/decreto/d8771.htm" target="_blank" class="accent">Planalto</a>.</li>
276
+ <li>Lei nº 8.078/1990 (Código de Defesa do Consumidor): <a href="https://www.planalto.gov.br/ccivil_03/leis/l8078compilado.htm" target="_blank" class="accent">Planalto</a>.</li>
277
+ <li>Lei nº 10.406/2002 (Código Civil): <a href="https://www.planalto.gov.br/ccivil_03/leis/2002/l10406compilada.htm" target="_blank" class="accent">Planalto</a>.</li>
278
+ <li>Lei nº 9.610/1998 (Direitos Autorais): <a href="https://www.planalto.gov.br/ccivil_03/leis/l9610.htm" target="_blank" class="accent">Planalto</a>.</li>
279
+ <li>Lei nº 9.609/1998 (Lei de Software): <a href="https://www.planalto.gov.br/ccivil_03/leis/l9609.htm" target="_blank" class="accent">Planalto</a>.</li>
280
+ <li>ANPD - direitos do titular e canais institucionais: <a href="https://www.gov.br/anpd/pt-br" target="_blank" class="accent">gov.br/anpd</a>.</li>
281
+ <li>ANPD - comunicação de incidente de segurança (CIS): <a href="https://www.gov.br/anpd/pt-br/canais_atendimento/agente-de-tratamento/comunicado-de-incidente-de-seguranca-cis" target="_blank" class="accent">gov.br/anpd/cis</a>.</li>
282
+ <li>Resolução CD/ANPD nº 15/2024 (comunicação de incidente): <a href="https://dspace.mj.gov.br/handle/1/12879" target="_blank" class="accent">dspace.mj.gov.br/handle/1/12879</a>.</li>
283
+ <li>Resolução CD/ANPD nº 18/2024 (encarregado): <a href="https://dspace.mj.gov.br/handle/1/13151" target="_blank" class="accent">dspace.mj.gov.br/handle/1/13151</a>.</li>
284
+ <li>Resolução CD/ANPD nº 19/2024 (transferência internacional): <a href="https://dspace.mj.gov.br/handle/1/13458" target="_blank" class="accent">dspace.mj.gov.br/handle/1/13458</a>.</li>
285
+ <li>Resolução CD/ANPD nº 32/2026 (adequação da União Europeia): <a href="https://www.gov.br/anpd/pt-br/acesso-a-informacao/institucional/atos-normativos/regulamentacoes_anpd" target="_blank" class="accent">gov.br/anpd/regulamentacoes_anpd</a>.</li>
286
+ <li>WhatsApp Business Terms: <a href="https://www.whatsapp.com/legal/business-terms/" target="_blank" class="accent">whatsapp.com/legal/business-terms</a>.</li>
287
+ <li>WhatsApp Business Messaging Policy: <a href="https://business.whatsapp.com/policy" target="_blank" class="accent">business.whatsapp.com/policy</a>.</li>
288
+ <li>WhatsApp Brand Guidelines: <a href="https://about.meta.com/brand/resources/whatsapp/whatsapp-brand/" target="_blank" class="accent">about.meta.com/brand/resources</a>.</li>
289
+ </ul>
290
+ </section>
291
+
292
+ <section class="terms-card">
293
+ <h2>22. Disposições gerais</h2>
294
+ <ul>
295
+ <li>A eventual tolerância quanto ao descumprimento de obrigação não importará novação, renúncia de direito ou alteração contratual tácita.</li>
296
+ <li>A nulidade ou inexequibilidade de cláusula específica não invalidará as demais disposições, que permanecerão em pleno vigor.</li>
297
+ <li>Este instrumento representa o acordo integral entre as partes sobre seu objeto, prevalecendo sobre entendimentos anteriores conflitantes.</li>
298
+ <li>Os títulos das cláusulas possuem finalidade apenas organizacional e não restringem a interpretação do conteúdo jurídico.</li>
299
+ </ul>
300
+ </section>
301
+
302
+ <section class="terms-card">
303
+ <h2>23. Cláusulas adicionais de proteção jurídica</h2>
304
+ <h3>23.1 Papéis LGPD entre as partes</h3>
305
+ <ul>
306
+ <li>Conforme o fluxo operacional, o OmniZap System poderá atuar como controlador ou operador de dados pessoais, nos termos da LGPD.</li>
307
+ <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
+ </ul>
309
+ <h3>23.2 Declaração de base legal pelo usuário/cliente</h3>
310
+ <ul>
311
+ <li>Ao ativar integrações e automações, o usuário declara possuir base legal válida para tratamento dos dados e mensagens envolvidas.</li>
312
+ <li>A ausência de base legal caracteriza infração contratual grave, sem prejuízo das medidas legais cabíveis.</li>
313
+ </ul>
314
+ <h3>23.3 Transparência com participantes e terceiros</h3>
315
+ <ul>
316
+ <li>O usuário compromete-se a informar participantes dos grupos/comunidades sobre a atuação do bot e sobre o tratamento de mensagens.</li>
317
+ <li>Quando exigido por lei, deverá manter aviso de privacidade acessível e atualizado no contexto de uso.</li>
318
+ </ul>
319
+ <h3>23.4 Cooperação obrigatória em incidentes</h3>
320
+ <ul>
321
+ <li>Na hipótese de incidente de segurança, o usuário deverá cooperar com investigação, contenção e mitigação, fornecendo informações técnicas úteis em prazo razoável.</li>
322
+ <li>A omissão injustificada poderá ensejar suspensão cautelar de acesso.</li>
323
+ </ul>
324
+ <h3>23.5 Retenção e descarte com parâmetros objetivos</h3>
325
+ <ul>
326
+ <li>Mensagens tratadas: retenção conforme finalidade operacional e base legal do tratamento.</li>
327
+ <li>Logs técnicos e trilhas de auditoria: retenção pelo prazo necessário a segurança, prova e cumprimento legal.</li>
328
+ <li>Backups: retenção cíclica por janela técnica definida em política interna de continuidade.</li>
329
+ </ul>
330
+ <h3>23.6 Limite global de responsabilidade financeira</h3>
331
+ <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 OmniZap System, 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
+ </ul>
334
+ <h3>23.7 Cláusula penal calibrada e revisão judicial</h3>
335
+ <ul>
336
+ <li>As multas contratuais previstas neste instrumento possuem natureza não compensatória e não afastam perdas e danos adicionais quando cabíveis.</li>
337
+ <li>Sem prejuízo da exigibilidade, o valor poderá ser revisto judicialmente nas hipóteses legalmente previstas.</li>
338
+ </ul>
339
+ <h3>23.8 Suspensão imediata por risco jurídico ou técnico</h3>
340
+ <ul>
341
+ <li>O OmniZap System 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
+ </ul>
343
+ <h3>23.9 Procedimento de notice-and-takedown</h3>
344
+ <ul>
345
+ <li>Denúncias de conteúdo ilícito, violação autoral, violação de privacidade ou uso indevido poderão resultar em remoção preventiva, bloqueio cautelar e preservação de evidências para apuração.</li>
346
+ <li>Quando houver evidência inicial mínima, a triagem ocorrerá em até 24 (vinte e quatro) horas e a decisão cautelar inicial em até 72 (setenta e duas) horas, ressalvados casos tecnicamente complexos ou de força maior.</li>
347
+ </ul>
348
+ <h3>23.10 Prova eletrônica e integridade de registros</h3>
349
+ <ul>
350
+ <li>Logs, carimbos de data/hora, identificadores técnicos, trilhas de auditoria e registros de API poderão ser utilizados como elementos probatórios em processos judiciais ou administrativos, observada a legislação aplicável.</li>
351
+ </ul>
352
+ <h3>23.11 Ordem de prevalência documental</h3>
353
+ <ul>
354
+ <li>Em caso de conflito interpretativo, prevalecerá a seguinte ordem: (i) instrumento contratual específico assinado entre as partes, (ii) aditivo de proteção de dados (quando houver), (iii) estes Termos de Uso, (iv) política complementar de privacidade e documentos operacionais públicos.</li>
355
+ </ul>
356
+ <h3>23.12 Não renúncia, separabilidade e cessão</h3>
357
+ <ul>
358
+ <li>A não exigência imediata de direito contratual não implicará renúncia.</li>
359
+ <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 OmniZap System, ressalvadas hipóteses legais obrigatórias.</li>
361
+ </ul>
362
+ </section>
363
+
364
+ <section class="terms-card">
365
+ <h2>24. Programa reforçado de conformidade e governança</h2>
366
+ <p>As obrigações desta seção se aplicam à operação do serviço oficial. Operadores de instâncias derivadas/self-host devem implementar governança equivalente sob sua própria responsabilidade jurídica.</p>
367
+ <h3>24.1 Política de conteúdo e categorias reguladas</h3>
368
+ <ul>
369
+ <li>O usuário declara que somente utilizará a plataforma em atividades permitidas por lei e por políticas das plataformas integradas.</li>
370
+ <li>Em verticais reguladas (ex.: saúde, crédito, apostas, criptoativos, educação, publicidade para menores ou outras de risco regulatório), o usuário deverá manter licenças, autorizações e avisos legais exigidos para o país, estado e município de atuação.</li>
371
+ <li>O usuário deve observar classificação etária aplicável, restrições de faixa etária e limitações territoriais/jurisdicionais para oferta de produtos e serviços.</li>
372
+ </ul>
373
+ <h3>24.2 Branding e uso de marcas de terceiros</h3>
374
+ <ul>
375
+ <li>É vedado apresentar o OmniZap System como serviço oficial, parceiro certificado, afiliado ou endossado pela Meta/WhatsApp sem autorização formal e verificável.</li>
376
+ <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
+ <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
+ </ul>
379
+ <h3>24.3 Contratação corporativa, DPA e alocação de risco</h3>
380
+ <ul>
381
+ <li>Para operação corporativa em escala do serviço oficial, o OmniZap System poderá exigir contrato específico com cláusulas de proteção de dados, incluindo DPA (Data Processing Addendum).</li>
382
+ <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
+ <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
+ </ul>
385
+ <h3>24.4 Governança de dados e sigilo de mensagens</h3>
386
+ <ul>
387
+ <li>O tratamento observará princípios de minimização, necessidade, limitação de finalidade e retenção por prazo definido em política interna.</li>
388
+ <li>Serão adotadas medidas de proteção como criptografia em trânsito, controle de acesso por privilégio mínimo, segregação de funções e trilhas de auditoria.</li>
389
+ <li>O acesso a conteúdo integral de mensagens deverá ocorrer com justificativa operacional legítima, registro de evidência e controle de responsabilidade.</li>
390
+ </ul>
391
+ <h3>24.5 Plano formal de incidentes e gatilho ANPD/titulares</h3>
392
+ <ul>
393
+ <li>O OmniZap System manterá plano formal de resposta a incidentes com etapas de detecção, contenção, erradicação, recuperação e lições aprendidas.</li>
394
+ <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
+ <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
+ <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>
397
+ </ul>
398
+ <h3>24.6 Separação patrimonial e seguro de riscos cibernéticos</h3>
399
+ <ul>
400
+ <li>A operação do serviço será estruturada por pessoa jurídica, com segregação patrimonial e contábil em relação à pessoa física dos sócios/administradores, conforme legislação aplicável.</li>
401
+ <li>Poderão ser contratadas coberturas de seguro cibernético e/ou Errors and Omissions (E&O), sem prejuízo das limitações contratuais de responsabilidade.</li>
402
+ </ul>
403
+ <h3>24.7 Canal de notice-and-takedown com SLA</h3>
404
+ <ul>
405
+ <li>Fica instituído canal de notificação para denúncias de conteúdo ilícito, uso irregular, violação de direitos autorais, marca, imagem ou privacidade.</li>
406
+ <li>As notificações deverão conter identificação mínima do notificante, URL/ID do conteúdo, fundamento jurídico e elemento probatório mínimo para triagem.</li>
407
+ <li>A confirmação de recebimento ocorrerá, preferencialmente, em até 24 (vinte e quatro) horas úteis, com medidas cautelares conforme nível de risco.</li>
408
+ </ul>
409
+ <h3>24.8 Comitê mensal de compliance</h3>
410
+ <ul>
411
+ <li>Na operação oficial, será mantido comitê mensal de compliance com representantes de jurídico, produto e segurança da informação, com ata e plano de ação.</li>
412
+ <li>O comitê revisará aderência regulatória, termos de terceiros, incidentes, métricas de segurança, solicitações de takedown e pendências contratuais.</li>
413
+ </ul>
414
+ </section>
415
+
416
+ <section class="terms-card">
417
+ <h2>25. Histórico de alterações</h2>
418
+ <ul>
419
+ <li><strong>07/03/2026:</strong> revisão jurídica complementar com reforço de direitos do titular (incluindo prazo do art. 19), transparência de transferência internacional (Res. 19/2024), encarregado (Res. 18/2024), ajustes de foro para relações de consumo, critérios de proporcionalidade em cláusula penal, detalhamento da comunicação de incidentes (Res. 15/2024) e delimitação expressa entre serviço oficial e instâncias derivadas/self-host do projeto open source.</li>
420
+ <li><strong>06/03/2026:</strong> inclusão de cláusulas sobre autenticação por senha, redefinição por e-mail com controles antiabuso, filosofia open source, comunidade e reforço das diretrizes de segurança de dados.</li>
421
+ <li><strong>05/03/2026:</strong> inclusão de cláusula sobre uso do e-mail de login para envio de informações do projeto, comunicados operacionais e avisos de segurança.</li>
422
+ <li><strong>28/02/2026:</strong> inclusão de contatos explícitos, aviso de projeto não oficial, termos complementares de privacidade, exemplos práticos de uso proibido e linguagem simplificada em seções jurídicas.</li>
423
+ <li><strong>26/02/2026:</strong> publicação da versão inicial dos termos.</li>
424
+ </ul>
425
+ </section>
426
+ `;
427
+
428
+ const TermsReactApp = () => html`
429
+ <div className="min-h-screen flex flex-col">
430
+ <!-- Navbar -->
431
+ <header className="sticky top-0 z-50 border-b border-base-200 bg-base-100/80 backdrop-blur-xl">
432
+ <div className="container mx-auto px-4">
433
+ <div className="flex h-16 items-center justify-between gap-4">
434
+ <div className="flex-1">
435
+ <a href="/" className="flex items-center gap-2.5 hover:opacity-80 transition-opacity">
436
+ <img src="/assets/images/brand-logo-128.webp" className="w-8 h-8 rounded-xl shadow-sm" alt="Logo" />
437
+ <span className="text-base sm:text-lg font-black tracking-tight">OmniZap<span className="text-primary">.</span></span>
438
+ </a>
439
+ </div>
440
+
441
+ <nav className="hidden lg:flex items-center gap-4">
442
+ <a href="/" className="text-sm font-bold opacity-60 hover:opacity-100 transition-opacity">Início</a>
443
+ <a href="/stickers/" className="text-sm font-bold opacity-60 hover:opacity-100 transition-opacity">Marketplace</a>
444
+ <a href="/politica-de-privacidade/" className="text-sm font-bold opacity-60 hover:opacity-100 transition-opacity">Privacidade</a>
445
+ </nav>
446
+
447
+ <div className="flex items-center gap-3">
448
+ <a href="/login/" className="btn btn-primary btn-sm h-9 min-h-0 rounded-xl font-bold px-4"> Entrar </a>
449
+ </div>
450
+ </div>
451
+ </div>
452
+ </header>
453
+
454
+ <main className="terms-container">
455
+ <div dangerouslySetInnerHTML=${{ __html: TERMS_CONTENT_HTML }}></div>
456
+ </main>
457
+
458
+ <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 SYSTEM · TERMS OF SERVICE V2</p>
460
+ </footer>
461
+ </div>
462
+ `;
463
+
464
+ const useHashAnchorSync = () => {
465
+ React.useEffect(() => {
466
+ const scrollToAnchor = () => {
467
+ const rawHash = String(window.location.hash || '')
468
+ .replace(/^#/, '')
469
+ .trim();
470
+ if (!rawHash) return;
471
+ const targetId = decodeURIComponent(rawHash);
472
+ const target = document.getElementById(targetId);
473
+ if (target && typeof target.scrollIntoView === 'function') {
474
+ target.scrollIntoView({ block: 'start' });
475
+ }
476
+ };
477
+
478
+ scrollToAnchor();
479
+ window.addEventListener('hashchange', scrollToAnchor);
480
+ return () => window.removeEventListener('hashchange', scrollToAnchor);
481
+ }, []);
482
+ };
483
+
484
+ const useRevealEffect = () => {
485
+ React.useEffect(() => {
486
+ const observer =
487
+ typeof globalThis.IntersectionObserver === 'function'
488
+ ? new globalThis.IntersectionObserver(
489
+ (entries) => {
490
+ entries.forEach((entry) => {
491
+ if (entry.isIntersecting) {
492
+ entry.target.classList.add('is-visible');
493
+ observer.unobserve(entry.target);
494
+ }
495
+ });
496
+ },
497
+ { threshold: 0.1 },
498
+ )
499
+ : null;
500
+
501
+ document.querySelectorAll('.terms-card').forEach((el, i) => {
502
+ el.setAttribute('data-reveal', 'fade-up');
503
+ el.style.setProperty('--reveal-delay', `${Math.min(i * 60, 400)}ms`);
504
+ if (observer) {
505
+ observer.observe(el);
506
+ } else {
507
+ el.classList.add('is-visible');
508
+ }
509
+ });
510
+
511
+ return () => {
512
+ if (observer) observer.disconnect();
513
+ };
514
+ }, []);
515
+ };
516
+
517
+ const TermsReactAppWithEffects = () => {
518
+ useHashAnchorSync();
519
+ useRevealEffect();
520
+ return html`<${TermsReactApp} />`;
521
+ };
522
+
523
+ const rootElement = document.getElementById('terms-react-root');
524
+
525
+ if (rootElement) {
526
+ const root = createRoot(rootElement);
527
+ root.render(html`<${TermsReactAppWithEffects} />`);
528
+ }