diff --git a/nuvemshop/handlers/sitemap.ts b/nuvemshop/handlers/sitemap.ts index 0504f2768..9255afa05 100644 --- a/nuvemshop/handlers/sitemap.ts +++ b/nuvemshop/handlers/sitemap.ts @@ -41,7 +41,7 @@ export default function Sitemap( const url = ctx.publicUrl; return async ( req: Request, - ctx: ConnInfo, + connInfoctx: ConnInfo, ) => { if (!url) { throw new Error("Missing publicUrl"); @@ -52,7 +52,7 @@ export default function Sitemap( const response = await Proxy({ url: publicUrl, - })(req, ctx); + })(req, connInfoctx); if (!response.ok) { return response; diff --git a/website/handlers/proxy.ts b/website/handlers/proxy.ts index e816ecf6e..9d892edea 100644 --- a/website/handlers/proxy.ts +++ b/website/handlers/proxy.ts @@ -3,6 +3,7 @@ import { DecoSiteState } from "deco/mod.ts"; import { Handler } from "std/http/mod.ts"; import { proxySetCookie } from "../../utils/cookie.ts"; import { Script } from "../types.ts"; +import { Monitoring } from "deco/engine/core/resolver.ts"; const HOP_BY_HOP = [ "Keep-Alive", @@ -26,6 +27,22 @@ const removeCFHeaders = (headers: Headers) => { }); }; +async function logClonedResponseBody( + response: Response, + monitoring: Monitoring | undefined, +): Promise { + if (!response.body) { + return; + } + + const clonedResponse = response.clone(); + const text = await clonedResponse.text(); + + monitoring?.logger?.error?.( + `Proxy error = ${response.statusText}, body = ${text}`, + ); +} + /** * @title {{{key}}} - {{{value}}} */ @@ -117,12 +134,30 @@ export default function Proxy({ headers.set(key, value); } - const response = await fetch(to, { - headers, - redirect, - method: req.method, - body: req.body, - }); + const monitoring = isFreshCtx(_ctx) + ? _ctx?.state?.monitoring + : undefined; + + const fecthFunction = async () => { + try { + return await fetch(to, { + headers, + redirect, + method: req.method, + body: req.body, + }); + } catch (err) { + monitoring?.logger?.error?.(err); + + throw err; + } + }; + + const response = await fecthFunction(); + + if (response.status >= 299 || response.status < 200) { + await logClonedResponseBody(response, monitoring); + } const contentType = response.headers.get("Content-Type");