2020-05-03 03:47:24 +02:00
|
|
|
import { Module } from "@nestjs/common";
|
2020-09-05 23:35:53 +02:00
|
|
|
import { ConfigModule as NestConfigModule } from "@nestjs/config";
|
2023-05-07 13:36:55 +02:00
|
|
|
import * as Joi from "joi";
|
2020-05-03 03:47:24 +02:00
|
|
|
|
|
|
|
|
@Module({
|
|
|
|
|
imports: [
|
|
|
|
|
NestConfigModule.forRoot({
|
|
|
|
|
isGlobal: true,
|
|
|
|
|
validationSchema: Joi.object({
|
|
|
|
|
// Application
|
|
|
|
|
PORT: Joi.number().default(3000),
|
|
|
|
|
APP_URL: Joi.string().default("http://localhost:3000"),
|
|
|
|
|
|
|
|
|
|
// JWT
|
|
|
|
|
JWT_SECRET: Joi.string().required(),
|
2020-05-03 20:57:03 +02:00
|
|
|
JWT_ALGORITHM: Joi.string()
|
|
|
|
|
.default("HS256")
|
|
|
|
|
.allow("HS256", "HS384", "HS512"),
|
2020-09-05 23:35:53 +02:00
|
|
|
|
|
|
|
|
JWT_EXPIRATION_TIME: Joi.string().default("15m"),
|
|
|
|
|
SESSION_EXPIRATION_TIME: Joi.string().default("1y"),
|
2020-05-03 03:47:24 +02:00
|
|
|
|
|
|
|
|
// Spotify
|
|
|
|
|
SPOTIFY_CLIENT_ID: Joi.string().required(),
|
|
|
|
|
SPOTIFY_CLIENT_SECRET: Joi.string().required(),
|
2020-11-28 18:28:38 +01:00
|
|
|
SPOTIFY_FETCH_INTERVAL_SEC: Joi.number().default(60),
|
2021-11-21 15:53:27 +01:00
|
|
|
SPOTIFY_UPDATE_INTERVAL_SEC: Joi.number().default(60),
|
2020-05-03 03:47:24 +02:00
|
|
|
SPOTIFY_WEB_API_URL: Joi.string().default("https://api.spotify.com/"),
|
|
|
|
|
SPOTIFY_AUTH_API_URL: Joi.string().default(
|
2023-09-16 13:02:19 +02:00
|
|
|
"https://accounts.spotify.com/",
|
2020-05-03 03:47:24 +02:00
|
|
|
),
|
2020-05-03 20:18:57 +02:00
|
|
|
SPOTIFY_USER_FILTER: Joi.string(),
|
2020-05-03 03:47:24 +02:00
|
|
|
|
|
|
|
|
// DB
|
|
|
|
|
DB_HOST: Joi.string().required(),
|
|
|
|
|
DB_USERNAME: Joi.string().required(),
|
|
|
|
|
DB_PASSWORD: Joi.string().required(),
|
|
|
|
|
DB_DATABASE: Joi.string().required(),
|
2022-06-11 18:47:04 +02:00
|
|
|
DB_POOL_MAX: Joi.number().default(50),
|
2020-11-17 22:26:03 +01:00
|
|
|
|
|
|
|
|
// Sentry (Optional)
|
|
|
|
|
SENTRY_ENABLED: Joi.boolean().default(false),
|
|
|
|
|
SENTRY_DSN: Joi.string().when("SENTRY_ENABLED", {
|
|
|
|
|
is: Joi.valid(true),
|
|
|
|
|
then: Joi.required(),
|
|
|
|
|
}),
|
2020-11-21 19:55:53 +01:00
|
|
|
|
|
|
|
|
// Prometheus for Metrics (Optional)
|
|
|
|
|
PROMETHEUS_ENABLED: Joi.boolean().default(false),
|
2020-12-06 03:03:33 +01:00
|
|
|
PROMETHEUS_BASIC_AUTH: Joi.boolean().default(false),
|
|
|
|
|
PROMETHEUS_BASIC_AUTH_USERNAME: Joi.string().when(
|
|
|
|
|
"PROMETHEUS_BASIC_AUTH",
|
|
|
|
|
{
|
|
|
|
|
is: Joi.valid(true),
|
|
|
|
|
then: Joi.required(),
|
2023-09-16 13:02:19 +02:00
|
|
|
},
|
2020-12-06 03:03:33 +01:00
|
|
|
),
|
|
|
|
|
PROMETHEUS_BASIC_AUTH_PASSWORD: Joi.string().when(
|
|
|
|
|
"PROMETHEUS_BASIC_AUTH",
|
|
|
|
|
{
|
|
|
|
|
is: Joi.valid(true),
|
|
|
|
|
then: Joi.required(),
|
2023-09-16 13:02:19 +02:00
|
|
|
},
|
2020-12-06 03:03:33 +01:00
|
|
|
),
|
2020-05-03 03:47:24 +02:00
|
|
|
}),
|
|
|
|
|
}),
|
|
|
|
|
],
|
|
|
|
|
})
|
|
|
|
|
export class ConfigModule {}
|