diff --git a/README.md b/README.md index 3634440..119f61c 100644 --- a/README.md +++ b/README.md @@ -137,13 +137,14 @@ docker compose up -d ### Environment variables -| Variable | Default Value | Recommended to change | Description | -| ---------------- | ------------------- | --------------------- | --------------------------------------------- | -| `PUBLIC_APP_URL` | `http://localhost` | yes | The URL where you will access the app. | -| `DB_PATH` | `data/pocket-id.db` | no | The path to the SQLite database. | -| `UPLOAD_PATH` | `data/uploads` | no | The path where the uploaded files are stored. | -| `PORT` | `3000` | no | The port on which the frontend should listen. | -| `BACKEND_PORT` | `8080` | no | The port on which the backend should listen. | +| Variable | Default Value | Recommended to change | Description | +| ---------------------- | ----------------------- | --------------------- | --------------------------------------------- | +| `PUBLIC_APP_URL` | `http://localhost` | yes | The URL where you will access the app. | +| `DB_PATH` | `data/pocket-id.db` | no | The path to the SQLite database. | +| `UPLOAD_PATH` | `data/uploads` | no | The path where the uploaded files are stored. | +| `INTERNAL_BACKEND_URL` | `http://localhost:8080` | no | The URL where the backend is accessible. | +| `PORT` | `3000` | no | The port on which the frontend should listen. | +| `BACKEND_PORT` | `8080` | no | The port on which the backend should listen. | ## Contribute diff --git a/frontend/.env.example b/frontend/.env.example index a435570..1e85d58 100644 --- a/frontend/.env.example +++ b/frontend/.env.example @@ -1 +1,2 @@ -PUBLIC_APP_URL=http://localhost \ No newline at end of file +PUBLIC_APP_URL=http://localhost +INTERNAL_BACKEND_URL=http://localhost:8080 diff --git a/frontend/src/hooks.server.ts b/frontend/src/hooks.server.ts index ce645aa..07795fd 100644 --- a/frontend/src/hooks.server.ts +++ b/frontend/src/hooks.server.ts @@ -1,7 +1,13 @@ +import { env } from '$env/dynamic/private'; import type { Handle, HandleServerError } from '@sveltejs/kit'; import { AxiosError } from 'axios'; import jwt from 'jsonwebtoken'; +// Workaround so that we can also import this environment variable into client-side code +// If we would directly import $env/dynamic/private into the api-service.ts file, it would throw an error +// this is still secure as process will just be undefined in the browser +process.env.INTERNAL_BACKEND_URL = env.INTERNAL_BACKEND_URL ?? 'http://localhost:8080'; + export const handle: Handle = async ({ event, resolve }) => { const accessToken = event.cookies.get('access_token'); diff --git a/frontend/src/lib/services/api-service.ts b/frontend/src/lib/services/api-service.ts index 53af274..0b088d9 100644 --- a/frontend/src/lib/services/api-service.ts +++ b/frontend/src/lib/services/api-service.ts @@ -1,9 +1,7 @@ import { browser } from '$app/environment'; -import { env } from '$env/dynamic/public'; import axios from 'axios'; abstract class APIService { - baseURL: string = '/api'; api = axios.create({ withCredentials: true }); @@ -11,11 +9,11 @@ abstract class APIService { constructor(accessToken?: string) { if (accessToken) { this.api.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`; - } else { - this.api.defaults.baseURL = '/api'; } - if (!browser) { - this.api.defaults.baseURL = (env.PUBLIC_APP_URL ?? 'http://localhost') + '/api'; + if (browser) { + this.api.defaults.baseURL = '/api'; + } else { + this.api.defaults.baseURL = process?.env?.INTERNAL_BACKEND_URL + '/api'; } } }