Digito

TypeScript

Consulta sobres desde un servidor con fetch y tipos locales.

Este ejemplo utiliza fetch en un servidor y un tipo local para los campos que consume. Configura la clave de API en el entorno del servidor antes de ejecutar la consulta.

type EnvelopeSummary = {
  id: string;
  title: string;
  status: 'DRAFT' | 'PENDING' | 'COMPLETED' | 'REJECTED' | 'CANCELLED';
};

type EnvelopePage = {
  data: EnvelopeSummary[];
  count: number;
  currentPage: number;
  perPage: number;
  totalPages: number;
};

async function listEnvelopes(page = 1): Promise<EnvelopePage> {
  const token = process.env.DIGITO_API_TOKEN;
  if (!token) throw new Error('Falta DIGITO_API_TOKEN');

  const url = new URL('https://business.digito.do/api/v2/envelope');
  url.searchParams.set('type', 'DOCUMENT');
  url.searchParams.set('page', String(page));
  url.searchParams.set('perPage', '20');

  const response = await fetch(url, {
    headers: { Authorization: token },
    signal: AbortSignal.timeout(15000),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}`);

  return (await response.json()) as EnvelopePage;
}

const result = await listEnvelopes();

console.log(result.data.map(({ id, title, status }) => ({
  id,
  title,
  status
})));

El tipo local describe únicamente los campos usados por el ejemplo. La anotación TypeScript no valida la respuesta en ejecución; aplica la validación que necesite tu aplicación para datos externos.

Mantén la variable fuera de cualquier código enviado al navegador. Si tu frontend necesita una lista de documentos, autentica al usuario en tu servidor y devuelve sólo los datos que pueda consultar.

Para crear un sobre, utiliza FormData y deja que fetch genere el encabezado multipart. No mezcles objetos de una librería de formularios con fetch sin comprobar su compatibilidad.

Ejemplo de creación con TypeScript.

Multipart con fetch

FormData forma parte del runtime. Para añadir un PDF leído desde disco, crea un Blob a partir de sus bytes y envía el formulario directamente como body; no asignes manualmente el encabezado multipart.

import { readFile } from 'node:fs/promises';

const token = process.env.DIGITO_API_TOKEN;
if (!token) throw new Error('Falta DIGITO_API_TOKEN');

const bytes = await readFile('./contrato.pdf');

const form = new FormData();
form.append(
  'payload',
  JSON.stringify({
    type: 'DOCUMENT',
    title: 'Contrato de prueba'
  })
);
form.append(
  'files',
  new Blob([new Uint8Array(bytes)], { type: 'application/pdf' }),
  'contrato.pdf'
);

const response = await fetch(
  'https://business.digito.do/api/v2/envelope/create',
  {
    method: 'POST',
    headers: { Authorization: token },
    body: form,
  }
);
if (!response.ok) throw new Error(`HTTP ${response.status}`);

const created = (await response.json()) as { id: string };

console.log(created.id);

Este ejemplo crea un borrador sin destinatarios. Preparar un documento añade una persona y un campo. Manejo de errores y lecturas con reintentos muestran helpers que puedes adaptar a tu aplicación.

En esta página