summaryrefslogtreecommitdiff
path: root/packages/backend
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend')
-rw-r--r--packages/backend/package.json1
-rw-r--r--packages/backend/src/config.ts17
-rw-r--r--packages/backend/src/core/entities/MetaEntityService.ts1
-rw-r--r--packages/backend/src/models/json-schema/meta.ts32
4 files changed, 48 insertions, 3 deletions
diff --git a/packages/backend/package.json b/packages/backend/package.json
index bcaa6357ce..d7705b2b9e 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -186,6 +186,7 @@
"devDependencies": {
"@jest/globals": "29.7.0",
"@nestjs/platform-express": "10.4.15",
+ "@sentry/vue": "9.8.0",
"@simplewebauthn/types": "12.0.0",
"@swc/jest": "0.2.37",
"@types/accepts": "1.3.7",
diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts
index 32ea700748..646fa07911 100644
--- a/packages/backend/src/config.ts
+++ b/packages/backend/src/config.ts
@@ -7,7 +7,8 @@ import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, resolve } from 'node:path';
import * as yaml from 'js-yaml';
-import * as Sentry from '@sentry/node';
+import type * as Sentry from '@sentry/node';
+import type * as SentryVue from '@sentry/vue';
import type { RedisOptions } from 'ioredis';
type RedisOptionsSource = Partial<RedisOptions> & {
@@ -62,7 +63,12 @@ type Source = {
scope?: 'local' | 'global' | string[];
};
sentryForBackend?: { options: Partial<Sentry.NodeOptions>; enableNodeProfiling: boolean; };
- sentryForFrontend?: { options: Partial<Sentry.NodeOptions> };
+ sentryForFrontend?: {
+ options: Partial<SentryVue.BrowserOptions> & { dsn: string };
+ vueIntegration?: SentryVue.VueIntegrationOptions | null;
+ browserTracingIntegration?: Parameters<typeof SentryVue.browserTracingIntegration>[0] | null;
+ replayIntegration?: Parameters<typeof SentryVue.replayIntegration>[0] | null;
+ };
publishTarballInsteadOfProvideRepositoryUrl?: boolean;
@@ -198,7 +204,12 @@ export type Config = {
redisForTimelines: RedisOptions & RedisOptionsSource;
redisForReactions: RedisOptions & RedisOptionsSource;
sentryForBackend: { options: Partial<Sentry.NodeOptions>; enableNodeProfiling: boolean; } | undefined;
- sentryForFrontend: { options: Partial<Sentry.NodeOptions> } | undefined;
+ sentryForFrontend: {
+ options: Partial<SentryVue.BrowserOptions> & { dsn: string };
+ vueIntegration?: SentryVue.VueIntegrationOptions | null;
+ browserTracingIntegration?: Parameters<typeof SentryVue.browserTracingIntegration>[0] | null;
+ replayIntegration?: Parameters<typeof SentryVue.replayIntegration>[0] | null;
+ } | undefined;
perChannelMaxNoteCacheCount: number;
perUserNotificationsMaxCount: number;
deactivateAntennaThreshold: number;
diff --git a/packages/backend/src/core/entities/MetaEntityService.ts b/packages/backend/src/core/entities/MetaEntityService.ts
index 08717bd066..02783dc450 100644
--- a/packages/backend/src/core/entities/MetaEntityService.ts
+++ b/packages/backend/src/core/entities/MetaEntityService.ts
@@ -127,6 +127,7 @@ export class MetaEntityService {
policies: { ...DEFAULT_POLICIES, ...instance.policies },
+ sentryForFrontend: this.config.sentryForFrontend ?? null,
mediaProxy: this.config.mediaProxy,
enableUrlPreview: instance.urlPreviewEnabled,
noteSearchableScope: (this.config.meilisearch == null || this.config.meilisearch.scope !== 'local') ? 'global' : 'local',
diff --git a/packages/backend/src/models/json-schema/meta.ts b/packages/backend/src/models/json-schema/meta.ts
index 1e25c355ca..2cd7620af0 100644
--- a/packages/backend/src/models/json-schema/meta.ts
+++ b/packages/backend/src/models/json-schema/meta.ts
@@ -211,6 +211,38 @@ export const packedMetaLiteSchema = {
type: 'boolean',
optional: false, nullable: false,
},
+ sentryForFrontend: {
+ type: 'object',
+ optional: false, nullable: true,
+ properties: {
+ options: {
+ type: 'object',
+ optional: false, nullable: false,
+ properties: {
+ dsn: {
+ type: 'string',
+ optional: false, nullable: false,
+ },
+ },
+ additionalProperties: true,
+ },
+ vueIntegration: {
+ type: 'object',
+ optional: true, nullable: true,
+ additionalProperties: true,
+ },
+ browserTracingIntegration: {
+ type: 'object',
+ optional: true, nullable: true,
+ additionalProperties: true,
+ },
+ replayIntegration: {
+ type: 'object',
+ optional: true, nullable: true,
+ additionalProperties: true,
+ },
+ },
+ },
mediaProxy: {
type: 'string',
optional: false, nullable: false,