/
nayvok
/
livecoding
Обзор
Документация
Войти
/
nayvok
/
livecoding
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
frontend/src/types/session.ts
126 строк
2 KB
nayvok
fix: harden sessions and WebRTC recovery
17 июн 2026, 22:02
17 июн 2026, 22:02
37b9a92
Код
Авторство
О чём код?
// Типы сессии. export type Role = 'teacher' | 'student' export interface SessionMetadata { sessionId: string title: string task: string language: string createdAt: number iceServers: RTCIceServer[] } export interface CreatedSession { sessionId: string teacherToken: string title: string task: string language: string createdAt: number } export interface CreateSessionPayload { title: string task: string language?: string } export interface TrackState { cameraOn: boolean microphoneOn: boolean } export type SignalingMessageType = | 'offer' | 'answer' | 'candidate' | 'track-state' | 'task-update' | 'peer-ready' | 'session-state-request' | 'session-ended' | 'run-output' export interface OfferMessage { type: 'offer' sdp: RTCSessionDescriptionInit } export interface AnswerMessage { type: 'answer' sdp: RTCSessionDescriptionInit } export interface CandidateMessage { type: 'candidate' candidate: RTCIceCandidateInit } export interface TrackStateMessage { type: 'track-state' cameraOn: boolean microphoneOn: boolean } export interface TaskUpdateMessage { type: 'task-update' task: string } // Сигнал готовности для WebRTC-offer. export interface PeerReadyMessage { type: 'peer-ready' renegotiate?: boolean } export interface SessionStateRequestMessage { type: 'session-state-request' } export type SessionEndReason = 'ended' | 'kicked' export interface SessionEndedMessage { type: 'session-ended' reason: SessionEndReason } export interface RunResultPayload { stdout: string stderr: string exitCode: number | null durationMs: number truncated: boolean timedOut: boolean } export interface RunOutputMessage { type: 'run-output' payload: RunResultPayload runBy: Role } export type SignalingMessage = | OfferMessage | AnswerMessage | CandidateMessage | TrackStateMessage | TaskUpdateMessage | PeerReadyMessage | SessionStateRequestMessage | SessionEndedMessage | RunOutputMessage export type ConnectionStatus = | 'connecting' | 'online' | 'offline' | 'error' | 'occupied' export const SUPPORTED_LANGUAGES = [ { id: 'javascript', label: 'JavaScript' }, { id: 'python', label: 'Python' }, ] as const export type SupportedLanguageId = (typeof SUPPORTED_LANGUAGES)[number]['id']