@kaikybrofc/omnizap-system 2.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/.env.example +534 -0
  2. package/LICENSE +21 -0
  3. package/README.md +431 -0
  4. package/RELEASE-v2.1.2.md +83 -0
  5. package/app/config/adminIdentity.js +87 -0
  6. package/app/config/baileysConfig.js +693 -0
  7. package/app/config/groupUtils.js +388 -0
  8. package/app/connection/socketController.js +992 -0
  9. package/app/controllers/messageController.js +354 -0
  10. package/app/modules/adminModule/groupCommandHandlers.js +1294 -0
  11. package/app/modules/adminModule/groupEventHandlers.js +355 -0
  12. package/app/modules/aiModule/catCommand.js +1006 -0
  13. package/app/modules/broadcastModule/noticeCommand.js +416 -0
  14. package/app/modules/gameModule/diceCommand.js +67 -0
  15. package/app/modules/menuModule/common.js +311 -0
  16. package/app/modules/menuModule/menus.js +59 -0
  17. package/app/modules/playModule/playCommand.js +1615 -0
  18. package/app/modules/quoteModule/quoteCommand.js +851 -0
  19. package/app/modules/rpgPokemonModule/rpgBattleCanvasRenderer.js +786 -0
  20. package/app/modules/rpgPokemonModule/rpgBattleService.js +2082 -0
  21. package/app/modules/rpgPokemonModule/rpgBattleService.test.js +760 -0
  22. package/app/modules/rpgPokemonModule/rpgEvolutionUtils.js +22 -0
  23. package/app/modules/rpgPokemonModule/rpgPokemonCommand.js +172 -0
  24. package/app/modules/rpgPokemonModule/rpgPokemonDomain.js +192 -0
  25. package/app/modules/rpgPokemonModule/rpgPokemonDomain.test.js +93 -0
  26. package/app/modules/rpgPokemonModule/rpgPokemonEvolution.test.js +46 -0
  27. package/app/modules/rpgPokemonModule/rpgPokemonMessages.js +746 -0
  28. package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1859 -0
  29. package/app/modules/rpgPokemonModule/rpgPokemonService.js +6738 -0
  30. package/app/modules/rpgPokemonModule/rpgProfileCanvasRenderer.js +354 -0
  31. package/app/modules/statsModule/globalRankingCommand.js +65 -0
  32. package/app/modules/statsModule/noMessageCommand.js +288 -0
  33. package/app/modules/statsModule/rankingCommand.js +60 -0
  34. package/app/modules/statsModule/rankingCommon.js +889 -0
  35. package/app/modules/stickerModule/addStickerMetadata.js +239 -0
  36. package/app/modules/stickerModule/convertToWebp.js +390 -0
  37. package/app/modules/stickerModule/stickerCommand.js +454 -0
  38. package/app/modules/stickerModule/stickerConvertCommand.js +156 -0
  39. package/app/modules/stickerModule/stickerTextCommand.js +657 -0
  40. package/app/modules/stickerPackModule/autoPackCollectorRuntime.js +20 -0
  41. package/app/modules/stickerPackModule/autoPackCollectorService.js +284 -0
  42. package/app/modules/stickerPackModule/semanticReclassificationEngine.js +466 -0
  43. package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +88 -0
  44. package/app/modules/stickerPackModule/semanticThemeClusterService.js +571 -0
  45. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +449 -0
  46. package/app/modules/stickerPackModule/stickerAssetRepository.js +400 -0
  47. package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +180 -0
  48. package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +4078 -0
  49. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +598 -0
  50. package/app/modules/stickerPackModule/stickerClassificationService.js +588 -0
  51. package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +102 -0
  52. package/app/modules/stickerPackModule/stickerPackCatalogHttp.js +7506 -0
  53. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +1095 -0
  54. package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +108 -0
  55. package/app/modules/stickerPackModule/stickerPackErrors.js +30 -0
  56. package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +110 -0
  57. package/app/modules/stickerPackModule/stickerPackItemRepository.js +440 -0
  58. package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +337 -0
  59. package/app/modules/stickerPackModule/stickerPackMessageService.js +296 -0
  60. package/app/modules/stickerPackModule/stickerPackRepository.js +442 -0
  61. package/app/modules/stickerPackModule/stickerPackService.js +788 -0
  62. package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +51 -0
  63. package/app/modules/stickerPackModule/stickerPackUtils.js +97 -0
  64. package/app/modules/stickerPackModule/stickerStorageService.js +507 -0
  65. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +233 -0
  66. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +205 -0
  67. package/app/modules/systemMetricsModule/pingCommand.js +421 -0
  68. package/app/modules/tiktokModule/tiktokCommand.js +798 -0
  69. package/app/modules/userModule/userCommand.js +1217 -0
  70. package/app/modules/waifuPicsModule/waifuPicsCommand.js +177 -0
  71. package/app/observability/metrics.js +734 -0
  72. package/app/services/captchaService.js +492 -0
  73. package/app/services/dbWriteQueue.js +572 -0
  74. package/app/services/groupMetadataService.js +279 -0
  75. package/app/services/lidMapService.js +663 -0
  76. package/app/services/messagePersistenceService.js +56 -0
  77. package/app/services/newsBroadcastService.js +351 -0
  78. package/app/services/pokeApiService.js +398 -0
  79. package/app/services/queueUtils.js +57 -0
  80. package/app/services/socketState.js +7 -0
  81. package/app/store/aiPromptStore.js +38 -0
  82. package/app/store/groupConfigStore.js +58 -0
  83. package/app/store/premiumUserStore.js +36 -0
  84. package/app/utils/antiLink/antiLinkModule.js +804 -0
  85. package/app/utils/http/getImageBufferModule.js +18 -0
  86. package/app/utils/json/jsonSanitizer.js +113 -0
  87. package/app/utils/json/jsonSanitizer.test.js +40 -0
  88. package/app/utils/logger/loggerModule.js +262 -0
  89. package/app/utils/systemMetrics/systemMetricsModule.js +91 -0
  90. package/database/index.js +2052 -0
  91. package/database/init.js +516 -0
  92. package/database/migrations/20260203_0001_sticker_packs.sql +54 -0
  93. package/database/migrations/20260210_0003_rpg_pokemon.sql +58 -0
  94. package/database/migrations/20260210_0004_rpg_shiny_biome.sql +9 -0
  95. package/database/migrations/20260210_0005_rpg_missions.sql +14 -0
  96. package/database/migrations/20260210_0006_rpg_world_pokedex_traits.sql +27 -0
  97. package/database/migrations/20260210_0007_rpg_raid_pvp.sql +56 -0
  98. package/database/migrations/20260210_0008_rpg_social_system.sql +195 -0
  99. package/database/migrations/20260211_0009_rpg_social_xp.sql +36 -0
  100. package/database/migrations/20260222_0010_remove_message_xp.sql +2 -0
  101. package/database/migrations/20260226_0011_sticker_asset_classification.sql +17 -0
  102. package/database/migrations/20260226_0012_sticker_pack_engagement.sql +16 -0
  103. package/database/migrations/20260226_0013_sticker_marketplace_intelligence.sql +19 -0
  104. package/database/migrations/20260226_0014_sticker_pack_publish_flow.sql +30 -0
  105. package/database/migrations/20260226_0014_sticker_worker_queues.sql +42 -0
  106. package/database/migrations/20260226_0015_sticker_auto_pack_curation_integrity.sql +18 -0
  107. package/database/migrations/20260226_0016_sticker_web_google_auth_persistence.sql +34 -0
  108. package/database/migrations/20260226_0017_sticker_web_admin_ban.sql +22 -0
  109. package/database/migrations/20260226_0018_sticker_web_admin_moderator.sql +18 -0
  110. package/database/migrations/20260227_0019_sticker_classification_v2_signals.sql +12 -0
  111. package/database/migrations/20260227_0020_semantic_theme_clusters.sql +35 -0
  112. package/docker-compose.yml +103 -0
  113. package/ecosystem.prod.config.cjs +35 -0
  114. package/eslint.config.js +61 -0
  115. package/index.js +437 -0
  116. package/ml/clip_classifier/Dockerfile +16 -0
  117. package/ml/clip_classifier/README.md +120 -0
  118. package/ml/clip_classifier/adaptive_scoring.py +40 -0
  119. package/ml/clip_classifier/classifier.py +654 -0
  120. package/ml/clip_classifier/embedding_store.py +481 -0
  121. package/ml/clip_classifier/env_loader.py +15 -0
  122. package/ml/clip_classifier/llm_label_expander.py +144 -0
  123. package/ml/clip_classifier/main.py +213 -0
  124. package/ml/clip_classifier/requirements.txt +10 -0
  125. package/ml/clip_classifier/similarity_engine.py +74 -0
  126. package/observability/alert-rules.yml +60 -0
  127. package/observability/grafana/dashboards/omnizap-mysql.json +136 -0
  128. package/observability/grafana/dashboards/omnizap-overview.json +170 -0
  129. package/observability/grafana/provisioning/dashboards/dashboards.yml +11 -0
  130. package/observability/grafana/provisioning/datasources/datasources.yml +15 -0
  131. package/observability/loki-config.yml +38 -0
  132. package/observability/mysql-exporter.cnf +5 -0
  133. package/observability/mysql-setup.sql +46 -0
  134. package/observability/prometheus.yml +32 -0
  135. package/observability/promtail-config.yml +84 -0
  136. package/package.json +109 -0
  137. package/public/api-docs/index.html +144 -0
  138. package/public/css/github-project-panel.css +297 -0
  139. package/public/css/stickers-admin.css +1272 -0
  140. package/public/css/styles.css +671 -0
  141. package/public/index.html +1311 -0
  142. package/public/js/apps/apiDocsApp.js +310 -0
  143. package/public/js/apps/createPackApp.js +2069 -0
  144. package/public/js/apps/homeApp.js +396 -0
  145. package/public/js/apps/stickersAdminApp.js +1744 -0
  146. package/public/js/apps/stickersApp.js +4830 -0
  147. package/public/js/catalog.js +1019 -0
  148. package/public/js/github-panel/components/CommitList.js +34 -0
  149. package/public/js/github-panel/components/ErrorState.js +16 -0
  150. package/public/js/github-panel/components/GithubProjectPanel.js +106 -0
  151. package/public/js/github-panel/components/ReleaseList.js +38 -0
  152. package/public/js/github-panel/components/SkeletonPanel.js +22 -0
  153. package/public/js/github-panel/components/StatCard.js +15 -0
  154. package/public/js/github-panel/index.js +15 -0
  155. package/public/js/github-panel/useGithubRepoData.js +154 -0
  156. package/public/js/github-panel/vendor/react.js +11 -0
  157. package/public/js/runtime/react-runtime.js +19 -0
  158. package/public/licenca/index.html +106 -0
  159. package/public/stickers/admin/index.html +23 -0
  160. package/public/stickers/create/index.html +47 -0
  161. package/public/stickers/index.html +48 -0
  162. package/public/termos-de-uso/index.html +125 -0
  163. package/scripts/cache-bust.mjs +107 -0
  164. package/scripts/deploy.sh +458 -0
  165. package/scripts/github-deploy-notify.mjs +174 -0
  166. package/scripts/release.sh +129 -0
package/.env.example ADDED
@@ -0,0 +1,534 @@
1
+ # ==============================
2
+ # OmniZap - Ambiente base
3
+ # ==============================
4
+
5
+ # Configuracoes gerais do bot
6
+ COMMAND_PREFIX="#"
7
+ COMMAND_REACT_EMOJI=🤖
8
+ USER_ADMIN=seu_jid_de_admin@s.whatsapp.net
9
+ IMAGE_MENU=https://example.com/assets/omnizap-banner.png
10
+ PM2_APP_NAME=omnizap-system
11
+ NODE_ENV=development
12
+ LOG_LEVEL=info
13
+ ECOSYSTEM_NAME=omnizap
14
+ BAILEYS_VERSION=
15
+
16
+ # Perfil de usuario / social
17
+ USER_PROFILE_ACTIVE_DAYS=30
18
+ USER_PROFILE_SOCIAL_DAYS=45
19
+
20
+ # Captcha
21
+ CAPTCHA_OK_EMOJI=✅
22
+
23
+ # ==============================
24
+ # Banco de dados (MySQL)
25
+ # ==============================
26
+ DB_HOST=localhost
27
+ DB_USER=user1
28
+ DB_PASSWORD=1234
29
+ DB_NAME=omnizap
30
+ DB_POOL_LIMIT=10
31
+
32
+ # Fila de escrita em banco
33
+ DB_WRITE_FLUSH_MS=1500
34
+ DB_MESSAGE_BATCH_SIZE=200
35
+ DB_CHAT_BATCH_SIZE=200
36
+ DB_CHAT_COOLDOWN_MS=45000
37
+ DB_MESSAGE_QUEUE_MAX=5000
38
+
39
+ # Monitor de banco (logs/slow queries)
40
+ # DB_MONITOR_ENABLED: por padrao e true em dev e false em production
41
+ DB_MONITOR_ENABLED=true
42
+ DB_SLOW_QUERY_MS=250
43
+ DB_LOG_EVERY_QUERY=false
44
+ DB_STATS_TOP_N=10
45
+ DB_STATS_SAMPLE_SIZE=2000
46
+ DB_SLOW_EXPLAIN=false
47
+ DB_MONITOR_LOG_PATH=./logs/db-monitor.log
48
+ DB_MONITOR_LOG_ROTATE_MB=20
49
+ DB_MONITOR_LOG_KEEP=5
50
+ DB_MONITOR_SNAPSHOT_EVERY_MS=0
51
+
52
+ # Alertas de query (ms), separados por virgula
53
+ DB_QUERY_ALERT_THRESHOLDS=500,1000
54
+
55
+ # ==============================
56
+ # LID/JID
57
+ # ==============================
58
+ LID_BACKFILL_ON_START=true
59
+ LID_BACKFILL_BATCH=50000
60
+
61
+ # ==============================
62
+ # Observabilidade do app (metrics endpoint interno)
63
+ # ==============================
64
+ METRICS_ENABLED=true
65
+ METRICS_HOST=0.0.0.0
66
+ METRICS_PORT=9102
67
+ METRICS_PATH=/metrics
68
+ METRICS_SERVICE_NAME=omnizap
69
+ # Override opcional para comando de ping (se vazio, usa METRICS_HOST/PORT/PATH)
70
+ METRICS_ENDPOINT=
71
+ METRICS_PING_TIMEOUT_MS=1500
72
+
73
+ # Telemetria extra do comando social (0=off, 1=on)
74
+ OMNIZAP_SOCIAL_METRICS=0
75
+
76
+ # ==============================
77
+ # Noticias
78
+ # ==============================
79
+ NEWS_API_URL=http://127.0.0.1:3001
80
+ NEWS_SENT_IDS_LIMIT=500
81
+
82
+ # ==============================
83
+ # OpenAI
84
+ # ==============================
85
+ OPENAI_API_KEY=
86
+ OPENAI_MODEL=gpt-5-nano
87
+ OPENAI_IMAGE_MODEL=gpt-5-nano
88
+ OPENAI_SYSTEM_PROMPT=
89
+ OPENAI_SESSION_TTL_SECONDS=21600
90
+ OPENAI_TIMEOUT_MS=30000
91
+ OPENAI_IMAGE_TIMEOUT_MS=120000
92
+ OPENAI_MAX_RETRIES=2
93
+ OPENAI_RETRY_BASE_MS=500
94
+ OPENAI_RETRY_MAX_MS=4000
95
+ OPENAI_MAX_IMAGE_MB=50
96
+ OPENAI_TTS_MODEL=gpt-4o-mini-tts
97
+ OPENAI_TTS_VOICE=alloy
98
+ OPENAI_TTS_FORMAT=mp3
99
+ OPENAI_TTS_PTT=false
100
+ OPENAI_TTS_MAX_CHARS=4096
101
+
102
+ # ==============================
103
+ # Quote
104
+ # ==============================
105
+ QUOTE_BG_COLOR="#144d37"
106
+ QUOTE_NAME_COLOR="#facc01"
107
+ QUOTE_TEXT_COLOR="#e8eef6"
108
+ QUOTE_TIMEOUT_MS=10000
109
+ QUOTE_EMOJI_TIMEOUT_MS=4000
110
+ QUOTE_EMOJI_BASE_URL=https://raw.githubusercontent.com/googlefonts/noto-emoji/main/png/128
111
+ QUOTE_FONT_FAMILY="Noto Sans,Segoe UI,Arial,Noto Color Emoji,Apple Color Emoji,Segoe UI Emoji,sans-serif"
112
+
113
+ # Legado (atualmente nao usado no codigo principal)
114
+ QUOTE_API_URL=https://bot.lyo.su/quote/generate.png
115
+
116
+ # ==============================
117
+ # Waifu
118
+ # ==============================
119
+ WAIFU_PICS_BASE=https://api.waifu.pics
120
+ WAIFU_PICS_TIMEOUT_MS=15000
121
+ WAIFU_PICS_ALLOW_NSFW=false
122
+
123
+ # Legado (atualmente nao usado no codigo principal)
124
+ WAIFU_API_TOKEN=
125
+ WAIFU_API_BASE=https://waifu.it/api/v4
126
+ WAIFU_TIMEOUT_MS=15000
127
+
128
+ # ==============================
129
+ # PokeAPI
130
+ # ==============================
131
+ POKEAPI_CACHE_TTL_MS=21600000
132
+ POKEAPI_TIMEOUT_MS=10000
133
+ POKEAPI_RETRY_ATTEMPTS=2
134
+ POKEAPI_RETRY_BASE_DELAY_MS=350
135
+ POKEAPI_DNS_FAMILY=4
136
+ POKEAPI_USER_AGENT=omnizap-system/2.1 (+https://github.com/Kaikygr/omnizap-system)
137
+ POKEAPI_LORE_LANGS=pt-br,pt,en
138
+
139
+ # ==============================
140
+ # Midia (play / yt-dlp API)
141
+ # ==============================
142
+ YTDLS_BASE_URL=http://127.0.0.1:3000
143
+ YT_DLS_BASE_URL=
144
+ PLAY_API_TIMEOUT_MS=900000
145
+ PLAY_API_DOWNLOAD_TIMEOUT_MS=1800000
146
+ PLAY_QUEUE_STATUS_TIMEOUT_MS=8000
147
+ PLAY_MAX_MB=100
148
+ PLAY_VIDEO_PROCESS_TIMEOUT_MS=420000
149
+ PLAY_VIDEO_FORCE_TRANSCODE=true
150
+
151
+ # TikTok
152
+ TIKTOK_EXTRACT_BASE_URL=http://127.0.0.1:8000
153
+ TIKTOK_EXTRACT_PATH=/extract
154
+ TIKTOK_EXTRACT_TIMEOUT_SECONDS=60
155
+ TIKTOK_HTTP_TIMEOUT_MS=120000
156
+ TIKTOK_MAX_MB=80
157
+ TIKTOK_MAX_URLS_PER_COMMAND=5
158
+ TIKTOK_MAX_IMAGES_PER_POST=10
159
+
160
+ # FFmpeg / debug
161
+ FFMPEG_PATH=ffmpeg
162
+ FFPROBE_PATH=ffprobe
163
+ DEBUG_FFMPEG=false
164
+
165
+ # ==============================
166
+ # RPG Pokemon
167
+ # ==============================
168
+ RPG_BATTLE_TTL_MS=300000
169
+ RPG_STARTER_LEVEL=5
170
+ RPG_POTION_HEAL_HP=25
171
+ RPG_SUPER_POTION_HEAL_HP=60
172
+ RPG_SHOP_REFRESH_MS=3600000
173
+ RPG_SHOP_ITEMS_PER_POCKET=6
174
+ RPG_POKEDEX_TOTAL=1025
175
+ RPG_DEFAULT_REGION=kanto
176
+ RPG_SESSION_IDLE_MS=600000
177
+ RPG_RAID_TTL_MS=1200000
178
+ RPG_PVP_TTL_MS=900000
179
+ RPG_PVP_COOLDOWN_MS=30000
180
+ RPG_PVP_QUEUE_TTL_MS=600000
181
+ RPG_PVP_WIN_GOLD=220
182
+ RPG_PVP_WIN_PLAYER_XP=140
183
+ RPG_PVP_WIN_POKEMON_XP=120
184
+ RPG_PVP_WIN_POINTS=3
185
+ RPG_PVP_LOSS_POINTS=1
186
+ RPG_STARTER_GOLD=450
187
+ RPG_STARTER_POKEBALL_QTY=4
188
+ RPG_STARTER_POTION_QTY=3
189
+ RPG_SHOP_COST_FACTOR=0.22
190
+ RPG_SHOP_COST_MIN=28
191
+ RPG_ECONOMY_RESCUE_COOLDOWN_MS=21600000
192
+ RPG_ECONOMY_RESCUE_MAX_GOLD=60
193
+ RPG_ECONOMY_RESCUE_GOLD=90
194
+ RPG_ECONOMY_RESCUE_POTION_QTY=1
195
+ RPG_TRADE_TTL_MS=1200000
196
+ RPG_COOP_CAPTURE_TARGET=25
197
+ RPG_COOP_RAID_TARGET=8
198
+ RPG_COOP_REWARD_GOLD=220
199
+ RPG_COOP_REWARD_XP=160
200
+ RPG_COOP_REWARD_ITEM_KEY=pokeball
201
+ RPG_COOP_REWARD_ITEM_QTY=2
202
+ RPG_KARMA_BONUS_THRESHOLD=20
203
+ RPG_KARMA_BONUS_RATE=0.08
204
+ RPG_SOCIAL_XP_CONVERSION_RATE=0.25
205
+ RPG_SOCIAL_XP_ACTION_CAP=45
206
+ RPG_SOCIAL_XP_DAILY_CONVERSION_CAP=300
207
+ RPG_SOCIAL_XP_PLAYER_SHARE=0.6
208
+ RPG_SOCIAL_XP_KARMA_BOOST_RATE=0.08
209
+ RPG_SOCIAL_XP_GROUP_BOOST_RATE=0.05
210
+ RPG_SOCIAL_XP_ABUSE_PENALTY_RATE=0.12
211
+ RPG_SOCIAL_XP_ABUSE_CAP_HITS_THRESHOLD=3
212
+
213
+ # Eventos semanais
214
+ RPG_EVENT_CAPTURE_TARGET=40
215
+ RPG_EVENT_CAPTURE_REWARD_GOLD=160
216
+ RPG_EVENT_CAPTURE_REWARD_XP=120
217
+ RPG_EVENT_PVP_TARGET=14
218
+ RPG_EVENT_PVP_REWARD_GOLD=220
219
+ RPG_EVENT_PVP_REWARD_XP=150
220
+ RPG_EVENT_RAID_DAMAGE_TARGET=4500
221
+ RPG_EVENT_RAID_REWARD_GOLD=210
222
+ RPG_EVENT_RAID_REWARD_XP=145
223
+
224
+ # Spawn / batalha
225
+ RPG_WILD_MAX_POKE_ID=1025
226
+ RPG_MOVE_SAMPLE_LIMIT=24
227
+ RPG_SHINY_CHANCE=0.01
228
+ RPG_BIOME_LOOKUP_ATTEMPTS=6
229
+ RPG_SPECIES_FILTER_ATTEMPTS=5
230
+ RPG_LEGENDARY_SPAWN_CHANCE=0.06
231
+ RPG_MYTHICAL_SPAWN_CHANCE=0.03
232
+ RPG_BATTLE_DAMAGE_SCALE=0.68
233
+ RPG_BATTLE_DAMAGE_MAX_HP_RATIO=0.5
234
+ RPG_BATTLE_DAMAGE_SUPER_EFFECTIVE_BONUS_RATIO=0.2
235
+ RPG_BATTLE_DAMAGE_ULTRA_EFFECTIVE_BONUS_RATIO=0.25
236
+
237
+ # Renderizacao canvas (batalha/perfil)
238
+ RPG_BATTLE_CANVAS_ENABLED=true
239
+ RPG_PROFILE_CANVAS_ENABLED=true
240
+ RPG_BATTLE_CANVAS_CACHE_TTL_MS=600000
241
+ RPG_BATTLE_CANVAS_CACHE_LIMIT=120
242
+ RPG_BATTLE_CANVAS_TIMEOUT_MS=7000
243
+ RPG_PROFILE_CANVAS_TIMEOUT_MS=6000
244
+ RPG_PROFILE_CANVAS_CACHE_TTL_MS=600000
245
+ RPG_PROFILE_CANVAS_CACHE_LIMIT=80
246
+
247
+ # ==============================
248
+ # Sticker packs
249
+ # ==============================
250
+ STICKER_STORAGE_DIR=./data/stickers
251
+ STICKER_PACK_MAX_ITEMS=30
252
+ STICKER_PACK_MAX_PACKS_PER_OWNER=0
253
+ STICKER_PACK_MAX_STICKER_BYTES=2097152
254
+ STICKER_PACK_LAST_CACHE_TTL_MS=21600000
255
+ STICKER_PACK_RATE_MAX_ACTIONS=20
256
+ STICKER_PACK_RATE_WINDOW_MS=60000
257
+ STICKER_PACK_PREVIEW_LINES=20
258
+ STICKER_PACK_FALLBACK_SEND_LIMIT=30
259
+ STICKER_PACK_ZIP_ENABLED=false
260
+ STICKER_PACK_AUTO_COLLECT_ENABLED=true
261
+ STICKER_PACK_AUTO_COLLECT_NOTIFY=true
262
+ STICKER_DEFAULT_PACK_NAME=https://omnizap.shop/
263
+ STICKER_PACK_AUTO_PACK_NAME=minhasfigurinhas
264
+ STICKER_PACK_AUTO_PACK_VISIBILITY=private
265
+ CLIP_CLASSIFIER_ENABLED=true
266
+ CLIP_CLASSIFIER_API_URL=http://127.0.0.1:8008/classify
267
+ CLIP_CLASSIFIER_FEEDBACK_API_URL=http://127.0.0.1:8008/feedback
268
+ CLIP_CLASSIFIER_TIMEOUT_MS=3000
269
+ CLIP_CLASSIFIER_PROVIDER=mobileclip
270
+ CLIP_CLASSIFIER_CLASSIFICATION_VERSION=v1
271
+ CLIP_CLASSIFIER_NSFW_THRESHOLD=0.6
272
+ CLIP_MODEL_NAME=MobileCLIP-S1
273
+ CLIP_MODEL_PRETRAINED=datacompdr
274
+ CLIP_DEFAULT_LABELS_JSON=
275
+ CLIP_DEFAULT_LABELS_PATH=
276
+ CLIP_MAX_LABELS=256
277
+ CLIP_TOP_K=5
278
+ ENABLE_EMBEDDING_CACHE=true
279
+ ENABLE_CLUSTERING=true
280
+ ENABLE_ADAPTIVE_SCORING=true
281
+ ENABLE_LLM_LABEL_EXPANSION=true
282
+ ADAPTIVE_ALPHA=0.4
283
+ ENTROPY_THRESHOLD=2.5
284
+ ENTROPY_NORMALIZED_THRESHOLD=0.76
285
+ AFFINITY_WEIGHT_CAP=0.85
286
+ ENABLE_AFFINITY_LOG_SCALING=true
287
+ AFFINITY_LOG_SCALE=4.0
288
+ ENABLE_LLM_EXPANSION_GATING=true
289
+ LLM_EXPANSION_MIN_MARGIN=0.08
290
+ LLM_EXPANSION_MAX_ENTROPY_NORMALIZED=0.72
291
+ SIMILARITY_THRESHOLD=0.85
292
+ SIMILARITY_LIMIT=25
293
+ SIMILARITY_SCAN_LIMIT=3000
294
+ LLM_LABEL_EXPANSION_MODEL=gpt-4.1-mini
295
+ LLM_LABEL_EXPANSION_TIMEOUT_MS=6000
296
+ STICKER_CLASSIFICATION_TAG_MIN_SCORE=0.2
297
+ PACK_CLASSIFICATION_TAG_MIN_SCORE=0.18
298
+ CLASSIFICATION_MAX_TAGS=6
299
+ ENABLE_SEMANTIC_CLUSTERING=false
300
+ SEMANTIC_CLUSTER_SIMILARITY_THRESHOLD=0.87
301
+ SEMANTIC_CLUSTER_MIN_SIZE_FOR_PACK=12
302
+ SEMANTIC_CLUSTER_EMBEDDING_MODEL=text-embedding-3-small
303
+ SEMANTIC_CLUSTER_SLUG_MODEL=gpt-4o-mini
304
+ SEMANTIC_CLUSTER_OPENAI_TIMEOUT_MS=10000
305
+ SEMANTIC_CLUSTER_MAX_SCAN=5000
306
+ SEMANTIC_CLUSTER_MAX_SUGGESTIONS_PER_ASSET=8
307
+ SEMANTIC_CLUSTER_CONCURRENCY=2
308
+ SEMANTIC_CLUSTER_MEMORY_CACHE_TTL_MS=300000
309
+ SEMANTIC_CLUSTER_REPROCESS_EXISTING=false
310
+ STICKER_CLASSIFICATION_BACKGROUND_ENABLED=true
311
+ STICKER_CLASSIFICATION_BACKGROUND_STARTUP_DELAY_MS=15000
312
+ STICKER_CLASSIFICATION_BACKGROUND_INTERVAL_MS=0
313
+ STICKER_CLASSIFICATION_BACKGROUND_INTERVAL_MIN_MS=300000
314
+ STICKER_CLASSIFICATION_BACKGROUND_INTERVAL_MAX_MS=600000
315
+ STICKER_CLASSIFICATION_BACKGROUND_CONCURRENCY=2
316
+ STICKER_CLASSIFICATION_BACKGROUND_BATCH_SIZE=30
317
+ STICKER_REPROCESS_PRIORITY_BACKFILL_ENABLED=true
318
+ STICKER_REPROCESS_PRIORITY_BACKFILL_SCAN_LIMIT=300
319
+ STICKER_REPROCESS_PRIORITY_BACKFILL_PRIORITY=95
320
+ STICKER_SEMANTIC_RECLASSIFICATION_ENABLED=true
321
+ STICKER_SEMANTIC_RECLASSIFICATION_BATCH_SIZE=400
322
+ STICKER_SEMANTIC_RECLASSIFICATION_MAX_PER_CYCLE=2000
323
+ STICKER_SEMANTIC_RECLASSIFICATION_ENTROPY_THRESHOLD=0.8
324
+ STICKER_SEMANTIC_RECLASSIFICATION_AFFINITY_THRESHOLD=0.3
325
+ STICKER_AUTO_PACK_BY_TAGS_ENABLED=true
326
+ STICKER_AUTO_PACK_BY_TAGS_STARTUP_DELAY_MS=20000
327
+ STICKER_AUTO_PACK_BY_TAGS_INTERVAL_MS=0
328
+ STICKER_AUTO_PACK_BY_TAGS_INTERVAL_MIN_MS=300000
329
+ STICKER_AUTO_PACK_BY_TAGS_INTERVAL_MAX_MS=600000
330
+ STICKER_AUTO_PACK_BY_TAGS_TARGET_SIZE=30
331
+ STICKER_AUTO_PACK_BY_TAGS_MIN_GROUP_SIZE=8
332
+ STICKER_AUTO_PACK_BY_TAGS_MAX_GROUPS=12
333
+ STICKER_AUTO_PACK_BY_TAGS_MAX_SCAN_ASSETS=5000
334
+ STICKER_AUTO_PACK_BY_TAGS_MAX_ADDITIONS_PER_CYCLE=300
335
+ STICKER_AUTO_PACK_BY_TAGS_MAX_REMOVALS_PER_CYCLE=120
336
+ STICKER_AUTO_PACK_BY_TAGS_TOP_TAGS_PER_ASSET=3
337
+ STICKER_AUTO_PACK_BY_TAGS_SCAN_PASSES=2
338
+ STICKER_AUTO_PACK_BY_TAGS_SCAN_PASS_JITTER_PERCENT=12
339
+ STICKER_AUTO_PACK_BY_TAGS_STABILITY_Z_SCORE=1.282
340
+ STICKER_AUTO_PACK_BY_TAGS_MIN_ASSET_ACCEPTANCE_RATE=0.45
341
+ STICKER_AUTO_PACK_BY_TAGS_MIN_THEME_DOMINANCE_RATIO=0.55
342
+ STICKER_AUTO_PACK_BY_TAGS_SCORE_STDDEV_PENALTY=0.18
343
+ AUTO_PACK_PROFILE=BALANCED
344
+ AGGRESSIVE_MIGRATION_THRESHOLD=0.01
345
+ ARCHIVE_LOW_SCORE_PACKS=false
346
+ STICKER_AUTO_PACK_BY_TAGS_NSFW_THRESHOLD=0.7
347
+ STICKER_AUTO_PACK_BY_TAGS_NSFW_SUGGESTIVE_THRESHOLD=0.4
348
+ STICKER_AUTO_PACK_BY_TAGS_NSFW_EXPLICIT_THRESHOLD=0.78
349
+ STICKER_AUTO_PACK_BY_TAGS_MIN_ASSET_EDGE=192
350
+ STICKER_AUTO_PACK_BY_TAGS_MIN_ASSET_AREA=36864
351
+ STICKER_AUTO_PACK_BY_TAGS_MIN_ASSET_BYTES=6144
352
+ STICKER_AUTO_PACK_BY_TAGS_MAX_BLURRY_SCORE=0.82
353
+ STICKER_AUTO_PACK_BY_TAGS_MAX_LOW_QUALITY_SCORE=0.82
354
+ STICKER_AUTO_PACK_BY_TAGS_DEDUPE_SIMILARITY_THRESHOLD=0.985
355
+ STICKER_AUTO_PACK_BY_TAGS_REBUILD_ENABLED=true
356
+ STICKER_AUTO_PACK_BY_TAGS_INCLUDE_PACKED_WHEN_REBUILD_DISABLED=false
357
+ STICKER_AUTO_PACK_BY_TAGS_MAX_PACKS_PER_OWNER=0
358
+ STICKER_AUTO_PACK_BY_TAGS_PRIORITIZE_COMPLETION=true
359
+ STICKER_AUTO_PACK_BY_TAGS_COMPLETION_TRANSFER_ENABLED=true
360
+ STICKER_AUTO_PACK_BY_TAGS_COMPLETION_TRANSFER_MIN_DONOR_ITEMS=8
361
+ STICKER_AUTO_PACK_BY_TAGS_ENTROPY_WEIGHT=0.09
362
+ STICKER_AUTO_PACK_BY_TAGS_AMBIGUOUS_FLAG_PENALTY=0.06
363
+ STICKER_AUTO_PACK_BY_TAGS_ADAPTIVE_BONUS_WEIGHT=0.18
364
+ STICKER_AUTO_PACK_BY_TAGS_MARGIN_BONUS_WEIGHT=0.12
365
+ STICKER_AUTO_PACK_BY_TAGS_SIMILAR_IMAGES_PENALTY_WEIGHT=0.08
366
+ STICKER_AUTO_PACK_BY_TAGS_LLM_TRAIT_WEIGHT=0.10
367
+ STICKER_AUTO_PACK_BY_TAGS_AFFINITY_CAP=0.85
368
+ STICKER_AUTO_PACK_BY_TAGS_ENABLE_AFFINITY_LOG_SCALING=true
369
+ STICKER_AUTO_PACK_BY_TAGS_AFFINITY_LOG_SCALE=4
370
+ STICKER_AUTO_PACK_BY_TAGS_ASSET_QUALITY_W1=0.34
371
+ STICKER_AUTO_PACK_BY_TAGS_ASSET_QUALITY_W2=0.24
372
+ STICKER_AUTO_PACK_BY_TAGS_ASSET_QUALITY_W3=0.18
373
+ STICKER_AUTO_PACK_BY_TAGS_ASSET_QUALITY_W4=0.24
374
+ STICKER_AUTO_PACK_BY_TAGS_READY_MIN_ITEMS=1
375
+ ENABLE_GLOBAL_OPTIMIZATION=true
376
+ OPTIMIZATION_CYCLES=3
377
+ OPTIMIZATION_EPSILON=0.001
378
+ OPTIMIZATION_STABLE_CYCLES=2
379
+ TRANSFER_THRESHOLD=0.02
380
+ MERGE_THRESHOLD=0.75
381
+ MIGRATION_CANDIDATE_LIMIT=16
382
+ TRANSFER_CANDIDATE_SIMILARITY_FLOOR=0.35
383
+ INTER_PACK_SIMILARITY_THRESHOLD=0.85
384
+ MIN_PACK_SIZE=8
385
+ AUTO_ARCHIVE_BELOW_PERCENTILE=20
386
+ SYSTEM_REDUNDANCY_LAMBDA=0.2
387
+ GLOBAL_ENERGY_W1=0.40
388
+ GLOBAL_ENERGY_W2=0.25
389
+ GLOBAL_ENERGY_W3=0.10
390
+ GLOBAL_ENERGY_W4=0.15
391
+ GLOBAL_ENERGY_W5=0.10
392
+ PACK_TIER_GOLD_THRESHOLD=0.80
393
+ PACK_TIER_SILVER_THRESHOLD=0.65
394
+ PACK_TIER_BRONZE_THRESHOLD=0.50
395
+ PACK_TIER_QUALITY_W1=0.40
396
+ PACK_TIER_QUALITY_W2=0.25
397
+ PACK_TIER_QUALITY_W3=0.15
398
+ PACK_TIER_QUALITY_W4=0.10
399
+ PACK_TIER_QUALITY_W5=0.10
400
+ STICKER_MATRIX_ALPHA=0.38
401
+ STICKER_MATRIX_BETA=0.27
402
+ STICKER_MATRIX_GAMMA=0.23
403
+ STICKER_MATRIX_DELTA=0.18
404
+ PACK_QUALITY_W1=0.32
405
+ PACK_QUALITY_W2=0.24
406
+ PACK_QUALITY_W3=0.16
407
+ PACK_QUALITY_W4=0.14
408
+ PACK_QUALITY_W5=0.09
409
+ PACK_QUALITY_W6=0.07
410
+ STICKER_AUTO_PACK_BY_TAGS_VISIBILITY=public
411
+ STICKER_AUTO_PACK_BY_TAGS_PUBLISHER=OmniZap Auto
412
+ STICKER_CREATOR_VERIFIED_PUBLISHERS=omnizap,omnizap auto
413
+
414
+ # Catalogo web de packs
415
+ STICKER_CATALOG_ENABLED=true
416
+ STICKER_WEB_PATH=/stickers
417
+ STICKER_API_BASE_PATH=/api/sticker-packs
418
+ STICKER_WEB_LIST_LIMIT=24
419
+ STICKER_WEB_LIST_MAX_LIMIT=60
420
+ STICKER_ORPHAN_LIST_LIMIT=120
421
+ STICKER_ORPHAN_LIST_MAX_LIMIT=300
422
+ STICKER_WEB_ASSET_CACHE_SECONDS=600
423
+ STICKER_CATALOG_ONLY_CLASSIFIED=true
424
+ STICKER_DATA_PUBLIC_PATH=/data
425
+ STICKER_DATA_PUBLIC_DIR=./data
426
+ STICKER_DATA_LIST_LIMIT=50
427
+ STICKER_DATA_LIST_MAX_LIMIT=200
428
+ STICKER_DATA_SCAN_MAX_FILES=10000
429
+
430
+ # Paths locais (legado/uso auxiliar)
431
+ STORE_PATH=./temp
432
+
433
+ # ==============================
434
+ # Observabilidade via docker-compose
435
+ # ==============================
436
+ STACK_NAME=omnizap
437
+
438
+ # Prometheus
439
+ PROMETHEUS_IMAGE_TAG=v2.52.0
440
+ PROMETHEUS_RETENTION_TIME=15d
441
+ PROMETHEUS_RETENTION_SIZE=20GB
442
+ PROMETHEUS_CONFIG_PATH=./observability/prometheus.yml
443
+ PROMETHEUS_ALERT_RULES_PATH=./observability/alert-rules.yml
444
+ PROMETHEUS_PORT=9090
445
+
446
+ # Grafana
447
+ GRAFANA_IMAGE_TAG=10.4.3
448
+ GRAFANA_ADMIN_USER=admin
449
+ GRAFANA_ADMIN_PASSWORD=admin
450
+ GRAFANA_ROOT_URL=%(protocol)s://%(domain)s:%(http_port)s/
451
+ GRAFANA_TIMEZONE=America/Boa_Vista
452
+ GRAFANA_PROVISIONING_PATH=./observability/grafana/provisioning
453
+ GRAFANA_DASHBOARDS_PATH=./observability/grafana/dashboards
454
+ GRAFANA_PORT=3003
455
+
456
+ # Loki
457
+ LOKI_IMAGE_TAG=2.9.4
458
+ LOKI_CONFIG_PATH=./observability/loki-config.yml
459
+ LOKI_PORT=3100
460
+
461
+ # Promtail
462
+ PROMTAIL_IMAGE_TAG=2.9.4
463
+ PROMTAIL_CONFIG_PATH=./observability/promtail-config.yml
464
+ APP_LOGS_PATH=./logs
465
+ MYSQL_LOGS_PATH=/var/lib/mysql
466
+ PROMTAIL_PORT=9080
467
+
468
+ # MySQL Exporter
469
+ MYSQL_EXPORTER_IMAGE_TAG=v0.15.1
470
+ MYSQL_EXPORTER_DSN=exporter:exporter@(host.docker.internal:3306)/
471
+ MYSQL_EXPORTER_CNF_PATH=./observability/mysql-exporter.cnf
472
+ MYSQL_EXPORTER_PORT=9104
473
+
474
+ # Node Exporter
475
+ NODE_EXPORTER_IMAGE_TAG=v1.7.0
476
+ NODE_EXPORTER_PORT=9100
477
+
478
+ # ==============================
479
+ # Deploy / GitHub Deployments
480
+ # ==============================
481
+ # Habilita marcação de deploy no GitHub em `npm run deploy`
482
+ DEPLOY_GITHUB_NOTIFY=1
483
+ # Ambiente exibido na aba Deployments do repositório
484
+ DEPLOY_GITHUB_ENVIRONMENT=production
485
+ # Repositório alvo (owner/repo). Opcional se o remote.origin estiver configurado.
486
+ DEPLOY_GITHUB_REPO=kaikybrofc/omnizap-system
487
+ # Token opcional dedicado ao deploy (se vazio usa GITHUB_TOKEN/GH_TOKEN).
488
+ DEPLOY_GITHUB_TOKEN=
489
+ # Etapa opcional de package no deploy.
490
+ DEPLOY_PACKAGE_STEP=0
491
+ DEPLOY_PACKAGE_INSTALL=1
492
+ DEPLOY_PACKAGE_TEST=0
493
+ DEPLOY_PACKAGE_PACK=0
494
+ DEPLOY_PACKAGE_ARTIFACTS_DIR=.artifacts
495
+ DEPLOY_PACKAGE_PUBLISH=0
496
+ DEPLOY_PACKAGE_REGISTRY=https://npm.pkg.github.com
497
+ DEPLOY_PACKAGE_TOKEN=
498
+ # OTP opcional para publish (use apenas quando token exigir 2FA interativo)
499
+ DEPLOY_PACKAGE_OTP=
500
+ # Forca owner do scope durante validacao de publish (ex: kaikybrofc ou sua org)
501
+ DEPLOY_PACKAGE_SCOPE_OWNER=
502
+ # Alternativas aceitas automaticamente para auth do publish:
503
+ # Para npm.pkg.github.com, priorize GITHUB_TOKEN/DEPLOY_GITHUB_TOKEN.
504
+ # NPM_TOKEN=
505
+ # NODE_AUTH_TOKEN=
506
+ DEPLOY_PACKAGE_TAG=latest
507
+ DEPLOY_PACKAGE_PUBLISH_SKIP_IF_EXISTS=1
508
+ # Publish secundario (dual publish), ex: npmjs.org
509
+ DEPLOY_PACKAGE_PUBLISH_SECONDARY=0
510
+ DEPLOY_PACKAGE_SECONDARY_REGISTRY=https://registry.npmjs.org
511
+ DEPLOY_PACKAGE_SECONDARY_TOKEN=
512
+ # OTP opcional para publish secundario no npmjs
513
+ DEPLOY_PACKAGE_SECONDARY_OTP=
514
+ DEPLOY_PACKAGE_SECONDARY_TAG=latest
515
+ # Para pacote escopado no npmjs, use "public" para aparecer no npmjs.com
516
+ DEPLOY_PACKAGE_SECONDARY_ACCESS=public
517
+ DEPLOY_PACKAGE_SECONDARY_PUBLISH_SKIP_IF_EXISTS=1
518
+ # Opcional: ordem customizada de fallback de token para o secundario
519
+ DEPLOY_PACKAGE_SECONDARY_TOKEN_KEYS=
520
+
521
+ # ==============================
522
+ # Release (auto commit/push)
523
+ # ==============================
524
+ # Faz commit automatico de alteracoes pendentes antes do release
525
+ RELEASE_GIT_AUTO_COMMIT=1
526
+ # Faz push automatico dos commits gerados no release
527
+ RELEASE_GIT_AUTO_PUSH=1
528
+ # Remote/branch para push (branch vazio = branch atual)
529
+ RELEASE_GIT_REMOTE=origin
530
+ RELEASE_GIT_BRANCH=
531
+ # Mensagens de commit automatico
532
+ RELEASE_GIT_PRE_COMMIT_MESSAGE=chore(release): auto-commit before release
533
+ RELEASE_GIT_COMMIT_VERSION=1
534
+ RELEASE_GIT_VERSION_COMMIT_PREFIX=chore(release): v
package/LICENSE ADDED
@@ -0,0 +1,21 @@
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.