@danhachuel/leadmaster 0.1.1 → 0.1.3

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/CHANGELOG.md CHANGED
@@ -6,6 +6,54 @@ O formato é baseado no [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.
6
6
  A etiqueta visual de versão usa patch de dois dígitos (ex.: `0.1.00`); o registry NPM
7
7
  normaliza para a forma canônica (ex.: `0.1.0`).
8
8
 
9
+ ## [0.1.03] — 2026-10-25
10
+
11
+ ### Adicionado
12
+
13
+ - **Páginas legais e de verificação** (`legal/`), baseadas no layout do AutoPost-Lunga:
14
+ - `legal/index.html` — página de apresentação/verificação para APIs de plataformas
15
+ (TikTok, YouTube, Pinterest, Meta): funcionalidades do LeadMaster (CRM Kanban,
16
+ extratores de leads, agentes de IA e pipeline de vídeos faceless), integrações via
17
+ APIs oficiais e links para os documentos legais.
18
+ - `legal/privacy.html` — Política de Privacidade em português (Brasil) com conformidade
19
+ explícita à LGPD (Lei 13.709/2018): dados coletados (e-mail, leads prospectados, uso,
20
+ cookies, tokens de API), finalidades, armazenamento 100% local (JSON), bases legais,
21
+ compartilhamento (plataformas via APIs oficiais e provedores de LLM), direitos do
22
+ titular (art. 18), segurança, retenção e encarregado (DPO).
23
+ - `legal/terms.html` — Termos de Uso em português (Brasil): aceitação, descrição do
24
+ serviço ("como está"), responsabilidades do usuário (conteúdo gerado, credenciais,
25
+ LGPD e termos de plataformas terceiras), usos proibidos (spam/assédio), limitação de
26
+ responsabilidade (bloqueios e penalidades de plataformas), propriedade intelectual
27
+ (uso pessoal, vedada revenda), foro do desenvolvedor (Brasil) e referência à
28
+ Política de Privacidade.
29
+ - Páginas responsivas (HTML5 semântico, CSS embutido, favicon do urso), com rodapé
30
+ de verificação para plataformas e contato do desenvolvedor.
31
+ - Pasta `legal/` incluída no pacote NPM (`files`).
32
+
33
+ ## [0.1.02] — 2026-10-24
34
+
35
+ ### Corrigido
36
+
37
+ - **Poluição do terminal por logs de polling** (`GET /api/metrics`):
38
+ - Launcher (`scripts/cli.mjs`) e `npm run dev` iniciam o uvicorn com
39
+ `--no-access-log`.
40
+ - Filtro granular de logging no backend silencia o access-log **apenas** de
41
+ `/api/metrics` — erros, exceções e os demais endpoints continuam logados
42
+ normalmente (vale também para execuções manuais do uvicorn).
43
+ - Painel migrado para **TanStack Query** (`@tanstack/react-query`,
44
+ `refetchInterval` de 10s): ciclo de vida e cleanup automáticos, pausa
45
+ quando a aba fica ociosa e retoma ao focar; indicador "atualiza a cada
46
+ 10s" visível nos blocos de gráficos.
47
+ - Polling de campanhas (Disparos) também via TanStack Query: sonda a cada
48
+ 4s apenas enquanto existe campanha em andamento, sem `setInterval` manual.
49
+ - Verificado: nenhum outro endpoint é alvo de polling — `/api/config` e
50
+ demais chamadas são carregamentos pontuais no início da página.
51
+
52
+ ### Alterado
53
+
54
+ - **O sistema nunca abre o navegador.** Removida a abertura automática de janela do
55
+ launcher — o LeadMaster apenas imprime a URL no terminal e quem abre é o usuário.
56
+
9
57
  ## [0.1.01] — 2026-10-23
10
58
 
11
59
  ### Removido
package/README.md CHANGED
@@ -24,8 +24,9 @@ npx --yes @danhachuel/leadmaster@0.1.0
24
24
  ```
25
25
 
26
26
  - `install` prepara a pasta de dados e instala as dependências Python.
27
- - Sem argumentos, o launcher sobe o servidor local (FastAPI na porta **5055**) e abre o
28
- navegador automaticamente. Se a porta 5055 estiver ocupada, o LeadMaster sobe
27
+ - Sem argumentos, o launcher sobe o servidor local (FastAPI na porta **5055**) e
28
+ **imprime a URL no terminal** — o LeadMaster **nunca abre janelas**: quem abre o
29
+ navegador é você. Se a porta 5055 estiver ocupada, o LeadMaster sobe
29
30
  automaticamente na próxima livre (5056, 5057, ...). Pressione `Ctrl+C` para encerrar.
30
31
  - Flags úteis: `--home=<caminho>` (pasta de dados), `--port=<numero>`,
31
32
  `doctor` (diagnóstico), `help`.
@@ -65,7 +66,7 @@ para `http://127.0.0.1:8010` (backend de desenvolvimento).
65
66
 
66
67
  ```
67
68
  npx @danhachuel/leadmaster
68
- └─ scripts/cli.mjs # instala deps Python, sobe uvicorn, abre navegador
69
+ └─ scripts/cli.mjs # instala deps Python, sobe uvicorn, imprime a URL (nunca abre o navegador)
69
70
  └─ backend/main.py # FastAPI: API + serving da UI construída (frontend/dist)
70
71
  ├─ services/storage.py # JSON local (leads, campanhas, config)
71
72
  ├─ services/extractors.py # Maps / Instagram / CNPJ
package/backend/main.py CHANGED
@@ -5,6 +5,7 @@ modo `npx`, onde um único servidor entrega painel e API na mesma porta.
5
5
  """
6
6
 
7
7
  import json
8
+ import logging
8
9
  import os
9
10
  import platform
10
11
  import sys
@@ -37,6 +38,26 @@ def _versao() -> str:
37
38
  VERSION = _versao()
38
39
 
39
40
 
41
+ # ---------------------------------------------------------------------------
42
+ # Logs de acesso
43
+ #
44
+ # O endpoint /api/metrics é consultado por polling do Painel e inundava o
45
+ # terminal. O filtro abaixo silencia APENAS esse endpoint no access-log —
46
+ # erros, exceções e os demais endpoints continuam sendo logados normalmente.
47
+ # (O launcher e o "npm run dev" também passam --no-access-log ao uvicorn.)
48
+ # ---------------------------------------------------------------------------
49
+
50
+ class _FiltroAcessoPolling(logging.Filter):
51
+ def filter(self, record: logging.LogRecord) -> bool:
52
+ try:
53
+ return "/api/metrics" not in record.getMessage()
54
+ except Exception:
55
+ return True
56
+
57
+
58
+ logging.getLogger("uvicorn.access").addFilter(_FiltroAcessoPolling())
59
+
60
+
40
61
  @asynccontextmanager
41
62
  async def lifespan(_app: FastAPI):
42
63
  storage.ensure_seeds()