diff --git a/apps/calendar/apps/web/src/hooks.server.ts b/apps/calendar/apps/web/src/hooks.server.ts index 6d7a5089d..e94acafb9 100644 --- a/apps/calendar/apps/web/src/hooks.server.ts +++ b/apps/calendar/apps/web/src/hooks.server.ts @@ -5,21 +5,21 @@ */ import type { Handle } from '@sveltejs/kit'; - -// Get client-side URLs from environment (Docker runtime) -const PUBLIC_MANA_CORE_AUTH_URL_CLIENT = - process.env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || process.env.PUBLIC_MANA_CORE_AUTH_URL || ''; -const PUBLIC_BACKEND_URL_CLIENT = - process.env.PUBLIC_BACKEND_URL_CLIENT || process.env.PUBLIC_BACKEND_URL || ''; +import { env } from '$env/dynamic/private'; export const handle: Handle = async ({ event, resolve }) => { + // Get client-side URLs from environment at RUNTIME (not build time) + // Use $env/dynamic/private to read actual runtime environment variables + const authUrlClient = env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || env.PUBLIC_MANA_CORE_AUTH_URL || ''; + const backendUrlClient = env.PUBLIC_BACKEND_URL_CLIENT || env.PUBLIC_BACKEND_URL || ''; + return resolve(event, { transformPageChunk: ({ html }) => { // Inject runtime environment variables into the HTML // These will be available on window.__PUBLIC_*__ for client-side code const envScript = ``; return html.replace('
', `${envScript}`); }, diff --git a/apps/chat/apps/web/src/hooks.server.ts b/apps/chat/apps/web/src/hooks.server.ts index 6d7a5089d..e94acafb9 100644 --- a/apps/chat/apps/web/src/hooks.server.ts +++ b/apps/chat/apps/web/src/hooks.server.ts @@ -5,21 +5,21 @@ */ import type { Handle } from '@sveltejs/kit'; - -// Get client-side URLs from environment (Docker runtime) -const PUBLIC_MANA_CORE_AUTH_URL_CLIENT = - process.env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || process.env.PUBLIC_MANA_CORE_AUTH_URL || ''; -const PUBLIC_BACKEND_URL_CLIENT = - process.env.PUBLIC_BACKEND_URL_CLIENT || process.env.PUBLIC_BACKEND_URL || ''; +import { env } from '$env/dynamic/private'; export const handle: Handle = async ({ event, resolve }) => { + // Get client-side URLs from environment at RUNTIME (not build time) + // Use $env/dynamic/private to read actual runtime environment variables + const authUrlClient = env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || env.PUBLIC_MANA_CORE_AUTH_URL || ''; + const backendUrlClient = env.PUBLIC_BACKEND_URL_CLIENT || env.PUBLIC_BACKEND_URL || ''; + return resolve(event, { transformPageChunk: ({ html }) => { // Inject runtime environment variables into the HTML // These will be available on window.__PUBLIC_*__ for client-side code const envScript = ``; return html.replace('', `${envScript}`); }, diff --git a/apps/clock/apps/web/src/hooks.server.ts b/apps/clock/apps/web/src/hooks.server.ts index 6d7a5089d..e94acafb9 100644 --- a/apps/clock/apps/web/src/hooks.server.ts +++ b/apps/clock/apps/web/src/hooks.server.ts @@ -5,21 +5,21 @@ */ import type { Handle } from '@sveltejs/kit'; - -// Get client-side URLs from environment (Docker runtime) -const PUBLIC_MANA_CORE_AUTH_URL_CLIENT = - process.env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || process.env.PUBLIC_MANA_CORE_AUTH_URL || ''; -const PUBLIC_BACKEND_URL_CLIENT = - process.env.PUBLIC_BACKEND_URL_CLIENT || process.env.PUBLIC_BACKEND_URL || ''; +import { env } from '$env/dynamic/private'; export const handle: Handle = async ({ event, resolve }) => { + // Get client-side URLs from environment at RUNTIME (not build time) + // Use $env/dynamic/private to read actual runtime environment variables + const authUrlClient = env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || env.PUBLIC_MANA_CORE_AUTH_URL || ''; + const backendUrlClient = env.PUBLIC_BACKEND_URL_CLIENT || env.PUBLIC_BACKEND_URL || ''; + return resolve(event, { transformPageChunk: ({ html }) => { // Inject runtime environment variables into the HTML // These will be available on window.__PUBLIC_*__ for client-side code const envScript = ``; return html.replace('', `${envScript}`); }, diff --git a/apps/manacore/apps/web/src/hooks.server.ts b/apps/manacore/apps/web/src/hooks.server.ts index 21b618758..1a092b58f 100644 --- a/apps/manacore/apps/web/src/hooks.server.ts +++ b/apps/manacore/apps/web/src/hooks.server.ts @@ -1,36 +1,32 @@ import type { Handle } from '@sveltejs/kit'; +import { env } from '$env/dynamic/private'; /** * Server hooks for ManaCore web app * * Injects runtime environment variables into the HTML for client-side access. - * This is necessary because SvelteKit's $env/static/public bakes values at build time, - * but Docker containers need runtime configuration. + * Uses $env/dynamic/private to read environment variables at RUNTIME (not build time), + * which is necessary for Docker containers that set env vars at runtime. */ -// Auth URL -const PUBLIC_MANA_CORE_AUTH_URL_CLIENT = - process.env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || process.env.PUBLIC_MANA_CORE_AUTH_URL || ''; - -// Backend URLs for dashboard widgets -const PUBLIC_TODO_API_URL_CLIENT = - process.env.PUBLIC_TODO_API_URL_CLIENT || process.env.PUBLIC_TODO_API_URL || ''; -const PUBLIC_CALENDAR_API_URL_CLIENT = - process.env.PUBLIC_CALENDAR_API_URL_CLIENT || process.env.PUBLIC_CALENDAR_API_URL || ''; -const PUBLIC_CLOCK_API_URL_CLIENT = - process.env.PUBLIC_CLOCK_API_URL_CLIENT || process.env.PUBLIC_CLOCK_API_URL || ''; -const PUBLIC_CONTACTS_API_URL_CLIENT = - process.env.PUBLIC_CONTACTS_API_URL_CLIENT || process.env.PUBLIC_CONTACTS_API_URL || ''; - export const handle: Handle = async ({ event, resolve }) => { + // Get client-side URLs from environment at RUNTIME (not build time) + const authUrlClient = env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || env.PUBLIC_MANA_CORE_AUTH_URL || ''; + const todoApiUrlClient = env.PUBLIC_TODO_API_URL_CLIENT || env.PUBLIC_TODO_API_URL || ''; + const calendarApiUrlClient = + env.PUBLIC_CALENDAR_API_URL_CLIENT || env.PUBLIC_CALENDAR_API_URL || ''; + const clockApiUrlClient = env.PUBLIC_CLOCK_API_URL_CLIENT || env.PUBLIC_CLOCK_API_URL || ''; + const contactsApiUrlClient = + env.PUBLIC_CONTACTS_API_URL_CLIENT || env.PUBLIC_CONTACTS_API_URL || ''; + return resolve(event, { transformPageChunk: ({ html }) => { const envScript = ``; return html.replace('', `${envScript}`); }, diff --git a/apps/todo/apps/web/src/hooks.server.ts b/apps/todo/apps/web/src/hooks.server.ts index 6d7a5089d..e94acafb9 100644 --- a/apps/todo/apps/web/src/hooks.server.ts +++ b/apps/todo/apps/web/src/hooks.server.ts @@ -5,21 +5,21 @@ */ import type { Handle } from '@sveltejs/kit'; - -// Get client-side URLs from environment (Docker runtime) -const PUBLIC_MANA_CORE_AUTH_URL_CLIENT = - process.env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || process.env.PUBLIC_MANA_CORE_AUTH_URL || ''; -const PUBLIC_BACKEND_URL_CLIENT = - process.env.PUBLIC_BACKEND_URL_CLIENT || process.env.PUBLIC_BACKEND_URL || ''; +import { env } from '$env/dynamic/private'; export const handle: Handle = async ({ event, resolve }) => { + // Get client-side URLs from environment at RUNTIME (not build time) + // Use $env/dynamic/private to read actual runtime environment variables + const authUrlClient = env.PUBLIC_MANA_CORE_AUTH_URL_CLIENT || env.PUBLIC_MANA_CORE_AUTH_URL || ''; + const backendUrlClient = env.PUBLIC_BACKEND_URL_CLIENT || env.PUBLIC_BACKEND_URL || ''; + return resolve(event, { transformPageChunk: ({ html }) => { // Inject runtime environment variables into the HTML // These will be available on window.__PUBLIC_*__ for client-side code const envScript = ``; return html.replace('', `${envScript}`); }, diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml index e8741a4bf..61138d6a2 100644 --- a/docker-compose.staging.yml +++ b/docker-compose.staging.yml @@ -74,8 +74,8 @@ services: JWT_SECRET: ${JWT_SECRET} JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY} JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY} - # CORS - Allow all staging web app origins - CORS_ORIGINS: http://46.224.108.214:3000,http://46.224.108.214:5173,http://46.224.108.214:5186,http://46.224.108.214:5187,http://46.224.108.214:5188,http://localhost:3000,http://localhost:5173,http://localhost:5186,http://localhost:5187,http://localhost:5188 + # CORS - Allow all staging web app origins (HTTPS domains) + CORS_ORIGINS: https://chat.staging.manacore.ai,https://staging.manacore.ai,https://calendar.staging.manacore.ai,https://clock.staging.manacore.ai,https://todo.staging.manacore.ai,http://localhost:3000,http://localhost:5173,http://localhost:5186,http://localhost:5187,http://localhost:5188 ports: - "3001:3001" healthcheck: @@ -140,9 +140,9 @@ services: # Server-side URLs (Docker internal network) PUBLIC_BACKEND_URL: http://chat-backend:3002 PUBLIC_MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - # Client-side URLs (browser access via public IP) - PUBLIC_BACKEND_URL_CLIENT: http://46.224.108.214:3002 - PUBLIC_MANA_CORE_AUTH_URL_CLIENT: http://46.224.108.214:3001 + # Client-side URLs (browser access via HTTPS domains) + PUBLIC_BACKEND_URL_CLIENT: https://chat-api.staging.manacore.ai + PUBLIC_MANA_CORE_AUTH_URL_CLIENT: https://auth.staging.manacore.ai ports: - "3000:3000" healthcheck: @@ -175,14 +175,14 @@ services: PORT: 5173 # Auth URLs PUBLIC_MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - PUBLIC_MANA_CORE_AUTH_URL_CLIENT: http://46.224.108.214:3001 + PUBLIC_MANA_CORE_AUTH_URL_CLIENT: https://auth.staging.manacore.ai # Backend URLs for dashboard widgets PUBLIC_TODO_API_URL: http://todo-backend:3018 - PUBLIC_TODO_API_URL_CLIENT: http://46.224.108.214:3018 + PUBLIC_TODO_API_URL_CLIENT: https://todo-api.staging.manacore.ai PUBLIC_CALENDAR_API_URL: http://calendar-backend:3016 - PUBLIC_CALENDAR_API_URL_CLIENT: http://46.224.108.214:3016 + PUBLIC_CALENDAR_API_URL_CLIENT: https://calendar-api.staging.manacore.ai PUBLIC_CLOCK_API_URL: http://clock-backend:3017 - PUBLIC_CLOCK_API_URL_CLIENT: http://46.224.108.214:3017 + PUBLIC_CLOCK_API_URL_CLIENT: https://clock-api.staging.manacore.ai ports: - "5173:5173" healthcheck: @@ -220,7 +220,7 @@ services: DB_PORT: 5432 DB_USER: ${POSTGRES_USER:-postgres} MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - CORS_ORIGINS: http://46.224.108.214:5188,http://46.224.108.214:5173,http://localhost:5188,http://localhost:5173 + CORS_ORIGINS: https://todo.staging.manacore.ai,https://staging.manacore.ai,http://localhost:5188,http://localhost:5173 ports: - "3018:3018" healthcheck: @@ -249,8 +249,8 @@ services: PORT: 5188 PUBLIC_BACKEND_URL: http://todo-backend:3018 PUBLIC_MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - PUBLIC_BACKEND_URL_CLIENT: http://46.224.108.214:3018 - PUBLIC_MANA_CORE_AUTH_URL_CLIENT: http://46.224.108.214:3001 + PUBLIC_BACKEND_URL_CLIENT: https://todo-api.staging.manacore.ai + PUBLIC_MANA_CORE_AUTH_URL_CLIENT: https://auth.staging.manacore.ai ports: - "5188:5188" healthcheck: @@ -288,7 +288,7 @@ services: DB_PORT: 5432 DB_USER: ${POSTGRES_USER:-postgres} MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - CORS_ORIGINS: http://46.224.108.214:5186,http://46.224.108.214:5173,http://localhost:5186,http://localhost:5173 + CORS_ORIGINS: https://calendar.staging.manacore.ai,https://staging.manacore.ai,http://localhost:5186,http://localhost:5173 ports: - "3016:3016" healthcheck: @@ -317,8 +317,8 @@ services: PORT: 5186 PUBLIC_BACKEND_URL: http://calendar-backend:3016 PUBLIC_MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - PUBLIC_BACKEND_URL_CLIENT: http://46.224.108.214:3016 - PUBLIC_MANA_CORE_AUTH_URL_CLIENT: http://46.224.108.214:3001 + PUBLIC_BACKEND_URL_CLIENT: https://calendar-api.staging.manacore.ai + PUBLIC_MANA_CORE_AUTH_URL_CLIENT: https://auth.staging.manacore.ai ports: - "5186:5186" healthcheck: @@ -356,7 +356,7 @@ services: DB_PORT: 5432 DB_USER: ${POSTGRES_USER:-postgres} MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - CORS_ORIGINS: http://46.224.108.214:5187,http://46.224.108.214:5173,http://localhost:5187,http://localhost:5173 + CORS_ORIGINS: https://clock.staging.manacore.ai,https://staging.manacore.ai,http://localhost:5187,http://localhost:5173 ports: - "3017:3017" healthcheck: @@ -385,8 +385,8 @@ services: PORT: 5187 PUBLIC_BACKEND_URL: http://clock-backend:3017 PUBLIC_MANA_CORE_AUTH_URL: http://mana-core-auth:3001 - PUBLIC_BACKEND_URL_CLIENT: http://46.224.108.214:3017 - PUBLIC_MANA_CORE_AUTH_URL_CLIENT: http://46.224.108.214:3001 + PUBLIC_BACKEND_URL_CLIENT: https://clock-api.staging.manacore.ai + PUBLIC_MANA_CORE_AUTH_URL_CLIENT: https://auth.staging.manacore.ai ports: - "5187:5187" healthcheck: