mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-21 18:11:27 -07:00
update skills
This commit is contained in:
212
.agents/skills/cloudflare-deploy/references/realtimekit/api.md
Normal file
212
.agents/skills/cloudflare-deploy/references/realtimekit/api.md
Normal file
@@ -0,0 +1,212 @@
|
||||
# RealtimeKit API Reference
|
||||
|
||||
Complete API reference for Meeting object, REST endpoints, and SDK methods.
|
||||
|
||||
## Meeting Object API
|
||||
|
||||
### `meeting.self` - Local Participant
|
||||
|
||||
```typescript
|
||||
// Properties: id, userId, name, audioEnabled, videoEnabled, screenShareEnabled, audioTrack, videoTrack, screenShareTracks, roomJoined, roomState
|
||||
// Methods
|
||||
await meeting.self.enableAudio() / disableAudio() / enableVideo() / disableVideo() / enableScreenShare() / disableScreenShare()
|
||||
await meeting.self.setName("Name") // Before join only
|
||||
await meeting.self.setDevice(device)
|
||||
const devices = await meeting.self.getAllDevices() / getAudioDevices() / getVideoDevices() / getSpeakerDevices()
|
||||
// Events: 'roomJoined', 'audioUpdate', 'videoUpdate', 'screenShareUpdate', 'deviceUpdate', 'deviceListUpdate'
|
||||
meeting.self.on('roomJoined', () => {})
|
||||
meeting.self.on('audioUpdate', ({ audioEnabled, audioTrack }) => {})
|
||||
```
|
||||
|
||||
### `meeting.participants` - Remote Participants
|
||||
|
||||
**Collections**:
|
||||
```typescript
|
||||
meeting.participants.joined / active / waitlisted / pinned // Maps
|
||||
const participants = meeting.participants.joined.toArray()
|
||||
const count = meeting.participants.joined.size()
|
||||
const p = meeting.participants.joined.get('peer-id')
|
||||
```
|
||||
|
||||
**Participant Properties**:
|
||||
```typescript
|
||||
participant.id / userId / name
|
||||
participant.audioEnabled / videoEnabled / screenShareEnabled
|
||||
participant.audioTrack / videoTrack / screenShareTracks
|
||||
```
|
||||
|
||||
**Events**:
|
||||
```typescript
|
||||
meeting.participants.joined.on('participantJoined', (participant) => {})
|
||||
meeting.participants.joined.on('participantLeft', (participant) => {})
|
||||
```
|
||||
|
||||
### `meeting.meta` - Metadata
|
||||
```typescript
|
||||
meeting.meta.meetingId / meetingTitle / meetingStartedTimestamp
|
||||
```
|
||||
|
||||
### `meeting.chat` - Chat
|
||||
```typescript
|
||||
meeting.chat.messages // Array
|
||||
await meeting.chat.sendTextMessage("Hello") / sendImageMessage(file)
|
||||
meeting.chat.on('chatUpdate', ({ message, messages }) => {})
|
||||
```
|
||||
|
||||
### `meeting.polls` - Polling
|
||||
```typescript
|
||||
meeting.polls.items // Array
|
||||
await meeting.polls.create(question, options, anonymous, hideVotes)
|
||||
await meeting.polls.vote(pollId, optionIndex)
|
||||
```
|
||||
|
||||
### `meeting.plugins` - Collaborative Apps
|
||||
```typescript
|
||||
meeting.plugins.all // Array
|
||||
await meeting.plugins.activate(pluginId) / deactivate()
|
||||
```
|
||||
|
||||
### `meeting.ai` - AI Features
|
||||
```typescript
|
||||
meeting.ai.transcripts // Live transcriptions (when enabled in Preset)
|
||||
```
|
||||
|
||||
### Core Methods
|
||||
```typescript
|
||||
await meeting.join() // Emits 'roomJoined' on meeting.self
|
||||
await meeting.leave()
|
||||
```
|
||||
|
||||
## TypeScript Types
|
||||
|
||||
```typescript
|
||||
import type { RealtimeKitClient, States, UIConfig, Participant } from '@cloudflare/realtimekit';
|
||||
|
||||
// Main interface
|
||||
interface RealtimeKitClient {
|
||||
self: SelfState; // Local participant (id, userId, name, audioEnabled, videoEnabled, roomJoined, roomState)
|
||||
participants: { joined, active, waitlisted, pinned }; // Reactive Maps
|
||||
chat: ChatNamespace; // messages[], sendTextMessage(), sendImageMessage()
|
||||
polls: PollsNamespace; // items[], create(), vote()
|
||||
plugins: PluginsNamespace; // all[], activate(), deactivate()
|
||||
ai: AINamespace; // transcripts[]
|
||||
meta: MetaState; // meetingId, meetingTitle, meetingStartedTimestamp
|
||||
join(): Promise<void>;
|
||||
leave(): Promise<void>;
|
||||
}
|
||||
|
||||
// Participant (self & remote share same shape)
|
||||
interface Participant {
|
||||
id: string; // Peer ID (changes on rejoin)
|
||||
userId: string; // Persistent participant ID
|
||||
name: string;
|
||||
audioEnabled: boolean;
|
||||
videoEnabled: boolean;
|
||||
screenShareEnabled: boolean;
|
||||
audioTrack: MediaStreamTrack | null;
|
||||
videoTrack: MediaStreamTrack | null;
|
||||
screenShareTracks: MediaStreamTrack[];
|
||||
}
|
||||
```
|
||||
|
||||
## Store Architecture
|
||||
|
||||
RealtimeKit uses reactive store (event-driven updates, live Maps):
|
||||
|
||||
```typescript
|
||||
// Subscribe to state changes
|
||||
meeting.self.on('audioUpdate', ({ audioEnabled, audioTrack }) => {});
|
||||
meeting.participants.joined.on('participantJoined', (p) => {});
|
||||
|
||||
// Access current state synchronously
|
||||
const isAudioOn = meeting.self.audioEnabled;
|
||||
const count = meeting.participants.joined.size();
|
||||
```
|
||||
|
||||
**Key principles:** State updates emit events after changes. Use `.toArray()` sparingly. Collections are live Maps.
|
||||
|
||||
## REST API
|
||||
|
||||
Base: `https://api.cloudflare.com/client/v4/accounts/{account_id}/realtime/kit/{app_id}`
|
||||
|
||||
### Meetings
|
||||
```bash
|
||||
GET /meetings # List all
|
||||
GET /meetings/{meeting_id} # Get details
|
||||
POST /meetings # Create: {"title": "..."}
|
||||
PATCH /meetings/{meeting_id} # Update: {"title": "...", "record_on_start": true}
|
||||
```
|
||||
|
||||
### Participants
|
||||
```bash
|
||||
GET /meetings/{meeting_id}/participants # List all
|
||||
GET /meetings/{meeting_id}/participants/{participant_id} # Get details
|
||||
POST /meetings/{meeting_id}/participants # Add: {"name": "...", "preset_name": "...", "custom_participant_id": "..."}
|
||||
PATCH /meetings/{meeting_id}/participants/{participant_id} # Update: {"name": "...", "preset_name": "..."}
|
||||
DELETE /meetings/{meeting_id}/participants/{participant_id} # Delete
|
||||
POST /meetings/{meeting_id}/participants/{participant_id}/token # Refresh token
|
||||
```
|
||||
|
||||
### Active Session
|
||||
```bash
|
||||
GET /meetings/{meeting_id}/active-session # Get active session
|
||||
POST /meetings/{meeting_id}/active-session/kick # Kick users: {"user_ids": ["id1", "id2"]}
|
||||
POST /meetings/{meeting_id}/active-session/kick-all # Kick all
|
||||
POST /meetings/{meeting_id}/active-session/poll # Create poll: {"question": "...", "options": [...], "anonymous": false}
|
||||
```
|
||||
|
||||
### Recording
|
||||
```bash
|
||||
GET /recordings?meeting_id={meeting_id} # List recordings
|
||||
GET /recordings/active-recording/{meeting_id} # Get active recording
|
||||
POST /recordings # Start: {"meeting_id": "...", "type": "composite"} (or "track")
|
||||
PUT /recordings/{recording_id} # Control: {"action": "pause"} (or "resume", "stop")
|
||||
POST /recordings/track # Track recording: {"meeting_id": "...", "layers": [...]}
|
||||
```
|
||||
|
||||
### Livestreaming
|
||||
```bash
|
||||
GET /livestreams?exclude_meetings=false # List all
|
||||
GET /livestreams/{livestream_id} # Get details
|
||||
POST /meetings/{meeting_id}/livestreams # Start for meeting
|
||||
POST /meetings/{meeting_id}/active-livestream/stop # Stop
|
||||
POST /livestreams # Create independent: returns {ingest_server, stream_key, playback_url}
|
||||
```
|
||||
|
||||
### Sessions & Analytics
|
||||
```bash
|
||||
GET /sessions # List all
|
||||
GET /sessions/{session_id} # Get details
|
||||
GET /sessions/{session_id}/participants # List participants
|
||||
GET /sessions/{session_id}/participants/{participant_id} # Call stats
|
||||
GET /sessions/{session_id}/chat # Download chat CSV
|
||||
GET /sessions/{session_id}/transcript # Download transcript CSV
|
||||
GET /sessions/{session_id}/summary # Get summary
|
||||
POST /sessions/{session_id}/summary # Generate summary
|
||||
GET /analytics/daywise?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD # Day-wise analytics
|
||||
GET /analytics/livestreams/overall # Livestream analytics
|
||||
```
|
||||
|
||||
### Webhooks
|
||||
```bash
|
||||
GET /webhooks # List all
|
||||
POST /webhooks # Create: {"url": "https://...", "events": ["session.started", "session.ended"]}
|
||||
PATCH /webhooks/{webhook_id} # Update
|
||||
DELETE /webhooks/{webhook_id} # Delete
|
||||
```
|
||||
|
||||
## Session Lifecycle
|
||||
|
||||
```
|
||||
Initialization → Join Intent → [Waitlist?] → Meeting Screen (Stage) → Ended
|
||||
↓ Approved
|
||||
[Rejected → Ended]
|
||||
```
|
||||
|
||||
UI Kit handles state transitions automatically.
|
||||
|
||||
## See Also
|
||||
|
||||
- [Configuration](./configuration.md) - Setup and installation
|
||||
- [Patterns](./patterns.md) - Usage examples
|
||||
- [README](./README.md) - Overview and quick start
|
||||
Reference in New Issue
Block a user