Skip to main content

tauri_plugin_sentry/
lib.rs

1use tauri::{
2    generate_handler,
3    plugin::{Builder, TauriPlugin},
4    Manager, Runtime,
5};
6
7#[cfg(all(not(target_os = "ios"), feature = "minidump"))]
8pub use sentry_rust_minidump as minidump;
9
10#[derive(Debug, Clone)]
11pub struct JavaScriptOptions {
12    pub inject: bool,
13    pub debug: bool,
14}
15
16impl JavaScriptOptions {
17    pub fn no_injection() -> Self {
18        Self {
19            inject: false,
20            ..Default::default()
21        }
22    }
23}
24
25impl Default for JavaScriptOptions {
26    fn default() -> Self {
27        Self {
28            inject: true,
29            #[cfg(not(debug_assertions))]
30            debug: false,
31            #[cfg(debug_assertions)]
32            debug: true,
33        }
34    }
35}
36
37#[derive(Debug, Clone, Default)]
38pub struct Options {
39    pub javascript: JavaScriptOptions,
40}
41
42mod commands;
43
44pub fn init_with_options<R: Runtime>(
45    sentry_client: &sentry::Client,
46    options: Options,
47) -> TauriPlugin<R> {
48    let sentry_client = sentry_client.clone();
49
50    let mut plugin_builder = Builder::<R>::new("sentry")
51        .invoke_handler(generate_handler![commands::breadcrumb, commands::envelope])
52        .setup(move |app, _| {
53            app.manage(sentry_client);
54            Ok(())
55        });
56
57    if options.javascript.inject {
58        plugin_builder = plugin_builder.js_init_script(
59            include_str!("../dist/inject.min.js")
60                .replace("__DEBUG__", &format!("{}", options.javascript.debug)),
61        );
62    }
63
64    plugin_builder.build()
65}
66
67pub fn init<R: Runtime>(sentry_client: &sentry::Client) -> TauriPlugin<R> {
68    init_with_options(sentry_client, Default::default())
69}
70
71pub fn init_with_no_injection<R: Runtime>(sentry_client: &sentry::Client) -> TauriPlugin<R> {
72    init_with_options(
73        sentry_client,
74        Options {
75            javascript: JavaScriptOptions::no_injection(),
76        },
77    )
78}