diff options
Diffstat (limited to 'packages/backend/src/server/api')
| -rw-r--r-- | packages/backend/src/server/api/ApiCallService.ts | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/packages/backend/src/server/api/ApiCallService.ts b/packages/backend/src/server/api/ApiCallService.ts index 7a4af407a3..27c79ab438 100644 --- a/packages/backend/src/server/api/ApiCallService.ts +++ b/packages/backend/src/server/api/ApiCallService.ts @@ -7,7 +7,6 @@ import { randomUUID } from 'node:crypto'; import * as fs from 'node:fs'; import * as stream from 'node:stream/promises'; import { Inject, Injectable } from '@nestjs/common'; -import * as Sentry from '@sentry/node'; import { DI } from '@/di-symbols.js'; import { getIpHash } from '@/misc/get-ip-hash.js'; import type { MiLocalUser, MiUser } from '@/models/User.js'; @@ -37,6 +36,7 @@ export class ApiCallService implements OnApplicationShutdown { private logger: Logger; private userIpHistories: Map<MiUser['id'], Set<string>>; private userIpHistoriesClearIntervalId: NodeJS.Timeout; + private Sentry: typeof import('@sentry/node') | null = null; constructor( @Inject(DI.meta) @@ -59,6 +59,12 @@ export class ApiCallService implements OnApplicationShutdown { this.userIpHistoriesClearIntervalId = setInterval(() => { this.userIpHistories.clear(); }, 1000 * 60 * 60); + + if (this.config.sentryForBackend) { + import('@sentry/node').then((Sentry) => { + this.Sentry = Sentry; + }); + } } #sendApiError(reply: FastifyReply, err: ApiError): void { @@ -120,8 +126,8 @@ export class ApiCallService implements OnApplicationShutdown { }, }); - if (this.config.sentryForBackend) { - Sentry.captureMessage(`Internal error occurred in ${ep.name}: ${err.message}`, { + if (this.Sentry != null) { + this.Sentry.captureMessage(`Internal error occurred in ${ep.name}: ${err.message}`, { level: 'error', user: { id: userId, @@ -432,8 +438,8 @@ export class ApiCallService implements OnApplicationShutdown { } // API invoking - if (this.config.sentryForBackend) { - return await Sentry.startSpan({ + if (this.Sentry != null) { + return await this.Sentry.startSpan({ name: 'API: ' + ep.name, }, () => ep.exec(data, user, token, file, request.ip, request.headers) .catch((err: Error) => this.#onExecError(ep, data, err, user?.id))); |