su2a / frontend /src /utils /ccswitchImport.ts
cjovs's picture
PG local + bucket backup/restore, DB: su2adb
126ef31 verified
Raw
History Blame Contribute Delete
1.83 kB
import type { GroupPlatform } from '@/types'
export const OPENAI_CC_SWITCH_CODEX_MODEL = 'gpt-5.4'
export type CcSwitchClientType = 'claude' | 'gemini'
export interface CcSwitchImportConfig {
app: string
endpoint: string
model?: string
}
export interface CcSwitchImportDeeplinkInput {
baseUrl: string
platform?: GroupPlatform | null
clientType: CcSwitchClientType
providerName: string
apiKey: string
usageScript: string
}
export function resolveCcSwitchImportConfig(
platform: GroupPlatform | undefined | null,
clientType: CcSwitchClientType,
baseUrl: string
): CcSwitchImportConfig {
switch (platform || 'anthropic') {
case 'antigravity':
return {
app: clientType === 'gemini' ? 'gemini' : 'claude',
endpoint: `${baseUrl}/antigravity`
}
case 'openai':
return {
app: 'codex',
endpoint: baseUrl,
model: OPENAI_CC_SWITCH_CODEX_MODEL
}
case 'gemini':
return {
app: 'gemini',
endpoint: baseUrl
}
default:
return {
app: 'claude',
endpoint: baseUrl
}
}
}
export function buildCcSwitchImportDeeplink(input: CcSwitchImportDeeplinkInput): string {
const config = resolveCcSwitchImportConfig(input.platform, input.clientType, input.baseUrl)
const entries: [string, string][] = [
['resource', 'provider'],
['app', config.app],
['name', input.providerName],
['homepage', input.baseUrl],
['endpoint', config.endpoint],
['apiKey', input.apiKey],
['configFormat', 'json'],
['usageEnabled', 'true'],
['usageScript', btoa(input.usageScript)],
['usageAutoInterval', '30']
]
if (config.model) {
entries.splice(2, 0, ['model', config.model])
}
return `ccswitch://v1/import?${new URLSearchParams(entries).toString()}`
}