blanchon's picture
Update
51f51c3

RobotHub TransportServer JavaScript/TypeScript Client

A TypeScript/JavaScript client library for real-time robotics control and video streaming via the RobotHub TransportServer platform. Supports both browser and Node.js environments.

🎯 Purpose

This client library provides easy access to the RobotHub TransportServer from JavaScript/TypeScript applications:

  • Robotics Control: Send joint commands and receive robot state updates
  • Video Streaming: Stream and receive video feeds via WebRTC
  • Multi-Workspace: Organize connections across isolated workspaces
  • Real-time Communication: WebSocket-based bidirectional messaging

πŸ“¦ Installation

bun add @robothub/transport-server-client

πŸš€ Quick Start

Robotics Control

import { robotics } from '@robothub/transport-server-client';

// Producer - Send commands to robot
const producer = new robotics.RoboticsProducer('http://localhost:8000');
await producer.connect(workspaceId, roomId);

await producer.sendJointUpdate([
  { name: 'shoulder', value: 45.0 },
  { name: 'elbow', value: -30.0 }
]);

// Consumer - Receive robot state
const consumer = new robotics.RoboticsConsumer('http://localhost:8000');
await consumer.connect(workspaceId, roomId);

consumer.onJointUpdate((joints) => {
  console.log('Robot moving:', joints);
});

Video Streaming

import { video } from '@robothub/transport-server-client';

// Producer - Stream video
const videoProducer = new video.VideoProducer('http://localhost:8000');
await videoProducer.connect(workspaceId, roomId);
await videoProducer.startCamera();

// Consumer - Receive video
const videoConsumer = new video.VideoConsumer('http://localhost:8000');
await videoConsumer.connect(workspaceId, roomId);

const videoElement = document.getElementById('video');
videoConsumer.attachToVideoElement(videoElement);

πŸ“š API Reference

Robotics Producer

// Connection
await producer.connect(workspaceId, roomId)
await producer.createRoom() // Auto-generates IDs
await producer.disconnect()

// Control
await producer.sendJointUpdate(joints)
await producer.sendStateSync(state)
await producer.sendEmergencyStop(reason)

Robotics Consumer

// Connection
await consumer.connect(workspaceId, roomId)

// Events
consumer.onJointUpdate(callback)
consumer.onStateSync(callback)
consumer.onError(callback)

// State
const state = await consumer.getStateSyncAsync()

Video Producer

// Streaming
await producer.startCamera(constraints)
await producer.startScreenShare()
await producer.stopStreaming()
await producer.updateVideoConfig(config)

Video Consumer

// Receiving
await consumer.startReceiving()
consumer.attachToVideoElement(videoElement)

// Events
consumer.onStreamStarted(callback)
consumer.onStreamStopped(callback)

πŸ”§ Room Management

// Create rooms and workspaces
const { workspaceId, roomId } = await producer.createRoom();

// List and manage rooms
const rooms = await producer.listRooms(workspaceId);
const roomInfo = await producer.getRoomInfo(workspaceId, roomId);
const success = await producer.deleteRoom(workspaceId, roomId);

⚑ Factory Functions

Quick setup helpers:

// Quick producer setup
const producer = await robotics.createProducerClient('http://localhost:8000');

// Quick consumer setup
const consumer = await robotics.createConsumerClient(workspaceId, roomId, 'http://localhost:8000');

πŸ› οΈ Development

# Install dependencies
bun install

# Build library
bun run build

# Type checking
bun run typecheck

Start controlling robots with JavaScript! πŸ€–βœ¨