config.ts•2.32 kB
export type ApiConfig = {
openWeatherApiKey?: string;
googleApiKey?: string;
newsApiKey?: string;
githubToken?: string;
notionToken?: string;
trelloKey?: string;
trelloToken?: string;
spotifyClientId?: string;
spotifyClientSecret?: string;
twilioAccountSid?: string;
twilioAuthToken?: string;
unsplashAccessKey?: string;
};
export const loadConfig = (): ApiConfig => {
const fromEnv: ApiConfig = {
openWeatherApiKey: process.env.OPENWEATHER_API_KEY,
googleApiKey: process.env.GOOGLE_API_KEY,
newsApiKey: process.env.NEWS_API_KEY,
githubToken: process.env.GITHUB_TOKEN,
notionToken: process.env.NOTION_TOKEN,
trelloKey: process.env.TRELLO_KEY,
trelloToken: process.env.TRELLO_TOKEN,
spotifyClientId: process.env.SPOTIFY_CLIENT_ID,
spotifyClientSecret: process.env.SPOTIFY_CLIENT_SECRET,
twilioAccountSid: process.env.TWILIO_ACCOUNT_SID,
twilioAuthToken: process.env.TWILIO_AUTH_TOKEN,
unsplashAccessKey: process.env.UNSPLASH_ACCESS_KEY,
};
// Try optional JSON config
try {
const fs = require("fs");
const path = require("path");
const configPath = process.env.MUTI_MCPS_CONFIG || path.join(process.cwd(), "config", "api-configs.json");
if (fs.existsSync(configPath)) {
const json = JSON.parse(fs.readFileSync(configPath, "utf-8"));
const fromFile: ApiConfig = {
openWeatherApiKey: json.openWeatherApiKey || json.OPENWEATHER_API_KEY,
googleApiKey: json.googleApiKey || json.GOOGLE_API_KEY,
newsApiKey: json.newsApiKey || json.NEWS_API_KEY,
githubToken: json.githubToken || json.GITHUB_TOKEN,
notionToken: json.notionToken || json.NOTION_TOKEN,
trelloKey: json.trelloKey || json.TRELLO_KEY,
trelloToken: json.trelloToken || json.TRELLO_TOKEN,
spotifyClientId: json.spotifyClientId || json.SPOTIFY_CLIENT_ID,
spotifyClientSecret: json.spotifyClientSecret || json.SPOTIFY_CLIENT_SECRET,
twilioAccountSid: json.twilioAccountSid || json.TWILIO_ACCOUNT_SID,
twilioAuthToken: json.twilioAuthToken || json.TWILIO_AUTH_TOKEN,
unsplashAccessKey: json.unsplashAccessKey || json.UNSPLASH_ACCESS_KEY,
};
return { ...fromFile, ...fromEnv } as ApiConfig;
}
} catch {
// ignore
}
return fromEnv;
};