@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,238 @@
1
+ # OmniZap SEO Playbook BR (2026-02-28)
2
+
3
+ Objetivo: posicionar o OmniZap como "bot pronto para WhatsApp" para usuário final, mantendo stickers como feature de aquisição e expansão.
4
+
5
+ ## Status de execução (2026-02-28)
6
+
7
+ - Primeira leva de satélites da fase 1 publicada:
8
+ - `/seo/bot-whatsapp-para-grupo/`
9
+ - `/seo/como-moderar-grupo-whatsapp/`
10
+ - `/seo/como-evitar-spam-no-whatsapp/`
11
+ - `/seo/como-organizar-comunidade-whatsapp/`
12
+ - `/seo/como-automatizar-avisos-no-whatsapp/`
13
+ - `/seo/como-criar-comandos-whatsapp/`
14
+ - `/seo/melhor-bot-whatsapp-para-grupos/`
15
+ - `/seo/bot-whatsapp-sem-programar/`
16
+ - Hub comercial publicado para conversão de comandos:
17
+ - `/comandos/`
18
+ - Template padrão para escala em lote:
19
+ - Gerador: `scripts/generate-seo-satellite-pages.mjs`
20
+ - Configuração principal: `docs/seo/satellite-pages-phase1.json`
21
+ - Guia de uso: `docs/seo/satellite-page-template.md`
22
+
23
+ ## 1) FAQ + JSON-LD prontos
24
+
25
+ Status implementado no projeto:
26
+
27
+ - Home (`/`): FAQ visual + `FAQPage` JSON-LD alinhado ao posicionamento "adicionar e usar".
28
+ - Catálogo (`/stickers/`): `FAQPage` JSON-LD no HTML público.
29
+ - Pack (`/stickers/{packKey}`): `FAQPage` JSON-LD dinâmico no HTML SEO server-side.
30
+ - API Docs (`/api-docs/`): já possui `SoftwareApplication` + `FAQPage`.
31
+
32
+ Checklist técnico para manutenção:
33
+
34
+ - FAQ da página deve corresponder 1:1 ao JSON-LD.
35
+ - Linguagem da FAQ deve seguir a intenção da página (usuário final na home, integração no cluster técnico).
36
+ - Atualizar cache-bust quando houver mudança textual relevante.
37
+ - Validar rich results após alterações de conteúdo.
38
+
39
+ ## 2) Estratégia de páginas satélite para dominar Google
40
+
41
+ Observação: o mapa abaixo orienta expansão. A fase 1 está publicada; os itens restantes permanecem no backlog priorizado.
42
+
43
+ ### Cluster principal (comercial)
44
+
45
+ - `/bot-whatsapp-para-grupo/`
46
+ - `/bot-whatsapp-para-comunidade/`
47
+ - `/bot-whatsapp-para-loja-online/`
48
+ - `/bot-whatsapp-para-grupo-de-estudos/`
49
+ - `/bot-whatsapp-para-equipes-internas/`
50
+
51
+ ### Cluster de dores (intenção alta)
52
+
53
+ - `/como-moderar-grupo-whatsapp/`
54
+ - `/como-evitar-spam-no-whatsapp/`
55
+ - `/como-organizar-comunidade-whatsapp/`
56
+ - `/como-automatizar-avisos-no-whatsapp/`
57
+ - `/como-criar-comandos-whatsapp/`
58
+
59
+ ### Cluster comparativo (captura de decisão)
60
+
61
+ - `/melhor-bot-whatsapp-para-grupos/`
62
+ - `/omnizap-vs-blip/`
63
+ - `/omnizap-vs-zenvia/`
64
+ - `/omnizap-vs-huggy/`
65
+
66
+ ### Cluster de feature (stickers como módulo)
67
+
68
+ - `/stickers-para-bot-whatsapp/`
69
+ - `/como-usar-stickers-no-bot/`
70
+ - `/pack-de-stickers-para-grupos/`
71
+
72
+ ### Regra de interlink obrigatória
73
+
74
+ - Toda página satélite deve linkar para: `/`, `/api-docs/`, `/stickers/`.
75
+ - Toda página de pack deve linkar para: `/api-docs/`, `/`, `/stickers/`.
76
+ - Home deve apontar para satélites comerciais e satélites de dores.
77
+
78
+ ## 3) Mapa de palavras-chave Brasil
79
+
80
+ ### Head terms (alto volume)
81
+
82
+ - bot para WhatsApp
83
+ - chatbot para WhatsApp
84
+ - automação WhatsApp
85
+ - WhatsApp API
86
+ - bot para grupo WhatsApp
87
+
88
+ ### Mid-tail (intenção de solução)
89
+
90
+ - bot para moderar grupo WhatsApp
91
+ - bot para comunidade WhatsApp
92
+ - bot para responder mensagens no WhatsApp
93
+ - bot para avisos automáticos WhatsApp
94
+ - bot de atendimento WhatsApp sem programar
95
+
96
+ ### Long-tail (oportunidade de ranking rápido)
97
+
98
+ - como organizar grupo de WhatsApp automaticamente
99
+ - como evitar spam em grupo de WhatsApp com bot
100
+ - bot pronto para grupo de estudos no WhatsApp
101
+ - bot para loja online no WhatsApp sem configuração
102
+ - como adicionar bot no grupo do WhatsApp
103
+
104
+ ### Keywords de módulo (stickers)
105
+
106
+ - sticker para bot WhatsApp
107
+ - pack de stickers para WhatsApp
108
+ - catálogo de stickers para bot
109
+ - stickers integrados via API
110
+
111
+ ### Mapa por intenção
112
+
113
+ - Descoberta: "como", "o que é", "vale a pena".
114
+ - Consideração: "melhor", "comparativo", "preço", "funciona".
115
+ - Conversão: "adicionar bot", "testar bot", "bot pronto", "sem configuração".
116
+
117
+ ## 4) Estratégia para ranquear antes dos concorrentes
118
+
119
+ ### Fase 1 (dias 0-30) - ganhar velocidade
120
+
121
+ - Publicar 8-12 conteúdos long-tail de dor real (moderar, spam, avisos, comunidade).
122
+ - Criar comparativos orientados a decisão (sem ataque de marca; foco em aderência por cenário).
123
+ - Melhorar CTR com titles orientados a resultado: "em 1 minuto", "sem configuração", "sem programar".
124
+ - Revisar links internos para formar ciclo fechado entre Home -> API -> Stickers -> Packs.
125
+
126
+ ### Fase 2 (dias 31-60) - escalar cobertura
127
+
128
+ - Expandir para satélites por nicho (comunidade, loja, estudo, creators).
129
+ - Criar template de prova social por caso de uso (antes/depois em métricas simples).
130
+ - Atualizar sitemap priorizando satélites novos e hubs de cluster.
131
+
132
+ ### Fase 3 (dias 61-90) - defender posição
133
+
134
+ - Criar FAQ adicional por página (3-5 perguntas de objeção).
135
+ - Otimizar páginas em top 20 para top 10 (title, intro, links internos, schema).
136
+ - Construir backlinks contextuais (comunidades, creators, automação e WhatsApp).
137
+
138
+ ### KPI alvo (90 dias)
139
+
140
+ - +30% impressões orgânicas (GSC) nas queries com "bot", "grupo", "WhatsApp".
141
+ - +20% CTR médio nas páginas comerciais.
142
+ - 20+ keywords long-tail em top 10.
143
+ - 5+ keywords comerciais em top 20.
144
+
145
+ ## 5) Análise de concorrência nacional (snapshot)
146
+
147
+ ### Camada 1: suites enterprise (fortes em marca e CAC)
148
+
149
+ 1. Blip
150
+
151
+ - Sinal: posicionamento forte em WhatsApp + IA + vendas.
152
+ - Evidência pública: discurso de plataforma oficial e escala de mensagens/chatbots.
153
+ - Risco para OmniZap: domínio de termos institucionais/enterprise.
154
+ - Brecha para OmniZap: menor foco em "bot pronto para grupo em 1 minuto".
155
+
156
+ 2. Zenvia
157
+
158
+ - Sinal: narrativa de customer cloud multicanal com WhatsApp no centro.
159
+ - Evidência pública: foco em automação, campanhas, API e atendimento.
160
+ - Risco para OmniZap: forte presença B2B para atendimento e vendas.
161
+ - Brecha para OmniZap: proposta mais orientada a suite do que a operação plug-and-play de comunidade.
162
+
163
+ 3. Huggy
164
+
165
+ - Sinal: oferta de chatbot/atendimento com prova social de mercado.
166
+ - Evidência pública: foco em centralização de canais + automação 24/7.
167
+ - Risco para OmniZap: captura de mid-tail em atendimento WhatsApp.
168
+ - Brecha para OmniZap: menor foco em operação de grupos e moderação.
169
+
170
+ 4. Leadster
171
+
172
+ - Sinal: força em marketing conversacional + WhatsApp.
173
+ - Evidência pública: foco em captação e qualificação de leads.
174
+ - Risco para OmniZap: ocupação de termos como "chatbot para vender".
175
+ - Brecha para OmniZap: menor profundidade em moderação/organização de grupos.
176
+
177
+ ### Camada 2: nicho "bot para grupos" (fragmentado)
178
+
179
+ 1. BotAdmin
180
+
181
+ - Foco: moderação de grupos, comandos e automação.
182
+ - Risco: captura de keywords de intenção alta (grupo/moderação).
183
+
184
+ 2. AutoGrupo
185
+
186
+ - Foco: monetização de grupos pagos.
187
+ - Risco: captura de nicho creator/infoproduto.
188
+
189
+ 3. Sites pequenos de "bot de figurinhas"
190
+
191
+ - Foco: cauda longa transacional de baixo ticket.
192
+ - Risco: volume pulverizado, qualidade média menor e alta capilaridade de indexação.
193
+
194
+ ### Leitura competitiva objetiva
195
+
196
+ - Grandes players defendem termos amplos (chatbot, plataforma, API, atendimento).
197
+ - A oportunidade principal do OmniZap está no desconforto operacional de quem administra grupos.
198
+ - Melhor estratégia: dominar long-tail de dor + CTA de uso imediato + prova de simplicidade.
199
+
200
+ ## 6) Prioridade de execução recomendada
201
+
202
+ 1. Publicar satélites de dor (moderar, spam, avisos, organização).
203
+ 2. Publicar satélites por público (comunidade, loja, estudo, creators).
204
+ 3. Criar 3 comparativos leves (OmniZap vs suites enterprise por cenário de uso).
205
+ 4. Fortalecer links internos e breadcrumbs semânticos.
206
+ 5. Revisar FAQ/JSON-LD a cada 30 dias com base no Search Console.
207
+
208
+ ## 7) Governança de execução
209
+
210
+ - Cadência editorial: semanal (publicação) e quinzenal (otimização).
211
+ - Revisão técnica: validar links, schema, canonical e renderização.
212
+ - Revisão de conteúdo: precisão factual, clareza e aderência à intenção.
213
+ - Critério de atualização: páginas abaixo da mediana de CTR por 28 dias devem entrar em refresh.
214
+
215
+ ## 8) Fontes usadas nesta análise (snapshot 2026-02-28)
216
+
217
+ ### Concorrência e mercado
218
+
219
+ - Blip (site oficial): https://www.blip.ai/
220
+ - Blip (plataforma): https://www.blip.ai/plataforma/
221
+ - Zenvia WhatsApp: https://www.zenvia.com/whatsapp/
222
+ - Zenvia Devs: https://www.zenvia.com/devs/
223
+ - Huggy (site oficial): https://www.huggy.io/
224
+ - Huggy WhatsApp: https://www.huggy.io/whatsapp
225
+ - Leadster: https://leadster.com.br/
226
+ - BotAdmin: https://botadmin.shop/
227
+ - AutoGrupo: https://autogrupo.com.br/
228
+ - DataReportal Brazil 2025: https://datareportal.com/reports/digital-2025-brazil
229
+
230
+ ### Referências de SEO e conteúdo
231
+
232
+ - Google Search Central - SEO Starter Guide: https://developers.google.com/search/docs/fundamentals/seo-starter-guide
233
+ - Google Search Central - Helpful Content: https://developers.google.com/search/docs/fundamentals/creating-helpful-content
234
+ - Google Search Central - Title links: https://developers.google.com/search/docs/appearance/title-link
235
+ - Google Search Central - Snippets: https://developers.google.com/search/docs/appearance/snippet
236
+ - Schema.org FAQPage: https://schema.org/FAQPage
237
+ - Schema.org SoftwareApplication: https://schema.org/SoftwareApplication
238
+ - Rich Results Test: https://search.google.com/test/rich-results
@@ -0,0 +1,116 @@
1
+ # Template padrão para página satélite de SEO
2
+
3
+ Objetivo: publicar páginas satélite com estrutura consistente (SEO on-page, interlink interno e FAQ com JSON-LD) sem retrabalho manual.
4
+
5
+ ## Como gerar páginas
6
+
7
+ 1. Edite o arquivo de configuração:
8
+
9
+ - `docs/seo/satellite-pages-phase1.json`
10
+
11
+ 2. Execute o gerador:
12
+
13
+ ```bash
14
+ node scripts/generate-seo-satellite-pages.mjs --config docs/seo/satellite-pages-phase1.json --out public/pages --route-prefix /seo
15
+ ```
16
+
17
+ Opção via script npm:
18
+
19
+ ```bash
20
+ npm run seo:generate:satellites:phase1
21
+ ```
22
+
23
+ 3. Verifique os arquivos criados em:
24
+
25
+ - `public/pages/seo-<slug>.html`
26
+
27
+ ## Campos do template (por página)
28
+
29
+ - `slug`: identificador sem barras (ex.: `como-evitar-spam-no-whatsapp`; rota final padrão: `/seo/<slug>/`)
30
+ - `title`: título SEO da página
31
+ - `description`: meta description
32
+ - `keywords`: lista de palavras-chave
33
+ - `h1`: título principal da página
34
+ - `intro`: parágrafo de abertura
35
+ - `intent_label`: rótulo visual da intenção da página
36
+ - `sections`: blocos de conteúdo
37
+ - `faq`: perguntas e respostas para a seção visual e JSON-LD
38
+ - `related_links`: links internos para reforçar cluster semântico
39
+
40
+ ## Exemplo mínimo
41
+
42
+ ```json
43
+ {
44
+ "slug": "exemplo-pagina-satelite",
45
+ "title": "Exemplo de página satélite | OmniZap",
46
+ "description": "Descrição curta com foco na intenção de busca.",
47
+ "keywords": ["keyword 1", "keyword 2"],
48
+ "h1": "Título principal orientado a resultado",
49
+ "intro": "Abertura da página com problema + promessa de solução.",
50
+ "intent_label": "Guia prático",
51
+ "sections": [
52
+ {
53
+ "title": "Bloco 1",
54
+ "paragraphs": ["Texto 1", "Texto 2"],
55
+ "bullets": ["Ponto A", "Ponto B"]
56
+ }
57
+ ],
58
+ "faq": [
59
+ {
60
+ "q": "Pergunta frequente?",
61
+ "a": "Resposta curta e objetiva."
62
+ }
63
+ ],
64
+ "related_links": [
65
+ { "href": "/", "label": "OmniZap Home" },
66
+ { "href": "/stickers/", "label": "Catálogo de Stickers" },
67
+ { "href": "/api-docs/", "label": "Área de Desenvolvedor" }
68
+ ]
69
+ }
70
+ ```
71
+
72
+ ## Padrão técnico aplicado automaticamente
73
+
74
+ - Meta tags básicas (`title`, `description`, `canonical`, `robots`)
75
+ - Open Graph + Twitter Card
76
+ - JSON-LD `WebPage`
77
+ - JSON-LD `FAQPage` quando houver FAQ
78
+ - Interlink obrigatório para:
79
+ - `/`
80
+ - `/stickers/`
81
+ - `/comandos/`
82
+ - `/api-docs/`
83
+ - `/login/`
84
+
85
+ ## Padrão editorial recomendado
86
+
87
+ - Priorize clareza e foco em uma intenção por página.
88
+ - Evite duplicação de conteúdo entre satélites do mesmo cluster.
89
+ - Use linguagem direta, com exemplos práticos e orientação acionável.
90
+ - Inclua pelo menos 1 CTA interno para página comercial/hub.
91
+ - Mantenha consistência entre `title`, `h1`, `intro` e FAQ.
92
+
93
+ ## Checklist antes de publicar
94
+
95
+ - Slug sem acentos e sem espaços
96
+ - Title com foco na query principal
97
+ - H1 alinhado ao title
98
+ - FAQ coerente com o texto da página
99
+ - Pelo menos 3 links internos relevantes
100
+ - Ausência de promessas exageradas ou claims sem evidência
101
+
102
+ ## Checklist pós-publicação
103
+
104
+ - Página indexável (`robots` e `canonical` corretos)
105
+ - Linkagem interna funcionando
106
+ - Renderização sem erro de layout em mobile/desktop
107
+ - Validação do JSON-LD em ferramenta de rich results
108
+ - Monitoramento inicial de impressões/CTR no Search Console
109
+
110
+ ## Referências
111
+
112
+ - Google Search Central - SEO Starter Guide: https://developers.google.com/search/docs/fundamentals/seo-starter-guide
113
+ - Google Search Central - Creating helpful, reliable, people-first content: https://developers.google.com/search/docs/fundamentals/creating-helpful-content
114
+ - Google Rich Results Test: https://search.google.com/test/rich-results
115
+ - Schema.org `FAQPage`: https://schema.org/FAQPage
116
+ - Schema.org `WebPage`: https://schema.org/WebPage