111 lines
2.4 KiB
TypeScript
111 lines
2.4 KiB
TypeScript
/**
|
|
* Types for communication between background.ts and offscreen.ts.
|
|
* These are Chrome extension internal messages, separate from the WS protocol types.
|
|
*/
|
|
|
|
// Chrome-specific MediaStreamConstraints that TypeScript doesn't know about.
|
|
// These use Chrome's proprietary tabCapture API constraints.
|
|
// See: https://developer.chrome.com/docs/extensions/reference/tabCapture/
|
|
export interface ChromeTabCaptureAudioConstraints {
|
|
mandatory: {
|
|
chromeMediaSource: 'tab'
|
|
chromeMediaSourceId: string
|
|
}
|
|
}
|
|
|
|
export interface ChromeTabCaptureVideoConstraints {
|
|
mandatory: {
|
|
chromeMediaSource: 'tab'
|
|
chromeMediaSourceId: string
|
|
minFrameRate?: number
|
|
maxFrameRate?: number
|
|
}
|
|
}
|
|
|
|
// Offscreen document message types
|
|
export interface OffscreenStartRecordingMessage {
|
|
action: 'startRecording'
|
|
tabId: number
|
|
streamId: string
|
|
frameRate?: number
|
|
videoBitsPerSecond?: number
|
|
audioBitsPerSecond?: number
|
|
audio?: boolean
|
|
}
|
|
|
|
export interface OffscreenStopRecordingMessage {
|
|
action: 'stopRecording'
|
|
tabId: number
|
|
}
|
|
|
|
export interface OffscreenIsRecordingMessage {
|
|
action: 'isRecording'
|
|
tabId: number
|
|
}
|
|
|
|
export interface OffscreenCancelRecordingMessage {
|
|
action: 'cancelRecording'
|
|
tabId: number
|
|
}
|
|
|
|
export type OffscreenMessage =
|
|
| OffscreenStartRecordingMessage
|
|
| OffscreenStopRecordingMessage
|
|
| OffscreenIsRecordingMessage
|
|
| OffscreenCancelRecordingMessage
|
|
|
|
// Offscreen document response types
|
|
export type OffscreenStartRecordingResult =
|
|
| {
|
|
success: true
|
|
tabId: number
|
|
startedAt: number
|
|
mimeType: string
|
|
}
|
|
| {
|
|
success: false
|
|
error: string
|
|
}
|
|
|
|
export type OffscreenStopRecordingResult =
|
|
| {
|
|
success: true
|
|
tabId: number
|
|
duration: number
|
|
}
|
|
| {
|
|
success: false
|
|
error: string
|
|
}
|
|
|
|
export interface OffscreenIsRecordingResult {
|
|
isRecording: boolean
|
|
tabId: number
|
|
startedAt?: number
|
|
}
|
|
|
|
export type OffscreenCancelRecordingResult =
|
|
| {
|
|
success: true
|
|
tabId: number
|
|
}
|
|
| {
|
|
success: false
|
|
error: string
|
|
}
|
|
|
|
// Messages sent FROM offscreen TO background
|
|
export interface OffscreenRecordingChunkMessage {
|
|
action: 'recordingChunk'
|
|
tabId: number
|
|
data?: number[] // Array from Uint8Array for message passing
|
|
final?: boolean
|
|
}
|
|
|
|
export interface OffscreenRecordingCancelledMessage {
|
|
action: 'recordingCancelled'
|
|
tabId: number
|
|
}
|
|
|
|
export type OffscreenOutgoingMessage = OffscreenRecordingChunkMessage | OffscreenRecordingCancelledMessage
|