Node.js / TypeScript SDK для модерации контента
Официальный Node.js SDK для VideoCensor API. Анализ и цензура текста, аудио и видео. Полная TypeScript-типизация всех моделей и эндпоинтов, auto-retry, поддержка стримов. Работает в Node.js, Deno, Bun и Cloudflare Workers.
100% TypeScript
Все модели, все эндпоинты — строгая типизация. Интерфейсы JobStatus, JobResult, AnalyzeTextResult, BatchResponse экспортированы. Zero any.
ESM + CJS
Пакет собран в dual-format: ESM (import) и CJS (require). Работает в любой сборке — Next.js, Vite, tsc, esbuild.
Auto-retry с backoff
Ретраи на 429/5xx с exponential backoff, max_retries настраивается. Retry-After заголовок соблюдается автоматически.
Стримы для файлов
analyzeMedia принимает fs.ReadStream, Buffer или путь. Не нужно грузить файл в память — стримим напрямую в multipart.
waitForJob helper
client.waitForJob(jobId, timeoutMs) — удобный polling до завершения задачи. Поддерживает AbortSignal и onProgress callback.
Типизированные ошибки
VideoCensorError, RateLimitError, AuthenticationError — ловите через instanceof. Содержат retryAfter, statusCode, requestId для логирования.
Быстрый старт
import { VideoCensor } from "@videocensor/sdk";
const client = new VideoCensor({ apiKey: process.env.VIDEOCENSOR_API_KEY! });
const result = await client.analyzeText("текст для проверки");
// result: { flaggedCount, categories, words }import { VideoCensor } from "@videocensor/sdk";
const client = new VideoCensor({ apiKey: process.env.VIDEOCENSOR_API_KEY! });
const job = await client.analyzeMedia("/path/to/video.mp4");
const done = await client.waitForJob(job.id);
const result = await client.getJobResult(done.id);
// result: { censoredCount, words, downloadUrl }const job = await client.censorMediaUrl(
"https://youtube.com/watch?v=...",
{ wayOfBlocking: "beep" }
);
const done = await client.waitForJob(job.id);
await client.downloadJob(done.id, "./clean.mp4");import { VideoCensor, RateLimitError, AuthenticationError } from "@videocensor/sdk";
try {
await client.analyzeText("test");
} catch (err) {
if (err instanceof RateLimitError) {
// log retry after err.retryAfter seconds
} else if (err instanceof AuthenticationError) {
// log invalid api key
}
}Что умеет SDK
Next.js API routes
POST /api/moderate → client.analyzeText → return Response. Edge или Node runtime — работает везде.
NestJS backend
Inject VideoCensor через DI provider, использовать в сервисах. Полная типизация совместима с nestjs best practices.
Express / Fastify
Миддлвар для модерации req.body.text до handler'а. Отправка webhook'ов на завершение задач.
AWS Lambda
Размер SDK ~50 КБ, быстрый cold start. Используйте webhook для длинных файлов вместо wait.
Cloudflare Workers
Работает в V8 Isolates, use fetch под капотом. Идеально для edge-модерации.
Discord / Telegram боты
Мгновенная модерация сообщений с photo/video attachments — скачиваем, прогоняем через censor_media_url.
Node.js SDK — вопросы
Какая версия Node.js нужна?+
Node 18+. Используется встроенный fetch, FormData, AbortController. Работает также в Deno, Bun, Cloudflare Workers.
Есть ли types?+
SDK написан на TypeScript. Полные .d.ts в пакете, типизация всех эндпоинтов, интерфейсов и ошибок.
Работает ли в Cloudflare Workers / Deno?+
Да. SDK не использует Node-specific API (fs, path, buffer) за пределами file upload helper, который можно передать как ReadableStream.
Поддерживается ли CommonJS?+
Да. Пакет собран в dual-format ESM + CJS. require('@videocensor/sdk') работает.
Как обновить?+
npm install @videocensor/sdk@latest. Следуем SemVer: breaking changes в major, deprecation notice за 3 месяца.
Где исходники?+
Open source на GitHub — github.com/dzhumaevn/videocensor/tree/main/sdk/nodejs. MIT license.
Установите SDK за секунду
npm install @videocensor/sdk — типизированный клиент под все популярные Node-фреймворки.