Files
gremiumhub/legalconsenthub/server/api/[...].ts

38 lines
1.2 KiB
TypeScript

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}`
}
})
})