Skip to content
Next Next commit
add js sdk
  • Loading branch information
buenaflor committed Aug 6, 2024
commit d7eac95f16c30944b170551a84a33959ab632aeb
16 changes: 13 additions & 3 deletions flutter/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:sentry_isar/sentry_isar.dart';
import 'package:sentry_logging/sentry_logging.dart';
import 'package:sentry_sqflite/sentry_sqflite.dart';
import 'package:sqflite/sqflite.dart';

// import 'package:sqflite_common_ffi/sqflite_ffi.dart';
// import 'package:sqflite_common_ffi_web/sqflite_ffi_web.dart';
import 'package:universal_platform/universal_platform.dart';
Expand Down Expand Up @@ -54,6 +55,14 @@ Future<void> main() async {
),
exampleDsn,
);

loadSentryJS();

Future.delayed(const Duration(seconds: 2), () async {
await initSentryJS((options) {
options.dsn = exampleDsn;
});
});
}

Future<void> setupSentry(
Expand Down Expand Up @@ -774,9 +783,10 @@ void navigateToAutoCloseScreen(BuildContext context) {

Future<void> tryCatch() async {
try {
throw StateError('try catch');
} catch (error, stackTrace) {
await Sentry.captureException(error, stackTrace: stackTrace);
// Some code that might throw
throw Exception('Test exception');
} catch (e, stackTrace) {
SentryJS.captureException(e);
}
}

Expand Down
1 change: 1 addition & 0 deletions flutter/lib/sentry_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ export 'src/user_interaction/sentry_user_interaction_widget.dart';
export 'src/binding_wrapper.dart';
export 'src/sentry_widget.dart';
export 'src/navigation/sentry_display_widget.dart';
export 'src/test_web.dart';
69 changes: 69 additions & 0 deletions flutter/lib/src/test_web.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
@JS()
library web_sentry_loader;

import 'dart:async';

import 'package:js/js.dart';
import 'package:js/js_util.dart' as js_util;
import 'dart:html';

import '../sentry_flutter.dart';

@JS('Sentry')
class SentryJS {
external static void init(dynamic options);

external static dynamic captureException(dynamic exception);

external static dynamic captureMessage(String message);

external static dynamic replayIntegration(dynamic configuration);

external static dynamic replayCanvasIntegration();
}

void loadSentryJS() {
// if (_sentry != null) return; // Already loaded

final script = ScriptElement()
..src = 'https://browser.sentry-cdn.com/8.24.0/bundle.tracing.replay.min.js'
..integrity =
'sha384-eEn/WSvcP5C2h5g0AGe5LCsheNNlNkn/iV8y5zOylmPoOfSyvZ23HBDnOhoB0sdL'
..crossOrigin = 'anonymous';

document.head!.append(script);

// src="https://browser.sentry-cdn.com/8.24.0/replay-canvas.min.js"
// integrity="sha384-gSFCG8IdZobb6PWs7SwuaES/R5PPt+gw4y6N/Kkwlic+1Hzf21EUm5Dg/WbYMxTE"
// crossorigin="anonymous"

final script2 = ScriptElement()
..src = 'https://browser.sentry-cdn.com/8.24.0/replay-canvas.min.js'
..integrity =
'sha384-gSFCG8IdZobb6PWs7SwuaES/R5PPt+gw4y6N/Kkwlic+1Hzf21EUm5Dg/WbYMxTE'
..crossOrigin = 'anonymous';

document.head!.append(script2);
}

Future<void> initSentryJS(
FutureOr<void> Function(SentryOptions) configuration) async {
final options = SentryOptions();
await configuration(options);

final jsOptions = js_util.jsify({
'dsn': options.dsn,
'debug': true,
'replaysSessionSampleRate': 1.0,
'replaysOnErrorSampleRate': 1.0,
'integrations': [
SentryJS.replayIntegration(js_util.jsify({
'maskAllText': false,
'blockAllMedia': false,
})),
SentryJS.replayCanvasIntegration(),
],
});

SentryJS.init(jsOptions);
}