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
codeErrorCodeOptionalLegível por máquina, por exemplo 'unauthorized', 'invalid_credentials'. Veja Códigos de erro.
messagestring | string[]OptionalLegível por pessoas. Vem como array quando a plataforma reporta vários problemas de validação de uma vez.
status_codenumberOptionalO 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:
| Tipo | Códigos vindos de |
|---|---|
SdkErrorCode | O próprio SDK, sem requisição |
GatewayErrorCode | O gateway na frente de todo projeto |
AuthErrorCode | Autenticação |
CommsErrorCode | E-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.