diff --git a/server/routes/klinik-api/[...].ts b/backup/proxy-routes/klinik-api/[...].ts similarity index 92% rename from server/routes/klinik-api/[...].ts rename to backup/proxy-routes/klinik-api/[...].ts index 4a7d3c0..34576c2 100644 --- a/server/routes/klinik-api/[...].ts +++ b/backup/proxy-routes/klinik-api/[...].ts @@ -1,7 +1,7 @@ import { defineEventHandler, proxyRequest } from 'h3' export default defineEventHandler(async (event) => { - const config = useRuntimeConfig() + const config = useRuntimeConfig(event) const targetBase = config.public.verificationApiBaseUrl || 'http://10.10.123.140:8089/api/v1' // Extract path suffix after /klinik-api @@ -20,7 +20,7 @@ export default defineEventHandler(async (event) => { } // Spoof the origin and referer to match the server's trusted/whitelisted client origin - const proxyOrigin = config.proxyClientOrigin || 'http://10.10.150.175:3000' + const proxyOrigin = config.proxyClientOrigin as string headers.origin = proxyOrigin headers.referer = proxyOrigin.endsWith('/') ? proxyOrigin : `${proxyOrigin}/` diff --git a/server/routes/stats-api/[...].ts b/backup/proxy-routes/stats-api/[...].ts similarity index 92% rename from server/routes/stats-api/[...].ts rename to backup/proxy-routes/stats-api/[...].ts index 2462c9e..bba4e21 100644 --- a/server/routes/stats-api/[...].ts +++ b/backup/proxy-routes/stats-api/[...].ts @@ -1,7 +1,7 @@ import { defineEventHandler, proxyRequest } from 'h3' export default defineEventHandler(async (event) => { - const config = useRuntimeConfig() + const config = useRuntimeConfig(event) const targetBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1' // Extract path suffix after /stats-api @@ -20,7 +20,7 @@ export default defineEventHandler(async (event) => { } // Spoof the origin and referer to match the server's trusted/whitelisted client origin - const proxyOrigin = config.proxyClientOrigin || 'http://10.10.150.175:3000' + const proxyOrigin = config.proxyClientOrigin as string headers.origin = proxyOrigin headers.referer = proxyOrigin.endsWith('/') ? proxyOrigin : `${proxyOrigin}/` diff --git a/server/routes/visit-api/[...].ts b/backup/proxy-routes/visit-api/[...].ts similarity index 92% rename from server/routes/visit-api/[...].ts rename to backup/proxy-routes/visit-api/[...].ts index 4129664..71946da 100644 --- a/server/routes/visit-api/[...].ts +++ b/backup/proxy-routes/visit-api/[...].ts @@ -1,7 +1,7 @@ import { defineEventHandler, proxyRequest } from 'h3' export default defineEventHandler(async (event) => { - const config = useRuntimeConfig() + const config = useRuntimeConfig(event) const targetBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1' // Extract path suffix after /visit-api @@ -20,7 +20,7 @@ export default defineEventHandler(async (event) => { } // Spoof the origin and referer to match the server's trusted/whitelisted client origin - const proxyOrigin = config.proxyClientOrigin || 'http://10.10.150.175:3000' + const proxyOrigin = config.proxyClientOrigin as string headers.origin = proxyOrigin headers.referer = proxyOrigin.endsWith('/') ? proxyOrigin : `${proxyOrigin}/` diff --git a/composables/useVisitAPI.ts b/composables/useVisitAPI.ts index 0664e50..de4b941 100644 --- a/composables/useVisitAPI.ts +++ b/composables/useVisitAPI.ts @@ -18,8 +18,8 @@ export interface VisitStats { export const useVisitAPI = () => { const config = useRuntimeConfig(); - // We use the configured proxy path to avoid CORS issues - const statsURL = '/stats-api/visit/stats'; + // We use the configured external API URL directly + const statsURL = `${config.public.externalApiBaseUrl}/visit/stats`; /** * Fetch visit statistics diff --git a/docker-compose.yml b/docker-compose.yml index a83d52f..db43945 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,6 +26,9 @@ services: - NUXT_PUBLIC_WS_API_URL=${WS_API_URL} - NUXT_SESSION_DURATION_HOURS=${SESSION_DURATION_HOURS} - NUXT_OAUTH_STATE_DURATION_MINUTES=${OAUTH_STATE_DURATION_MINUTES} + - NUXT_PROXY_CLIENT_ORIGIN=${PROXY_CLIENT_ORIGIN} + - NUXT_PROXY_TARGET_HOST_FALLBACK=${PROXY_TARGET_HOST_FALLBACK} + - NUXT_PROXY_TARGET_HOST_KLINIK_FALLBACK=${PROXY_TARGET_HOST_KLINIK_FALLBACK} volumes: # Mount local data directory to persist the sqlite users database - ./data:/app/data diff --git a/pages/AdminKlinikRuang/[kodeKlinik].vue b/pages/AdminKlinikRuang/[kodeKlinik].vue index bafc2d5..272d0a3 100644 --- a/pages/AdminKlinikRuang/[kodeKlinik].vue +++ b/pages/AdminKlinikRuang/[kodeKlinik].vue @@ -809,6 +809,7 @@ const queueStore = useQueueStore(); const masterStore = useMasterStore(); const clinicStore = useClinicStore(); const ruangStore = useRuangStore(); +const config = useRuntimeConfig(); const kodeKlinik = computed(() => { const kode = route.params.kodeKlinik; @@ -931,7 +932,6 @@ const filterOptionsList = { }; // WebSocket configuration -const config = useRuntimeConfig(); // Use a DETERMINISTIC client ID so that other pages can broadcast directly to this admin. // Format: admin-klinik-ruang-{kodeKlinik} — stable and targetable from any device. @@ -1717,7 +1717,7 @@ const handleCallPatientByTipe = async (ruang, tipeLayanan) => { visit_code: patient.barcode || patient.visitCode, visit_status_id: [visitStatusId] }; - const visitApiBase = '/visit-api'; + const visitApiBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'; const apiResponse = await fetch(`${visitApiBase}/visit/status/finish`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, diff --git a/pages/AdminLoket/[id].vue b/pages/AdminLoket/[id].vue index 04c218a..1a8ae03 100644 --- a/pages/AdminLoket/[id].vue +++ b/pages/AdminLoket/[id].vue @@ -339,6 +339,7 @@ const loketStore = useLoketStore(); const clinicStore = useClinicStore(); const ruangStore = useRuangStore(); const { printTicketFromPatient } = useThermalPrint(); +const config = useRuntimeConfig(); // Broadcast Channel let broadcastChannel = null; @@ -503,7 +504,7 @@ const apiQuota = ref(null); // Fetch latest quota data specifically for this loket const fetchQuotaFromAPI = async () => { try { - const apiBase = '/klinik-api'; + const apiBase = config.public.verificationApiBaseUrl || 'http://10.10.123.140:8089/api/v1'; const response = await fetch( `${apiBase}/klinik/loket`, ); @@ -1232,7 +1233,7 @@ const buatAntreanKlinikRuang = async (klinikRuang, ruang) => { console.log("📤 Sending visit ticket to API:", visitTicketBody); - const visitApiBase = '/visit-api'; + const visitApiBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'; const visitResponse = await fetch( `${visitApiBase}/visit/ticket/klinik`, { diff --git a/pages/Anjungan/Anjungan/[id].vue b/pages/Anjungan/Anjungan/[id].vue index f8f2199..f3fda1a 100644 --- a/pages/Anjungan/Anjungan/[id].vue +++ b/pages/Anjungan/Anjungan/[id].vue @@ -699,7 +699,11 @@ -
Memuat Konfigurasi Anjungan...
+Anjungan tidak ditemukan
Memuat Konfigurasi Anjungan...
+Anjungan tidak ditemukan