export type Target = "prod" | "dev" | "local"; export type ClientName = "chatgpt" | "claude" | "inspector"; export interface Connector { name: ClientName; redirectUri: string; } export interface Environment { target: Target; mcpUrl: string; authorizationServer: string; authorizeClientId: string; connectors: Connector[]; } const CONNECTORS: Connector[] = [ { name: "chatgpt", redirectUri: "https://chatgpt.com/connector_platform_oauth_redirect" }, { name: "claude", redirectUri: "https://claude.ai/api/mcp/auth_callback" }, ]; export const ENVIRONMENTS: Record = { prod: { target: "prod", mcpUrl: "https://mcp.tomtom.com/maps", authorizationServer: "https://oauth.my.tomtom.com", authorizeClientId: "https://mcp.tomtom.com", connectors: CONNECTORS, }, dev: { target: "dev", mcpUrl: "https://mcp-dev.api-system.tomtom.com/maps", authorizationServer: "https://oauth.my.tomtom.com", authorizeClientId: "https://mcp-dev.api-system.tomtom.com", connectors: CONNECTORS, }, local: { target: "local", mcpUrl: "http://localhost:3000/mcp", authorizationServer: "https://oauth.my.tomtom.com", authorizeClientId: "https://mcp-dev.api-system.tomtom.com/maps/inspector-client.json", connectors: [{ name: "inspector", redirectUri: "http://127.0.0.1:8976/cb" }], }, }; const TARGET_VARIABLE = "OAUTH_E2E_TARGET"; export function environmentFromEnv(env: NodeJS.ProcessEnv = process.env): Environment { const target = env[TARGET_VARIABLE] ?? "prod"; if (!(target in ENVIRONMENTS)) { throw new Error( `${TARGET_VARIABLE} is "${target}"; use one of ${Object.keys(ENVIRONMENTS).join(", ")}` ); } return ENVIRONMENTS[target as Target]; }