aboutsummaryrefslogtreecommitdiff
path: root/src/services/config.ts
diff options
context:
space:
mode:
authorMax Isom <[email protected]>2021-09-19 19:50:25 -0400
committerMax Isom <[email protected]>2021-09-19 19:50:25 -0400
commitefcdeb78c8b690bc544dac1ed0be96a6693bcff6 (patch)
treed4a453f92d928613c2f4209af7475190a093321d /src/services/config.ts
parent79e7e88fab1ce05cf84abeba2e05300a93b4759c (diff)
downloadmuse-efcdeb78c8b690bc544dac1ed0be96a6693bcff6.tar.xz
muse-efcdeb78c8b690bc544dac1ed0be96a6693bcff6.zip
Reorg third party services & config
Diffstat (limited to 'src/services/config.ts')
-rw-r--r--src/services/config.ts36
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;
+ }
+ }
+}