Documentação
ReferênciaSDK JavaScriptTratamento de erros

Tratamento de erros

Resultados por padrão, exceções se você preferir.

NulvlessResult

Todo método devolve Promise<NulvlessResult<T>>:

type NulvlessResult<T> =
  | { data: T; error: null }
  | { data: null; error: NulvlessError };

Verifique o error primeiro. Se ele for null, o data está garantidamente lá — a união deixa isso verdadeiro também para o type checker, então nada depois da checagem precisa de asserção de não-nulo.

const { data, error } = await nulvless.auth.signIn({ email, password });

if (error) {
  console.error(error.code, error.message, error.status_code);
  return;
}

console.log(data.access_token);

NulvlessError

codeErrorCodeOptional

Legível por máquina, por exemplo 'unauthorized', 'invalid_credentials'. Veja Códigos de erro.

messagestring | string[]Optional

Legível por pessoas. Vem como array quando a plataforma reporta vários problemas de validação de uma vez.

status_codenumberOptional

O status HTTP por trás da falha.

O fato de message poder ser um array vale ser tratado uma vez, de forma centralizada:

const text = Array.isArray(error.message) ? error.message.join(', ') : error.message;

Códigos de erro

code é tipado como ErrorCode, então o editor completa todos os códigos que o SDK pode devolver. É uma união de um tipo por origem, mais qualquer outra string, então um código que a plataforma acrescentar depois continua compilando:

TipoCódigos vindos de
SdkErrorCodeO próprio SDK, sem requisição
GatewayErrorCodeO gateway na frente de todo projeto
AuthErrorCodeAutenticação
CommsErrorCodeE-mail e SMS
import type { AuthErrorCode } from '@nulvless/nulvless-js';

const messages: Partial<Record<AuthErrorCode, string>> = {
  invalid_credentials: 'E-mail ou senha incorretos.',
  registration_closed: 'O cadastro está fechado.',
};

if (error) {
  showMessage(messages[error.code as AuthErrorCode] ?? error.message);
}

EdgeFunctionErrorCode lista os códigos com que uma invocação de edge function responde. Funções são chamadas com fetch, não pelo SDK, por isso ele não faz parte de ErrorCode. Cada código está descrito em Códigos de exceção.

Exceções, se preferir

Ative o throwErrors se o código ao redor for construído em torno de try/catch:

import { NulvlessException } from '@nulvless/nulvless-js';

const nulvless = createClient(url, key, { throwErrors: true });

try {
  const { data } = await nulvless.auth.signIn(params);
} catch (err) {
  if (err instanceof NulvlessException) {
    console.error(err.code, err.status_code);
  }
}

O NulvlessException carrega o mesmo code e status_code do objeto de erro, e a message dele já vem achatada em uma string.

Também dá para inverter isso numa chamada específica:

await nulvless.auth.signIn(params, { throwErrors: true });

Erros sem requisição

Algumas falhas são decididas localmente, antes de qualquer coisa ser enviada. Pedir a sessão quando não há nenhuma guardada é a mais comum:

{ code: 'no_session', message: 'No active session.', status_code: 401 }

Ele tem o mesmo formato de qualquer outro erro, então a mesma ramificação trata. Os outros decididos localmente são network_error, request_timeout, invalid_path (um id passado como . ou .., recusado antes de chegar a outro endpoint) e unknown_error — veja Códigos de exceção.

Nesta página