Files
yara724api/src/core/config/config.schema.ts
2026-06-20 11:53:18 +03:30

114 lines
2.7 KiB
TypeScript

import {
IsBooleanString,
IsEnum,
IsNumber,
IsNumberString,
IsOptional,
IsPositive,
IsString,
IsUrl,
Length,
Matches,
Max,
Min,
MinLength,
} from "class-validator";
import { StringValue } from "ms";
export enum Environment {
Development = "development",
Production = "production",
}
export class EnvironmentVariables {
@IsEnum(Environment, {
message: "NODE_ENV should be development or production",
})
NODE_ENV: Environment;
// --------------------------------------------------------- //
@IsNumber(
{
allowNaN: false,
allowInfinity: false,
},
{
message: "PORT must be a valid number",
},
)
@IsPositive({ message: "PORT must be positive" })
@Min(0, { message: "PORT must be between 0 and 65535" })
@Max(65535, { message: "PORT must be between 0 and 65535" })
PORT: number;
// --------------------------------------------------------- //
@IsString({ message: "MONGO_URI must be string" })
@IsUrl(
{
require_tld: false,
protocols: ["mongodb", "mongodb+srv"],
},
{
message: "MONGO_URI must be in the correct format (mongodb://...)",
},
)
MONGO_URI: string;
// --------------------------------------------------------- //
@IsBooleanString({ message: "MONGO_TLS must be boolean" })
MONGO_TLS: string;
// --------------------------------------------------------- //
@IsBooleanString({ message: "MONGO_TLS_ALLOW_INVALID_CERTS must be boolean" })
MONGO_TLS_ALLOW_INVALID_CERTS: string;
// --------------------------------------------------------- //
@IsString({ message: "JWT_SECRET must be string" })
@MinLength(32, {
message: "JWT_SECRET must be at least 32 characters",
})
JWT_SECRET: string;
// --------------------------------------------------------- //
@Matches(/^\d+(ms|s|m|h|d|w|y)$/, {
message: "JWT_EXPIRY must be in the correct format",
})
JWT_EXPIRY: StringValue;
// --------------------------------------------------------- //
@IsString({ message: "HASH_PEPPER must be string" })
@IsOptional()
HASH_PEPPER?: string;
// --------------------------------------------------------- //
@IsOptional()
@IsString({ message: "CLAIM_V2_TOTAL_PAYMENT_CAP_ENABLED must be string" })
CLAIM_V2_TOTAL_PAYMENT_CAP_ENABLED?: string;
// --------------------------------------------------------- //
@IsOptional()
@IsNumber(
{
allowNaN: false,
allowInfinity: false,
},
{
message: "CLAIM_V2_TOTAL_PAYMENT_CAP_TOMAN must be a valid number",
},
)
@IsPositive({
message: "CLAIM_V2_TOTAL_PAYMENT_CAP_TOMAN must be a positive number",
})
CLAIM_V2_TOTAL_PAYMENT_CAP_TOMAN?: number;
// --------------------------------------------------------- //
}