hensei-web/src/hooks.server.ts
Justin Edmund 073bed01d3 fix: component props and type assertions
- make UncapIndicator StarRender props optional for transcendence stars
- add type assertion for star props spreading (as any)
- fix element name type (string -> literal union with type assertion)
- fix PartySegmentedControl props (value/onValueChange -> selectedTab/onTabChange)
- remove userGender prop (component gets it from context)
- add type assertions for ResourceType and ImageVariant comparisons
- add required id/shortcode to Party object in teams/new
- fix auth hooks expiresAt (undefined -> empty string default)
- add type assertion for Select value binding (excludes null/boolean)
2025-11-28 21:04:39 -08:00

66 lines
1.8 KiB
TypeScript

import type { Handle, HandleFetch } from '@sveltejs/kit'
import { sequence } from '@sveltejs/kit/hooks'
import { paraglideMiddleware } from '$lib/paraglide/server'
import { getAccountFromCookies, getUserFromCookies } from '$lib/auth/cookies'
import { PUBLIC_SIERO_API_URL } from '$env/static/public'
export const handleSession: Handle = async ({ event, resolve }) => {
const account = getAccountFromCookies(event.cookies)
const user = getUserFromCookies(event.cookies)
// Debug logging for auth issues
if (account) {
console.log('[hooks.server] Account cookie found:', {
hasToken: !!account.token,
hasExpiresAt: !!account.expires_at,
username: account.username
})
}
event.locals.session = {
account,
user,
isAuthenticated: Boolean(account?.token)
}
// Pass auth data for client-side auth store initialization
event.locals.auth = account?.token
? {
accessToken: account.token,
user: user,
expiresAt: account.expires_at ?? ''
}
: null
return resolve(event)
}
const handleParaglide: Handle = ({ event, resolve }) =>
paraglideMiddleware(event.request, ({ request, locale }) => {
event.request = request
return resolve(event, {
transformPageChunk: ({ html }) => html.replace('%paraglide.lang%', locale)
})
})
export const handle: Handle = sequence(handleSession, handleParaglide)
const apiOrigin = new URL(PUBLIC_SIERO_API_URL || 'http://localhost:3000/api/v1').origin
export const handleFetch: HandleFetch = async ({ event, request, fetch }) => {
const url = new URL(request.url)
if (url.origin === apiOrigin) {
const token = event.locals.session?.account?.token
if (token) {
request = new Request(request, {
headers: new Headers({
...Object.fromEntries(request.headers),
authorization: `Bearer ${token}`
})
})
}
}
return fetch(request)
}