@crava/cli
Roda no seu repo. Escaneia schemas, forms e rotas. Mapeia PII. Gera lgpd.config.ts. Abre PR.
Uso rápido
npx @crava/cli initÉ só isso. O CLI:
- Detecta stack (Next.js / Express / Hono / Fastify / NestJS) lendo
package.json - Detecta ORM (Drizzle / Prisma / TypeORM / Kysely)
- Pergunta sua API key (gera uma no painel) e o project ID
- Escaneia
db/,prisma/,schemas/, forms JSX, rotas API - Mostra coletas detectadas e pede confirmação interativa
- Gera
lgpd.config.ts+ rota/api/lgpd/dsar+ middleware de consent - Abre PR no GitHub (Studio+) ou printa instruções de aplicar manual (Free/Indie)
Comandos
init
Setup inicial. Roda 1x por repo.
npx @crava/cli init --project crava-xyz123 --applyscan
Re-escaneia. Útil em CI ou periodicamente.
npx @crava/cli scan --output diff.jsonconfig validate
Valida o lgpd.config.ts contra o que está no schema atual.
npx @crava/cli config validateencrypt
Sugere migration pra criptografar campos sensíveis detectados.
npx @crava/cli encrypt --applyFlags globais
--yes· não-interativo (CI mode)--apply· aplica mudanças em vez de só sugerir--no-github· não tenta abrir PR; gera arquivos localmente--config <path>· path custom pro lgpd.config.ts (default:./lgpd.config.ts)
lgpd.config.ts
import { defineConfig } from '@crava/cli';
export default defineConfig({
projectId: 'crava-xyz123',
collections: [
{
field: 'users.email',
category: 'contact',
basis: 'contract', // art. 7º V
purpose: 'Autenticação e comunicação transacional',
retention: 'until-cancel',
},
{
field: 'users.cpf',
category: 'document',
basis: 'legal_obligation', // art. 7º II
purpose: 'Emissão de NF',
retention: '1825d', // 5 anos
encrypted: true,
},
],
subprocessors: [
{ name: 'Stripe', country: 'US', role: 'payment' },
{ name: 'Resend', country: 'US', role: 'email' },
],
});Status
Em construção. Cadastra na waitlist que aviso quando publicar no npm.