| /** | |
| * Shared bridge auth/URL resolution. Consolidates the ant-only | |
| * CLAUDE_BRIDGE_* dev overrides that were previously copy-pasted across | |
| * a dozen files — inboundAttachments, BriefTool/upload, bridgeMain, | |
| * initReplBridge, remoteBridgeCore, daemon workers, /rename, | |
| * /remote-control. | |
| * | |
| * Two layers: *Override() returns the ant-only env var (or undefined); | |
| * the non-Override versions fall through to the real OAuth store/config. | |
| * Callers that compose with a different auth source (e.g. daemon workers | |
| * using IPC auth) use the Override getters directly. | |
| */ | |
| import { getOauthConfig } from '../constants/oauth.js' | |
| import { getClaudeAIOAuthTokens } from '../utils/auth.js' | |
| /** Ant-only dev override: CLAUDE_BRIDGE_OAUTH_TOKEN, else undefined. */ | |
| export function getBridgeTokenOverride(): string | undefined { | |
| return ( | |
| (process.env.USER_TYPE === 'ant' && | |
| process.env.CLAUDE_BRIDGE_OAUTH_TOKEN) || | |
| undefined | |
| ) | |
| } | |
| /** Ant-only dev override: CLAUDE_BRIDGE_BASE_URL, else undefined. */ | |
| export function getBridgeBaseUrlOverride(): string | undefined { | |
| return ( | |
| (process.env.USER_TYPE === 'ant' && process.env.CLAUDE_BRIDGE_BASE_URL) || | |
| undefined | |
| ) | |
| } | |
| /** | |
| * Access token for bridge API calls: dev override first, then the OAuth | |
| * keychain. Undefined means "not logged in". | |
| */ | |
| export function getBridgeAccessToken(): string | undefined { | |
| return getBridgeTokenOverride() ?? getClaudeAIOAuthTokens()?.accessToken | |
| } | |
| /** | |
| * Base URL for bridge API calls: dev override first, then the production | |
| * OAuth config. Always returns a URL. | |
| */ | |
| export function getBridgeBaseUrl(): string { | |
| return getBridgeBaseUrlOverride() ?? getOauthConfig().BASE_API_URL | |
| } | |