Skip to content

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_server

Quick 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.dart

Visão geral da API

ÁreaEndpointsDescrição
RelatóriosGET/POST/PUT/DELETE /reportsCRUD de templates
GeraçãoPOST /generate, /reports/:id/generateGerar PDF/HTML/CSV/Excel
JobsGET /jobs/:id, /jobs/:id/streamGeração assíncrona com SSE
ConexõesGET/POST/PUT/DELETE /connectionsGerenciar bancos e APIs
DatasourcesPOST /datasources/resolve, /introspectResolver e introspectar fontes de dados
TokensPOST /tokens, /tokens/refreshAutenticação e permissões
AssinaturaPOST /reports/:id/sign, /portAssinatura digital de relatórios
Exportação VerificadaGET /export/policy, POST /export/verify, POST /export/confirmDownload com verificação de identidade via OTP
Edição ProtegidaGET /edit/policy, POST /edit/verify, POST /edit/confirmAcesso ao Studio com verificação de identidade via OTP
CompartilhamentoPOST /share, GET/DELETE /shares, GET /s/:slugLinks públicos com controle de acesso
ConsumerGET /consumer/reportsAPI read-only para usuários finais
HealthGET /health, /health/securityStatus e diagnóstico

Próximos passos

Sulfite do 🇧🇷 para o mundo © 2026 Rafael S. Pinheiro