diff --git a/src/api/index.ts b/src/api/index.ts index d87069c..d44957a 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -22,6 +22,21 @@ export { ApiError, localTokenStorage, createHttpClient }; export type { Tokens, HttpClient, ClientOptions, RequestOptions }; export * from './types'; +/** + * آدرسِ کاملِ یک مسیرِ API. + * + * fetch(apiUrl('/auth/login'), …) + * + * برای کدی که هنوز مستقیم fetch می‌زند. مسیرِ نسبی (`/api/auth/login`) در + * بیلدِ نهایی به دامنه‌ی خودِ فرانت می‌رود، nginx چون مسیر را نمی‌شناسد + * index.html برمی‌گرداند، و نتیجه پاسخِ ۲۰۰ با بدنه‌ی HTML است که موقعِ + * res.json() با «Unexpected token '<'» می‌شکند. + */ +export function apiUrl(path: string): string { + const base = createHttpClient().baseUrl; + return `${base}${path.startsWith('/') ? path : `/${path}`}`; +} + /** پرسش از دستیار کند است (تولیدِ متن)؛ ۱۵ ثانیه‌ی پیش‌فرض کم است. */ const ASK_TIMEOUT_MS = 45_000; diff --git a/vite.config.ts b/vite.config.ts index 13dfa3a..527936a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -31,6 +31,24 @@ export default defineConfig({ }, }, + // در حالتِ توسعه، هر درخواستِ /api به بک‌اند فرستاده می‌شود. + // + // چرا لازم است: کدِ اپ مسیرهای نسبی صدا می‌زند (مثلاً /api/auth/login). بدونِ + // این پروکسی، آن درخواست به خودِ سرورِ vite می‌رود و چون مسیرِ ناشناخته است + // index.html برمی‌گردد — یعنی پاسخِ ۲۰۰ ولی HTML، و کد موقعِ res.json() با + // «Unexpected token '<'» می‌شکند. خطایی که علتش از پیامش معلوم نیست. + // + // مقصد را با VITE_API_PROXY_TARGET عوض کنید (پیش‌فرض: بک‌اندِ مشترک). + server: { + proxy: { + '/api': { + target: process.env.VITE_API_PROXY_TARGET || 'https://api.math.tadrisino2.ir', + changeOrigin: true, + secure: true, + }, + }, + }, + // File types to support raw imports. Never add .css, .tsx, or .ts files to this. assetsInclude: ['**/*.svg', '**/*.csv'], })