@kaikybrofc/omnizap-system 2.2.9 → 2.3.0

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 (121) hide show
  1. package/README.md +20 -18
  2. package/app/config/adminIdentity.js +1 -3
  3. package/app/connection/socketController.js +10 -20
  4. package/app/controllers/messageController.js +7 -28
  5. package/app/modules/aiModule/catCommand.js +29 -192
  6. package/app/modules/broadcastModule/noticeCommand.js +28 -97
  7. package/app/modules/gameModule/diceCommand.js +6 -32
  8. package/app/modules/playModule/playCommand.js +57 -258
  9. package/app/modules/quoteModule/quoteCommand.js +2 -4
  10. package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1 -13
  11. package/app/modules/statsModule/noMessageCommand.js +16 -84
  12. package/app/modules/statsModule/rankingCommand.js +5 -25
  13. package/app/modules/statsModule/rankingCommon.js +1 -9
  14. package/app/modules/stickerModule/convertToWebp.js +4 -27
  15. package/app/modules/stickerModule/stickerCommand.js +13 -24
  16. package/app/modules/stickerModule/stickerTextCommand.js +13 -25
  17. package/app/modules/stickerPackModule/autoPackCollectorService.js +16 -7
  18. package/app/modules/stickerPackModule/domainEventOutboxRepository.js +20 -36
  19. package/app/modules/stickerPackModule/domainEvents.js +2 -11
  20. package/app/modules/stickerPackModule/semanticReclassificationEngine.js +13 -50
  21. package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +2 -15
  22. package/app/modules/stickerPackModule/semanticThemeClusterService.js +14 -41
  23. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +25 -95
  24. package/app/modules/stickerPackModule/stickerAssetRepository.js +12 -31
  25. package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +13 -18
  26. package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +284 -709
  27. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +27 -106
  28. package/app/modules/stickerPackModule/stickerClassificationService.js +46 -77
  29. package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +13 -53
  30. package/app/modules/stickerPackModule/stickerDomainEventBus.js +10 -16
  31. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +13 -34
  32. package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +1 -4
  33. package/app/modules/stickerPackModule/stickerObjectStorageService.js +26 -26
  34. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +32 -187
  35. package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +6 -15
  36. package/app/modules/stickerPackModule/stickerPackItemRepository.js +6 -32
  37. package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +12 -36
  38. package/app/modules/stickerPackModule/stickerPackMessageService.js +12 -40
  39. package/app/modules/stickerPackModule/stickerPackRepository.js +23 -66
  40. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +9 -21
  41. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +10 -40
  42. package/app/modules/stickerPackModule/stickerPackService.js +50 -115
  43. package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +2 -21
  44. package/app/modules/stickerPackModule/stickerPackUtils.js +13 -3
  45. package/app/modules/stickerPackModule/stickerStorageService.js +16 -65
  46. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +4 -22
  47. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +14 -29
  48. package/app/modules/systemMetricsModule/pingCommand.js +9 -39
  49. package/app/modules/tiktokModule/tiktokCommand.js +17 -109
  50. package/app/modules/userModule/userCommand.js +2 -88
  51. package/app/observability/metrics.js +5 -16
  52. package/app/services/captchaService.js +1 -6
  53. package/app/services/dbWriteQueue.js +3 -18
  54. package/app/services/featureFlagService.js +2 -8
  55. package/app/services/newsBroadcastService.js +0 -1
  56. package/app/services/queueUtils.js +2 -4
  57. package/app/services/whatsappLoginLinkService.js +7 -9
  58. package/app/store/premiumUserStore.js +1 -2
  59. package/app/utils/antiLink/antiLinkModule.js +3 -233
  60. package/app/utils/logger/loggerModule.js +9 -34
  61. package/app/utils/systemMetrics/systemMetricsModule.js +1 -4
  62. package/database/init.js +1 -8
  63. package/docker-compose.yml +27 -27
  64. package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +220 -0
  65. package/docs/seo/satellite-page-template.md +91 -0
  66. package/docs/seo/satellite-pages-phase1.json +349 -0
  67. package/eslint.config.js +2 -15
  68. package/index.js +8 -36
  69. package/ml/clip_classifier/README.md +4 -6
  70. package/observability/alert-rules.yml +12 -12
  71. package/observability/grafana/provisioning/dashboards/dashboards.yml +1 -1
  72. package/package.json +8 -3
  73. package/public/api-docs/index.html +224 -141
  74. package/public/bot-whatsapp-para-grupo/index.html +306 -0
  75. package/public/bot-whatsapp-sem-programar/index.html +306 -0
  76. package/public/comandos/index.html +428 -0
  77. package/public/como-automatizar-avisos-no-whatsapp/index.html +306 -0
  78. package/public/como-criar-comandos-whatsapp/index.html +306 -0
  79. package/public/como-evitar-spam-no-whatsapp/index.html +306 -0
  80. package/public/como-moderar-grupo-whatsapp/index.html +306 -0
  81. package/public/como-organizar-comunidade-whatsapp/index.html +306 -0
  82. package/public/css/github-project-panel.css +20 -15
  83. package/public/css/stickers-admin.css +55 -39
  84. package/public/css/styles.css +37 -29
  85. package/public/index.html +1060 -1417
  86. package/public/js/apps/apiDocsApp.js +36 -153
  87. package/public/js/apps/createPackApp.js +69 -332
  88. package/public/js/apps/homeApp.js +201 -434
  89. package/public/js/apps/loginApp.js +3 -12
  90. package/public/js/apps/stickersAdminApp.js +190 -181
  91. package/public/js/apps/stickersApp.js +507 -1366
  92. package/public/js/catalog.js +11 -74
  93. package/public/js/github-panel/components/ErrorState.js +1 -8
  94. package/public/js/github-panel/components/GithubProjectPanel.js +2 -9
  95. package/public/js/github-panel/components/SkeletonPanel.js +1 -11
  96. package/public/js/github-panel/components/StatCard.js +1 -7
  97. package/public/js/github-panel/vendor/react.js +1 -9
  98. package/public/js/runtime/react-runtime.js +1 -9
  99. package/public/licenca/index.html +104 -86
  100. package/public/login/index.html +315 -321
  101. package/public/melhor-bot-whatsapp-para-grupos/index.html +306 -0
  102. package/public/sitemap.xml +45 -0
  103. package/public/stickers/admin/index.html +14 -19
  104. package/public/stickers/create/index.html +39 -43
  105. package/public/stickers/index.html +97 -41
  106. package/public/termos-de-uso/index.html +142 -115
  107. package/public/user/index.html +347 -346
  108. package/scripts/cache-bust.mjs +5 -24
  109. package/scripts/generate-seo-satellite-pages.mjs +431 -0
  110. package/scripts/run-prettier-all.mjs +25 -0
  111. package/scripts/sticker-catalog-loadtest.mjs +13 -11
  112. package/scripts/sticker-worker-task.mjs +1 -4
  113. package/scripts/sync-readme-snapshot.mjs +3 -2
  114. package/server/controllers/stickerCatalogController.js +407 -704
  115. package/server/http/httpServer.js +2 -10
  116. package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +1 -8
  117. package/server/routes/stickerCatalog/catalogHandlers/catalogAuthHttp.js +1 -9
  118. package/server/routes/stickerCatalog/catalogHandlers/catalogPublicHttp.js +10 -11
  119. package/server/routes/stickerCatalog/catalogHandlers/catalogUploadHttp.js +1 -10
  120. package/server/routes/stickerCatalog/catalogRouter.js +11 -13
  121. package/kaikybrofc-omnizap-system-2.2.9.tgz +0 -0
@@ -116,237 +116,8 @@ const EDGE_PUNCTUATION_CHARS = new Set([',', '!', '?', ';', ':', ')', '(', '[',
116
116
  const TOKEN_SEPARATOR_CHARS = new Set([',', ';', '|']);
117
117
  const HOST_TERMINATORS = new Set(['/', '?', '#', ':', '\\', ',', ';']);
118
118
  const URL_HINTS = ['https://', 'http://', 'www.'];
119
- const STRICT_TLD_SUFFIXES = new Set([
120
- 'com',
121
- 'net',
122
- 'org',
123
- 'edu',
124
- 'gov',
125
- 'mil',
126
- 'io',
127
- 'me',
128
- 'tv',
129
- 'co',
130
- 'cc',
131
- 'gg',
132
- 'gl',
133
- 'ly',
134
- 'so',
135
- 'br',
136
- 'us',
137
- 'uk',
138
- 'eu',
139
- 'de',
140
- 'fr',
141
- 'es',
142
- 'pt',
143
- 'it',
144
- 'nl',
145
- 'be',
146
- 'ch',
147
- 'at',
148
- 'se',
149
- 'no',
150
- 'fi',
151
- 'dk',
152
- 'ie',
153
- 'pl',
154
- 'cz',
155
- 'sk',
156
- 'hu',
157
- 'ro',
158
- 'bg',
159
- 'gr',
160
- 'ru',
161
- 'ua',
162
- 'tr',
163
- 'il',
164
- 'ae',
165
- 'sa',
166
- 'qa',
167
- 'eg',
168
- 'ma',
169
- 'tn',
170
- 'dz',
171
- 'za',
172
- 'ng',
173
- 'ke',
174
- 'gh',
175
- 'in',
176
- 'pk',
177
- 'bd',
178
- 'lk',
179
- 'cn',
180
- 'jp',
181
- 'kr',
182
- 'tw',
183
- 'hk',
184
- 'sg',
185
- 'my',
186
- 'th',
187
- 'vn',
188
- 'ph',
189
- 'id',
190
- 'au',
191
- 'nz',
192
- 'ca',
193
- 'mx',
194
- 'ar',
195
- 'cl',
196
- 'pe',
197
- 'uy',
198
- 'py',
199
- 'bo',
200
- 'ec',
201
- 've',
202
- 'do',
203
- 'cu',
204
- 'pa',
205
- 'cr',
206
- 'gt',
207
- 'hn',
208
- 'ni',
209
- 'sv',
210
- 'pr',
211
- 'com.br',
212
- 'net.br',
213
- 'org.br',
214
- 'gov.br',
215
- 'edu.br',
216
- 'jus.br',
217
- 'mil.br',
218
- 'co.uk',
219
- 'org.uk',
220
- 'gov.uk',
221
- 'ac.uk',
222
- 'co.jp',
223
- 'ne.jp',
224
- 'or.jp',
225
- 'go.jp',
226
- 'ac.jp',
227
- 'com.au',
228
- 'net.au',
229
- 'org.au',
230
- 'edu.au',
231
- 'gov.au',
232
- 'com.mx',
233
- 'com.ar',
234
- 'com.co',
235
- 'com.pe',
236
- 'com.tr',
237
- 'com.sg',
238
- 'com.my',
239
- 'com.ph',
240
- 'co.in',
241
- 'firm.in',
242
- 'net.in',
243
- 'org.in',
244
- 'gen.in',
245
- 'ind.in',
246
- 'co.id',
247
- 'or.id',
248
- 'go.id',
249
- 'web.id',
250
- 'co.za',
251
- 'org.za',
252
- 'net.za',
253
- 'com.ng',
254
- 'com.gh',
255
- 'com.eg',
256
- 'com.sa',
257
- 'com.qa',
258
- 'com.ae',
259
- 'page.link',
260
- 'g.page',
261
- ]);
262
- const EXTRA_TLD_SUFFIXES = new Set([
263
- 'ai',
264
- 'app',
265
- 'dev',
266
- 'xyz',
267
- 'site',
268
- 'online',
269
- 'store',
270
- 'shop',
271
- 'blog',
272
- 'tech',
273
- 'cloud',
274
- 'digital',
275
- 'live',
276
- 'media',
277
- 'news',
278
- 'one',
279
- 'top',
280
- 'club',
281
- 'vip',
282
- 'fun',
283
- 'games',
284
- 'game',
285
- 'space',
286
- 'world',
287
- 'today',
288
- 'agency',
289
- 'email',
290
- 'center',
291
- 'company',
292
- 'group',
293
- 'solutions',
294
- 'systems',
295
- 'services',
296
- 'network',
297
- 'social',
298
- 'design',
299
- 'studio',
300
- 'photo',
301
- 'video',
302
- 'audio',
303
- 'music',
304
- 'art',
305
- 'wiki',
306
- 'finance',
307
- 'capital',
308
- 'money',
309
- 'loans',
310
- 'insurance',
311
- 'legal',
312
- 'law',
313
- 'health',
314
- 'care',
315
- 'clinic',
316
- 'dental',
317
- 'academy',
318
- 'school',
319
- 'college',
320
- 'university',
321
- 'education',
322
- 'training',
323
- 'support',
324
- 'chat',
325
- 'forum',
326
- 'community',
327
- 'events',
328
- 'travel',
329
- 'tours',
330
- 'hotel',
331
- 'homes',
332
- 'house',
333
- 'auto',
334
- 'cars',
335
- 'bike',
336
- 'food',
337
- 'restaurant',
338
- 'cafe',
339
- 'bar',
340
- 'pizza',
341
- 'delivery',
342
- 'fashion',
343
- 'beauty',
344
- 'style',
345
- 'fit',
346
- 'fitness',
347
- 'sports',
348
- 'download',
349
- ]);
119
+ const STRICT_TLD_SUFFIXES = new Set(['com', 'net', 'org', 'edu', 'gov', 'mil', 'io', 'me', 'tv', 'co', 'cc', 'gg', 'gl', 'ly', 'so', 'br', 'us', 'uk', 'eu', 'de', 'fr', 'es', 'pt', 'it', 'nl', 'be', 'ch', 'at', 'se', 'no', 'fi', 'dk', 'ie', 'pl', 'cz', 'sk', 'hu', 'ro', 'bg', 'gr', 'ru', 'ua', 'tr', 'il', 'ae', 'sa', 'qa', 'eg', 'ma', 'tn', 'dz', 'za', 'ng', 'ke', 'gh', 'in', 'pk', 'bd', 'lk', 'cn', 'jp', 'kr', 'tw', 'hk', 'sg', 'my', 'th', 'vn', 'ph', 'id', 'au', 'nz', 'ca', 'mx', 'ar', 'cl', 'pe', 'uy', 'py', 'bo', 'ec', 've', 'do', 'cu', 'pa', 'cr', 'gt', 'hn', 'ni', 'sv', 'pr', 'com.br', 'net.br', 'org.br', 'gov.br', 'edu.br', 'jus.br', 'mil.br', 'co.uk', 'org.uk', 'gov.uk', 'ac.uk', 'co.jp', 'ne.jp', 'or.jp', 'go.jp', 'ac.jp', 'com.au', 'net.au', 'org.au', 'edu.au', 'gov.au', 'com.mx', 'com.ar', 'com.co', 'com.pe', 'com.tr', 'com.sg', 'com.my', 'com.ph', 'co.in', 'firm.in', 'net.in', 'org.in', 'gen.in', 'ind.in', 'co.id', 'or.id', 'go.id', 'web.id', 'co.za', 'org.za', 'net.za', 'com.ng', 'com.gh', 'com.eg', 'com.sa', 'com.qa', 'com.ae', 'page.link', 'g.page']);
120
+ const EXTRA_TLD_SUFFIXES = new Set(['ai', 'app', 'dev', 'xyz', 'site', 'online', 'store', 'shop', 'blog', 'tech', 'cloud', 'digital', 'live', 'media', 'news', 'one', 'top', 'club', 'vip', 'fun', 'games', 'game', 'space', 'world', 'today', 'agency', 'email', 'center', 'company', 'group', 'solutions', 'systems', 'services', 'network', 'social', 'design', 'studio', 'photo', 'video', 'audio', 'music', 'art', 'wiki', 'finance', 'capital', 'money', 'loans', 'insurance', 'legal', 'law', 'health', 'care', 'clinic', 'dental', 'academy', 'school', 'college', 'university', 'education', 'training', 'support', 'chat', 'forum', 'community', 'events', 'travel', 'tours', 'hotel', 'homes', 'house', 'auto', 'cars', 'bike', 'food', 'restaurant', 'cafe', 'bar', 'pizza', 'delivery', 'fashion', 'beauty', 'style', 'fit', 'fitness', 'sports', 'download']);
350
121
  const ANY_TLD_SUFFIXES = new Set([...STRICT_TLD_SUFFIXES, ...EXTRA_TLD_SUFFIXES]);
351
122
 
352
123
  /**
@@ -697,8 +468,7 @@ const normalizeAllowedDomains = (allowedDomains = []) => {
697
468
  * @param {string[]} normalizedAllowedDomains
698
469
  * @returns {boolean}
699
470
  */
700
- const isDomainAllowed = (domain, normalizedAllowedDomains) =>
701
- normalizedAllowedDomains.some((allowedDomain) => domain === allowedDomain || domain.endsWith(`.${allowedDomain}`));
471
+ const isDomainAllowed = (domain, normalizedAllowedDomains) => normalizedAllowedDomains.some((allowedDomain) => domain === allowedDomain || domain.endsWith(`.${allowedDomain}`));
702
472
 
703
473
  /**
704
474
  * Monta a lista final de domínios permitidos (redes conhecidas + personalizados).
@@ -76,16 +76,7 @@ const consoleFormat = winston.format.combine(
76
76
  winston.format.colorize({ all: true }),
77
77
  winston.format.splat(),
78
78
  winston.format.metadata({
79
- fillExcept: [
80
- 'message',
81
- 'level',
82
- 'timestamp',
83
- 'label',
84
- 'service',
85
- 'instanceId',
86
- 'environment',
87
- 'stack',
88
- ],
79
+ fillExcept: ['message', 'level', 'timestamp', 'label', 'service', 'instanceId', 'environment', 'stack'],
89
80
  }),
90
81
  winston.format.printf((info) => {
91
82
  const { timestamp, level, message, metadata, stack } = info;
@@ -96,10 +87,7 @@ const consoleFormat = winston.format.combine(
96
87
  delete metaToPrint.label;
97
88
  }
98
89
 
99
- const metaPart =
100
- Object.keys(metaToPrint).length > 0
101
- ? ` ${util.inspect(metaToPrint, { colors: true, depth: 2 })}`
102
- : '';
90
+ const metaPart = Object.keys(metaToPrint).length > 0 ? ` ${util.inspect(metaToPrint, { colors: true, depth: 2 })}` : '';
103
91
 
104
92
  const servicePart = info.service ? ` [${info.service}]` : '';
105
93
  const instancePart = info.instanceId ? ` [${info.instanceId}]` : '';
@@ -180,13 +168,9 @@ function ensureLogDirectoryExists() {
180
168
  try {
181
169
  fs.mkdirSync(logDir, { recursive: true, mode: dirMode });
182
170
 
183
- console.log(
184
- `[ LoggerSetup ] Diretório de log garantido: '${logDir}' (modo ${dirMode.toString(8)})`,
185
- );
171
+ console.log(`[ LoggerSetup ] Diretório de log garantido: '${logDir}' (modo ${dirMode.toString(8)})`);
186
172
  } catch (error) {
187
- throw new Error(
188
- `Falha na configuração do Logger: Não foi possível acessar/criar o diretório de log '${logDir}'. Erro original: ${error.message}`,
189
- );
173
+ throw new Error(`Falha na configuração do Logger: Não foi possível acessar/criar o diretório de log '${logDir}'. Erro original: ${error.message}`);
190
174
  }
191
175
  }
192
176
 
@@ -199,8 +183,7 @@ const createLoggerInstance = (overrideOptions = {}) => {
199
183
  if (overrideOptions.transports) {
200
184
  configuredTransports = overrideOptions.transports;
201
185
  } else {
202
- const transportDefinitions =
203
- overrideOptions.transportDefinitions || getDefaultTransportDefinitions(effectiveLevel);
186
+ const transportDefinitions = overrideOptions.transportDefinitions || getDefaultTransportDefinitions(effectiveLevel);
204
187
  configuredTransports = transportDefinitions
205
188
  .map((def) => {
206
189
  try {
@@ -210,16 +193,11 @@ const createLoggerInstance = (overrideOptions = {}) => {
210
193
  case 'dailyRotateFile':
211
194
  return new DailyRotateFile(def.options);
212
195
  default:
213
- console.warn(
214
- `[ LoggerSetup ] Tipo de transporte desconhecido: ${def.type}. Pulando.`,
215
- );
196
+ console.warn(`[ LoggerSetup ] Tipo de transporte desconhecido: ${def.type}. Pulando.`);
216
197
  return null;
217
198
  }
218
199
  } catch (error) {
219
- console.error(
220
- `[ LoggerSetup ] Falha ao criar transporte tipo ${def.type}: ${error.message}`,
221
- error,
222
- );
200
+ console.error(`[ LoggerSetup ] Falha ao criar transporte tipo ${def.type}: ${error.message}`, error);
223
201
  return null;
224
202
  }
225
203
  })
@@ -234,8 +212,7 @@ const createLoggerInstance = (overrideOptions = {}) => {
234
212
 
235
213
  const defaultMeta = { ...baseDefaultMeta, ...(overrideOptions.defaultMeta || {}) };
236
214
 
237
- const loggerFormat =
238
- overrideOptions.format || winston.format.combine(winston.format.errors({ stack: true }));
215
+ const loggerFormat = overrideOptions.format || winston.format.combine(winston.format.errors({ stack: true }));
239
216
 
240
217
  const loggerInstance = winston.createLogger({
241
218
  level: effectiveLevel,
@@ -250,9 +227,7 @@ const createLoggerInstance = (overrideOptions = {}) => {
250
227
  console.error('Erro ocorrido dentro do Winston Logger:', error);
251
228
  });
252
229
 
253
- console.log(
254
- `[ LoggerSetup ] Instância do Logger criada. Nível: ${effectiveLevel}, Env: ${NODE_ENV}, Instância: ${INSTANCE_ID}, Serviço: ${ECOSYSTEM_NAME}`,
255
- );
230
+ console.log(`[ LoggerSetup ] Instância do Logger criada. Nível: ${effectiveLevel}, Env: ${NODE_ENV}, Instância: ${INSTANCE_ID}, Serviço: ${ECOSYSTEM_NAME}`);
256
231
 
257
232
  return loggerInstance;
258
233
  };
@@ -45,10 +45,7 @@ export const getSystemMetrics = () => {
45
45
  const uptime = formatDuration(processUptimeSeconds);
46
46
  const systemUptime = formatDuration(systemUptimeSeconds);
47
47
  const loadAverage = os.loadavg();
48
- const cpuSpeedAverage =
49
- totalCpus > 0
50
- ? Math.round(cpus.reduce((sum, cpu) => sum + (cpu.speed || 0), 0) / totalCpus)
51
- : 0;
48
+ const cpuSpeedAverage = totalCpus > 0 ? Math.round(cpus.reduce((sum, cpu) => sum + (cpu.speed || 0), 0) / totalCpus) : 0;
52
49
  const memoryUsage = process.memoryUsage();
53
50
 
54
51
  return {
package/database/init.js CHANGED
@@ -474,14 +474,7 @@ export default async function initializeDatabase() {
474
474
  await connection.changeUser({ database: dbToCreate });
475
475
 
476
476
  // Cria todas as tabelas em paralelo
477
- await Promise.all([
478
- connection.query(createMessagesTableSQL),
479
- connection.query(createChatsTableSQL),
480
- connection.query(createGroupsMetadataTableSQL),
481
- connection.query(createGroupConfigsTableSQL),
482
- connection.query(createLidMapTableSQL),
483
- connection.query(createStickerAssetTableSQL),
484
- ]);
477
+ await Promise.all([connection.query(createMessagesTableSQL), connection.query(createChatsTableSQL), connection.query(createGroupsMetadataTableSQL), connection.query(createGroupConfigsTableSQL), connection.query(createLidMapTableSQL), connection.query(createStickerAssetTableSQL)]);
485
478
 
486
479
  // Ordem importa por conta das FKs: pack depende de asset e item depende de pack+asset.
487
480
  await connection.query(createStickerPackTableSQL);
@@ -3,17 +3,17 @@ services:
3
3
  image: prom/prometheus:${PROMETHEUS_IMAGE_TAG:-v2.52.0}
4
4
  restart: unless-stopped
5
5
  command:
6
- - "--config.file=/etc/prometheus/prometheus.yml"
7
- - "--storage.tsdb.retention.time=${PROMETHEUS_RETENTION_TIME:-15d}"
8
- - "--storage.tsdb.retention.size=${PROMETHEUS_RETENTION_SIZE:-20GB}"
6
+ - '--config.file=/etc/prometheus/prometheus.yml'
7
+ - '--storage.tsdb.retention.time=${PROMETHEUS_RETENTION_TIME:-15d}'
8
+ - '--storage.tsdb.retention.size=${PROMETHEUS_RETENTION_SIZE:-20GB}'
9
9
  volumes:
10
10
  - ${PROMETHEUS_CONFIG_PATH:-./observability/prometheus.yml}:/etc/prometheus/prometheus.yml:ro
11
11
  - ${PROMETHEUS_ALERT_RULES_PATH:-./observability/alert-rules.yml}:/etc/prometheus/alert-rules.yml:ro
12
12
  - prometheus_data:/prometheus
13
13
  ports:
14
- - "${PROMETHEUS_PORT:-9090}:9090"
14
+ - '${PROMETHEUS_PORT:-9090}:9090'
15
15
  extra_hosts:
16
- - "host.docker.internal:host-gateway"
16
+ - 'host.docker.internal:host-gateway'
17
17
 
18
18
  grafana:
19
19
  image: grafana/grafana:${GRAFANA_IMAGE_TAG:-10.4.3}
@@ -30,7 +30,7 @@ services:
30
30
  - ${GRAFANA_PROVISIONING_PATH:-./observability/grafana/provisioning}:/etc/grafana/provisioning:ro
31
31
  - ${GRAFANA_DASHBOARDS_PATH:-./observability/grafana/dashboards}:/var/lib/grafana/dashboards:ro
32
32
  ports:
33
- - "${GRAFANA_PORT:-3003}:3000"
33
+ - '${GRAFANA_PORT:-3003}:3000'
34
34
  depends_on:
35
35
  - prometheus
36
36
  - loki
@@ -43,7 +43,7 @@ services:
43
43
  - ${LOKI_CONFIG_PATH:-./observability/loki-config.yml}:/etc/loki/loki-config.yml:ro
44
44
  - loki_data:/loki
45
45
  ports:
46
- - "${LOKI_PORT:-3100}:3100"
46
+ - '${LOKI_PORT:-3100}:3100'
47
47
 
48
48
  promtail:
49
49
  image: grafana/promtail:${PROMTAIL_IMAGE_TAG:-2.9.4}
@@ -54,11 +54,11 @@ services:
54
54
  - ${APP_LOGS_PATH:-./logs}:/var/log/omnizap:ro
55
55
  - ${MYSQL_LOGS_PATH:-/var/log/mysql}:/var/log/mysql:ro
56
56
  ports:
57
- - "${PROMTAIL_PORT:-9080}:9080"
57
+ - '${PROMTAIL_PORT:-9080}:9080'
58
58
  depends_on:
59
59
  - loki
60
60
  extra_hosts:
61
- - "host.docker.internal:host-gateway"
61
+ - 'host.docker.internal:host-gateway'
62
62
 
63
63
  mysql-exporter:
64
64
  image: prom/mysqld-exporter:${MYSQL_EXPORTER_IMAGE_TAG:-v0.15.1}
@@ -66,38 +66,38 @@ services:
66
66
  environment:
67
67
  - DATA_SOURCE_NAME=${MYSQL_EXPORTER_DSN:-exporter:exporter@(host.docker.internal:3306)/}
68
68
  command:
69
- - "--config.my-cnf=/etc/mysql-exporter/my.cnf"
70
- - "--collect.global_status"
71
- - "--collect.global_variables"
72
- - "--no-collect.slave_status"
73
- - "--collect.info_schema.innodb_metrics"
74
- - "--collect.info_schema.processlist"
75
- - "--collect.info_schema.tables"
76
- - "--collect.perf_schema.eventsstatements"
77
- - "--collect.perf_schema.tableiowaits"
78
- - "--collect.perf_schema.tablelocks"
69
+ - '--config.my-cnf=/etc/mysql-exporter/my.cnf'
70
+ - '--collect.global_status'
71
+ - '--collect.global_variables'
72
+ - '--no-collect.slave_status'
73
+ - '--collect.info_schema.innodb_metrics'
74
+ - '--collect.info_schema.processlist'
75
+ - '--collect.info_schema.tables'
76
+ - '--collect.perf_schema.eventsstatements'
77
+ - '--collect.perf_schema.tableiowaits'
78
+ - '--collect.perf_schema.tablelocks'
79
79
  volumes:
80
80
  - ${MYSQL_EXPORTER_CNF_PATH:-./observability/mysql-exporter.cnf}:/etc/mysql-exporter/my.cnf:ro
81
81
  ports:
82
- - "${MYSQL_EXPORTER_PORT:-9104}:9104"
82
+ - '${MYSQL_EXPORTER_PORT:-9104}:9104'
83
83
  extra_hosts:
84
- - "host.docker.internal:host-gateway"
84
+ - 'host.docker.internal:host-gateway'
85
85
 
86
86
  node-exporter:
87
87
  image: prom/node-exporter:${NODE_EXPORTER_IMAGE_TAG:-v1.7.0}
88
88
  restart: unless-stopped
89
- pid: "host"
89
+ pid: 'host'
90
90
  command:
91
- - "--path.rootfs=/host"
91
+ - '--path.rootfs=/host'
92
92
  volumes:
93
93
  - /:/host:ro,rslave
94
94
  ports:
95
- - "${NODE_EXPORTER_PORT:-9100}:9100"
95
+ - '${NODE_EXPORTER_PORT:-9100}:9100'
96
96
 
97
97
  volumes:
98
98
  grafana_data:
99
- name: "${STACK_NAME:-omnizap}_grafana_data"
99
+ name: '${STACK_NAME:-omnizap}_grafana_data'
100
100
  prometheus_data:
101
- name: "${STACK_NAME:-omnizap}_prometheus_data"
101
+ name: '${STACK_NAME:-omnizap}_prometheus_data'
102
102
  loki_data:
103
- name: "${STACK_NAME:-omnizap}_loki_data"
103
+ name: '${STACK_NAME:-omnizap}_loki_data'