@kaikybrofc/omnizap-system 2.2.4 → 2.2.6

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 (55) hide show
  1. package/.env.example +5 -0
  2. package/.prettierrc +16 -0
  3. package/README.md +13 -13
  4. package/app/modules/stickerPackModule/autoPackCollectorService.js +63 -8
  5. package/app/modules/stickerPackModule/catalogHandlers/catalogAdminHttp.js +68 -0
  6. package/app/modules/stickerPackModule/catalogHandlers/catalogAuthHttp.js +34 -0
  7. package/app/modules/stickerPackModule/catalogHandlers/catalogPublicHttp.js +179 -0
  8. package/app/modules/stickerPackModule/catalogHandlers/catalogUploadHttp.js +92 -0
  9. package/app/modules/stickerPackModule/catalogRouter.js +79 -0
  10. package/app/modules/stickerPackModule/domainEventOutboxRepository.js +243 -0
  11. package/app/modules/stickerPackModule/domainEvents.js +61 -0
  12. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +21 -0
  13. package/app/modules/stickerPackModule/stickerAssetRepository.js +19 -0
  14. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +55 -15
  15. package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +238 -0
  16. package/app/modules/stickerPackModule/stickerDomainEventBus.js +71 -0
  17. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +198 -0
  18. package/app/modules/stickerPackModule/stickerObjectStorageService.js +285 -0
  19. package/app/modules/stickerPackModule/stickerPackCatalogHttp.js +570 -536
  20. package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +44 -0
  21. package/app/modules/stickerPackModule/stickerPackItemRepository.js +18 -0
  22. package/app/modules/stickerPackModule/stickerPackRepository.js +51 -0
  23. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +191 -0
  24. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +301 -0
  25. package/app/modules/stickerPackModule/stickerStorageService.js +111 -10
  26. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +21 -0
  27. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +59 -7
  28. package/app/observability/metrics.js +169 -0
  29. package/app/services/featureFlagService.js +137 -0
  30. package/database/index.js +5 -0
  31. package/database/migrations/20260228_0022_sticker_scale_indexes.sql +16 -0
  32. package/database/migrations/20260228_0023_sticker_pack_score_snapshot.sql +25 -0
  33. package/database/migrations/20260228_0024_domain_event_outbox.sql +42 -0
  34. package/database/migrations/20260228_0025_sticker_worker_task_idempotency_dlq.sql +23 -0
  35. package/database/migrations/20260228_0026_feature_flags.sql +21 -0
  36. package/ecosystem.prod.config.cjs +70 -9
  37. package/index.js +26 -0
  38. package/kaikybrofc-omnizap-system-2.2.6.tgz +0 -0
  39. package/observability/sticker-catalog-slo.md +83 -0
  40. package/observability/sticker-scale-hardening-rollout.md +128 -0
  41. package/package.json +7 -35
  42. package/public/assets/images/brand-icon-192.png +0 -0
  43. package/public/assets/images/brand-logo-128.webp +0 -0
  44. package/public/assets/images/hero-banner-1280.avif +0 -0
  45. package/public/assets/images/hero-banner-1280.jpg +0 -0
  46. package/public/assets/images/hero-banner-1280.webp +0 -0
  47. package/public/assets/images/hero-banner-720.avif +0 -0
  48. package/public/assets/images/hero-banner-720.webp +0 -0
  49. package/public/index.html +120 -18
  50. package/public/js/apps/homeApp.js +469 -353
  51. package/public/robots.txt +9 -0
  52. package/public/sitemap.xml +28 -0
  53. package/scripts/sticker-catalog-loadtest.mjs +208 -0
  54. package/scripts/sticker-worker-task.mjs +122 -0
  55. package/observability/mysql-exporter.cnf +0 -5
package/package.json CHANGED
@@ -1,45 +1,11 @@
1
1
  {
2
2
  "name": "@kaikybrofc/omnizap-system",
3
- "version": "2.2.4",
3
+ "version": "2.2.6",
4
4
  "description": "Sistema profissional de automação WhatsApp com tecnologia Baileys",
5
5
  "main": "index.js",
6
6
  "publishConfig": {
7
7
  "registry": "https://npm.pkg.github.com"
8
8
  },
9
- "files": [
10
- "app/**/*.js",
11
- "database/**/*.js",
12
- "database/migrations/**/*.sql",
13
- "public/**/*.html",
14
- "public/**/*.css",
15
- "public/**/*.js",
16
- "scripts/**/*.sh",
17
- "scripts/**/*.mjs",
18
- "ml/clip_classifier/adaptive_scoring.py",
19
- "ml/clip_classifier/classifier.py",
20
- "ml/clip_classifier/embedding_store.py",
21
- "ml/clip_classifier/env_loader.py",
22
- "ml/clip_classifier/llm_label_expander.py",
23
- "ml/clip_classifier/main.py",
24
- "ml/clip_classifier/similarity_engine.py",
25
- "ml/clip_classifier/requirements.txt",
26
- "ml/clip_classifier/README.md",
27
- "ml/clip_classifier/Dockerfile",
28
- "observability/**/*.yml",
29
- "observability/**/*.yaml",
30
- "observability/**/*.json",
31
- "observability/**/*.sql",
32
- "observability/**/*.cnf",
33
- "index.js",
34
- "docker-compose.yml",
35
- "ecosystem.prod.config.cjs",
36
- "eslint.config.js",
37
- ".env.example",
38
- "README.md",
39
- "RELEASE-v2.1.2.md",
40
- "LICENSE",
41
- "package-lock.json"
42
- ],
43
9
  "type": "module",
44
10
  "keywords": [
45
11
  "whatsapp",
@@ -52,6 +18,8 @@
52
18
  "author": "OmniZap Team",
53
19
  "license": "MIT",
54
20
  "scripts": {
21
+ "prepack": "npm run sync:npmignore",
22
+ "sync:npmignore": "node -e \"const fs=require('node:fs');fs.copyFileSync('.gitignore','.npmignore');console.log('synced .npmignore from .gitignore');\"",
55
23
  "start": "node index.js",
56
24
  "dev": "node index.js",
57
25
  "db:init": "node database/init.js",
@@ -59,6 +27,10 @@
59
27
  "deploy": "bash ./scripts/deploy.sh",
60
28
  "deploy:dry-run": "DEPLOY_DRY_RUN=1 bash ./scripts/deploy.sh",
61
29
  "readme:sync-snapshot": "node ./scripts/sync-readme-snapshot.mjs",
30
+ "loadtest:stickers": "node ./scripts/sticker-catalog-loadtest.mjs",
31
+ "worker:sticker:classification": "node ./scripts/sticker-worker-task.mjs --task-type classification_cycle",
32
+ "worker:sticker:curation": "node ./scripts/sticker-worker-task.mjs --task-type curation_cycle",
33
+ "worker:sticker:rebuild": "node ./scripts/sticker-worker-task.mjs --task-type rebuild_cycle",
62
34
  "release": "bash ./scripts/release.sh",
63
35
  "release:minor": "RELEASE_TYPE=minor bash ./scripts/release.sh",
64
36
  "release:major": "RELEASE_TYPE=major bash ./scripts/release.sh",
package/public/index.html CHANGED
@@ -10,8 +10,8 @@
10
10
  <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
11
11
  <meta name="theme-color" content="#0b1020" />
12
12
  <link rel="canonical" href="https://omnizap.shop/" />
13
- <link rel="icon" type="image/jpeg" href="https://iili.io/FC3FABe.jpg" />
14
- <link rel="apple-touch-icon" href="https://iili.io/FC3FABe.jpg" />
13
+ <link rel="icon" type="image/png" href="/assets/images/brand-icon-192.png" />
14
+ <link rel="apple-touch-icon" href="/assets/images/brand-icon-192.png" />
15
15
  <link rel="sitemap" type="application/xml" href="https://omnizap.shop/sitemap.xml" />
16
16
  <link rel="me" href="https://github.com/Kaikygr/omnizap-system" />
17
17
  <link rel="me" href="https://wa.me/?text=iniciar" />
@@ -22,19 +22,55 @@
22
22
  <meta property="og:title" content="OmniZap System | Plataforma Open Source de Automação WhatsApp" />
23
23
  <meta property="og:description" content="Infraestrutura técnica para bots WhatsApp com API, observabilidade e arquitetura modular pronta para produção." />
24
24
  <meta property="og:url" content="https://omnizap.shop/" />
25
- <meta property="og:image" content="https://iili.io/fSNGag2.png" />
25
+ <meta property="og:image" content="https://omnizap.shop/assets/images/hero-banner-1280.jpg" />
26
26
  <meta property="og:image:alt" content="Banner OmniZap System com identidade visual tecnológica" />
27
27
 
28
28
  <meta name="twitter:card" content="summary_large_image" />
29
29
  <meta name="twitter:title" content="OmniZap System" />
30
30
  <meta name="twitter:description" content="Plataforma open source de automação WhatsApp com API, telemetria e stack de produção." />
31
- <meta name="twitter:image" content="https://iili.io/fSNGag2.png" />
31
+ <meta name="twitter:image" content="https://omnizap.shop/assets/images/hero-banner-1280.jpg" />
32
+
33
+ <link
34
+ rel="preload"
35
+ as="image"
36
+ href="/assets/images/hero-banner-720.webp"
37
+ imagesrcset="/assets/images/hero-banner-720.webp 720w, /assets/images/hero-banner-1280.webp 1280w"
38
+ imagesizes="(max-width: 860px) 92vw, 1150px"
39
+ fetchpriority="high"
40
+ />
32
41
 
33
42
  <link rel="preconnect" href="https://fonts.googleapis.com" />
34
43
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
35
- <link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Sora:wght@500;600;700&display=swap" rel="stylesheet" />
36
- <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" rel="stylesheet" />
37
- <link href="/css/github-project-panel.css?v=20260226c" rel="stylesheet" />
44
+ <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Sora:wght@500;600;700&display=swap" />
45
+ <link
46
+ rel="stylesheet"
47
+ href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Sora:wght@500;600;700&display=swap"
48
+ media="print"
49
+ onload="this.media='all'"
50
+ />
51
+ <noscript>
52
+ <link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Sora:wght@500;600;700&display=swap" rel="stylesheet" />
53
+ </noscript>
54
+ <link rel="preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" />
55
+ <link
56
+ rel="stylesheet"
57
+ href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css"
58
+ media="print"
59
+ onload="this.media='all'"
60
+ />
61
+ <noscript>
62
+ <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" rel="stylesheet" />
63
+ </noscript>
64
+ <link rel="preload" as="style" href="/css/github-project-panel.css?v=20260226c" />
65
+ <link
66
+ rel="stylesheet"
67
+ href="/css/github-project-panel.css?v=20260226c"
68
+ media="print"
69
+ onload="this.media='all'"
70
+ />
71
+ <noscript>
72
+ <link href="/css/github-project-panel.css?v=20260226c" rel="stylesheet" />
73
+ </noscript>
38
74
 
39
75
  <script type="application/ld+json">
40
76
  {
@@ -58,7 +94,7 @@
58
94
  "@type": "Organization",
59
95
  "name": "OmniZap System",
60
96
  "url": "https://omnizap.shop/",
61
- "logo": "https://iili.io/FC3FABe.jpg",
97
+ "logo": "https://omnizap.shop/assets/images/brand-icon-192.png",
62
98
  "sameAs": [
63
99
  "https://github.com/Kaikygr/omnizap-system",
64
100
  "https://wa.me/?text=iniciar"
@@ -276,6 +312,33 @@
276
312
  display: grid;
277
313
  }
278
314
 
315
+ body.home-authenticated .top-inner {
316
+ flex-direction: row;
317
+ align-items: center;
318
+ justify-content: space-between;
319
+ gap: 10px;
320
+ }
321
+
322
+ body.home-authenticated .top-head {
323
+ flex: 1 1 auto;
324
+ }
325
+
326
+ body.home-authenticated #nav-toggle {
327
+ display: none;
328
+ }
329
+
330
+ body.home-authenticated #main-nav {
331
+ display: flex;
332
+ width: auto;
333
+ grid-template-columns: none;
334
+ gap: 8px;
335
+ flex-wrap: nowrap;
336
+ }
337
+
338
+ body.home-authenticated #main-nav .btn:not(#nav-auth-link) {
339
+ display: none;
340
+ }
341
+
279
342
  .btn {
280
343
  width: 100%;
281
344
  text-align: center;
@@ -295,8 +358,8 @@
295
358
  padding: 4px;
296
359
  border-radius: 999px;
297
360
  justify-content: center;
298
- justify-self: center;
299
- align-self: center;
361
+ justify-self: auto;
362
+ align-self: auto;
300
363
  background: linear-gradient(120deg, #132544f0, #10203af0);
301
364
  }
302
365
 
@@ -342,7 +405,6 @@
342
405
  background: linear-gradient(150deg, #0f1a31ee, #101d35f0);
343
406
  box-shadow: 0 18px 48px #040c1f7a, inset 0 1px 0 #b7d3ff14;
344
407
  padding: clamp(16px, 3vw, 34px);
345
- animation: rise .5s ease-out;
346
408
  }
347
409
 
348
410
  .hero::before {
@@ -369,14 +431,20 @@
369
431
  z-index: -1;
370
432
  }
371
433
 
434
+ .hero-banner-frame {
435
+ display: block;
436
+ margin-bottom: 15px;
437
+ }
438
+
372
439
  .hero-banner {
373
440
  display: block;
374
441
  width: 100%;
442
+ height: auto;
443
+ aspect-ratio: 1280 / 544;
375
444
  max-height: 238px;
376
445
  object-fit: cover;
377
446
  border-radius: 16px;
378
447
  border: 1px solid #3a5279;
379
- margin-bottom: 15px;
380
448
  box-shadow: 0 12px 30px #00000052;
381
449
  filter: saturate(1.06) contrast(1.03);
382
450
  transition: transform 200ms cubic-bezier(.4, 0, .2, 1), box-shadow 200ms cubic-bezier(.4, 0, .2, 1), border-color 200ms cubic-bezier(.4, 0, .2, 1);
@@ -1127,9 +1195,11 @@
1127
1195
  <div class="brand">
1128
1196
  <img
1129
1197
  class="brand-logo"
1130
- src="https://iili.io/FC3FABe.jpg"
1198
+ src="/assets/images/brand-logo-128.webp"
1131
1199
  alt="OmniZap"
1132
- loading="lazy"
1200
+ loading="eager"
1201
+ width="30"
1202
+ height="30"
1133
1203
  decoding="async"
1134
1204
  />
1135
1205
  <span>OmniZap System</span>
@@ -1153,7 +1223,25 @@
1153
1223
 
1154
1224
  <main class="container">
1155
1225
  <section class="hero">
1156
- <img class="hero-banner" src="https://iili.io/fSNGag2.png" alt="Banner OmniZap System" loading="lazy" decoding="async" />
1226
+ <picture class="hero-banner-frame">
1227
+ <source
1228
+ type="image/webp"
1229
+ srcset="/assets/images/hero-banner-720.webp 720w, /assets/images/hero-banner-1280.webp 1280w"
1230
+ sizes="(max-width: 860px) 92vw, 1150px"
1231
+ />
1232
+ <img
1233
+ class="hero-banner"
1234
+ src="/assets/images/hero-banner-720.webp"
1235
+ srcset="/assets/images/hero-banner-720.webp 720w, /assets/images/hero-banner-1280.webp 1280w"
1236
+ sizes="(max-width: 860px) 92vw, 1150px"
1237
+ alt="Banner OmniZap System"
1238
+ width="1280"
1239
+ height="544"
1240
+ loading="eager"
1241
+ fetchpriority="high"
1242
+ decoding="async"
1243
+ />
1244
+ </picture>
1157
1245
  <span class="eyebrow">Plataforma Open Source de Automação WhatsApp</span>
1158
1246
  <h1>Infraestrutura completa para bots, automação e gestão de WhatsApp em escala.</h1>
1159
1247
  <p class="lead">Foco em API, observabilidade, gestão de grupos, mídia, comandos automatizados e arquitetura pronta para produção.</p>
@@ -1395,8 +1483,22 @@ curl -sS https://omnizap.shop/api/sticker-packs/system-summary | jq</code></pre>
1395
1483
  hidden
1396
1484
  ><i class="fa-brands fa-whatsapp" aria-hidden="true"></i></a>
1397
1485
 
1398
- <div id="home-react-root" hidden></div>
1399
- <script type="module" src="/js/apps/homeApp.js?v=20260228-mobile-user-bubble2"></script>
1400
- <script type="module" src="/js/github-panel/index.js?v=20260226a"></script>
1486
+ <script type="module" src="/js/apps/homeApp.js?v=20260228-perf-lcp1"></script>
1487
+ <script type="module">
1488
+ const loadGithubPanel = () =>
1489
+ import('/js/github-panel/index.js?v=20260228-perf-lcp1').catch(() => {});
1490
+
1491
+ if (typeof window.requestIdleCallback === 'function') {
1492
+ window.requestIdleCallback(() => {
1493
+ void loadGithubPanel();
1494
+ }, { timeout: 4000 });
1495
+ } else {
1496
+ window.addEventListener('load', () => {
1497
+ window.setTimeout(() => {
1498
+ void loadGithubPanel();
1499
+ }, 900);
1500
+ }, { once: true });
1501
+ }
1502
+ </script>
1401
1503
  </body>
1402
1504
  </html>