Files
saladeaula.digital/apps/insights.saladeaula.digital/app/routes/~.api.$/route.ts
2025-12-19 09:02:49 -03:00

43 lines
1.2 KiB
TypeScript

import type { Route } from './+types/route'
import { userContext, cloudflareContext } from '@repo/auth/context'
import { authMiddleware } from '@repo/auth/middleware/auth'
export const middleware: Route.MiddlewareFunction[] = [authMiddleware]
export const loader = proxy
export const action = proxy
async function proxy({
request,
context
}: Route.ActionArgs): Promise<Response> {
const pathname = new URL(request.url).pathname.replace(/^\/~\/api\//, '')
const cloudflare = context.get(cloudflareContext)
const user = context.get(userContext)!
const url = new URL(pathname, cloudflare.env.API_URL)
const headers = new Headers(request.headers)
headers.set('Authorization', `Bearer ${user.accessToken}`)
const response = await fetch(url.toString(), {
method: request.method,
headers,
...(['GET', 'HEAD'].includes(request.method)
? {}
: { body: await request.text() })
})
console.log(headers)
const contentType = response.headers.get('content-type') || ''
const body =
contentType.includes('application/json') || contentType.startsWith('text/')
? await response.text()
: await response.arrayBuffer()
return new Response(body, {
status: response.status,
headers: response.headers
})
}