Open
Description
Problem Statement
I think the Next package has an option for tunneling, it would be great to have the same for Astro
Solution Brainstorm
Back when I had a look at the docs, there was a snippet with how to create a tunnel endpoint in PHP. Closest thing I find now is https://docs.sentry.io/platforms/javascript/troubleshooting/#using-the-tunnel-option.
Anyway, it seems fairly easy with the injectRoute
utility. Here is what I've done for a project of mine:
// src/pages/sy/[...params].ts
import type { APIContext } from "astro";
export const prerender = false;
export async function POST({ request }: APIContext) {
const body = await request.text();
let payload: {
sent_at: string;
sdk: { name: string; version: string };
dsn: string;
};
try {
payload = JSON.parse(body.split("\n")[0]);
} catch (err) {
console.error(err);
return new Response(null, { status: 400 });
}
if (!payload.dsn) {
return new Response("Invalid request", { status: 400 });
}
const dsn = new URL(payload.dsn);
const projectID = dsn.pathname.replace(/\//g, "");
if (projectID !== import.meta.env.SECRET_SENTRY_PROJECT_ID) {
return new Response("Invalid request", { status: 400 });
}
await fetch(`https://sentry.io/api/${projectID}/envelope/`, {
method: "POST",
headers: {
"Content-type": "application/x-sentry-envelope",
},
body: JSON.stringify(payload),
});
return new Response(null, { status: 200 });
}
It's not always working so something is probably off. I can contribute this if you can help fix the endpoint logic itself
Metadata
Metadata
Assignees
Type
Projects
Status
No status