Files
Yumi/src/providers/Environment.ts
T

78 lines
2.3 KiB
TypeScript
Raw Normal View History

2022-06-06 14:59:53 +07:00
import * as path from 'path';
import * as dotenv from 'dotenv';
2021-09-14 09:56:11 -07:00
2022-06-06 14:59:53 +07:00
import Logger from '../libs/Logger';
2021-09-14 09:56:11 -07:00
2022-06-06 14:59:53 +07:00
const requiredENV = ['NODE_ENV', 'DATABASE_URL', 'DISCORD_TOKEN', 'PRIVATE_BOT', 'OSU_API_KEY'];
2021-09-14 09:56:11 -07:00
class Environment {
public init(): void {
2022-06-06 14:59:53 +07:00
dotenv.config({ path: path.resolve(__dirname, '../../.env') });
2021-09-14 09:56:11 -07:00
for (let param of requiredENV) {
if (this.isUndefinedOrEmpty(process.env[param]))
throw new Error(`.env ${param} is undefined`);
}
// NODE_ENV Checks
2022-06-06 14:59:53 +07:00
if (this.get().NODE_ENV != 'production' && this.get().NODE_ENV != 'development')
2021-09-14 09:56:11 -07:00
throw new Error('.env NODE_ENV must be either "production" or "development"');
// TODO: Discord token check
Logger.log('info', `Running in ${process.env.NODE_ENV} environment`);
}
public get(): any {
const NODE_ENV = process.env.NODE_ENV;
const DISCORD_TOKEN = process.env.DISCORD_TOKEN;
2021-09-18 05:19:56 -07:00
const DEVELOPER_IDS = process.env.DEVELOPER_IDS;
const PRIVATE_BOT = process.env.PRIVATE_BOT;
2022-06-29 19:59:53 +07:00
const SUPPORT_URL = process.env.SUPPORT_URL;
2021-09-19 04:03:13 -07:00
2022-08-26 06:36:45 +07:00
const WEB_HOST = process.env.WEB_HOST;
const WEB_PORT = process.env.WEB_PORT;
2021-09-19 04:03:13 -07:00
const OSU_API_KEY = process.env.OSU_API_KEY;
2022-01-30 21:35:19 +07:00
const YOUTUBE_COOKIE_BASE64 = process.env.YOUTUBE_COOKIE_BASE64;
2022-06-06 14:59:53 +07:00
2022-07-01 20:59:35 +07:00
const SPOTIFY_CLIENT_ID = process.env.SPOTIFY_CLIENT_ID;
const SPOTIFY_CLIENT_SECRET= process.env.SPOTIFY_CLIENT_SECRET;
const SPOTIFY_REFRESH_TOKEN= process.env.SPOTIFY_REFRESH_TOKEN;
const SPOTIFY_CLIENT_MARKET= process.env.SPOTIFY_CLIENT_MARKET;
2021-09-14 09:56:11 -07:00
return {
NODE_ENV,
2021-09-18 05:19:56 -07:00
DISCORD_TOKEN,
DEVELOPER_IDS,
2021-09-19 04:03:13 -07:00
PRIVATE_BOT,
2022-06-29 19:59:53 +07:00
SUPPORT_URL,
2021-09-19 04:03:13 -07:00
2022-08-26 06:36:45 +07:00
WEB_HOST,
WEB_PORT,
2022-01-30 21:35:19 +07:00
OSU_API_KEY,
2022-07-01 20:59:35 +07:00
YOUTUBE_COOKIE_BASE64,
SPOTIFY_CLIENT_ID,
SPOTIFY_CLIENT_SECRET,
SPOTIFY_REFRESH_TOKEN,
SPOTIFY_CLIENT_MARKET
2021-09-14 09:56:11 -07:00
};
}
private isUndefinedOrEmpty(value: String | undefined): boolean {
2022-06-06 14:59:53 +07:00
if (typeof value === 'undefined') return true;
2021-09-14 09:56:11 -07:00
2022-06-06 14:59:53 +07:00
if (value === undefined) return true;
2021-09-14 09:56:11 -07:00
2022-06-06 14:59:53 +07:00
if (value === '') return true;
2021-09-14 09:56:11 -07:00
return false;
}
}
export default new Environment();