feat(streams): add phase-1 single-server SFU session and transport APIs

This commit is contained in:
2026-02-08 11:45:00 +00:00
parent 20373f411f
commit 1c8256bf57
5 changed files with 257 additions and 58 deletions

View File

@@ -0,0 +1,41 @@
import type { SfuSessionDescriptor, SfuSessionState } from './types';
type StoredSfuSession = SfuSessionDescriptor & {
updatedAt: string;
};
export class SfuSessionRegistry {
private readonly sessions = new Map<string, StoredSfuSession>();
get(streamSessionId: string): SfuSessionDescriptor | null {
const found = this.sessions.get(streamSessionId);
if (!found) return null;
const { updatedAt: _updatedAt, ...descriptor } = found;
return descriptor;
}
set(session: SfuSessionDescriptor): SfuSessionDescriptor {
const now = new Date().toISOString();
this.sessions.set(session.streamSessionId, { ...session, updatedAt: now });
return session;
}
updateState(streamSessionId: string, state: SfuSessionState): SfuSessionDescriptor | null {
const existing = this.sessions.get(streamSessionId);
if (!existing) return null;
const next: StoredSfuSession = {
...existing,
state,
updatedAt: new Date().toISOString(),
};
this.sessions.set(streamSessionId, next);
const { updatedAt: _updatedAt, ...descriptor } = next;
return descriptor;
}
list(): SfuSessionDescriptor[] {
return Array.from(this.sessions.values()).map(({ updatedAt: _updatedAt, ...descriptor }) => descriptor);
}
}