@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: 'userModule',
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 getUserModuleConfig = () => runtime.getModuleConfig();
46
+
47
+ export const resolveUserCommandName = (command) => runtime.resolveCommandName(command);
48
+ export const getUserCommandEntry = (command) => runtime.getCommandEntry(command);
49
+ export const listEnabledUserCommands = () => runtime.listEnabledCommands();
50
+
51
+ export const getUserTextConfig = () => {
52
+ const config = getUserModuleConfig();
53
+ const raw = config?.textos && typeof config.textos === 'object' ? config.textos : {};
54
+ return {
55
+ ...DEFAULT_TEXTS,
56
+ ...raw,
57
+ };
58
+ };
59
+
60
+ export const getUserUsageText = (command, { commandPrefix = '/', header, variant } = {}) => {
61
+ const entry = getUserCommandEntry(command);
62
+ const methods = resolveUsageLines(entry, variant);
63
+ if (!methods.length) return '';
64
+
65
+ const prefixHeader = typeof header === 'string' ? header : getUserTextConfig().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,431 @@
1
+ # WaifuPicsModule 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/waifuPicsModule/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: `waifuPicsModule`
15
+ - source_files:
16
+ - waifuPicsCommand.js
17
+ - total_commands: `3`
18
+ - total_enabled_commands: `3`
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: anime
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
+ ### waifu
74
+
75
+ - id: waifupics.waifu
76
+ - aliases: waifupics, wp
77
+ - enabled: true
78
+ - categoria: anime
79
+ - descricao: Receba uma imagem incrível de anime (SFW)! Escolha uma categoria como 'neko' ou 'waifu'. ✨
80
+ - permissao_necessaria: Livre para todos!
81
+ - version: 1.0.0
82
+ - stability: stable
83
+ - deprecated: nao
84
+ - risk_level: low
85
+ - local_de_uso:
86
+ - Privado
87
+ - Grupos
88
+ - metodos_de_uso:
89
+ - <prefix>waifu <categoria>
90
+ - <prefix>wp neko
91
+ - mensagens_uso (variantes):
92
+ - default:
93
+ - 💡 _Uso:_ <prefix>waifu <categoria>
94
+ Exemplo: <prefix>waifu neko
95
+ - Dica: Use <prefix>waifuajuda para ver todas as categorias! 🎨
96
+ - subcomandos:
97
+ - (nenhum)
98
+ - argumentos:
99
+ - categoria | tipo: string | obrigatorio | validacao: categoria SFW suportada | default: null | posicao: 0
100
+ - pre_condicoes:
101
+ - requer_grupo: nao
102
+ - requer_admin: nao
103
+ - requer_admin_principal: nao
104
+ - requer_google_login: sim
105
+ - requer_nsfw: nao
106
+ - requer_midia: nao
107
+ - requer_mensagem_respondida: nao
108
+ - rate_limit:
109
+ - max: null
110
+ - janela_ms: null
111
+ - escopo: sem_rate_limit_explicito
112
+ - acesso:
113
+ - somente_premium: nao
114
+ - planos_permitidos: comum, premium
115
+ - limite_uso_por_plano:
116
+ - comum: max=10, janela_ms=300000, escopo=usuario
117
+ - premium: max=35, janela_ms=300000, escopo=usuario
118
+ - informacoes_coletadas:
119
+ - ID do chat
120
+ - ID do remetente
121
+ - Comando e categoria escolhida
122
+ - dependencias_externas:
123
+ - Waifu.pics API
124
+ - efeitos_colaterais:
125
+ - consulta API externa
126
+ - envia imagem no chat
127
+ - respostas_padrao:
128
+ - success: Prontinho! Aqui está sua imagem. ✨
129
+ - usage_error: Ops! Parece que você esqueceu a categoria. Use <prefix>waifuajuda para ver as opções disponíveis. 🧐
130
+ - permission_error: Eita! Você não tem permissão para usar este comando. Entre em contato com um administrador. 🔐
131
+ - sucesso: Comando executado com sucesso.
132
+ - erro_uso: Formato de uso inválido. Consulte metodos_de_uso.
133
+ - erro_permissao: Permissão insuficiente para executar este comando.
134
+ - mensagens_sistema:
135
+ - (nao informado)
136
+ - limites_operacionais:
137
+ - (nao informado)
138
+ - opcoes:
139
+ - toggle_on_off_status.type: toggle
140
+ - toggle_on_off_status.allowed_actions: on, off, status
141
+ - toggle_on_off_status.action_argument: acao
142
+ - add_remove_list.type: list_management
143
+ - add_remove_list.allowed_actions: add, remove, list
144
+ - add_remove_list.action_argument: acao
145
+ - approve_reject.type: moderation_decision
146
+ - approve_reject.allowed_actions: approve, reject
147
+ - approve_reject.action_argument: acao
148
+ - approve_reject.requires_targets: true
149
+ - set_status_reset.type: configuration_window
150
+ - set_status_reset.allowed_actions: set, status, reset
151
+ - set_status_reset.action_argument: valor
152
+ - observabilidade:
153
+ - event_name: command.executed
154
+ - analytics_event: whatsapp_command_wp
155
+ - tags_log: whatsapp, command, waifuPicsModule, wp
156
+ - nivel_log: info
157
+ - privacidade:
158
+ - dados_sensiveis:
159
+ - chat_identifier
160
+ - sender_identifier
161
+ - command_content
162
+ - retencao: standard_app_logs
163
+ - base_legal: service_execution_and_legitimate_interest
164
+ - docs:
165
+ - summary: Busca e envia imagens aleatórias de anime (Safe For Work).
166
+ - usage_examples: <prefix>waifu waifu, <prefix>wp neko
167
+ - usage_variants.default: <prefix>waifu <categoria>, <prefix>wp neko
168
+ - behavior:
169
+ - type: argument_driven
170
+ - allowed_actions: (nenhum)
171
+ - limits:
172
+ - usage_description: sem limite especifico
173
+ - rate_limit.max: null
174
+ - rate_limit.janela_ms: null
175
+ - rate_limit.escopo: sem_rate_limit_explicito
176
+ - access.somente_premium: false
177
+ - access.planos_permitidos: comum, premium
178
+ - plan_limits.comum.max: 10
179
+ - plan_limits.comum.janela_ms: 300000
180
+ - plan_limits.comum.escopo: usuario
181
+ - plan_limits.premium.max: 35
182
+ - plan_limits.premium.janela_ms: 300000
183
+ - plan_limits.premium.escopo: usuario
184
+ - discovery:
185
+ - keywords: waifu, waifupics, anime, privado, grupo
186
+ - faq_queries: como usar waifu, o que faz waifu, comando waifu
187
+ - user_phrasings: quero usar waifu, me ajuda com waifu, envia imagem sfw da
188
+ - suggestion_priority: 100
189
+ - handler:
190
+ - file: waifuPicsCommand.js
191
+ - method: handleWaifuPicsCommand
192
+ - command_case: waifu
193
+
194
+ ### waifunsfw
195
+
196
+ - id: waifupics.waifunsfw
197
+ - aliases: waifupicsnsfw, wpnsfw
198
+ - enabled: true
199
+ - categoria: anime
200
+ - descricao: Mande aquela imagem picante (NSFW). Exige que o grupo autorize! 🔞
201
+ - permissao_necessaria: Membros em grupos com NSFW ativado.
202
+ - version: 1.0.0
203
+ - stability: stable
204
+ - deprecated: nao
205
+ - risk_level: low
206
+ - local_de_uso:
207
+ - Privado
208
+ - Grupos
209
+ - metodos_de_uso:
210
+ - <prefix>waifunsfw <categoria>
211
+ - <prefix>wpnsfw waifu
212
+ - mensagens_uso (variantes):
213
+ - default:
214
+ - 🔞 _Uso:_ <prefix>waifunsfw <categoria>
215
+ Exemplo: <prefix>wpnsfw blowjob
216
+ - Atenção: O grupo deve estar com NSFW ligado!
217
+ - subcomandos:
218
+ - (nenhum)
219
+ - argumentos:
220
+ - categoria | tipo: string | obrigatorio | validacao: categoria NSFW suportada | default: null | posicao: 0
221
+ - pre_condicoes:
222
+ - requer_grupo: nao
223
+ - requer_admin: nao
224
+ - requer_admin_principal: nao
225
+ - requer_google_login: sim
226
+ - requer_nsfw: sim
227
+ - requer_midia: nao
228
+ - requer_mensagem_respondida: nao
229
+ - rate_limit:
230
+ - max: null
231
+ - janela_ms: null
232
+ - escopo: sem_rate_limit_explicito
233
+ - acesso:
234
+ - somente_premium: sim
235
+ - planos_permitidos: premium
236
+ - limite_uso_por_plano:
237
+ - comum: max=10, janela_ms=300000, escopo=usuario
238
+ - premium: max=35, janela_ms=300000, escopo=usuario
239
+ - informacoes_coletadas:
240
+ - ID do chat
241
+ - ID do remetente
242
+ - Categoria
243
+ - dependencias_externas:
244
+ - Waifu.pics API
245
+ - configuração de NSFW por grupo
246
+ - efeitos_colaterais:
247
+ - consulta API externa
248
+ - envia imagem NSFW no chat
249
+ - respostas_padrao:
250
+ - success: Prontinho! Aqui está sua imagem. ✨
251
+ - usage_error: Ops! Parece que você esqueceu a categoria. Use <prefix>waifuajuda para ver as opções disponíveis. 🧐
252
+ - permission_error: Eita! Você não tem permissão para usar este comando. Entre em contato com um administrador. 🔐
253
+ - sucesso: Comando executado com sucesso.
254
+ - erro_uso: Formato de uso inválido. Consulte metodos_de_uso.
255
+ - erro_permissao: Permissão insuficiente para executar este comando.
256
+ - mensagens_sistema:
257
+ - (nao informado)
258
+ - limites_operacionais:
259
+ - (nao informado)
260
+ - opcoes:
261
+ - toggle_on_off_status.type: toggle
262
+ - toggle_on_off_status.allowed_actions: on, off, status
263
+ - toggle_on_off_status.action_argument: acao
264
+ - add_remove_list.type: list_management
265
+ - add_remove_list.allowed_actions: add, remove, list
266
+ - add_remove_list.action_argument: acao
267
+ - approve_reject.type: moderation_decision
268
+ - approve_reject.allowed_actions: approve, reject
269
+ - approve_reject.action_argument: acao
270
+ - approve_reject.requires_targets: true
271
+ - set_status_reset.type: configuration_window
272
+ - set_status_reset.allowed_actions: set, status, reset
273
+ - set_status_reset.action_argument: valor
274
+ - observabilidade:
275
+ - event_name: command.executed
276
+ - analytics_event: whatsapp_command_wpnsfw
277
+ - tags_log: whatsapp, command, waifuPicsModule, wpnsfw
278
+ - nivel_log: info
279
+ - privacidade:
280
+ - dados_sensiveis:
281
+ - chat_identifier
282
+ - sender_identifier
283
+ - command_content
284
+ - retencao: standard_app_logs
285
+ - base_legal: service_execution_and_legitimate_interest
286
+ - docs:
287
+ - summary: Envia imagens de anime para maiores (Not Safe For Work) se permitido.
288
+ - usage_examples: <prefix>waifunsfw waifu, <prefix>wpnsfw neko
289
+ - usage_variants.default: <prefix>waifunsfw <categoria>, <prefix>wpnsfw waifu
290
+ - behavior:
291
+ - type: argument_driven
292
+ - allowed_actions: (nenhum)
293
+ - limits:
294
+ - usage_description: depende de configuracao global e do grupo
295
+ - rate_limit.max: null
296
+ - rate_limit.janela_ms: null
297
+ - rate_limit.escopo: sem_rate_limit_explicito
298
+ - access.somente_premium: true
299
+ - access.planos_permitidos: premium
300
+ - plan_limits.comum.max: 10
301
+ - plan_limits.comum.janela_ms: 300000
302
+ - plan_limits.comum.escopo: usuario
303
+ - plan_limits.premium.max: 35
304
+ - plan_limits.premium.janela_ms: 300000
305
+ - plan_limits.premium.escopo: usuario
306
+ - discovery:
307
+ - keywords: waifunsfw, waifupicsnsfw, anime, privado, grupo
308
+ - faq_queries: como usar waifunsfw, o que faz waifunsfw, comando waifunsfw
309
+ - user_phrasings: quero usar waifunsfw, me ajuda com waifunsfw, envia imagem nsfw da
310
+ - suggestion_priority: 100
311
+ - handler:
312
+ - file: waifuPicsCommand.js
313
+ - method: handleWaifuPicsCommand
314
+ - command_case: waifunsfw
315
+
316
+ ### waifuajuda
317
+
318
+ - id: waifupics.waifuajuda
319
+ - aliases: wppicshelp
320
+ - enabled: true
321
+ - categoria: anime
322
+ - descricao: Veja todas as categorias de fotos anime que eu posso te enviar! 📖
323
+ - permissao_necessaria: Livre para todos!
324
+ - version: 1.0.0
325
+ - stability: stable
326
+ - deprecated: nao
327
+ - risk_level: low
328
+ - local_de_uso:
329
+ - Privado
330
+ - Grupos
331
+ - metodos_de_uso:
332
+ - <prefix>waifuajuda
333
+ - mensagens_uso (variantes):
334
+ - default:
335
+ - 📖 _Guia Rápido:_ Digite <prefix>waifuajuda para ver as categorias SFW e NSFW disponíveis.
336
+ - Use <prefix>waifu <categoria> para receber uma imagem!
337
+ - subcomandos:
338
+ - (nenhum)
339
+ - argumentos:
340
+ - (nenhum)
341
+ - pre_condicoes:
342
+ - requer_grupo: nao
343
+ - requer_admin: nao
344
+ - requer_admin_principal: nao
345
+ - requer_google_login: sim
346
+ - requer_nsfw: nao
347
+ - requer_midia: nao
348
+ - requer_mensagem_respondida: nao
349
+ - rate_limit:
350
+ - max: null
351
+ - janela_ms: null
352
+ - escopo: sem_rate_limit_explicito
353
+ - acesso:
354
+ - somente_premium: nao
355
+ - planos_permitidos: comum, premium
356
+ - limite_uso_por_plano:
357
+ - comum: max=10, janela_ms=300000, escopo=usuario
358
+ - premium: max=35, janela_ms=300000, escopo=usuario
359
+ - informacoes_coletadas:
360
+ - ID do chat
361
+ - ID do remetente
362
+ - dependencias_externas:
363
+ - Waifu.pics API
364
+ - efeitos_colaterais:
365
+ - envia mensagem de ajuda
366
+ - respostas_padrao:
367
+ - success: Prontinho! Aqui está sua imagem. ✨
368
+ - usage_error: Ops! Parece que você esqueceu a categoria. Use <prefix>waifuajuda para ver as opções disponíveis. 🧐
369
+ - permission_error: Eita! Você não tem permissão para usar este comando. Entre em contato com um administrador. 🔐
370
+ - sucesso: Comando executado com sucesso.
371
+ - erro_uso: Formato de uso inválido. Consulte metodos_de_uso.
372
+ - erro_permissao: Permissão insuficiente para executar este comando.
373
+ - mensagens_sistema:
374
+ - (nao informado)
375
+ - limites_operacionais:
376
+ - (nao informado)
377
+ - opcoes:
378
+ - toggle_on_off_status.type: toggle
379
+ - toggle_on_off_status.allowed_actions: on, off, status
380
+ - toggle_on_off_status.action_argument: acao
381
+ - add_remove_list.type: list_management
382
+ - add_remove_list.allowed_actions: add, remove, list
383
+ - add_remove_list.action_argument: acao
384
+ - approve_reject.type: moderation_decision
385
+ - approve_reject.allowed_actions: approve, reject
386
+ - approve_reject.action_argument: acao
387
+ - approve_reject.requires_targets: true
388
+ - set_status_reset.type: configuration_window
389
+ - set_status_reset.allowed_actions: set, status, reset
390
+ - set_status_reset.action_argument: valor
391
+ - observabilidade:
392
+ - event_name: command.executed
393
+ - analytics_event: whatsapp_command_wppicshelp
394
+ - tags_log: whatsapp, command, waifuPicsModule, wppicshelp
395
+ - nivel_log: info
396
+ - privacidade:
397
+ - dados_sensiveis:
398
+ - chat_identifier
399
+ - sender_identifier
400
+ - command_content
401
+ - retencao: standard_app_logs
402
+ - base_legal: service_execution_and_legitimate_interest
403
+ - docs:
404
+ - summary: Exibe o menu de ajuda detalhado do módulo Waifu.pics com todas as categorias.
405
+ - usage_examples: <prefix>waifuajuda
406
+ - usage_variants.default: <prefix>waifuajuda
407
+ - behavior:
408
+ - type: simple_action
409
+ - allowed_actions: (nenhum)
410
+ - limits:
411
+ - usage_description: sem limite especifico
412
+ - rate_limit.max: null
413
+ - rate_limit.janela_ms: null
414
+ - rate_limit.escopo: sem_rate_limit_explicito
415
+ - access.somente_premium: false
416
+ - access.planos_permitidos: comum, premium
417
+ - plan_limits.comum.max: 10
418
+ - plan_limits.comum.janela_ms: 300000
419
+ - plan_limits.comum.escopo: usuario
420
+ - plan_limits.premium.max: 35
421
+ - plan_limits.premium.janela_ms: 300000
422
+ - plan_limits.premium.escopo: usuario
423
+ - discovery:
424
+ - keywords: waifuajuda, anime, privado, grupo
425
+ - faq_queries: como usar waifuajuda, o que faz waifuajuda, comando waifuajuda
426
+ - user_phrasings: quero usar waifuajuda, me ajuda com waifuajuda, mostra ajuda e categorias
427
+ - suggestion_priority: 100
428
+ - handler:
429
+ - file: waifuPicsCommand.js
430
+ - method: getWaifuPicsUsageText
431
+ - command_case: waifuajuda