Node.js SDK (polylingo)
PolyLingo REST API를 위한 공식 TypeScript 클라이언트입니다. 런타임 fetch (Node.js 18+)를 사용하며, ESM 및 CJS 형식으로 제공되고 Node 외에 런타임 의존성이 없습니다.
- npm:
polylingo - 소스: UsePolyLingo/polylingo-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)
})
| 옵션 | 타입 | 필수 | 설명 |
|---|---|---|---|
apiKey | string | 예 | API 키 (Authorization: Bearer …). |
baseURL | string | 아니오 | /v1 포함 API 접두사. 기본값 https://api.usepolylingo.com/v1. |
timeout | number | 아니오 | 요청별 타임아웃(밀리초 단위). 기본값 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 객체 최상위에 translations와 usage를 반환합니다 (result 하위가 아님).
const status = await client.jobs.get(job.job_id)
client.jobs.translate(params) (편의 메서드)
작업을 제출하고 완료되거나 실패하거나 타임아웃에 도달할 때까지 폴링합니다.
const done = await client.jobs.translate({
content: longMarkdown,
targets: ['de', 'fr', 'es'],
format: 'markdown',
pollInterval: 10_000, // 폴링 간격(ms); 기본 5_000
timeout: 600_000, // 폴링 총 시간(ms); 기본 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 포함. |
AuthError | HTTP 401. |
RateLimitError | HTTP 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 */ }
}
비동기 작업 패턴 (요약)
- 발사 후 잊기 폴링:
jobs.create→ 워커가 간격을 두고jobs.get호출,completed또는failed까지 반복. - 내장 폴링:
jobs.translate. 동일한 의미,pollInterval,timeout,onProgress포함.
큰 페이로드와 장시간 번역은 HTTP 타임아웃을 피하기 위해 동기 translate 대신 jobs 사용 권장.
TypeScript
패키지는 옵션, 결과, 오류 타입을 내보냅니다. 필요에 따라 polylingo에서 명명된 타입을 가져오세요 (dist/index.d.ts 참조).
변경 로그
0.1.2
- 유지보수: 기본 API 기본 URL이
https://api.usepolylingo.com/v1로 설정됨.
0.1.0
- 초기 릴리스:
health,languages,translate,batch,usage,jobs.create,jobs.get,jobs.translate.