fix(stats): proxy build assets under stats path

This commit is contained in:
Adam 2026-05-28 18:48:26 -05:00
parent edc7a20cea
commit 7480b97630
No known key found for this signature in database
GPG key ID: 9CB48779AF150E75
3 changed files with 53 additions and 42 deletions

View file

@ -0,0 +1,39 @@
import type { APIEvent } from "@solidjs/start/server"
import { Resource } from "@opencode-ai/console-resource"
export async function statsProxy(evt: APIEvent) {
const req = evt.request.clone()
const targetUrl = new URL(req.url)
targetUrl.protocol = "https:"
targetUrl.hostname = Resource.App.stage === "production" ? "stats.opencode.ai" : "stats.dev.opencode.ai"
targetUrl.port = ""
if (targetUrl.pathname.startsWith("/stats/_build/")) {
targetUrl.pathname = targetUrl.pathname.slice("/stats".length)
}
const response = await fetch(targetUrl, {
method: req.method,
headers: req.headers,
body: req.body,
})
if (!response.headers.get("content-type")?.includes("text/html")) return response
const headers = new Headers(response.headers)
headers.delete("content-encoding")
headers.delete("content-length")
headers.delete("etag")
return new Response(rewriteStatsHtml(await response.text()), {
status: response.status,
statusText: response.statusText,
headers,
})
}
function rewriteStatsHtml(html: string) {
return html
.replaceAll("\"/_build/", "\"/stats/_build/")
.replaceAll("'/_build/", "'/stats/_build/")
}

View file

@ -1,22 +1,8 @@
import type { APIEvent } from "@solidjs/start/server"
import { Resource } from "@opencode-ai/console-resource"
import { statsProxy } from "~/lib/stats-proxy"
async function handler(evt: APIEvent) {
const req = evt.request.clone()
const url = new URL(req.url)
const host = Resource.App.stage === "production" ? "stats.opencode.ai" : "stats.dev.opencode.ai"
const targetUrl = `https://${host}${url.pathname}${url.search}`
return fetch(targetUrl, {
method: req.method,
headers: req.headers,
body: req.body,
})
}
export const GET = handler
export const POST = handler
export const PUT = handler
export const DELETE = handler
export const OPTIONS = handler
export const PATCH = handler
export const GET = statsProxy
export const POST = statsProxy
export const PUT = statsProxy
export const DELETE = statsProxy
export const OPTIONS = statsProxy
export const PATCH = statsProxy

View file

@ -1,22 +1,8 @@
import type { APIEvent } from "@solidjs/start/server"
import { Resource } from "@opencode-ai/console-resource"
import { statsProxy } from "~/lib/stats-proxy"
async function handler(evt: APIEvent) {
const req = evt.request.clone()
const url = new URL(req.url)
const host = Resource.App.stage === "production" ? "stats.opencode.ai" : "stats.dev.opencode.ai"
const targetUrl = `https://${host}${url.pathname}${url.search}`
return fetch(targetUrl, {
method: req.method,
headers: req.headers,
body: req.body,
})
}
export const GET = handler
export const POST = handler
export const PUT = handler
export const DELETE = handler
export const OPTIONS = handler
export const PATCH = handler
export const GET = statsProxy
export const POST = statsProxy
export const PUT = statsProxy
export const DELETE = statsProxy
export const OPTIONS = statsProxy
export const PATCH = statsProxy