@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,44 @@
|
|
|
1
|
+
name: Security - OSSF Scorecard
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
branch_protection_rule:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: "0 6 * * 1"
|
|
7
|
+
push:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
permissions: read-all
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: security-scorecard-${{ github.workflow }}-${{ github.ref }}
|
|
16
|
+
cancel-in-progress: true
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
analysis:
|
|
20
|
+
name: Scorecard Analysis
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
timeout-minutes: 30
|
|
23
|
+
permissions:
|
|
24
|
+
security-events: write
|
|
25
|
+
id-token: write
|
|
26
|
+
contents: read
|
|
27
|
+
actions: read
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout
|
|
30
|
+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
|
|
31
|
+
with:
|
|
32
|
+
persist-credentials: false
|
|
33
|
+
|
|
34
|
+
- name: Run OSSF Scorecard
|
|
35
|
+
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a
|
|
36
|
+
with:
|
|
37
|
+
results_file: results.sarif
|
|
38
|
+
results_format: sarif
|
|
39
|
+
publish_results: true
|
|
40
|
+
|
|
41
|
+
- name: Upload SARIF
|
|
42
|
+
uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98
|
|
43
|
+
with:
|
|
44
|
+
sarif_file: results.sarif
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Security - ZAP Baseline
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "30 4 * * 1"
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
target_url:
|
|
9
|
+
description: "Target URL for baseline scan"
|
|
10
|
+
required: false
|
|
11
|
+
default: ""
|
|
12
|
+
type: string
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: security-zap-baseline-${{ github.workflow }}-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
baseline-scan:
|
|
23
|
+
name: DAST Baseline
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
timeout-minutes: 30
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
issues: write
|
|
29
|
+
env:
|
|
30
|
+
TARGET_URL: ${{ inputs.target_url || vars.SECURITY_SCAN_TARGET_URL || 'https://omnizap.shop/' }}
|
|
31
|
+
steps:
|
|
32
|
+
- name: Checkout
|
|
33
|
+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
|
|
34
|
+
with:
|
|
35
|
+
persist-credentials: false
|
|
36
|
+
|
|
37
|
+
- name: Run ZAP baseline scan
|
|
38
|
+
uses: zaproxy/action-baseline@41aee98ebc7cf2802c3beae4e7d4336413a21e43
|
|
39
|
+
with:
|
|
40
|
+
target: ${{ env.TARGET_URL }}
|
|
41
|
+
fail_action: false
|
|
42
|
+
cmd_options: "-a"
|
|
43
|
+
env:
|
|
44
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Security - ZAP Full Scan
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "0 5 * * 0"
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
target_url:
|
|
9
|
+
description: "Target URL for full scan"
|
|
10
|
+
required: false
|
|
11
|
+
default: ""
|
|
12
|
+
type: string
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: security-zap-full-${{ github.workflow }}-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
full-scan:
|
|
23
|
+
name: DAST Full Scan
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
timeout-minutes: 90
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
issues: write
|
|
29
|
+
env:
|
|
30
|
+
TARGET_URL: ${{ inputs.target_url || vars.SECURITY_SCAN_TARGET_URL || 'https://omnizap.shop/' }}
|
|
31
|
+
steps:
|
|
32
|
+
- name: Checkout
|
|
33
|
+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
|
|
34
|
+
with:
|
|
35
|
+
persist-credentials: false
|
|
36
|
+
|
|
37
|
+
- name: Run ZAP full scan
|
|
38
|
+
uses: zaproxy/action-full-scan@bdd21ad4090d552d299261226c553efbc216f5ee
|
|
39
|
+
with:
|
|
40
|
+
target: ${{ env.TARGET_URL }}
|
|
41
|
+
fail_action: false
|
|
42
|
+
env:
|
|
43
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: Security - Zizmor
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- ".github/workflows/**"
|
|
7
|
+
push:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
paths:
|
|
11
|
+
- ".github/workflows/**"
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: security-zizmor-${{ github.workflow }}-${{ github.ref }}
|
|
19
|
+
cancel-in-progress: true
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
zizmor:
|
|
23
|
+
name: Workflow Security Lint
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
timeout-minutes: 15
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
security-events: write
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout
|
|
31
|
+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
|
|
32
|
+
with:
|
|
33
|
+
persist-credentials: false
|
|
34
|
+
|
|
35
|
+
- name: Run Zizmor
|
|
36
|
+
uses: zizmorcore/zizmor-action@0dce2577a4760a2749d8cfb7a84b7d5585ebcb7d
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Wiki Sync
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
paths:
|
|
8
|
+
- "docs/wiki/**"
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: wiki-sync-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
sync:
|
|
20
|
+
name: Sync docs/wiki to GitHub Wiki
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
timeout-minutes: 15
|
|
23
|
+
permissions:
|
|
24
|
+
contents: write
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout
|
|
27
|
+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
|
|
28
|
+
with:
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
persist-credentials: false
|
|
31
|
+
|
|
32
|
+
- name: Configure git identity
|
|
33
|
+
run: |
|
|
34
|
+
git config user.name "github-actions[bot]"
|
|
35
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
36
|
+
|
|
37
|
+
- name: Sync wiki
|
|
38
|
+
env:
|
|
39
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
40
|
+
WIKI_SYNC_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
41
|
+
WIKI_SYNC_GIT_USER_NAME: github-actions[bot]
|
|
42
|
+
WIKI_SYNC_GIT_USER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com
|
|
43
|
+
WIKI_SYNC_DELETE: "1"
|
|
44
|
+
run: bash ./scripts/wiki-sync.sh
|
package/.gitleaks.toml
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
title = "OmniZap Gitleaks Config"
|
|
2
|
+
|
|
3
|
+
[extend]
|
|
4
|
+
useDefault = true
|
|
5
|
+
|
|
6
|
+
[allowlist]
|
|
7
|
+
description = "Ignore runtime/generated artifacts that are not source secrets."
|
|
8
|
+
paths = [
|
|
9
|
+
'''^logs/''',
|
|
10
|
+
'''^backups/''',
|
|
11
|
+
]
|
|
12
|
+
regexes = [
|
|
13
|
+
'''(?i)SET\s+@migration_key\s*:=\s*'[0-9]{8}_[a-z0-9_]+';''',
|
|
14
|
+
'''(?i)WHERE\s+migration_key\s*=\s*'[0-9]{8}_[a-z0-9_]+';''',
|
|
15
|
+
]
|
package/.prettierrc
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/prettierrc",
|
|
3
|
+
"printWidth": 10000,
|
|
4
|
+
"tabWidth": 2,
|
|
5
|
+
"useTabs": false,
|
|
6
|
+
"semi": true,
|
|
7
|
+
"singleQuote": true,
|
|
8
|
+
"jsxSingleQuote": false,
|
|
9
|
+
"trailingComma": "all",
|
|
10
|
+
"bracketSpacing": true,
|
|
11
|
+
"arrowParens": "always",
|
|
12
|
+
"endOfLine": "lf",
|
|
13
|
+
"bracketSameLine": false,
|
|
14
|
+
"singleAttributePerLine": false,
|
|
15
|
+
"proseWrap": "preserve",
|
|
16
|
+
"htmlWhitespaceSensitivity": "css",
|
|
17
|
+
"quoteProps": "as-needed",
|
|
18
|
+
"embeddedLanguageFormatting": "auto",
|
|
19
|
+
"overrides": [
|
|
20
|
+
{
|
|
21
|
+
"files": ["*.md", "*.mdx"],
|
|
22
|
+
"options": {
|
|
23
|
+
"printWidth": 90,
|
|
24
|
+
"proseWrap": "preserve"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"files": ["*.yml", "*.yaml"],
|
|
29
|
+
"options": {
|
|
30
|
+
"singleQuote": false
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Código de Conduta
|
|
2
|
+
|
|
3
|
+
## Nosso compromisso
|
|
4
|
+
|
|
5
|
+
Nós, contribuidores e mantenedores do OmniZap System, assumimos o compromisso de manter a participação na comunidade livre de assédio para todas as pessoas, independentemente de idade, tipo corporal, deficiência (visível ou não), etnia, características sexuais, identidade e expressão de gênero, nível de experiência, escolaridade, condição socioeconômica, nacionalidade, aparência pessoal, religião ou identidade/orientação sexual.
|
|
6
|
+
|
|
7
|
+
Nós nos comprometemos a agir e interagir de forma a promover uma comunidade aberta, acolhedora, diversa, inclusiva e saudável.
|
|
8
|
+
|
|
9
|
+
## Valores da comunidade
|
|
10
|
+
|
|
11
|
+
Esperamos que toda interação no projeto siga estes valores:
|
|
12
|
+
|
|
13
|
+
- Respeito entre participantes, mesmo em situações de discordância.
|
|
14
|
+
- Colaboração orientada a resultados técnicos e coletivos.
|
|
15
|
+
- Transparência na comunicação e nas decisões de manutenção.
|
|
16
|
+
- Responsabilidade sobre impactos técnicos e comportamentais.
|
|
17
|
+
- Aprendizado contínuo, com abertura para correção e melhoria.
|
|
18
|
+
|
|
19
|
+
## Nossos padrões
|
|
20
|
+
|
|
21
|
+
Exemplos de comportamentos esperados:
|
|
22
|
+
|
|
23
|
+
- Demonstrar empatia, respeito e cordialidade.
|
|
24
|
+
- Aceitar e oferecer feedback construtivo de forma objetiva.
|
|
25
|
+
- Priorizar o que é melhor para o projeto e para a comunidade.
|
|
26
|
+
- Assumir responsabilidade por erros e corrigi-los com transparência.
|
|
27
|
+
- Manter comunicação clara, respeitosa e profissional.
|
|
28
|
+
|
|
29
|
+
Exemplos de comportamentos inaceitáveis:
|
|
30
|
+
|
|
31
|
+
- Linguagem ou imagens sexualizadas e atenção sexual indesejada.
|
|
32
|
+
- Trolling, insultos, ataques pessoais ou comentários depreciativos.
|
|
33
|
+
- Assédio, intimidação ou perseguição, em público ou em privado.
|
|
34
|
+
- Divulgação de informações privadas de terceiros sem permissão explícita.
|
|
35
|
+
- Qualquer conduta inadequada para um ambiente colaborativo e profissional.
|
|
36
|
+
|
|
37
|
+
## Inclusão e acessibilidade
|
|
38
|
+
|
|
39
|
+
Para promover um ambiente mais inclusivo, recomendamos:
|
|
40
|
+
|
|
41
|
+
- usar linguagem clara e objetiva;
|
|
42
|
+
- contextualizar termos técnicos quando necessário;
|
|
43
|
+
- evitar comunicação agressiva, ironias hostis e provocações pessoais;
|
|
44
|
+
- respeitar diferentes níveis de experiência.
|
|
45
|
+
|
|
46
|
+
## Escopo
|
|
47
|
+
|
|
48
|
+
Este Código de Conduta se aplica a todos os espaços oficiais do projeto, incluindo:
|
|
49
|
+
|
|
50
|
+
- Issues, Pull Requests, Discussions e comentários no GitHub.
|
|
51
|
+
- Canais de comunicação relacionados ao projeto.
|
|
52
|
+
- Interações em nome do projeto em espaços públicos.
|
|
53
|
+
|
|
54
|
+
Também se aplica quando uma pessoa representa oficialmente o projeto, por exemplo, ao usar conta oficial, atuar como mantenedor(a) ou participar de eventos em nome do OmniZap System.
|
|
55
|
+
|
|
56
|
+
## Responsabilidade de aplicação
|
|
57
|
+
|
|
58
|
+
Mantenedores(as) são responsáveis por interpretar e aplicar este Código de Conduta de forma justa, consistente e proporcional ao contexto.
|
|
59
|
+
|
|
60
|
+
Mantenedores(as) podem remover, editar ou rejeitar comentários, commits, código, edições de wiki, issues e outras contribuições que violem este Código de Conduta, bem como aplicar medidas temporárias ou permanentes quando necessário.
|
|
61
|
+
|
|
62
|
+
## Reporte de incidentes
|
|
63
|
+
|
|
64
|
+
Se você sofrer ou presenciar comportamento inadequado:
|
|
65
|
+
|
|
66
|
+
1. Para casos não sensíveis, abra uma issue com o título iniciando por `CoC:`.
|
|
67
|
+
2. Para casos sensíveis, contate os mantenedores de forma privada pelo GitHub (por exemplo, mensagem direta para `@kaikybrofc`) ou por e-mail em `bot@omnizap.shop`.
|
|
68
|
+
|
|
69
|
+
Todos os relatos serão avaliados com seriedade, dentro de prazo razoável, com confidencialidade e respeito ao contexto.
|
|
70
|
+
|
|
71
|
+
## Processo de apuração e resposta
|
|
72
|
+
|
|
73
|
+
O fluxo padrão de tratamento de incidentes segue estas etapas:
|
|
74
|
+
|
|
75
|
+
1. Confirmação de recebimento do relato (meta: até 72 horas).
|
|
76
|
+
2. Triagem inicial e classificação da ocorrência (meta: até 7 dias corridos).
|
|
77
|
+
3. Coleta de contexto e evidências adicionais, quando necessário.
|
|
78
|
+
4. Deliberação dos mantenedores e definição de medida aplicável.
|
|
79
|
+
5. Comunicação de encerramento para as partes envolvidas, dentro do limite de confidencialidade.
|
|
80
|
+
|
|
81
|
+
## Confidencialidade e não retaliação
|
|
82
|
+
|
|
83
|
+
- Relatos sensíveis serão tratados com confidencialidade, na medida do possível.
|
|
84
|
+
- Não toleramos retaliação contra quem reportar incidentes de boa-fé.
|
|
85
|
+
- Tentativas de intimidação, exposição indevida ou represália podem gerar medidas disciplinares imediatas.
|
|
86
|
+
|
|
87
|
+
## Diretrizes de aplicação
|
|
88
|
+
|
|
89
|
+
As medidas de aplicação podem incluir, conforme gravidade e recorrência:
|
|
90
|
+
|
|
91
|
+
1. **Correção**: orientação privada e pedido de ajuste de comportamento.
|
|
92
|
+
2. **Advertência**: aviso formal com descrição da violação e consequências em caso de reincidência.
|
|
93
|
+
3. **Suspensão temporária**: restrição de interação por período definido em espaços oficiais do projeto.
|
|
94
|
+
4. **Banimento permanente**: proibição de participação na comunidade e bloqueio dos canais oficiais.
|
|
95
|
+
|
|
96
|
+
## Direito de resposta e recurso
|
|
97
|
+
|
|
98
|
+
- Sempre que viável, a pessoa reportada poderá apresentar contexto antes da decisão final.
|
|
99
|
+
- Caso discorde da medida aplicada, poderá solicitar revisão por canal privado em até 14 dias corridos.
|
|
100
|
+
- Quando possível, o recurso será revisado por mantenedor(a) diferente de quem conduziu a decisão inicial.
|
|
101
|
+
|
|
102
|
+
## Conflito de interesse
|
|
103
|
+
|
|
104
|
+
Quando houver conflito de interesse na apuração (por exemplo, envolvimento direto do mantenedor no incidente), a pessoa em conflito deve se declarar impedida de decidir sobre o caso.
|
|
105
|
+
|
|
106
|
+
## Atribuição
|
|
107
|
+
|
|
108
|
+
Este Código de Conduta foi adaptado do [Contributor Covenant](https://www.contributor-covenant.org), versão 2.1:
|
|
109
|
+
|
|
110
|
+
- https://www.contributor-covenant.org/version/2/1/code_of_conduct/
|
|
111
|
+
|
|
112
|
+
Perguntas frequentes:
|
|
113
|
+
|
|
114
|
+
- https://www.contributor-covenant.org/faq
|
package/LICENSE
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Kaiky Brito
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
Versão em Português (tradução de referência)
|
|
26
|
+
|
|
27
|
+
Aviso importante: esta tradução é fornecida para facilitar entendimento.
|
|
28
|
+
Em caso de divergência de interpretação, prevalece o texto legal em inglês
|
|
29
|
+
apresentado acima.
|
|
30
|
+
|
|
31
|
+
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia
|
|
32
|
+
deste software e dos arquivos de documentação associados (o "Software"), para
|
|
33
|
+
utilizar o Software sem restrições, incluindo, sem limitação, os direitos de
|
|
34
|
+
usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou
|
|
35
|
+
vender cópias do Software, e permitir que as pessoas a quem o Software for
|
|
36
|
+
fornecido façam o mesmo, sujeitas às seguintes condições:
|
|
37
|
+
|
|
38
|
+
O aviso de copyright acima e este aviso de permissão devem ser incluídos em
|
|
39
|
+
todas as cópias ou porções substanciais do Software.
|
|
40
|
+
|
|
41
|
+
O SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM GARANTIA DE
|
|
42
|
+
QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, SEM LIMITAÇÃO, AS GARANTIAS DE
|
|
43
|
+
COMERCIALIZAÇÃO, ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA E NÃO INFRAÇÃO. EM
|
|
44
|
+
NENHUMA HIPÓTESE OS AUTORES OU DETENTORES DOS DIREITOS AUTORAIS SERÃO
|
|
45
|
+
RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANO OU OUTRA RESPONSABILIDADE, SEJA
|
|
46
|
+
EM AÇÃO CONTRATUAL, ILÍCITO CIVIL OU OUTRA FORMA, DECORRENTE DE, FORA DE OU EM
|
|
47
|
+
CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.
|
|
48
|
+
|
|
49
|
+
Informações adicionais (não alteram os termos da licença):
|
|
50
|
+
|
|
51
|
+
- Uso comercial é permitido.
|
|
52
|
+
- Modificação e redistribuição são permitidas.
|
|
53
|
+
- Sub-licenciamento e venda são permitidos.
|
|
54
|
+
- É obrigatório manter os avisos de copyright e licença.
|
|
55
|
+
- Não há garantia de funcionamento ou adequação para um fim específico.
|
|
56
|
+
- Os autores não assumem responsabilidade por danos decorrentes do uso.
|
package/README.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<img width="1318" height="352" alt="OmniZap banner" src="https://github.com/user-attachments/assets/d44835e7-021a-4c67-a0e7-5b858d51eb91" />
|
|
2
|
+
|
|
3
|
+
# OmniZap System
|
|
4
|
+
|
|
5
|
+
[](https://github.com/Omnizap-System/omnizap/actions/workflows/ci.yml)
|
|
6
|
+
[](https://github.com/Omnizap-System/omnizap/actions/workflows/codeql.yml)
|
|
7
|
+
[](https://github.com/Omnizap-System/omnizap/actions/workflows/security-gitleaks.yml)
|
|
8
|
+
[](./LICENSE)
|
|
9
|
+
[](https://nodejs.org/)
|
|
10
|
+
|
|
11
|
+
Plataforma open source de automação para WhatsApp com foco em figurinhas, catálogo web, painel de usuário e operação profissional em produção.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 🚀 Links Rápidos
|
|
16
|
+
|
|
17
|
+
- **Site Oficial:** [omnizap.shop](https://omnizap.shop/)
|
|
18
|
+
- **Documentação da API:** [/api-docs/](https://omnizap.shop/api-docs/)
|
|
19
|
+
- **Painel do Usuário:** [/user/](https://omnizap.shop/user/)
|
|
20
|
+
- **Catálogo de Figurinha:** [/stickers/](https://omnizap.shop/stickers/)
|
|
21
|
+
- **Wiki do Projeto:** [GitHub Wiki](https://github.com/Omnizap-System/omnizap/wiki)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 🛠️ Quick Start (Local)
|
|
26
|
+
|
|
27
|
+
1. **Instalar dependências:**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm install
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
2. **Configurar Ambiente:**
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cp .env.example .env
|
|
37
|
+
# Edite o .env com suas credenciais MySQL e segredos JWT
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
3. **Inicializar Banco e Frontend:**
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm run db:init
|
|
44
|
+
npm run build:frontend
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
4. **Rodar:**
|
|
48
|
+
```bash
|
|
49
|
+
npm run dev
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 🏗️ Arquitetura & Stack
|
|
55
|
+
|
|
56
|
+
O sistema é dividido em 3 camadas integradas:
|
|
57
|
+
|
|
58
|
+
- **Bot Engine:** Baseado em `@whiskeysockets/baileys` (WhatsApp multi-device).
|
|
59
|
+
- **Web Server:** Node.js puro (`node:http`) com roteamento customizado e alta performance.
|
|
60
|
+
- **Frontend:** React com TailwindCSS e DaisyUI (Vite bundle).
|
|
61
|
+
- **Dados:** MySQL para persistência de mensagens, usuários e metadados de grupos.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## ✨ Funcionalidades Principais
|
|
66
|
+
|
|
67
|
+
- **Automação de Stickers:** Criação instantânea via comandos (`/s`, `/st`, etc.).
|
|
68
|
+
- **Gestão de Packs:** Criação, edição e publicação de pacotes de figurinhas via bot ou web.
|
|
69
|
+
- **Painel Web:** Autenticação segura, recuperação de senha e gestão de perfil.
|
|
70
|
+
- **Marketplace:** Catálogo público com SEO otimizado e busca dinâmica.
|
|
71
|
+
- **Observabilidade:** Métricas nativas para Prometheus e logs estruturados com Pino.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 📊 Snapshot do Sistema
|
|
76
|
+
|
|
77
|
+
<!-- README_SNAPSHOT:START -->
|
|
78
|
+
|
|
79
|
+
> Os dados abaixo são atualizados automaticamente via script.
|
|
80
|
+
|
|
81
|
+
<!-- README_SNAPSHOT:END -->
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 📁 Estrutura do Projeto
|
|
86
|
+
|
|
87
|
+
- `app/`: Core do bot, módulos de comandos e serviços de domínio.
|
|
88
|
+
- `server/`: Rotas HTTP, middlewares de segurança e controladores web.
|
|
89
|
+
- `database/`: Schemas, migrações e inicialização do MySQL.
|
|
90
|
+
- `public/`: Código-fonte do frontend (React) e assets estáticos.
|
|
91
|
+
- `scripts/`: Utilitários de deploy, release e workers de background.
|
|
92
|
+
- `docs/`: Runbooks de segurança, conformidade (LGPD) e playbooks de SEO.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 🛡️ Segurança e Compliance
|
|
97
|
+
|
|
98
|
+
Projeto desenvolvido com foco em conformidade e boas práticas:
|
|
99
|
+
|
|
100
|
+
- **LGPD:** Runbooks prontos para DSAR e Incidentes ANPD em `docs/`.
|
|
101
|
+
- **Hardening:** Esteira de segurança com SAST, Gitleaks e ZAP Scan.
|
|
102
|
+
- **AUP:** Política de Uso Aceitável rigorosa para evitar spam e abusos.
|
|
103
|
+
|
|
104
|
+
Para reportar vulnerabilidades, consulte [SECURITY.md](./SECURITY.md).
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 📄 Licença
|
|
109
|
+
|
|
110
|
+
Distribuído sob a licença **MIT**. Veja `LICENSE` para mais detalhes.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Política de Segurança e Procedimento Operacional
|
|
2
|
+
|
|
3
|
+
Este documento estabelece:
|
|
4
|
+
|
|
5
|
+
- as diretrizes formais para tratamento de vulnerabilidades no OmniZap System;
|
|
6
|
+
- o fluxo operacional (runbook) utilizado para triagem, correção e divulgação responsável.
|
|
7
|
+
|
|
8
|
+
## Objetivo e Aplicabilidade
|
|
9
|
+
|
|
10
|
+
Esta política se aplica ao código e aos ativos técnicos mantidos neste repositório, incluindo:
|
|
11
|
+
|
|
12
|
+
- código-fonte da aplicação;
|
|
13
|
+
- workflows e automações de CI/CD;
|
|
14
|
+
- dependências e configuração de build/publicação;
|
|
15
|
+
- componentes de execução e integração diretamente mantidos pelo projeto.
|
|
16
|
+
|
|
17
|
+
Não fazem parte do escopo obrigatório desta política:
|
|
18
|
+
|
|
19
|
+
- serviços de terceiros fora de controle do projeto;
|
|
20
|
+
- ambientes não oficiais, forks e deploys sem vínculo direto com o mantenedor.
|
|
21
|
+
|
|
22
|
+
## Versões Suportadas
|
|
23
|
+
|
|
24
|
+
Correções de segurança são priorizadas para o branch `main` e para a release estável mais recente.
|
|
25
|
+
|
|
26
|
+
| Canal | Suporte de segurança |
|
|
27
|
+
| -------------------------------- | ------------------------------------------ |
|
|
28
|
+
| `main` | Suportado |
|
|
29
|
+
| Última release estável publicada | Suportado |
|
|
30
|
+
| Releases anteriores | Suporte limitado, sem garantia de correção |
|
|
31
|
+
|
|
32
|
+
## Canal Oficial de Reporte
|
|
33
|
+
|
|
34
|
+
Não abra issue pública para reportes de segurança.
|
|
35
|
+
|
|
36
|
+
Envie o reporte por e-mail para:
|
|
37
|
+
|
|
38
|
+
- `bot@omnizap.shop`
|
|
39
|
+
|
|
40
|
+
No assunto, utilize preferencialmente: `"[SECURITY] <resumo da vulnerabilidade>"`.
|
|
41
|
+
|
|
42
|
+
## Conteúdo Mínimo do Reporte
|
|
43
|
+
|
|
44
|
+
Para acelerar a análise, inclua:
|
|
45
|
+
|
|
46
|
+
- componente e versão afetados;
|
|
47
|
+
- pré-condições e passos de reprodução;
|
|
48
|
+
- impacto técnico e impacto de negócio;
|
|
49
|
+
- prova de conceito (PoC), quando aplicável;
|
|
50
|
+
- sugestões de mitigação;
|
|
51
|
+
- evidências técnicas (logs, payloads e respostas), sem dados sensíveis de terceiros.
|
|
52
|
+
|
|
53
|
+
## Classificação de Severidade e Meta de Resposta
|
|
54
|
+
|
|
55
|
+
| Severidade | Exemplo | Meta de triagem inicial |
|
|
56
|
+
| ---------- | --------------------------------------------------------------- | --------------------------- |
|
|
57
|
+
| Crítica | execução remota, vazamento sensível em produção | até 24 horas |
|
|
58
|
+
| Alta | bypass de autenticação/autorização, escalonamento de privilégio | até 72 horas |
|
|
59
|
+
| Média | falha explorável com restrições relevantes | até 7 dias corridos |
|
|
60
|
+
| Baixa | baixo impacto ou cenário de exploração limitado | conforme fila de manutenção |
|
|
61
|
+
|
|
62
|
+
Os prazos acima são metas operacionais e podem variar conforme complexidade, dependências externas e disponibilidade de correção segura.
|
|
63
|
+
|
|
64
|
+
## Runbook de Tratamento (Fluxo Operacional)
|
|
65
|
+
|
|
66
|
+
1. Recebimento e protocolo: confirmação de recebimento em até 72 horas.
|
|
67
|
+
2. Triagem técnica: validação de escopo, reprodução e classificação de severidade.
|
|
68
|
+
3. Contenção inicial: mitigação temporária, quando necessária.
|
|
69
|
+
4. Correção: implementação, revisão e validação em pipeline.
|
|
70
|
+
5. Publicação: disponibilização da correção no canal suportado.
|
|
71
|
+
6. Fechamento: comunicação ao pesquisador e registro das lições aprendidas.
|
|
72
|
+
|
|
73
|
+
## Divulgação Responsável
|
|
74
|
+
|
|
75
|
+
Solicitamos confidencialidade até que a correção ou mitigação oficial esteja disponível.
|
|
76
|
+
|
|
77
|
+
Quando aplicável, a comunicação pública ocorrerá por meio de:
|
|
78
|
+
|
|
79
|
+
- release notes/changelog;
|
|
80
|
+
- advisory de segurança;
|
|
81
|
+
- documentação técnica pertinente.
|
|
82
|
+
|
|
83
|
+
## Pesquisa em Boa-fé e Conduta Esperada
|
|
84
|
+
|
|
85
|
+
Ao realizar testes de segurança, não é permitido:
|
|
86
|
+
|
|
87
|
+
- indisponibilizar serviços intencionalmente (DoS/DDoS);
|
|
88
|
+
- acessar, alterar ou exfiltrar dados de terceiros;
|
|
89
|
+
- executar engenharia social, phishing ou ataques físicos;
|
|
90
|
+
- realizar testes destrutivos em ambientes de produção.
|
|
91
|
+
|
|
92
|
+
Reportes realizados de boa-fé, com respeito a esta política, serão tratados com prioridade técnica e comunicação responsável.
|
|
93
|
+
|
|
94
|
+
## Baseline de Hardening de Produção
|
|
95
|
+
|
|
96
|
+
Para hardening de rede e redução de superfície exposta (portas públicas, SSH e Nginx), consulte:
|
|
97
|
+
|
|
98
|
+
- [`docs/security/network-hardening-runbook-2026-03-07.md`](./docs/security/network-hardening-runbook-2026-03-07.md)
|
|
99
|
+
|
|
100
|
+
## Resposta a Incidentes com Critério LGPD/ANPD
|
|
101
|
+
|
|
102
|
+
Para resposta formal a incidentes com avaliação de gatilho de notificação regulatória, consulte:
|
|
103
|
+
|
|
104
|
+
- [`docs/security/incident-response-lgpd-anpd-runbook-2026-03-07.md`](./docs/security/incident-response-lgpd-anpd-runbook-2026-03-07.md)
|
|
105
|
+
|
|
106
|
+
## Compliance Operacional Mensal
|
|
107
|
+
|
|
108
|
+
Para acompanhamento mensal de conteúdo regulado, branding, contratos (DPA), governança de dados, notice-and-takedown e separação patrimonial, consulte:
|
|
109
|
+
|
|
110
|
+
- [`docs/compliance/monthly-compliance-checklist-2026-03-07.md`](./docs/compliance/monthly-compliance-checklist-2026-03-07.md)
|