Node.js SDK (polylingo)

PolyLingo REST API の公式 TypeScript ファーストクライアントです。ランタイムに fetch (Node.js 18+) を使用し、ESM と CJS として提供され、Node 以外の ランタイム依存関係はありません

生の HTTP 詳細については API reference を参照してください。


インストール

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いいえ/v1 を含む API プレフィックス。デフォルトは https://api.usepolylingo.com/v1
timeoutnumberいいえリクエストごとのタイムアウト(ms)。デフォルトは 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()

ジョブ — client.jobs

client.jobs.create(params)

POST /jobs — 非同期作業をキューに追加。202 の JSON ボディ(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 は JSON オブジェクトの トップレベルtranslationsusage を返します(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(`Queue position: ${pos}`), // 任意; キュー/処理中に呼ばれる
})

done.translations.de
done.usage.total_tokens

API のジョブライフサイクルは pending, processing, completed, failed のステータスを使用します。


エラーハンドリング

SDK のすべての失敗(バグを除く)は PolyLingoError を継承しています:

クラスいつ
PolyLingoError基底 — status, error(APIコード文字列), message を持つ
AuthErrorHTTP 401
RateLimitErrorHTTP 429 — JSON の retry_after または Retry-After ヘッダーからのオプションの retryAfter(秒)付き
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. ファイアアンドフォーゲットポーリング: jobs.create → ワーカーが間隔をあけて jobs.get を呼び、completed または failed になるまで繰り返す。
  2. 組み込みポーリング: jobs.translate — 同じ意味論で、pollInterval, timeout, onProgress を使用。

大きなペイロードや長時間の翻訳は、HTTP タイムアウトを避けるために同期的な translate より jobs を推奨します。


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