@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.
- package/.env.example +5 -0
- package/.prettierrc +16 -0
- package/README.md +13 -13
- package/app/modules/stickerPackModule/autoPackCollectorService.js +63 -8
- package/app/modules/stickerPackModule/catalogHandlers/catalogAdminHttp.js +68 -0
- package/app/modules/stickerPackModule/catalogHandlers/catalogAuthHttp.js +34 -0
- package/app/modules/stickerPackModule/catalogHandlers/catalogPublicHttp.js +179 -0
- package/app/modules/stickerPackModule/catalogHandlers/catalogUploadHttp.js +92 -0
- package/app/modules/stickerPackModule/catalogRouter.js +79 -0
- package/app/modules/stickerPackModule/domainEventOutboxRepository.js +243 -0
- package/app/modules/stickerPackModule/domainEvents.js +61 -0
- package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +21 -0
- package/app/modules/stickerPackModule/stickerAssetRepository.js +19 -0
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +55 -15
- package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +238 -0
- package/app/modules/stickerPackModule/stickerDomainEventBus.js +71 -0
- package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +198 -0
- package/app/modules/stickerPackModule/stickerObjectStorageService.js +285 -0
- package/app/modules/stickerPackModule/stickerPackCatalogHttp.js +570 -536
- package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +44 -0
- package/app/modules/stickerPackModule/stickerPackItemRepository.js +18 -0
- package/app/modules/stickerPackModule/stickerPackRepository.js +51 -0
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +191 -0
- package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +301 -0
- package/app/modules/stickerPackModule/stickerStorageService.js +111 -10
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +21 -0
- package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +59 -7
- package/app/observability/metrics.js +169 -0
- package/app/services/featureFlagService.js +137 -0
- package/database/index.js +5 -0
- package/database/migrations/20260228_0022_sticker_scale_indexes.sql +16 -0
- package/database/migrations/20260228_0023_sticker_pack_score_snapshot.sql +25 -0
- package/database/migrations/20260228_0024_domain_event_outbox.sql +42 -0
- package/database/migrations/20260228_0025_sticker_worker_task_idempotency_dlq.sql +23 -0
- package/database/migrations/20260228_0026_feature_flags.sql +21 -0
- package/ecosystem.prod.config.cjs +70 -9
- package/index.js +26 -0
- package/kaikybrofc-omnizap-system-2.2.6.tgz +0 -0
- package/observability/sticker-catalog-slo.md +83 -0
- package/observability/sticker-scale-hardening-rollout.md +128 -0
- package/package.json +7 -35
- package/public/assets/images/brand-icon-192.png +0 -0
- package/public/assets/images/brand-logo-128.webp +0 -0
- package/public/assets/images/hero-banner-1280.avif +0 -0
- package/public/assets/images/hero-banner-1280.jpg +0 -0
- package/public/assets/images/hero-banner-1280.webp +0 -0
- package/public/assets/images/hero-banner-720.avif +0 -0
- package/public/assets/images/hero-banner-720.webp +0 -0
- package/public/index.html +120 -18
- package/public/js/apps/homeApp.js +469 -353
- package/public/robots.txt +9 -0
- package/public/sitemap.xml +28 -0
- package/scripts/sticker-catalog-loadtest.mjs +208 -0
- package/scripts/sticker-worker-task.mjs +122 -0
- 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.
|
|
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",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
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/
|
|
14
|
-
<link rel="apple-touch-icon" href="
|
|
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://
|
|
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://
|
|
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"
|
|
36
|
-
<link
|
|
37
|
-
|
|
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://
|
|
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:
|
|
299
|
-
align-self:
|
|
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="
|
|
1198
|
+
src="/assets/images/brand-logo-128.webp"
|
|
1131
1199
|
alt="OmniZap"
|
|
1132
|
-
loading="
|
|
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
|
-
<
|
|
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
|
-
<
|
|
1399
|
-
<script type="module"
|
|
1400
|
-
|
|
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>
|