@sentry/react-native 7.12.0 → 8.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/RNSentry.podspec +9 -4
  2. package/android/libs/replay-stubs.jar +0 -0
  3. package/android/src/main/java/io/sentry/react/RNSentryCompositeOptionsConfiguration.java +25 -0
  4. package/android/src/main/java/io/sentry/react/RNSentryJsonConverter.java +76 -0
  5. package/android/src/main/java/io/sentry/react/RNSentryJsonUtils.java +41 -0
  6. package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +2 -395
  7. package/android/src/main/java/io/sentry/react/RNSentrySDK.java +68 -0
  8. package/android/src/main/java/io/sentry/react/RNSentryStart.java +413 -0
  9. package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
  10. package/dist/js/replay/mobilereplay.d.ts +0 -26
  11. package/dist/js/replay/mobilereplay.d.ts.map +1 -1
  12. package/dist/js/replay/mobilereplay.js.map +1 -1
  13. package/dist/js/sdk.d.ts.map +1 -1
  14. package/dist/js/sdk.js +21 -10
  15. package/dist/js/sdk.js.map +1 -1
  16. package/dist/js/tools/metroconfig.d.ts +9 -1
  17. package/dist/js/tools/metroconfig.d.ts.map +1 -1
  18. package/dist/js/tools/metroconfig.js +9 -2
  19. package/dist/js/tools/metroconfig.js.map +1 -1
  20. package/dist/js/tools/sentryMetroSerializer.d.ts.map +1 -1
  21. package/dist/js/tools/sentryMetroSerializer.js +1 -0
  22. package/dist/js/tools/sentryMetroSerializer.js.map +1 -1
  23. package/dist/js/tools/sentryOptionsSerializer.d.ts +6 -0
  24. package/dist/js/tools/sentryOptionsSerializer.d.ts.map +1 -0
  25. package/dist/js/tools/sentryOptionsSerializer.js +92 -0
  26. package/dist/js/tools/sentryOptionsSerializer.js.map +1 -0
  27. package/dist/js/tools/utils.d.ts +2 -1
  28. package/dist/js/tools/utils.d.ts.map +1 -1
  29. package/dist/js/tools/utils.js.map +1 -1
  30. package/dist/js/utils/worldwide.d.ts +2 -0
  31. package/dist/js/utils/worldwide.d.ts.map +1 -1
  32. package/dist/js/utils/worldwide.js.map +1 -1
  33. package/dist/js/version.d.ts +1 -1
  34. package/dist/js/version.d.ts.map +1 -1
  35. package/dist/js/version.js +1 -1
  36. package/dist/js/version.js.map +1 -1
  37. package/ios/RNSentry+fetchNativeStack.m +1 -0
  38. package/ios/RNSentry.h +3 -0
  39. package/ios/RNSentry.mm +12 -45
  40. package/ios/RNSentryDependencyContainer.h +2 -1
  41. package/ios/RNSentryDependencyContainer.m +1 -0
  42. package/ios/RNSentryEmitNewFrameEvent.h +3 -0
  43. package/ios/RNSentryExperimentalOptions.m +1 -1
  44. package/ios/RNSentryFramesTrackerListener.h +2 -2
  45. package/ios/RNSentryFramesTrackerListener.m +2 -0
  46. package/ios/RNSentryOnDrawReporter.h +2 -1
  47. package/ios/RNSentryOnDrawReporter.m +2 -0
  48. package/ios/RNSentryRNSScreen.m +3 -4
  49. package/ios/RNSentryReplay.mm +0 -5
  50. package/ios/RNSentryReplayBreadcrumbConverter.m +12 -12
  51. package/ios/RNSentrySDK.h +31 -0
  52. package/ios/RNSentrySDK.m +78 -0
  53. package/ios/RNSentryStart.h +25 -0
  54. package/ios/RNSentryStart.m +228 -0
  55. package/ios/RNSentryVersion.m +1 -1
  56. package/ios/SentrySDKWrapper.m +2 -2
  57. package/ios/SentryScreenFramesWrapper.h +14 -0
  58. package/ios/SentryScreenFramesWrapper.m +39 -0
  59. package/package.json +2 -2
  60. package/plugin/build/logger.d.ts +24 -0
  61. package/plugin/build/logger.js +44 -0
  62. package/plugin/build/utils.d.ts +0 -18
  63. package/plugin/build/utils.js +1 -34
  64. package/plugin/build/version.d.ts +2 -0
  65. package/plugin/build/version.js +6 -0
  66. package/plugin/build/withSentry.d.ts +1 -0
  67. package/plugin/build/withSentry.js +11 -10
  68. package/plugin/build/withSentryAndroid.d.ts +6 -1
  69. package/plugin/build/withSentryAndroid.js +52 -8
  70. package/plugin/build/withSentryAndroidGradlePlugin.d.ts +1 -1
  71. package/plugin/build/withSentryAndroidGradlePlugin.js +8 -8
  72. package/plugin/build/withSentryIOS.d.ts +6 -1
  73. package/plugin/build/withSentryIOS.js +55 -7
  74. package/scripts/sentry-xcode.sh +20 -0
  75. package/sentry.gradle +51 -0
  76. package/ts3.8/dist/js/replay/mobilereplay.d.ts +0 -26
  77. package/ts3.8/dist/js/utils/worldwide.d.ts +2 -0
  78. package/ts3.8/dist/js/version.d.ts +1 -1
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.withSentryAndroidGradlePlugin = exports.sentryAndroidGradlePluginVersion = void 0;
4
4
  const config_plugins_1 = require("@expo/config-plugins");
5
- const utils_1 = require("./utils");
6
- exports.sentryAndroidGradlePluginVersion = '5.12.2';
5
+ const logger_1 = require("./logger");
6
+ exports.sentryAndroidGradlePluginVersion = '6.0.0';
7
7
  /**
8
8
  * Adds the Sentry Android Gradle Plugin to the project.
9
9
  * https://docs.sentry.io/platforms/react-native/manual-setup/manual-setup/#enable-sentry-agp
@@ -13,29 +13,29 @@ function withSentryAndroidGradlePlugin(config, { includeProguardMapping = true,
13
13
  const withSentryProjectBuildGradle = (config) => {
14
14
  return (0, config_plugins_1.withProjectBuildGradle)(config, projectBuildGradle => {
15
15
  if (!projectBuildGradle.modResults?.contents) {
16
- (0, utils_1.warnOnce)('android/build.gradle content is missing or undefined.');
16
+ (0, logger_1.warnOnce)('android/build.gradle content is missing or undefined.');
17
17
  return projectBuildGradle;
18
18
  }
19
19
  if (projectBuildGradle.modResults.language !== 'groovy') {
20
- (0, utils_1.warnOnce)('Cannot configure Sentry in android/build.gradle because it is not in Groovy.');
20
+ (0, logger_1.warnOnce)('Cannot configure Sentry in android/build.gradle because it is not in Groovy.');
21
21
  return projectBuildGradle;
22
22
  }
23
23
  const dependency = `classpath("io.sentry:sentry-android-gradle-plugin:${exports.sentryAndroidGradlePluginVersion}")`;
24
24
  if (projectBuildGradle.modResults.contents.includes(dependency)) {
25
- (0, utils_1.warnOnce)('sentry-android-gradle-plugin dependency in already in android/build.gradle.');
25
+ (0, logger_1.warnOnce)('sentry-android-gradle-plugin dependency in already in android/build.gradle.');
26
26
  return projectBuildGradle;
27
27
  }
28
28
  try {
29
29
  const updatedContents = projectBuildGradle.modResults.contents.replace(/dependencies\s*{/, `dependencies {\n ${dependency}`);
30
30
  if (updatedContents === projectBuildGradle.modResults.contents) {
31
- (0, utils_1.warnOnce)('Failed to inject the dependency. Could not find `dependencies` in build.gradle.');
31
+ (0, logger_1.warnOnce)('Failed to inject the dependency. Could not find `dependencies` in build.gradle.');
32
32
  }
33
33
  else {
34
34
  projectBuildGradle.modResults.contents = updatedContents;
35
35
  }
36
36
  }
37
37
  catch (error) {
38
- (0, utils_1.warnOnce)('An error occurred while trying to modify build.gradle');
38
+ (0, logger_1.warnOnce)('An error occurred while trying to modify build.gradle');
39
39
  }
40
40
  return projectBuildGradle;
41
41
  });
@@ -44,7 +44,7 @@ function withSentryAndroidGradlePlugin(config, { includeProguardMapping = true,
44
44
  const withSentryAppBuildGradle = (config) => {
45
45
  return (0, config_plugins_1.withAppBuildGradle)(config, appBuildGradle => {
46
46
  if (appBuildGradle.modResults.language !== 'groovy') {
47
- (0, utils_1.warnOnce)('Cannot configure Sentry in android/app/build.gradle because it is not in Groovy.');
47
+ (0, logger_1.warnOnce)('Cannot configure Sentry in android/app/build.gradle because it is not in Groovy.');
48
48
  return appBuildGradle;
49
49
  }
50
50
  const sentryPlugin = 'apply plugin: "io.sentry.android.gradle"';
@@ -1,8 +1,13 @@
1
+ import type { ExpoConfig } from '@expo/config-types';
1
2
  import type { ConfigPlugin } from 'expo/config-plugins';
2
3
  type BuildPhase = {
3
4
  shellScript: string;
4
5
  };
5
- export declare const withSentryIOS: ConfigPlugin<string>;
6
+ export declare const withSentryIOS: ConfigPlugin<{
7
+ sentryProperties: string;
8
+ useNativeInit: boolean | undefined;
9
+ }>;
6
10
  export declare function modifyExistingXcodeBuildScript(script: BuildPhase): void;
7
11
  export declare function addSentryWithBundledScriptsToBundleShellScript(script: string): string;
12
+ export declare function modifyAppDelegate(config: ExpoConfig): ExpoConfig;
8
13
  export {};
@@ -23,14 +23,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.addSentryWithBundledScriptsToBundleShellScript = exports.modifyExistingXcodeBuildScript = exports.withSentryIOS = void 0;
26
+ exports.modifyAppDelegate = exports.addSentryWithBundledScriptsToBundleShellScript = exports.modifyExistingXcodeBuildScript = exports.withSentryIOS = void 0;
27
27
  const config_plugins_1 = require("expo/config-plugins");
28
28
  const path = __importStar(require("path"));
29
+ const logger_1 = require("./logger");
29
30
  const utils_1 = require("./utils");
30
31
  const SENTRY_REACT_NATIVE_XCODE_PATH = "`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode.sh'\"`";
31
32
  const SENTRY_REACT_NATIVE_XCODE_DEBUG_FILES_PATH = "`${NODE_BINARY:-node} --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode-debug-files.sh'\"`";
32
- const withSentryIOS = (config, sentryProperties) => {
33
- const cfg = (0, config_plugins_1.withXcodeProject)(config, config => {
33
+ const withSentryIOS = (config, { sentryProperties, useNativeInit = false }) => {
34
+ const xcodeProjectCfg = (0, config_plugins_1.withXcodeProject)(config, config => {
34
35
  const xcodeProject = config.modResults;
35
36
  const sentryBuildPhase = xcodeProject.pbxItemByComment('Upload Debug Symbols to Sentry', 'PBXShellScriptBuildPhase');
36
37
  if (!sentryBuildPhase) {
@@ -47,7 +48,8 @@ const withSentryIOS = (config, sentryProperties) => {
47
48
  modifyExistingXcodeBuildScript(bundleReactNativePhase);
48
49
  return config;
49
50
  });
50
- return (0, config_plugins_1.withDangerousMod)(cfg, [
51
+ const appDelegateCfc = useNativeInit ? modifyAppDelegate(xcodeProjectCfg) : xcodeProjectCfg;
52
+ return (0, config_plugins_1.withDangerousMod)(appDelegateCfc, [
51
53
  'ios',
52
54
  config => {
53
55
  (0, utils_1.writeSentryPropertiesTo)(path.resolve(config.modRequest.projectRoot, 'ios'), sentryProperties);
@@ -58,16 +60,16 @@ const withSentryIOS = (config, sentryProperties) => {
58
60
  exports.withSentryIOS = withSentryIOS;
59
61
  function modifyExistingXcodeBuildScript(script) {
60
62
  if (!script.shellScript.match(/(packager|scripts)\/react-native-xcode\.sh\b/)) {
61
- (0, utils_1.warnOnce)(`'react-native-xcode.sh' not found in 'Bundle React Native code and images'.
63
+ (0, logger_1.warnOnce)(`'react-native-xcode.sh' not found in 'Bundle React Native code and images'.
62
64
  Please open a bug report at https://github.com/getsentry/sentry-react-native`);
63
65
  return;
64
66
  }
65
67
  if (script.shellScript.includes('sentry-xcode.sh')) {
66
- (0, utils_1.warnOnce)("The latest 'sentry-xcode.sh' script already exists in 'Bundle React Native code and images'.");
68
+ (0, logger_1.warnOnce)("The latest 'sentry-xcode.sh' script already exists in 'Bundle React Native code and images'.");
67
69
  return;
68
70
  }
69
71
  if (script.shellScript.includes('@sentry')) {
70
- (0, utils_1.warnOnce)(`Outdated or custom Sentry script found in 'Bundle React Native code and images'.
72
+ (0, logger_1.warnOnce)(`Outdated or custom Sentry script found in 'Bundle React Native code and images'.
71
73
  Regenerate the native project to use the latest script.
72
74
  Run npx expo prebuild --clean`);
73
75
  return;
@@ -82,3 +84,49 @@ function addSentryWithBundledScriptsToBundleShellScript(script) {
82
84
  (match) => `/bin/sh ${SENTRY_REACT_NATIVE_XCODE_PATH} ${match}`);
83
85
  }
84
86
  exports.addSentryWithBundledScriptsToBundleShellScript = addSentryWithBundledScriptsToBundleShellScript;
87
+ function modifyAppDelegate(config) {
88
+ return (0, config_plugins_1.withAppDelegate)(config, async (config) => {
89
+ if (!config.modResults?.path) {
90
+ (0, logger_1.warnOnce)("Can't add 'RNSentrySDK.start()' to the iOS AppDelegate, because the file was not found.");
91
+ return config;
92
+ }
93
+ const fileName = path.basename(config.modResults.path);
94
+ if (config.modResults.language === 'swift') {
95
+ if (config.modResults.contents.includes('RNSentrySDK.start()')) {
96
+ (0, logger_1.warnOnce)(`Your '${fileName}' already contains 'RNSentrySDK.start()'.`);
97
+ return config;
98
+ }
99
+ // Add RNSentrySDK.start() at the beginning of application method
100
+ const originalContents = config.modResults.contents;
101
+ config.modResults.contents = config.modResults.contents.replace(/(func application\([^)]*\) -> Bool \{)\s*\n(\s*)/s, '$1\n$2RNSentrySDK.start()\n$2');
102
+ if (config.modResults.contents === originalContents) {
103
+ (0, logger_1.warnOnce)(`Failed to insert 'RNSentrySDK.start()' in '${fileName}'.`);
104
+ }
105
+ else if (!config.modResults.contents.includes('import RNSentry')) {
106
+ // Insert import statement after the first import (works for both UIKit and Expo imports)
107
+ config.modResults.contents = config.modResults.contents.replace(/(import \S+\n)/, '$1import RNSentry\n');
108
+ }
109
+ }
110
+ else if (['objcpp', 'objc'].includes(config.modResults.language)) {
111
+ if (config.modResults.contents.includes('[RNSentrySDK start]')) {
112
+ (0, logger_1.warnOnce)(`Your '${fileName}' already contains '[RNSentrySDK start]'.`);
113
+ return config;
114
+ }
115
+ // Add [RNSentrySDK start] at the beginning of application:didFinishLaunchingWithOptions method
116
+ const originalContents = config.modResults.contents;
117
+ config.modResults.contents = config.modResults.contents.replace(/(- \(BOOL\)application:[\s\S]*?didFinishLaunchingWithOptions:[\s\S]*?\{\n)(\s*)/s, '$1$2[RNSentrySDK start];\n$2');
118
+ if (config.modResults.contents === originalContents) {
119
+ (0, logger_1.warnOnce)(`Failed to insert '[RNSentrySDK start]' in '${fileName}.`);
120
+ }
121
+ else if (!config.modResults.contents.includes('#import <RNSentry/RNSentry.h>')) {
122
+ // Add import after AppDelegate.h
123
+ config.modResults.contents = config.modResults.contents.replace(/(#import "AppDelegate.h"\n)/, '$1#import <RNSentry/RNSentry.h>\n');
124
+ }
125
+ }
126
+ else {
127
+ (0, logger_1.warnOnce)(`Unsupported language '${config.modResults.language}' detected in '${fileName}', the native code won't be updated.`);
128
+ }
129
+ return config;
130
+ });
131
+ }
132
+ exports.modifyAppDelegate = modifyAppDelegate;
@@ -78,4 +78,24 @@ if [ -f "$SENTRY_COLLECT_MODULES" ]; then
78
78
  /bin/sh "$SENTRY_COLLECT_MODULES"
79
79
  fi
80
80
 
81
+ # sentry.options.json Block
82
+ SENTRY_OPTIONS_FILE_ERROR_MESSAGE_POSTFIX="Skipping options file copy. To disable this behavior, set SENTRY_COPY_OPTIONS_FILE=false in your environment variables."
83
+ SENTRY_OPTIONS_FILE_NAME="sentry.options.json"
84
+ SENTRY_OPTIONS_FILE_DESTINATION_PATH="$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/$SENTRY_OPTIONS_FILE_NAME"
85
+ [ -z "$SENTRY_OPTIONS_FILE_PATH" ] && SENTRY_OPTIONS_FILE_PATH="$RN_PROJECT_ROOT/$SENTRY_OPTIONS_FILE_NAME"
86
+ [ -z "$SENTRY_COPY_OPTIONS_FILE" ] && SENTRY_COPY_OPTIONS_FILE=true
87
+
88
+ if [ "$SENTRY_COPY_OPTIONS_FILE" = true ]; then
89
+ if [[ -z "$CONFIGURATION_BUILD_DIR" ]]; then
90
+ echo "[Sentry] CONFIGURATION_BUILD_DIR is not set. $SENTRY_OPTIONS_FILE_ERROR_MESSAGE_POSTFIX" 1>&2
91
+ elif [[ -z "$UNLOCALIZED_RESOURCES_FOLDER_PATH" ]]; then
92
+ echo "[Sentry] UNLOCALIZED_RESOURCES_FOLDER_PATH is not set. $SENTRY_OPTIONS_FILE_ERROR_MESSAGE_POSTFIX" 1>&2
93
+ elif [ ! -f "$SENTRY_OPTIONS_FILE_PATH" ]; then
94
+ echo "[Sentry] $SENTRY_OPTIONS_FILE_PATH not found. $SENTRY_OPTIONS_FILE_ERROR_MESSAGE_POSTFIX" 1>&2
95
+ else
96
+ cp "$SENTRY_OPTIONS_FILE_PATH" "$SENTRY_OPTIONS_FILE_DESTINATION_PATH"
97
+ echo "[Sentry] Copied $SENTRY_OPTIONS_FILE_PATH to $SENTRY_OPTIONS_FILE_DESTINATION_PATH"
98
+ fi
99
+ fi
100
+
81
101
  exit $exitCode
package/sentry.gradle CHANGED
@@ -20,8 +20,48 @@ interface InjectedExecOps {
20
20
  ExecOperations getExecOps()
21
21
  }
22
22
 
23
+ project.ext.shouldCopySentryOptionsFile = { -> // If not set, default to true
24
+ return System.getenv('SENTRY_COPY_OPTIONS_FILE') != 'false'
25
+ }
26
+
23
27
  def config = project.hasProperty("sentryCli") ? project.sentryCli : [];
24
28
 
29
+ def configFile = "sentry.options.json" // Sentry configuration file
30
+ def androidAssetsDir = new File("$rootDir/app/src/main/assets") // Path to Android assets folder
31
+
32
+ tasks.register("copySentryJsonConfiguration") {
33
+ onlyIf { shouldCopySentryOptionsFile() }
34
+ doLast {
35
+ def appRoot = project.rootDir.parentFile ?: project.rootDir
36
+ def sentryOptionsFile = new File(appRoot, configFile)
37
+ if (sentryOptionsFile.exists()) {
38
+ if (!androidAssetsDir.exists()) {
39
+ androidAssetsDir.mkdirs()
40
+ }
41
+
42
+ copy {
43
+ from sentryOptionsFile
44
+ into androidAssetsDir
45
+ rename { String fileName -> configFile }
46
+ }
47
+ logger.lifecycle("Copied ${configFile} to Android assets")
48
+ } else {
49
+ logger.warn("${configFile} not found in app root (${appRoot})")
50
+ }
51
+ }
52
+ }
53
+
54
+ tasks.register("cleanupTemporarySentryJsonConfiguration") {
55
+ onlyIf { shouldCopySentryOptionsFile() }
56
+ doLast {
57
+ def sentryOptionsFile = new File(androidAssetsDir, configFile)
58
+ if (sentryOptionsFile.exists()) {
59
+ logger.lifecycle("Deleting temporary file: ${sentryOptionsFile.path}")
60
+ sentryOptionsFile.delete()
61
+ }
62
+ }
63
+ }
64
+
25
65
  plugins.withId('com.android.application') {
26
66
  def androidComponents = extensions.getByName("androidComponents")
27
67
 
@@ -278,6 +318,17 @@ plugins.withId('com.android.application') {
278
318
  // gradle.projectsEvaluated doesn't work with --configure-on-demand
279
319
  // the task are create too late and not executed
280
320
  project.afterEvaluate {
321
+ // Add a task that copies the sentry.options.json file before the build starts
322
+ tasks.named("preBuild").configure {
323
+ dependsOn("copySentryJsonConfiguration")
324
+ }
325
+ // Cleanup sentry.options.json from assets after the build
326
+ tasks.matching { task ->
327
+ task.name == "build" || task.name.startsWith("assemble") || task.name.startsWith("install")
328
+ }.configureEach {
329
+ finalizedBy("cleanupTemporarySentryJsonConfiguration")
330
+ }
331
+
281
332
  if (config.flavorAware && config.sentryProperties) {
282
333
  throw new GradleException("Incompatible sentry configuration. " +
283
334
  "You cannot use both `flavorAware` and `sentryProperties`. " +
@@ -66,32 +66,6 @@ export interface MobileReplayOptions {
66
66
  * @platform ios
67
67
  */
68
68
  enableFastViewRendering?: boolean;
69
- /**
70
- * Array of view class names to include in subtree traversal during session replay and screenshot capture on iOS.
71
- *
72
- * Only views that are instances of these classes (or subclasses) will be traversed.
73
- * This helps prevent crashes when traversing problematic view hierarchies by allowing you to explicitly include only safe view classes.
74
- *
75
- * If both `includedViewClasses` and `excludedViewClasses` are set, `excludedViewClasses` takes precedence:
76
- * views matching excluded classes won't be traversed even if they match an included class.
77
- *
78
- * @default undefined
79
- * @platform ios
80
- */
81
- includedViewClasses?: string[];
82
- /**
83
- * Array of view class names to exclude from subtree traversal during session replay and screenshot capture on iOS.
84
- *
85
- * Views of these classes (or subclasses) will be skipped entirely, including all their children.
86
- * This helps prevent crashes when traversing problematic view hierarchies by allowing you to explicitly exclude problematic view classes.
87
- *
88
- * If both `includedViewClasses` and `excludedViewClasses` are set, `excludedViewClasses` takes precedence:
89
- * views matching excluded classes won't be traversed even if they match an included class.
90
- *
91
- * @default undefined
92
- * @platform ios
93
- */
94
- excludedViewClasses?: string[];
95
69
  /**
96
70
  * Sets the screenshot strategy used by the Session Replay integration on Android.
97
71
  *
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react-native" />
2
2
  import type { InternalGlobal } from '@sentry/core';
3
3
  import type { ErrorUtils } from 'react-native/types';
4
+ import type { ReactNativeOptions } from '../options';
4
5
  import type { ExpoGlobalObject } from './expoglobalobject';
5
6
  export interface HermesPromiseRejectionTrackingOptions {
6
7
  allRejections: boolean;
@@ -32,6 +33,7 @@ export interface ReactNativeInternalGlobal extends InternalGlobal {
32
33
  nativePerformanceNow?: () => number;
33
34
  TextEncoder?: TextEncoder;
34
35
  alert?: (message: string) => void;
36
+ __SENTRY_OPTIONS__?: ReactNativeOptions;
35
37
  SENTRY_RELEASE?: {
36
38
  /** Used by Sentry Webpack Plugin, not used by RN, only to silence TS */
37
39
  id?: string;
@@ -1,4 +1,4 @@
1
1
  export declare const SDK_PACKAGE_NAME = "npm:@sentry/react-native";
2
2
  export declare const SDK_NAME = "sentry.javascript.react-native";
3
- export declare const SDK_VERSION = "7.12.0";
3
+ export declare const SDK_VERSION = "8.0.0-beta.0";
4
4
  //# sourceMappingURL=version.d.ts.map