From 4b7f8459cbc13ccf96e9048d0894ce86475d0e80 Mon Sep 17 00:00:00 2001 From: nobswebdev Date: Wed, 7 Oct 2026 00:36:16 +0200 Subject: [PATCH] Align frontend env with validation limits and axios plugin. Flatten share/API config keys, nest validation limits only, and move the HTTP client to plugins/axios. --- frontend/src/config/index.ts | 26 +++++++++----------------- frontend/src/lib/api.ts | 10 ---------- frontend/src/plugins/axios.ts | 6 ++++++ frontend/src/vite-env.d.ts | 3 ++- 4 files changed, 17 insertions(+), 28 deletions(-) delete mode 100644 frontend/src/lib/api.ts create mode 100644 frontend/src/plugins/axios.ts diff --git a/frontend/src/config/index.ts b/frontend/src/config/index.ts index 8e34123..76d2b02 100644 --- a/frontend/src/config/index.ts +++ b/frontend/src/config/index.ts @@ -1,29 +1,21 @@ const env = (key: string): string => { const value = import.meta.env[key]; + if (value === undefined || value === null) { return ''; } + return String(value); }; -const envInt = (key: string, fallback: number): number => { - const raw = env(key); - if (!raw) { - return fallback; - } - const parsed = parseInt(raw, 10); - return Number.isFinite(parsed) ? parsed : fallback; -}; +const envInt = (key: string): number => parseInt(env(key), 10); export const config = { - api: { - baseUrl: env('VITE_API_BASE_URL') - }, - share: { - clearnetDomain: env('VITE_CLEARNET_DOMAIN'), - onionHostname: env('VITE_ONION_HOSTNAME') - }, - limits: { - maxImagesPerUpload: envInt('VITE_MAX_IMAGES_PER_UPLOAD', 10) + baseUrl: env('VITE_API_BASE_URL'), + clearnetDomain: env('VITE_CLEARNET_DOMAIN'), + onionHostname: env('VITE_ONION_HOSTNAME'), + validation: { + maxImagesPerUpload: envInt('VITE_VALIDATION_UPLOAD_MAX_IMAGES_PER_UPLOAD'), + uploadMaxViewsMax: envInt('VITE_VALIDATION_UPLOAD_MAX_VIEWS_MAX') } }; diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts deleted file mode 100644 index f8f9726..0000000 --- a/frontend/src/lib/api.ts +++ /dev/null @@ -1,10 +0,0 @@ -import axios from 'axios'; -import { config } from '@/config'; - -export const api = axios.create({ - baseURL: config.api.baseUrl, - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - } -}); diff --git a/frontend/src/plugins/axios.ts b/frontend/src/plugins/axios.ts new file mode 100644 index 0000000..9d25e1e --- /dev/null +++ b/frontend/src/plugins/axios.ts @@ -0,0 +1,6 @@ +import axios from 'axios'; +import { config } from '@/config'; + +export const api = axios.create({ + baseURL: config.baseUrl +}); diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts index 4ac8126..dab841d 100644 --- a/frontend/src/vite-env.d.ts +++ b/frontend/src/vite-env.d.ts @@ -4,7 +4,8 @@ interface ImportMetaEnv { readonly VITE_API_BASE_URL: string; readonly VITE_CLEARNET_DOMAIN: string; readonly VITE_ONION_HOSTNAME: string; - readonly VITE_MAX_IMAGES_PER_UPLOAD: string; + readonly VITE_VALIDATION_UPLOAD_MAX_IMAGES_PER_UPLOAD: string; + readonly VITE_VALIDATION_UPLOAD_MAX_VIEWS_MAX: string; } interface ImportMeta {