@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,1216 @@
1
+ {
2
+ "schema_version": "2.0.0",
3
+ "module": "stickerModule",
4
+ "enabled": true,
5
+ "source_files": ["stickerCommand.js", "stickerConvertCommand.js", "stickerTextCommand.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": "figurinhas",
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": true,
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": true,
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": true,
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": ["conversão de mídia local", "armazenamento temporário"],
66
+ "dependencias_externas": ["conversão de mídia local", "armazenamento temporário"],
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", "stickerModule"]
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": 12,
98
+ "janela_ms": 300000,
99
+ "escopo": "usuario"
100
+ },
101
+ "premium": {
102
+ "max": 45,
103
+ "janela_ms": 300000,
104
+ "escopo": "usuario"
105
+ }
106
+ },
107
+ "limite_uso_por_plano": {
108
+ "comum": {
109
+ "max": 12,
110
+ "janela_ms": 300000,
111
+ "escopo": "usuario"
112
+ },
113
+ "premium": {
114
+ "max": 45,
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": "figurinha",
146
+ "aliases": ["s", "sticker"],
147
+ "descricao": "Converte imagem/video em figurinha.",
148
+ "metodos_de_uso": ["<prefix>figurinha", "<prefix>s"],
149
+ "mensagens_uso": {
150
+ "default": ["📌 Use: <prefix>figurinha (ou <prefix>s) respondendo a uma imagem, vídeo ou figurinha."]
151
+ },
152
+ "permissao_necessaria": "usuario comum",
153
+ "limite_de_uso": "midia ate 1 MB",
154
+ "local_de_uso": ["privado", "grupo"],
155
+ "informacoes_coletadas": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "metadados de midia (tipo, tamanho e origem da midia)", "arquivo de midia baixado temporariamente para conversao"],
156
+ "enabled": true,
157
+ "categoria": "figurinhas",
158
+ "subcomandos": [],
159
+ "argumentos": [
160
+ {
161
+ "nome": "texto_extra",
162
+ "tipo": "string",
163
+ "obrigatorio": false,
164
+ "validacao": "texto livre opcional",
165
+ "default": null
166
+ }
167
+ ],
168
+ "pre_condicoes": {
169
+ "requer_grupo": false,
170
+ "requer_admin": false,
171
+ "requer_admin_principal": false,
172
+ "requer_google_login": true,
173
+ "requer_nsfw": false,
174
+ "requer_midia": true,
175
+ "requer_mensagem_respondida": false
176
+ },
177
+ "rate_limit": {
178
+ "max": null,
179
+ "janela_ms": null,
180
+ "escopo": "sem_rate_limit_explicito"
181
+ },
182
+ "dependencias_externas": ["conversão de mídia local", "armazenamento temporário"],
183
+ "efeitos_colaterais": ["faz download/conversão temporária de mídia", "envia figurinha"],
184
+ "respostas_padrao": {
185
+ "sucesso": "Comando executado com sucesso.",
186
+ "erro_uso": "Formato de uso inválido. Consulte metodos_de_uso.",
187
+ "erro_permissao": "Permissão insuficiente para executar este comando."
188
+ },
189
+ "observabilidade": {
190
+ "evento_analytics": "whatsapp_command_sticker",
191
+ "tags_log": ["whatsapp", "command", "stickerModule", "sticker"],
192
+ "nivel_log": "info"
193
+ },
194
+ "privacidade": {
195
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
196
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
197
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
198
+ },
199
+ "capability_keywords": ["figurinha", "s", "figurinhas", "privado", "grupo"],
200
+ "faq_patterns": ["como usar figurinha", "o que faz figurinha", "comando figurinha"],
201
+ "user_phrasings": ["quero usar figurinha", "me ajuda com figurinha", "converte imagem/video em figurinha."],
202
+ "suggestion_priority": 100,
203
+ "acesso": {
204
+ "somente_premium": false,
205
+ "planos_permitidos": ["comum", "premium"]
206
+ },
207
+ "limite_uso_por_plano": {
208
+ "comum": {
209
+ "max": 12,
210
+ "janela_ms": 300000,
211
+ "escopo": "usuario"
212
+ },
213
+ "premium": {
214
+ "max": 45,
215
+ "janela_ms": 300000,
216
+ "escopo": "usuario"
217
+ }
218
+ },
219
+ "id": "sticker.figurinha",
220
+ "description": "Converte imagem/video em figurinha.",
221
+ "usage": ["<prefix>figurinha", "<prefix>s"],
222
+ "docs": {
223
+ "summary": "Converte imagem/video em figurinha.",
224
+ "usage_examples": ["<prefix>figurinha", "<prefix>s"],
225
+ "usage_variants": {
226
+ "default": ["📌 Use: <prefix>figurinha (ou <prefix>s) respondendo a uma imagem, vídeo ou figurinha."]
227
+ }
228
+ },
229
+ "permission": "usuario comum",
230
+ "contexts": ["privado", "grupo"],
231
+ "collected_data": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "metadados de midia (tipo, tamanho e origem da midia)", "arquivo de midia baixado temporariamente para conversao"],
232
+ "requirements": {
233
+ "require_group": false,
234
+ "require_group_admin": false,
235
+ "require_bot_owner": false,
236
+ "require_google_login": true,
237
+ "require_nsfw_enabled": false,
238
+ "require_media": true,
239
+ "require_reply_message": false,
240
+ "legacy": {
241
+ "requer_grupo": false,
242
+ "requer_admin": false,
243
+ "requer_admin_principal": false,
244
+ "requer_google_login": true,
245
+ "requer_nsfw": false,
246
+ "requer_midia": true,
247
+ "requer_mensagem_respondida": false
248
+ }
249
+ },
250
+ "arguments": [
251
+ {
252
+ "name": "texto_extra",
253
+ "type": "string",
254
+ "required": false,
255
+ "default": null,
256
+ "enum": null,
257
+ "description": "texto livre opcional",
258
+ "position": 0,
259
+ "accepts_mentions": false,
260
+ "accepts_reply_target": false,
261
+ "greedy": false,
262
+ "validation": "texto livre opcional"
263
+ }
264
+ ],
265
+ "behavior": {
266
+ "type": "argument_driven",
267
+ "allowed_actions": []
268
+ },
269
+ "limits": {
270
+ "usage_description": "midia ate 1 MB",
271
+ "rate_limit": {
272
+ "max": null,
273
+ "janela_ms": null,
274
+ "escopo": "sem_rate_limit_explicito"
275
+ },
276
+ "access": {
277
+ "somente_premium": false,
278
+ "planos_permitidos": ["comum", "premium"]
279
+ },
280
+ "plan_limits": {
281
+ "comum": {
282
+ "max": 12,
283
+ "janela_ms": 300000,
284
+ "escopo": "usuario"
285
+ },
286
+ "premium": {
287
+ "max": 45,
288
+ "janela_ms": 300000,
289
+ "escopo": "usuario"
290
+ }
291
+ }
292
+ },
293
+ "dependencies": ["conversão de mídia local", "armazenamento temporário"],
294
+ "side_effects": ["faz download/conversão temporária de mídia", "envia figurinha"],
295
+ "observability": {
296
+ "event_name": "command.executed",
297
+ "event_key": "sticker.figurinha",
298
+ "analytics_event": "whatsapp_command_sticker",
299
+ "log_level": "info",
300
+ "tags": ["whatsapp", "command", "stickerModule", "sticker"],
301
+ "legacy": {
302
+ "evento_analytics": "whatsapp_command_sticker",
303
+ "tags_log": ["whatsapp", "command", "stickerModule", "sticker"],
304
+ "nivel_log": "info"
305
+ }
306
+ },
307
+ "privacy": {
308
+ "data_categories": ["chat_identifier", "sender_identifier", "command_content"],
309
+ "sensitive_fields": ["remoteJid", "senderJid", "text", "args"],
310
+ "retention_policy": "standard_app_logs",
311
+ "retention_notes": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
312
+ "legal_basis": "service_execution_and_legitimate_interest",
313
+ "legal_basis_notes": "execução do serviço solicitado e legítimo interesse operacional",
314
+ "legacy": {
315
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
316
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
317
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
318
+ }
319
+ },
320
+ "discovery": {
321
+ "keywords": ["figurinha", "s", "figurinhas", "privado", "grupo"],
322
+ "faq_queries": ["como usar figurinha", "o que faz figurinha", "comando figurinha"],
323
+ "user_phrasings": ["quero usar figurinha", "me ajuda com figurinha", "converte imagem/video em figurinha."],
324
+ "suggestion_priority": 100
325
+ },
326
+ "access": {
327
+ "premium_only": false,
328
+ "allowed_plans": ["comum", "premium"],
329
+ "legacy": {
330
+ "somente_premium": false,
331
+ "planos_permitidos": ["comum", "premium"]
332
+ }
333
+ },
334
+ "plan_limits": {
335
+ "comum": {
336
+ "max": 12,
337
+ "janela_ms": 300000,
338
+ "escopo": "usuario"
339
+ },
340
+ "premium": {
341
+ "max": 45,
342
+ "janela_ms": 300000,
343
+ "escopo": "usuario"
344
+ }
345
+ },
346
+ "version": "1.0.0",
347
+ "stability": "stable",
348
+ "deprecated": false,
349
+ "replaced_by": null,
350
+ "risk_level": "low",
351
+ "handler": {
352
+ "file": "stickerCommand.js",
353
+ "method": "processSticker",
354
+ "command_case": "figurinha"
355
+ },
356
+ "compatibility": {
357
+ "schema": "legacy_v1_and_v2",
358
+ "legacy_name": "figurinha",
359
+ "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"]
360
+ }
361
+ },
362
+ {
363
+ "name": "paraimagem",
364
+ "aliases": ["tovideo", "tovid", "toimg"],
365
+ "descricao": "Converte figurinha para imagem ou video quando aplicavel.",
366
+ "metodos_de_uso": ["<prefix>paraimagem", "<prefix>tovideo", "<prefix>tovid"],
367
+ "mensagens_uso": {
368
+ "default": ["📌 Use: <prefix>paraimagem (ou <prefix>tovideo / <prefix>tovid) respondendo a uma figurinha."]
369
+ },
370
+ "permissao_necessaria": "usuario comum",
371
+ "limite_de_uso": "figurinha ate 2 MB",
372
+ "local_de_uso": ["privado", "grupo"],
373
+ "informacoes_coletadas": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "metadados da figurinha (incluindo se e animada)", "arquivo de figurinha baixado temporariamente para conversao"],
374
+ "enabled": true,
375
+ "categoria": "figurinhas",
376
+ "subcomandos": [],
377
+ "argumentos": [],
378
+ "pre_condicoes": {
379
+ "requer_grupo": false,
380
+ "requer_admin": false,
381
+ "requer_admin_principal": false,
382
+ "requer_google_login": true,
383
+ "requer_nsfw": false,
384
+ "requer_midia": true,
385
+ "requer_mensagem_respondida": false
386
+ },
387
+ "rate_limit": {
388
+ "max": null,
389
+ "janela_ms": null,
390
+ "escopo": "sem_rate_limit_explicito"
391
+ },
392
+ "dependencias_externas": ["conversão de mídia local", "armazenamento temporário"],
393
+ "efeitos_colaterais": ["faz download/conversão temporária de figurinha", "envia mídia convertida"],
394
+ "respostas_padrao": {
395
+ "sucesso": "Comando executado com sucesso.",
396
+ "erro_uso": "Formato de uso inválido. Consulte metodos_de_uso.",
397
+ "erro_permissao": "Permissão insuficiente para executar este comando."
398
+ },
399
+ "observabilidade": {
400
+ "evento_analytics": "whatsapp_command_toimg",
401
+ "tags_log": ["whatsapp", "command", "stickerModule", "toimg"],
402
+ "nivel_log": "info"
403
+ },
404
+ "privacidade": {
405
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
406
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
407
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
408
+ },
409
+ "capability_keywords": ["paraimagem", "tovideo", "tovid", "figurinhas", "privado", "grupo"],
410
+ "faq_patterns": ["como usar paraimagem", "o que faz paraimagem", "comando paraimagem"],
411
+ "user_phrasings": ["quero usar paraimagem", "me ajuda com paraimagem", "converte figurinha para imagem"],
412
+ "suggestion_priority": 100,
413
+ "acesso": {
414
+ "somente_premium": false,
415
+ "planos_permitidos": ["comum", "premium"]
416
+ },
417
+ "limite_uso_por_plano": {
418
+ "comum": {
419
+ "max": 12,
420
+ "janela_ms": 300000,
421
+ "escopo": "usuario"
422
+ },
423
+ "premium": {
424
+ "max": 45,
425
+ "janela_ms": 300000,
426
+ "escopo": "usuario"
427
+ }
428
+ },
429
+ "id": "sticker.paraimagem",
430
+ "description": "Converte figurinha para imagem ou video quando aplicavel.",
431
+ "usage": ["<prefix>paraimagem", "<prefix>tovideo", "<prefix>tovid"],
432
+ "docs": {
433
+ "summary": "Converte figurinha para imagem ou video quando aplicavel.",
434
+ "usage_examples": ["<prefix>paraimagem", "<prefix>tovideo", "<prefix>tovid"],
435
+ "usage_variants": {
436
+ "default": ["📌 Use: <prefix>paraimagem (ou <prefix>tovideo / <prefix>tovid) respondendo a uma figurinha."]
437
+ }
438
+ },
439
+ "permission": "usuario comum",
440
+ "contexts": ["privado", "grupo"],
441
+ "collected_data": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "metadados da figurinha (incluindo se e animada)", "arquivo de figurinha baixado temporariamente para conversao"],
442
+ "requirements": {
443
+ "require_group": false,
444
+ "require_group_admin": false,
445
+ "require_bot_owner": false,
446
+ "require_google_login": true,
447
+ "require_nsfw_enabled": false,
448
+ "require_media": true,
449
+ "require_reply_message": false,
450
+ "legacy": {
451
+ "requer_grupo": false,
452
+ "requer_admin": false,
453
+ "requer_admin_principal": false,
454
+ "requer_google_login": true,
455
+ "requer_nsfw": false,
456
+ "requer_midia": true,
457
+ "requer_mensagem_respondida": false
458
+ }
459
+ },
460
+ "arguments": [],
461
+ "behavior": {
462
+ "type": "simple_action",
463
+ "allowed_actions": []
464
+ },
465
+ "limits": {
466
+ "usage_description": "figurinha ate 2 MB",
467
+ "rate_limit": {
468
+ "max": null,
469
+ "janela_ms": null,
470
+ "escopo": "sem_rate_limit_explicito"
471
+ },
472
+ "access": {
473
+ "somente_premium": false,
474
+ "planos_permitidos": ["comum", "premium"]
475
+ },
476
+ "plan_limits": {
477
+ "comum": {
478
+ "max": 12,
479
+ "janela_ms": 300000,
480
+ "escopo": "usuario"
481
+ },
482
+ "premium": {
483
+ "max": 45,
484
+ "janela_ms": 300000,
485
+ "escopo": "usuario"
486
+ }
487
+ }
488
+ },
489
+ "dependencies": ["conversão de mídia local", "armazenamento temporário"],
490
+ "side_effects": ["faz download/conversão temporária de figurinha", "envia mídia convertida"],
491
+ "observability": {
492
+ "event_name": "command.executed",
493
+ "event_key": "sticker.paraimagem",
494
+ "analytics_event": "whatsapp_command_toimg",
495
+ "log_level": "info",
496
+ "tags": ["whatsapp", "command", "stickerModule", "toimg"],
497
+ "legacy": {
498
+ "evento_analytics": "whatsapp_command_toimg",
499
+ "tags_log": ["whatsapp", "command", "stickerModule", "toimg"],
500
+ "nivel_log": "info"
501
+ }
502
+ },
503
+ "privacy": {
504
+ "data_categories": ["chat_identifier", "sender_identifier", "command_content"],
505
+ "sensitive_fields": ["remoteJid", "senderJid", "text", "args"],
506
+ "retention_policy": "standard_app_logs",
507
+ "retention_notes": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
508
+ "legal_basis": "service_execution_and_legitimate_interest",
509
+ "legal_basis_notes": "execução do serviço solicitado e legítimo interesse operacional",
510
+ "legacy": {
511
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
512
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
513
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
514
+ }
515
+ },
516
+ "discovery": {
517
+ "keywords": ["paraimagem", "tovideo", "tovid", "figurinhas", "privado", "grupo"],
518
+ "faq_queries": ["como usar paraimagem", "o que faz paraimagem", "comando paraimagem"],
519
+ "user_phrasings": ["quero usar paraimagem", "me ajuda com paraimagem", "converte figurinha para imagem"],
520
+ "suggestion_priority": 100
521
+ },
522
+ "access": {
523
+ "premium_only": false,
524
+ "allowed_plans": ["comum", "premium"],
525
+ "legacy": {
526
+ "somente_premium": false,
527
+ "planos_permitidos": ["comum", "premium"]
528
+ }
529
+ },
530
+ "plan_limits": {
531
+ "comum": {
532
+ "max": 12,
533
+ "janela_ms": 300000,
534
+ "escopo": "usuario"
535
+ },
536
+ "premium": {
537
+ "max": 45,
538
+ "janela_ms": 300000,
539
+ "escopo": "usuario"
540
+ }
541
+ },
542
+ "version": "1.0.0",
543
+ "stability": "stable",
544
+ "deprecated": false,
545
+ "replaced_by": null,
546
+ "risk_level": "low",
547
+ "handler": {
548
+ "file": "stickerConvertCommand.js",
549
+ "method": "handleStickerConvertCommand",
550
+ "command_case": "paraimagem"
551
+ },
552
+ "compatibility": {
553
+ "schema": "legacy_v1_and_v2",
554
+ "legacy_name": "paraimagem",
555
+ "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"]
556
+ }
557
+ },
558
+ {
559
+ "name": "figurinhatexto",
560
+ "aliases": ["st", "stickertext"],
561
+ "descricao": "Gera figurinha com texto (tema escuro).",
562
+ "metodos_de_uso": ["<prefix>figurinhatexto seu texto", "<prefix>st seu texto"],
563
+ "mensagens_uso": {
564
+ "default": ["📌 Use: <prefix>figurinhatexto seu texto", "💡 Exemplo: <prefix>st bom dia seus lindos"]
565
+ },
566
+ "permissao_necessaria": "usuario comum",
567
+ "limite_de_uso": "ate 80 caracteres e 4 linhas",
568
+ "local_de_uso": ["privado", "grupo"],
569
+ "informacoes_coletadas": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "texto informado para compor a figurinha", "opcoes de estilo/cor do texto"],
570
+ "enabled": true,
571
+ "categoria": "figurinhas",
572
+ "subcomandos": [],
573
+ "argumentos": [
574
+ {
575
+ "nome": "texto",
576
+ "tipo": "string",
577
+ "obrigatorio": true,
578
+ "validacao": "até 80 caracteres, máximo 4 linhas",
579
+ "default": null
580
+ }
581
+ ],
582
+ "pre_condicoes": {
583
+ "requer_grupo": false,
584
+ "requer_admin": false,
585
+ "requer_admin_principal": false,
586
+ "requer_google_login": true,
587
+ "requer_nsfw": false,
588
+ "requer_midia": false,
589
+ "requer_mensagem_respondida": false
590
+ },
591
+ "rate_limit": {
592
+ "max": null,
593
+ "janela_ms": null,
594
+ "escopo": "sem_rate_limit_explicito"
595
+ },
596
+ "dependencias_externas": ["conversão de mídia local", "armazenamento temporário"],
597
+ "efeitos_colaterais": ["gera mídia temporária de figurinha com texto", "envia figurinha"],
598
+ "respostas_padrao": {
599
+ "sucesso": "Comando executado com sucesso.",
600
+ "erro_uso": "Formato de uso inválido. Consulte metodos_de_uso.",
601
+ "erro_permissao": "Permissão insuficiente para executar este comando."
602
+ },
603
+ "observabilidade": {
604
+ "evento_analytics": "whatsapp_command_stickertext",
605
+ "tags_log": ["whatsapp", "command", "stickerModule", "stickertext"],
606
+ "nivel_log": "info"
607
+ },
608
+ "privacidade": {
609
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
610
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
611
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
612
+ },
613
+ "capability_keywords": ["figurinhatexto", "st", "figurinhas", "privado", "grupo"],
614
+ "faq_patterns": ["como usar figurinhatexto", "o que faz figurinhatexto", "comando figurinhatexto"],
615
+ "user_phrasings": ["quero usar figurinhatexto", "me ajuda com figurinhatexto", "gera figurinha com texto"],
616
+ "suggestion_priority": 100,
617
+ "acesso": {
618
+ "somente_premium": false,
619
+ "planos_permitidos": ["comum", "premium"]
620
+ },
621
+ "limite_uso_por_plano": {
622
+ "comum": {
623
+ "max": 12,
624
+ "janela_ms": 300000,
625
+ "escopo": "usuario"
626
+ },
627
+ "premium": {
628
+ "max": 45,
629
+ "janela_ms": 300000,
630
+ "escopo": "usuario"
631
+ }
632
+ },
633
+ "id": "sticker.figurinhatexto",
634
+ "description": "Gera figurinha com texto (tema escuro).",
635
+ "usage": ["<prefix>figurinhatexto seu texto", "<prefix>st seu texto"],
636
+ "docs": {
637
+ "summary": "Gera figurinha com texto (tema escuro).",
638
+ "usage_examples": ["<prefix>figurinhatexto seu texto", "<prefix>st seu texto"],
639
+ "usage_variants": {
640
+ "default": ["📌 Use: <prefix>figurinhatexto seu texto", "💡 Exemplo: <prefix>st bom dia seus lindos"]
641
+ }
642
+ },
643
+ "permission": "usuario comum",
644
+ "contexts": ["privado", "grupo"],
645
+ "collected_data": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "texto informado para compor a figurinha", "opcoes de estilo/cor do texto"],
646
+ "requirements": {
647
+ "require_group": false,
648
+ "require_group_admin": false,
649
+ "require_bot_owner": false,
650
+ "require_google_login": true,
651
+ "require_nsfw_enabled": false,
652
+ "require_media": false,
653
+ "require_reply_message": false,
654
+ "legacy": {
655
+ "requer_grupo": false,
656
+ "requer_admin": false,
657
+ "requer_admin_principal": false,
658
+ "requer_google_login": true,
659
+ "requer_nsfw": false,
660
+ "requer_midia": false,
661
+ "requer_mensagem_respondida": false
662
+ }
663
+ },
664
+ "arguments": [
665
+ {
666
+ "name": "texto",
667
+ "type": "string",
668
+ "required": true,
669
+ "default": null,
670
+ "enum": null,
671
+ "description": "até 80 caracteres, máximo 4 linhas",
672
+ "position": 0,
673
+ "accepts_mentions": false,
674
+ "accepts_reply_target": false,
675
+ "greedy": false,
676
+ "validation": "até 80 caracteres, máximo 4 linhas"
677
+ }
678
+ ],
679
+ "behavior": {
680
+ "type": "argument_driven",
681
+ "allowed_actions": []
682
+ },
683
+ "limits": {
684
+ "usage_description": "ate 80 caracteres e 4 linhas",
685
+ "rate_limit": {
686
+ "max": null,
687
+ "janela_ms": null,
688
+ "escopo": "sem_rate_limit_explicito"
689
+ },
690
+ "access": {
691
+ "somente_premium": false,
692
+ "planos_permitidos": ["comum", "premium"]
693
+ },
694
+ "plan_limits": {
695
+ "comum": {
696
+ "max": 12,
697
+ "janela_ms": 300000,
698
+ "escopo": "usuario"
699
+ },
700
+ "premium": {
701
+ "max": 45,
702
+ "janela_ms": 300000,
703
+ "escopo": "usuario"
704
+ }
705
+ }
706
+ },
707
+ "dependencies": ["conversão de mídia local", "armazenamento temporário"],
708
+ "side_effects": ["gera mídia temporária de figurinha com texto", "envia figurinha"],
709
+ "observability": {
710
+ "event_name": "command.executed",
711
+ "event_key": "sticker.figurinhatexto",
712
+ "analytics_event": "whatsapp_command_stickertext",
713
+ "log_level": "info",
714
+ "tags": ["whatsapp", "command", "stickerModule", "stickertext"],
715
+ "legacy": {
716
+ "evento_analytics": "whatsapp_command_stickertext",
717
+ "tags_log": ["whatsapp", "command", "stickerModule", "stickertext"],
718
+ "nivel_log": "info"
719
+ }
720
+ },
721
+ "privacy": {
722
+ "data_categories": ["chat_identifier", "sender_identifier", "command_content"],
723
+ "sensitive_fields": ["remoteJid", "senderJid", "text", "args"],
724
+ "retention_policy": "standard_app_logs",
725
+ "retention_notes": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
726
+ "legal_basis": "service_execution_and_legitimate_interest",
727
+ "legal_basis_notes": "execução do serviço solicitado e legítimo interesse operacional",
728
+ "legacy": {
729
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
730
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
731
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
732
+ }
733
+ },
734
+ "discovery": {
735
+ "keywords": ["figurinhatexto", "st", "figurinhas", "privado", "grupo"],
736
+ "faq_queries": ["como usar figurinhatexto", "o que faz figurinhatexto", "comando figurinhatexto"],
737
+ "user_phrasings": ["quero usar figurinhatexto", "me ajuda com figurinhatexto", "gera figurinha com texto"],
738
+ "suggestion_priority": 100
739
+ },
740
+ "access": {
741
+ "premium_only": false,
742
+ "allowed_plans": ["comum", "premium"],
743
+ "legacy": {
744
+ "somente_premium": false,
745
+ "planos_permitidos": ["comum", "premium"]
746
+ }
747
+ },
748
+ "plan_limits": {
749
+ "comum": {
750
+ "max": 12,
751
+ "janela_ms": 300000,
752
+ "escopo": "usuario"
753
+ },
754
+ "premium": {
755
+ "max": 45,
756
+ "janela_ms": 300000,
757
+ "escopo": "usuario"
758
+ }
759
+ },
760
+ "version": "1.0.0",
761
+ "stability": "stable",
762
+ "deprecated": false,
763
+ "replaced_by": null,
764
+ "risk_level": "low",
765
+ "handler": {
766
+ "file": "stickerTextCommand.js",
767
+ "method": "processTextSticker",
768
+ "command_case": "figurinhatexto"
769
+ },
770
+ "compatibility": {
771
+ "schema": "legacy_v1_and_v2",
772
+ "legacy_name": "figurinhatexto",
773
+ "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"]
774
+ }
775
+ },
776
+ {
777
+ "name": "figurinhatextobranco",
778
+ "aliases": ["stw", "stickertextwhite"],
779
+ "descricao": "Gera figurinha com texto (tema claro).",
780
+ "metodos_de_uso": ["<prefix>figurinhatextobranco seu texto", "<prefix>stw seu texto"],
781
+ "mensagens_uso": {
782
+ "default": ["📌 Use: <prefix>figurinhatextobranco seu texto", "💡 Exemplo: <prefix>stw bom dia seus lindos"]
783
+ },
784
+ "permissao_necessaria": "usuario comum",
785
+ "limite_de_uso": "ate 80 caracteres e 4 linhas",
786
+ "local_de_uso": ["privado", "grupo"],
787
+ "informacoes_coletadas": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "texto informado para compor a figurinha", "opcoes de estilo/cor do texto"],
788
+ "enabled": true,
789
+ "categoria": "figurinhas",
790
+ "subcomandos": [],
791
+ "argumentos": [
792
+ {
793
+ "nome": "texto",
794
+ "tipo": "string",
795
+ "obrigatorio": true,
796
+ "validacao": "até 80 caracteres, máximo 4 linhas",
797
+ "default": null
798
+ }
799
+ ],
800
+ "pre_condicoes": {
801
+ "requer_grupo": false,
802
+ "requer_admin": false,
803
+ "requer_admin_principal": false,
804
+ "requer_google_login": true,
805
+ "requer_nsfw": false,
806
+ "requer_midia": false,
807
+ "requer_mensagem_respondida": false
808
+ },
809
+ "rate_limit": {
810
+ "max": null,
811
+ "janela_ms": null,
812
+ "escopo": "sem_rate_limit_explicito"
813
+ },
814
+ "dependencias_externas": ["conversão de mídia local", "armazenamento temporário"],
815
+ "efeitos_colaterais": ["gera mídia temporária de figurinha com texto", "envia figurinha"],
816
+ "respostas_padrao": {
817
+ "sucesso": "Comando executado com sucesso.",
818
+ "erro_uso": "Formato de uso inválido. Consulte metodos_de_uso.",
819
+ "erro_permissao": "Permissão insuficiente para executar este comando."
820
+ },
821
+ "observabilidade": {
822
+ "evento_analytics": "whatsapp_command_stickertextwhite",
823
+ "tags_log": ["whatsapp", "command", "stickerModule", "stickertextwhite"],
824
+ "nivel_log": "info"
825
+ },
826
+ "privacidade": {
827
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
828
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
829
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
830
+ },
831
+ "capability_keywords": ["figurinhatextobranco", "stw", "figurinhas", "privado", "grupo"],
832
+ "faq_patterns": ["como usar figurinhatextobranco", "o que faz figurinhatextobranco", "comando figurinhatextobranco"],
833
+ "user_phrasings": ["quero usar figurinhatextobranco", "me ajuda com figurinhatextobranco", "gera figurinha com texto"],
834
+ "suggestion_priority": 100,
835
+ "acesso": {
836
+ "somente_premium": false,
837
+ "planos_permitidos": ["comum", "premium"]
838
+ },
839
+ "limite_uso_por_plano": {
840
+ "comum": {
841
+ "max": 12,
842
+ "janela_ms": 300000,
843
+ "escopo": "usuario"
844
+ },
845
+ "premium": {
846
+ "max": 45,
847
+ "janela_ms": 300000,
848
+ "escopo": "usuario"
849
+ }
850
+ },
851
+ "id": "sticker.figurinhatextobranco",
852
+ "description": "Gera figurinha com texto (tema claro).",
853
+ "usage": ["<prefix>figurinhatextobranco seu texto", "<prefix>stw seu texto"],
854
+ "docs": {
855
+ "summary": "Gera figurinha com texto (tema claro).",
856
+ "usage_examples": ["<prefix>figurinhatextobranco seu texto", "<prefix>stw seu texto"],
857
+ "usage_variants": {
858
+ "default": ["📌 Use: <prefix>figurinhatextobranco seu texto", "💡 Exemplo: <prefix>stw bom dia seus lindos"]
859
+ }
860
+ },
861
+ "permission": "usuario comum",
862
+ "contexts": ["privado", "grupo"],
863
+ "collected_data": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "texto informado para compor a figurinha", "opcoes de estilo/cor do texto"],
864
+ "requirements": {
865
+ "require_group": false,
866
+ "require_group_admin": false,
867
+ "require_bot_owner": false,
868
+ "require_google_login": true,
869
+ "require_nsfw_enabled": false,
870
+ "require_media": false,
871
+ "require_reply_message": false,
872
+ "legacy": {
873
+ "requer_grupo": false,
874
+ "requer_admin": false,
875
+ "requer_admin_principal": false,
876
+ "requer_google_login": true,
877
+ "requer_nsfw": false,
878
+ "requer_midia": false,
879
+ "requer_mensagem_respondida": false
880
+ }
881
+ },
882
+ "arguments": [
883
+ {
884
+ "name": "texto",
885
+ "type": "string",
886
+ "required": true,
887
+ "default": null,
888
+ "enum": null,
889
+ "description": "até 80 caracteres, máximo 4 linhas",
890
+ "position": 0,
891
+ "accepts_mentions": false,
892
+ "accepts_reply_target": false,
893
+ "greedy": false,
894
+ "validation": "até 80 caracteres, máximo 4 linhas"
895
+ }
896
+ ],
897
+ "behavior": {
898
+ "type": "argument_driven",
899
+ "allowed_actions": []
900
+ },
901
+ "limits": {
902
+ "usage_description": "ate 80 caracteres e 4 linhas",
903
+ "rate_limit": {
904
+ "max": null,
905
+ "janela_ms": null,
906
+ "escopo": "sem_rate_limit_explicito"
907
+ },
908
+ "access": {
909
+ "somente_premium": false,
910
+ "planos_permitidos": ["comum", "premium"]
911
+ },
912
+ "plan_limits": {
913
+ "comum": {
914
+ "max": 12,
915
+ "janela_ms": 300000,
916
+ "escopo": "usuario"
917
+ },
918
+ "premium": {
919
+ "max": 45,
920
+ "janela_ms": 300000,
921
+ "escopo": "usuario"
922
+ }
923
+ }
924
+ },
925
+ "dependencies": ["conversão de mídia local", "armazenamento temporário"],
926
+ "side_effects": ["gera mídia temporária de figurinha com texto", "envia figurinha"],
927
+ "observability": {
928
+ "event_name": "command.executed",
929
+ "event_key": "sticker.figurinhatextobranco",
930
+ "analytics_event": "whatsapp_command_stickertextwhite",
931
+ "log_level": "info",
932
+ "tags": ["whatsapp", "command", "stickerModule", "stickertextwhite"],
933
+ "legacy": {
934
+ "evento_analytics": "whatsapp_command_stickertextwhite",
935
+ "tags_log": ["whatsapp", "command", "stickerModule", "stickertextwhite"],
936
+ "nivel_log": "info"
937
+ }
938
+ },
939
+ "privacy": {
940
+ "data_categories": ["chat_identifier", "sender_identifier", "command_content"],
941
+ "sensitive_fields": ["remoteJid", "senderJid", "text", "args"],
942
+ "retention_policy": "standard_app_logs",
943
+ "retention_notes": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
944
+ "legal_basis": "service_execution_and_legitimate_interest",
945
+ "legal_basis_notes": "execução do serviço solicitado e legítimo interesse operacional",
946
+ "legacy": {
947
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
948
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
949
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
950
+ }
951
+ },
952
+ "discovery": {
953
+ "keywords": ["figurinhatextobranco", "stw", "figurinhas", "privado", "grupo"],
954
+ "faq_queries": ["como usar figurinhatextobranco", "o que faz figurinhatextobranco", "comando figurinhatextobranco"],
955
+ "user_phrasings": ["quero usar figurinhatextobranco", "me ajuda com figurinhatextobranco", "gera figurinha com texto"],
956
+ "suggestion_priority": 100
957
+ },
958
+ "access": {
959
+ "premium_only": false,
960
+ "allowed_plans": ["comum", "premium"],
961
+ "legacy": {
962
+ "somente_premium": false,
963
+ "planos_permitidos": ["comum", "premium"]
964
+ }
965
+ },
966
+ "plan_limits": {
967
+ "comum": {
968
+ "max": 12,
969
+ "janela_ms": 300000,
970
+ "escopo": "usuario"
971
+ },
972
+ "premium": {
973
+ "max": 45,
974
+ "janela_ms": 300000,
975
+ "escopo": "usuario"
976
+ }
977
+ },
978
+ "version": "1.0.0",
979
+ "stability": "stable",
980
+ "deprecated": false,
981
+ "replaced_by": null,
982
+ "risk_level": "low",
983
+ "handler": {
984
+ "file": "stickerTextCommand.js",
985
+ "method": "processTextSticker",
986
+ "command_case": "figurinhatextobranco"
987
+ },
988
+ "compatibility": {
989
+ "schema": "legacy_v1_and_v2",
990
+ "legacy_name": "figurinhatextobranco",
991
+ "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"]
992
+ }
993
+ },
994
+ {
995
+ "name": "figurinhatextopisca",
996
+ "aliases": ["stb", "stickertextblink"],
997
+ "descricao": "Gera figurinha animada de texto piscante.",
998
+ "metodos_de_uso": ["<prefix>figurinhatextopisca seu texto", "<prefix>stb seu texto"],
999
+ "mensagens_uso": {
1000
+ "default": ["📌 Use: <prefix>figurinhatextopisca seu texto", "💡 Exemplo: <prefix>stb bom dia seus lindos -verde"]
1001
+ },
1002
+ "permissao_necessaria": "usuario comum",
1003
+ "limite_de_uso": "ate 80 caracteres e 4 linhas",
1004
+ "local_de_uso": ["privado", "grupo"],
1005
+ "informacoes_coletadas": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "texto informado para compor a figurinha", "parametros de animacao piscante"],
1006
+ "enabled": true,
1007
+ "categoria": "figurinhas",
1008
+ "subcomandos": [],
1009
+ "argumentos": [
1010
+ {
1011
+ "nome": "texto",
1012
+ "tipo": "string",
1013
+ "obrigatorio": true,
1014
+ "validacao": "até 80 caracteres, máximo 4 linhas",
1015
+ "default": null
1016
+ }
1017
+ ],
1018
+ "pre_condicoes": {
1019
+ "requer_grupo": false,
1020
+ "requer_admin": false,
1021
+ "requer_admin_principal": false,
1022
+ "requer_google_login": true,
1023
+ "requer_nsfw": false,
1024
+ "requer_midia": false,
1025
+ "requer_mensagem_respondida": false
1026
+ },
1027
+ "rate_limit": {
1028
+ "max": null,
1029
+ "janela_ms": null,
1030
+ "escopo": "sem_rate_limit_explicito"
1031
+ },
1032
+ "dependencias_externas": ["conversão de mídia local", "armazenamento temporário"],
1033
+ "efeitos_colaterais": ["gera mídia temporária animada", "envia figurinha"],
1034
+ "respostas_padrao": {
1035
+ "sucesso": "Comando executado com sucesso.",
1036
+ "erro_uso": "Formato de uso inválido. Consulte metodos_de_uso.",
1037
+ "erro_permissao": "Permissão insuficiente para executar este comando."
1038
+ },
1039
+ "observabilidade": {
1040
+ "evento_analytics": "whatsapp_command_stickertextblink",
1041
+ "tags_log": ["whatsapp", "command", "stickerModule", "stickertextblink"],
1042
+ "nivel_log": "info"
1043
+ },
1044
+ "privacidade": {
1045
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
1046
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
1047
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
1048
+ },
1049
+ "capability_keywords": ["figurinhatextopisca", "stb", "figurinhas", "privado", "grupo"],
1050
+ "faq_patterns": ["como usar figurinhatextopisca", "o que faz figurinhatextopisca", "comando figurinhatextopisca"],
1051
+ "user_phrasings": ["quero usar figurinhatextopisca", "me ajuda com figurinhatextopisca", "gera figurinha animada de"],
1052
+ "suggestion_priority": 100,
1053
+ "acesso": {
1054
+ "somente_premium": false,
1055
+ "planos_permitidos": ["comum", "premium"]
1056
+ },
1057
+ "limite_uso_por_plano": {
1058
+ "comum": {
1059
+ "max": 12,
1060
+ "janela_ms": 300000,
1061
+ "escopo": "usuario"
1062
+ },
1063
+ "premium": {
1064
+ "max": 45,
1065
+ "janela_ms": 300000,
1066
+ "escopo": "usuario"
1067
+ }
1068
+ },
1069
+ "id": "sticker.figurinhatextopisca",
1070
+ "description": "Gera figurinha animada de texto piscante.",
1071
+ "usage": ["<prefix>figurinhatextopisca seu texto", "<prefix>stb seu texto"],
1072
+ "docs": {
1073
+ "summary": "Gera figurinha animada de texto piscante.",
1074
+ "usage_examples": ["<prefix>figurinhatextopisca seu texto", "<prefix>stb seu texto"],
1075
+ "usage_variants": {
1076
+ "default": ["📌 Use: <prefix>figurinhatextopisca seu texto", "💡 Exemplo: <prefix>stb bom dia seus lindos -verde"]
1077
+ }
1078
+ },
1079
+ "permission": "usuario comum",
1080
+ "contexts": ["privado", "grupo"],
1081
+ "collected_data": ["identificador do chat (remoteJid)", "identificador do remetente (senderJid)", "texto do comando e argumentos", "contexto da mensagem (citacao e mencoes, quando existir)", "texto informado para compor a figurinha", "parametros de animacao piscante"],
1082
+ "requirements": {
1083
+ "require_group": false,
1084
+ "require_group_admin": false,
1085
+ "require_bot_owner": false,
1086
+ "require_google_login": true,
1087
+ "require_nsfw_enabled": false,
1088
+ "require_media": false,
1089
+ "require_reply_message": false,
1090
+ "legacy": {
1091
+ "requer_grupo": false,
1092
+ "requer_admin": false,
1093
+ "requer_admin_principal": false,
1094
+ "requer_google_login": true,
1095
+ "requer_nsfw": false,
1096
+ "requer_midia": false,
1097
+ "requer_mensagem_respondida": false
1098
+ }
1099
+ },
1100
+ "arguments": [
1101
+ {
1102
+ "name": "texto",
1103
+ "type": "string",
1104
+ "required": true,
1105
+ "default": null,
1106
+ "enum": null,
1107
+ "description": "até 80 caracteres, máximo 4 linhas",
1108
+ "position": 0,
1109
+ "accepts_mentions": false,
1110
+ "accepts_reply_target": false,
1111
+ "greedy": false,
1112
+ "validation": "até 80 caracteres, máximo 4 linhas"
1113
+ }
1114
+ ],
1115
+ "behavior": {
1116
+ "type": "argument_driven",
1117
+ "allowed_actions": []
1118
+ },
1119
+ "limits": {
1120
+ "usage_description": "ate 80 caracteres e 4 linhas",
1121
+ "rate_limit": {
1122
+ "max": null,
1123
+ "janela_ms": null,
1124
+ "escopo": "sem_rate_limit_explicito"
1125
+ },
1126
+ "access": {
1127
+ "somente_premium": false,
1128
+ "planos_permitidos": ["comum", "premium"]
1129
+ },
1130
+ "plan_limits": {
1131
+ "comum": {
1132
+ "max": 12,
1133
+ "janela_ms": 300000,
1134
+ "escopo": "usuario"
1135
+ },
1136
+ "premium": {
1137
+ "max": 45,
1138
+ "janela_ms": 300000,
1139
+ "escopo": "usuario"
1140
+ }
1141
+ }
1142
+ },
1143
+ "dependencies": ["conversão de mídia local", "armazenamento temporário"],
1144
+ "side_effects": ["gera mídia temporária animada", "envia figurinha"],
1145
+ "observability": {
1146
+ "event_name": "command.executed",
1147
+ "event_key": "sticker.figurinhatextopisca",
1148
+ "analytics_event": "whatsapp_command_stickertextblink",
1149
+ "log_level": "info",
1150
+ "tags": ["whatsapp", "command", "stickerModule", "stickertextblink"],
1151
+ "legacy": {
1152
+ "evento_analytics": "whatsapp_command_stickertextblink",
1153
+ "tags_log": ["whatsapp", "command", "stickerModule", "stickertextblink"],
1154
+ "nivel_log": "info"
1155
+ }
1156
+ },
1157
+ "privacy": {
1158
+ "data_categories": ["chat_identifier", "sender_identifier", "command_content"],
1159
+ "sensitive_fields": ["remoteJid", "senderJid", "text", "args"],
1160
+ "retention_policy": "standard_app_logs",
1161
+ "retention_notes": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
1162
+ "legal_basis": "service_execution_and_legitimate_interest",
1163
+ "legal_basis_notes": "execução do serviço solicitado e legítimo interesse operacional",
1164
+ "legacy": {
1165
+ "dados_sensiveis": ["identificador do chat", "identificador do remetente", "conteudo textual do comando"],
1166
+ "retencao": "conforme políticas de logs, banco de dados e arquivos temporários da aplicação",
1167
+ "base_legal": "execução do serviço solicitado e legítimo interesse operacional"
1168
+ }
1169
+ },
1170
+ "discovery": {
1171
+ "keywords": ["figurinhatextopisca", "stb", "figurinhas", "privado", "grupo"],
1172
+ "faq_queries": ["como usar figurinhatextopisca", "o que faz figurinhatextopisca", "comando figurinhatextopisca"],
1173
+ "user_phrasings": ["quero usar figurinhatextopisca", "me ajuda com figurinhatextopisca", "gera figurinha animada de"],
1174
+ "suggestion_priority": 100
1175
+ },
1176
+ "access": {
1177
+ "premium_only": false,
1178
+ "allowed_plans": ["comum", "premium"],
1179
+ "legacy": {
1180
+ "somente_premium": false,
1181
+ "planos_permitidos": ["comum", "premium"]
1182
+ }
1183
+ },
1184
+ "plan_limits": {
1185
+ "comum": {
1186
+ "max": 12,
1187
+ "janela_ms": 300000,
1188
+ "escopo": "usuario"
1189
+ },
1190
+ "premium": {
1191
+ "max": 45,
1192
+ "janela_ms": 300000,
1193
+ "escopo": "usuario"
1194
+ }
1195
+ },
1196
+ "version": "1.0.0",
1197
+ "stability": "stable",
1198
+ "deprecated": false,
1199
+ "replaced_by": null,
1200
+ "risk_level": "low",
1201
+ "handler": {
1202
+ "file": "stickerTextCommand.js",
1203
+ "method": "processBlinkingTextSticker",
1204
+ "command_case": "figurinhatextopisca"
1205
+ },
1206
+ "compatibility": {
1207
+ "schema": "legacy_v1_and_v2",
1208
+ "legacy_name": "figurinhatextopisca",
1209
+ "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"]
1210
+ }
1211
+ }
1212
+ ],
1213
+ "textos": {
1214
+ "usage_header": ""
1215
+ }
1216
+ }