diff --git a/frontend/src/lib/directus/client.ts b/frontend/src/lib/directus/client.ts index 36264c8..440c34f 100644 --- a/frontend/src/lib/directus/client.ts +++ b/frontend/src/lib/directus/client.ts @@ -13,20 +13,29 @@ import { import type { DirectusSchema } from '../schemas'; import type { DirectusClient, RestClient } from '@directus/sdk'; -// @ts-ignore +/** + * SSR-Safe Directus URL Detection + * + * When running Server-Side (SSR), the frontend container cannot reach + * the public HTTPS URL from inside Docker. It must use the internal + * Docker network name 'directus' instead. + * + * - SSR/Server: http://directus:8055 (internal Docker network) + * - Browser/Client: https://spark.jumpstartscaling.com (public URL) + */ +const isServer = import.meta.env.SSR || typeof window === 'undefined'; + +// Public URL for client-side requests const PUBLIC_URL = import.meta.env.PUBLIC_DIRECTUS_URL || 'https://spark.jumpstartscaling.com'; -// Internal URL (SSR only) - used when running server-side requests -const INTERNAL_URL = typeof process !== 'undefined' && process.env?.INTERNAL_DIRECTUS_URL - ? process.env.INTERNAL_DIRECTUS_URL - : 'https://spark.jumpstartscaling.com'; +// Internal Docker URL for SSR requests +const INTERNAL_URL = 'http://directus:8055'; -// @ts-ignore -const DIRECTUS_TOKEN = import.meta.env.DIRECTUS_ADMIN_TOKEN || (typeof process !== 'undefined' && process.env ? process.env.DIRECTUS_ADMIN_TOKEN : '') || 'eufOJ_oKEx_FVyGoz1GxWu6nkSOcgIVS'; +// Select URL based on environment +const DIRECTUS_URL = isServer ? INTERNAL_URL : PUBLIC_URL; -// Select URL based on environment (Server vs Client) -// Always use the public URL to ensure consistent access -const DIRECTUS_URL = PUBLIC_URL; +// Admin token for authenticated requests +const DIRECTUS_TOKEN = import.meta.env.DIRECTUS_ADMIN_TOKEN || ''; /** * Creates a typed Directus client for the Spark Platform diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..63fe8aa --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1,39 @@ +/// +/// + +/** + * Spark Platform Environment Variables + * These are injected at build/runtime via Astro's import.meta.env + */ +interface ImportMetaEnv { + /** Public Directus API URL (e.g., https://spark.jumpstartscaling.com) */ + readonly PUBLIC_DIRECTUS_URL: string; + + /** Admin token for authenticated API requests (optional, for SSR) */ + readonly DIRECTUS_ADMIN_TOKEN?: string; + + /** Public platform domain for generating URLs */ + readonly PUBLIC_PLATFORM_DOMAIN?: string; + + /** Preview domain for draft content */ + readonly PREVIEW_DOMAIN?: string; + + /** True when running on server (SSR mode) */ + readonly SSR: boolean; + + /** True during development */ + readonly DEV: boolean; + + /** True for production build */ + readonly PROD: boolean; + + /** Base URL of the site */ + readonly BASE_URL: string; + + /** Current mode (development, production, etc.) */ + readonly MODE: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +}