getsentry / getsentry/sentry-javascript

Add tunneling option to @sentry/astro

未关闭
#10,309 4 条评论 0 个 reaction 已指派 1 人 已被 @florian-lefebvre 认领 在 GitHub 查看
Astro Improvement
主要语言
TypeScript
星标
8.7k
派生
1.8k
平均合并
1 天 17 小时
30 天内合并 PR
515

描述

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

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。