- Add session recording metadata and mux filter builder in src/recorder/sessionRecording.ts. - Update SegmentMetadata to include recordingSessionId in src/types.ts and src/recorder/metadata.ts. - Modify recorder lifecycle to track sessions, register segments, and finalize recordings on stop. - Create tests for session recording functionality in tests/recorder/sessionRecording.test.ts and tests/recorder/metadata.test.ts. - Document session recording design and implementation plan in docs/superpowers/specs/2026-05-16-session-full-recording-design.md and docs/superpowers/plans/2026-05-16-session-full-recording.md.
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import type fs from "node:fs";
|
|
import type prism from "prism-media";
|
|
|
|
export interface RoleMetadata {
|
|
id: string;
|
|
name: string;
|
|
position: number;
|
|
}
|
|
|
|
export interface UserMetadata {
|
|
userId: string;
|
|
username: string;
|
|
tag: string;
|
|
displayName: string;
|
|
avatarUrl: string;
|
|
bot: boolean;
|
|
roles: RoleMetadata[];
|
|
highestRole: RoleMetadata | null;
|
|
joinedTimestamp: number | null;
|
|
}
|
|
|
|
export interface SegmentState {
|
|
index: number;
|
|
startTime: number;
|
|
endTime: number | null;
|
|
filename: string;
|
|
jsonFilename: string;
|
|
oggStream: prism.opus.OggLogicalBitstream;
|
|
out: fs.WriteStream;
|
|
}
|
|
|
|
export interface SegmentMetadata extends UserMetadata {
|
|
recordingSessionId: string;
|
|
sessionId: string;
|
|
sessionStartTime: number;
|
|
segmentIndex: number;
|
|
segmentMs: number;
|
|
startTime: number;
|
|
endTime: number;
|
|
durationMs: number;
|
|
filename: string;
|
|
}
|
|
|
|
export interface PcmBroadcaster {
|
|
broadcastPcmToWeb?: (chunk: Buffer, userId: string) => void;
|
|
updateActiveUser?: (
|
|
userId: string,
|
|
data: { username: string; avatar: string; speaking: boolean },
|
|
) => void;
|
|
}
|