Skip to main content

Guía marco

La tecla API en el navegador

MarkpdfProvider inicializa un MarkpdfClient en el cliente, por lo que la clave API que le pasa termina en el paquete JS que se descarga en el navegador. Cualquiera puede abrir las herramientas de desarrollo, ir a la pestaña Red o inspeccionar el paquete y copiarlo. Esto es aceptable cuando:
  • Estás creando un prototipo o construyendo una herramienta interna con acceso controlado.
  • Ya tienes una clave de privilegios bajos, con límites de uso ajustados, dedicada únicamente a esa interfaz.
  • El “costo” de que alguien use su clave para convertir archivos PDF no es una preocupación real (por ejemplo, herramienta de usuario único, demostración, entorno de prueba).
No es aceptable que una aplicación de producción pública tenga una clave que también proteja la facturación o los límites compartidos.
No hay forma de “ocultar” la clave en un componente del cliente solo con ofuscación: el navegador necesita el valor real en texto sin formato para enviarlo en el encabezado x-api-key. La única mitigación real es no exponerlo: mueva la llamada a API al servidor.

Patrón recomendado para producción: proxy en tu propio backend

Si su aplicación tiene un backend (Next.js, Express, cualquier marco con rutas del lado del servidor), no inicialice MarkpdfClient/MarkpdfProvider en el cliente. En cambio:
  1. Cargue el archivo en su propio punto final (/api/convert o similar).
  2. Su servidor llama a markpdf con la clave guardada como una variable de entorno del lado del servidor.
  3. Su servidor devuelve el Markdown al cliente.
Si su aplicación está en Next.js, @markpdf/nextjs ya implementa este patrón; consulte Instalación de Next.js y Guía del marco de trabajo de Next.js (Controladores de rutas y acciones del servidor). El componente de React que carga el archivo aún puede parecerse al de useConvertFile, pero apuntando a su propia ruta:
Con otros marcos (Express, Fastify, etc.), se aplica el mismo principio: implemente su propio punto final con @markpdf/sdk en el servidor y consuma ese punto final desde React con fetch normal en lugar de @markpdf/react.

Cuándo usar @markpdf/react directo

  • Aplicaciones sin su propio backend (SPA estáticas servidas desde CDN) donde de todos modos no tienes dónde ocultar las claves.
  • Herramientas internas detrás de VPN/SSO donde el público que puede ver la clave ya está autorizado a usarla.
  • Prototipos y demostraciones.

Representación del lado del servidor (SSR) / Componentes del servidor

MarkpdfProvider usa useMemo, useContext y crea el cliente en el momento del renderizado; es un componente del cliente. Compruébalo explícitamente si tu marco lo requiere:
providers.tsx
Si necesita marcar la clave como NEXT_PUBLIC_* (o el prefijo público equivalente de su marco) para que MarkpdfProvider la reciba, ya ha asumido el compromiso de exponerla al navegador. Revisa el apartado anterior antes de hacerlo en producción.