/ src / utils / model / providers.ts
providers.ts
 1  import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/index.js'
 2  import { isEnvTruthy } from '../envUtils.js'
 3  
 4  export type APIProvider = 'firstParty' | 'bedrock' | 'vertex' | 'foundry'
 5  
 6  export function getAPIProvider(): APIProvider {
 7    return isEnvTruthy(process.env.CLAUDE_CODE_USE_BEDROCK)
 8      ? 'bedrock'
 9      : isEnvTruthy(process.env.CLAUDE_CODE_USE_VERTEX)
10        ? 'vertex'
11        : isEnvTruthy(process.env.CLAUDE_CODE_USE_FOUNDRY)
12          ? 'foundry'
13          : 'firstParty'
14  }
15  
16  export function getAPIProviderForStatsig(): AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS {
17    return getAPIProvider() as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
18  }
19  
20  /**
21   * Check if ANTHROPIC_BASE_URL is a first-party Anthropic API URL.
22   * Returns true if not set (default API) or points to api.anthropic.com
23   * (or api-staging.anthropic.com for ant users).
24   */
25  export function isFirstPartyAnthropicBaseUrl(): boolean {
26    const baseUrl = process.env.ANTHROPIC_BASE_URL
27    if (!baseUrl) {
28      return true
29    }
30    try {
31      const host = new URL(baseUrl).host
32      const allowedHosts = ['api.anthropic.com']
33      if (process.env.USER_TYPE === 'ant') {
34        allowedHosts.push('api-staging.anthropic.com')
35      }
36      return allowedHosts.includes(host)
37    } catch {
38      return false
39    }
40  }