Files
cybercore-signer/sdk/examples/04-error-handling.js
T

83 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Exemplo 04: Tratamento Estruturado e Acionável de Erros
*
* Demonstra como capturar cada erro específico do CCSP/1 e orientar
* o usuário final com mensagens claras e passos práticos de resolução.
*/
import {
CyberCoreSigner,
AgentNotRunningError,
ApplicationNotAuthorizedError,
UserCancelledError,
CertificateNotFoundError,
CertificateExpiredError,
CertificateInvalidError,
PrivateKeyNotAvailableError,
PinRequiredError,
PinIncorrectError,
TokenNotFoundError,
RequestExpiredError,
TimeoutError,
CyberCoreError
} from '@cybercore/signer-sdk';
async function performSigningOperation(signer, certId, fileDigest) {
try {
return await signer.sign({
certificateId: certId,
digest: fileDigest,
documentName: 'termo_responsabilidade.pdf'
});
} catch (err) {
if (err instanceof AgentNotRunningError) {
// O agente local está fechado ou bloqueado
console.warn('⚠️ AGENTE NÃO DETECTADO:');
console.warn(err.actionableGuidance);
// Sugestão de UI: exibir banner com botão "Baixar CyberCore Signer"
} else if (err instanceof ApplicationNotAuthorizedError) {
// O usuário clicou em "Rejeitar" no prompt de autorização da aplicação
console.warn('⚠️ APLICAÇÃO NÃO AUTORIZADA:');
console.warn('O usuário não autorizou este portal no diálogo de segurança do CyberCore Signer.');
} else if (err instanceof UserCancelledError) {
// O usuário cancelou a assinatura explicitamente na janela nativa
console.info('ℹ️ Assinatura cancelada pelo usuário.');
} else if (err instanceof CertificateExpiredError) {
console.error('❌ CERTIFICADO EXPIRADO: O certificado digital selecionado expirou.');
} else if (err instanceof CertificateInvalidError) {
console.error('❌ CERTIFICADO INVÁLIDO: O certificado possui estrutura corrompida ou foi revogado.');
} else if (err instanceof PrivateKeyNotAvailableError) {
console.error('❌ CHAVE PRIVADA INDISPONÍVEL: A chave privada deste certificado não está acessível no computador.');
} else if (err instanceof PinIncorrectError) {
console.error('❌ PIN INCORRETO: O PIN digitado para o token A3 está errado. Cuidado com o bloqueio do dispositivo.');
} else if (err instanceof PinRequiredError) {
console.error('❌ PIN OBRIGATÓRIO: É necessário fornecer o PIN do dispositivo criptográfico.');
} else if (err instanceof TokenNotFoundError) {
console.error('❌ TOKEN NÃO ENCONTRADO: O token USB ou smart card foi removido da porta USB.');
} else if (err instanceof RequestExpiredError) {
console.warn('⚠️ REQUISIÇÃO EXPIRADA: O tempo limite para confirmação do usuário esgotou.');
} else if (err instanceof TimeoutError) {
console.error('⏱️ TIMEOUT: O agente demorou mais tempo que o esperado para responder.');
} else if (err instanceof CyberCoreError) {
console.error(`⚠️ ERRO DO PROTOCOLO CCSP (${err.code}):`, err.message);
} else {
console.error('Erro desconhecido:', err);
}
throw err;
}
}
async function main() {
const signer = new CyberCoreSigner({ timeoutMs: 15000 });
const fakeDigest = Buffer.alloc(32, 9).toString('base64');
console.log('Testando tratamento de erros com certificado simulado expirado...');
try {
await performSigningOperation(signer, 'cert-expirado', fakeDigest);
} catch {
console.log('Tratamento de exceções concluído com sucesso.');
}
}
main().catch(() => {});