-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathauth.ts
More file actions
90 lines (76 loc) · 2.5 KB
/
auth.ts
File metadata and controls
90 lines (76 loc) · 2.5 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import {
AI_PROVIDER_PRIORITY,
DEFAULT_AI_PROVIDER,
getAiProviderDefinition,
type AiProviderId,
} from 'cli/ai/providers';
import { readCliConfig, updateCliConfigWithPartial } from 'cli/lib/cli-config/core';
async function getPreferredReadyProvider(
exclude?: AiProviderId
): Promise< AiProviderId | undefined > {
for ( const provider of AI_PROVIDER_PRIORITY ) {
if ( provider === exclude ) {
continue;
}
const definition = getAiProviderDefinition( provider );
if ( ( await definition.isVisible() ) && ( await definition.isReady() ) ) {
return provider;
}
}
return undefined;
}
export async function getAvailableAiProviders(): Promise< AiProviderId[] > {
const providers: AiProviderId[] = [];
for ( const provider of AI_PROVIDER_PRIORITY ) {
if ( await getAiProviderDefinition( provider ).isVisible() ) {
providers.push( provider );
}
}
return providers;
}
export async function isAiProviderReady( provider: AiProviderId ): Promise< boolean > {
return getAiProviderDefinition( provider ).isReady();
}
export async function resolveUnavailableAiProvider(
provider: AiProviderId
): Promise< AiProviderId | undefined > {
const definition = getAiProviderDefinition( provider );
if ( ( await definition.isReady() ) || ! definition.autoFallbackWhenUnavailable ) {
return undefined;
}
return getPreferredReadyProvider( provider );
}
export async function resolveInitialAiProvider(): Promise< AiProviderId > {
const { aiProvider: savedProvider } = await readCliConfig();
if ( savedProvider ) {
const definition = getAiProviderDefinition( savedProvider );
if (
( await definition.isVisible() ) &&
( ( await definition.isReady() ) || ! definition.autoFallbackWhenUnavailable )
) {
return savedProvider;
}
const fallbackProvider = await getPreferredReadyProvider( savedProvider );
if ( fallbackProvider ) {
return fallbackProvider;
}
if ( await definition.isVisible() ) {
return savedProvider;
}
}
return ( await getPreferredReadyProvider() ) ?? DEFAULT_AI_PROVIDER;
}
export async function saveSelectedAiProvider( provider: AiProviderId ): Promise< void > {
await updateCliConfigWithPartial( { aiProvider: provider } );
}
export async function prepareAiProvider(
provider: AiProviderId,
options?: { force?: boolean }
): Promise< void > {
await getAiProviderDefinition( provider ).prepare( options );
}
export async function resolveAiEnvironment(
provider: AiProviderId
): Promise< Record< string, string > > {
return getAiProviderDefinition( provider ).resolveEnv();
}