53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
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<string, string>,
|
|
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")}`;
|
|
}
|