( data: Partial<OpenAIRealtimeClientSecretResponse> | undefined, fallbackModel: OpenAIRealtimeModel, )
| 30 | * `/v1/realtime/sessions` response did. |
| 31 | */ |
| 32 | export function parseClientSecretResponse( |
| 33 | data: Partial<OpenAIRealtimeClientSecretResponse> | undefined, |
| 34 | fallbackModel: OpenAIRealtimeModel, |
| 35 | ): RealtimeToken { |
| 36 | // Validate shape before dereferencing — the API could return an error |
| 37 | // envelope with 200 status, or a partial response under protocol drift. |
| 38 | if ( |
| 39 | !data || |
| 40 | typeof data.value !== 'string' || |
| 41 | typeof data.expires_at !== 'number' || |
| 42 | !Number.isFinite(data.expires_at) |
| 43 | ) { |
| 44 | throw new Error( |
| 45 | 'OpenAI realtime client secret response missing or malformed `value`/`expires_at`', |
| 46 | ) |
| 47 | } |
| 48 | |
| 49 | return { |
| 50 | provider: 'openai', |
| 51 | token: data.value, |
| 52 | expiresAt: data.expires_at * 1000, |
| 53 | config: { |
| 54 | model: data.session?.model ?? fallbackModel, |
| 55 | }, |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | /** |
| 60 | * Creates an OpenAI realtime token adapter. |
no outgoing calls
no test coverage detected