chore: stats -> data

This commit is contained in:
Adam 2026-06-09 09:31:16 -05:00
parent 7c1e61af1e
commit b4a6419215
No known key found for this signature in database
GPG Key ID: 9CB48779AF150E75
8 changed files with 52 additions and 23 deletions

View File

@ -165,7 +165,7 @@ export const app = new sst.cloudflare.x.SolidStart("Stats", {
domain: `stats.${domain}`,
link: [database, EMAILOCTOPUS_API_KEY],
environment: {
PUBLIC_URL: `https://${domain}/stats`,
PUBLIC_URL: `https://${domain}/data`,
},
})

View File

@ -1,6 +1,8 @@
import type { APIEvent } from "@solidjs/start/server"
import { Resource } from "@opencode-ai/console-resource"
const dataPath = "/data"
export async function statsProxy(evt: APIEvent) {
const req = evt.request.clone()
const targetUrl = new URL(req.url)
@ -8,8 +10,8 @@ export async function statsProxy(evt: APIEvent) {
targetUrl.hostname = Resource.App.stage === "production" ? "stats.opencode.ai" : "stats.dev.opencode.ai"
targetUrl.port = ""
if (targetUrl.pathname.startsWith("/stats/_build/") || targetUrl.pathname === "/stats/banner.png") {
targetUrl.pathname = targetUrl.pathname.slice("/stats".length)
if (targetUrl.pathname.startsWith(`${dataPath}/_build/`) || targetUrl.pathname === `${dataPath}/banner.png`) {
targetUrl.pathname = targetUrl.pathname.slice(dataPath.length)
}
const response = await fetch(targetUrl, {
@ -32,6 +34,17 @@ export async function statsProxy(evt: APIEvent) {
})
}
function rewriteStatsHtml(html: string) {
return html.replaceAll('"/_build/', '"/stats/_build/').replaceAll("'/_build/", "'/stats/_build/")
export function statsRedirect(evt: APIEvent) {
const url = new URL(evt.request.url)
url.pathname = `${dataPath}${url.pathname.slice("/stats".length)}`
return new Response(null, {
status: 308,
headers: {
Location: url.toString(),
},
})
}
function rewriteStatsHtml(html: string) {
return html.replaceAll('"/_build/', `"${dataPath}/_build/`).replaceAll("'/_build/", `'${dataPath}/_build/`)
}

View File

@ -0,0 +1,8 @@
import { statsProxy } from "~/lib/stats-proxy"
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

@ -0,0 +1,8 @@
import { statsProxy } from "~/lib/stats-proxy"
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,8 +1,8 @@
import { statsProxy } from "~/lib/stats-proxy"
import { statsRedirect } from "~/lib/stats-proxy"
export const GET = statsProxy
export const POST = statsProxy
export const PUT = statsProxy
export const DELETE = statsProxy
export const OPTIONS = statsProxy
export const PATCH = statsProxy
export const GET = statsRedirect
export const POST = statsRedirect
export const PUT = statsRedirect
export const DELETE = statsRedirect
export const OPTIONS = statsRedirect
export const PATCH = statsRedirect

View File

@ -1,8 +1,8 @@
import { statsProxy } from "~/lib/stats-proxy"
import { statsRedirect } from "~/lib/stats-proxy"
export const GET = statsProxy
export const POST = statsProxy
export const PUT = statsProxy
export const DELETE = statsProxy
export const OPTIONS = statsProxy
export const PATCH = statsProxy
export const GET = statsRedirect
export const POST = statsRedirect
export const PUT = statsRedirect
export const DELETE = statsRedirect
export const OPTIONS = statsRedirect
export const PATCH = statsRedirect

View File

@ -50,7 +50,7 @@ const rangeLabels: Record<UsageRange, string> = {
}
const statsHomeTitle = "OpenCode Stats"
const statsHomeDescription = "OpenCode usage, market share, token cost, and session cost stats."
const statsHomeFallbackUrl = "https://opencode.ai/stats/"
const statsHomeFallbackUrl = "https://opencode.ai/data/"
const statsUnfurlPath = "banner.png"
const statsUnfurlAlt = "OpenCode Stats wordmark on a dark patterned background"
const usageColors = [
@ -184,8 +184,8 @@ export default function StatsHome() {
function getStatsHomeUrl(base: string, requestUrl: string) {
const url = new URL(base, requestUrl)
if (url.hostname === "stats.opencode.ai") return "https://opencode.ai/stats/"
if (url.hostname === "stats.dev.opencode.ai") return "https://dev.opencode.ai/stats/"
if (url.hostname === "stats.opencode.ai") return "https://opencode.ai/data/"
if (url.hostname === "stats.dev.opencode.ai") return "https://dev.opencode.ai/data/"
return url.toString()
}

View File

@ -3,7 +3,7 @@ import { nitro } from "nitro/vite"
import { defineConfig, type PluginOption } from "vite"
export default defineConfig({
base: "/stats/",
base: "/data/",
plugins: [
solidStart() as PluginOption,
nitro({