import type { H3Event } from 'h3' import { joinURL } from 'ufo' import { jwtDecode } from 'jwt-decode' import { createLogger } from '~~/shared/utils/logger' export default defineEventHandler(async (event: H3Event) => { const { serverApiBaseUrl, clientProxyBasePath } = useRuntimeConfig().public const logger = createLogger({ level: useRuntimeConfig().public.logLevel, tag: '🔀 proxy' }) const escapedClientProxyBasePath = clientProxyBasePath.replace(/^\//, '\\/') // Use the escaped value in the regex const path = event.path.replace(new RegExp(`^${escapedClientProxyBasePath}`), '') const target = joinURL(serverApiBaseUrl, path) const session = await getUserSession(event) const accessToken = session?.jwt?.accessToken if (!accessToken && event.path !== '/api/actuator/health') { throw createError({ statusCode: 401, statusMessage: 'Not authenticated' }) } if (accessToken) { logger.debug('Expiration:', new Date(jwtDecode(accessToken).exp! * 1000).toISOString()) } logger.debug('Proxying request to:', target) return proxyRequest(event, target, { headers: { Authorization: `Bearer ${accessToken}` } }) })