* Translate the typed audio-adapter errors into a `ServerFnError` with a stable * `code`. Any other error is re-thrown untouched so the framework's default * 500 path handles it.
(err: unknown)
| 57 | * 500 path handles it. |
| 58 | */ |
| 59 | function rethrowAudioAdapterError(err: unknown): never { |
| 60 | if (err instanceof InvalidModelOverrideError) { |
| 61 | throw new ServerFnError('invalid_model_override', err.message, { |
| 62 | providerId: err.providerId, |
| 63 | requestedModel: err.requestedModel, |
| 64 | allowedModels: err.allowedModels, |
| 65 | }) |
| 66 | } |
| 67 | if (err instanceof UnknownProviderError) { |
| 68 | throw new ServerFnError('unknown_provider', err.message, { |
| 69 | providerId: err.providerId, |
| 70 | allowedProviders: err.allowedProviders, |
| 71 | }) |
| 72 | } |
| 73 | throw err |
| 74 | } |
| 75 | |
| 76 | const SPEECH_PROVIDER_SCHEMA = z |
| 77 | .enum(['openai', 'gemini', 'fal', 'grok', 'elevenlabs']) |