diff options
| author | Max Isom <[email protected]> | 2021-09-19 19:50:25 -0400 |
|---|---|---|
| committer | Max Isom <[email protected]> | 2021-09-19 19:50:25 -0400 |
| commit | efcdeb78c8b690bc544dac1ed0be96a6693bcff6 (patch) | |
| tree | d4a453f92d928613c2f4209af7475190a093321d /src/services/config.ts | |
| parent | 79e7e88fab1ce05cf84abeba2e05300a93b4759c (diff) | |
| download | muse-efcdeb78c8b690bc544dac1ed0be96a6693bcff6.tar.xz muse-efcdeb78c8b690bc544dac1ed0be96a6693bcff6.zip | |
Reorg third party services & config
Diffstat (limited to 'src/services/config.ts')
| -rw-r--r-- | src/services/config.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/services/config.ts b/src/services/config.ts new file mode 100644 index 0000000..80b4a81 --- /dev/null +++ b/src/services/config.ts @@ -0,0 +1,36 @@ +import dotenv from 'dotenv'; +import {injectable} from 'inversify'; +import path from 'path'; +dotenv.config(); + +export const DATA_DIR = path.resolve(process.env.DATA_DIR ? process.env.DATA_DIR : './data'); + +const CONFIG_MAP = { + DISCORD_TOKEN: process.env.DISCORD_TOKEN, + YOUTUBE_API_KEY: process.env.YOUTUBE_API_KEY, + SPOTIFY_CLIENT_ID: process.env.SPOTIFY_CLIENT_ID, + SPOTIFY_CLIENT_SECRET: process.env.SPOTIFY_CLIENT_SECRET, + DATA_DIR, + CACHE_DIR: path.join(DATA_DIR, 'cache') +} as const; + +@injectable() +export default class Config { + readonly DISCORD_TOKEN!: string; + readonly YOUTUBE_API_KEY!: string; + readonly SPOTIFY_CLIENT_ID!: string; + readonly SPOTIFY_CLIENT_SECRET!: string; + readonly DATA_DIR!: string; + readonly CACHE_DIR!: string; + + constructor() { + for (const [key, value] of Object.entries(CONFIG_MAP)) { + if (typeof value === 'undefined') { + console.error(`Missing environment variable for ${key}`); + process.exit(1); + } + + this[key as keyof typeof CONFIG_MAP] = value; + } + } +} |
