32 lines
865 B
TypeScript
32 lines
865 B
TypeScript
import type { Route } from './+types'
|
|
|
|
export const loader = proxy
|
|
export const action = proxy
|
|
|
|
async function proxy({
|
|
request,
|
|
context
|
|
}: Route.ActionArgs): Promise<Response> {
|
|
const pathname = new URL(request.url).pathname
|
|
const url = new URL(pathname, context.cloudflare.env.ISSUER_URL)
|
|
const headers = new Headers(request.headers)
|
|
const response = await fetch(url.toString(), {
|
|
method: request.method,
|
|
headers,
|
|
...(['GET', 'HEAD'].includes(request.method)
|
|
? {}
|
|
: { body: await request.text() })
|
|
})
|
|
|
|
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
|
|
})
|
|
}
|