Core SDKTratamento de Erros

Tratamento de Erros

Trate erros graciosamente em sua aplicação.

MeapleError

Todos os erros da API são encapsulados em MeapleError:

import { MeapleError } from '@meaple/core';
 
try {
  await sdk.events.get('invalid-id');
} catch (error) {
  if (error instanceof MeapleError) {
    console.error('Status:', error.statusCode);
    console.error('Mensagem:', error.message);
    console.error('Resposta:', error.response);
  }
}

Propriedades do Erro

interface MeapleError extends Error {
  statusCode: number;
  message: string;
  response?: any;
  originalError?: Error;
}

Códigos de Erro Comuns

Código de StatusDescrição
400Requisição Inválida - Parâmetros inválidos
401Não Autorizado - Autenticação necessária
403Proibido - Permissões insuficientes
404Não Encontrado - Recurso não existe
429Muitas Requisições - Limite de taxa excedido
500Erro Interno do Servidor

Padrões de Tratamento de Erros

Try-Catch

async function fetchEvent(id: string) {
  try {
    const event = await sdk.events.get(id);
    return event;
  } catch (error) {
    if (error instanceof MeapleError) {
      if (error.statusCode === 404) {
        return null;
      }
      throw error;
    }
    throw error;
  }
}

Com React Query

import { useEvents } from '@meaple/react-query'
 
function EventsList() {
  const { data, error, isError } = useEvents()
 
  if (isError) {
    return <div>Erro: {error.message}</div>
  }
 
  return <div>{/* renderizar eventos */}</div>
}

Manipulador de Erro Personalizado

function handleMeapleError(error: unknown) {
  if (error instanceof MeapleError) {
    switch (error.statusCode) {
      case 401:
        redirectToLogin();
        break;
      case 404:
        showNotFoundMessage();
        break;
      case 429:
        showRateLimitMessage();
        break;
      default:
        showGenericError(error.message);
    }
  }
}

Lógica de Retry

O SDK inclui lógica automática de retry para falhas transitórias:

const sdk = new MeapleSDK({
  baseURL: 'https://api.meaple.com',
  timeout: 30000,
  retries: 3,
  retryDelay: 1000,
});

Logging de Erros

Use um logger personalizado:

import { Logger } from '@meaple/core';
 
class CustomLogger implements Logger {
  error(message: string, error?: any) {
    console.error(`[Meaple SDK] ${message}`, error);
  }
 
  warn(message: string) {
    console.warn(`[Meaple SDK] ${message}`);
  }
 
  info(message: string) {
    console.info(`[Meaple SDK] ${message}`);
  }
}
 
const sdk = new MeapleSDK({
  baseURL: 'https://api.meaple.com',
  logger: new CustomLogger(),
});