getsentry / getsentry/sentry-javascript

Add tunneling option to @sentry/astro

Aperta
#10,309 4 commenti 0 reazioni 1 assegnatario Rivendicata da @florian-lefebvre Vedi su GitHub
Astro Improvement
Lingua principale
TypeScript
Stelle
8.7k
Fork
1.8k
Merge medio
1g 17h
PR unite (30g)
515

Descrizione

### 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:

```ts
// 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

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.