callskit
Version:
A toolkit for building call experience using Cloudflare Realtime
102 lines (95 loc) • 2.63 kB
TypeScript
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 };