Referencia
Ver como MarkdownErrores y códigos
Todos los códigos que el SDK produce, qué significan y qué hacer con cada uno.
Todo error del SDK es un AndcoError con un code estable. Ramifica por code, nunca por message: el mensaje está escrito para que lo lea una persona y puede cambiar.
class AndcoError extends Error {
readonly code: string;
readonly status: number | undefined;
readonly details: Readonly<Record<string, unknown>> | undefined;
}Códigos del SDK
Cada código enlaza a su definición en andco-sdk-js.
| Código | Qué pasó | Qué hacer |
|---|---|---|
browser_required |
se pidió algo que solo existe en un navegador | usa el constructor del entorno correcto |
browser_unavailable |
no hay window ni document |
lo mismo |
browser_forbidden |
se intentó crear una instancia de servidor en un navegador | mueve el secreto fuera del bundle |
invalid_callback |
el callback no corresponde a la transacción: origen, state o antigüedad |
vuelve a iniciar la autorización |
invalid_configuration |
falta un valor o es inválido | corrige la configuración; es un fallo de arranque |
handshake_timeout |
la superficie hospedada no respondió | comprueba el origen del widget y la red |
invalid_iframe |
el elemento entregado al controlador no sirve | pasa un HTMLIFrameElement montado |
invalid_intent_id |
el identificador de Intent está mal formado | revisa de dónde salió |
invalid_response |
la respuesta del servidor no tenía lo necesario | reintenta; si persiste, es del lado del servidor |
popup_blocked |
el navegador impidió abrir la ventana | vuelve a intentar dentro de un gesto, o usa redirección |
popup_timeout |
la ventana quedó abierta sin resolverse | ofrece reintentar. No es una cancelación |
presentation_unsupported |
el entorno no puede presentar así | usa presentation: "redirect" |
same_origin_endpoint |
el iframe hospedado apunta a tu propio origen | corrige endpointWidget |
session_missing |
la operación necesitaba sesión y no había | autentica primero |
storage_failed |
el almacenamiento no pudo leer o escribir | revisa permisos o modo privado |
untrusted_origin |
un mensaje vino de un origen que la instancia no permite | revisa allowedPopupOrigins |
Códigos del protocolo
La superficie hospedada usa su propio vocabulario, que llega en el evento de error del botón. Son mayúsculas y forman un conjunto aparte: HANDSHAKE_TIMEOUT, POPUP_BLOCKED, POPUP_NAVIGATION_FAILED, POPUP_TIMEOUT, UNTRUSTED_ORIGIN, INVALID_CLIENT_ID, INVALID_REDIRECT_TO, INVALID_SCOPE, UNSUPPORTED_PRESENTATION, entre otros.
Códigos del servidor de autorización
Cuando el fallo viene del servidor de autorización, el code es el de OAuth 2.1 tal cual: access_denied, invalid_scope, invalid_grant, server_error, temporarily_unavailable. Se pasan sin traducir para que puedas buscarlos en el RFC.
access_denied es el único que lleva una decisión de la persona, y por eso llega como cancelación y no como error.
Cancelar no es fallar
const { data: session, error } = await andco.auth.signIn();
if (error) return showError(error);
if (!session) return; // closed the windowEl SDK cuida esta distinción de su lado: un tiempo de espera agotado, una navegación fallida o un error del servidor llegan como errores, nunca como cancelación. Reportar una cancelación que nadie hizo es inventar una decisión.
status y details
status es el código HTTP cuando el error vino de una respuesta. details trae lo que Andco explicó del fallo:
if (error.status === 403) {
const missing = error.details?.["required_scope"];
if (missing) await andco.auth.signIn({ scopes: [...session.scopes, String(missing)] });
}