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);
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');