Files
OmniRoute/src/shared/constants/bodySize.ts
Sergey Morozov 8077e9b62b feat(settings): add request body limit setting (#1968)
Integrated into release/v3.7.9
2026-05-05 09:12:35 -03:00

40 lines
1.4 KiB
TypeScript

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));
}