Skip to content

Receitas

Emitir um crachá de colaborador

import { generateDidKey, issueCredential, verifyCredentialJwt } from 'simple-vc';

const empresa = generateDidKey();
const colaborador = generateDidKey();

const cracha = await issueCredential({
  issuer: empresa,
  subject: colaborador.did,
  type: ['EmployeeBadge'],
  claims: { name: 'Ana Silva', role: 'Engineer', department: 'Platform' },
  expiresIn: 60 * 60 * 24 * 365,
});

const check = await verifyCredentialJwt(cracha);
console.log(check.verifiableCredential.credentialSubject.role); // "Engineer"

Persistir e recarregar a identidade do emissor

import { writeFileSync, readFileSync } from 'node:fs';
import { generateDidKey } from 'simple-vc';

// uma vez: cria e guarda a seed de 32 bytes de forma segura (KMS/segredo na vida real)
const emissor = generateDidKey();
writeFileSync('issuer.key', Buffer.from(emissor.privateKey));

// mais tarde: sempre o mesmo DID
const seed = new Uint8Array(readFileSync('issuer.key'));
const mesmoEmissor = generateDidKey(seed);

Verificar com falha graciosa

import { verifyCredentialJwt } from 'simple-vc';

async function verificarSeguro(jwt: string) {
  try {
    const { verifiableCredential, issuer } = await verifyCredentialJwt(jwt);
    return { valid: true, issuer, claims: verifiableCredential.credentialSubject };
  } catch (err) {
    return { valid: false, reason: (err as Error).message };
  }
}

Partilhar uma credencial como URL / QR

import QRCode from 'qrcode';
const url = `https://verify.example.com/#${cracha}`; // o JWT é o fragmento
await QRCode.toFile('cracha.png', url);

Confiar apenas em emissores conhecidos

const confiaveis = new Set([empresa.did]);
const { issuer } = await verifyCredentialJwt(cracha);
if (!confiaveis.has(issuer)) throw new Error('Emissor não confiável');