@omnizap-system/omnizap 2.6.0 → 2.6.2
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/.env.example +58 -13
- package/.github/workflows/ci.yml +5 -5
- package/.github/workflows/codeql.yml +1 -1
- package/.github/workflows/db-migration-check.yml +2 -2
- package/.github/workflows/dependency-review.yml +1 -1
- package/.github/workflows/deploy.yml +2 -2
- package/.github/workflows/release.yml +2 -2
- package/.github/workflows/security-attest-provenance.yml +2 -2
- package/.github/workflows/security-gitleaks.yml +13 -4
- package/.github/workflows/security-runner-hardening.yml +2 -2
- package/.github/workflows/security-scorecard.yml +1 -1
- package/.github/workflows/security-zap-baseline.yml +1 -1
- package/.github/workflows/security-zap-full-scan.yml +2 -1
- package/.github/workflows/security-zizmor.yml +1 -1
- package/.github/workflows/wiki-sync.yml +1 -1
- package/.gitleaksignore +9 -0
- package/CODE_OF_CONDUCT.md +2 -2
- package/GEMINI.md +64 -0
- package/README.md +52 -82
- package/SECURITY.md +1 -1
- package/app/config/index.js +2 -0
- package/app/configParts/adminIdentity.js +5 -5
- package/app/configParts/baileysConfig.js +230 -58
- package/app/configParts/groupUtils.js +5 -0
- package/app/configParts/messagePersistenceService.js +145 -4
- package/app/configParts/sessionConfig.js +157 -0
- package/app/connection/baileysCompatibility.test.js +1 -1
- package/app/connection/groupOwnerWriteStateResolver.js +109 -0
- package/app/connection/socketController.js +660 -158
- package/app/connection/socketController.multiSession.test.js +108 -0
- package/app/controllers/messageController.js +1 -1
- package/app/controllers/messagePipeline/commandMiddleware.js +12 -10
- package/app/controllers/messagePipeline/conversationMiddleware.js +2 -1
- package/app/controllers/messagePipeline/messagePipelineMiddlewares.test.js +104 -0
- package/app/controllers/messagePipeline/preProcessingMiddlewares.js +80 -2
- package/app/controllers/messageProcessingPipeline.js +93 -13
- package/app/controllers/messageProcessingPipeline.test.js +200 -0
- package/app/modules/adminModule/AGENT.md +1 -1
- package/app/modules/adminModule/commandConfig.json +3318 -1347
- package/app/modules/adminModule/groupCommandHandlers.js +858 -15
- package/app/modules/adminModule/groupCommandHandlers.test.js +378 -11
- package/app/modules/adminModule/groupWarningRepository.js +152 -0
- package/app/modules/aiModule/AGENT.md +47 -30
- package/app/modules/aiModule/aiConfigRuntime.js +1 -0
- package/app/modules/aiModule/catCommand.js +135 -27
- package/app/modules/aiModule/commandConfig.json +114 -28
- package/app/modules/analyticsModule/messageAnalysisEventRepository.js +54 -6
- package/app/modules/gameModule/AGENT.md +1 -1
- package/app/modules/gameModule/commandConfig.json +29 -0
- package/app/modules/menuModule/AGENT.md +1 -1
- package/app/modules/menuModule/commandConfig.json +45 -10
- package/app/modules/menuModule/menuCatalogService.js +190 -0
- package/app/modules/menuModule/menuCommandUsageRepository.js +109 -0
- package/app/modules/menuModule/menuDynamicService.js +511 -0
- package/app/modules/menuModule/menuDynamicService.test.js +141 -0
- package/app/modules/menuModule/menus.js +36 -5
- package/app/modules/playModule/AGENT.md +10 -5
- package/app/modules/playModule/commandConfig.json +140 -12
- package/app/modules/playModule/playCommand.js +1 -1417
- package/app/modules/playModule/playCommandConstants.js +80 -0
- package/app/modules/playModule/playCommandCore.js +361 -0
- package/app/modules/playModule/playCommandHandlers.js +41 -0
- package/app/modules/playModule/playCommandMediaClient.js +1872 -0
- package/app/modules/playModule/playConfigRuntime.js +245 -4
- package/app/modules/playModule/playModuleCriticalFlows.test.js +152 -0
- package/app/modules/quoteModule/AGENT.md +1 -1
- package/app/modules/quoteModule/commandConfig.json +29 -0
- package/app/modules/quoteModule/quoteCommand.js +3 -2
- package/app/modules/rpgPokemonModule/AGENT.md +1 -1
- package/app/modules/rpgPokemonModule/commandConfig.json +29 -0
- package/app/modules/rpgPokemonModule/rpgBattleCanvasRenderer.js +5 -4
- package/app/modules/rpgPokemonModule/rpgBattleService.test.js +2 -1
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.js +2 -1
- package/app/modules/rpgPokemonModule/rpgPokemonService.js +38 -37
- package/app/modules/rpgPokemonModule/rpgProfileCanvasRenderer.js +4 -3
- package/app/modules/statsModule/AGENT.md +1 -1
- package/app/modules/statsModule/commandConfig.json +58 -0
- package/app/modules/statsModule/rankingCommon.js +5 -4
- package/app/modules/stickerModule/AGENT.md +1 -1
- package/app/modules/stickerModule/addStickerMetadata.js +4 -3
- package/app/modules/stickerModule/commandConfig.json +145 -0
- package/app/modules/stickerModule/stickerCommand.js +1 -1
- package/app/modules/stickerPackModule/AGENT.md +1 -1
- package/app/modules/stickerPackModule/autoPackCollectorService.js +5 -1
- package/app/modules/stickerPackModule/commandConfig.json +29 -0
- package/app/modules/stickerPackModule/semanticThemeClusterService.js +7 -6
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +10 -9
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +9 -8
- package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +3 -2
- package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +2 -1
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +80 -58
- package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +2 -1
- package/app/modules/stickerPackModule/stickerPackRepository.js +2 -1
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +5 -4
- package/app/modules/stickerPackModule/stickerPackService.js +13 -6
- package/app/modules/stickerPackModule/stickerStorageService.js +3 -2
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +2 -1
- package/app/modules/systemMetricsModule/AGENT.md +1 -1
- package/app/modules/systemMetricsModule/commandConfig.json +29 -0
- package/app/modules/systemMetricsModule/pingCommand.js +6 -5
- package/app/modules/tiktokModule/AGENT.md +1 -1
- package/app/modules/tiktokModule/commandConfig.json +29 -0
- package/app/modules/tiktokModule/tiktokCommand.js +2 -1
- package/app/modules/userModule/AGENT.md +1 -1
- package/app/modules/userModule/commandConfig.json +29 -0
- package/app/modules/userModule/userCommand.js +72 -23
- package/app/modules/waifuPicsModule/AGENT.md +57 -27
- package/app/modules/waifuPicsModule/commandConfig.json +87 -0
- package/app/modules/waifuPicsModule/waifuPicsCommand.js +3 -2
- package/app/observability/metrics.js +136 -0
- package/app/services/ai/commandConfigEnrichmentService.js +229 -47
- package/app/services/ai/conversationRouterService.js +4 -3
- package/app/services/ai/geminiService.js +132 -7
- package/app/services/ai/geminiService.test.js +59 -2
- package/app/services/ai/globalModuleAiHelpService.js +3 -2
- package/app/services/ai/messageCommandExecutionService.js +2 -1
- package/app/services/ai/moduleAiHelpCoreService.js +45 -14
- package/app/services/ai/moduleToolExecutorService.js +3 -2
- package/app/services/ai/moduleToolRegistryService.js +2 -1
- package/app/services/ai/toolCandidateSelectorService.js +6 -5
- package/app/services/auth/googleWebLinkService.js +3 -2
- package/app/services/auth/whatsappLoginLinkService.js +3 -2
- package/app/services/external/pokeApiService.js +4 -3
- package/app/services/group/groupMetadataService.js +24 -1
- package/app/services/infra/dbWriteQueue.js +57 -26
- package/app/services/infra/featureFlagService.js +2 -1
- package/app/services/messaging/captchaService.js +3 -2
- package/app/services/messaging/newsBroadcastService.js +846 -29
- package/app/services/multiSession/assignmentBalancerService.js +457 -0
- package/app/services/multiSession/groupOwnershipRepository.js +381 -0
- package/app/services/multiSession/groupOwnershipService.js +890 -0
- package/app/services/multiSession/groupOwnershipService.test.js +309 -0
- package/app/services/multiSession/sessionRegistryService.js +293 -0
- package/app/services/sticker/stickerFocusService.js +11 -10
- package/app/store/aiPromptStore.js +36 -19
- package/app/store/conversationSessionStore.js +7 -6
- package/app/store/groupConfigStore.js +41 -5
- package/app/store/premiumUserStore.js +21 -7
- package/app/utils/antiLink/antiLinkModule.js +352 -16
- package/app/workers/aiHelperContinuousLearningWorker.js +512 -0
- package/app/workers/aiLearningWorker.js +6 -5
- package/app/workers/commandConfigEnrichmentWorker.js +4 -3
- package/database/index.js +14 -8
- package/database/migrations/20260307_d0_hardening_down.sql +1 -1
- package/database/migrations/20260314_d7_canonical_sender_down.sql +1 -1
- package/database/migrations/20260406_d30_security_analytics_down.sql +1 -1
- package/database/migrations/20260411_d35_group_community_metadata_down.sql +59 -0
- package/database/migrations/20260411_d35_group_community_metadata_up.sql +62 -0
- package/database/migrations/20260412_d36_system_config_tables_down.sql +32 -0
- package/database/migrations/20260412_d36_system_config_tables_up.sql +66 -0
- package/database/migrations/20260413_d37_group_user_warnings_down.sql +11 -0
- package/database/migrations/20260413_d37_group_user_warnings_up.sql +24 -0
- package/database/migrations/20260414_d38_multi_session_foundation_down.sql +72 -0
- package/database/migrations/20260414_d38_multi_session_foundation_up.sql +125 -0
- package/database/migrations/20260414_d39_multi_session_cutover_down.sql +103 -0
- package/database/migrations/20260414_d39_multi_session_cutover_up.sql +83 -0
- package/database/schema.sql +102 -1
- package/docker-compose.yml +4 -1
- package/docs/compliance/acceptable-use-policy-2026-03-07.md +1 -1
- package/docs/compliance/dpa-b2b-standard-2026-03-07.md +1 -1
- package/docs/compliance/privacy-policy-2026-03-07.md +4 -4
- package/docs/security/dsar-lgpd-runbook-2026-03-07.md +1 -1
- package/docs/security/incident-response-lgpd-anpd-runbook-2026-03-07.md +1 -1
- package/docs/security/network-hardening-runbook-2026-03-07.md +53 -0
- package/docs/security/omnizap-static-security-headers.conf +25 -0
- package/docs/wiki/Home.md +1 -1
- package/ecosystem.prod.config.cjs +32 -12
- package/index.js +57 -23
- package/observability/alert-rules.yml +20 -0
- package/observability/grafana/dashboards/omnizap-system-admin.json +229 -0
- package/observability/mysql-setup.sql +4 -4
- package/observability/system-admin-observability.md +26 -0
- package/package.json +20 -6
- package/public/apple-touch-icon.png +0 -0
- package/public/comandos/commands-catalog.json +2853 -3326
- 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 +3 -2
- package/public/js/apps/commandsReactApp.js +280 -99
- package/public/js/apps/createPackApp.js +11 -10
- package/public/js/apps/homeReactApp.js +181 -130
- package/public/js/apps/loginReactApp.js +1 -1
- package/public/js/apps/stickersApp.js +263 -110
- package/public/js/apps/termsReactApp.js +73 -24
- package/public/js/apps/userApp.js +4 -3
- package/public/js/apps/userPasswordResetReactApp.js +406 -0
- package/public/js/apps/userReactApp.js +355 -280
- package/public/js/apps/userSystemAdmReactApp.js +1506 -0
- package/public/pages/api-docs.html +1 -1
- package/public/pages/aup.html +2 -2
- package/public/pages/dpa.html +3 -3
- package/public/pages/licenca.html +4 -4
- package/public/pages/login.html +1 -1
- package/public/pages/notice-and-takedown.html +2 -2
- package/public/pages/politica-de-privacidade.html +6 -6
- package/public/pages/seo-bot-whatsapp-para-grupo.html +3 -3
- package/public/pages/seo-bot-whatsapp-sem-programar.html +3 -3
- package/public/pages/seo-como-automatizar-avisos-no-whatsapp.html +3 -3
- package/public/pages/seo-como-criar-comandos-whatsapp.html +3 -3
- package/public/pages/seo-como-evitar-spam-no-whatsapp.html +3 -3
- package/public/pages/seo-como-moderar-grupo-whatsapp.html +3 -3
- package/public/pages/seo-como-organizar-comunidade-whatsapp.html +3 -3
- package/public/pages/seo-melhor-bot-whatsapp-para-grupos.html +3 -3
- package/public/pages/stickers-admin.html +1 -1
- package/public/pages/stickers-create.html +1 -1
- package/public/pages/stickers.html +6 -6
- package/public/pages/suboperadores.html +2 -2
- package/public/pages/termos-de-uso-texto-integral.html +6 -6
- package/public/pages/termos-de-uso.html +3 -3
- package/public/pages/user-password-reset.html +4 -5
- package/public/pages/user-systemadm.html +9 -463
- package/public/pages/user.html +2 -2
- package/scripts/clear-whatsapp-session.sh +123 -0
- package/scripts/core-ai-mode.mjs +163 -0
- package/scripts/deploy.sh +11 -1
- package/scripts/email-broadcast-terms-update.mjs +2 -1
- package/scripts/enrich-command-config-ux-openai.mjs +492 -0
- package/scripts/generate-commands-catalog.mjs +166 -2
- package/scripts/generate-module-agents.mjs +2 -1
- package/scripts/generate-seo-satellite-pages.mjs +5 -4
- package/scripts/github-deploy-notify.mjs +2 -1
- package/scripts/github-release-notify.mjs +25 -10
- package/scripts/new-whatsapp-session.sh +317 -0
- package/scripts/release.sh +2 -19
- package/scripts/security-smoketest.mjs +6 -5
- package/scripts/security-web-surface-check.mjs +218 -0
- package/scripts/sticker-catalog-loadtest.mjs +5 -4
- package/server/auth/googleWebAuth/googleWebAuthService.js +8 -7
- package/server/auth/jwt/webJwtService.js +1 -1
- package/server/auth/stickerCatalogAuthContext.js +2 -1
- package/server/auth/termsAcceptance/termsAcceptanceHandler.js +2 -1
- package/server/auth/userPassword/userPasswordAuthService.js +2 -1
- package/server/auth/userPassword/userPasswordRecoveryService.js +4 -3
- package/server/auth/webAccount/webAccountHandlers.js +9 -10
- package/server/controllers/admin/adminPanelHandlers.js +267 -16
- package/server/controllers/admin/systemAdminController.js +267 -0
- package/server/controllers/seo/stickerCatalogSeoContext.js +10 -9
- package/server/controllers/sticker/nonCatalogHandlers.js +2 -1
- package/server/controllers/sticker/stickerCatalogController.js +23 -36
- package/server/controllers/system/contactController.js +9 -17
- package/server/controllers/system/githubController.js +3 -2
- package/server/controllers/system/stickerCatalogSystemContext.js +41 -19
- package/server/controllers/system/systemController.js +254 -1
- package/server/controllers/system/systemMetricsController.js +2 -1
- package/server/controllers/userController.js +6 -0
- package/server/email/emailTemplateService.js +5 -3
- package/server/http/httpServer.js +11 -6
- package/server/middleware/rateLimit.js +2 -1
- package/server/middleware/securityHeaders.js +20 -1
- package/server/routes/admin/systemAdminRouter.js +6 -0
- package/server/routes/indexRouter.js +30 -6
- package/server/routes/observability/grafanaProxyRouter.js +254 -0
- package/server/routes/static/staticPageRouter.js +27 -1
- package/server/utils/publicContact.js +31 -0
- package/utils/time/timeModule.js +135 -0
- package/utils/time/timeModule.test.js +65 -0
- package/utils/whatsapp/contactEnv.js +39 -0
- package/vite.config.mjs +7 -1
- package/public/assets/images/brand-icon-192.png +0 -0
- package/scripts/sync-readme-snapshot.mjs +0 -133
package/.env.example
CHANGED
|
@@ -10,8 +10,6 @@
|
|
|
10
10
|
# ==============================
|
|
11
11
|
# PRIORIDADE 1 - CRITICO (startup)
|
|
12
12
|
# ==============================
|
|
13
|
-
BOT_NUMBER=
|
|
14
|
-
BOT_PHONE_NUMBER=
|
|
15
13
|
COMMAND_PREFIX="#"
|
|
16
14
|
COMMAND_REACT_EMOJI=🤖
|
|
17
15
|
DB_HOST=localhost
|
|
@@ -35,9 +33,7 @@ NODE_ENV=development
|
|
|
35
33
|
OPENAI_API_KEY=
|
|
36
34
|
GEMINI_API_KEY=
|
|
37
35
|
GEMINI_API_BASE_URL=https://generativelanguage.googleapis.com/v1beta
|
|
38
|
-
|
|
39
|
-
PHONE_NUMBER=
|
|
40
|
-
PM2_APP_NAME=omnizap-system
|
|
36
|
+
PM2_APP_NAME=omnizap
|
|
41
37
|
SITE_ORIGIN=https://omnizap.shop
|
|
42
38
|
STICKER_API_BASE_PATH=/api/sticker-packs
|
|
43
39
|
USER_API_BASE_PATH=/api
|
|
@@ -46,13 +42,22 @@ SYSTEM_ADMIN_API_BASE_PATH=/api/admin
|
|
|
46
42
|
STICKER_STORAGE_DIR=./data/stickers
|
|
47
43
|
STICKER_WEB_ORIGIN=https://omnizap.shop
|
|
48
44
|
STICKER_WEB_PATH=/stickers
|
|
49
|
-
USER_ADMIN=seu_jid_de_admin@s.whatsapp.net
|
|
50
45
|
WHATSAPP_BOT_NUMBER=5511999999999
|
|
46
|
+
WHATSAPP_SUPPORT_NUMBER=5511999999999
|
|
47
|
+
WHATSAPP_ADMIN_NUMBER=5511999999999
|
|
48
|
+
WHATSAPP_ADMIN_JID=seu_jid_de_admin@s.whatsapp.net
|
|
51
49
|
WHATSAPP_LOGIN_BASE_URL=https://omnizap.shop
|
|
52
50
|
WHATSAPP_LOGIN_LINK_SECRET=troque_por_um_segredo_forte
|
|
53
51
|
WHATSAPP_LOGIN_PATH=/login/
|
|
54
52
|
WHATSAPP_LOGIN_TRIGGER=iniciar
|
|
55
|
-
|
|
53
|
+
|
|
54
|
+
# Legado (compatibilidade): mantenha vazio quando usar as variaveis canonicas acima
|
|
55
|
+
BOT_NUMBER=
|
|
56
|
+
BOT_PHONE_NUMBER=
|
|
57
|
+
OWNER_NUMBER=
|
|
58
|
+
PHONE_NUMBER=
|
|
59
|
+
USER_ADMIN=
|
|
60
|
+
WHATSAPP_PUBLIC_CONTACT_NUMBER=
|
|
56
61
|
|
|
57
62
|
# ==============================
|
|
58
63
|
# PRIORIDADE 2 - OPERACAO BASE
|
|
@@ -120,11 +125,18 @@ BAILEYS_REPLY_PRESENCE_BEFORE=composing
|
|
|
120
125
|
BAILEYS_REPLY_PRESENCE_AFTER=paused
|
|
121
126
|
BAILEYS_REPLY_PRESENCE_DELAY_MS=280
|
|
122
127
|
BAILEYS_AUTH_SESSION_ID=default
|
|
128
|
+
BAILEYS_SESSION_IDS=default
|
|
129
|
+
BAILEYS_PRIMARY_SESSION_ID=default
|
|
130
|
+
BAILEYS_SESSION_WEIGHTS=default=1
|
|
123
131
|
BAILEYS_AUTH_BOOTSTRAP_FROM_FILES=true
|
|
124
132
|
BAILEYS_SINGLE_WRITER_LOCK_ENABLED=true
|
|
125
133
|
BAILEYS_SINGLE_WRITER_LOCK_NAME=
|
|
126
134
|
BAILEYS_SINGLE_WRITER_LOCK_TIMEOUT_SECONDS=2
|
|
127
135
|
BAILEYS_SINGLE_WRITER_LOCK_RETRY_DELAY_MS=15000
|
|
136
|
+
GROUP_OWNER_ENFORCEMENT_MODE=off
|
|
137
|
+
GROUP_OWNER_LEASE_MS=120000
|
|
138
|
+
GROUP_OWNER_HEARTBEAT_MS=30000
|
|
139
|
+
GROUP_BALANCER_ENABLED=false
|
|
128
140
|
BAILEYS_EVENT_BATCH_SIZE=100
|
|
129
141
|
BAILEYS_EVENT_QUEUE_MAX=4000
|
|
130
142
|
BAILEYS_EVENT_JOURNAL_RETENTION_DAYS=14
|
|
@@ -160,6 +172,7 @@ HOME_MARKETPLACE_STATS_CACHE_SECONDS=45
|
|
|
160
172
|
HOSTNAME=
|
|
161
173
|
IMAGE_MENU=https://example.com/assets/omnizap-banner.png
|
|
162
174
|
HELMET_CONTENT_SECURITY_POLICY_ENABLED=true
|
|
175
|
+
HELMET_CSP_FRAME_SRC_EXTRA=
|
|
163
176
|
LID_BACKFILL_BATCH=50000
|
|
164
177
|
LID_BACKFILL_ON_START=true
|
|
165
178
|
COMMAND_CONFIG_VALIDATE_ON_BOOT=true
|
|
@@ -171,6 +184,7 @@ MESSAGE_REPLY_PRESENCE_BEFORE=composing
|
|
|
171
184
|
MESSAGE_REPLY_PRESENCE_AFTER=paused
|
|
172
185
|
MESSAGE_REPLY_PRESENCE_DELAY_MS=280
|
|
173
186
|
MESSAGE_REPLY_PRESENCE_SUBSCRIBE=true
|
|
187
|
+
CONVERSATIONAL_AUTO_REPLY_ENABLED=false
|
|
174
188
|
METRICS_ENABLED=true
|
|
175
189
|
METRICS_ENDPOINT=
|
|
176
190
|
METRICS_HOST=127.0.0.1
|
|
@@ -282,7 +296,7 @@ LEGAL_TERMS_ACCEPTANCE_SOURCE=login_web
|
|
|
282
296
|
WEB_AUTH_JWT_AUDIENCE=omnizap-web
|
|
283
297
|
WEB_AUTH_JWT_DISABLED=false
|
|
284
298
|
WEB_AUTH_JWT_EXPIRES_IN=7d
|
|
285
|
-
WEB_AUTH_JWT_ISSUER=omnizap
|
|
299
|
+
WEB_AUTH_JWT_ISSUER=omnizap
|
|
286
300
|
WEB_AUTH_JWT_SECRET=
|
|
287
301
|
WEB_PASSWORD_RECOVERY_SESSION_TTL_SECONDS=900
|
|
288
302
|
WEB_USER_PASSWORD_PEPPER_SECRET=
|
|
@@ -320,6 +334,26 @@ FFMPEG_PATH=ffmpeg
|
|
|
320
334
|
FFPROBE_PATH=ffprobe
|
|
321
335
|
HTTP_SLO_TARGET_MS=750
|
|
322
336
|
NEWS_API_URL=http://127.0.0.1:3001
|
|
337
|
+
NEWS_API_ARTICLES_PATH=/articles
|
|
338
|
+
NEWS_API_ARTICLE_BY_ID_PATH=/articles/:id
|
|
339
|
+
NEWS_API_ARTICLE_BY_SLUG_PATH=/articles/slug/:slug
|
|
340
|
+
NEWS_API_TRENDS_PATH=/trends
|
|
341
|
+
NEWS_API_FRANCHISES_PATH=/franchises
|
|
342
|
+
NEWS_API_FRANCHISE_BY_SLUG_PATH=/franchises/:slug
|
|
343
|
+
NEWS_API_SOURCES_PATH=/sources
|
|
344
|
+
NEWS_API_SOURCE_BY_ID_PATH=/sources/:sourceId
|
|
345
|
+
NEWS_API_SEO_ENTITIES_PATH=/seo/entities
|
|
346
|
+
NEWS_API_SEO_BY_TYPE_SLUG_PATH=/seo/:type/:slug
|
|
347
|
+
NEWS_API_LIMIT=120
|
|
348
|
+
NEWS_API_TIMEOUT_MS=15000
|
|
349
|
+
NEWS_API_DETAILS_TIMEOUT_MS=15000
|
|
350
|
+
NEWS_API_CONTEXT_TTL_MS=180000
|
|
351
|
+
NEWS_API_DETAILS_CACHE_TTL_MS=360000
|
|
352
|
+
NEWS_API_CONTEXT_TOP=40
|
|
353
|
+
NEWS_API_LEGACY_FALLBACK=true
|
|
354
|
+
NEWS_SMART_SELECTION_ENABLED=true
|
|
355
|
+
NEWS_SMART_SELECTION_WINDOW=80
|
|
356
|
+
NEWS_CAPTION_CONTEXT_ENABLED=true
|
|
323
357
|
NEWS_SENT_IDS_LIMIT=500
|
|
324
358
|
OMNIZAP_SOCIAL_METRICS=0
|
|
325
359
|
OPENAI_IMAGE_MODEL=gpt-5-nano
|
|
@@ -388,7 +422,7 @@ POKEAPI_LORE_LANGS=pt-br,pt,en
|
|
|
388
422
|
POKEAPI_RETRY_ATTEMPTS=2
|
|
389
423
|
POKEAPI_RETRY_BASE_DELAY_MS=350
|
|
390
424
|
POKEAPI_TIMEOUT_MS=10000
|
|
391
|
-
POKEAPI_USER_AGENT=omnizap
|
|
425
|
+
POKEAPI_USER_AGENT=omnizap/2.1 (+https://github.com/Omnizap-System/omnizap)
|
|
392
426
|
QUOTE_API_URL=https://bot.lyo.su/quote/generate.png
|
|
393
427
|
QUOTE_BG_COLOR="#144d37"
|
|
394
428
|
QUOTE_EMOJI_BASE_URL=https://raw.githubusercontent.com/googlefonts/noto-emoji/main/png/128
|
|
@@ -752,7 +786,7 @@ DEPLOY_PACKAGE_STEP=0
|
|
|
752
786
|
DEPLOY_PACKAGE_TAG=latest
|
|
753
787
|
DEPLOY_PACKAGE_TEST=0
|
|
754
788
|
DEPLOY_PACKAGE_TOKEN=
|
|
755
|
-
DEPLOY_PM2_APP_NAME=omnizap-
|
|
789
|
+
DEPLOY_PM2_APP_NAME=omnizap-production
|
|
756
790
|
DEPLOY_BACKEND_CACHE_BUST_ENABLED=1
|
|
757
791
|
DEPLOY_BACKEND_BUILD_ID_ENV=OMNIZAP_BUILD_ID
|
|
758
792
|
DEPLOY_BACKEND_BUILD_ID_VALUE=
|
|
@@ -774,23 +808,34 @@ GITHUB_REPOSITORY=Omnizap-System/omnizap
|
|
|
774
808
|
GITHUB_TOKEN=
|
|
775
809
|
GRAFANA_ADMIN_PASSWORD=admin
|
|
776
810
|
GRAFANA_ADMIN_USER=admin
|
|
811
|
+
GRAFANA_ALLOW_EMBEDDING=true
|
|
777
812
|
GRAFANA_DASHBOARDS_PATH=./observability/grafana/dashboards
|
|
778
813
|
GRAFANA_IMAGE_TAG=10.4.3
|
|
779
814
|
GRAFANA_BIND_HOST=127.0.0.1
|
|
780
815
|
GRAFANA_PORT=3003
|
|
816
|
+
GRAFANA_PUBLIC_URL=https://omnizap.shop/api/grafana
|
|
781
817
|
GRAFANA_PROVISIONING_PATH=./observability/grafana/provisioning
|
|
782
|
-
GRAFANA_ROOT_URL
|
|
818
|
+
GRAFANA_ROOT_URL=https://omnizap.shop/api/grafana
|
|
819
|
+
GRAFANA_SERVE_FROM_SUB_PATH=true
|
|
820
|
+
GRAFANA_PROXY_BASE_PATH=/api/grafana
|
|
821
|
+
GRAFANA_PROXY_LEGACY_BASE_PATH=/grafana
|
|
822
|
+
GRAFANA_PROXY_TARGET_URL=http://127.0.0.1:3003
|
|
823
|
+
SYSTEM_ADMIN_GRAFANA_URL=https://omnizap.shop/api/grafana
|
|
824
|
+
SYSTEM_ADMIN_GRAFANA_DASHBOARDS=omnizap-system-admin|System Admin,omnizap-overview|Overview,omnizap-mysql|MySQL
|
|
825
|
+
SYSTEM_ADMIN_GRAFANA_TIME_FROM=now-6h
|
|
826
|
+
SYSTEM_ADMIN_GRAFANA_TIME_TO=now
|
|
827
|
+
SYSTEM_ADMIN_GRAFANA_REFRESH=10s
|
|
783
828
|
GRAFANA_TIMEZONE=America/Boa_Vista
|
|
784
829
|
LOKI_CONFIG_PATH=./observability/loki-config.yml
|
|
785
830
|
LOKI_IMAGE_TAG=2.9.4
|
|
786
831
|
LOKI_BIND_HOST=127.0.0.1
|
|
787
832
|
LOKI_PORT=3100
|
|
788
833
|
MYSQL_EXPORTER_CNF_PATH=./observability/mysql-exporter.cnf
|
|
789
|
-
MYSQL_EXPORTER_DSN=exporter:exporter@(
|
|
834
|
+
MYSQL_EXPORTER_DSN=exporter:exporter@unix(/run/mysqld/mysqld.sock)/
|
|
790
835
|
MYSQL_EXPORTER_IMAGE_TAG=v0.15.1
|
|
791
836
|
MYSQL_EXPORTER_BIND_HOST=127.0.0.1
|
|
792
837
|
MYSQL_EXPORTER_PORT=9104
|
|
793
|
-
MYSQL_LOGS_PATH=/var/
|
|
838
|
+
MYSQL_LOGS_PATH=/var/log/mysql
|
|
794
839
|
NODE_AUTH_TOKEN=
|
|
795
840
|
NODE_EXPORTER_IMAGE_TAG=v1.7.0
|
|
796
841
|
NODE_EXPORTER_BIND_HOST=127.0.0.1
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -39,12 +39,12 @@ jobs:
|
|
|
39
39
|
DB_POOL_LIMIT: 5
|
|
40
40
|
steps:
|
|
41
41
|
- name: Checkout
|
|
42
|
-
uses: actions/checkout@
|
|
42
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
43
43
|
with:
|
|
44
44
|
persist-credentials: false
|
|
45
45
|
|
|
46
46
|
- name: Setup Node.js
|
|
47
|
-
uses: actions/setup-node@
|
|
47
|
+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f
|
|
48
48
|
with:
|
|
49
49
|
node-version: 20
|
|
50
50
|
cache: npm
|
|
@@ -57,6 +57,9 @@ jobs:
|
|
|
57
57
|
- name: Install dependencies
|
|
58
58
|
run: npm ci
|
|
59
59
|
|
|
60
|
+
- name: DB bootstrap smoke test
|
|
61
|
+
run: npm run db:init
|
|
62
|
+
|
|
60
63
|
- name: Check formatting
|
|
61
64
|
run: npm run format:check
|
|
62
65
|
|
|
@@ -68,6 +71,3 @@ jobs:
|
|
|
68
71
|
|
|
69
72
|
- name: Build
|
|
70
73
|
run: npm run build
|
|
71
|
-
|
|
72
|
-
- name: DB bootstrap smoke test
|
|
73
|
-
run: npm run db:init
|
|
@@ -59,7 +59,7 @@ jobs:
|
|
|
59
59
|
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
|
60
60
|
steps:
|
|
61
61
|
- name: Checkout repository
|
|
62
|
-
uses: actions/checkout@
|
|
62
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
63
63
|
with:
|
|
64
64
|
persist-credentials: false
|
|
65
65
|
|
|
@@ -40,12 +40,12 @@ jobs:
|
|
|
40
40
|
DB_POOL_LIMIT: 5
|
|
41
41
|
steps:
|
|
42
42
|
- name: Checkout
|
|
43
|
-
uses: actions/checkout@
|
|
43
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
44
44
|
with:
|
|
45
45
|
persist-credentials: false
|
|
46
46
|
|
|
47
47
|
- name: Setup Node.js
|
|
48
|
-
uses: actions/setup-node@
|
|
48
|
+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f
|
|
49
49
|
with:
|
|
50
50
|
node-version: 20
|
|
51
51
|
cache: npm
|
|
@@ -59,13 +59,13 @@ jobs:
|
|
|
59
59
|
packages: write
|
|
60
60
|
steps:
|
|
61
61
|
- name: Checkout
|
|
62
|
-
uses: actions/checkout@
|
|
62
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
63
63
|
with:
|
|
64
64
|
fetch-depth: 0
|
|
65
65
|
persist-credentials: false
|
|
66
66
|
|
|
67
67
|
- name: Setup Node.js
|
|
68
|
-
uses: actions/setup-node@
|
|
68
|
+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f
|
|
69
69
|
with:
|
|
70
70
|
node-version: 20
|
|
71
71
|
cache: npm
|
|
@@ -63,13 +63,13 @@ jobs:
|
|
|
63
63
|
packages: write
|
|
64
64
|
steps:
|
|
65
65
|
- name: Checkout
|
|
66
|
-
uses: actions/checkout@
|
|
66
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
67
67
|
with:
|
|
68
68
|
fetch-depth: 0
|
|
69
69
|
persist-credentials: false
|
|
70
70
|
|
|
71
71
|
- name: Setup Node.js
|
|
72
|
-
uses: actions/setup-node@
|
|
72
|
+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f
|
|
73
73
|
with:
|
|
74
74
|
node-version: 20
|
|
75
75
|
cache: npm
|
|
@@ -24,12 +24,12 @@ jobs:
|
|
|
24
24
|
id-token: write
|
|
25
25
|
steps:
|
|
26
26
|
- name: Checkout
|
|
27
|
-
uses: actions/checkout@
|
|
27
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
28
28
|
with:
|
|
29
29
|
persist-credentials: false
|
|
30
30
|
|
|
31
31
|
- name: Setup Node.js
|
|
32
|
-
uses: actions/setup-node@
|
|
32
|
+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f
|
|
33
33
|
with:
|
|
34
34
|
node-version: 20
|
|
35
35
|
|
|
@@ -21,14 +21,23 @@ jobs:
|
|
|
21
21
|
name: Secret Leak Scan
|
|
22
22
|
runs-on: ubuntu-latest
|
|
23
23
|
timeout-minutes: 20
|
|
24
|
+
permissions:
|
|
25
|
+
contents: read
|
|
26
|
+
security-events: write
|
|
24
27
|
steps:
|
|
25
28
|
- name: Checkout
|
|
26
|
-
uses: actions/checkout@
|
|
29
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
27
30
|
with:
|
|
28
31
|
fetch-depth: 0
|
|
29
32
|
persist-credentials: false
|
|
30
33
|
|
|
31
34
|
- name: Run Gitleaks
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
run: |
|
|
36
|
+
docker run --rm -v "$PWD":/repo -w /repo zricethezav/gitleaks:v8.25.1 \
|
|
37
|
+
git --config .gitleaks.toml --redact --verbose --report-format sarif --report-path gitleaks.sarif --exit-code 0
|
|
38
|
+
|
|
39
|
+
- name: Upload SARIF
|
|
40
|
+
if: always()
|
|
41
|
+
uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98
|
|
42
|
+
with:
|
|
43
|
+
sarif_file: gitleaks.sarif
|
|
@@ -18,12 +18,12 @@ jobs:
|
|
|
18
18
|
timeout-minutes: 10
|
|
19
19
|
steps:
|
|
20
20
|
- name: Harden runner
|
|
21
|
-
uses: step-security/harden-runner@
|
|
21
|
+
uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594
|
|
22
22
|
with:
|
|
23
23
|
egress-policy: audit
|
|
24
24
|
|
|
25
25
|
- name: Checkout
|
|
26
|
-
uses: actions/checkout@
|
|
26
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
27
27
|
with:
|
|
28
28
|
persist-credentials: false
|
|
29
29
|
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
TARGET_URL: ${{ inputs.target_url || vars.SECURITY_SCAN_TARGET_URL || 'https://omnizap.shop/' }}
|
|
31
31
|
steps:
|
|
32
32
|
- name: Checkout
|
|
33
|
-
uses: actions/checkout@
|
|
33
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
34
34
|
with:
|
|
35
35
|
persist-credentials: false
|
|
36
36
|
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
TARGET_URL: ${{ inputs.target_url || vars.SECURITY_SCAN_TARGET_URL || 'https://omnizap.shop/' }}
|
|
31
31
|
steps:
|
|
32
32
|
- name: Checkout
|
|
33
|
-
uses: actions/checkout@
|
|
33
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
|
34
34
|
with:
|
|
35
35
|
persist-credentials: false
|
|
36
36
|
|
|
@@ -39,5 +39,6 @@ jobs:
|
|
|
39
39
|
with:
|
|
40
40
|
target: ${{ env.TARGET_URL }}
|
|
41
41
|
fail_action: false
|
|
42
|
+
artifact_name: zap-scan-full
|
|
42
43
|
env:
|
|
43
44
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
package/.gitleaksignore
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Known false positives for migration identifiers and sanitized message fixtures.
|
|
2
|
+
# Fingerprints are stable by commit:path:rule:line.
|
|
3
|
+
7f8d845f120ccb0edb82a8b2f8f813aadb48a180:database/migrations/20260307_d0_hardening_down.sql:generic-api-key:5
|
|
4
|
+
7f8d845f120ccb0edb82a8b2f8f813aadb48a180:database/migrations/20260307_d0_hardening_up.sql:generic-api-key:6
|
|
5
|
+
7f8d845f120ccb0edb82a8b2f8f813aadb48a180:docs/database/production-db-evolution-runbook-2026q1.md:generic-api-key:55
|
|
6
|
+
698dcd6f1c07af00cd91871128e1ed99f36ed9ff:temp/messages.json:generic-api-key:16
|
|
7
|
+
698dcd6f1c07af00cd91871128e1ed99f36ed9ff:temp/messages.json:generic-api-key:24
|
|
8
|
+
698dcd6f1c07af00cd91871128e1ed99f36ed9ff:temp/messages.json:generic-api-key:43
|
|
9
|
+
698dcd6f1c07af00cd91871128e1ed99f36ed9ff:temp/messages.json:generic-api-key:79
|
package/CODE_OF_CONDUCT.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Nosso compromisso
|
|
4
4
|
|
|
5
|
-
Nós, contribuidores e mantenedores do
|
|
5
|
+
Nós, contribuidores e mantenedores do Omnizap, 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
6
|
|
|
7
7
|
Nós nos comprometemos a agir e interagir de forma a promover uma comunidade aberta, acolhedora, diversa, inclusiva e saudável.
|
|
8
8
|
|
|
@@ -51,7 +51,7 @@ Este Código de Conduta se aplica a todos os espaços oficiais do projeto, inclu
|
|
|
51
51
|
- Canais de comunicação relacionados ao projeto.
|
|
52
52
|
- Interações em nome do projeto em espaços públicos.
|
|
53
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
|
|
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.
|
|
55
55
|
|
|
56
56
|
## Responsabilidade de aplicação
|
|
57
57
|
|
package/GEMINI.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Omnizap - GEMINI.md
|
|
2
|
+
|
|
3
|
+
Este arquivo fornece contexto e diretrizes para o Gemini CLI operar com segurança e eficiência no projeto **Omnizap**.
|
|
4
|
+
|
|
5
|
+
## Visão Geral do Projeto
|
|
6
|
+
|
|
7
|
+
O **Omnizap** é um sistema profissional de automação para WhatsApp, integrando um bot robusto, painel web de gerenciamento, catálogo de figurinhas (stickers) com classificação por IA e um sistema de RPG (Pokemon) integrado.
|
|
8
|
+
|
|
9
|
+
- **Arquitetura:** Monolito modular em Node.js (ESM).
|
|
10
|
+
- **Core Engine:** `@whiskeysockets/baileys` para conectividade WhatsApp.
|
|
11
|
+
- **Backend:** Servidor HTTP customizado (Node.js nativo + roteamento modular), MySQL para persistência.
|
|
12
|
+
- **Frontend:** Single Page Applications (SPAs) em React, estilizadas com TailwindCSS e DaisyUI.
|
|
13
|
+
- **Observabilidade:** Métricas via Prometheus, logs estruturados com `pino`.
|
|
14
|
+
- **IA:** Integração com Gemini e OpenAI para suporte, classificação de stickers e aprendizado de padrões.
|
|
15
|
+
|
|
16
|
+
## Estrutura do Repositório
|
|
17
|
+
|
|
18
|
+
- `index.js`: Ponto de entrada (bootstrap) que inicializa banco, servidor HTTP e conexão WhatsApp.
|
|
19
|
+
- `app/`: Lógica de domínio do bot e serviços.
|
|
20
|
+
- `connection/`: Gerenciamento do socket Baileys e estado de autenticação.
|
|
21
|
+
- `controllers/`: Pipeline de processamento de mensagens.
|
|
22
|
+
- `modules/`: Módulos funcionais (AI, RPG, StickerPack, Admin, etc.).
|
|
23
|
+
- `services/`: Serviços de infraestrutura e integração externa.
|
|
24
|
+
- `server/`: Servidor HTTP, rotas, middlewares e controladores de API.
|
|
25
|
+
- `database/`: Schema consolidado (`schema.sql`) e script de inicialização (`init.js`).
|
|
26
|
+
- `public/`: Código-fonte do frontend (React) e assets estáticos.
|
|
27
|
+
- `scripts/`: Utilitários para build, deploy, release e tarefas de background.
|
|
28
|
+
- `docs/`: Documentação técnica, manuais de operação e conformidade.
|
|
29
|
+
|
|
30
|
+
## Comandos Principais
|
|
31
|
+
|
|
32
|
+
### Desenvolvimento
|
|
33
|
+
|
|
34
|
+
- `npm install`: Instala as dependências.
|
|
35
|
+
- `cp .env.example .env`: Configura as variáveis de ambiente necessárias.
|
|
36
|
+
- `npm run db:init`: Inicializa o banco de dados MySQL e aplica o schema.
|
|
37
|
+
- `npm run dev`: Inicia o sistema em modo de desenvolvimento.
|
|
38
|
+
|
|
39
|
+
### Build e Qualidade
|
|
40
|
+
|
|
41
|
+
- `npm run build:frontend`: Gera os bundles de produção para o frontend (CSS + JS via Vite).
|
|
42
|
+
- `npm run check`: Executa linting, testes e checagem de formatação.
|
|
43
|
+
- `npm test`: Roda a suíte de testes (Node.js native test runner).
|
|
44
|
+
- `npm run lint`: Executa o ESLint.
|
|
45
|
+
- `npm run format`: Aplica a formatação do Prettier.
|
|
46
|
+
|
|
47
|
+
### Segurança e Manutenção
|
|
48
|
+
|
|
49
|
+
- `npm run security:audit`: Executa auditoria de dependências (`npm audit`).
|
|
50
|
+
- `npm run security:codeql`: Roda análise estática localmente.
|
|
51
|
+
- `npm run catalog:commands`: Gera o catálogo de comandos para os módulos.
|
|
52
|
+
|
|
53
|
+
## Convenções de Desenvolvimento
|
|
54
|
+
|
|
55
|
+
- **Módulos:** Utilize estritamente ES Modules (`import`/`export`).
|
|
56
|
+
- **Imports:** Use subpath imports definidos no `package.json` (`#logger`, `#time`).
|
|
57
|
+
- **Logging:** Utilize o módulo `#logger` (Pino) para logs estruturados. Evite `console.log`.
|
|
58
|
+
- **Banco de Dados:** Utilize o pool de conexões do MySQL em `database/index.js`. Novos campos devem ser refletidos no `database/schema.sql`.
|
|
59
|
+
- **Frontend:** Novos componentes devem seguir o padrão React + TailwindCSS.
|
|
60
|
+
- **Segurança:** Nunca exponha segredos ou dados sensíveis em logs ou no código. Use variáveis de ambiente.
|
|
61
|
+
|
|
62
|
+
## Observações de Segurança
|
|
63
|
+
|
|
64
|
+
O projeto possui fluxos de CI para CodeQL e Gitleaks. Auditorias de dependência devem ser realizadas regularmente. O sistema utiliza `helmet` e `express-rate-limit` (no backend) para proteção contra ataques comuns.
|
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
<img width="1318" height="352" alt="OmniZap banner" src="https://
|
|
1
|
+
<img width="1318" height="352" alt="OmniZap banner" src="https://iili.io/qlAYvSf.png" />
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# Omnizap
|
|
4
|
+
|
|
5
|
+
Projeto principal da organizacao **Omnizap**, focado em automacao para WhatsApp com bot, painel web, catalogo de figurinhas e operacao em producao.
|
|
4
6
|
|
|
5
7
|
[](https://github.com/Omnizap-System/omnizap/actions/workflows/ci.yml)
|
|
6
8
|
[](https://github.com/Omnizap-System/omnizap/actions/workflows/codeql.yml)
|
|
@@ -8,103 +10,71 @@
|
|
|
8
10
|
[](./LICENSE)
|
|
9
11
|
[](https://nodejs.org/)
|
|
10
12
|
|
|
11
|
-
|
|
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:
|
|
13
|
+
## Organizacao e Projeto
|
|
57
14
|
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
15
|
+
- Organizacao: [Omnizap](https://github.com/Omnizap-System)
|
|
16
|
+
- Perfil da organizacao: [Omnizap-System/.github](https://github.com/Omnizap-System/.github)
|
|
17
|
+
- Projeto principal: [Omnizap](https://github.com/Omnizap-System/omnizap)
|
|
18
|
+
- Pacote atual: `omnizap`
|
|
62
19
|
|
|
63
|
-
|
|
20
|
+
## Links Oficiais
|
|
64
21
|
|
|
65
|
-
|
|
22
|
+
- Site: https://omnizap.shop/
|
|
23
|
+
- Documentacao da API: https://omnizap.shop/api-docs/
|
|
24
|
+
- Painel do usuario: https://omnizap.shop/user/
|
|
25
|
+
- Catalogo de figurinhas: https://omnizap.shop/stickers/
|
|
26
|
+
- Wiki: https://github.com/Omnizap-System/omnizap/wiki
|
|
66
27
|
|
|
67
|
-
|
|
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.
|
|
28
|
+
## Quick Start
|
|
72
29
|
|
|
73
|
-
|
|
30
|
+
1. Instale dependencias:
|
|
74
31
|
|
|
75
|
-
|
|
32
|
+
```bash
|
|
33
|
+
npm install
|
|
34
|
+
```
|
|
76
35
|
|
|
77
|
-
|
|
36
|
+
2. Configure ambiente:
|
|
78
37
|
|
|
79
|
-
|
|
38
|
+
```bash
|
|
39
|
+
cp .env.example .env
|
|
40
|
+
```
|
|
80
41
|
|
|
81
|
-
|
|
42
|
+
3. Inicialize banco e frontend:
|
|
82
43
|
|
|
83
|
-
|
|
44
|
+
```bash
|
|
45
|
+
npm run db:init
|
|
46
|
+
npm run build:frontend
|
|
47
|
+
```
|
|
84
48
|
|
|
85
|
-
|
|
49
|
+
4. Rode localmente:
|
|
86
50
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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.
|
|
51
|
+
```bash
|
|
52
|
+
npm run dev
|
|
53
|
+
```
|
|
93
54
|
|
|
94
|
-
|
|
55
|
+
## Stack
|
|
95
56
|
|
|
96
|
-
|
|
57
|
+
- Bot engine: `@whiskeysockets/baileys`
|
|
58
|
+
- Backend HTTP: Node.js
|
|
59
|
+
- Frontend: React + TailwindCSS + DaisyUI
|
|
60
|
+
- Banco de dados: MySQL
|
|
61
|
+
- Observabilidade: Prometheus + logs estruturados
|
|
97
62
|
|
|
98
|
-
|
|
63
|
+
## Estrutura do Repositorio
|
|
99
64
|
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
65
|
+
- `app/`: modulos do bot e servicos de dominio
|
|
66
|
+
- `server/`: rotas, middlewares e controladores HTTP
|
|
67
|
+
- `database/`: schema, init e evolucao de banco
|
|
68
|
+
- `public/`: frontend React e assets estaticos
|
|
69
|
+
- `scripts/`: automacoes de build, release e operacao
|
|
70
|
+
- `docs/`: runbooks de seguranca, compliance e SEO
|
|
103
71
|
|
|
104
|
-
|
|
72
|
+
## Seguranca
|
|
105
73
|
|
|
106
|
-
|
|
74
|
+
- Politica e processo de reporte em [SECURITY.md](./SECURITY.md)
|
|
75
|
+
- Fluxo de seguranca com CodeQL, Gitleaks e hardening de workflows
|
|
76
|
+
- Materiais de conformidade em `docs/compliance` e `docs/security`
|
|
107
77
|
|
|
108
|
-
##
|
|
78
|
+
## Licenca
|
|
109
79
|
|
|
110
|
-
|
|
80
|
+
Distribuido sob a licenca MIT. Consulte [LICENSE](./LICENSE).
|
package/SECURITY.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Este documento estabelece:
|
|
4
4
|
|
|
5
|
-
- as diretrizes formais para tratamento de vulnerabilidades no
|
|
5
|
+
- as diretrizes formais para tratamento de vulnerabilidades no Omnizap;
|
|
6
6
|
- o fluxo operacional (runbook) utilizado para triagem, correção e divulgação responsável.
|
|
7
7
|
|
|
8
8
|
## Objetivo e Aplicabilidade
|
package/app/config/index.js
CHANGED
|
@@ -2,3 +2,5 @@ export * from '../configParts/baileysConfig.js';
|
|
|
2
2
|
export * from '../configParts/groupUtils.js';
|
|
3
3
|
export * from '../configParts/adminIdentity.js';
|
|
4
4
|
export * from '../configParts/loggerConfig.js';
|
|
5
|
+
export * from '../configParts/sessionConfig.js';
|
|
6
|
+
export * from '../../utils/whatsapp/contactEnv.js';
|