SDK de TypeScript

typesearch-js, el cliente oficial para TypeScript y JavaScript.

npm install typesearch-js

Funciona en Node 18+, Bun, Deno, Cloudflare Workers y otros entornos edge. Sin dependencias. ESM y CommonJS, con tipos completos.

Crea un cliente

import Typesearch from 'typesearch-js';

const ts = new Typesearch(); // lee TYPESEARCH_API_KEY
OpciónPor defecto
apiKeyTYPESEARCH_API_KEYTu key. new Typesearch('ts_live_…') también funciona.
baseURLhttps://api.typesearch.aiO TYPESEARCH_BASE_URL.
timeout70000Milisegundos antes de cortar un pedido. Una búsqueda deep puede tardar cerca de un minuto.
maxRetries2Reintentos ante errores de conexión, 429 rate_limited y 5xx.
defaultHeadersEncabezados que van en cada pedido.
fetchel fetch globalUna implementación propia, para proxies o pruebas.

Buscar

const res = await ts.search('el dólar', {
  mode: 'normal',
  max_results: 10,
  include_domains: ['infobae.com', 'lanacion.com.ar'],
  published_after: '2026-09-20',
  highlights: true,
});

for (const r of res.results) {
  console.log(r.score.toFixed(2), r.title, r.highlights[0]);
}

Las opciones y los campos de la respuesta se llaman igual que en la API HTTP y están tipados: se exportan SearchOptions, SearchResponse, Result y el resto.

Varias consultas a la vez:

const res = await ts.search(['el dólar', 'el FMI'], { mode: 'fast' });
res.groups?.forEach((g) => console.log(g.query, g.total));

Streaming

for await (const event of ts.searchStream('el dólar', { mode: 'deep' })) {
  switch (event.type) {
    case 'step':
      console.log('·', event.step.text);
      break;
    case 'partial':
      mostrar(event.response.results);
      break;
    case 'result':
      mostrar(event.response.results);
  }
}

// O sólo el resultado final
const final = await ts.searchStream('el dólar').finalResponse();

Un evento error se lanza como APIError desde el bucle.

Similares y contenidos

const similares = await ts.similar('https://www.lanacion.com.ar/economia/…', { exclude_domains: ['lanacion.com.ar'] });

const paginas = await ts.contents(['https://www.infobae.com/economia/…'], { query: 'el dólar' });

Búsqueda en un sitio en vivo

// Crea el trabajo y espera el resultado
const res = await ts.siteSearchAndWait('lanacion.com.ar', 'el dólar', { mode: 'normal' });

// O maneja el trabajo tú
const job = await ts.siteSearch('lanacion.com.ar', 'el dólar');
const listo = await ts.jobs.wait(job.id, { pollInterval: 2000, waitTimeout: 120_000 });

// O recíbelo como flujo
for await (const event of ts.siteSearchStream('lanacion.com.ar', 'el dólar')) {
  // …
}

jobs.wait() lanza JobFailedError si el trabajo falla.

Fuentes y uso

const { sources } = await ts.sources();
const usage = await ts.usage();

Errores

Todos los errores extienden TypesearchError. Los de la API son subclases de APIError con status, code, requestId y, en pedidos inválidos, errors por campo.

ClaseCuándo
BadRequestError400
AuthenticationError401
BudgetError402: max_tokens demasiado bajo
PermissionDeniedError403
NotFoundError404
RateLimitError429, con retryAfter
InternalServerError5xx
APIConnectionError · APITimeoutErrorSin respuesta, o demasiado lenta
JobFailedErrorFalló un trabajo de búsqueda en sitio
import { BadRequestError, RateLimitError, APIError } from 'typesearch-js';

try {
  await ts.search('x');
} catch (e) {
  if (e instanceof BadRequestError) console.log(e.code, e.errors);
  else if (e instanceof RateLimitError) console.log(e.code, e.retryAfter);
  else if (e instanceof APIError) console.log(e.status, e.code, e.requestId);
  else throw e;
}

Reintentos, tiempos y cancelación

Los errores de conexión, 429 rate_limited y 5xx se reintentan con espera exponencial y aleatoria, respetando Retry-After; quota_exceeded nunca. Cada método acepta un último argumento para cambiar la configuración del cliente en ese pedido:

const controller = new AbortController();

const res = await ts.search('el dólar', { mode: 'deep' }, {
  timeout: 90_000,
  maxRetries: 0,
  signal: controller.signal,
  headers: { 'X-Trace-Id': 'abc' },
});

Cancelar la señal también detiene la lectura de un flujo.

En esta página