Self-hosted multi-platform broadcast newsroom for activist collectives: publishing pipeline with group approval and DST-proof scheduling, TweetDeck-style column wall with hostile-content-safe rendering, live control room with Auto Director, bridged chat governance with polls and quorum, distributed sandboxed transcode workers, encrypted content-addressed archive, monthly analytics. MIT licensed. See README.md and docs/.
47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
/** Transport-agnostic list page — shared by every paginated surface. */
|
|
export interface Page<T, C = string> {
|
|
items: T[];
|
|
nextCursor?: C;
|
|
}
|
|
|
|
export interface RemoteMedia {
|
|
remoteId: string;
|
|
url?: string;
|
|
mimeType: string;
|
|
width?: number;
|
|
height?: number;
|
|
}
|
|
|
|
/** Result of resolving a live source for program input (WP6 go-live slice). */
|
|
export interface LiveSourceResolution {
|
|
/** Absolute HLS playback URL, or null when the source is not live. */
|
|
playbackHlsUrl: string | null;
|
|
live: boolean;
|
|
}
|
|
|
|
export interface StreamPlaybackSource {
|
|
remoteId: string;
|
|
/** Absolute playback URL (HLS manifest, embed page, etc.). */
|
|
url: string;
|
|
kind: "hls" | "dash" | "embed";
|
|
protocol: "https" | "rtmp" | "rtmps" | "srt";
|
|
}
|
|
|
|
export interface DirectMessage {
|
|
id: string;
|
|
provider: string;
|
|
conversationRemoteId: string;
|
|
fromHandle: string;
|
|
toHandle: string;
|
|
text: string;
|
|
sentAt: Date;
|
|
}
|
|
|
|
export interface NormalizedWebhookEvent {
|
|
provider: string;
|
|
eventType: string;
|
|
/** Connection or channel the event belongs to, when resolvable. */
|
|
connectionKey?: string;
|
|
payload: Record<string, unknown>;
|
|
receivedAt: Date;
|
|
}
|