Sulfite Server
O sulfite_server é o servidor backend do Sulfite. Ele expõe o motor de relatórios como uma REST API completa — pense nele como um JasperReports Server para Dart.
O que ele faz
┌──────────┐ ┌──────────────────┐ ┌──────────────┐
│ Cliente │────▶│ Sulfite Server │────▶│ PDF / HTML │
│ (HTTP) │◀────│ (REST API) │◀────│ CSV / Excel │
└──────────┘ └──────────────────┘ └──────────────┘
▲
│
┌─────┴─────┐
│ PostgreSQL │
│ REST APIs │
│ Supabase │
└────────────┘Com o servidor, você pode:
- Armazenar relatórios — CRUD completo de templates JSON e pacotes
.sulfite - Gerar relatórios via API — envie dados, receba PDF/HTML/CSV/Excel
- Geração assíncrona — jobs com polling e Server-Sent Events (SSE)
- Gerenciar conexões — registre bancos de dados e APIs, com criptografia AES-256-GCM
- Controlar acesso — tokens com permissões granulares e refresh rotation
- Assinar relatórios — assinatura digital por role com cadeia de confiança
- Compartilhar relatórios — links públicos com código de acesso, expiração e rate limiting
- Modo consumer — API simplificada e read-only para usuários finais
Instalação
yaml
dependencies:
sulfite_server:
git:
url: https://github.com/rafaelgazani/sulfite.git
path: packages/sulfite_serverQuick Start
dart
import 'package:sulfite_core/sulfite_core_server.dart';
import 'package:sulfite_server/sulfite_server.dart';
void main() async {
final config = ServerConfig.fromEnvironment();
final engine = SulfiteEngineImpl();
final repository = InMemoryReportRepository();
final server = SulfiteServer(
config: config,
repository: repository,
engine: engine,
);
await server.serve();
// Servidor rodando em http://0.0.0.0:8080
}Ou use o binário pronto:
bash
cd packages/sulfite_server
dart run bin/sulfite_server.dartVisão geral da API
| Área | Endpoints | Descrição |
|---|---|---|
| Relatórios | GET/POST/PUT/DELETE /reports | CRUD de templates |
| Geração | POST /generate, /reports/:id/generate | Gerar PDF/HTML/CSV/Excel |
| Jobs | GET /jobs/:id, /jobs/:id/stream | Geração assíncrona com SSE |
| Conexões | GET/POST/PUT/DELETE /connections | Gerenciar bancos e APIs |
| Datasources | POST /datasources/resolve, /introspect | Resolver e introspectar fontes de dados |
| Tokens | POST /tokens, /tokens/refresh | Autenticação e permissões |
| Assinatura | POST /reports/:id/sign, /port | Assinatura digital de relatórios |
| Exportação Verificada | GET /export/policy, POST /export/verify, POST /export/confirm | Download com verificação de identidade via OTP |
| Edição Protegida | GET /edit/policy, POST /edit/verify, POST /edit/confirm | Acesso ao Studio com verificação de identidade via OTP |
| Compartilhamento | POST /share, GET/DELETE /shares, GET /s/:slug | Links públicos com controle de acesso |
| Consumer | GET /consumer/reports | API read-only para usuários finais |
| Health | GET /health, /health/security | Status e diagnóstico |
Próximos passos
- Configuração — variáveis de ambiente e opções do servidor
- Autenticação — sistema de tokens com permissões granulares
- API de Relatórios — CRUD e geração
- Segurança — hardening, SSRF guard, criptografia
- Testes de Carga — suíte k6 com resultados de referência (Mac Air M1)