diff --git a/src/lib/index.ts b/src/lib/index.ts index 4c84dc85c..cbaa630fa 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -64,6 +64,8 @@ export type { OpenTelemetryConfig, } from "./types/observability.js"; +export { buildObservabilityConfigFromEnv } from "./utils/observabilityHelpers.js"; + import { initializeOpenTelemetry, shutdownOpenTelemetry, diff --git a/src/lib/session/globalSessionState.ts b/src/lib/session/globalSessionState.ts index 8874d186e..9a9453b6b 100644 --- a/src/lib/session/globalSessionState.ts +++ b/src/lib/session/globalSessionState.ts @@ -4,40 +4,7 @@ import type { ConversationMemoryConfig, NeurolinkOptions, } from "../types/conversation.js"; -import type { ObservabilityConfig } from "../types/observability.js"; - -/** - * Build observability config from environment variables - * Used by CLI to configure NeuroLink instances - */ -function buildObservabilityConfigFromEnv(): ObservabilityConfig | undefined { - const langfuseEnabled = - process.env.LANGFUSE_ENABLED?.trim().toLowerCase() === "true"; - const publicKey = process.env.LANGFUSE_PUBLIC_KEY?.trim(); - const secretKey = process.env.LANGFUSE_SECRET_KEY?.trim(); - - if (!langfuseEnabled || !publicKey || !secretKey) { - return undefined; - } - - return { - langfuse: { - enabled: langfuseEnabled, - publicKey, - secretKey, - baseUrl: - process.env.LANGFUSE_BASE_URL?.trim() || "https://cloud.langfuse.com", - environment: - process.env.LANGFUSE_ENVIRONMENT?.trim() || - process.env.PUBLIC_APP_ENVIRONMENT?.trim() || - "dev", - release: - process.env.PUBLIC_APP_VERSION?.trim() || - process.env.npm_package_version?.trim() || - "v1.0.0", - }, - }; -} +import { buildObservabilityConfigFromEnv } from "../utils/observabilityHelpers.js"; // Define a specific type for session variable values type SessionVariableValue = string | number | boolean; diff --git a/src/lib/utils/observabilityHelpers.ts b/src/lib/utils/observabilityHelpers.ts new file mode 100644 index 000000000..21295bcbe --- /dev/null +++ b/src/lib/utils/observabilityHelpers.ts @@ -0,0 +1,58 @@ +/** + * Utility for building observability configs from environment variables + */ + +import type { ObservabilityConfig } from "../types/observability.js"; + +/** + * Build observability config from environment variables + * + * Reads Langfuse configuration from environment: + * - LANGFUSE_ENABLED: Enable/disable Langfuse (must be "true") + * - LANGFUSE_PUBLIC_KEY: Your Langfuse public key (required) + * - LANGFUSE_SECRET_KEY: Your Langfuse secret key (required) + * - LANGFUSE_BASE_URL: Langfuse server URL (default: https://cloud.langfuse.com) + * - LANGFUSE_ENVIRONMENT: Environment name (default: dev) + * - PUBLIC_APP_VERSION: Release/version identifier (default: v1.0.0) + * + * @returns ObservabilityConfig if all required env vars are set, undefined otherwise + * + * @example + * ```typescript + * import { NeuroLink, buildObservabilityConfigFromEnv } from '@juspay/neurolink'; + * + * const neurolink = new NeuroLink({ + * observability: buildObservabilityConfigFromEnv() + * }); + * ``` + */ +export function buildObservabilityConfigFromEnv(): + | ObservabilityConfig + | undefined { + const langfuseEnabled = + process.env.LANGFUSE_ENABLED?.trim().toLowerCase() === "true"; + const publicKey = process.env.LANGFUSE_PUBLIC_KEY?.trim(); + const secretKey = process.env.LANGFUSE_SECRET_KEY?.trim(); + + if (!langfuseEnabled || !publicKey || !secretKey) { + return undefined; + } + + return { + langfuse: { + enabled: langfuseEnabled, + publicKey, + secretKey, + baseUrl: + process.env.LANGFUSE_BASE_URL?.trim() || "https://cloud.langfuse.com", + environment: + process.env.LANGFUSE_ENVIRONMENT?.trim() || + process.env.PUBLIC_APP_ENVIRONMENT?.trim() || + "dev", + release: + process.env.PUBLIC_APP_VERSION?.trim() || + process.env.npm_package_version?.trim() || + "v1.0.0", + }, + }; +}