import { RunnerJobLiveRTMPHLSTranscodingPayload, RunnerJobPayload, RunnerJobStudioTranscodingPayload, RunnerJobTranscriptionPayload, RunnerJobType, RunnerJobVODAudioMergeTranscodingPayload, RunnerJobVODHLSTranscodingPayload, RunnerJobVODWebVideoTranscodingPayload, VideoStudioTaskPayload } from '@peertube/peertube-models' const supportedMatrix: { [ id in RunnerJobType ]: (payload: RunnerJobPayload) => boolean } = { 'vod-web-video-transcoding': (_payload: RunnerJobVODWebVideoTranscodingPayload) => { return true }, 'vod-hls-transcoding': (_payload: RunnerJobVODHLSTranscodingPayload) => { return true }, 'vod-audio-merge-transcoding': (_payload: RunnerJobVODAudioMergeTranscodingPayload) => { return true }, 'live-rtmp-hls-transcoding': (_payload: RunnerJobLiveRTMPHLSTranscodingPayload) => { return true }, 'video-studio-transcoding': (payload: RunnerJobStudioTranscodingPayload) => { const tasks = payload?.tasks const supported = new Set([ 'add-intro', 'add-outro', 'add-watermark', 'cut' ]) if (!Array.isArray(tasks)) return false return tasks.every(t => t && supported.has(t.name)) }, 'video-transcription': (_payload: RunnerJobTranscriptionPayload) => { return true } } export function isJobSupported (job: { type: RunnerJobType, payload: RunnerJobPayload }, enabledJobs?: Set) { if (enabledJobs && !enabledJobs.has(job.type)) return false const fn = supportedMatrix[job.type] if (!fn) return false return fn(job.payload as any) } export function getSupportedJobsList () { return Object.keys(supportedMatrix) }