diff --git a/src/common/sentry.ts b/src/common/sentry.ts index 4bb495dbc6..282afa6f32 100644 --- a/src/common/sentry.ts +++ b/src/common/sentry.ts @@ -7,6 +7,8 @@ import { Dedupe, Offline } from "@sentry/integrations"; import { sentryDsn, isProduction } from "./vars"; import { UserStore } from "./user-store"; import { inspect } from "util"; +import type { BrowserOptions } from "@sentry/electron/renderer"; +import type { ElectronMainOptions } from "@sentry/electron/main"; /** * "Translate" 'browser' to 'main' as Lens developer more familiar with the term 'main' @@ -22,12 +24,12 @@ function mapProcessName(processType: string) { /** * Initialize Sentry for the current process so to send errors for debugging. */ -export async function SentryInit() { +export function initializeSentryReporting(init: (opts: BrowserOptions | ElectronMainOptions) => void) { const processName = mapProcessName(process.type); - const { init } = process.type === "browser" - ? await import("@sentry/electron/main") - : await import("@sentry/electron/renderer"); + if (!sentryDsn) { + return; // do nothing if not configured to avoid uncaught error in dev mode + } init({ beforeSend: (event) => { diff --git a/src/main/index.ts b/src/main/index.ts index 0a902d3fd0..4162b30bcd 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -35,7 +35,7 @@ import configurePackages from "../common/configure-packages"; import { PrometheusProviderRegistry } from "./prometheus"; import * as initializers from "./initializers"; import { WeblinkStore } from "../common/weblink-store"; -import { SentryInit } from "../common/sentry"; +import { initializeSentryReporting } from "../common/sentry"; import { ensureDir } from "fs-extra"; import { initMenu } from "./menu/menu"; import { kubeApiUpgradeRequest } from "./proxy-functions"; @@ -61,6 +61,7 @@ import syncGeneralCatalogEntitiesInjectable from "./catalog-sources/sync-general import hotbarStoreInjectable from "../common/hotbar-store.injectable"; import applicationMenuItemsInjectable from "./menu/application-menu-items.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; +import { init } from "@sentry/electron/main"; async function main(di: DiContainer) { app.setName(appName); @@ -68,7 +69,7 @@ async function main(di: DiContainer) { /** * Note: this MUST be called before electron's "ready" event has been emitted. */ - await SentryInit(); + initializeSentryReporting(init); await di.runSetups(); await app.whenReady(); diff --git a/src/renderer/bootstrap.tsx b/src/renderer/bootstrap.tsx index d8201ed6ec..3d1f9abf3d 100644 --- a/src/renderer/bootstrap.tsx +++ b/src/renderer/bootstrap.tsx @@ -21,7 +21,7 @@ import configurePackages from "../common/configure-packages"; import * as initializers from "./initializers"; import logger from "../common/logger"; import { WeblinkStore } from "../common/weblink-store"; -import { SentryInit } from "../common/sentry"; +import { initializeSentryReporting } from "../common/sentry"; import { registerCustomThemes } from "./components/monaco-editor"; import { getDi } from "./getDi"; import { DiContextProvider } from "@ogre-tools/injectable-react"; @@ -41,8 +41,8 @@ import navigateToAddClusterInjectable from "../common/front-end-routing/routes/ import addSyncEntriesInjectable from "./initializers/add-sync-entries.injectable"; import hotbarStoreInjectable from "../common/hotbar-store.injectable"; import { bindEvents } from "./navigation/events"; -import deleteClusterDialogModelInjectable - from "./components/delete-cluster-dialog/delete-cluster-dialog-model/delete-cluster-dialog-model.injectable"; +import deleteClusterDialogModelInjectable from "./components/delete-cluster-dialog/delete-cluster-dialog-model/delete-cluster-dialog-model.injectable"; +import { init } from "@sentry/electron/renderer"; configurePackages(); // global packages registerCustomThemes(); // monaco editor themes @@ -60,8 +60,9 @@ async function attachChromeDebugger() { export async function bootstrap(di: DiContainer) { if (process.isMainFrame) { - await SentryInit(); + initializeSentryReporting(init); } + await di.runSetups(); // TODO: Consolidate import time side-effect to setup time