@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.
- package/.clusterfuzzlite/Dockerfile +10 -0
- package/.env.example +907 -0
- package/.github/codeql/codeql-config.yml +10 -0
- package/.github/dependabot.yml +35 -0
- package/.github/workflows/ci.yml +73 -0
- package/.github/workflows/codeql.yml +106 -0
- package/.github/workflows/db-migration-check.yml +98 -0
- package/.github/workflows/dependency-review.yml +22 -0
- package/.github/workflows/deploy.yml +95 -0
- package/.github/workflows/release.yml +106 -0
- package/.github/workflows/security-attest-provenance.yml +51 -0
- package/.github/workflows/security-gitleaks.yml +34 -0
- package/.github/workflows/security-runner-hardening.yml +31 -0
- package/.github/workflows/security-scorecard.yml +44 -0
- package/.github/workflows/security-zap-baseline.yml +44 -0
- package/.github/workflows/security-zap-full-scan.yml +43 -0
- package/.github/workflows/security-zizmor.yml +36 -0
- package/.github/workflows/wiki-sync.yml +44 -0
- package/.gitleaks.toml +15 -0
- package/.prettierrc +34 -0
- package/CODE_OF_CONDUCT.md +114 -0
- package/LICENSE +56 -0
- package/README.md +110 -0
- package/SECURITY.md +110 -0
- package/app/config/index.js +4 -0
- package/app/configParts/adminIdentity.js +92 -0
- package/app/configParts/baileysConfig.js +1818 -0
- package/app/configParts/groupUtils.js +692 -0
- package/app/configParts/loggerConfig.js +394 -0
- package/app/configParts/messagePersistenceService.js +305 -0
- package/app/connection/baileysCompatibility.test.js +40 -0
- package/app/connection/baileysDbAuthState.js +344 -0
- package/app/connection/socketController.js +2243 -0
- package/app/controllers/messageController.js +7 -0
- package/app/controllers/messagePipeline/commandMiddleware.js +146 -0
- package/app/controllers/messagePipeline/conversationMiddleware.js +183 -0
- package/app/controllers/messagePipeline/messagePipelineMiddlewares.test.js +522 -0
- package/app/controllers/messagePipeline/postProcessingMiddleware.js +41 -0
- package/app/controllers/messagePipeline/preProcessingMiddlewares.js +166 -0
- package/app/controllers/messageProcessingPipeline.js +699 -0
- package/app/modules/adminModule/AGENT.md +4056 -0
- package/app/modules/adminModule/adminAiHelpService.js +56 -0
- package/app/modules/adminModule/adminConfigRuntime.js +177 -0
- package/app/modules/adminModule/commandConfig.json +7122 -0
- package/app/modules/adminModule/groupCommandHandlers.js +1823 -0
- package/app/modules/adminModule/groupCommandHandlers.test.js +350 -0
- package/app/modules/adminModule/groupEventHandlers.js +399 -0
- package/app/modules/aiModule/AGENT.md +547 -0
- package/app/modules/aiModule/aiAiHelpService.js +14 -0
- package/app/modules/aiModule/aiConfigRuntime.js +135 -0
- package/app/modules/aiModule/catCommand.js +967 -0
- package/app/modules/aiModule/commandConfig.json +981 -0
- package/app/modules/analyticsModule/messageAnalysisEventRepository.js +83 -0
- package/app/modules/gameModule/AGENT.md +196 -0
- package/app/modules/gameModule/commandConfig.json +366 -0
- package/app/modules/gameModule/diceCommand.js +42 -0
- package/app/modules/gameModule/gameAiHelpService.js +14 -0
- package/app/modules/gameModule/gameConfigRuntime.js +68 -0
- package/app/modules/menuModule/AGENT.md +205 -0
- package/app/modules/menuModule/commandConfig.json +366 -0
- package/app/modules/menuModule/common.js +316 -0
- package/app/modules/menuModule/menuAiHelpService.js +14 -0
- package/app/modules/menuModule/menuConfigRuntime.js +68 -0
- package/app/modules/menuModule/menus.js +66 -0
- package/app/modules/playModule/AGENT.md +321 -0
- package/app/modules/playModule/commandConfig.json +584 -0
- package/app/modules/playModule/playAiHelpService.js +14 -0
- package/app/modules/playModule/playCommand.js +1417 -0
- package/app/modules/playModule/playConfigRuntime.js +68 -0
- package/app/modules/quoteModule/AGENT.md +199 -0
- package/app/modules/quoteModule/commandConfig.json +366 -0
- package/app/modules/quoteModule/quoteAiHelpService.js +14 -0
- package/app/modules/quoteModule/quoteCommand.js +842 -0
- package/app/modules/quoteModule/quoteConfigRuntime.js +68 -0
- package/app/modules/rpgPokemonModule/AGENT.md +229 -0
- package/app/modules/rpgPokemonModule/commandConfig.json +386 -0
- package/app/modules/rpgPokemonModule/rpgBattleCanvasRenderer.js +795 -0
- package/app/modules/rpgPokemonModule/rpgBattleService.js +2110 -0
- package/app/modules/rpgPokemonModule/rpgBattleService.test.js +770 -0
- package/app/modules/rpgPokemonModule/rpgEvolutionUtils.js +22 -0
- package/app/modules/rpgPokemonModule/rpgPokemonAiHelpService.js +14 -0
- package/app/modules/rpgPokemonModule/rpgPokemonCommand.js +174 -0
- package/app/modules/rpgPokemonModule/rpgPokemonConfigRuntime.js +68 -0
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.js +192 -0
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.test.js +93 -0
- package/app/modules/rpgPokemonModule/rpgPokemonEvolution.test.js +46 -0
- package/app/modules/rpgPokemonModule/rpgPokemonMessages.js +746 -0
- package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1847 -0
- package/app/modules/rpgPokemonModule/rpgPokemonService.js +6839 -0
- package/app/modules/rpgPokemonModule/rpgProfileCanvasRenderer.js +354 -0
- package/app/modules/statsModule/AGENT.md +320 -0
- package/app/modules/statsModule/commandConfig.json +540 -0
- package/app/modules/statsModule/globalRankingCommand.js +64 -0
- package/app/modules/statsModule/rankingCommand.js +41 -0
- package/app/modules/statsModule/rankingCommon.js +1305 -0
- package/app/modules/statsModule/statsAiHelpService.js +14 -0
- package/app/modules/statsModule/statsConfigRuntime.js +68 -0
- package/app/modules/stickerModule/AGENT.md +692 -0
- package/app/modules/stickerModule/addStickerMetadata.js +239 -0
- package/app/modules/stickerModule/commandConfig.json +1216 -0
- package/app/modules/stickerModule/convertToWebp.js +367 -0
- package/app/modules/stickerModule/stickerAiHelpService.js +14 -0
- package/app/modules/stickerModule/stickerCommand.js +446 -0
- package/app/modules/stickerModule/stickerConfigRuntime.js +68 -0
- package/app/modules/stickerModule/stickerConvertCommand.js +159 -0
- package/app/modules/stickerModule/stickerTextCommand.js +653 -0
- package/app/modules/stickerPackModule/AGENT.md +215 -0
- package/app/modules/stickerPackModule/autoPackCollectorRuntime.js +20 -0
- package/app/modules/stickerPackModule/autoPackCollectorService.js +357 -0
- package/app/modules/stickerPackModule/commandConfig.json +387 -0
- package/app/modules/stickerPackModule/domainEventOutboxRepository.js +227 -0
- package/app/modules/stickerPackModule/domainEvents.js +52 -0
- package/app/modules/stickerPackModule/semanticReclassificationEngine.js +429 -0
- package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +75 -0
- package/app/modules/stickerPackModule/semanticThemeClusterService.js +544 -0
- package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +400 -0
- package/app/modules/stickerPackModule/stickerAssetRepository.js +400 -0
- package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +175 -0
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +3702 -0
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +559 -0
- package/app/modules/stickerPackModule/stickerClassificationService.js +557 -0
- package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +249 -0
- package/app/modules/stickerPackModule/stickerDomainEventBus.js +65 -0
- package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +208 -0
- package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +99 -0
- package/app/modules/stickerPackModule/stickerObjectStorageService.js +285 -0
- package/app/modules/stickerPackModule/stickerPackAiHelpService.js +14 -0
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +1148 -0
- package/app/modules/stickerPackModule/stickerPackConfigRuntime.js +68 -0
- package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +152 -0
- package/app/modules/stickerPackModule/stickerPackErrors.js +30 -0
- package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +101 -0
- package/app/modules/stickerPackModule/stickerPackItemRepository.js +432 -0
- package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +313 -0
- package/app/modules/stickerPackModule/stickerPackMessageService.js +268 -0
- package/app/modules/stickerPackModule/stickerPackRepository.js +450 -0
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +179 -0
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +271 -0
- package/app/modules/stickerPackModule/stickerPackService.js +733 -0
- package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +32 -0
- package/app/modules/stickerPackModule/stickerPackUtils.js +107 -0
- package/app/modules/stickerPackModule/stickerStorageService.js +559 -0
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +242 -0
- package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +242 -0
- package/app/modules/systemMetricsModule/AGENT.md +193 -0
- package/app/modules/systemMetricsModule/commandConfig.json +344 -0
- package/app/modules/systemMetricsModule/pingCommand.js +399 -0
- package/app/modules/systemMetricsModule/systemMetricsAiHelpService.js +14 -0
- package/app/modules/systemMetricsModule/systemMetricsConfigRuntime.js +68 -0
- package/app/modules/tiktokModule/AGENT.md +196 -0
- package/app/modules/tiktokModule/commandConfig.json +366 -0
- package/app/modules/tiktokModule/tiktokAiHelpService.js +14 -0
- package/app/modules/tiktokModule/tiktokCommand.js +716 -0
- package/app/modules/tiktokModule/tiktokConfigRuntime.js +68 -0
- package/app/modules/userModule/AGENT.md +200 -0
- package/app/modules/userModule/commandConfig.json +386 -0
- package/app/modules/userModule/userAiHelpService.js +14 -0
- package/app/modules/userModule/userCommand.js +1155 -0
- package/app/modules/userModule/userConfigRuntime.js +68 -0
- package/app/modules/waifuPicsModule/AGENT.md +431 -0
- package/app/modules/waifuPicsModule/commandConfig.json +780 -0
- package/app/modules/waifuPicsModule/waifuPicsAiHelpService.js +14 -0
- package/app/modules/waifuPicsModule/waifuPicsCommand.js +586 -0
- package/app/modules/waifuPicsModule/waifuPicsConfigRuntime.js +68 -0
- package/app/observability/metrics.js +766 -0
- package/app/services/ai/aiHelpResponseCacheRepository.js +280 -0
- package/app/services/ai/aiLearningRepository.js +400 -0
- package/app/services/ai/commandConfigEnrichmentRepository.js +769 -0
- package/app/services/ai/commandConfigEnrichmentService.js +452 -0
- package/app/services/ai/commandConfigValidationService.js +443 -0
- package/app/services/ai/commandToolBuilderService.js +192 -0
- package/app/services/ai/conversationRouterService.js +516 -0
- package/app/services/ai/geminiService.js +115 -0
- package/app/services/ai/geminiService.test.js +87 -0
- package/app/services/ai/globalModuleAiHelpService.js +1412 -0
- package/app/services/ai/globalToolCallingService.js +203 -0
- package/app/services/ai/messageCommandExecutionService.js +391 -0
- package/app/services/ai/moduleAiHelpCoreService.js +1099 -0
- package/app/services/ai/moduleAiHelpWrapperFactory.js +65 -0
- package/app/services/ai/moduleCommandConfigRuntimeService.js +113 -0
- package/app/services/ai/moduleToolExecutorService.js +464 -0
- package/app/services/ai/moduleToolRegistryService.js +178 -0
- package/app/services/ai/toolCandidateSelectorService.js +781 -0
- package/app/services/auth/googleWebLinkService.js +80 -0
- package/app/services/auth/whatsappLoginLinkService.js +230 -0
- package/app/services/external/pokeApiService.js +398 -0
- package/app/services/group/groupMetadataService.js +311 -0
- package/app/services/infra/dbWriteQueue.js +874 -0
- package/app/services/infra/featureFlagService.js +131 -0
- package/app/services/infra/queueUtils.js +55 -0
- package/app/services/messaging/captchaService.js +491 -0
- package/app/services/messaging/messagePersistenceService.js +1 -0
- package/app/services/messaging/newsBroadcastService.js +347 -0
- package/app/services/sticker/stickerFocusService.js +347 -0
- package/app/services/sticker/stickerFocusService.test.js +43 -0
- package/app/store/aiPromptStore.js +38 -0
- package/app/store/conversationSessionStore.js +131 -0
- package/app/store/groupConfigStore.js +58 -0
- package/app/store/premiumUserStore.js +54 -0
- package/app/utils/antiLink/antiLinkModule.js +700 -0
- package/app/utils/http/getImageBufferModule.js +18 -0
- package/app/utils/json/jsonSanitizer.js +113 -0
- package/app/utils/json/jsonSanitizer.test.js +40 -0
- package/app/utils/systemMetrics/systemMetricsModule.js +88 -0
- package/app/workers/aiLearningWorker.js +605 -0
- package/app/workers/commandConfigEnrichmentWorker.js +242 -0
- package/database/index.js +2075 -0
- package/database/init.js +151 -0
- package/database/migrations/.gitkeep +0 -0
- package/database/migrations/20260307_d0_hardening_down.sql +64 -0
- package/database/migrations/20260307_d0_hardening_up.sql +79 -0
- package/database/migrations/20260307_d1_terms_acceptance_down.sql +11 -0
- package/database/migrations/20260307_d1_terms_acceptance_up.sql +37 -0
- package/database/migrations/20260307_d2_auth_hardening_down.sql +75 -0
- package/database/migrations/20260307_d2_auth_hardening_up.sql +100 -0
- package/database/migrations/20260314_d7_canonical_sender_down.sql +53 -0
- package/database/migrations/20260314_d7_canonical_sender_up.sql +114 -0
- package/database/migrations/20260406_d30_security_analytics_down.sql +95 -0
- package/database/migrations/20260406_d30_security_analytics_up.sql +292 -0
- package/database/migrations/20260407_d31_web_google_session_token_hardening_down.sql +2 -0
- package/database/migrations/20260407_d31_web_google_session_token_hardening_up.sql +17 -0
- package/database/migrations/20260408_d32_ai_help_response_cache_down.sql +1 -0
- package/database/migrations/20260408_d32_ai_help_response_cache_up.sql +22 -0
- package/database/migrations/20260409_d33_ai_learning_tables_down.sql +4 -0
- package/database/migrations/20260409_d33_ai_learning_tables_up.sql +52 -0
- package/database/migrations/20260410_d34_command_config_enrichment_down.sql +3 -0
- package/database/migrations/20260410_d34_command_config_enrichment_up.sql +48 -0
- package/database/schema.sql +1186 -0
- package/docker-compose.yml +104 -0
- package/docs/audits/stickerCatalogController-out-of-scope.md +103 -0
- package/docs/audits/stickerCatalogController-symbols.md +58 -0
- package/docs/compliance/acceptable-use-policy-2026-03-07.md +35 -0
- package/docs/compliance/dpa-b2b-standard-2026-03-07.md +80 -0
- package/docs/compliance/monthly-compliance-checklist-2026-03-07.md +88 -0
- package/docs/compliance/notice-and-takedown-policy-2026-03-07.md +34 -0
- package/docs/compliance/privacy-policy-2026-03-07.md +75 -0
- package/docs/compliance/subprocessors-inventory-2026-03-07.md +16 -0
- package/docs/database/production-db-evolution-runbook-2026q1.md +365 -0
- package/docs/security/dsar-lgpd-runbook-2026-03-07.md +86 -0
- package/docs/security/incident-response-lgpd-anpd-runbook-2026-03-07.md +77 -0
- package/docs/security/network-hardening-runbook-2026-03-07.md +137 -0
- package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +238 -0
- package/docs/seo/satellite-page-template.md +116 -0
- package/docs/seo/satellite-pages-phase1.json +364 -0
- package/docs/wiki/Home.md +120 -0
- package/docs/wiki/pair-extraordinaire-2026-03-08.md +3 -0
- package/docs/wiki/recent-changes-2026-03-08.md +47 -0
- package/ecosystem.prod.config.cjs +135 -0
- package/eslint.config.js +89 -0
- package/index.js +488 -0
- package/ml/clip_classifier/Dockerfile +18 -0
- package/ml/clip_classifier/README.md +118 -0
- package/ml/clip_classifier/adaptive_scoring.py +40 -0
- package/ml/clip_classifier/classifier.py +654 -0
- package/ml/clip_classifier/embedding_store.py +481 -0
- package/ml/clip_classifier/env_loader.py +15 -0
- package/ml/clip_classifier/llm_label_expander.py +144 -0
- package/ml/clip_classifier/main.py +213 -0
- package/ml/clip_classifier/requirements.txt +10 -0
- package/ml/clip_classifier/similarity_engine.py +74 -0
- package/new-logo.png +0 -0
- package/observability/alert-rules.yml +60 -0
- package/observability/grafana/dashboards/omnizap-mysql.json +136 -0
- package/observability/grafana/dashboards/omnizap-overview.json +170 -0
- package/observability/grafana/provisioning/dashboards/dashboards.yml +11 -0
- package/observability/grafana/provisioning/datasources/datasources.yml +15 -0
- package/observability/loki-config.yml +38 -0
- package/observability/mysql-setup.sql +46 -0
- package/observability/prometheus.yml +35 -0
- package/observability/promtail-config.yml +84 -0
- package/observability/sticker-catalog-slo.md +83 -0
- package/observability/sticker-scale-hardening-rollout.md +128 -0
- package/package.json +144 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/assets/css/commands-react.input.css +71 -0
- package/public/assets/css/create-pack-react.input.css +31 -0
- package/public/assets/css/home-react.input.css +106 -0
- package/public/assets/css/login-react.input.css +58 -0
- package/public/assets/css/stickers-react.input.css +18 -0
- package/public/assets/css/terms-react.input.css +115 -0
- package/public/assets/css/user-react.input.css +57 -0
- package/public/assets/images/brand-icon-192.png +0 -0
- package/public/assets/images/brand-logo-128.webp +0 -0
- package/public/assets/images/hero-banner-1280.jpg +0 -0
- package/public/comandos/commands-catalog.json +4517 -0
- package/public/css/api-docs.css +161 -0
- package/public/css/stickers-admin.css +1288 -0
- package/public/css/styles.css +679 -0
- package/public/css/systemadm/admin.css +474 -0
- package/public/css/systemadm/base.css +73 -0
- package/public/css/systemadm/components.css +662 -0
- package/public/css/systemadm/layout.css +229 -0
- package/public/css/systemadm/tokens.css +56 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/js/apps/apiDocsApp.js +235 -0
- package/public/js/apps/commandsReactApp.js +528 -0
- package/public/js/apps/createPackApp.js +1646 -0
- package/public/js/apps/homeReactApp.js +942 -0
- package/public/js/apps/loginReactApp.js +496 -0
- package/public/js/apps/stickersAdminApp.js +1753 -0
- package/public/js/apps/stickersApp.js +3797 -0
- package/public/js/apps/termsReactApp.js +528 -0
- package/public/js/apps/userApp.js +2540 -0
- package/public/js/apps/userProfile/actions.js +66 -0
- package/public/js/apps/userReactApp.js +547 -0
- package/public/js/catalog.js +950 -0
- package/public/pages/api-docs.html +40 -0
- package/public/pages/aup.html +158 -0
- package/public/pages/comandos.html +41 -0
- package/public/pages/dpa.html +227 -0
- package/public/pages/home.html +45 -0
- package/public/pages/licenca.html +182 -0
- package/public/pages/login.html +40 -0
- package/public/pages/notice-and-takedown.html +234 -0
- package/public/pages/politica-de-privacidade.html +251 -0
- package/public/pages/seo-bot-whatsapp-para-grupo.html +350 -0
- package/public/pages/seo-bot-whatsapp-sem-programar.html +350 -0
- package/public/pages/seo-como-automatizar-avisos-no-whatsapp.html +350 -0
- package/public/pages/seo-como-criar-comandos-whatsapp.html +350 -0
- package/public/pages/seo-como-evitar-spam-no-whatsapp.html +350 -0
- package/public/pages/seo-como-moderar-grupo-whatsapp.html +350 -0
- package/public/pages/seo-como-organizar-comunidade-whatsapp.html +350 -0
- package/public/pages/seo-melhor-bot-whatsapp-para-grupos.html +350 -0
- package/public/pages/stickers-admin.html +31 -0
- package/public/pages/stickers-create.html +41 -0
- package/public/pages/stickers.html +45 -0
- package/public/pages/suboperadores.html +237 -0
- package/public/pages/termos-de-uso-texto-integral.html +241 -0
- package/public/pages/termos-de-uso.html +41 -0
- package/public/pages/user-password-reset.html +32 -0
- package/public/pages/user-systemadm.html +508 -0
- package/public/pages/user.html +39 -0
- package/public/robots.txt +9 -0
- package/public/site.webmanifest +24 -0
- package/public/sitemap.xml +98 -0
- package/schemas/command-config.schema.json +582 -0
- package/scripts/baileys-compat-smoke.mjs +12 -0
- package/scripts/cache-bust.mjs +142 -0
- package/scripts/deploy.sh +916 -0
- package/scripts/email-broadcast-terms-update.mjs +170 -0
- package/scripts/enrich-command-discovery-fields.mjs +286 -0
- package/scripts/generate-command-config-schema.mjs +273 -0
- package/scripts/generate-commands-catalog.mjs +308 -0
- package/scripts/generate-module-agents.mjs +631 -0
- package/scripts/generate-seo-satellite-pages.mjs +400 -0
- package/scripts/github-deploy-notify.mjs +174 -0
- package/scripts/github-release-notify.mjs +219 -0
- package/scripts/release.sh +599 -0
- package/scripts/run-codeql-local.sh +116 -0
- package/scripts/run-prettier-all.mjs +25 -0
- package/scripts/security-smoketest.mjs +581 -0
- package/scripts/sticker-catalog-loadtest.mjs +210 -0
- package/scripts/sticker-worker-task.mjs +119 -0
- package/scripts/sync-readme-snapshot.mjs +133 -0
- package/scripts/validate-command-config-schema.mjs +130 -0
- package/scripts/validate-command-configs.mjs +15 -0
- package/scripts/wiki-sync.sh +191 -0
- package/server/auth/googleWebAuth/googleWebAuthRuntime.js +62 -0
- package/server/auth/googleWebAuth/googleWebAuthService.js +807 -0
- package/server/auth/jwt/webJwtService.js +147 -0
- package/server/auth/stickerCatalogAuthContext.js +165 -0
- package/server/auth/termsAcceptance/termsAcceptanceHandler.js +189 -0
- package/server/auth/userPassword/index.js +14 -0
- package/server/auth/userPassword/userPasswordAuthService.js +422 -0
- package/server/auth/userPassword/userPasswordCrypto.js +199 -0
- package/server/auth/userPassword/userPasswordCrypto.test.js +76 -0
- package/server/auth/userPassword/userPasswordRecoveryService.js +728 -0
- package/server/auth/validation/authSchemas.js +236 -0
- package/server/auth/webAccount/webAccountHandlers.js +1434 -0
- package/server/controllers/admin/adminBanService.js +138 -0
- package/server/controllers/admin/adminPanelHandlers.js +2083 -0
- package/server/controllers/admin/stickerCatalogAdminContext.js +17 -0
- package/server/controllers/admin/systemAdminController.js +201 -0
- package/server/controllers/email/emailAutomationController.js +239 -0
- package/server/controllers/metricsController.js +21 -0
- package/server/controllers/seo/stickerCatalogSeoContext.js +514 -0
- package/server/controllers/sticker/nonCatalogHandlers.js +303 -0
- package/server/controllers/sticker/stickerCatalogController.js +4700 -0
- package/server/controllers/system/contactController.js +115 -0
- package/server/controllers/system/githubController.js +137 -0
- package/server/controllers/system/stickerCatalogSystemContext.js +758 -0
- package/server/controllers/system/storageController.js +154 -0
- package/server/controllers/system/systemController.js +135 -0
- package/server/controllers/system/systemMetricsController.js +156 -0
- package/server/controllers/system/visitController.js +90 -0
- package/server/controllers/userController.js +145 -0
- package/server/email/emailAutomationRuntime.js +225 -0
- package/server/email/emailAutomationService.js +125 -0
- package/server/email/emailOutboxRepository.js +282 -0
- package/server/email/emailTemplateService.js +480 -0
- package/server/email/emailTransportService.js +156 -0
- package/server/http/clientIp.js +95 -0
- package/server/http/httpRequestUtils.js +262 -0
- package/server/http/httpRequestUtils.test.js +80 -0
- package/server/http/httpServer.js +180 -0
- package/server/http/requestContext.js +20 -0
- package/server/http/siteRoutingUtils.js +87 -0
- package/server/index.js +1 -0
- package/server/middleware/cachePolicy.js +26 -0
- package/server/middleware/cachePolicyHelpers.js +1 -0
- package/server/middleware/endpointRateLimit.js +181 -0
- package/server/middleware/rateLimit.js +70 -0
- package/server/middleware/requireAdminAuth.js +48 -0
- package/server/middleware/securityHeaders.js +97 -0
- package/server/routes/admin/systemAdminRouter.js +64 -0
- package/server/routes/email/emailAutomationRouter.js +46 -0
- package/server/routes/health/healthRouter.js +41 -0
- package/server/routes/indexRouter.js +234 -0
- package/server/routes/metrics/metricsRouter.js +58 -0
- package/server/routes/static/staticPageRouter.js +134 -0
- package/server/routes/sticker/catalogHandlers/catalogAdminHttp.js +105 -0
- package/server/routes/sticker/catalogHandlers/catalogAuthHttp.js +77 -0
- package/server/routes/sticker/catalogHandlers/catalogPublicHttp.js +120 -0
- package/server/routes/sticker/catalogHandlers/catalogUploadHttp.js +83 -0
- package/server/routes/sticker/catalogRouter.js +77 -0
- package/server/routes/sticker/stickerApiRouter.js +84 -0
- package/server/routes/sticker/stickerDataRouter.js +145 -0
- package/server/routes/sticker/stickerSiteRouter.js +43 -0
- package/server/routes/user/userApiPaths.js +66 -0
- package/server/routes/user/userRouter.js +65 -0
- package/server/utils/safePath.js +26 -0
- package/utils/logger/loggerModule.js +35 -0
- package/vite.config.mjs +38 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generated_at": "2026-02-28",
|
|
3
|
+
"pages": [
|
|
4
|
+
{
|
|
5
|
+
"slug": "bot-whatsapp-para-grupo",
|
|
6
|
+
"title": "Bot para Grupo de WhatsApp | OmniZap pronto para usar",
|
|
7
|
+
"description": "Descubra como usar um bot para grupo de WhatsApp sem configuração técnica. Adicione o OmniZap, organize conversas e ative automações em minutos.",
|
|
8
|
+
"keywords": ["bot para grupo whatsapp", "bot whatsapp pronto", "automação para grupos", "moderação grupo whatsapp"],
|
|
9
|
+
"h1": "Bot para grupo de WhatsApp: adicione e use em minutos",
|
|
10
|
+
"intro": "Se você administra grupo no WhatsApp, o principal desafio é manter organização sem perder tempo com tarefas repetidas. Com OmniZap, você adiciona o bot e começa a automatizar de forma imediata.",
|
|
11
|
+
"intent_label": "Solução pronta",
|
|
12
|
+
"sections": [
|
|
13
|
+
{
|
|
14
|
+
"title": "O que você ganha com um bot pronto",
|
|
15
|
+
"paragraphs": ["Um bot pronto reduz o trabalho manual de quem cuida do grupo todos os dias.", "Em vez de repetir avisos, apagar spam e responder sempre as mesmas perguntas, o grupo passa a operar com regras e fluxos automáticos."],
|
|
16
|
+
"bullets": ["Respostas automáticas para perguntas frequentes", "Avisos recorrentes sem trabalho manual", "Grupo mais organizado e profissional"]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"title": "Como começar sem configuração técnica",
|
|
20
|
+
"paragraphs": ["O processo é simples: abrir o bot, adicionar no grupo e autorizar.", "Depois disso, recursos como moderação e automação já podem ser usados sem programar."]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"title": "Quando usar stickers dentro do bot",
|
|
24
|
+
"paragraphs": ["Stickers ajudam no engajamento e fazem parte do ecossistema OmniZap.", "Você pode combinar organização do grupo com recursos de interação para manter a comunidade ativa."]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"faq": [
|
|
28
|
+
{
|
|
29
|
+
"q": "Preciso saber programação para usar o bot?",
|
|
30
|
+
"a": "Não. O uso padrão do OmniZap é pronto para usuário final e não exige código."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"q": "Em quanto tempo o bot fica ativo no grupo?",
|
|
34
|
+
"a": "Em geral, em menos de 1 minuto após adicionar e autorizar."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"q": "Onde vejo os stickers disponíveis?",
|
|
38
|
+
"a": "O catálogo fica em /stickers/ e pode ser usado como recurso extra no grupo."
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"related_links": [
|
|
42
|
+
{ "href": "/como-moderar-grupo-whatsapp/", "label": "Como moderar grupo no WhatsApp" },
|
|
43
|
+
{ "href": "/como-evitar-spam-no-whatsapp/", "label": "Como evitar spam no WhatsApp" },
|
|
44
|
+
{
|
|
45
|
+
"href": "/melhor-bot-whatsapp-para-grupos/",
|
|
46
|
+
"label": "Melhor bot para grupos: guia rápido"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"slug": "como-moderar-grupo-whatsapp",
|
|
52
|
+
"title": "Como moderar grupo no WhatsApp com bot | Guia prático",
|
|
53
|
+
"description": "Aprenda como moderar grupo no WhatsApp com menos trabalho manual. Use bot pronto para bloquear spam, organizar regras e manter conversa produtiva.",
|
|
54
|
+
"keywords": ["como moderar grupo whatsapp", "bot para moderar grupo", "organização de grupo whatsapp"],
|
|
55
|
+
"h1": "Como moderar grupo no WhatsApp sem sobrecarga",
|
|
56
|
+
"intro": "Moderação manual funciona no inicio, mas quebra quando o grupo cresce. O caminho mais eficiente é automatizar regras básicas com um bot pronto.",
|
|
57
|
+
"intent_label": "Guia de dor",
|
|
58
|
+
"sections": [
|
|
59
|
+
{
|
|
60
|
+
"title": "Problemas comuns em grupos sem moderação",
|
|
61
|
+
"paragraphs": ["Quando não existe rotina de moderação, o grupo perde foco rápido.", "Mensagem fora de contexto, links em excesso e repetição de conflitos viram padrão."],
|
|
62
|
+
"bullets": ["Spam de links e divulgações", "Perguntas repetidas sem resposta padrão", "Administrador sobrecarregado"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"title": "O que automatizar primeiro",
|
|
66
|
+
"paragraphs": ["Comece por regras simples: aviso de boas-vindas, lembrete de regras e bloqueio de comportamento abusivo.", "Esses três pontos já elevam a qualidade do grupo sem aumentar custo operacional."]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"title": "Moderação com previsibilidade",
|
|
70
|
+
"paragraphs": ["Com o bot ativo, você cria padrão de operação para o grupo.", "Isso reduz desgaste da equipe e melhora a experiência de quem participa."]
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"faq": [
|
|
74
|
+
{
|
|
75
|
+
"q": "Dá para moderar grupo sem ficar online o tempo todo?",
|
|
76
|
+
"a": "Sim. O bot executa regras automáticas e reduz a dependência de moderação manual constante."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"q": "Posso combinar moderação e avisos automáticos?",
|
|
80
|
+
"a": "Sim. Essa combinação costuma ser o melhor ponto de partida para grupos em crescimento."
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"q": "Onde vejo recursos técnicos avançados?",
|
|
84
|
+
"a": "A documentação de integração está em /api-docs/."
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"related_links": [
|
|
88
|
+
{ "href": "/como-evitar-spam-no-whatsapp/", "label": "Como evitar spam no WhatsApp" },
|
|
89
|
+
{
|
|
90
|
+
"href": "/como-organizar-comunidade-whatsapp/",
|
|
91
|
+
"label": "Como organizar comunidade no WhatsApp"
|
|
92
|
+
},
|
|
93
|
+
{ "href": "/bot-whatsapp-para-grupo/", "label": "Bot para grupo de WhatsApp" }
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"slug": "como-evitar-spam-no-whatsapp",
|
|
98
|
+
"title": "Como evitar spam no WhatsApp com bot pronto",
|
|
99
|
+
"description": "Guia rápido para reduzir spam em grupos de WhatsApp com bot pronto. Veja regras essenciais e práticas para manter o grupo limpo e produtivo.",
|
|
100
|
+
"keywords": ["como evitar spam whatsapp", "bot anti spam whatsapp", "moderação whatsapp"],
|
|
101
|
+
"h1": "Como evitar spam no WhatsApp sem travar seu grupo",
|
|
102
|
+
"intro": "Spam derruba a qualidade das conversas e afasta membros importantes. Com um bot pronto, você cria barreiras simples para proteger o grupo sem burocracia.",
|
|
103
|
+
"intent_label": "Guia anti-spam",
|
|
104
|
+
"sections": [
|
|
105
|
+
{
|
|
106
|
+
"title": "Por que spam cresce tao rápido",
|
|
107
|
+
"paragraphs": ["Grupos ativos atraem divulgações, correntes e mensagens repetidas.", "Sem automação, o admin entra em modo reativo e sempre chega tarde."]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"title": "Regras que resolvem no curto prazo",
|
|
111
|
+
"paragraphs": ["Defina filtros para links suspeitos e mensagens de repetição em massa.", "Ative respostas automáticas para orientar novos membros sobre comportamento esperado."],
|
|
112
|
+
"bullets": ["Bloqueio de padrões de spam", "Aviso automático de regras", "Acompanhamento contínuo sem intervenção manual"]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"title": "Resultado esperado",
|
|
116
|
+
"paragraphs": ["Com menos spam, o grupo ganha ritmo e relevância.", "Isso aumenta retenção da comunidade e melhora a confiança no canal."]
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"faq": [
|
|
120
|
+
{
|
|
121
|
+
"q": "O bot bloqueia todo tipo de spam automaticamente?",
|
|
122
|
+
"a": "Ele cobre os casos mais comuns e pode ser ajustado conforme o perfil do grupo."
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"q": "Spam reduz quando o bot entra?",
|
|
126
|
+
"a": "Na prática, a queda costuma ser imediata após ativar regras básicas."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"q": "Posso manter recursos de engajamento junto com anti-spam?",
|
|
130
|
+
"a": "Sim. Você pode usar moderação e stickers no mesmo fluxo de grupo."
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"related_links": [
|
|
134
|
+
{ "href": "/como-moderar-grupo-whatsapp/", "label": "Como moderar grupo no WhatsApp" },
|
|
135
|
+
{
|
|
136
|
+
"href": "/como-automatizar-avisos-no-whatsapp/",
|
|
137
|
+
"label": "Como automatizar avisos no WhatsApp"
|
|
138
|
+
},
|
|
139
|
+
{ "href": "/bot-whatsapp-sem-programar/", "label": "Bot sem programar" }
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"slug": "como-organizar-comunidade-whatsapp",
|
|
144
|
+
"title": "Como organizar comunidade no WhatsApp com automação",
|
|
145
|
+
"description": "Veja como organizar comunidade no WhatsApp com bot pronto: regras claras, avisos automáticos e menos ruído nas conversas.",
|
|
146
|
+
"keywords": ["organizar comunidade whatsapp", "bot para comunidade", "automação whatsapp grupo"],
|
|
147
|
+
"h1": "Como organizar comunidade no WhatsApp de forma prática",
|
|
148
|
+
"intro": "Comunidade forte precisa de rotina. Quando a operação depende só de humanos, a comunicação fica inconsistente. A automação ajuda a manter padrão e previsibilidade.",
|
|
149
|
+
"intent_label": "Guia de organização",
|
|
150
|
+
"sections": [
|
|
151
|
+
{
|
|
152
|
+
"title": "Estrutura mínima para comunidade",
|
|
153
|
+
"paragraphs": ["Toda comunidade precisa de boas-vindas, regras visíveis e canal de avisos.", "Com bot pronto, essa estrutura roda de forma contínua, mesmo com alto volume de mensagens."]
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"title": "Automação que melhora experiência",
|
|
157
|
+
"paragraphs": ["Ajuste respostas para perguntas recorrentes e reduza fricção de suporte.", "Use lembretes automáticos para horários, eventos e combinados da comunidade."],
|
|
158
|
+
"bullets": ["Menos ruído", "Mais clareza", "Tempo da equipe preservado"]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"title": "Escala sem perder qualidade",
|
|
162
|
+
"paragraphs": ["Quando os processos básicos estao automatizados, a comunidade cresce com menos caos.", "Isso permite que admins foquem em conteúdo, relacionamento e crescimento."]
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"faq": [
|
|
166
|
+
{
|
|
167
|
+
"q": "Esse modelo serve para comunidades pequenas?",
|
|
168
|
+
"a": "Sim. Quanto antes automatizar, mais fácil manter padrão quando a comunidade crescer."
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"q": "Posso usar o bot em comunidade e grupos ao mesmo tempo?",
|
|
172
|
+
"a": "Sim. O bot pode apoiar diferentes contextos de operação no WhatsApp."
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"q": "Onde encontro os recursos extras do ecossistema?",
|
|
176
|
+
"a": "Você pode explorar stickers e recursos complementares em /stickers/."
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
"related_links": [
|
|
180
|
+
{
|
|
181
|
+
"href": "/como-automatizar-avisos-no-whatsapp/",
|
|
182
|
+
"label": "Automatizar avisos no WhatsApp"
|
|
183
|
+
},
|
|
184
|
+
{ "href": "/como-moderar-grupo-whatsapp/", "label": "Moderação de grupos" },
|
|
185
|
+
{ "href": "/bot-whatsapp-para-grupo/", "label": "Bot para grupo" }
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"slug": "como-automatizar-avisos-no-whatsapp",
|
|
190
|
+
"title": "Como automatizar avisos no WhatsApp | Guia rápido",
|
|
191
|
+
"description": "Aprenda como automatizar avisos no WhatsApp para grupos e comunidades. Envie lembretes com consistência e reduza falhas de comunicação.",
|
|
192
|
+
"keywords": ["automatizar avisos whatsapp", "lembrete automático whatsapp", "bot para avisos"],
|
|
193
|
+
"h1": "Como automatizar avisos no WhatsApp sem esquecer recados",
|
|
194
|
+
"intro": "Avisos manuais dependem de memória e disponibilidade. Com automação, o grupo recebe recados importantes no horário certo, todos os dias.",
|
|
195
|
+
"intent_label": "Guia de automação",
|
|
196
|
+
"sections": [
|
|
197
|
+
{
|
|
198
|
+
"title": "Quando avisos automáticos fazem diferença",
|
|
199
|
+
"paragraphs": ["Reuniões, eventos, prazos e lembretes recorrentes são casos clássicos.", "A automação evita falha humana e melhora a confiança do grupo na comunicação."]
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"title": "Modelo simples para começar",
|
|
203
|
+
"paragraphs": ["Defina os avisos que mais se repetem e padronize mensagem e frequência.", "Com bot pronto, esse fluxo roda sem precisar montar infraestrutura própria."],
|
|
204
|
+
"bullets": ["Recados diários", "Lembretes antes de eventos", "Avisos fixos para novos membros"]
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"title": "Ganhos para admins e membros",
|
|
208
|
+
"paragraphs": ["Admin ganha tempo para tarefas estratégicas.", "Membros recebem informação no momento certo, com menos retrabalho."]
|
|
209
|
+
}
|
|
210
|
+
],
|
|
211
|
+
"faq": [
|
|
212
|
+
{
|
|
213
|
+
"q": "Automatizar aviso deixa o grupo robotizado?",
|
|
214
|
+
"a": "Não. A ideia é automatizar o repetitivo e liberar tempo para interação humana de qualidade."
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"q": "Posso combinar avisos com moderação?",
|
|
218
|
+
"a": "Sim. Essa combinação é recomendada para grupos ativos."
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"q": "Existe modo avançado para integração técnica?",
|
|
222
|
+
"a": "Sim. A documentação para cenários avançados está em /api-docs/."
|
|
223
|
+
}
|
|
224
|
+
],
|
|
225
|
+
"related_links": [
|
|
226
|
+
{
|
|
227
|
+
"href": "/como-organizar-comunidade-whatsapp/",
|
|
228
|
+
"label": "Organizar comunidade no WhatsApp"
|
|
229
|
+
},
|
|
230
|
+
{ "href": "/como-evitar-spam-no-whatsapp/", "label": "Evitar spam no WhatsApp" },
|
|
231
|
+
{ "href": "/bot-whatsapp-sem-programar/", "label": "Bot sem programar" }
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"slug": "como-criar-comandos-whatsapp",
|
|
236
|
+
"title": "Como criar comandos no WhatsApp com bot pronto",
|
|
237
|
+
"description": "Entenda como criar e usar comandos no WhatsApp para acelerar atendimento e organização de grupos com bot pronto para uso.",
|
|
238
|
+
"keywords": ["comandos whatsapp", "bot com comandos", "automação de respostas whatsapp"],
|
|
239
|
+
"h1": "Como criar comandos no WhatsApp sem complicar",
|
|
240
|
+
"intro": "Comandos ajudam a transformar tarefas repetidas em respostas rápidas. Em vez de digitar tudo manualmente, você ativa rotinas com poucas palavras.",
|
|
241
|
+
"intent_label": "Guia de operação",
|
|
242
|
+
"sections": [
|
|
243
|
+
{
|
|
244
|
+
"title": "Por que comandos economizam tempo",
|
|
245
|
+
"paragraphs": ["Em grupos ativos, as mesmas perguntas aparecem muitas vezes.", "Com comando pronto, o admin responde com consistência e reduz desgaste da equipe."]
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"title": "Boas práticas de comandos",
|
|
249
|
+
"paragraphs": ["Use nomes curtos e intuitivos.", "Padronize respostas para regras, horários, links oficiais e orientações internas."],
|
|
250
|
+
"bullets": ["Comando de menu", "Comando de regras", "Comando de suporte"]
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"title": "Comandos + moderação + avisos",
|
|
254
|
+
"paragraphs": ["Quando essas três camadas trabalham juntas, a operação fica muito mais previsível.", "Esse é o caminho mais rápido para profissionalizar grupos e comunidades."]
|
|
255
|
+
}
|
|
256
|
+
],
|
|
257
|
+
"faq": [
|
|
258
|
+
{
|
|
259
|
+
"q": "Preciso programar para ter comandos no grupo?",
|
|
260
|
+
"a": "Não para uso comum. O bot pronto entrega comandos básicos sem necessidade de código."
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"q": "Comando serve apenas para grupos grandes?",
|
|
264
|
+
"a": "Não. Mesmo grupos pequenos ganham produtividade com respostas padronizadas."
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"q": "Posso integrar comandos com API depois?",
|
|
268
|
+
"a": "Sim. Se precisar evoluir para integração, use a Área de Desenvolvedor em /api-docs/."
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
"related_links": [
|
|
272
|
+
{ "href": "/como-moderar-grupo-whatsapp/", "label": "Moderação de grupo" },
|
|
273
|
+
{ "href": "/como-automatizar-avisos-no-whatsapp/", "label": "Automatizar avisos" },
|
|
274
|
+
{ "href": "/melhor-bot-whatsapp-para-grupos/", "label": "Como escolher o melhor bot" }
|
|
275
|
+
]
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"slug": "melhor-bot-whatsapp-para-grupos",
|
|
279
|
+
"title": "Melhor bot para WhatsApp em grupos | Como escolher",
|
|
280
|
+
"description": "Compare critérios para escolher o melhor bot para grupos de WhatsApp. Veja o que avaliar em moderação, automação e facilidade de uso.",
|
|
281
|
+
"keywords": ["melhor bot whatsapp", "bot para grupos", "comparativo bot whatsapp"],
|
|
282
|
+
"h1": "Melhor bot para grupos de WhatsApp: o que realmente importa",
|
|
283
|
+
"intro": "Escolher bot só por nome de marca costuma gerar retrabalho. O critério certo é avaliar resultado operacional: menos caos, menos spam e mais organização.",
|
|
284
|
+
"intent_label": "Comparativo prático",
|
|
285
|
+
"sections": [
|
|
286
|
+
{
|
|
287
|
+
"title": "Critérios que importam na prática",
|
|
288
|
+
"paragraphs": ["Facilidade de entrada, moderação automática e rotina de avisos são os pilares mais importantes.", "Se o bot exigir setup técnico complexo, a adoção no dia a dia tende a cair."],
|
|
289
|
+
"bullets": ["Tempo para entrar em operação", "Qualidade da moderação", "Capacidade de escalar com o grupo"]
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"title": "Sinal de escolha certa",
|
|
293
|
+
"paragraphs": ["A equipe gasta menos tempo apagando incêndio e mais tempo gerando valor para membros.", "Quando o grupo fica previsível, a percepção de profissionalismo sobe."]
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"title": "Como testar rápido",
|
|
297
|
+
"paragraphs": ["Defina um grupo piloto e acompanhe 7 dias de operação.", "Meça redução de spam, clareza de comunicação e tempo economizado por admin."]
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
"faq": [
|
|
301
|
+
{
|
|
302
|
+
"q": "Existe melhor bot universal para todo cenário?",
|
|
303
|
+
"a": "Não. O melhor bot depende do problema principal do seu grupo e da facilidade de adoção."
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"q": "Vale priorizar bot sem configuração técnica?",
|
|
307
|
+
"a": "Sim, especialmente para times que precisam de velocidade e previsibilidade."
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"q": "Onde encontro módulo de stickers para engajamento?",
|
|
311
|
+
"a": "No catálogo em /stickers/."
|
|
312
|
+
}
|
|
313
|
+
],
|
|
314
|
+
"related_links": [
|
|
315
|
+
{ "href": "/bot-whatsapp-para-grupo/", "label": "Bot para grupo" },
|
|
316
|
+
{ "href": "/bot-whatsapp-sem-programar/", "label": "Bot sem programar" },
|
|
317
|
+
{ "href": "/como-moderar-grupo-whatsapp/", "label": "Guia de moderação" }
|
|
318
|
+
]
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"slug": "bot-whatsapp-sem-programar",
|
|
322
|
+
"title": "Bot para WhatsApp sem programar | OmniZap",
|
|
323
|
+
"description": "Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderação, avisos e organização em poucos passos.",
|
|
324
|
+
"keywords": ["bot whatsapp sem programar", "bot pronto whatsapp", "automação whatsapp sem código"],
|
|
325
|
+
"h1": "Bot para WhatsApp sem programar: resultado rápido",
|
|
326
|
+
"intro": "Nem toda equipe tem tempo para setup técnico. Por isso o modelo sem código é o caminho mais rápido para automatizar grupos e comunidades.",
|
|
327
|
+
"intent_label": "Sem código",
|
|
328
|
+
"sections": [
|
|
329
|
+
{
|
|
330
|
+
"title": "Por que sem código acelera",
|
|
331
|
+
"paragraphs": ["Quando o foco é operação, velocidade vale mais do que arquitetura complexa.", "Com bot pronto, você elimina barreiras técnicas e entra em produção no mesmo dia."]
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"title": "Aplicacoes imediatas",
|
|
335
|
+
"paragraphs": ["Moderar spam, enviar avisos e padronizar respostas são as três aplicações mais comuns.", "Esses ganhos aparecem rápido, mesmo em grupos pequenos."],
|
|
336
|
+
"bullets": ["Operação em minutos", "Menos dependência técnica", "Escala com baixo atrito"]
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"title": "Evolução futura",
|
|
340
|
+
"paragraphs": ["Se no futuro você precisar de integrações avançadas, pode usar a API.", "Assim você começa simples e evolui sem trocar de ecossistema."]
|
|
341
|
+
}
|
|
342
|
+
],
|
|
343
|
+
"faq": [
|
|
344
|
+
{
|
|
345
|
+
"q": "Sem programar significa sem personalização?",
|
|
346
|
+
"a": "Não. Você pode ajustar fluxo e mensagens sem precisar escrever código."
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"q": "Esse modelo atende lojas e comunidades?",
|
|
350
|
+
"a": "Sim. É um modelo versátil para operações diferentes dentro do WhatsApp."
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"q": "Posso usar stickers nesse fluxo sem código?",
|
|
354
|
+
"a": "Sim. O módulo de stickers pode ser usado como recurso de engajamento complementar."
|
|
355
|
+
}
|
|
356
|
+
],
|
|
357
|
+
"related_links": [
|
|
358
|
+
{ "href": "/bot-whatsapp-para-grupo/", "label": "Bot para grupos" },
|
|
359
|
+
{ "href": "/como-evitar-spam-no-whatsapp/", "label": "Evitar spam" },
|
|
360
|
+
{ "href": "/como-criar-comandos-whatsapp/", "label": "Comandos no WhatsApp" }
|
|
361
|
+
]
|
|
362
|
+
}
|
|
363
|
+
]
|
|
364
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# OmniZap Wiki
|
|
2
|
+
|
|
3
|
+
Bem-vindo à wiki oficial do **OmniZap System**.
|
|
4
|
+
|
|
5
|
+
Esta página é o ponto de entrada para entender o projeto, subir o ambiente local e navegar pelos principais fluxos técnicos e operacionais.
|
|
6
|
+
|
|
7
|
+
## Status Atual
|
|
8
|
+
|
|
9
|
+
- Versão do projeto: `2.5.6`
|
|
10
|
+
- Snapshot desta wiki: `2026-03-08`
|
|
11
|
+
- Roadmap técnico recente: consolidação de configuração/tempo de execução do bot e redução de duplicação entre controlador/socket.
|
|
12
|
+
|
|
13
|
+
## Links rápidos
|
|
14
|
+
|
|
15
|
+
- Repositório: https://github.com/Omnizap-System/omnizap
|
|
16
|
+
- Site: https://omnizap.shop/
|
|
17
|
+
- Login web: https://omnizap.shop/login/
|
|
18
|
+
- API Docs: https://omnizap.shop/api-docs/
|
|
19
|
+
- Termos: https://omnizap.shop/termos-de-uso/
|
|
20
|
+
- Segurança: https://github.com/Omnizap-System/omnizap/blob/main/SECURITY.md
|
|
21
|
+
- Código de Conduta: https://github.com/Omnizap-System/omnizap/blob/main/CODE_OF_CONDUCT.md
|
|
22
|
+
|
|
23
|
+
## O que é o OmniZap
|
|
24
|
+
|
|
25
|
+
O OmniZap é uma plataforma open source com 3 camadas principais:
|
|
26
|
+
|
|
27
|
+
1. Bot WhatsApp (Baileys): comandos, automações e eventos.
|
|
28
|
+
2. Camada web: login, painel de usuário e catálogo de stickers.
|
|
29
|
+
3. Camada de dados e operação: MySQL, workers, métricas e deploy.
|
|
30
|
+
|
|
31
|
+
## Quick Start (local)
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install
|
|
35
|
+
cp .env.example .env
|
|
36
|
+
npm run db:init
|
|
37
|
+
npm run build:frontend
|
|
38
|
+
npm run dev
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Rotas úteis após subir:
|
|
42
|
+
|
|
43
|
+
- `http://localhost:3000/healthz`
|
|
44
|
+
- `http://localhost:3000/readyz`
|
|
45
|
+
- `http://localhost:3000/metrics`
|
|
46
|
+
|
|
47
|
+
## Mapa rápido de arquitetura
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
WhatsApp (Baileys)
|
|
51
|
+
-> app/connection + app/controllers + app/modules
|
|
52
|
+
-> app/services (persistência, filas, login-link, integrações)
|
|
53
|
+
-> database/ (MySQL)
|
|
54
|
+
|
|
55
|
+
HTTP Server
|
|
56
|
+
-> server/routes/*
|
|
57
|
+
-> public/ (páginas web)
|
|
58
|
+
|
|
59
|
+
Operação
|
|
60
|
+
-> scripts/
|
|
61
|
+
-> observability/ (Prometheus, Grafana, Loki)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Mudanças Recentes
|
|
65
|
+
|
|
66
|
+
- Refatoração de configuração: entrada unificada em `app/config/index.js` com reexport de `app/configParts/*`.
|
|
67
|
+
- Consolidação de estado/socket/LID no `baileysConfig` e sincronização de consumo em:
|
|
68
|
+
- `app/connection/socketController.js`
|
|
69
|
+
- `app/controllers/messageController.js`
|
|
70
|
+
- Remoção de arquivo órfão de middleware HTTP:
|
|
71
|
+
- `server/middleware/requestLogger.js`
|
|
72
|
+
- Atualização dos audits de `stickerCatalogController` para novo snapshot.
|
|
73
|
+
- Atualização do runbook de banco para incluir migrações `d31` a `d34`.
|
|
74
|
+
|
|
75
|
+
## Navegação da wiki
|
|
76
|
+
|
|
77
|
+
Páginas recomendadas para criar/expandir em seguida:
|
|
78
|
+
|
|
79
|
+
- `[[Arquitetura]]`
|
|
80
|
+
- `[[Setup-Local]]`
|
|
81
|
+
- `[[Configuração-.env]]`
|
|
82
|
+
- `[[Bot-e-Comandos]]`
|
|
83
|
+
- `[[Autenticação-Web-e-Login-com-Google]]`
|
|
84
|
+
- `[[Deploy-e-Operação]]`
|
|
85
|
+
- `[[Observabilidade]]`
|
|
86
|
+
- `[[Troubleshooting]]`
|
|
87
|
+
- `[[Contribuição-e-Padrões]]`
|
|
88
|
+
- `[[Segurança-e-Resposta-a-Incidentes]]`
|
|
89
|
+
|
|
90
|
+
## Governança de documentação
|
|
91
|
+
|
|
92
|
+
- Prefira exemplos executáveis (comandos reais e verificáveis).
|
|
93
|
+
- Sempre documente impacto de configurações em `.env`.
|
|
94
|
+
- Ao mudar fluxo de módulo/serviço, atualize README + wiki + runbooks.
|
|
95
|
+
- Evite duplicar regra de negócio: referencie arquivo-fonte quando possível.
|
|
96
|
+
- Mantenha data de atualização ao final da página.
|
|
97
|
+
|
|
98
|
+
## Referências internas
|
|
99
|
+
|
|
100
|
+
- README principal: `README.md`
|
|
101
|
+
- Runbook de evolução de banco: `docs/database/production-db-evolution-runbook-2026q1.md`
|
|
102
|
+
- Runbook de hardening de rede: `docs/security/network-hardening-runbook-2026-03-07.md`
|
|
103
|
+
- Runbook de incidentes LGPD/ANPD: `docs/security/incident-response-lgpd-anpd-runbook-2026-03-07.md`
|
|
104
|
+
- Checklist mensal de compliance: `docs/compliance/monthly-compliance-checklist-2026-03-07.md`
|
|
105
|
+
- Playbook SEO BR: `docs/seo/omnizap-seo-playbook-br-2026-02-28.md`
|
|
106
|
+
- Template de páginas satélite: `docs/seo/satellite-page-template.md`
|
|
107
|
+
- Mudanças recentes (detalhado): `docs/wiki/recent-changes-2026-03-08.md`
|
|
108
|
+
- Audit (escopo): `docs/audits/stickerCatalogController-out-of-scope.md`
|
|
109
|
+
- Audit (símbolos): `docs/audits/stickerCatalogController-symbols.md`
|
|
110
|
+
|
|
111
|
+
## Referências externas úteis
|
|
112
|
+
|
|
113
|
+
- Node.js Docs: https://nodejs.org/docs/latest/api/
|
|
114
|
+
- MySQL 8.0 Reference Manual: https://dev.mysql.com/doc/refman/8.0/en/
|
|
115
|
+
- Prometheus Docs: https://prometheus.io/docs/introduction/overview/
|
|
116
|
+
- Grafana Docs: https://grafana.com/docs/
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
Última atualização: `2026-03-08`
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Mudancas Recentes do Projeto (2026-03-08)
|
|
2
|
+
|
|
3
|
+
Referencia de versao: `v2.5.6`
|
|
4
|
+
|
|
5
|
+
## Commits de referencia
|
|
6
|
+
|
|
7
|
+
- `bce359e` chore: remove unused request logger middleware
|
|
8
|
+
- `3f181ea` refactor: centralize config and sync baileys/socket/message helpers
|
|
9
|
+
- `059c84d` feat(ai-help): support v2 command schema and regenerate module agents
|
|
10
|
+
- `49af593` refactor: migrate command configs to v2 and harden validation
|
|
11
|
+
- `de0ec01` feat: add script to generate commands catalog in JSON format
|
|
12
|
+
|
|
13
|
+
## Principais mudancas tecnicas
|
|
14
|
+
|
|
15
|
+
1. Configuracao e runtime do bot consolidados
|
|
16
|
+
|
|
17
|
+
- Entrada unica em `app/config/index.js`.
|
|
18
|
+
- Partes de configuracao organizadas em:
|
|
19
|
+
- `app/configParts/baileysConfig.js`
|
|
20
|
+
- `app/configParts/groupUtils.js`
|
|
21
|
+
- `app/configParts/adminIdentity.js`
|
|
22
|
+
- Estado de socket e resolucao LID/JID agora concentrados no `baileysConfig` (sem os antigos services dedicados).
|
|
23
|
+
|
|
24
|
+
2. Reducao de duplicacao entre conexao e processamento de mensagem
|
|
25
|
+
|
|
26
|
+
- `app/connection/socketController.js` e `app/controllers/messageController.js` passaram a consumir helpers comuns de `app/config/index.js`.
|
|
27
|
+
- Beneficio principal: mesma regra para disponibilidade de socket, normalizacao de IDs e resolucao de remetente.
|
|
28
|
+
|
|
29
|
+
3. Limpeza de codigo orfao
|
|
30
|
+
|
|
31
|
+
- Removido `server/middleware/requestLogger.js` (sem referencias de runtime).
|
|
32
|
+
- Logging de request sensivel permanece coberto no `server/http/httpServer.js`.
|
|
33
|
+
|
|
34
|
+
4. Evolucao de schema e pipeline de IA
|
|
35
|
+
|
|
36
|
+
- Novas migracoes adicionadas para:
|
|
37
|
+
- hardening de sessao web (`d31`)
|
|
38
|
+
- cache de respostas de IA (`d32`)
|
|
39
|
+
- tabelas de aprendizado (`d33`)
|
|
40
|
+
- enriquecimento de config de comandos (`d34`)
|
|
41
|
+
- Runbook atualizado em `docs/database/production-db-evolution-runbook-2026q1.md`.
|
|
42
|
+
|
|
43
|
+
## Impacto para desenvolvimento
|
|
44
|
+
|
|
45
|
+
- Importar utilitarios compartilhados via `app/config/index.js`.
|
|
46
|
+
- Evitar recriar parser/normalizador local em controller/socket quando ja existir helper exportado.
|
|
47
|
+
- Para mudancas em DB, seguir fases e validacoes do runbook atualizado.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
require('dotenv').config();
|
|
2
|
+
|
|
3
|
+
const appName = process.env.PM2_APP_NAME || 'omnizap-system';
|
|
4
|
+
|
|
5
|
+
const baseEnv = {
|
|
6
|
+
NODE_ENV: 'production',
|
|
7
|
+
COMMAND_PREFIX: '/',
|
|
8
|
+
LOG_LEVEL: 'info',
|
|
9
|
+
DB_LOG_EVERY_QUERY: 'false',
|
|
10
|
+
DB_MONITOR_ENABLED: 'false',
|
|
11
|
+
LID_BACKFILL_ON_START: 'false',
|
|
12
|
+
STICKER_CLASSIFICATION_BACKGROUND_ENABLED: 'true',
|
|
13
|
+
STICKER_CLASSIFICATION_BACKGROUND_CONCURRENCY: '1',
|
|
14
|
+
STICKER_CLASSIFICATION_BACKGROUND_BATCH_SIZE: '3',
|
|
15
|
+
STICKER_REPROCESS_QUEUE_ENABLED: 'false',
|
|
16
|
+
STICKER_REPROCESS_MAX_PER_CYCLE: '2',
|
|
17
|
+
STICKER_REPROCESS_MODEL_UPGRADE_SCAN_LIMIT: '20',
|
|
18
|
+
STICKER_REPROCESS_LOW_CONFIDENCE_SCAN_LIMIT: '15',
|
|
19
|
+
STICKER_REPROCESS_PRIORITY_BACKFILL_SCAN_LIMIT: '20',
|
|
20
|
+
STICKER_SEMANTIC_RECLASSIFICATION_ENABLED: 'false',
|
|
21
|
+
STICKER_AUTO_PACK_BY_TAGS_ENABLED: 'false',
|
|
22
|
+
STICKER_AUTO_PACK_BY_TAGS_MAX_ADDITIONS_PER_CYCLE: '30',
|
|
23
|
+
STICKER_AUTO_PACK_BY_TAGS_RETRO_CONSOLIDATION_MUTATION_LIMIT: '120',
|
|
24
|
+
STICKER_WORKER_PIPELINE_ENABLED: 'true',
|
|
25
|
+
STICKER_WORKER_PIPELINE_INLINE_POLLER_ENABLED: 'false',
|
|
26
|
+
STICKER_WORKER_PIPELINE_SCHEDULER_INTERVAL_MS: '90000',
|
|
27
|
+
STICKER_WORKER_PIPELINE_POLLER_INTERVAL_MS: '30000',
|
|
28
|
+
STICKER_WORKER_CLASSIFICATION_CADENCE_MS: '600000',
|
|
29
|
+
STICKER_WORKER_CURATION_CADENCE_MS: '21600000',
|
|
30
|
+
STICKER_WORKER_REBUILD_CADENCE_MS: '43200000',
|
|
31
|
+
STICKER_DEDICATED_WORKERS_ENABLED: 'false',
|
|
32
|
+
STICKER_DEDICATED_WORKER_POLL_INTERVAL_MS: '30000',
|
|
33
|
+
STICKER_DEDICATED_WORKER_IDLE_BACKOFF_MULTIPLIER: '2.5',
|
|
34
|
+
STICKER_DEDICATED_WORKER_IDLE_MAX_POLL_INTERVAL_MS: '180000',
|
|
35
|
+
STICKER_DEDICATED_WORKER_IDLE_JITTER_PERCENT: '15',
|
|
36
|
+
STICKER_DOMAIN_EVENT_CONSUMER_ENABLED: 'false',
|
|
37
|
+
STICKER_DOMAIN_EVENT_CONSUMER_POLLER_INTERVAL_MS: '15000',
|
|
38
|
+
STICKER_SCORE_SNAPSHOT_ENABLED: 'false',
|
|
39
|
+
STICKER_SCORE_SNAPSHOT_REFRESH_INTERVAL_MS: '1500000',
|
|
40
|
+
STICKER_SCORE_SNAPSHOT_BATCH_SIZE: '20',
|
|
41
|
+
METRICS_HOST: process.env.METRICS_HOST || '127.0.0.1',
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
module.exports = {
|
|
45
|
+
apps: [
|
|
46
|
+
{
|
|
47
|
+
name: `${appName}-production`,
|
|
48
|
+
script: './index.js',
|
|
49
|
+
cwd: __dirname,
|
|
50
|
+
exec_mode: 'fork',
|
|
51
|
+
instances: 1,
|
|
52
|
+
autorestart: true,
|
|
53
|
+
watch: false,
|
|
54
|
+
max_memory_restart: '3G',
|
|
55
|
+
log_date_format: 'YYYY-MM-DD HH:mm:ss',
|
|
56
|
+
out_file: `logs/${appName}-out.log`,
|
|
57
|
+
error_file: `logs/${appName}-error.log`,
|
|
58
|
+
env: {
|
|
59
|
+
...baseEnv,
|
|
60
|
+
},
|
|
61
|
+
wait_ready: true,
|
|
62
|
+
listen_timeout: 10000,
|
|
63
|
+
kill_timeout: 5000,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: `${appName}-worker-classification`,
|
|
67
|
+
script: './scripts/sticker-worker-task.mjs',
|
|
68
|
+
args: '--task-type classification_cycle',
|
|
69
|
+
cwd: __dirname,
|
|
70
|
+
exec_mode: 'fork',
|
|
71
|
+
instances: 1,
|
|
72
|
+
autorestart: true,
|
|
73
|
+
watch: false,
|
|
74
|
+
max_memory_restart: '2G',
|
|
75
|
+
log_date_format: 'YYYY-MM-DD HH:mm:ss',
|
|
76
|
+
out_file: `logs/${appName}-worker-classification-out.log`,
|
|
77
|
+
error_file: `logs/${appName}-worker-classification-error.log`,
|
|
78
|
+
env: {
|
|
79
|
+
...baseEnv,
|
|
80
|
+
STICKER_DEDICATED_WORKERS_ENABLED: 'true',
|
|
81
|
+
STICKER_DEDICATED_WORKER_POLL_INTERVAL_MS: '25000',
|
|
82
|
+
STICKER_DEDICATED_WORKER_IDLE_BACKOFF_MULTIPLIER: '2.4',
|
|
83
|
+
STICKER_DEDICATED_WORKER_IDLE_MAX_POLL_INTERVAL_MS: '180000',
|
|
84
|
+
STICKER_CLASSIFICATION_BACKGROUND_BATCH_SIZE: '3',
|
|
85
|
+
STICKER_CLASSIFICATION_BACKGROUND_CONCURRENCY: '1',
|
|
86
|
+
STICKER_REPROCESS_QUEUE_ENABLED: 'false',
|
|
87
|
+
STICKER_SEMANTIC_RECLASSIFICATION_ENABLED: 'false',
|
|
88
|
+
STICKER_AUTO_PACK_BY_TAGS_ENABLED: 'false',
|
|
89
|
+
},
|
|
90
|
+
kill_timeout: 5000,
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: `${appName}-worker-curation`,
|
|
94
|
+
script: './scripts/sticker-worker-task.mjs',
|
|
95
|
+
args: '--task-type curation_cycle',
|
|
96
|
+
cwd: __dirname,
|
|
97
|
+
exec_mode: 'fork',
|
|
98
|
+
instances: 1,
|
|
99
|
+
autorestart: true,
|
|
100
|
+
watch: false,
|
|
101
|
+
max_memory_restart: '2G',
|
|
102
|
+
log_date_format: 'YYYY-MM-DD HH:mm:ss',
|
|
103
|
+
out_file: `logs/${appName}-worker-curation-out.log`,
|
|
104
|
+
error_file: `logs/${appName}-worker-curation-error.log`,
|
|
105
|
+
env: {
|
|
106
|
+
...baseEnv,
|
|
107
|
+
STICKER_DEDICATED_WORKERS_ENABLED: 'false',
|
|
108
|
+
STICKER_DEDICATED_WORKER_POLL_INTERVAL_MS: '60000',
|
|
109
|
+
STICKER_AUTO_PACK_BY_TAGS_ENABLED: 'false',
|
|
110
|
+
},
|
|
111
|
+
kill_timeout: 5000,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: `${appName}-worker-rebuild`,
|
|
115
|
+
script: './scripts/sticker-worker-task.mjs',
|
|
116
|
+
args: '--task-type rebuild_cycle',
|
|
117
|
+
cwd: __dirname,
|
|
118
|
+
exec_mode: 'fork',
|
|
119
|
+
instances: 1,
|
|
120
|
+
autorestart: true,
|
|
121
|
+
watch: false,
|
|
122
|
+
max_memory_restart: '2G',
|
|
123
|
+
log_date_format: 'YYYY-MM-DD HH:mm:ss',
|
|
124
|
+
out_file: `logs/${appName}-worker-rebuild-out.log`,
|
|
125
|
+
error_file: `logs/${appName}-worker-rebuild-error.log`,
|
|
126
|
+
env: {
|
|
127
|
+
...baseEnv,
|
|
128
|
+
STICKER_DEDICATED_WORKERS_ENABLED: 'false',
|
|
129
|
+
STICKER_DEDICATED_WORKER_POLL_INTERVAL_MS: '60000',
|
|
130
|
+
STICKER_AUTO_PACK_BY_TAGS_ENABLED: 'false',
|
|
131
|
+
},
|
|
132
|
+
kill_timeout: 5000,
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
};
|