Skip to content

Add tunneling option to @sentry/astro #10309

@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

No fields configured for issues without a type.

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions