Skip to content

Add tunneling option to @sentry/astro #10309

Open
@florian-lefebvre

Description

@florian-lefebvre

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

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions