feat(#27): Set up consola logger, make use of log levels in backend and frontend

This commit is contained in:
2025-12-24 10:26:22 +01:00
parent 805c66bc4f
commit 7f7852a66a
36 changed files with 312 additions and 141 deletions

View File

@@ -1,9 +1,14 @@
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}`), '')
@@ -19,8 +24,10 @@ export default defineEventHandler(async (event: H3Event) => {
})
}
if (accessToken) console.log('🔀 [PROXY] Expiration:', new Date(jwtDecode(accessToken).exp! * 1000).toISOString())
console.log('🔀 [PROXY] Proxying request to:', target)
if (accessToken) {
logger.debug('Expiration:', new Date(jwtDecode(accessToken).exp! * 1000).toISOString())
}
logger.debug('Proxying request to:', target)
return proxyRequest(event, target, {
headers: {

View File

@@ -1,15 +1,23 @@
import { jwtDecode } from 'jwt-decode'
import type { KeycloakTokenPayload, Organization } from '~~/types/keycloak'
import { createLogger } from '~~/shared/utils/logger'
export default defineOAuthKeycloakEventHandler({
async onSuccess(event, { user, tokens }) {
const config = useRuntimeConfig()
const logger = createLogger({
level: config.public.logLevel,
tag: 'auth',
fancy: import.meta.env.MODE !== 'production'
})
const rawAccessToken = tokens?.access_token
let decodedJwt: KeycloakTokenPayload | null = null
try {
decodedJwt = jwtDecode<KeycloakTokenPayload>(rawAccessToken!)
} catch (err) {
console.warn('[auth] Failed to decode access token:', err)
logger.warn('Failed to decode access token:', err)
}
const organizations = decodedJwt ? extractOrganizations(decodedJwt) : []
@@ -34,7 +42,13 @@ export default defineOAuthKeycloakEventHandler({
},
onError(event) {
console.log('error during keycloak authentication', event)
const config = useRuntimeConfig()
const logger = createLogger({
level: config.public.logLevel,
tag: 'auth'
})
logger.error('Error during keycloak authentication')
return sendRedirect(event, '/login')
}
})

View File

@@ -1,11 +1,20 @@
import { createLogger } from '~~/shared/utils/logger'
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const logger = createLogger({
level: config.public.logLevel,
tag: 'auth',
fancy: import.meta.env.MODE !== 'production'
})
try {
const cleared = await clearUserSession(event)
if (!cleared) {
console.warn('Failed to clear user session')
logger.warn('Failed to clear user session')
}
} catch (error) {
console.error('Error clearing user session:', error)
logger.error('Error clearing user session:', error)
}
return sendRedirect(event, '/login', 200)