export const SignalType = { OFFER: "OFFER", ANSWER: "ANSWER", CANDIDATE: "CANDIDATE", } as const; export const Topic = { MATCHING: "/user/queue/match", SIGNALING: "/user/queue/signal", } as const; export const Destination = { MATCHING: "/app/match/request", SIGNALING: "/app/match/signaling", CANCEL: "/app/match/cancel", } as const; export type SignalType = (typeof SignalType)[keyof typeof SignalType]; export type Topic = (typeof Topic)[keyof typeof Topic]; export type Destination = (typeof Destination)[keyof typeof Destination]; export interface SignalMessage { type: SignalType; senderId: string; data: RTCSessionDescriptionInit | RTCIceCandidateInit; } export interface Subscription { unsubscribe: () => void; } export interface SignalingEventMap { 'signaling:connected': () => void; 'signaling:disconnected': () => void; 'signaling:error': (error: Error) => void; 'message': (channel: Topic, payload: any) => void; }