diff --git a/libs/sdk-js/src/client.ts b/libs/sdk-js/src/client.ts index 133da19b3..48cdc3368 100644 --- a/libs/sdk-js/src/client.ts +++ b/libs/sdk-js/src/client.ts @@ -31,6 +31,35 @@ import { OnConflictBehavior, } from "./types.js"; +/** + * Get the API key from the environment. + * Precedence: + * 1. explicit argument + * 2. LANGGRAPH_API_KEY + * 3. LANGSMITH_API_KEY + * 4. LANGCHAIN_API_KEY + * + * @param apiKey - Optional API key provided as an argument + * @returns The API key if found, otherwise undefined + */ +export function getApiKey(apiKey?: string): string | undefined { + if (apiKey) { + return apiKey; + } + + const prefixes = ["LANGGRAPH", "LANGSMITH", "LANGCHAIN"]; + + for (const prefix of prefixes) { + const envKey = process.env[`${prefix}_API_KEY`]; + if (envKey) { + // Remove surrounding quotes + return envKey.trim().replace(/^["']|["']$/g, ""); + } + } + + return undefined; +} + interface ClientConfig { apiUrl?: string; apiKey?: string; @@ -58,12 +87,7 @@ class BaseClient { this.timeoutMs = config?.timeoutMs || 12_000; this.apiUrl = config?.apiUrl || "http://localhost:8123"; this.defaultHeaders = config?.defaultHeaders || {}; - if (config?.apiKey != null) { - this.defaultHeaders["X-Api-Key"] = config.apiKey; - } else if (process.env.LANGCHAIN_API_KEY) { - // Attempt to read the API key from the environment - this.defaultHeaders["X-Api-Key"] = process.env.LANGCHAIN_API_KEY; - } + this.defaultHeaders["X-Api-Key"] = getApiKey(config?.apiKey); } protected prepareFetchOptions(