Node.js SDK (polylingo)

Официальный клиент на TypeScript для REST API PolyLingo. Использует runtime fetch (Node.js 18+), поставляется как ESM и CJS, и не имеет зависимостей во время выполнения кроме Node.

Для подробностей по HTTP смотрите Справочник по API.


Установка

npm install polylingo

Node.js: >= 18


Конструктор

import PolyLingo from 'polylingo'

const client = new PolyLingo({
  apiKey: process.env.POLYLINGO_API_KEY!, // обязательно
  baseURL: 'https://api.usepolylingo.com/v1', // опционально; это значение по умолчанию
  timeout: 120_000, // опционально; таймаут запроса в миллисекундах (по умолчанию 120_000)
})
ОпцияТипОбязательноОписание
apiKeystringДаКлюч API (Authorization: Bearer …).
baseURLstringНетПрефикс API включая /v1. По умолчанию https://api.usepolylingo.com/v1.
timeoutnumberНетТаймаут на запрос в мс. По умолчанию 120_000.

Методы

client.health()

GET /health — на сервере не требует авторизации; клиент всё равно отправляет заголовок Authorization, если он настроен.

Возвращает { status, timestamp }.

const h = await client.health()

client.languages()

GET /languages — список поддерживаемых языков.

const { languages } = await client.languages()

client.translate(params)

POST /translate

const r = await client.translate({
  content: '# Hello',
  targets: ['es', 'fr'],
  format: 'markdown', // опционально — если не указано, API определит автоматически
  source: 'en',       // опциональная подсказка
  model: 'standard',  // опционально: 'standard' | 'advanced'
})

r.translations.es // строка
r.usage.total_tokens
r.usage.input_tokens
r.usage.output_tokens

client.batch(params)

POST /translate/batch

const b = await client.batch({
  items: [
    { id: 'a', content: 'Hello' },
    { id: 'b', content: '## Title', format: 'markdown' },
  ],
  targets: ['de'],
  source: 'en',    // опционально
  model: 'standard', // опционально
})

b.results[0].translations.de
b.usage.total_tokens

client.usage()

GET /usage — использование плана для аутентифицированного ключа.

const u = await client.usage()

Jobs — client.jobs

client.jobs.create(params)

POST /jobs — поставить асинхронную задачу в очередь. Возвращает JSON с кодом 202 (job_id, status, created_at, …).

const job = await client.jobs.create({
  content: longMarkdown,
  targets: ['de', 'fr'],
  format: 'markdown',
})
console.log(job.job_id)

client.jobs.get(jobId)

GET /jobs/:id — опрос статуса. Когда status === 'completed', API возвращает translations и usage на верхнем уровне JSON-объекта (не вложены в result).

const status = await client.jobs.get(job.job_id)

client.jobs.translate(params) — удобство

Отправляет задачу, затем опрашивает до completed или failed, либо пока не исчерпается лимит опроса.

const done = await client.jobs.translate({
  content: longMarkdown,
  targets: ['de', 'fr', 'es'],
  format: 'markdown',
  pollInterval: 10_000, // мс между опросами; по умолчанию 5_000
  timeout: 600_000,     // **общий** лимит времени в мс для опроса; по умолчанию 20 минут
  onProgress: (pos) => console.log(`Позиция в очереди: ${pos}`), // опционально; вызывается во время ожидания/обработки
})

done.translations.de
done.usage.total_tokens

Жизненный цикл задачи в API использует статусы pending, processing, completed и failed.


Обработка ошибок

Все ошибки SDK (кроме багов) наследуются от PolyLingoError:

КлассКогда
PolyLingoErrorБазовый — содержит status, error (код API), message.
AuthErrorHTTP 401.
RateLimitErrorHTTP 429 — опционально retryAfter (секунды) из JSON retry_after или заголовка Retry-After.
JobFailedErrorПомощник опроса: статус задачи status === 'failed', или отсутствует результат при completed, или таймаут опроса. Имеет jobId.
import PolyLingo, {
  PolyLingoError,
  AuthError,
  RateLimitError,
  JobFailedError,
} from 'polylingo'

try {
  await client.translate({ content: 'Hi', targets: ['es'] })
} catch (e) {
  if (e instanceof AuthError) { /* неверный ключ */ }
  else if (e instanceof RateLimitError) { /* e.retryAfter */ }
  else if (e instanceof JobFailedError) { /* e.jobId */ }
  else if (e instanceof PolyLingoError) { /* e.status, e.error */ }
}

Паттерн асинхронных задач (кратко)

  1. Fire-and-forget polling: jobs.create → ваш воркер вызывает jobs.get с интервалом до completed или failed.
  2. Встроенный polling: jobs.translate — те же семантика, с pollInterval, timeout и onProgress.

Большие нагрузки и длительные переводы лучше выполнять через jobs, чтобы избежать таймаутов HTTP.


TypeScript

Пакет экспортирует типы для опций, результатов и ошибок. Импортируйте именованные типы из polylingo по необходимости (см. опубликованный dist/index.d.ts).


Изменения

0.1.0

  • Первоначальный релиз: health, languages, translate, batch, usage, jobs.create, jobs.get, jobs.translate.
<!-- i18n workflow trigger bump -->
Node.js SDK | Документация PolyLingo | PolyLingo