diff --git a/package-lock.json b/package-lock.json index 301b0ff7..ebe0fcab 100644 Binary files a/package-lock.json and b/package-lock.json differ diff --git a/package.json b/package.json index 4c400153..f13ed833 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,6 @@ }, "dependencies": { "@aws-sdk/client-s3": "^3.899.0", - "@sentry/node": "^9.46.0", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "amqplib": "^0.10.9", diff --git a/src/api/Server.ts b/src/api/Server.ts index 910e3496..3db2e6e2 100644 --- a/src/api/Server.ts +++ b/src/api/Server.ts @@ -22,7 +22,6 @@ import { ConnectionLoader, Email, JSONReplacer, - Sentry, WebAuthn, initDatabase, initEvent, @@ -80,7 +79,6 @@ export class SpacebarServer extends Server { await Email.init(); await ConnectionConfig.init(); await initInstance(); - await Sentry.init(this.app); WebAuthn.init(); const logRequests = process.env["LOG_REQUESTS"] != undefined; @@ -157,8 +155,6 @@ export class SpacebarServer extends Server { this.app.use(ErrorHandler); - Sentry.errorHandler(this.app); - ConnectionLoader.loadConnections(); if (logRequests) diff --git a/src/api/middlewares/Authentication.ts b/src/api/middlewares/Authentication.ts index b297a40c..987493f9 100644 --- a/src/api/middlewares/Authentication.ts +++ b/src/api/middlewares/Authentication.ts @@ -16,7 +16,6 @@ along with this program. If not, see . */ -import * as Sentry from "@sentry/node"; import { checkToken, Rights } from "@spacebar/util"; import { NextFunction, Request, Response } from "express"; import { HTTPError } from "lambert-server"; @@ -108,8 +107,6 @@ export async function Authentication( if (!req.headers.authorization) return next(new HTTPError("Missing Authorization Header", 401)); - Sentry.setUser({ id: req.user_id }); - try { const { decoded, user } = await checkToken(req.headers.authorization); diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts index 1422702d..8356ee61 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts @@ -16,7 +16,6 @@ along with this program. If not, see . */ -import * as Sentry from "@sentry/node"; import { EmbedHandlers } from "@spacebar/api"; import { Application, @@ -422,12 +421,6 @@ export async function postHandleMessage(message: Message) { } } catch (e) { console.error(`[Embeds] Error while generating embed for ${link}`, e); - Sentry.captureException(e, (scope) => { - scope.clear(); - scope.setContext("request", { url: link }); - return scope; - }); - continue; } } diff --git a/src/bundle/Server.ts b/src/bundle/Server.ts index 8ef72750..e6fcd97e 100644 --- a/src/bundle/Server.ts +++ b/src/bundle/Server.ts @@ -28,7 +28,7 @@ import * as Webrtc from "@spacebar/webrtc"; import { CDNServer } from "@spacebar/cdn"; import express from "express"; import { green, bold } from "picocolors"; -import { Config, initDatabase, Sentry } from "@spacebar/util"; +import { Config, initDatabase } from "@spacebar/util"; const app = express(); const server = http.createServer(); @@ -53,13 +53,11 @@ process.on("SIGTERM", async () => { await api.stop(); await webrtc.stop(); server.close(); - Sentry.close(); }); async function main() { await initDatabase(); await Config.init(); - await Sentry.init(app); const logRequests = process.env["LOG_REQUESTS"] != undefined; if (logRequests) { @@ -89,8 +87,6 @@ async function main() { webrtc.start(), ]); - Sentry.errorHandler(app); - console.log(`[Server] ${green(`Listening on port ${bold(port)}`)}`); } diff --git a/src/cdn/Server.ts b/src/cdn/Server.ts index 287b2950..062ae19e 100644 --- a/src/cdn/Server.ts +++ b/src/cdn/Server.ts @@ -22,7 +22,6 @@ import { Config, initDatabase, registerRoutes, - Sentry, } from "@spacebar/util"; import { CORS, BodyParser } from "@spacebar/api"; import path from "path"; @@ -45,7 +44,6 @@ export class CDNServer extends Server { await initDatabase(); await Config.init(); await this.cleanupSignaturesInDb(); - await Sentry.init(this.app); const logRequests = process.env["LOG_REQUESTS"] != undefined; if (logRequests) { @@ -123,8 +121,6 @@ export class CDNServer extends Server { ); this.log("verbose", "[Server] Route /guilds/banners registered"); - Sentry.errorHandler(this.app); - return super.start(); } diff --git a/src/gateway/Server.ts b/src/gateway/Server.ts index 94b4fbe9..79206e4a 100644 --- a/src/gateway/Server.ts +++ b/src/gateway/Server.ts @@ -24,7 +24,6 @@ import { Config, initDatabase, initEvent, - Sentry, } from "@spacebar/util"; import ws from "ws"; import { Connection } from "./events/Connection"; @@ -74,7 +73,6 @@ export class Server { await initDatabase(); await Config.init(); await initEvent(); - await Sentry.init(); // temporary fix await cleanupOnStartup(); diff --git a/src/gateway/events/Message.ts b/src/gateway/events/Message.ts index 8ec9fc7d..01836906 100644 --- a/src/gateway/events/Message.ts +++ b/src/gateway/events/Message.ts @@ -16,7 +16,6 @@ along with this program. If not, see . */ -import * as Sentry from "@sentry/node"; import { CLOSECODES, OPCODES, Payload, WebSocket } from "@spacebar/gateway"; import { ErlpackType, PayloadSchema } from "@spacebar/util"; import fs from "fs/promises"; @@ -25,6 +24,7 @@ import path from "path"; import WS from "ws"; import OPCodeHandlers from "../opcodes"; import { check } from "../opcodes/instanceOf"; + const bigIntJson = BigIntJson({ storeAsString: true }); let erlpack: ErlpackType | null = null; @@ -89,29 +89,8 @@ export async function Message(this: WebSocket, buffer: WS.Data) { } try { - return await Sentry.startSpan( - // Emma [it/its]@Rory&: is this the right function to migrate to in v8? - { - op: "websocket.server", - name: `GATEWAY ${OPCODES[data.op]}`, - attributes: { - // this needs to be reworked :) - ...data.d, - token: data?.d?.token ? "[Redacted]" : undefined, - }, - }, - async () => { - const ret = await OPCodeHandler.call(this, data); - Sentry.setUser({ id: this.user_id }); - return ret; - }, - ); + return await OPCodeHandler.call(this, data); } catch (error) { - Sentry.captureException(error, { - user: { - id: this.user_id, - }, - }); console.error(`Error: Op ${data.op}`, error); // if (!this.CLOSED && this.CLOSING) return this.close(CLOSECODES.Unknown_error); diff --git a/src/util/config/Config.ts b/src/util/config/Config.ts index 56054641..1458ab4b 100644 --- a/src/util/config/Config.ts +++ b/src/util/config/Config.ts @@ -35,7 +35,6 @@ import { RegionConfiguration, RegisterConfiguration, SecurityConfiguration, - SentryConfiguration, TemplateConfiguration, UserConfiguration, } from "../config"; @@ -56,7 +55,6 @@ export class ConfigValue { kafka: KafkaConfiguration = new KafkaConfiguration(); templates: TemplateConfiguration = new TemplateConfiguration(); metrics: MetricsConfiguration = new MetricsConfiguration(); - sentry: SentryConfiguration = new SentryConfiguration(); defaults: DefaultsConfiguration = new DefaultsConfiguration(); external: ExternalTokensConfiguration = new ExternalTokensConfiguration(); email: EmailConfiguration = new EmailConfiguration(); diff --git a/src/util/config/types/SentryConfiguration.ts b/src/util/config/types/SentryConfiguration.ts deleted file mode 100644 index 3d92c62a..00000000 --- a/src/util/config/types/SentryConfiguration.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - Spacebar: A FOSS re-implementation and extension of the Discord.com backend. - Copyright (C) 2023 Spacebar and Spacebar Contributors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -import { hostname } from "os"; - -export class SentryConfiguration { - enabled: boolean = false; - endpoint: string = - "https://05e8e3d005f34b7d97e920ae5870a5e5@sentry.thearcanebrony.net/6"; - traceSampleRate: number = 1.0; - environment: string = hostname(); -} diff --git a/src/util/config/types/index.ts b/src/util/config/types/index.ts index a141bacf..cc671bfa 100644 --- a/src/util/config/types/index.ts +++ b/src/util/config/types/index.ts @@ -34,7 +34,6 @@ export * from "./RabbitMQConfiguration"; export * from "./RegionConfiguration"; export * from "./RegisterConfiguration"; export * from "./SecurityConfiguration"; -export * from "./SentryConfiguration"; export * from "./subconfigurations"; export * from "./TemplateConfiguration"; export * from "./UsersConfiguration"; diff --git a/src/util/util/Sentry.ts b/src/util/util/Sentry.ts deleted file mode 100644 index 005b09e7..00000000 --- a/src/util/util/Sentry.ts +++ /dev/null @@ -1,130 +0,0 @@ -/* - Spacebar: A FOSS re-implementation and extension of the Discord.com backend. - Copyright (C) 2023 Spacebar and Spacebar Contributors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ - -import { yellow } from "picocolors"; -import { Config } from "./Config"; - -import * as Integrations from "@sentry/node"; -import express from "express"; - -// Work around for when bundle calls api/etc -let errorHandlersUsed = false; - -export const Sentry = { - /** Call BEFORE registering your routes */ - init: async (app?: express.Application) => { - const { enabled, endpoint, traceSampleRate, environment } = - Config.get().sentry; - if (!enabled) return; - - if (Integrations.getClient()) return; // we've already initialised sentry - - console.log("[Sentry] Enabling sentry..."); - - if (traceSampleRate >= 0.8) { - console.log( - `[Sentry] ${yellow( - "Your sentry trace sampling rate is >= 80%. For large loads, this may degrade performance.", - )}`, - ); - } - - const integrations = [ - Integrations.httpIntegration(), - Integrations.rewriteFramesIntegration({ - root: __dirname, - }), - Integrations.httpIntegration(), - ...Integrations.getAutoPerformanceIntegrations(), - ]; - - //deprecated in v8? unable to test - // if (app) - // integrations.push( - // Integrations.expressIntegration({ - // app, - // }), - // ); - - Integrations.init({ - dsn: endpoint, - integrations, - tracesSampleRate: traceSampleRate, // naming? - environment, - }); - - Integrations.addEventProcessor((event) => { - if (event.transaction) { - // Rewrite things that look like IDs to `:id` for sentry - event.transaction = event.transaction - .split("/") - .map((x) => (!parseInt(x) ? x : ":id")) - .join("/"); - } - - // TODO: does this even do anything? - delete event.request?.cookies; - if (event.request?.headers) { - delete event.request.headers["X-Real-Ip"]; - delete event.request.headers["X-Forwarded-For"]; - delete event.request.headers["X-Forwarded-Host"]; - delete event.request.headers["X-Super-Properties"]; - } - - if (event.breadcrumbs) { - event.breadcrumbs = event.breadcrumbs.filter((x) => { - // Filter breadcrumbs that we don't care about - if (x.message?.includes("identified as")) return false; - if (x.message?.includes("[WebSocket] closed")) return false; - if ( - x.message?.includes( - "Got Resume -> cancel not implemented", - ) - ) - return false; - if (x.message?.includes("[Gateway] New connection from")) - return false; - - return true; - }); - } - - return event; - }); - }, - - /** Call AFTER registering your routes */ - errorHandler: (app: express.Application) => { - if (!Config.get().sentry.enabled) return; - if (errorHandlersUsed) return; - errorHandlersUsed = true; - - Integrations.setupExpressErrorHandler(app); - - // The typings for this are broken? - // eslint-disable-next-line @typescript-eslint/no-explicit-any - app.use(function onError(err: any, req: any, res: any, next: any) { - res.statusCode = 500; - res.end(res.sentry + "\n"); - }); - }, - - close: () => { - Integrations.close(); - }, -}; diff --git a/src/util/util/index.ts b/src/util/util/index.ts index 05bdcdf8..e7d8caa9 100644 --- a/src/util/util/index.ts +++ b/src/util/util/index.ts @@ -37,7 +37,6 @@ export * from "./Permissions"; export * from "./RabbitMQ"; export * from "./Regex"; export * from "./Rights"; -export * from "./Sentry"; export * from "./Snowflake"; export * from "./Stopwatch"; export * from "./String";