Logosulfite.app
rafagazani/sulfite 999999

Sulfite Server

Servidor de relatórios REST API — gere PDF, HTML, CSV e Excel via HTTP

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#

dependencies:
  sulfite_server:
    git:
      url: https://github.com/rafaelgazani/sulfite.git
      path: packages/sulfite_server

Quick Start#

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:

cd packages/sulfite_server
dart run bin/sulfite_server.dart

Visão geral da API#

ÁreaEndpointsDescriçã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
Hub externo JWT RS256/JWKS + registry remoto Usar auth e conexões de um hub externo multi-tenant
Autorização por tenant sulfite_authorized_users Restringir permissões por usuário no banco do tenant
Datasources POST /datasources/resolve, /introspect Resolver e introspectar fontes de dados
Tokens POST /tokens, /tokens/refresh Autenticação e permissões
Grupos de relatórios GET/POST/PUT/DELETE /groups Coleções tenant/global e permissões C3 por grupo
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#