@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,68 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+
4
+ import { createModuleCommandConfigRuntime } from '../../services/ai/moduleCommandConfigRuntimeService.js';
5
+
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ const CONFIG_PATH = path.join(__dirname, 'commandConfig.json');
9
+
10
+ const DEFAULT_TEXTS = {
11
+ usage_header: '',
12
+ };
13
+
14
+ const runtime = createModuleCommandConfigRuntime({
15
+ configPath: CONFIG_PATH,
16
+ fallbackConfig: {
17
+ module: 'quoteModule',
18
+ commands: [],
19
+ textos: DEFAULT_TEXTS,
20
+ },
21
+ });
22
+
23
+ const renderUsageMethod = (method, commandPrefix) => String(method || '').replaceAll('<prefix>', String(commandPrefix || '/'));
24
+
25
+ const resolveUsageLines = (entry, variant) => {
26
+ if (!entry || typeof entry !== 'object') return [];
27
+
28
+ const usageMessages = entry?.mensagens_uso && typeof entry.mensagens_uso === 'object' ? entry.mensagens_uso : null;
29
+
30
+ if (usageMessages) {
31
+ const variantKey = typeof variant === 'string' ? variant.trim() : '';
32
+ const picked = (variantKey && usageMessages[variantKey]) || usageMessages.default || null;
33
+ if (Array.isArray(picked)) {
34
+ return picked.filter(Boolean).map((value) => String(value));
35
+ }
36
+ if (typeof picked === 'string' && picked.trim()) {
37
+ return [picked.trim()];
38
+ }
39
+ }
40
+
41
+ const methods = Array.isArray(entry?.metodos_de_uso) ? entry.metodos_de_uso : [];
42
+ return methods.filter(Boolean).map((value) => String(value));
43
+ };
44
+
45
+ export const getQuoteModuleConfig = () => runtime.getModuleConfig();
46
+
47
+ export const resolveQuoteCommandName = (command) => runtime.resolveCommandName(command);
48
+ export const getQuoteCommandEntry = (command) => runtime.getCommandEntry(command);
49
+ export const listEnabledQuoteCommands = () => runtime.listEnabledCommands();
50
+
51
+ export const getQuoteTextConfig = () => {
52
+ const config = getQuoteModuleConfig();
53
+ const raw = config?.textos && typeof config.textos === 'object' ? config.textos : {};
54
+ return {
55
+ ...DEFAULT_TEXTS,
56
+ ...raw,
57
+ };
58
+ };
59
+
60
+ export const getQuoteUsageText = (command, { commandPrefix = '/', header, variant } = {}) => {
61
+ const entry = getQuoteCommandEntry(command);
62
+ const methods = resolveUsageLines(entry, variant);
63
+ if (!methods.length) return '';
64
+
65
+ const prefixHeader = typeof header === 'string' ? header : getQuoteTextConfig().usage_header || DEFAULT_TEXTS.usage_header;
66
+ const lines = methods.map((method) => renderUsageMethod(method, commandPrefix));
67
+ return prefixHeader ? [prefixHeader, ...lines].join('\n') : lines.join('\n');
68
+ };
@@ -0,0 +1,229 @@
1
+ # RpgPokemonModule Agent Guide
2
+
3
+ Este arquivo e destinado a agentes de IA para gerar respostas no contexto dos comandos deste modulo.
4
+
5
+ ## Fonte de Verdade
6
+
7
+ - arquivo_base: `app/modules/rpgPokemonModule/commandConfig.json`
8
+ - schema_version: `2.0.0`
9
+ - module_enabled: `true`
10
+ - generated_at: `2026-03-11T02:35:17.177Z`
11
+
12
+ ## Escopo do Modulo
13
+
14
+ - module: `rpgPokemonModule`
15
+ - source_files:
16
+ - rpgPokemonCommand.js
17
+ - total_commands: `1`
18
+ - total_enabled_commands: `1`
19
+
20
+ ## Defaults Schema v2
21
+
22
+ - inheritance_mode: deep_merge_with_command_overrides
23
+ - compatibility_mode: legacy_and_v2_fields
24
+ - legacy_field_aliases:
25
+ - descricao: description
26
+ - metodos_de_uso: usage
27
+ - permissao_necessaria: permission
28
+ - local_de_uso: contexts
29
+ - informacoes_coletadas: collected_data
30
+ - pre_condicoes: requirements
31
+ - dependencias_externas: dependencies
32
+ - efeitos_colaterais: side_effects
33
+ - observabilidade: observability
34
+ - privacidade: privacy
35
+ - limite_uso_por_plano: plan_limits
36
+ - argumentos: arguments
37
+ - acesso: access
38
+ - defaults.command:
39
+ - enabled: true
40
+ - category: jogos
41
+ - version: 1.0.0
42
+ - stability: stable
43
+ - deprecated: false
44
+ - replaced_by: null
45
+ - risk_level: medium
46
+ - defaults.requirements (legacy view):
47
+ - requer_grupo: nao
48
+ - requer_admin: nao
49
+ - requer_admin_principal: nao
50
+ - requer_google_login: sim
51
+ - requer_nsfw: nao
52
+ - requer_midia: nao
53
+ - requer_mensagem_respondida: nao
54
+
55
+ ## Protocolo de Resposta para IA
56
+
57
+ - Passo 1: identificar comando pelo token apos o prefixo.
58
+ - Passo 2: resolver alias para nome canonico usando campo `aliases`.
59
+ - Passo 3: validar `enabled`, `pre_condicoes`, permissao e local de uso.
60
+ - Passo 4: se houver erro de uso, responder com `mensagens_uso` (quando existir) ou `metodos_de_uso`.
61
+ - Passo 5: seguir `respostas_padrao` como fallback de texto.
62
+ - Passo 6: considerar `informacoes_coletadas`, `privacidade` e `observabilidade` ao elaborar resposta.
63
+
64
+ ## Regras de Seguranca para IA
65
+
66
+ - A IA orienta, mas nao executa acao administrativa automaticamente.
67
+ - Nao inventar comandos, subcomandos ou permissao fora do JSON.
68
+ - Sempre informar onde pode usar (grupo/privado) e quem pode usar.
69
+ - Em duvida de permissao, responder com orientacao conservadora.
70
+
71
+ ## Catalogo de Comandos
72
+
73
+ ### pokemon
74
+
75
+ - id: rpgpokemon.pokemon
76
+ - aliases: rpg
77
+ - enabled: true
78
+ - categoria: jogos
79
+ - descricao: Comando principal do RPG Pokemon (exploracao, batalha, loja e social).
80
+ - permissao_necessaria: usuario comum
81
+ - version: 1.0.0
82
+ - stability: stable
83
+ - deprecated: nao
84
+ - risk_level: low
85
+ - local_de_uso:
86
+ - privado
87
+ - grupo
88
+ - metodos_de_uso:
89
+ - <prefix>pokemon help
90
+ - <prefix>pokemon start
91
+ - <prefix>pokemon explorar
92
+ - <prefix>pokemon atacar 1
93
+ - mensagens_uso (variantes):
94
+ - default:
95
+ - <prefix>pokemon help
96
+ - <prefix>pokemon start
97
+ - <prefix>pokemon explorar
98
+ - <prefix>pokemon atacar 1
99
+ - subcomandos:
100
+ - help
101
+ - ajuda
102
+ - start
103
+ - perfil
104
+ - explorar
105
+ - atacar
106
+ - capturar
107
+ - fugir
108
+ - time
109
+ - escolher
110
+ - loja
111
+ - comprar
112
+ - usar
113
+ - bolsa
114
+ - pokedex
115
+ - evolucao
116
+ - missoes
117
+ - viajar
118
+ - tm
119
+ - berry
120
+ - raid
121
+ - desafiar
122
+ - pvp
123
+ - ginasio
124
+ - trade
125
+ - coop
126
+ - evento
127
+ - social
128
+ - karma
129
+ - engajamento
130
+ - argumentos:
131
+ - acao | tipo: string | obrigatorio | validacao: subcomando permitido do RPG | default: null | posicao: 0
132
+ - parametros | tipo: array | opcional | validacao: dependente da ação | default: null | posicao: 1
133
+ - pre_condicoes:
134
+ - requer_grupo: nao
135
+ - requer_admin: nao
136
+ - requer_admin_principal: nao
137
+ - requer_google_login: sim
138
+ - requer_nsfw: nao
139
+ - requer_midia: nao
140
+ - requer_mensagem_respondida: nao
141
+ - rate_limit:
142
+ - max: null
143
+ - janela_ms: null
144
+ - escopo: sem_rate_limit_explicito
145
+ - acesso:
146
+ - somente_premium: nao
147
+ - planos_permitidos: comum, premium
148
+ - limite_uso_por_plano:
149
+ - comum: max=20, janela_ms=300000, escopo=usuario
150
+ - premium: max=75, janela_ms=300000, escopo=usuario
151
+ - informacoes_coletadas:
152
+ - identificador do chat (remoteJid)
153
+ - identificador do remetente (senderJid)
154
+ - texto do comando e argumentos
155
+ - contexto da mensagem (citacao e mencoes, quando existir)
156
+ - acao/subcomando do RPG e argumentos complementares
157
+ - mencoes usadas em interacoes sociais/PvP
158
+ - estado do jogador e da sessao RPG no backend
159
+ - dependencias_externas:
160
+ - serviços internos de RPG
161
+ - efeitos_colaterais:
162
+ - altera estado de jogo no backend
163
+ - envia retorno de ação
164
+ - respostas_padrao:
165
+ - success: Comando executado com sucesso.
166
+ - usage_error: Formato de uso inválido. Consulte metodos_de_uso.
167
+ - permission_error: Permissão insuficiente para executar este comando.
168
+ - sucesso: Comando executado com sucesso.
169
+ - erro_uso: Formato de uso inválido. Consulte metodos_de_uso.
170
+ - erro_permissao: Permissão insuficiente para executar este comando.
171
+ - mensagens_sistema:
172
+ - (nao informado)
173
+ - limites_operacionais:
174
+ - (nao informado)
175
+ - opcoes:
176
+ - toggle_on_off_status.type: toggle
177
+ - toggle_on_off_status.allowed_actions: on, off, status
178
+ - toggle_on_off_status.action_argument: acao
179
+ - add_remove_list.type: list_management
180
+ - add_remove_list.allowed_actions: add, remove, list
181
+ - add_remove_list.action_argument: acao
182
+ - approve_reject.type: moderation_decision
183
+ - approve_reject.allowed_actions: approve, reject
184
+ - approve_reject.action_argument: acao
185
+ - approve_reject.requires_targets: true
186
+ - set_status_reset.type: configuration_window
187
+ - set_status_reset.allowed_actions: set, status, reset
188
+ - set_status_reset.action_argument: valor
189
+ - observabilidade:
190
+ - event_name: command.executed
191
+ - analytics_event: whatsapp_command_rpg
192
+ - tags_log: whatsapp, command, rpgPokemonModule, rpg
193
+ - nivel_log: info
194
+ - privacidade:
195
+ - dados_sensiveis:
196
+ - chat_identifier
197
+ - sender_identifier
198
+ - command_content
199
+ - retencao: standard_app_logs
200
+ - base_legal: service_execution_and_legitimate_interest
201
+ - docs:
202
+ - summary: Comando principal do RPG Pokemon (exploracao, batalha, loja e social).
203
+ - usage_examples: <prefix>pokemon help, <prefix>pokemon start, <prefix>pokemon explorar, <prefix>pokemon atacar 1
204
+ - usage_variants.default: <prefix>pokemon help, <prefix>pokemon start, <prefix>pokemon explorar, <prefix>pokemon atacar 1
205
+ - behavior:
206
+ - type: subcommand
207
+ - allowed_actions: help, ajuda, start, perfil, explorar, atacar, capturar, fugir, time, escolher, loja, comprar, usar, bolsa, pokedex, evolucao, missoes, viajar, tm, berry, raid, desafiar, pvp, ginasio, trade, coop, evento, social, karma, engajamento
208
+ - limits:
209
+ - usage_description: subcomandos permitidos pelo modulo
210
+ - rate_limit.max: null
211
+ - rate_limit.janela_ms: null
212
+ - rate_limit.escopo: sem_rate_limit_explicito
213
+ - access.somente_premium: false
214
+ - access.planos_permitidos: comum, premium
215
+ - plan_limits.comum.max: 20
216
+ - plan_limits.comum.janela_ms: 300000
217
+ - plan_limits.comum.escopo: usuario
218
+ - plan_limits.premium.max: 75
219
+ - plan_limits.premium.janela_ms: 300000
220
+ - plan_limits.premium.escopo: usuario
221
+ - discovery:
222
+ - keywords: pokemon, jogos, privado, grupo
223
+ - faq_queries: como usar pokemon, o que faz pokemon, comando pokemon
224
+ - user_phrasings: quero usar pokemon, me ajuda com pokemon, comando principal do pokemon
225
+ - suggestion_priority: 100
226
+ - handler:
227
+ - file: rpgPokemonCommand.js
228
+ - method: handleRpgPokemonCommand
229
+ - command_case: pokemon
@@ -0,0 +1,386 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "module": "rpgPokemonModule",
4
+ "enabled": true,
5
+ "source_files": ["rpgPokemonCommand.js"],
6
+ "defaults": {
7
+ "inheritance_mode": "deep_merge_with_command_overrides",
8
+ "compatibility_mode": "legacy_and_v2_fields",
9
+ "legacy_field_aliases": {
10
+ "descricao": "description",
11
+ "metodos_de_uso": "usage",
12
+ "permissao_necessaria": "permission",
13
+ "local_de_uso": "contexts",
14
+ "informacoes_coletadas": "collected_data",
15
+ "pre_condicoes": "requirements",
16
+ "dependencias_externas": "dependencies",
17
+ "efeitos_colaterais": "side_effects",
18
+ "observabilidade": "observability",
19
+ "privacidade": "privacy",
20
+ "limite_uso_por_plano": "plan_limits",
21
+ "argumentos": "arguments",
22
+ "acesso": "access"
23
+ },
24
+ "command": {
25
+ "enabled": true,
26
+ "category": "jogos",
27
+ "version": "1.0.0",
28
+ "stability": "stable",
29
+ "deprecated": false,
30
+ "replaced_by": null,
31
+ "risk_level": "medium"
32
+ },
33
+ "requirements": {
34
+ "require_group": false,
35
+ "require_group_admin": false,
36
+ "require_bot_owner": false,
37
+ "require_google_login": true,
38
+ "require_nsfw_enabled": false,
39
+ "require_media": false,
40
+ "require_reply_message": false,
41
+ "legacy": {
42
+ "requer_grupo": false,
43
+ "requer_admin": false,
44
+ "requer_admin_principal": false,
45
+ "requer_google_login": true,
46
+ "requer_nsfw": false,
47
+ "requer_midia": false,
48
+ "requer_mensagem_respondida": false
49
+ }
50
+ },
51
+ "pre_condicoes": {
52
+ "requer_grupo": false,
53
+ "requer_admin": false,
54
+ "requer_admin_principal": false,
55
+ "requer_google_login": true,
56
+ "requer_nsfw": false,
57
+ "requer_midia": false,
58
+ "requer_mensagem_respondida": false
59
+ },
60
+ "rate_limit": {
61
+ "max": null,
62
+ "janela_ms": null,
63
+ "escopo": "sem_rate_limit_explicito"
64
+ },
65
+ "dependencies": ["serviços internos de RPG"],
66
+ "dependencias_externas": ["serviços internos de RPG"],
67
+ "responses": {
68
+ "success": "Comando executado com sucesso.",
69
+ "usage_error": "Formato de uso inválido. Consulte metodos_de_uso.",
70
+ "permission_error": "Permissão insuficiente para executar este comando."
71
+ },
72
+ "respostas_padrao": {
73
+ "sucesso": "Comando executado com sucesso.",
74
+ "erro_uso": "Formato de uso inválido. Consulte metodos_de_uso.",
75
+ "erro_permissao": "Permissão insuficiente para executar este comando."
76
+ },
77
+ "observability": {
78
+ "event_name": "command.executed",
79
+ "log_level": "info",
80
+ "tags": ["whatsapp", "command", "rpgPokemonModule"]
81
+ },
82
+ "privacy": {
83
+ "data_categories": ["chat_identifier", "sender_identifier", "command_content"],
84
+ "retention_policy": "standard_app_logs",
85
+ "legal_basis": "service_execution_and_legitimate_interest"
86
+ },
87
+ "access": {
88
+ "premium_only": false,
89
+ "allowed_plans": ["comum", "premium"]
90
+ },
91
+ "acesso": {
92
+ "somente_premium": false,
93
+ "planos_permitidos": ["comum", "premium"]
94
+ },
95
+ "plan_limits": {
96
+ "comum": {
97
+ "max": 20,
98
+ "janela_ms": 300000,
99
+ "escopo": "usuario"
100
+ },
101
+ "premium": {
102
+ "max": 75,
103
+ "janela_ms": 300000,
104
+ "escopo": "usuario"
105
+ }
106
+ },
107
+ "limite_uso_por_plano": {
108
+ "comum": {
109
+ "max": 20,
110
+ "janela_ms": 300000,
111
+ "escopo": "usuario"
112
+ },
113
+ "premium": {
114
+ "max": 75,
115
+ "janela_ms": 300000,
116
+ "escopo": "usuario"
117
+ }
118
+ },
119
+ "behavior_templates": {
120
+ "toggle_on_off_status": {
121
+ "type": "toggle",
122
+ "allowed_actions": ["on", "off", "status"],
123
+ "action_argument": "acao"
124
+ },
125
+ "add_remove_list": {
126
+ "type": "list_management",
127
+ "allowed_actions": ["add", "remove", "list"],
128
+ "action_argument": "acao"
129
+ },
130
+ "approve_reject": {
131
+ "type": "moderation_decision",
132
+ "allowed_actions": ["approve", "reject"],
133
+ "action_argument": "acao",
134
+ "requires_targets": true
135
+ },
136
+ "set_status_reset": {
137
+ "type": "configuration_window",
138
+ "allowed_actions": ["set", "status", "reset"],
139
+ "action_argument": "valor"
140
+ }
141
+ }
142
+ },
143
+ "commands": [
144
+ {
145
+ "name": "pokemon",
146
+ "aliases": ["rpg"],
147
+ "descricao": "Comando principal do RPG Pokemon (exploracao, batalha, loja e social).",
148
+ "metodos_de_uso": ["<prefix>pokemon help", "<prefix>pokemon start", "<prefix>pokemon explorar", "<prefix>pokemon atacar 1"],
149
+ "permissao_necessaria": "usuario comum",
150
+ "limite_de_uso": "subcomandos permitidos pelo modulo",
151
+ "local_de_uso": ["privado", "grupo"],
152
+ "informacoes_coletadas": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "acao/subcomando do RPG e argumentos complementares", "mencoes usadas em interacoes sociais/PvP", "estado do jogador e da sessao RPG no backend"],
153
+ "enabled": true,
154
+ "categoria": "jogos",
155
+ "subcomandos": ["help", "ajuda", "start", "perfil", "explorar", "atacar", "capturar", "fugir", "time", "escolher", "loja", "comprar", "usar", "bolsa", "pokedex", "evolucao", "missoes", "viajar", "tm", "berry", "raid", "desafiar", "pvp", "ginasio", "trade", "coop", "evento", "social", "karma", "engajamento"],
156
+ "argumentos": [
157
+ {
158
+ "nome": "acao",
159
+ "tipo": "string",
160
+ "obrigatorio": true,
161
+ "validacao": "subcomando permitido do RPG",
162
+ "default": null
163
+ },
164
+ {
165
+ "nome": "parametros",
166
+ "tipo": "array<string>",
167
+ "obrigatorio": false,
168
+ "validacao": "dependente da ação",
169
+ "default": []
170
+ }
171
+ ],
172
+ "pre_condicoes": {
173
+ "requer_grupo": false,
174
+ "requer_admin": false,
175
+ "requer_admin_principal": false,
176
+ "requer_google_login": true,
177
+ "requer_nsfw": false,
178
+ "requer_midia": false,
179
+ "requer_mensagem_respondida": false
180
+ },
181
+ "rate_limit": {
182
+ "max": null,
183
+ "janela_ms": null,
184
+ "escopo": "sem_rate_limit_explicito"
185
+ },
186
+ "dependencias_externas": ["serviços internos de RPG"],
187
+ "efeitos_colaterais": ["altera estado de jogo no backend", "envia retorno de ação"],
188
+ "respostas_padrao": {
189
+ "sucesso": "Comando executado com sucesso.",
190
+ "erro_uso": "Formato de uso inválido. Consulte metodos_de_uso.",
191
+ "erro_permissao": "Permissão insuficiente para executar este comando."
192
+ },
193
+ "observabilidade": {
194
+ "evento_analytics": "whatsapp_command_rpg",
195
+ "tags_log": ["whatsapp", "command", "rpgPokemonModule", "rpg"],
196
+ "nivel_log": "info"
197
+ },
198
+ "privacidade": {
199
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
200
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
201
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
202
+ },
203
+ "capability_keywords": ["pokemon", "jogos", "privado", "grupo"],
204
+ "faq_patterns": ["como usar pokemon", "o que faz pokemon", "comando pokemon"],
205
+ "user_phrasings": ["quero usar pokemon", "me ajuda com pokemon", "comando principal do pokemon"],
206
+ "suggestion_priority": 100,
207
+ "acesso": {
208
+ "somente_premium": false,
209
+ "planos_permitidos": ["comum", "premium"]
210
+ },
211
+ "limite_uso_por_plano": {
212
+ "comum": {
213
+ "max": 20,
214
+ "janela_ms": 300000,
215
+ "escopo": "usuario"
216
+ },
217
+ "premium": {
218
+ "max": 75,
219
+ "janela_ms": 300000,
220
+ "escopo": "usuario"
221
+ }
222
+ },
223
+ "mensagens_uso": {
224
+ "default": ["<prefix>pokemon help", "<prefix>pokemon start", "<prefix>pokemon explorar", "<prefix>pokemon atacar 1"]
225
+ },
226
+ "id": "rpgpokemon.pokemon",
227
+ "description": "Comando principal do RPG Pokemon (exploracao, batalha, loja e social).",
228
+ "usage": ["<prefix>pokemon help", "<prefix>pokemon start", "<prefix>pokemon explorar", "<prefix>pokemon atacar 1"],
229
+ "docs": {
230
+ "summary": "Comando principal do RPG Pokemon (exploracao, batalha, loja e social).",
231
+ "usage_examples": ["<prefix>pokemon help", "<prefix>pokemon start", "<prefix>pokemon explorar", "<prefix>pokemon atacar 1"],
232
+ "usage_variants": {
233
+ "default": ["<prefix>pokemon help", "<prefix>pokemon start", "<prefix>pokemon explorar", "<prefix>pokemon atacar 1"]
234
+ }
235
+ },
236
+ "permission": "usuario comum",
237
+ "contexts": ["privado", "grupo"],
238
+ "collected_data": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "acao/subcomando do RPG e argumentos complementares", "mencoes usadas em interacoes sociais/PvP", "estado do jogador e da sessao RPG no backend"],
239
+ "requirements": {
240
+ "require_group": false,
241
+ "require_group_admin": false,
242
+ "require_bot_owner": false,
243
+ "require_google_login": true,
244
+ "require_nsfw_enabled": false,
245
+ "require_media": false,
246
+ "require_reply_message": false,
247
+ "legacy": {
248
+ "requer_grupo": false,
249
+ "requer_admin": false,
250
+ "requer_admin_principal": false,
251
+ "requer_google_login": true,
252
+ "requer_nsfw": false,
253
+ "requer_midia": false,
254
+ "requer_mensagem_respondida": false
255
+ }
256
+ },
257
+ "arguments": [
258
+ {
259
+ "name": "acao",
260
+ "type": "string",
261
+ "required": true,
262
+ "default": null,
263
+ "enum": null,
264
+ "description": "subcomando permitido do RPG",
265
+ "position": 0,
266
+ "accepts_mentions": false,
267
+ "accepts_reply_target": false,
268
+ "greedy": false,
269
+ "validation": "subcomando permitido do RPG"
270
+ },
271
+ {
272
+ "name": "parametros",
273
+ "type": "array",
274
+ "required": false,
275
+ "default": [],
276
+ "enum": null,
277
+ "description": "dependente da ação",
278
+ "position": 1,
279
+ "accepts_mentions": false,
280
+ "accepts_reply_target": false,
281
+ "greedy": false,
282
+ "validation": "dependente da ação"
283
+ }
284
+ ],
285
+ "behavior": {
286
+ "type": "subcommand",
287
+ "allowed_actions": ["help", "ajuda", "start", "perfil", "explorar", "atacar", "capturar", "fugir", "time", "escolher", "loja", "comprar", "usar", "bolsa", "pokedex", "evolucao", "missoes", "viajar", "tm", "berry", "raid", "desafiar", "pvp", "ginasio", "trade", "coop", "evento", "social", "karma", "engajamento"]
288
+ },
289
+ "limits": {
290
+ "usage_description": "subcomandos permitidos pelo modulo",
291
+ "rate_limit": {
292
+ "max": null,
293
+ "janela_ms": null,
294
+ "escopo": "sem_rate_limit_explicito"
295
+ },
296
+ "access": {
297
+ "somente_premium": false,
298
+ "planos_permitidos": ["comum", "premium"]
299
+ },
300
+ "plan_limits": {
301
+ "comum": {
302
+ "max": 20,
303
+ "janela_ms": 300000,
304
+ "escopo": "usuario"
305
+ },
306
+ "premium": {
307
+ "max": 75,
308
+ "janela_ms": 300000,
309
+ "escopo": "usuario"
310
+ }
311
+ }
312
+ },
313
+ "dependencies": ["serviços internos de RPG"],
314
+ "side_effects": ["altera estado de jogo no backend", "envia retorno de ação"],
315
+ "observability": {
316
+ "event_name": "command.executed",
317
+ "event_key": "rpgpokemon.pokemon",
318
+ "analytics_event": "whatsapp_command_rpg",
319
+ "log_level": "info",
320
+ "tags": ["whatsapp", "command", "rpgPokemonModule", "rpg"],
321
+ "legacy": {
322
+ "evento_analytics": "whatsapp_command_rpg",
323
+ "tags_log": ["whatsapp", "command", "rpgPokemonModule", "rpg"],
324
+ "nivel_log": "info"
325
+ }
326
+ },
327
+ "privacy": {
328
+ "data_categories": ["chat_identifier", "sender_identifier", "command_content"],
329
+ "sensitive_fields": ["remoteJid", "senderJid", "text", "args"],
330
+ "retention_policy": "standard_app_logs",
331
+ "retention_notes": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
332
+ "legal_basis": "service_execution_and_legitimate_interest",
333
+ "legal_basis_notes": "execução do serviço solicitado e legítimo interesse operacional",
334
+ "legacy": {
335
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
336
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
337
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
338
+ }
339
+ },
340
+ "discovery": {
341
+ "keywords": ["pokemon", "jogos", "privado", "grupo"],
342
+ "faq_queries": ["como usar pokemon", "o que faz pokemon", "comando pokemon"],
343
+ "user_phrasings": ["quero usar pokemon", "me ajuda com pokemon", "comando principal do pokemon"],
344
+ "suggestion_priority": 100
345
+ },
346
+ "access": {
347
+ "premium_only": false,
348
+ "allowed_plans": ["comum", "premium"],
349
+ "legacy": {
350
+ "somente_premium": false,
351
+ "planos_permitidos": ["comum", "premium"]
352
+ }
353
+ },
354
+ "plan_limits": {
355
+ "comum": {
356
+ "max": 20,
357
+ "janela_ms": 300000,
358
+ "escopo": "usuario"
359
+ },
360
+ "premium": {
361
+ "max": 75,
362
+ "janela_ms": 300000,
363
+ "escopo": "usuario"
364
+ }
365
+ },
366
+ "version": "1.0.0",
367
+ "stability": "stable",
368
+ "deprecated": false,
369
+ "replaced_by": null,
370
+ "risk_level": "low",
371
+ "handler": {
372
+ "file": "rpgPokemonCommand.js",
373
+ "method": "handleRpgPokemonCommand",
374
+ "command_case": "pokemon"
375
+ },
376
+ "compatibility": {
377
+ "schema": "legacy_v1_and_v2",
378
+ "legacy_name": "pokemon",
379
+ "legacy_fields_present": ["descricao", "metodos_de_uso", "permissao_necessaria", "local_de_uso", "informacoes_coletadas", "argumentos", "pre_condicoes", "dependencias_externas", "efeitos_colaterais", "observabilidade", "privacidade", "acesso", "limite_uso_por_plano"]
380
+ }
381
+ }
382
+ ],
383
+ "textos": {
384
+ "usage_header": ""
385
+ }
386
+ }