blanchon's picture
Update
1e7b565

Client Library API Comparison

This table shows the correspondence between the Python and JavaScript/TypeScript client libraries for RobotHub TransportServer.

πŸ“¦ Installation

Python JavaScript/TypeScript
uv add transport-server-client bun add @robothub/transport-server-client

πŸ”§ Imports

Python JavaScript/TypeScript
from transport_server_client import RoboticsProducer import { robotics } from '@robothub/transport-server-client'
from transport_server_client import RoboticsConsumer const producer = new robotics.RoboticsProducer()
from transport_server_client.video import VideoProducer import { video } from '@robothub/transport-server-client'
from transport_server_client.video import VideoConsumer const producer = new video.VideoProducer()

πŸ€– Robotics Producer

Operation Python JavaScript/TypeScript
Create instance producer = RoboticsProducer('http://localhost:8000') const producer = new robotics.RoboticsProducer('http://localhost:8000')
Connect to room await producer.connect(workspace_id, room_id) await producer.connect(workspaceId, roomId)
Create room room_info = await producer.create_room() const { workspaceId, roomId } = await producer.createRoom()
Send joint update await producer.send_joint_update(joints) await producer.sendJointUpdate(joints)
Send state sync await producer.send_state_sync(state) await producer.sendStateSync(state)
Emergency stop await producer.send_emergency_stop(reason) await producer.sendEmergencyStop(reason)
List rooms rooms = await producer.list_rooms(workspace_id) const rooms = await producer.listRooms(workspaceId)
Delete room await producer.delete_room(workspace_id, room_id) await producer.deleteRoom(workspaceId, roomId)
Disconnect await producer.disconnect() await producer.disconnect()

πŸ€– Robotics Consumer

Operation Python JavaScript/TypeScript
Create instance consumer = RoboticsConsumer('http://localhost:8000') const consumer = new robotics.RoboticsConsumer('http://localhost:8000')
Connect to room await consumer.connect(workspace_id, room_id) await consumer.connect(workspaceId, roomId)
Get current state state = await consumer.get_state_sync() const state = await consumer.getStateSyncAsync()
Joint update callback consumer.on_joint_update(callback) consumer.onJointUpdate(callback)
State sync callback consumer.on_state_sync(callback) consumer.onStateSync(callback)
Error callback consumer.on_error(callback) consumer.onError(callback)
Connected callback consumer.on_connected(callback) consumer.onConnected(callback)
Disconnected callback consumer.on_disconnected(callback) consumer.onDisconnected(callback)
Disconnect await consumer.disconnect() await consumer.disconnect()

πŸ“Ή Video Producer

Operation Python JavaScript/TypeScript
Create instance producer = VideoProducer('http://localhost:8000') const producer = new video.VideoProducer('http://localhost:8000')
Connect to room await producer.connect(workspace_id, room_id) await producer.connect(workspaceId, roomId)
Start camera await producer.start_camera(config) await producer.startCamera(constraints)
Start screen share await producer.start_screen_share() await producer.startScreenShare()
Stop streaming await producer.stop_streaming() await producer.stopStreaming()
Update config await producer.update_video_config(config) await producer.updateVideoConfig(config)
Disconnect await producer.disconnect() await producer.disconnect()

πŸ“Ή Video Consumer

Operation Python JavaScript/TypeScript
Create instance consumer = VideoConsumer('http://localhost:8000') const consumer = new video.VideoConsumer('http://localhost:8000')
Connect to room await consumer.connect(workspace_id, room_id) await consumer.connect(workspaceId, roomId)
Start receiving await consumer.start_receiving() await consumer.startReceiving()
Stop receiving await consumer.stop_receiving() await consumer.stopReceiving()
Attach to video element N/A (Python) consumer.attachToVideoElement(videoElement)
Frame callback consumer.on_frame_update(callback) consumer.onFrameUpdate(callback)
Stream started callback consumer.on_stream_started(callback) consumer.onStreamStarted(callback)
Stream stopped callback consumer.on_stream_stopped(callback) consumer.onStreamStopped(callback)
Disconnect await consumer.disconnect() await consumer.disconnect()

⚑ Factory Functions

Operation Python JavaScript/TypeScript
Quick producer producer = await create_producer_client(url) const producer = await robotics.createProducerClient(url)
Quick consumer consumer = await create_consumer_client(room_id, url) const consumer = await robotics.createConsumerClient(workspaceId, roomId, url)

πŸ”§ Context Managers / Lifecycle

Operation Python JavaScript/TypeScript
Auto cleanup async with RoboticsProducer(url) as producer: No built-in equivalent
Check connection producer.is_connected() producer.isConnected()
Connection info info = producer.get_connection_info() const info = producer.getConnectionInfo()

πŸ“ Data Formats

Joint Data

Python JavaScript/TypeScript
{'name': 'shoulder', 'value': 45.0} { name: 'shoulder', value: 45.0 }
[{'name': 'shoulder', 'value': 45.0}] [{ name: 'shoulder', value: 45.0 }]

State Data

Python JavaScript/TypeScript
{'shoulder': 45.0, 'elbow': -30.0} { shoulder: 45.0, elbow: -30.0 }

Room Info Response

Python JavaScript/TypeScript
{'workspace_id': 'uuid', 'room_id': 'uuid'} { workspaceId: 'uuid', roomId: 'uuid' }

πŸ”„ Naming Conventions

Python (snake_case) JavaScript/TypeScript (camelCase)
send_joint_update sendJointUpdate
send_state_sync sendStateSync
get_state_sync getStateSyncAsync
on_joint_update onJointUpdate
create_room createRoom
list_rooms listRooms
workspace_id workspaceId
room_id roomId
start_camera startCamera
stop_streaming stopStreaming

Both libraries provide the same functionality with language-appropriate conventions! πŸ€–βœ¨