UNPKG

callskit

Version:

A toolkit for building call experience using Cloudflare Realtime

102 lines (95 loc) 2.63 kB
import * as Party from 'partykit/server'; import { TrackMetadata } from 'partytracks/client'; export { routePartyTracksRequest as routeApiRequest } from 'partytracks/server'; type ChatMessagePayload = { type: 'text'; message: string; } | { type: 'image' | 'file'; name: string; url: string; size: number; }; type ChatBaseMessage = { id: string; user_id: string; display_name: string; created_at: Date; }; type ChatTextMessage = ChatBaseMessage & ChatMessagePayload; type ChatImageMessage = ChatBaseMessage & { type: 'image'; url: string; size: number; }; type ChatMessage = ChatTextMessage | ChatImageMessage; type RoomEvent = { event: 'connected'; } | { event: 'room/init'; participants: SerializedUser[]; started_at: string; chatMessages: ChatMessage[]; }; type ParticipantEvent = { event: 'participant/joined'; participant: SerializedUser; } | { event: 'participant/left'; participantId: string; } | { event: 'participant/camera-update'; data: { cameraEnabled: boolean; cameraTrackId?: TrackMetadata; participantId: string; }; } | { event: 'participant/mic-update'; data: { micEnabled: boolean; micTrackId?: TrackMetadata; participantId: string; }; } | { event: 'participant/screenshare-update'; data: { screenshareEnabled: boolean; screenshareVideoTrackId?: TrackMetadata; screenshareAudioTrackId?: TrackMetadata; participantId: string; }; }; type ChatEvent = { event: 'chat/new-message'; message: ChatMessage; }; type CallEvent = RoomEvent | ParticipantEvent | ChatEvent; interface SerializedUser { id: string; name: string; micEnabled: boolean; micTrackData?: TrackMetadata; cameraEnabled: boolean; cameraTrackData?: TrackMetadata; screenshareEnabled: boolean; screenshareVideoTrackData?: TrackMetadata; screenshareAudioTrackData?: TrackMetadata; } interface User extends SerializedUser { connectionId: string; } declare class PartyKitServer implements Party.Server { readonly room: Party.Room; started_at: Date; waiting_user_ids: Set<string>; users: Map<string, User>; chat: ChatMessage[]; constructor(room: Party.Room); onStart(): Promise<void>; onConnect(conn: Party.Connection, ctx: Party.ConnectionContext): void; onClose(connection: Party.Connection): Promise<void>; onMessage(message: string, sender: Party.Connection): void; broadcastToUsers(event: CallEvent, without?: string[]): void; } export { PartyKitServer };