Backend: add PUBLIC_BASE_PATH for NIP-98 URL behind /api proxy

Made-with: Cursor
This commit is contained in:
Michaël
2026-02-28 00:21:01 -03:00
parent c1ee2d54f9
commit bdb4892014
2 changed files with 5 additions and 2 deletions

View File

@@ -24,6 +24,8 @@ function envBool(key: string, defaultValue: boolean): boolean {
export const config = { export const config = {
port: envInt("PORT", 3001), port: envInt("PORT", 3001),
trustProxy: envBool("TRUST_PROXY", false), trustProxy: envBool("TRUST_PROXY", false),
/** Public path prefix when behind a reverse proxy that strips it (e.g. nginx /api/ -> backend /). */
publicBasePath: (process.env.PUBLIC_BASE_PATH ?? "").replace(/\/$/, ""),
allowedOrigins: (process.env.ALLOWED_ORIGINS ?? process.env.FRONTEND_URL ?? "http://localhost:5173,http://localhost:5174").split(",").map((s) => s.trim()), allowedOrigins: (process.env.ALLOWED_ORIGINS ?? process.env.FRONTEND_URL ?? "http://localhost:5173,http://localhost:5174").split(",").map((s) => s.trim()),
// Database: omit DATABASE_URL for SQLite; set for Postgres // Database: omit DATABASE_URL for SQLite; set for Postgres

View File

@@ -83,11 +83,12 @@ export async function nip98Auth(req: Request, res: Response, next: NextFunction)
return; return;
} }
// Reconstruct absolute URL (protocol + host + path + query) // Reconstruct absolute URL (protocol + host + base path + path + query)
const proto = (req.headers["x-forwarded-proto"] as string | undefined) ?? ((req.socket as { encrypted?: boolean }).encrypted ? "https" : "http"); const proto = (req.headers["x-forwarded-proto"] as string | undefined) ?? ((req.socket as { encrypted?: boolean }).encrypted ? "https" : "http");
const host = (req.headers["x-forwarded-host"] as string | undefined) ?? req.headers.host ?? ""; const host = (req.headers["x-forwarded-host"] as string | undefined) ?? req.headers.host ?? "";
const path = req.originalUrl ?? req.url; const path = req.originalUrl ?? req.url;
const absoluteUrl = `${proto}://${host}${path}`; const basePath = config.publicBasePath ? `/${config.publicBasePath.replace(/^\//, "")}` : "";
const absoluteUrl = `${proto}://${host}${basePath}${path}`;
if (u !== absoluteUrl) { if (u !== absoluteUrl) {
res.status(401).json({ res.status(401).json({
code: "invalid_nip98", code: "invalid_nip98",