update config.ts with variables to implement rateLiiting, apiVersioning and client userAgent
This commit is contained in:
		@@ -2,6 +2,11 @@ export interface IConfig {
 | 
			
		||||
  port: number;
 | 
			
		||||
  mongodbUri: string;
 | 
			
		||||
  nodeEnv: string;
 | 
			
		||||
  apiVersion: string;
 | 
			
		||||
  rateLimitWindowMs: number;
 | 
			
		||||
  rateLimitMaxRequests: number;
 | 
			
		||||
  requestTimeoutMs: number;
 | 
			
		||||
  userAgent: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Config implements IConfig {
 | 
			
		||||
@@ -10,12 +15,21 @@ class Config implements IConfig {
 | 
			
		||||
  public readonly port: number;
 | 
			
		||||
  public readonly mongodbUri: string;
 | 
			
		||||
  public readonly nodeEnv: string;
 | 
			
		||||
 | 
			
		||||
  public readonly apiVersion: string;
 | 
			
		||||
  public readonly rateLimitWindowMs: number;
 | 
			
		||||
  public readonly rateLimitMaxRequests: number;
 | 
			
		||||
  public readonly requestTimeoutMs: number;
 | 
			
		||||
  public readonly userAgent: string;
 | 
			
		||||
 | 
			
		||||
  private constructor() {
 | 
			
		||||
    this.port = parseInt(process.env.PORT || '4000', 10);
 | 
			
		||||
    this.port = parseInt(process.env.PORT || '3000', 10);
 | 
			
		||||
    this.mongodbUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/dailytrends';
 | 
			
		||||
    this.nodeEnv = process.env.NODE_ENV || 'development';
 | 
			
		||||
    this.apiVersion = process.env.API_VERSION || 'v1';
 | 
			
		||||
    this.rateLimitWindowMs = parseInt(process.env.RATE_LIMIT_WINDOW_MS || '900000', 10);
 | 
			
		||||
    this.rateLimitMaxRequests = parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '100', 10);
 | 
			
		||||
    this.requestTimeoutMs = parseInt(process.env.REQUEST_TIMEOUT_MS || '10000', 10);
 | 
			
		||||
    this.userAgent = process.env.USER_AGENT || 'DailyTrends-Bot/1.0';
 | 
			
		||||
 | 
			
		||||
    this.validateConfig();
 | 
			
		||||
  }
 | 
			
		||||
@@ -31,6 +45,22 @@ class Config implements IConfig {
 | 
			
		||||
    if (!this.mongodbUri) {
 | 
			
		||||
      throw new Error('MONGODB_URI is required');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.port < 1 || this.port > 65535) {
 | 
			
		||||
      throw new Error('PORT must be between 1 and 65535');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.rateLimitWindowMs < 1000) {
 | 
			
		||||
      throw new Error('RATE_LIMIT_WINDOW_MS must be at least 1000ms');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.rateLimitMaxRequests < 1) {
 | 
			
		||||
      throw new Error('RATE_LIMIT_MAX_REQUESTS must be at least 1');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (this.requestTimeoutMs < 1000) {
 | 
			
		||||
      throw new Error('REQUEST_TIMEOUT_MS must be at least 1000ms');
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public isDevelopment(): boolean {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user