File size: 1,197 Bytes
b435029
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import type { StudioRenderContext, StudioRenderStore } from '../../domain/types'

interface BuildStudioRenderContextInput {
  ownerId: string
  sessionId: string
  agent: string
  renderStore?: StudioRenderStore
}

export async function buildStudioRenderContext(input: BuildStudioRenderContextInput): Promise<StudioRenderContext> {
  const context: StudioRenderContext = {
    sessionId: input.sessionId,
    agent: input.agent
  }

  if (input.renderStore) {
    const renders = await input.renderStore.listBySessionId(input.ownerId, input.sessionId)
    const latestRender = [...renders].sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt))[0]
    if (latestRender) {
      context.latestRender = {
        id: latestRender.id,
        status: mapRenderStatus(latestRender.status),
        timestamp: Date.parse(latestRender.updatedAt),
        error: latestRender.error
      }
    }
  }

  return context
}

function mapRenderStatus(status: 'queued' | 'running' | 'completed' | 'failed' | 'cancelled'): 'pending' | 'running' | 'completed' | 'failed' {
  if (status === 'queued') {
    return 'pending'
  }
  if (status === 'cancelled') {
    return 'failed'
  }
  return status
}