File size: 1,516 Bytes
f0743f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { RateLimitPrefix } from 'librechat-data-provider';
import type { TCustomConfig } from 'librechat-data-provider';

/**
 *
 * @param rateLimits
 */
export const handleRateLimits = (rateLimits?: TCustomConfig['rateLimits']) => {
  if (!rateLimits) {
    return;
  }

  const rateLimitKeys = {
    fileUploads: RateLimitPrefix.FILE_UPLOAD,
    conversationsImport: RateLimitPrefix.IMPORT,
    tts: RateLimitPrefix.TTS,
    stt: RateLimitPrefix.STT,
  };

  Object.entries(rateLimitKeys).forEach(([key, prefix]) => {
    const rateLimit = rateLimits[key as keyof typeof rateLimitKeys];
    if (rateLimit) {
      setRateLimitEnvVars(prefix, rateLimit);
    }
  });
};

type RateLimitConfig = {
  ipMax?: number | undefined;
  ipWindowInMinutes?: number | undefined;
  userMax?: number | undefined;
  userWindowInMinutes?: number | undefined;
};

/**
 * Set environment variables for rate limit configurations
 *
 * @param prefix - Prefix for environment variable names
 * @param rateLimit - Rate limit configuration object
 */
const setRateLimitEnvVars = (prefix: string, rateLimit: RateLimitConfig) => {
  const envVarsMapping = {
    ipMax: `${prefix}_IP_MAX`,
    ipWindowInMinutes: `${prefix}_IP_WINDOW`,
    userMax: `${prefix}_USER_MAX`,
    userWindowInMinutes: `${prefix}_USER_WINDOW`,
  };

  Object.entries(envVarsMapping).forEach(([key, envVar]) => {
    const value = rateLimit[key as keyof RateLimitConfig];
    if (value !== undefined) {
      process.env[envVar] = value.toString();
    }
  });
};