Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 39x 39x 39x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import url from "node:url";
import { logger } from "server/utils/logger";
import { ApiError } from "shared/types/api/errors";
const sentryHost = "sentry.io";
const knownProjectIds = new Set(["/6579203", "/6578391", "/6579491"]);
interface ResendSentryError extends ApiError {
errorId: "unknown";
}
export const resendSentryRequest = async (
envelope: Buffer,
): Promise<null | ResendSentryError> => {
try {
const piece = envelope.subarray(0, envelope.indexOf("\n"));
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const header = JSON.parse(piece.toString());
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
const { hostname, pathname } = new url.URL(header.dsn as string);
Iif (!hostname.endsWith(`.${sentryHost}`)) {
logger.error(new Error(`invalid host: ${hostname}`));
return {
message: "Sentry tunnel: Invalid host",
status: "error",
errorId: "unknown",
};
}
const projectId = pathname.endsWith("/") ? pathname.slice(0, -1) : pathname;
Iif (!knownProjectIds.has(projectId)) {
logger.error(new Error(`invalid project id: ${projectId}`));
return {
message: "Sentry tunnel: Invalid project",
status: "error",
errorId: "unknown",
};
}
const sentryUrl = `https://${sentryHost}/api/${projectId}/envelope/`;
await fetch(sentryUrl, {
method: "POST",
headers: { "Content-Type": "application/x-sentry-envelope" },
body: new Uint8Array(envelope),
});
return null;
} catch (error) {
logger.error(new Error("Sentry tunnel error", { cause: error }));
return {
message: "Sentry tunnel: Unknown error",
status: "error",
errorId: "unknown",
};
}
};
|