Use proxy-safe relative URLs

This commit is contained in:
Codex
2026-07-08 06:24:02 +00:00
parent 65c1e8bddf
commit bbe7b6f562
4 changed files with 19 additions and 5 deletions
+15 -2
View File
@@ -20,8 +20,16 @@ let page = 1;
const pageSize = 20;
let polling: number | undefined;
function serviceBaseUrl() {
const url = new URL(location.href);
url.pathname = url.pathname.replace(/\/admin\/?$/, "/");
url.search = "";
url.hash = "";
return url;
}
function api(path: string, options: RequestInit = {}) {
return fetch(`/aishare/api${path}`, {
return fetch(new URL(`api${path}`, serviceBaseUrl()), {
...options,
headers: {
"content-type": "application/json",
@@ -31,6 +39,11 @@ function api(path: string, options: RequestInit = {}) {
});
}
function captureUrl(capture: Capture) {
if (capture.slug) return new URL(`${capture.slug}/`, serviceBaseUrl()).href;
return capture.publicUrl || "";
}
function fmt(value: string | null) {
if (!value) return "";
return new Date(value).toLocaleString();
@@ -184,7 +197,7 @@ async function loadCaptures() {
tbody.innerHTML = captures
.map((capture) => {
const title = capture.title || capture.slug || capture.sourceUrl;
const link = capture.publicUrl || "";
const link = captureUrl(capture);
return `
<tr>
<td>
+2 -2
View File
@@ -146,7 +146,7 @@ function pageScript(slug: string): string {
return device + "-" + theme;
}
function downloadShot(variant) {
location.href = "/aishare/${slug}/screenshots/" + variant + ".png";
location.href = "screenshots/" + variant + ".png";
}
var toastTimer;
function showToast(message) {
@@ -240,7 +240,7 @@ export function renderConversationPage(slug: string, conversation: NormalizedCon
</main>
<section class="downloads">
<div class="downloads-inner">
<a class="icon-button" href="/aishare/${slug}/download" aria-label="Download export" title="Download export">${icons.download}</a>
<a class="icon-button" href="download" aria-label="Download export" title="Download export">${icons.download}</a>
<div class="shot-control">
<button class="icon-button shot-main" type="button" data-shot-current aria-label="Download screenshot" title="Download screenshot">${icons.image}</button>
<details>
+1
View File
@@ -66,6 +66,7 @@ function safeSendFrom(root: string, requested: string, res: Response): void {
res.sendFile(target);
}
app.use(`${config.basePath}/assets`, express.static(path.resolve("dist-client/assets"), { immutable: true, maxAge: "1y" }));
app.use(`${config.basePath}/admin-assets`, express.static(path.resolve("dist-client"), { immutable: true, maxAge: "1y" }));
app.get(`${config.basePath}/admin`, (_req, res) => {
+1 -1
View File
@@ -2,7 +2,7 @@ import { defineConfig } from "vite";
export default defineConfig({
root: "client",
base: "/aishare/admin-assets/",
base: "./",
build: {
outDir: "../dist-client",
emptyOutDir: true