Files
playwriter/extension/src/offscreen-types.ts
Tommy D. Rossi 4a8caf19bd refactor: extract recording code into separate modules with proper types
- Create extension/src/offscreen-types.ts with Chrome tabCapture constraint types
- Create extension/src/recording.ts extracting recording functions from background.ts
- Create playwriter/src/recording-relay.ts extracting recording logic from cdp-relay.ts
- Remove 'as any' usages by adding proper MediaStream constraint types
- Add typesafe message types for offscreen document communication
- Remove duplicate OUR_EXTENSION_IDS constant (uses EXTENSION_IDS from utils.ts)
2026-01-27 13:35:23 +01:00

107 lines
2.3 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