fix(ci): repair voice-call provider resolution typing

This commit is contained in:
Peter Steinberger
2026-04-04 06:11:20 +01:00
parent 18016e7546
commit 026ca40be9
3 changed files with 25 additions and 12 deletions

View File

@@ -5,11 +5,6 @@ type AutoSelectableProvider = {
autoSelectOrder?: number;
};
type ConfigurableProvider<TConfig, TFullConfig> = AutoSelectableProvider & {
resolveConfig?: (params: { cfg: TFullConfig; rawConfig: Record<string, unknown> }) => TConfig;
isConfigured: (params: { cfg: TFullConfig | undefined; providerConfig: TConfig }) => boolean;
};
export type ResolvedConfiguredProvider<TProvider, TConfig> =
| {
ok: true;
@@ -27,7 +22,7 @@ export type ResolvedConfiguredProvider<TProvider, TConfig> =
export function resolveConfiguredCapabilityProvider<
TConfig,
TFullConfig,
TProvider extends ConfigurableProvider<TConfig, TFullConfig>,
TProvider extends AutoSelectableProvider,
>(params: {
configuredProviderId?: string;
providerConfigs?: Record<string, Record<string, unknown> | undefined>;
@@ -35,6 +30,16 @@ export function resolveConfiguredCapabilityProvider<
cfgForResolve: TFullConfig;
getConfiguredProvider: (providerId: string | undefined) => TProvider | undefined;
listProviders: () => Iterable<TProvider>;
resolveProviderConfig: (params: {
provider: TProvider;
cfg: TFullConfig;
rawConfig: Record<string, unknown>;
}) => TConfig;
isProviderConfigured: (params: {
provider: TProvider;
cfg: TFullConfig | undefined;
providerConfig: TConfig;
}) => boolean;
}): ResolvedConfiguredProvider<TProvider, TConfig> {
const selection = selectConfiguredOrAutoProvider({
configuredProviderId: params.configuredProviderId,
@@ -63,13 +68,13 @@ export function resolveConfiguredCapabilityProvider<
configuredProviderId: selection.configuredProviderId,
providerConfigs: params.providerConfigs,
});
const providerConfig =
provider.resolveConfig?.({
cfg: params.cfgForResolve,
rawConfig: rawProviderConfig,
}) ?? (rawProviderConfig as TConfig);
const providerConfig = params.resolveProviderConfig({
provider,
cfg: params.cfgForResolve,
rawConfig: rawProviderConfig,
});
if (!provider.isConfigured({ cfg: params.cfg, providerConfig })) {
if (!params.isProviderConfigured({ provider, cfg: params.cfg, providerConfig })) {
return {
ok: false,
code: "provider-not-configured",

View File

@@ -161,6 +161,10 @@ async function resolveRealtimeProvider(params: {
cfgForResolve: params.fullConfig,
getConfiguredProvider: (providerId) => getRealtimeVoiceProvider(providerId, params.fullConfig),
listProviders: () => listRealtimeVoiceProviders(params.fullConfig),
resolveProviderConfig: ({ provider, cfg, rawConfig }) =>
provider.resolveConfig?.({ cfg, rawConfig }) ?? rawConfig,
isProviderConfigured: ({ provider, cfg, providerConfig }) =>
provider.isConfigured({ cfg, providerConfig }),
});
if (!resolution.ok && resolution.code === "missing-configured-provider") {
throw new Error(

View File

@@ -170,6 +170,10 @@ export class VoiceCallWebhookServer {
getConfiguredProvider: (providerId) =>
getRealtimeTranscriptionProvider(providerId, pluginConfig),
listProviders: () => listRealtimeTranscriptionProviders(pluginConfig),
resolveProviderConfig: ({ provider, cfg, rawConfig }) =>
provider.resolveConfig?.({ cfg, rawConfig }) ?? rawConfig,
isProviderConfigured: ({ provider, cfg, providerConfig }) =>
provider.isConfigured({ cfg, providerConfig }),
});
if (!resolution.ok && resolution.code === "missing-configured-provider") {
console.warn(