File size: 1,481 Bytes
cd8bd0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
export const REQUEST_BODY_BYTES_PER_MB = 1024 * 1024;
export const DEFAULT_REQUEST_BODY_LIMIT_MB = 10;
export const MIN_REQUEST_BODY_LIMIT_MB = 1;
export const MAX_REQUEST_BODY_LIMIT_MB = 500;
export const DEFAULT_REQUEST_BODY_LIMIT_BYTES =
  DEFAULT_REQUEST_BODY_LIMIT_MB * REQUEST_BODY_BYTES_PER_MB;

export function normalizeRequestBodyLimitMb(value: unknown): number | null {
  const parsed =
    typeof value === "number" ? value : typeof value === "string" ? Number(value) : NaN;
  if (!Number.isFinite(parsed)) return null;

  const normalized = Math.floor(parsed);
  if (normalized < MIN_REQUEST_BODY_LIMIT_MB || normalized > MAX_REQUEST_BODY_LIMIT_MB) {
    return null;
  }

  return normalized;
}

export function requestBodyLimitMbToBytes(value: number): number {
  return value * REQUEST_BODY_BYTES_PER_MB;
}

export function parseRequestBodyLimitBytes(value: string | undefined): number {
  if (!value) return DEFAULT_REQUEST_BODY_LIMIT_BYTES;

  const parsed = parseInt(value, 10);
  return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_REQUEST_BODY_LIMIT_BYTES;
}

export function requestBodyLimitBytesToMb(value: number): number {
  const configuredMb = Math.round(value / REQUEST_BODY_BYTES_PER_MB);
  return Math.min(MAX_REQUEST_BODY_LIMIT_MB, Math.max(MIN_REQUEST_BODY_LIMIT_MB, configuredMb));
}

export function requestBodyLimitMbFromEnv(value: string | undefined): number {
  return requestBodyLimitBytesToMb(parseRequestBodyLimitBytes(value));
}