43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { Express, Response } from "express";
|
|
import { createProxyMiddleware } from "http-proxy-middleware";
|
|
|
|
const METABASE_HOST = process.env.METABASE_HOST || "localhost";
|
|
const METABASE_PORT = parseInt(process.env.METABASE_PORT || "8088", 10);
|
|
const METABASE_TIMEOUT = 60000;
|
|
|
|
export function setupMetabaseProxy(app: Express): void {
|
|
const metabaseTarget = `http://${METABASE_HOST}:${METABASE_PORT}`;
|
|
|
|
const metabaseProxy = createProxyMiddleware({
|
|
target: metabaseTarget,
|
|
changeOrigin: true,
|
|
timeout: METABASE_TIMEOUT,
|
|
proxyTimeout: METABASE_TIMEOUT,
|
|
pathRewrite: {
|
|
"^/metabase": "",
|
|
},
|
|
on: {
|
|
error: (err, _req, res) => {
|
|
console.error("[Metabase Proxy] Error:", err.message);
|
|
if (res && typeof (res as Response).status === "function") {
|
|
(res as Response).status(502).json({
|
|
error: "Metabase indisponível",
|
|
message: "O Metabase está iniciando ou não está acessível. Tente novamente em alguns segundos.",
|
|
target: metabaseTarget,
|
|
});
|
|
}
|
|
},
|
|
proxyRes: (proxyRes, _req, _res) => {
|
|
const location = proxyRes.headers["location"];
|
|
if (location && typeof location === "string" && location.startsWith("/")) {
|
|
proxyRes.headers["location"] = `/metabase${location}`;
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|
|
app.use("/metabase", metabaseProxy);
|
|
|
|
console.log(`[Metabase Proxy] Configurado -> /metabase/* => ${metabaseTarget}`);
|
|
}
|