Optimizer
IN-SCOPE
Visão Geral
Seção intitulada “Visão Geral”O Optimizer é a aplicação de gestão do catálogo VTEX com enriquecimento por IA. Sincroniza produtos e SKUs da VTEX, aplica scoring de qualidade e permite enriquecimento automático via AirOps.
| Atributo | Valor |
|---|---|
| URL | https://app.profarma.dev/optimizer/ |
| Path | /optimizer/* |
| Tipo | SPA + Sub-Hono (API backend) |
| Auth | JWT Cookie + Turnstile + Internal API Key |
| Stack Frontend | React + Tailwind CSS |
| Status | Produção |
Funcionalidades
Seção intitulada “Funcionalidades”Catálogo
Seção intitulada “Catálogo”- Visualização de produtos e SKUs VTEX
- Busca avançada com filtros (categoria, marca, status, score)
- Detalhamento de especificações técnicas
- Imagens e metadata de produto
Sync VTEX
Seção intitulada “Sync VTEX”- Full sync: Cron diário às 05:00 BRT via Durable Object
- Incremental sync: Trigger manual para atualizações parciais
- SKU sync: Sincronização granular de SKUs
- Emergency stop: Parada de emergência em caso de problemas
Enriquecimento IA (AirOps)
Seção intitulada “Enriquecimento IA (AirOps)”- Pipeline: Produto → AirOps Workflow → Specs enriquecidas
- Scoring de qualidade: título, descrição, imagem, specs
- Review workflow: pendente → aprovado → publicado
- Histórico de enriquecimentos por produto
Workflow de Review
Seção intitulada “Workflow de Review”- Status tracking:
pending → reviewed → approved → published - Operações de aprovação e publicação restritas (humano obrigatório)
- Lock em rotas críticas (
/publish,/approve,/settings)
Endpoints Relevantes
Seção intitulada “Endpoints Relevantes”API Pública (requer JWT + app auth)
Seção intitulada “API Pública (requer JWT + app auth)”| Método | Path | Descrição |
|---|---|---|
| * | /optimizer/api/* | Rotas delegadas ao sub-app Hono |
API Interna (requer Admin ou Internal API Key)
Seção intitulada “API Interna (requer Admin ou Internal API Key)”| Método | Path | Descrição |
|---|---|---|
| POST | /optimizer/api/internal/trigger-cron-sync | Trigger manual de sync |
| POST | /optimizer/api/internal/emergency-stop | Para sync em andamento |
| GET | /optimizer/api/internal/do-sync-status | Status do DO de sync |
| POST | /optimizer/api/internal/emergency-reset | Reset forçado (EMERGENCY_RESET_KEY) |
| POST | /optimizer/api/internal/sku-full-sync | Sync completo de SKUs |
| POST | /optimizer/api/internal/sku-incremental-sync | Sync incremental |
Rotas com Internal API Key Permitido
Seção intitulada “Rotas com Internal API Key Permitido”/optimizer/api/internal/*/optimizer/api/catalog/fix-*/optimizer/api/catalog/normalize-*/optimizer/api/catalog/ensure-*/optimizer/api/catalog/analyze/optimizer/api/catalog/products (read-only)/optimizer/api/catalog/stats (read-only)/optimizer/api/catalog/enrichment-stats (read-only)Rotas BLOQUEADAS para Internal API Key
Seção intitulada “Rotas BLOQUEADAS para Internal API Key”flowchart LR
KEY["Internal<br/>API Key"] --> R1["/catalog/publish"]
KEY --> R2["/catalog/approve"]
KEY --> R3["/settings"]
KEY --> R4["/admin"]
R1 --> X1["Bloqueado: Operação crítica"]
R2 --> X2["Bloqueado: Operação crítica"]
R3 --> X3["Bloqueado: Configurações"]
R4 --> X4["Bloqueado: Admin"]
style KEY fill:#1a2744,stroke:#00aaaf,color:#e0e6f0
style R1 fill:#dc2626,stroke:#991b1b,color:#fff
style R2 fill:#dc2626,stroke:#991b1b,color:#fff
style R3 fill:#dc2626,stroke:#991b1b,color:#fff
style R4 fill:#dc2626,stroke:#991b1b,color:#fff
style X1 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
style X2 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
style X3 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
style X4 fill:#7f1d1d,stroke:#991b1b,color:#fca5a5
Integrações
Seção intitulada “Integrações”| Serviço | Uso | Credenciais |
|---|---|---|
| VTEX Commerce | Catálogo (produtos, SKUs, specs) | VTEX_APP_KEY + VTEX_APP_TOKEN |
| AirOps | Pipeline de enriquecimento IA | AIROPS_API_KEY |
Observações para Pentest
Seção intitulada “Observações para Pentest”- Testar Internal API Key bypass em rotas bloqueadas
- Verificar rate limit de 100 req/min na Internal API
- Testar acesso direto às rotas de catalog sem auth
- Validar que
/publishe/approveexigem humano autenticado - Testar timing-safe comparison da API key