import path from "node:path"; import { config as loadDotEnv } from "dotenv"; import type { AtlassianConfig } from "./types.js"; function normalizeBaseUrl(value: string) { return value.replace(/\/+$/, ""); } function readRequired(env: NodeJS.ProcessEnv, key: string) { const value = env[key]?.trim(); if (!value) { throw new Error(`Missing required environment variable: ${key}`); } return value; } export function loadConfig( env: NodeJS.ProcessEnv = process.env, options?: { cwd?: string; }, ): AtlassianConfig { loadDotEnv({ path: path.resolve(options?.cwd ?? process.cwd(), ".env"), processEnv: env as Record, override: false, }); const baseUrl = normalizeBaseUrl(readRequired(env, "ATLASSIAN_BASE_URL")); return { baseUrl, jiraBaseUrl: normalizeBaseUrl(env.ATLASSIAN_JIRA_BASE_URL?.trim() || baseUrl), confluenceBaseUrl: normalizeBaseUrl(env.ATLASSIAN_CONFLUENCE_BASE_URL?.trim() || baseUrl), email: readRequired(env, "ATLASSIAN_EMAIL"), apiToken: readRequired(env, "ATLASSIAN_API_TOKEN"), defaultProject: env.ATLASSIAN_DEFAULT_PROJECT?.trim() || undefined, defaultSpace: env.ATLASSIAN_DEFAULT_SPACE?.trim() || undefined, }; } export function createBasicAuthHeader(config: { email: string; apiToken: string; [key: string]: unknown; }) { return `Basic ${Buffer.from(`${config.email}:${config.apiToken}`).toString("base64")}`; }