Seenn Node.js Backend SDK - Open source job state transport for real-time progress tracking
npm install @seenn/node> Open Source Backend SDK for Job State Transport


Real-time job progress tracking for AI video generation, image processing, and long-running async tasks.
- Fluent API - Chain job updates naturally
- Auto-retry - Exponential backoff with jitter
- TypeScript - Full type definitions
- Self-hosted - Use with your own backend
- Open Source - MIT License
---
``bash`
npm install @seenn/nodeor
yarn add @seenn/nodeor
pnpm add @seenn/node
---
`typescript
import { SeennClient } from '@seenn/node';
const seenn = new SeennClient({
apiKey: 'sk_live_your_api_key',
});
`
`typescript
import { SeennClient } from '@seenn/node';
const seenn = new SeennClient({
apiKey: 'sk_live_your_api_key',
baseUrl: 'https://api.yourapp.com', // Your backend URL
});
`
---
`typescript
const job = await seenn.jobs.start({
jobType: 'video-generation',
userId: 'user_123',
title: 'Generating video...',
metadata: { prompt: 'A cat playing piano' },
queue: { position: 5, total: 20 },
stage: { name: 'queued', current: 1, total: 4 },
});
console.log(Job started: ${job.id});`
`typescript`
await job.setProgress(50, {
message: 'Rendering frames...',
stage: { name: 'render', current: 2, total: 4 },
});
`typescript`
await job.complete({
result: {
type: 'video',
url: 'https://cdn.example.com/video.mp4',
data: { duration: 30, resolution: '1080p' },
},
message: 'Video ready!',
});
`typescript`
await job.fail({
error: {
code: 'RENDER_FAILED',
message: 'GPU memory exceeded',
details: { gpuMemory: '16GB', required: '24GB' },
},
retryable: true,
});
`typescript
// Get single job
const job = await seenn.jobs.get('job_01ABC123');
console.log(job.status, job.progress);
// List user's jobs
const { jobs, nextCursor } = await seenn.jobs.list('user_123', {
limit: 20,
});
`
---
`typescript`
const seenn = new SeennClient({
apiKey: string; // Required: sk_live_xxx or sk_test_xxx
baseUrl?: string; // Default: https://api.seenn.io
timeout?: number; // Default: 30000 (30s)
maxRetries?: number; // Default: 3
debug?: boolean; // Default: false
});
---
`typescript
import { SeennError, RateLimitError, ValidationError, NotFoundError } from '@seenn/node';
try {
await seenn.jobs.start({ ... });
} catch (error) {
if (error instanceof RateLimitError) {
console.log(Rate limited. Retry after ${error.retryAfter}s);Error ${error.code}: ${error.message}
} else if (error instanceof ValidationError) {
console.log('Invalid input:', error.details);
} else if (error instanceof NotFoundError) {
console.log('Job not found');
} else if (error instanceof SeennError) {
console.log();`
}
}
---
To use this SDK with your own backend, implement these endpoints:
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | /v1/jobs | Create a new job |/v1/jobs/:id
| GET | | Get job by ID |/v1/jobs?userId=xxx
| GET | | List user's jobs |/v1/jobs/:id/progress
| POST | | Update job progress |/v1/jobs/:id/complete
| POST | | Mark job as completed |/v1/jobs/:id/fail` | Mark job as failed |
| POST |
See Self-Hosted Guide for full API specification.
---
- Documentation
- Website
- GitHub
- npm
---
MIT © Seenn