Node.js SDK
Server-side video conversion, HLS output, and AI categorization/moderation for Express, NestJS, and any Node.js backend
Package: @baxcloud/baxstream@1.0.5
Sync vs async
Standalone AI (createCategorizationJob, createModerationJob, uploadImageForModeration, batch helpers) is synchronous: await the call and read result.safe, result.violations, result.batchItems, etc. from the HTTP response. Webhooks are optional.
HLS conversion is async: poll getVideoConversionJob or use video.conversion.* webhooks.
Full table: Standalone AI · Webhooks
Installation
npm install @baxcloud/baxstream
# or
pnpm add @baxcloud/baxstreamRequires Node.js 18+. The client connects to BaxCloud automatically — only projectId and apiKey are required.
Image moderation (sync)
1const result = await stream.createModerationJob({
2 inputUrl: 'https://example.com/photo.jpg',
3 inputType: 'image',
4 threshold: 0.30,
5});
6
7if (!result.safe) {
8 console.log(result.violations);
9}
10
11// Batch (1–20 images)
12const batch = await stream.createModerationBatchJob({
13 inputUrls: ['https://example.com/a.jpg', 'https://example.com/b.jpg'],
14});
15for (const item of batch.batchItems ?? []) {
16 console.log(item.index, item.safe);
17}Quick Start (HLS)
1import { BaxCloudStreamClient } from '@baxcloud/baxstream';
2
3const stream = new BaxCloudStreamClient({
4 projectId: process.env.BAXCLOUD_PROJECT_ID!,
5 apiKey: process.env.BAXCLOUD_API_KEY!,
6});
7
8const job = await stream.createVideoConversionJob({
9 inputUrl: 'https://example.com/video.mp4',
10 outputFormats: ['720p', '1080p'],
11 s3Config: {
12 bucket: 'my-bucket',
13 accessKey: process.env.S3_ACCESS_KEY!,
14 secretKey: process.env.S3_SECRET_KEY!,
15 cdnUrl: 'https://cdn.example.com',
16 },
17});
18
19// Async — poll or use webhooks
20const status = await stream.getVideoConversionJob(job.id);
21console.log(status.status, status.outputUrl);API methods
Video conversion (async): createVideoConversionJob, uploadVideoForConversion, listVideoConversionJobs, getVideoConversionJob, cancelVideoConversionJob
AI categorization (sync): createCategorizationJob, listCategorizationJobs, getCategorizationJob
AI moderation (sync): createModerationJob, uploadImageForModeration, createModerationBatchJob, uploadImagesForModeration, listModerationJobs, getModerationJob
Full REST reference: BaxStream docs · npm
Webhooks (optional for standalone AI)
Required for async HLS conversion workflows; optional for standalone categorization/moderation when you already read the synchronous HTTP response. Verify events with @baxcloud/baxcloud-server-sdk (webhook helpers only — BaxStream API calls use @baxcloud/baxstream):
1npm install @baxcloud/baxcloud-server-sdk
2
3import express from 'express';
4import { webhookMiddleware } from '@baxcloud/baxcloud-server-sdk';
5
6const app = express();
7
8app.post(
9 '/webhooks/baxstream',
10 express.json({
11 verify: (req: any, _res, buf) => { req.rawBody = buf.toString('utf8'); },
12 }),
13 webhookMiddleware(process.env.BAXCLOUD_WEBHOOK_SECRET!),
14 (req, res) => {
15 const event = req.baxcloudEvent;
16 if (event.event === 'video.conversion.completed') {
17 console.log('HLS ready:', event.data?.outputUrl);
18 }
19 res.json({ received: true });
20 },
21);See BaxStream webhooks and the Server SDK guide.