> ## Documentation Index
> Fetch the complete documentation index at: https://docs.markpdf.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Manejo de errores

> @markpdf/react-native excepciones escritas y patrones de reintento en dispositivos móviles.

# Manejo de errores

El cliente traduce cada código de error HTTP en una subclase de `MarkpdfError`:

```ts theme={null}
import { MarkpdfError } from "@markpdf/react-native";

try {
  const markdown = await client.convertLocalFile({ uri, name });
} catch (err) {
  if (err instanceof MarkpdfError) {
    console.error(`Failed (${err.statusCode}): ${err.message}`);
  } else {
    throw err;
  }
}
```

## Tabla de errores

| Estado HTTP | Clase                      | causa                                          |
| ----------: | -------------------------- | ---------------------------------------------- |
|       `400` | `BadRequestError`          | Cuerpo inválido o URL malformado.              |
|       `401` | `AuthenticationError`      | Falta la clave API o no es válida.             |
|       `403` | `ForbiddenError`           | Clave sin permiso o host no autorizado de URL. |
|       `413` | `PayloadTooLargeError`     | Documento, páginas o ZIP fuera de límites.     |
|       `415` | `UnsupportedFormatError`   | Formato o `content-encoding` no admitido.      |
|       `422` | `UnprocessableEntityError` | Faltan parámetros requeridos.                  |
|       `429` | `RateLimitError`           | Demasiadas peticiones.                         |
|       `500` | `ConversionError`          | Error de conversión en el servidor.            |
| — (trabajo) | `JobFailedError`           | El trabajo en cola (`202`) falló.              |

Todos los exponentes:

```ts theme={null}
class MarkpdfError extends Error {
  statusCode?: number;
  detail?: unknown;
}
```

## Capturar errores específicos

```ts theme={null}
import {
  AuthenticationError,
  PayloadTooLargeError,
  RateLimitError,
  UnprocessableEntityError,
  ConversionError,
} from "@markpdf/react-native";

try {
  const markdown = await client.convertLocalFile({ uri, name }, { mode: "fast" });
} catch (err) {
  if (err instanceof AuthenticationError) {
    Alert.alert("API key invávalida");
  } else if (err instanceof PayloadTooLargeError) {
    Alert.alert("Document too large. Try pages= to split it.");
  } else if (err instanceof RateLimitError) {
    Alert.alert("Demasiadas peticiones. Intenta de nuevo en unos segundos.");
  } else if (err instanceof UnprocessableEntityError) {
    Alert.alert("Parámetros invávavalids.");
  } else if (err instanceof ConversionError) {
    Alert.alert("Conversion error. Try mode: 'balanced'.");
  } else {
    throw err;
  }
}
```

## Reintentos

`@markpdf/react-native` **no** implementa reintentos automáticos; a diferencia de SDK de Node.js, no hay `maxRetries` en el constructor. Implemente su propio retroceso si lo necesita, especialmente relevante en dispositivos móviles donde la red es intermitente:

```ts theme={null}
async function convertWithRetry(file: LocalFile, attempts = 3): Promise<ConvertResult> {
  for (let i = 0; i < attempts; i++) {
    try {
      return await client.convertLocalFile(file, { mode: "fast" });
    } catch (err) {
      const retryable = err instanceof RateLimitError || err instanceof ConversionError || !(err instanceof MarkpdfError);
      if (!retryable || i === attempts - 1) throw err;
      await new Promise((r) => setTimeout(r, 2 ** i * 1000));
    }
  }
  throw new Error("unreachable");
}
```

<Tip>
  Los errores sin `MarkpdfError` (caída de la red, `AbortError`) también son candidatos para reintentar: son comunes en dispositivos móviles cuando se cambia de WiFi a datos móviles en mitad de la carga.
</Tip>

## Trabajo falvaválido

```ts theme={null}
import { JobFailedError } from "@markpdf/react-native";

try {
  const markdown = await client.convertLocalFile({ uri, name: "informe-grande.pdf" });
} catch (err) {
  if (err instanceof JobFailedError) {
    console.error(`Job falló: ${err.message}`);
  } else {
    throw err;
  }
}
```
