import type { ChunkRecordResult } from './chunk-storage'; /** * Une "prise" finalisée dans une session multi-take. * Chaque take correspond à un MediaRecorder.start → MediaRecorder.stop, avec * éventuellement des pauses/reprises au milieu (continuité préservée). */ export interface MediaTake { /** Identifiant unique du take (`take-`). */ id: string; /** Position dans la liste de takes (0-indexed, monotone strict). */ index: number; /** Résultat de finalisation du ChunkStore vidéo (storage + blob + url + pointers). */ videoResult: ChunkRecordResult; /** Résultat de finalisation du ChunkStore audio si `recordAudioSeparately=true`. */ audioResult?: ChunkRecordResult | null; /** Durée mesurée du take en millisecondes (Date.now() au stop - Date.now() au start). */ durationMs: number; /** Timestamp Unix ms du démarrage du take. */ startedAt: number; /** Titre éditable côté UI. Optionnel, généré par défaut "Take N". */ title?: string; } /** * Type des sources actives dans une session de capture. * `smartphone` et `ip-cam` sont réservés pour P2 (multi-source). */ export type SessionSource = 'screen' | 'webcam' | 'audio' | 'smartphone' | 'ip-cam'; /** * État courant d'une session multi-take (dérivé du hook). */ export interface MediaSessionState { /** Identifiant root de la session (`session--`). * Persiste cross-reload via session-storage L3 (J4). */ sessionId: string; /** Statut macroscopique dérivé. */ status: 'idle' | 'streaming' | 'recording' | 'paused' | 'stopped'; /** Liste accumulée des takes finalisés, dans l'ordre d'enregistrement. */ takes: MediaTake[]; /** Durée du take courant (sec). 0 si pas de take actif. */ currentTakeDurationSec: number; /** Sources activées dans la session courante. */ sourcesUsed: SessionSource[]; } /** * Génère un identifiant de session root. * Format : `session--`. Stable sur la durée de vie du composant. */ export declare function generateSessionId(): string; /** * Génère un baseId de take dérivé du sessionId. * Format : `-take`. Permet la reconstruction L3 cross-reload. */ export declare function takeBaseId(sessionId: string, index: number): string; //# sourceMappingURL=take-types.d.ts.map