@kaikybrofc/omnizap-system 2.3.1 → 2.3.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.
Files changed (43) hide show
  1. package/README.md +20 -18
  2. package/app/controllers/messageController.js +473 -255
  3. package/app/modules/analyticsModule/messageAnalysisEventRepository.js +83 -0
  4. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +1 -3
  5. package/app/observability/metrics.js +6 -3
  6. package/app/services/googleWebLinkService.js +77 -0
  7. package/database/index.js +2 -0
  8. package/database/migrations/20260301_0028_message_analysis_event.sql +32 -0
  9. package/database/migrations/20260301_0029_admin_action_audit.sql +16 -0
  10. package/package.json +1 -1
  11. package/public/index.html +12 -8
  12. package/public/js/apps/homeApp.js +75 -30
  13. package/public/js/apps/loginApp.js +184 -29
  14. package/public/js/apps/stickersAdminApp.js +3 -9
  15. package/public/js/apps/userApp.js +985 -55
  16. package/public/js/apps/userProfileApp.js +244 -0
  17. package/public/login/index.html +430 -100
  18. package/public/termos-de-uso/index.html +1 -1
  19. package/public/user/index.html +2 -180
  20. package/public/user/systemadm/index.html +774 -0
  21. package/server/controllers/stickerCatalog/nonCatalogHandlers.js +208 -0
  22. package/server/controllers/stickerCatalogController.js +1186 -363
  23. package/server/controllers/systemAdminController.js +141 -0
  24. package/server/controllers/userController.js +87 -0
  25. package/server/http/httpServer.js +72 -32
  26. package/server/middleware/cachePolicy.js +24 -0
  27. package/server/middleware/cachePolicyHelpers.js +2 -0
  28. package/server/middleware/rateLimit.js +82 -0
  29. package/server/middleware/requestLogger.js +16 -0
  30. package/server/middleware/requireAdminAuth.js +42 -0
  31. package/server/middleware/securityHeaders.js +6 -0
  32. package/server/routes/admin/systemAdminRouter.js +56 -0
  33. package/server/routes/health/healthRouter.js +41 -0
  34. package/server/routes/indexRouter.js +203 -0
  35. package/server/routes/metrics/metricsRouter.js +13 -0
  36. package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +44 -0
  37. package/server/routes/stickerCatalog/stickerApiRouter.js +84 -0
  38. package/server/routes/stickerCatalog/stickerDataRouter.js +140 -0
  39. package/server/routes/stickerCatalog/stickerSiteRouter.js +43 -0
  40. package/server/routes/user/userRouter.js +56 -0
  41. package/server/utils/safePath.js +26 -0
  42. package/server/routes/metricsRoute.js +0 -7
  43. package/server/routes/stickerCatalogRoute.js +0 -20
@@ -292,7 +292,7 @@
292
292
  </section>
293
293
 
294
294
  <section class="card">
295
- <h2>12. Política de Privacidade (termos complementares)</h2>
295
+ <h2 id="politica-de-privacidade">12. Política de Privacidade (termos complementares)</h2>
296
296
  <ul>
297
297
  <li><strong>Minimização:</strong> coletamos e mantemos apenas os dados necessários para operação, segurança, suporte e melhoria dos serviços.</li>
298
298
  <li><strong>Finalidade e transparência:</strong> o tratamento de dados é feito para finalidades legítimas, específicas e informadas neste documento.</li>
@@ -253,120 +253,6 @@
253
253
  color: #f4fff8;
254
254
  }
255
255
 
256
- .admin-panel {
257
- border: 1px solid #5b4a8f8f;
258
- border-radius: 12px;
259
- background: #1a1d3aa8;
260
- padding: 12px;
261
- display: grid;
262
- gap: 10px;
263
- }
264
-
265
- .admin-headline {
266
- display: flex;
267
- align-items: center;
268
- justify-content: space-between;
269
- gap: 8px;
270
- flex-wrap: wrap;
271
- }
272
-
273
- .admin-title {
274
- margin: 0;
275
- font-size: 17px;
276
- color: #eef3ff;
277
- }
278
-
279
- .admin-role {
280
- border: 1px solid #6f5cc2;
281
- border-radius: 999px;
282
- padding: 4px 10px;
283
- font-size: 12px;
284
- font-weight: 700;
285
- color: #dad1ff;
286
- background: #2a2155;
287
- }
288
-
289
- .admin-note {
290
- margin: 0;
291
- color: #d8d2ff;
292
- font-size: 14px;
293
- line-height: 1.45;
294
- }
295
-
296
- .admin-error {
297
- margin: 0;
298
- border: 1px solid #a74949;
299
- border-radius: 10px;
300
- background: #3b181899;
301
- color: #ffd7d7;
302
- padding: 8px 10px;
303
- font-size: 13px;
304
- }
305
-
306
- .admin-form {
307
- display: grid;
308
- gap: 8px;
309
- }
310
-
311
- .admin-label {
312
- color: #d8d2ff;
313
- font-size: 13px;
314
- font-weight: 600;
315
- }
316
-
317
- .admin-form-row {
318
- display: grid;
319
- grid-template-columns: 1fr auto;
320
- gap: 8px;
321
- }
322
-
323
- .admin-input {
324
- min-height: 40px;
325
- border: 1px solid #4f4a77;
326
- border-radius: 10px;
327
- background: #11162f;
328
- color: #f4f7ff;
329
- font-size: 14px;
330
- padding: 0 10px;
331
- }
332
-
333
- .admin-input:focus {
334
- outline: none;
335
- border-color: #7c6be0;
336
- }
337
-
338
- .admin-grid {
339
- display: grid;
340
- grid-template-columns: repeat(4, minmax(0, 1fr));
341
- gap: 8px;
342
- }
343
-
344
- .admin-metric {
345
- border: 1px solid #45409d7d;
346
- border-radius: 10px;
347
- background: #1a2044bf;
348
- padding: 9px;
349
- }
350
-
351
- .admin-metric-label {
352
- margin: 0 0 4px;
353
- color: #b9b3e8;
354
- font-size: 12px;
355
- }
356
-
357
- .admin-metric-value {
358
- margin: 0;
359
- color: #f4f6ff;
360
- font-size: 17px;
361
- font-weight: 800;
362
- }
363
-
364
- .admin-actions {
365
- display: flex;
366
- flex-wrap: wrap;
367
- gap: 8px;
368
- }
369
-
370
256
  .actions {
371
257
  display: flex;
372
258
  flex-wrap: wrap;
@@ -383,10 +269,6 @@
383
269
  .grid {
384
270
  grid-template-columns: repeat(2, minmax(0, 1fr));
385
271
  }
386
-
387
- .admin-grid {
388
- grid-template-columns: repeat(2, minmax(0, 1fr));
389
- }
390
272
  }
391
273
 
392
274
  @media (max-width: 620px) {
@@ -412,9 +294,6 @@
412
294
  text-align: center;
413
295
  }
414
296
 
415
- .admin-form-row {
416
- grid-template-columns: 1fr;
417
- }
418
297
  }
419
298
  </style>
420
299
  </head>
@@ -473,67 +352,10 @@
473
352
  <div><strong>Sessão expira:</strong> <span id="user-expires-at"></span></div>
474
353
  </div>
475
354
 
476
- <section id="user-admin-panel" class="admin-panel" hidden>
477
- <div class="admin-headline">
478
- <h3 class="admin-title">Área Admin</h3>
479
- <span id="user-admin-role" class="admin-role">admin</span>
480
- </div>
481
- <p id="user-admin-status" class="admin-note"></p>
482
- <p id="user-admin-error" class="admin-error" hidden></p>
483
-
484
- <form id="user-admin-unlock-form" class="admin-form" hidden>
485
- <label for="user-admin-password" class="admin-label">Senha do painel admin</label>
486
- <div class="admin-form-row">
487
- <input id="user-admin-password" class="admin-input" type="password" autocomplete="current-password" placeholder="Digite sua senha" />
488
- <button id="user-admin-unlock-btn" type="submit" class="btn">Desbloquear</button>
489
- </div>
490
- </form>
491
-
492
- <div id="user-admin-overview" hidden>
493
- <div class="admin-grid">
494
- <article class="admin-metric">
495
- <p class="admin-metric-label">Packs (total)</p>
496
- <p id="user-admin-total-packs" class="admin-metric-value">0</p>
497
- </article>
498
- <article class="admin-metric">
499
- <p class="admin-metric-label">Stickers (total)</p>
500
- <p id="user-admin-total-stickers" class="admin-metric-value">0</p>
501
- </article>
502
- <article class="admin-metric">
503
- <p class="admin-metric-label">Bans ativos</p>
504
- <p id="user-admin-active-bans" class="admin-metric-value">0</p>
505
- </article>
506
- <article class="admin-metric">
507
- <p class="admin-metric-label">Usuários Google</p>
508
- <p id="user-admin-known-users" class="admin-metric-value">0</p>
509
- </article>
510
- <article class="admin-metric">
511
- <p class="admin-metric-label">Sessões Google</p>
512
- <p id="user-admin-active-sessions" class="admin-metric-value">0</p>
513
- </article>
514
- <article class="admin-metric">
515
- <p class="admin-metric-label">Visitas 24h</p>
516
- <p id="user-admin-visits-24h" class="admin-metric-value">0</p>
517
- </article>
518
- <article class="admin-metric">
519
- <p class="admin-metric-label">Visitas 7d</p>
520
- <p id="user-admin-visits-7d" class="admin-metric-value">0</p>
521
- </article>
522
- <article class="admin-metric">
523
- <p class="admin-metric-label">Visitantes 7d</p>
524
- <p id="user-admin-unique-visitors-7d" class="admin-metric-value">0</p>
525
- </article>
526
- </div>
527
- <div class="admin-actions">
528
- <button id="user-admin-refresh-btn" type="button" class="btn">Atualizar dados admin</button>
529
- <button id="user-admin-logout-btn" type="button" class="btn">Sair do admin</button>
530
- </div>
531
- </div>
532
- </section>
533
-
534
355
  <div id="user-actions" class="actions" hidden>
535
356
  <a id="user-chat-link" class="btn primary" href="https://api.whatsapp.com/send/?text=%2Fmenu&type=custom_url&app_absent=0" target="_blank" rel="noreferrer noopener"> Voltar ao chat do bot (/menu) </a>
536
357
  <a id="user-manage-main-link" class="btn" href="/stickers/perfil">Gerenciar meus stickers</a>
358
+ <a class="btn" href="/user/systemadm/">System Admin</a>
537
359
  <a class="btn" href="/">Voltar para Home</a>
538
360
  <button id="user-logout-btn" type="button" class="btn">Encerrar sessão</button>
539
361
  </div>
@@ -543,6 +365,6 @@
543
365
  </section>
544
366
  </main>
545
367
 
546
- <script type="module" src="/js/apps/userApp.js?v=20260228-user-page-admin-merge-v1"></script>
368
+ <script type="module" src="/js/apps/userProfileApp.js?v=20260301-user-profile-v1"></script>
547
369
  </body>
548
370
  </html>