import { createTransport } from '@sentry/browser';
import { invoke } from '@tauri-apps/api/core';
let ipcFailed = false;
export function makeRendererTransport(options) {
return createTransport(options, async (request) => {
if (ipcFailed) {
return { statusCode: 200 };
}
try {
await invoke('plugin:sentry|envelope', { envelope: request.body });
}
catch (e) {
console.error('Failed to send envelope to Rust:', e);
ipcFailed = true;
}
return { statusCode: 200 };
});
}
export function sendBreadcrumbToRust(breadcrumb) {
if (ipcFailed) {
return null;
}
if (typeof breadcrumb.data?.url === 'string' &&
(breadcrumb.data.url.startsWith('ipc://') || breadcrumb.data.url.match(/^https?:\/\/ipc\.localhost/))) {
return null;
}
invoke('plugin:sentry|breadcrumb', { breadcrumb }).catch((e) => {
console.error('Failed to send breadcrumb to Rust:', e);
ipcFailed = true;
});
return null;
}
export const defaultOptions = {
dsn: 'https://123456@dummy.dsn/0',
integrations: (integrations) => integrations.filter((i) => i.name !== 'BrowserSession'),
transport: makeRendererTransport,
beforeBreadcrumb: sendBreadcrumbToRust,
};