@sentry/react-native 5.0.0-alpha.9 → 5.0.0-beta.1

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 (155) hide show
  1. package/CHANGELOG.md +134 -3
  2. package/README.md +1 -1
  3. package/RNSentry.podspec +5 -5
  4. package/android/build.gradle +1 -1
  5. package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +100 -21
  6. package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +5 -0
  7. package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +5 -0
  8. package/dist/js/NativeRNSentry.d.ts +36 -3
  9. package/dist/js/NativeRNSentry.d.ts.map +1 -1
  10. package/dist/js/NativeRNSentry.js.map +1 -1
  11. package/dist/js/breadcrumb.d.ts +11 -0
  12. package/dist/js/breadcrumb.d.ts.map +1 -0
  13. package/dist/js/breadcrumb.js +34 -0
  14. package/dist/js/breadcrumb.js.map +1 -0
  15. package/dist/js/client.d.ts +4 -5
  16. package/dist/js/client.d.ts.map +1 -1
  17. package/dist/js/client.js +22 -35
  18. package/dist/js/client.js.map +1 -1
  19. package/dist/js/index.d.ts +1 -0
  20. package/dist/js/index.d.ts.map +1 -1
  21. package/dist/js/index.js +1 -0
  22. package/dist/js/index.js.map +1 -1
  23. package/dist/js/integrations/debugsymbolicator.d.ts +1 -1
  24. package/dist/js/integrations/debugsymbolicator.d.ts.map +1 -1
  25. package/dist/js/integrations/debugsymbolicator.js.map +1 -1
  26. package/dist/js/integrations/devicecontext.d.ts +2 -2
  27. package/dist/js/integrations/devicecontext.d.ts.map +1 -1
  28. package/dist/js/integrations/devicecontext.js +45 -11
  29. package/dist/js/integrations/devicecontext.js.map +1 -1
  30. package/dist/js/integrations/eventorigin.d.ts +1 -1
  31. package/dist/js/integrations/eventorigin.d.ts.map +1 -1
  32. package/dist/js/integrations/eventorigin.js.map +1 -1
  33. package/dist/js/integrations/modulesloader.d.ts +1 -1
  34. package/dist/js/integrations/modulesloader.d.ts.map +1 -1
  35. package/dist/js/integrations/modulesloader.js +8 -2
  36. package/dist/js/integrations/modulesloader.js.map +1 -1
  37. package/dist/js/integrations/reactnativeerrorhandlers.d.ts +1 -1
  38. package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
  39. package/dist/js/integrations/reactnativeerrorhandlers.js +4 -3
  40. package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
  41. package/dist/js/integrations/reactnativeinfo.d.ts +1 -1
  42. package/dist/js/integrations/reactnativeinfo.d.ts.map +1 -1
  43. package/dist/js/integrations/reactnativeinfo.js.map +1 -1
  44. package/dist/js/integrations/release.d.ts +1 -1
  45. package/dist/js/integrations/release.d.ts.map +1 -1
  46. package/dist/js/integrations/release.js.map +1 -1
  47. package/dist/js/integrations/screenshot.d.ts +23 -0
  48. package/dist/js/integrations/screenshot.d.ts.map +1 -0
  49. package/dist/js/integrations/screenshot.js +39 -0
  50. package/dist/js/integrations/screenshot.js.map +1 -0
  51. package/dist/js/integrations/sdkinfo.d.ts +1 -1
  52. package/dist/js/integrations/sdkinfo.d.ts.map +1 -1
  53. package/dist/js/integrations/sdkinfo.js.map +1 -1
  54. package/dist/js/measurements.d.ts +4 -0
  55. package/dist/js/measurements.d.ts.map +1 -1
  56. package/dist/js/measurements.js +11 -0
  57. package/dist/js/measurements.js.map +1 -1
  58. package/dist/js/misc.d.ts +1 -1
  59. package/dist/js/misc.d.ts.map +1 -1
  60. package/dist/js/misc.js.map +1 -1
  61. package/dist/js/options.d.ts +18 -11
  62. package/dist/js/options.d.ts.map +1 -1
  63. package/dist/js/options.js.map +1 -1
  64. package/dist/js/scope.d.ts +1 -1
  65. package/dist/js/scope.d.ts.map +1 -1
  66. package/dist/js/scope.js +4 -2
  67. package/dist/js/scope.js.map +1 -1
  68. package/dist/js/sdk.d.ts +4 -3
  69. package/dist/js/sdk.d.ts.map +1 -1
  70. package/dist/js/sdk.js +11 -6
  71. package/dist/js/sdk.js.map +1 -1
  72. package/dist/js/tools/ModulesCollector.d.ts +10 -1
  73. package/dist/js/tools/ModulesCollector.d.ts.map +1 -1
  74. package/dist/js/tools/ModulesCollector.js +51 -1
  75. package/dist/js/tools/ModulesCollector.js.map +1 -1
  76. package/dist/js/tools/collectModules.js +6 -27
  77. package/dist/js/tools/collectModules.js.map +1 -1
  78. package/dist/js/touchevents.d.ts +4 -0
  79. package/dist/js/touchevents.d.ts.map +1 -1
  80. package/dist/js/touchevents.js +10 -5
  81. package/dist/js/touchevents.js.map +1 -1
  82. package/dist/js/tracing/nativeframes.d.ts +2 -2
  83. package/dist/js/tracing/nativeframes.d.ts.map +1 -1
  84. package/dist/js/tracing/nativeframes.js.map +1 -1
  85. package/dist/js/tracing/reactnativenavigation.d.ts +4 -3
  86. package/dist/js/tracing/reactnativenavigation.d.ts.map +1 -1
  87. package/dist/js/tracing/reactnativenavigation.js +1 -1
  88. package/dist/js/tracing/reactnativenavigation.js.map +1 -1
  89. package/dist/js/tracing/reactnativetracing.d.ts +5 -5
  90. package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
  91. package/dist/js/tracing/reactnativetracing.js +1 -1
  92. package/dist/js/tracing/reactnativetracing.js.map +1 -1
  93. package/dist/js/tracing/reactnavigation.d.ts +3 -2
  94. package/dist/js/tracing/reactnavigation.d.ts.map +1 -1
  95. package/dist/js/tracing/reactnavigation.js +1 -1
  96. package/dist/js/tracing/reactnavigation.js.map +1 -1
  97. package/dist/js/tracing/reactnavigationv4.d.ts +4 -3
  98. package/dist/js/tracing/reactnavigationv4.d.ts.map +1 -1
  99. package/dist/js/tracing/reactnavigationv4.js +1 -1
  100. package/dist/js/tracing/reactnavigationv4.js.map +1 -1
  101. package/dist/js/tracing/routingInstrumentation.d.ts +3 -3
  102. package/dist/js/tracing/routingInstrumentation.d.ts.map +1 -1
  103. package/dist/js/tracing/routingInstrumentation.js.map +1 -1
  104. package/dist/js/tracing/stalltracking.d.ts +2 -2
  105. package/dist/js/tracing/stalltracking.d.ts.map +1 -1
  106. package/dist/js/tracing/stalltracking.js.map +1 -1
  107. package/dist/js/tracing/types.d.ts +1 -1
  108. package/dist/js/tracing/types.d.ts.map +1 -1
  109. package/dist/js/tracing/types.js.map +1 -1
  110. package/dist/js/tracing/utils.d.ts +2 -2
  111. package/dist/js/tracing/utils.d.ts.map +1 -1
  112. package/dist/js/tracing/utils.js.map +1 -1
  113. package/dist/js/transports/TextEncoder.d.ts +1 -1
  114. package/dist/js/transports/TextEncoder.d.ts.map +1 -1
  115. package/dist/js/transports/TextEncoder.js.map +1 -1
  116. package/dist/js/transports/native.d.ts +7 -3
  117. package/dist/js/transports/native.d.ts.map +1 -1
  118. package/dist/js/transports/native.js +10 -1
  119. package/dist/js/transports/native.js.map +1 -1
  120. package/dist/js/user.d.ts +1 -1
  121. package/dist/js/user.d.ts.map +1 -1
  122. package/dist/js/user.js.map +1 -1
  123. package/dist/js/utils/envelope.d.ts +1 -1
  124. package/dist/js/utils/envelope.d.ts.map +1 -1
  125. package/dist/js/utils/envelope.js.map +1 -1
  126. package/dist/js/utils/ignorerequirecyclelogs.d.ts +6 -0
  127. package/dist/js/utils/ignorerequirecyclelogs.d.ts.map +1 -0
  128. package/dist/js/utils/ignorerequirecyclelogs.js +15 -0
  129. package/dist/js/utils/ignorerequirecyclelogs.js.map +1 -0
  130. package/dist/js/utils/outcome.d.ts +1 -1
  131. package/dist/js/utils/outcome.d.ts.map +1 -1
  132. package/dist/js/utils/outcome.js.map +1 -1
  133. package/dist/js/utils/safe.d.ts +1 -1
  134. package/dist/js/utils/safe.d.ts.map +1 -1
  135. package/dist/js/utils/safe.js.map +1 -1
  136. package/dist/js/utils/worldwide.d.ts +1 -1
  137. package/dist/js/utils/worldwide.d.ts.map +1 -1
  138. package/dist/js/utils/worldwide.js.map +1 -1
  139. package/dist/js/version.d.ts +1 -1
  140. package/dist/js/version.d.ts.map +1 -1
  141. package/dist/js/version.js +1 -1
  142. package/dist/js/version.js.map +1 -1
  143. package/dist/js/wrapper.d.ts +9 -3
  144. package/dist/js/wrapper.d.ts.map +1 -1
  145. package/dist/js/wrapper.js +30 -6
  146. package/dist/js/wrapper.js.map +1 -1
  147. package/ios/RNSentry.h +5 -0
  148. package/ios/RNSentry.mm +80 -49
  149. package/package.json +24 -23
  150. package/scripts/collect-modules.sh +1 -1
  151. package/sentry.gradle +46 -15
  152. package/src/js/NativeRNSentry.ts +38 -3
  153. package/ios/RNSentry.xcodeproj/project.pbxproj +0 -472
  154. package/ios/RNSentry.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  155. package/ios/RNSentry.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
@@ -1,6 +1,6 @@
1
1
  import { BaseClient } from '@sentry/core';
2
- import { Envelope, Event, EventHint, SeverityLevel, UserFeedback } from '@sentry/types';
3
- import { ReactNativeClientOptions } from './options';
2
+ import type { Envelope, Event, EventHint, SeverityLevel, UserFeedback } from '@sentry/types';
3
+ import type { ReactNativeClientOptions } from './options';
4
4
  /**
5
5
  * The Sentry React Native SDK Client.
6
6
  *
@@ -9,7 +9,6 @@ import { ReactNativeClientOptions } from './options';
9
9
  */
10
10
  export declare class ReactNativeClient extends BaseClient<ReactNativeClientOptions> {
11
11
  private _outcomesBuffer;
12
- private readonly _browserClient;
13
12
  /**
14
13
  * Creates a new React Native SDK instance.
15
14
  * @param options Configuration options for this SDK.
@@ -18,11 +17,11 @@ export declare class ReactNativeClient extends BaseClient<ReactNativeClientOptio
18
17
  /**
19
18
  * @inheritDoc
20
19
  */
21
- eventFromException(_exception: unknown, _hint?: EventHint): PromiseLike<Event>;
20
+ eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event>;
22
21
  /**
23
22
  * @inheritDoc
24
23
  */
25
- eventFromMessage(_message: string, _level?: SeverityLevel, _hint?: EventHint): PromiseLike<Event>;
24
+ eventFromMessage(message: string, level?: SeverityLevel, hint?: EventHint): PromiseLike<Event>;
26
25
  /**
27
26
  * If native client is available it will trigger a native crash.
28
27
  * Use this only for testing purposes.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/js/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAGL,QAAQ,EACR,KAAK,EACL,SAAS,EAET,aAAa,EAEb,YAAY,EACb,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,wBAAwB,EAA+B,MAAM,WAAW,CAAC;AAMlF;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,UAAU,CAAC,wBAAwB,CAAC;IAEzE,OAAO,CAAC,eAAe,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAE/C;;;OAGG;gBACiB,OAAO,EAAE,wBAAwB;IAuCrD;;OAEG;IACI,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;IAIrF;;OAEG;IACI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;IAIxG;;;OAGG;IACI,WAAW,IAAI,IAAI;IAI1B;;OAEG;IACI,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC;IAOpC;;OAEG;IACI,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAYxD;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA6BjD;;OAEG;YACW,cAAc;IAgB5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAShC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/js/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAGV,QAAQ,EACR,KAAK,EACL,SAAS,EAGT,aAAa,EAEb,YAAY,EACb,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAM1D;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,UAAU,CAAC,wBAAwB,CAAC;IAEzE,OAAO,CAAC,eAAe,CAAY;IAEnC;;;OAGG;gBACgB,OAAO,EAAE,wBAAwB;IAUpD;;OAEG;IACI,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,GAAE,SAAc,GAAG,WAAW,CAAC,KAAK,CAAC;IAUvF;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC;IAqBrG;;;OAGG;IACI,WAAW,IAAI,IAAI;IAI1B;;OAEG;IACI,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC;IAOpC;;OAEG;IACI,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAYxD;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA6BjD;;OAEG;YACW,cAAc;IAgB5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAShC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B"}
package/dist/js/client.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { __awaiter } from "tslib";
2
- import { BrowserClient, defaultStackParser, makeFetchTransport } from '@sentry/browser';
2
+ import { eventFromException, eventFromMessage } from '@sentry/browser';
3
3
  import { BaseClient } from '@sentry/core';
4
4
  import { dateTimestampInSeconds, logger, SentryError } from '@sentry/utils';
5
- // @ts-ignore LogBox introduced in RN 0.63
6
- import { Alert, LogBox, YellowBox } from 'react-native';
5
+ import { Alert } from 'react-native';
6
+ import { Screenshot } from './integrations/screenshot';
7
7
  import { defaultSdkInfo } from './integrations/sdkinfo';
8
- import { makeReactNativeTransport } from './transports/native';
9
8
  import { createUserFeedbackEnvelope, items } from './utils/envelope';
9
+ import { ignoreRequireCycleLogs } from './utils/ignorerequirecyclelogs';
10
10
  import { mergeOutcomes } from './utils/outcome';
11
11
  import { NATIVE } from './wrapper';
12
12
  /**
@@ -21,50 +21,37 @@ export class ReactNativeClient extends BaseClient {
21
21
  * @param options Configuration options for this SDK.
22
22
  */
23
23
  constructor(options) {
24
- if (!options.transport) {
25
- options.transport = (options, nativeFetch) => {
26
- if (NATIVE.isNativeTransportAvailable()) {
27
- return makeReactNativeTransport(options);
28
- }
29
- return makeFetchTransport(options, nativeFetch);
30
- };
31
- }
24
+ ignoreRequireCycleLogs();
32
25
  options._metadata = options._metadata || {};
33
26
  options._metadata.sdk = options._metadata.sdk || defaultSdkInfo;
34
27
  super(options);
35
28
  this._outcomesBuffer = [];
36
- // This is a workaround for now using fetch on RN, this is a known issue in react-native and only generates a warning
37
- // YellowBox deprecated and replaced with with LogBox in RN 0.63
38
- if (LogBox) {
39
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
40
- LogBox.ignoreLogs(['Require cycle:']);
41
- }
42
- else {
43
- // eslint-disable-next-line deprecation/deprecation
44
- YellowBox.ignoreWarnings(['Require cycle:']);
45
- }
46
- this._browserClient = new BrowserClient({
47
- dsn: options.dsn,
48
- transport: options.transport,
49
- transportOptions: options.transportOptions,
50
- stackParser: options.stackParser || defaultStackParser,
51
- integrations: [],
52
- _metadata: options._metadata,
53
- attachStacktrace: options.attachStacktrace,
54
- });
55
29
  void this._initNativeSdk();
56
30
  }
57
31
  /**
58
32
  * @inheritDoc
59
33
  */
60
- eventFromException(_exception, _hint) {
61
- return this._browserClient.eventFromException(_exception, _hint);
34
+ eventFromException(exception, hint = {}) {
35
+ return Screenshot.attachScreenshotToEventHint(hint, this._options)
36
+ .then(hintWithScreenshot => eventFromException(this._options.stackParser, exception, hintWithScreenshot, this._options.attachStacktrace));
62
37
  }
63
38
  /**
64
39
  * @inheritDoc
65
40
  */
66
- eventFromMessage(_message, _level, _hint) {
67
- return this._browserClient.eventFromMessage(_message, _level, _hint);
41
+ eventFromMessage(message, level, hint) {
42
+ return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace).then((event) => {
43
+ var _a;
44
+ // TMP! Remove this function once JS SDK uses threads for messages
45
+ if (!((_a = event.exception) === null || _a === void 0 ? void 0 : _a.values) || event.exception.values.length <= 0) {
46
+ return event;
47
+ }
48
+ const values = event.exception.values.map((exception) => ({
49
+ stacktrace: exception.stacktrace,
50
+ }));
51
+ event.threads = { values };
52
+ delete event.exception;
53
+ return event;
54
+ });
68
55
  }
69
56
  /**
70
57
  * If native client is available it will trigger a native crash.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/js/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserClient, defaultStackParser, makeFetchTransport } from '@sentry/browser';\nimport { FetchImpl } from '@sentry/browser/types/transports/utils';\nimport { BaseClient } from '@sentry/core';\nimport {\n ClientReportEnvelope,\n ClientReportItem,\n Envelope,\n Event,\n EventHint,\n Outcome,\n SeverityLevel,\n Transport,\n UserFeedback,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, logger, SentryError } from '@sentry/utils';\n// @ts-ignore LogBox introduced in RN 0.63\nimport { Alert, LogBox, YellowBox } from 'react-native';\n\nimport { defaultSdkInfo } from './integrations/sdkinfo';\nimport { ReactNativeClientOptions, ReactNativeTransportOptions } from './options';\nimport { makeReactNativeTransport } from './transports/native';\nimport { createUserFeedbackEnvelope, items } from './utils/envelope';\nimport { mergeOutcomes } from './utils/outcome';\nimport { NATIVE } from './wrapper';\n\n/**\n * The Sentry React Native SDK Client.\n *\n * @see ReactNativeClientOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class ReactNativeClient extends BaseClient<ReactNativeClientOptions> {\n\n private _outcomesBuffer: Outcome[];\n\n private readonly _browserClient: BrowserClient;\n\n /**\n * Creates a new React Native SDK instance.\n * @param options Configuration options for this SDK.\n */\n public constructor(options: ReactNativeClientOptions) {\n if (!options.transport) {\n options.transport = (options: ReactNativeTransportOptions, nativeFetch?: FetchImpl): Transport => {\n if (NATIVE.isNativeTransportAvailable()) {\n return makeReactNativeTransport(options);\n }\n return makeFetchTransport(options, nativeFetch);\n };\n }\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || defaultSdkInfo;\n super(options);\n\n this._outcomesBuffer = [];\n\n // This is a workaround for now using fetch on RN, this is a known issue in react-native and only generates a warning\n // YellowBox deprecated and replaced with with LogBox in RN 0.63\n if (LogBox) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n LogBox.ignoreLogs(['Require cycle:']);\n } else {\n // eslint-disable-next-line deprecation/deprecation\n YellowBox.ignoreWarnings(['Require cycle:']);\n }\n\n this._browserClient = new BrowserClient({\n dsn: options.dsn,\n transport: options.transport,\n transportOptions: options.transportOptions,\n stackParser: options.stackParser || defaultStackParser,\n integrations: [],\n _metadata: options._metadata,\n attachStacktrace: options.attachStacktrace,\n });\n\n void this._initNativeSdk();\n }\n\n\n /**\n * @inheritDoc\n */\n public eventFromException(_exception: unknown, _hint?: EventHint): PromiseLike<Event> {\n return this._browserClient.eventFromException(_exception, _hint);\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(_message: string, _level?: SeverityLevel, _hint?: EventHint): PromiseLike<Event> {\n return this._browserClient.eventFromMessage(_message, _level, _hint);\n }\n\n /**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\n public nativeCrash(): void {\n NATIVE.nativeCrash();\n }\n\n /**\n * @inheritDoc\n */\n public close(): PromiseLike<boolean> {\n // As super.close() flushes queued events, we wait for that to finish before closing the native SDK.\n return super.close().then((result: boolean) => {\n return NATIVE.closeNativeSdk().then(() => result) as PromiseLike<boolean>;\n });\n }\n\n /**\n * Sends user feedback to Sentry.\n */\n public captureUserFeedback(feedback: UserFeedback): void {\n const envelope = createUserFeedbackEnvelope(\n feedback,\n {\n metadata: this._options._metadata,\n dsn: this.getDsn(),\n tunnel: this._options.tunnel,\n },\n );\n this._sendEnvelope(envelope);\n }\n\n /**\n * @inheritdoc\n */\n protected _sendEnvelope(envelope: Envelope): void {\n const outcomes = this._clearOutcomes();\n this._outcomesBuffer = mergeOutcomes(this._outcomesBuffer, outcomes);\n\n if (this._options.sendClientReports) {\n this._attachClientReportTo(this._outcomesBuffer, envelope as ClientReportEnvelope);\n }\n\n let shouldClearOutcomesBuffer = true;\n if (this._transport && this._dsn) {\n this._transport.send(envelope)\n .then(null, reason => {\n if (reason instanceof SentryError) { // SentryError is thrown by SyncPromise\n shouldClearOutcomesBuffer = false;\n // If this is called asynchronously we want the _outcomesBuffer to be cleared\n logger.error('SentryError while sending event, keeping outcomes buffer:', reason);\n } else {\n logger.error('Error while sending event:', reason);\n }\n });\n } else {\n logger.error('Transport disabled');\n }\n\n if (shouldClearOutcomesBuffer) {\n this._outcomesBuffer = []; // if send fails synchronously the _outcomesBuffer will stay intact\n }\n }\n\n /**\n * Starts native client with dsn and options\n */\n private async _initNativeSdk(): Promise<void> {\n let didCallNativeInit = false;\n\n try {\n didCallNativeInit = await NATIVE.initNativeSdk(this._options);\n } catch (_) {\n this._showCannotConnectDialog();\n } finally {\n try {\n this._options.onReady?.({ didCallNativeInit });\n } catch (error) {\n logger.error('The OnReady callback threw an error: ', error);\n }\n }\n }\n\n /**\n * If the user is in development mode, and the native nagger is enabled then it will show an alert.\n */\n private _showCannotConnectDialog(): void {\n if (__DEV__ && this._options.enableNativeNagger) {\n Alert.alert(\n 'Sentry',\n 'Warning, could not connect to Sentry native SDK.\\nIf you do not want to use the native component please pass `enableNative: false` in the options.\\nVisit: https://docs.sentry.io/platforms/react-native/#linking for more details.'\n );\n }\n }\n\n /**\n * Attaches a client report from outcomes to the envelope.\n */\n private _attachClientReportTo(outcomes: Outcome[], envelope: ClientReportEnvelope): void {\n if (outcomes.length > 0) {\n const clientReportItem: ClientReportItem = [\n { type: 'client_report' },\n {\n timestamp: dateTimestampInSeconds(),\n discarded_events: outcomes,\n },\n ];\n\n envelope[items].push(clientReportItem);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/js/client.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,0BAA0B,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAoC;IAIzE;;;OAGG;IACH,YAAmB,OAAiC;QAClD,sBAAsB,EAAE,CAAC;QACzB,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,SAAkB,EAAE,OAAkB,EAAE;QAChE,OAAO,UAAU,CAAC,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;aAC/D,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,kBAAkB,CAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,SAAS,EACT,kBAAkB,EAClB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC/B,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,OAAe,EAAE,KAAqB,EAAE,IAAgB;QAC9E,OAAO,gBAAgB,CACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,OAAO,EACP,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC/B,CAAC,IAAI,CAAC,CAAC,KAAY,EAAE,EAAE;;YACtB,kEAAkE;YAClE,IAAI,QAAC,KAAK,CAAC,SAAS,0CAAE,MAAM,CAAA,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;gBAClE,OAAO,KAAK,CAAC;aACd;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAoB,EAAU,EAAE,CAAC,CAAC;gBAC3E,UAAU,EAAE,SAAS,CAAC,UAAU;aACjC,CAAC,CAAC,CAAC;YACH,KAA4C,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC,SAAS,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,WAAW;QAChB,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,KAAK;QACV,oGAAoG;QACpG,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAe,EAAE,EAAE;YAC5C,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAyB,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,mBAAmB,CAAC,QAAsB;QAC/C,MAAM,QAAQ,GAAG,0BAA0B,CACzC,QAAQ,EACR;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS;YACjC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;YAClB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;SAC7B,CACF,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACO,aAAa,CAAC,QAAkB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAErE,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;YACnC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,EAAE,QAAgC,CAAC,CAAC;SACpF;QAED,IAAI,yBAAyB,GAAG,IAAI,CAAC;QACrC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBACnB,IAAI,MAAM,YAAY,WAAW,EAAE,EAAE,uCAAuC;oBAC1E,yBAAyB,GAAG,KAAK,CAAC;oBAClC,6EAA6E;oBAC7E,MAAM,CAAC,KAAK,CAAC,2DAA2D,EAAE,MAAM,CAAC,CAAC;iBACnF;qBAAM;oBACL,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;iBACpD;YACH,CAAC,CAAC,CAAC;SACN;aAAM;YACL,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACpC;QAED,IAAI,yBAAyB,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,mEAAmE;SAC/F;IACH,CAAC;IAED;;OAEG;IACW,cAAc;;;YAC1B,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAE9B,IAAI;gBACF,iBAAiB,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/D;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,wBAAwB,EAAE,CAAC;aACjC;oBAAS;gBACR,IAAI;oBACF,MAAA,MAAA,IAAI,CAAC,QAAQ,EAAC,OAAO,mDAAG,EAAE,iBAAiB,EAAE,EAAE;iBAChD;gBAAC,OAAO,KAAK,EAAE;oBACd,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;iBAC9D;aACF;;KACF;IAED;;OAEG;IACK,wBAAwB;QAC9B,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YAC/C,KAAK,CAAC,KAAK,CACT,QAAQ,EACR,qOAAqO,CACtO,CAAC;SACH;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,QAAmB,EAAE,QAA8B;QAC/E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,gBAAgB,GAAqB;gBACzC,EAAE,IAAI,EAAE,eAAe,EAAE;gBACzB;oBACE,SAAS,EAAE,sBAAsB,EAAE;oBACnC,gBAAgB,EAAE,QAAQ;iBAC3B;aACF,CAAC;YAEF,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACxC;IACH,CAAC;CACF","sourcesContent":["import { eventFromException, eventFromMessage } from '@sentry/browser';\nimport { BaseClient } from '@sentry/core';\nimport type {\n ClientReportEnvelope,\n ClientReportItem,\n Envelope,\n Event,\n EventHint,\n Exception,\n Outcome,\n SeverityLevel,\n Thread,\n UserFeedback,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, logger, SentryError } from '@sentry/utils';\nimport { Alert } from 'react-native';\n\nimport { Screenshot } from './integrations/screenshot';\nimport { defaultSdkInfo } from './integrations/sdkinfo';\nimport type { ReactNativeClientOptions } from './options';\nimport { createUserFeedbackEnvelope, items } from './utils/envelope';\nimport { ignoreRequireCycleLogs } from './utils/ignorerequirecyclelogs';\nimport { mergeOutcomes } from './utils/outcome';\nimport { NATIVE } from './wrapper';\n\n/**\n * The Sentry React Native SDK Client.\n *\n * @see ReactNativeClientOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class ReactNativeClient extends BaseClient<ReactNativeClientOptions> {\n\n private _outcomesBuffer: Outcome[];\n\n /**\n * Creates a new React Native SDK instance.\n * @param options Configuration options for this SDK.\n */\n public constructor(options: ReactNativeClientOptions) {\n ignoreRequireCycleLogs();\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || defaultSdkInfo;\n super(options);\n\n this._outcomesBuffer = [];\n void this._initNativeSdk();\n }\n\n /**\n * @inheritDoc\n */\n public eventFromException(exception: unknown, hint: EventHint = {}): PromiseLike<Event> {\n return Screenshot.attachScreenshotToEventHint(hint, this._options)\n .then(hintWithScreenshot => eventFromException(\n this._options.stackParser,\n exception,\n hintWithScreenshot,\n this._options.attachStacktrace,\n ));\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(message: string, level?: SeverityLevel, hint?: EventHint): PromiseLike<Event> {\n return eventFromMessage(\n this._options.stackParser,\n message,\n level,\n hint,\n this._options.attachStacktrace,\n ).then((event: Event) => {\n // TMP! Remove this function once JS SDK uses threads for messages\n if (!event.exception?.values || event.exception.values.length <= 0) {\n return event;\n }\n const values = event.exception.values.map((exception: Exception): Thread => ({\n stacktrace: exception.stacktrace,\n }));\n (event as { threads?: { values: Thread[] } }).threads = { values };\n delete event.exception;\n return event;\n });\n }\n\n /**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\n public nativeCrash(): void {\n NATIVE.nativeCrash();\n }\n\n /**\n * @inheritDoc\n */\n public close(): PromiseLike<boolean> {\n // As super.close() flushes queued events, we wait for that to finish before closing the native SDK.\n return super.close().then((result: boolean) => {\n return NATIVE.closeNativeSdk().then(() => result) as PromiseLike<boolean>;\n });\n }\n\n /**\n * Sends user feedback to Sentry.\n */\n public captureUserFeedback(feedback: UserFeedback): void {\n const envelope = createUserFeedbackEnvelope(\n feedback,\n {\n metadata: this._options._metadata,\n dsn: this.getDsn(),\n tunnel: this._options.tunnel,\n },\n );\n this._sendEnvelope(envelope);\n }\n\n /**\n * @inheritdoc\n */\n protected _sendEnvelope(envelope: Envelope): void {\n const outcomes = this._clearOutcomes();\n this._outcomesBuffer = mergeOutcomes(this._outcomesBuffer, outcomes);\n\n if (this._options.sendClientReports) {\n this._attachClientReportTo(this._outcomesBuffer, envelope as ClientReportEnvelope);\n }\n\n let shouldClearOutcomesBuffer = true;\n if (this._transport && this._dsn) {\n this._transport.send(envelope)\n .then(null, reason => {\n if (reason instanceof SentryError) { // SentryError is thrown by SyncPromise\n shouldClearOutcomesBuffer = false;\n // If this is called asynchronously we want the _outcomesBuffer to be cleared\n logger.error('SentryError while sending event, keeping outcomes buffer:', reason);\n } else {\n logger.error('Error while sending event:', reason);\n }\n });\n } else {\n logger.error('Transport disabled');\n }\n\n if (shouldClearOutcomesBuffer) {\n this._outcomesBuffer = []; // if send fails synchronously the _outcomesBuffer will stay intact\n }\n }\n\n /**\n * Starts native client with dsn and options\n */\n private async _initNativeSdk(): Promise<void> {\n let didCallNativeInit = false;\n\n try {\n didCallNativeInit = await NATIVE.initNativeSdk(this._options);\n } catch (_) {\n this._showCannotConnectDialog();\n } finally {\n try {\n this._options.onReady?.({ didCallNativeInit });\n } catch (error) {\n logger.error('The OnReady callback threw an error: ', error);\n }\n }\n }\n\n /**\n * If the user is in development mode, and the native nagger is enabled then it will show an alert.\n */\n private _showCannotConnectDialog(): void {\n if (__DEV__ && this._options.enableNativeNagger) {\n Alert.alert(\n 'Sentry',\n 'Warning, could not connect to Sentry native SDK.\\nIf you do not want to use the native component please pass `enableNative: false` in the options.\\nVisit: https://docs.sentry.io/platforms/react-native/#linking for more details.'\n );\n }\n }\n\n /**\n * Attaches a client report from outcomes to the envelope.\n */\n private _attachClientReportTo(outcomes: Outcome[], envelope: ClientReportEnvelope): void {\n if (outcomes.length > 0) {\n const clientReportItem: ClientReportItem = [\n { type: 'client_report' },\n {\n timestamp: dateTimestampInSeconds(),\n discarded_events: outcomes,\n },\n ];\n\n envelope[items].push(clientReportItem);\n }\n }\n}\n"]}
@@ -2,6 +2,7 @@ export { Breadcrumb, Request, SdkInfo, Event, Exception, StackFrame, Stacktrace,
2
2
  export { addGlobalEventProcessor, addBreadcrumb, captureException, captureEvent, captureMessage, getHubFromCarrier, getCurrentHub, Hub, Scope, setContext, setExtra, setExtras, setTag, setTags, setUser, startTransaction, } from '@sentry/core';
3
3
  import '@sentry/tracing';
4
4
  export { Integrations as BrowserIntegrations, ErrorBoundary, withErrorBoundary, createReduxEnhancer, Profiler, useProfiler, withProfiler, } from '@sentry/react';
5
+ export { lastEventId, } from '@sentry/browser';
5
6
  import * as Integrations from './integrations';
6
7
  import { SDK_NAME, SDK_VERSION } from './version';
7
8
  export { ReactNativeOptions } from './options';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,MAAM,EACN,IAAI,EACJ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,GAAG,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAItB,OAAO,iBAAiB,CAAC;AAMzB,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EACL,IAAI,EACJ,IAAI,EAEJ,OAAO,EAEP,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EAEhC,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,sBAAsB,EACtB,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,MAAM,EACN,IAAI,EACJ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,GAAG,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAItB,OAAO,iBAAiB,CAAC;AAMzB,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EACL,IAAI,EACJ,IAAI,EAEJ,OAAO,EAEP,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EAEhC,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,sBAAsB,EACtB,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
package/dist/js/index.js CHANGED
@@ -6,6 +6,7 @@ import '@sentry/tracing';
6
6
  import { _addTracingExtensions } from './measurements';
7
7
  _addTracingExtensions();
8
8
  export { Integrations as BrowserIntegrations, ErrorBoundary, withErrorBoundary, createReduxEnhancer, Profiler, useProfiler, withProfiler, } from '@sentry/react';
9
+ export { lastEventId, } from '@sentry/browser';
9
10
  import * as Integrations from './integrations';
10
11
  import { SDK_NAME, SDK_VERSION } from './version';
11
12
  export { ReactNativeClient } from './client';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,GAAG,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,6BAA6B;AAC7B,OAAO,iBAAiB,CAAC;AAEzB,kGAAkG;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,qBAAqB,EAAE,CAAC;AAExB,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EACL,IAAI,EACJ,IAAI;AACJ,mDAAmD;AACnD,OAAO;AACP,mDAAmD;AACnD,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,gCAAgC;AAChC,mDAAmD;AACnD,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,sBAAsB,GAEvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC","sourcesContent":["export {\n Breadcrumb,\n Request,\n SdkInfo,\n Event,\n Exception,\n StackFrame,\n Stacktrace,\n Thread,\n User,\n UserFeedback,\n} from '@sentry/types';\n\nexport {\n addGlobalEventProcessor,\n addBreadcrumb,\n captureException,\n captureEvent,\n captureMessage,\n getHubFromCarrier,\n getCurrentHub,\n Hub,\n Scope,\n setContext,\n setExtra,\n setExtras,\n setTag,\n setTags,\n setUser,\n startTransaction,\n} from '@sentry/core';\n\n// We need to import it so we patch the hub with global functions\n// aka. this has side effects\nimport '@sentry/tracing';\n\n// Add the React Native SDK's own tracing extensions, this needs to happen AFTER @sentry/tracing's\nimport { _addTracingExtensions } from './measurements';\n_addTracingExtensions();\n\nexport {\n Integrations as BrowserIntegrations,\n ErrorBoundary,\n withErrorBoundary,\n createReduxEnhancer,\n Profiler,\n useProfiler,\n withProfiler,\n} from '@sentry/react';\n\nimport * as Integrations from './integrations';\nimport { SDK_NAME, SDK_VERSION } from './version';\nexport { ReactNativeOptions } from './options';\nexport { ReactNativeClient } from './client';\n\nexport {\n init,\n wrap,\n // eslint-disable-next-line deprecation/deprecation\n setDist,\n // eslint-disable-next-line deprecation/deprecation\n setRelease,\n nativeCrash,\n flush,\n close,\n captureUserFeedback,\n withScope,\n configureScope,\n} from './sdk';\nexport { TouchEventBoundary, withTouchEventBoundary } from './touchevents';\n\nexport {\n ReactNativeTracing,\n ReactNavigationV4Instrumentation,\n // eslint-disable-next-line deprecation/deprecation\n ReactNavigationV5Instrumentation,\n ReactNavigationInstrumentation,\n ReactNativeNavigationInstrumentation,\n RoutingInstrumentation,\n ReactNavigationTransactionContext,\n} from './tracing';\n\nexport { Integrations, SDK_NAME, SDK_VERSION };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/js/index.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,GAAG,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,6BAA6B;AAC7B,OAAO,iBAAiB,CAAC;AAEzB,kGAAkG;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,qBAAqB,EAAE,CAAC;AAExB,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EACL,IAAI,EACJ,IAAI;AACJ,mDAAmD;AACnD,OAAO;AACP,mDAAmD;AACnD,UAAU,EACV,WAAW,EACX,KAAK,EACL,KAAK,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,GACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAClB,gCAAgC;AAChC,mDAAmD;AACnD,gCAAgC,EAChC,8BAA8B,EAC9B,oCAAoC,EACpC,sBAAsB,GAEvB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC","sourcesContent":["export {\n Breadcrumb,\n Request,\n SdkInfo,\n Event,\n Exception,\n StackFrame,\n Stacktrace,\n Thread,\n User,\n UserFeedback,\n} from '@sentry/types';\n\nexport {\n addGlobalEventProcessor,\n addBreadcrumb,\n captureException,\n captureEvent,\n captureMessage,\n getHubFromCarrier,\n getCurrentHub,\n Hub,\n Scope,\n setContext,\n setExtra,\n setExtras,\n setTag,\n setTags,\n setUser,\n startTransaction,\n} from '@sentry/core';\n\n// We need to import it so we patch the hub with global functions\n// aka. this has side effects\nimport '@sentry/tracing';\n\n// Add the React Native SDK's own tracing extensions, this needs to happen AFTER @sentry/tracing's\nimport { _addTracingExtensions } from './measurements';\n_addTracingExtensions();\n\nexport {\n Integrations as BrowserIntegrations,\n ErrorBoundary,\n withErrorBoundary,\n createReduxEnhancer,\n Profiler,\n useProfiler,\n withProfiler,\n} from '@sentry/react';\n\nexport {\n lastEventId,\n} from '@sentry/browser';\n\nimport * as Integrations from './integrations';\nimport { SDK_NAME, SDK_VERSION } from './version';\nexport { ReactNativeOptions } from './options';\nexport { ReactNativeClient } from './client';\n\nexport {\n init,\n wrap,\n // eslint-disable-next-line deprecation/deprecation\n setDist,\n // eslint-disable-next-line deprecation/deprecation\n setRelease,\n nativeCrash,\n flush,\n close,\n captureUserFeedback,\n withScope,\n configureScope,\n} from './sdk';\nexport { TouchEventBoundary, withTouchEventBoundary } from './touchevents';\n\nexport {\n ReactNativeTracing,\n ReactNavigationV4Instrumentation,\n // eslint-disable-next-line deprecation/deprecation\n ReactNavigationV5Instrumentation,\n ReactNavigationInstrumentation,\n ReactNativeNavigationInstrumentation,\n RoutingInstrumentation,\n ReactNavigationTransactionContext,\n} from './tracing';\n\nexport { Integrations, SDK_NAME, SDK_VERSION };\n"]}
@@ -1,4 +1,4 @@
1
- import { Integration } from '@sentry/types';
1
+ import type { Integration } from '@sentry/types';
2
2
  /**
3
3
  * React Native Error
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"debugsymbolicator.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,WAAW,EAAc,MAAM,eAAe,CAAC;AAsB1E;;GAEG;AACH,oBAAY,gBAAgB,GAAG,KAAK,GAAG;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,6DAA6D;AAC7D,qBAAa,iBAAkB,YAAW,WAAW;IACnD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAuB;IAC/C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAwB;IAE3C;;OAEG;IACI,SAAS,IAAI,IAAI;IA6BxB;;;OAGG;YACW,YAAY;IAsC1B;;;OAGG;YACW,uCAAuC;IAqDrD;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;;;;OAKG;YACW,iBAAiB;CAgChC"}
1
+ {"version":3,"file":"debugsymbolicator.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,WAAW,EAAc,MAAM,eAAe,CAAC;AAsB/E;;GAEG;AACH,oBAAY,gBAAgB,GAAG,KAAK,GAAG;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,6DAA6D;AAC7D,qBAAa,iBAAkB,YAAW,WAAW;IACnD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAuB;IAC/C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAwB;IAE3C;;OAEG;IACI,SAAS,IAAI,IAAI;IA6BxB;;;OAGG;YACW,YAAY;IAsC1B;;;OAGG;YACW,uCAAuC;IAqDrD;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;;;;OAKG;YACW,iBAAiB;CAgChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"debugsymbolicator.js","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"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","sourcesContent":["import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, EventHint, Integration, StackFrame } from '@sentry/types';\nimport { addContextToFrame, logger } from '@sentry/utils';\n\nconst INTERNAL_CALLSITES_REGEX = new RegExp(\n ['ReactNativeRenderer-dev\\\\.js$', 'MessageQueue\\\\.js$'].join('|')\n);\n\ninterface GetDevServer {\n (): { url: string };\n}\n\n/**\n * React Native Stack Frame\n */\ninterface ReactNativeFrame {\n // arguments: []\n column: number;\n file: string;\n lineNumber: number;\n methodName: string;\n}\n\n/**\n * React Native Error\n */\nexport type ReactNativeError = Error & {\n framesToPop?: number;\n jsEngine?: string;\n preventSymbolication?: boolean;\n componentStack?: string;\n};\n\n/** Tries to symbolicate the JS stack trace on the device. */\nexport class DebugSymbolicator implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'DebugSymbolicator';\n /**\n * @inheritDoc\n */\n public name: string = DebugSymbolicator.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor(async (event: Event, hint?: EventHint) => {\n const self = getCurrentHub().getIntegration(DebugSymbolicator);\n\n if (!self || hint === undefined || hint.originalException === undefined) {\n return event;\n }\n\n const reactError = hint.originalException as ReactNativeError;\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack');\n\n let stack;\n try {\n stack = parseErrorStack(reactError);\n } catch (e) {\n // In RN 0.64 `parseErrorStack` now only takes a string\n stack = parseErrorStack(reactError.stack);\n }\n\n await self._symbolicate(event, stack);\n\n event.platform = 'node'; // Setting platform node makes sure we do not show source maps errors\n\n return event;\n });\n }\n\n /**\n * Symbolicates the stack on the device talking to local dev server.\n * Mutates the passed event.\n */\n private async _symbolicate(\n event: Event,\n stack: string | undefined\n ): Promise<void> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace');\n const prettyStack = await symbolicateStackTrace(stack);\n\n if (prettyStack) {\n let newStack = prettyStack;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (prettyStack.stack) {\n // This has been changed in an react-native version so stack is contained in here\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n newStack = prettyStack.stack;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const stackWithoutInternalCallsites = newStack.filter(\n (frame: { file?: string }) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n frame.file && frame.file.match(INTERNAL_CALLSITES_REGEX) === null\n );\n\n const symbolicatedFrames = await this._convertReactNativeFramesToSentryFrames(\n stackWithoutInternalCallsites\n );\n this._replaceFramesInEvent(event, symbolicatedFrames);\n } else {\n logger.error('The stack is null');\n }\n } catch (error) {\n if (error instanceof Error) {\n logger.warn(`Unable to symbolicate stack trace: ${error.message}`);\n }\n }\n }\n\n /**\n * Converts ReactNativeFrames to frames in the Sentry format\n * @param frames ReactNativeFrame[]\n */\n private async _convertReactNativeFramesToSentryFrames(\n frames: ReactNativeFrame[]\n ): Promise<StackFrame[]> {\n let getDevServer: GetDevServer;\n try {\n getDevServer = require('react-native/Libraries/Core/Devtools/getDevServer');\n } catch (_oO) {\n // We can't load devserver URL\n }\n // Below you will find lines marked with :HACK to prevent showing errors in the sentry ui\n // But since this is a debug only feature: This is Fine (TM)\n return Promise.all(\n frames.map(\n async (frame: ReactNativeFrame): Promise<StackFrame> => {\n let inApp = !!frame.column && !!frame.lineNumber;\n inApp =\n inApp &&\n frame.file !== undefined &&\n !frame.file.includes('node_modules') &&\n !frame.file.includes('native code');\n\n const newFrame: StackFrame = {\n colno: frame.column,\n filename: frame.file,\n function: frame.methodName,\n in_app: inApp,\n lineno: inApp ? frame.lineNumber : undefined, // :HACK\n platform: inApp ? 'javascript' : 'node', // :HACK\n };\n\n // The upstream `react-native@0.61` delegates parsing of stacks to `stacktrace-parser`, which is buggy and\n // leaves a trailing `(address at` in the function name.\n // `react-native@0.62` seems to have custom logic to parse hermes frames specially.\n // Anyway, all we do here is throw away the bogus suffix.\n if (newFrame.function) {\n const addressAtPos = newFrame.function.indexOf('(address at');\n if (addressAtPos >= 0) {\n newFrame.function = newFrame.function\n .substr(0, addressAtPos)\n .trim();\n }\n }\n\n if (inApp) {\n await this._addSourceContext(newFrame, getDevServer);\n }\n\n return newFrame;\n }\n )\n );\n }\n\n /**\n * Replaces the frames in the exception of a error.\n * @param event Event\n * @param frames StackFrame[]\n */\n private _replaceFramesInEvent(event: Event, frames: StackFrame[]): void {\n if (\n event.exception &&\n event.exception.values &&\n event.exception.values[0] &&\n event.exception.values[0].stacktrace\n ) {\n event.exception.values[0].stacktrace.frames = frames.reverse();\n }\n }\n\n /**\n * This tries to add source context for in_app Frames\n *\n * @param frame StackFrame\n * @param getDevServer function from RN to get DevServer URL\n */\n private async _addSourceContext(\n frame: StackFrame,\n getDevServer?: GetDevServer\n ): Promise<void> {\n let response;\n\n const segments = frame.filename?.split('/') ?? [];\n\n if (getDevServer) {\n for (const idx in segments) {\n if (Object.prototype.hasOwnProperty.call(segments, idx)) {\n response = await fetch(\n `${getDevServer().url}${segments.slice(-idx).join('/')}`,\n {\n method: 'GET',\n }\n );\n\n if (response.ok) {\n break;\n }\n }\n }\n }\n\n if (response && response.ok) {\n const content = await response.text();\n const lines = content.split('\\n');\n\n addContextToFrame(lines, frame);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"debugsymbolicator.js","sourceRoot":"","sources":["../../../src/js/integrations/debugsymbolicator.ts"],"names":[],"mappings":"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","sourcesContent":["import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport type { Event, EventHint, Integration, StackFrame } from '@sentry/types';\nimport { addContextToFrame, logger } from '@sentry/utils';\n\nconst INTERNAL_CALLSITES_REGEX = new RegExp(\n ['ReactNativeRenderer-dev\\\\.js$', 'MessageQueue\\\\.js$'].join('|')\n);\n\ninterface GetDevServer {\n (): { url: string };\n}\n\n/**\n * React Native Stack Frame\n */\ninterface ReactNativeFrame {\n // arguments: []\n column: number;\n file: string;\n lineNumber: number;\n methodName: string;\n}\n\n/**\n * React Native Error\n */\nexport type ReactNativeError = Error & {\n framesToPop?: number;\n jsEngine?: string;\n preventSymbolication?: boolean;\n componentStack?: string;\n};\n\n/** Tries to symbolicate the JS stack trace on the device. */\nexport class DebugSymbolicator implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'DebugSymbolicator';\n /**\n * @inheritDoc\n */\n public name: string = DebugSymbolicator.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor(async (event: Event, hint?: EventHint) => {\n const self = getCurrentHub().getIntegration(DebugSymbolicator);\n\n if (!self || hint === undefined || hint.originalException === undefined) {\n return event;\n }\n\n const reactError = hint.originalException as ReactNativeError;\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parseErrorStack = require('react-native/Libraries/Core/Devtools/parseErrorStack');\n\n let stack;\n try {\n stack = parseErrorStack(reactError);\n } catch (e) {\n // In RN 0.64 `parseErrorStack` now only takes a string\n stack = parseErrorStack(reactError.stack);\n }\n\n await self._symbolicate(event, stack);\n\n event.platform = 'node'; // Setting platform node makes sure we do not show source maps errors\n\n return event;\n });\n }\n\n /**\n * Symbolicates the stack on the device talking to local dev server.\n * Mutates the passed event.\n */\n private async _symbolicate(\n event: Event,\n stack: string | undefined\n ): Promise<void> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const symbolicateStackTrace = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace');\n const prettyStack = await symbolicateStackTrace(stack);\n\n if (prettyStack) {\n let newStack = prettyStack;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (prettyStack.stack) {\n // This has been changed in an react-native version so stack is contained in here\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n newStack = prettyStack.stack;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const stackWithoutInternalCallsites = newStack.filter(\n (frame: { file?: string }) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n frame.file && frame.file.match(INTERNAL_CALLSITES_REGEX) === null\n );\n\n const symbolicatedFrames = await this._convertReactNativeFramesToSentryFrames(\n stackWithoutInternalCallsites\n );\n this._replaceFramesInEvent(event, symbolicatedFrames);\n } else {\n logger.error('The stack is null');\n }\n } catch (error) {\n if (error instanceof Error) {\n logger.warn(`Unable to symbolicate stack trace: ${error.message}`);\n }\n }\n }\n\n /**\n * Converts ReactNativeFrames to frames in the Sentry format\n * @param frames ReactNativeFrame[]\n */\n private async _convertReactNativeFramesToSentryFrames(\n frames: ReactNativeFrame[]\n ): Promise<StackFrame[]> {\n let getDevServer: GetDevServer;\n try {\n getDevServer = require('react-native/Libraries/Core/Devtools/getDevServer');\n } catch (_oO) {\n // We can't load devserver URL\n }\n // Below you will find lines marked with :HACK to prevent showing errors in the sentry ui\n // But since this is a debug only feature: This is Fine (TM)\n return Promise.all(\n frames.map(\n async (frame: ReactNativeFrame): Promise<StackFrame> => {\n let inApp = !!frame.column && !!frame.lineNumber;\n inApp =\n inApp &&\n frame.file !== undefined &&\n !frame.file.includes('node_modules') &&\n !frame.file.includes('native code');\n\n const newFrame: StackFrame = {\n colno: frame.column,\n filename: frame.file,\n function: frame.methodName,\n in_app: inApp,\n lineno: inApp ? frame.lineNumber : undefined, // :HACK\n platform: inApp ? 'javascript' : 'node', // :HACK\n };\n\n // The upstream `react-native@0.61` delegates parsing of stacks to `stacktrace-parser`, which is buggy and\n // leaves a trailing `(address at` in the function name.\n // `react-native@0.62` seems to have custom logic to parse hermes frames specially.\n // Anyway, all we do here is throw away the bogus suffix.\n if (newFrame.function) {\n const addressAtPos = newFrame.function.indexOf('(address at');\n if (addressAtPos >= 0) {\n newFrame.function = newFrame.function\n .substr(0, addressAtPos)\n .trim();\n }\n }\n\n if (inApp) {\n await this._addSourceContext(newFrame, getDevServer);\n }\n\n return newFrame;\n }\n )\n );\n }\n\n /**\n * Replaces the frames in the exception of a error.\n * @param event Event\n * @param frames StackFrame[]\n */\n private _replaceFramesInEvent(event: Event, frames: StackFrame[]): void {\n if (\n event.exception &&\n event.exception.values &&\n event.exception.values[0] &&\n event.exception.values[0].stacktrace\n ) {\n event.exception.values[0].stacktrace.frames = frames.reverse();\n }\n }\n\n /**\n * This tries to add source context for in_app Frames\n *\n * @param frame StackFrame\n * @param getDevServer function from RN to get DevServer URL\n */\n private async _addSourceContext(\n frame: StackFrame,\n getDevServer?: GetDevServer\n ): Promise<void> {\n let response;\n\n const segments = frame.filename?.split('/') ?? [];\n\n if (getDevServer) {\n for (const idx in segments) {\n if (Object.prototype.hasOwnProperty.call(segments, idx)) {\n response = await fetch(\n `${getDevServer().url}${segments.slice(-idx).join('/')}`,\n {\n method: 'GET',\n }\n );\n\n if (response.ok) {\n break;\n }\n }\n }\n }\n\n if (response && response.ok) {\n const content = await response.text();\n const lines = content.split('\\n');\n\n addContextToFrame(lines, frame);\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Integration } from '@sentry/types';
1
+ import type { EventProcessor, Hub, Integration } from '@sentry/types';
2
2
  /** Load device context from native. */
3
3
  export declare class DeviceContext implements Integration {
4
4
  /**
@@ -12,6 +12,6 @@ export declare class DeviceContext implements Integration {
12
12
  /**
13
13
  * @inheritDoc
14
14
  */
15
- setupOnce(): void;
15
+ setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void;
16
16
  }
17
17
  //# sourceMappingURL=devicecontext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"devicecontext.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/devicecontext.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,WAAW,EAAE,MAAM,eAAe,CAAC;AAK7D,uCAAuC;AACvC,qBAAa,aAAc,YAAW,WAAW;IAC/C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAmB;IAE3C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAoB;IAEvC;;OAEG;IACI,SAAS,IAAI,IAAI;CAyBzB"}
1
+ {"version":3,"file":"devicecontext.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/devicecontext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAS,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO7E,uCAAuC;AACvC,qBAAa,aAAc,YAAW,WAAW;IAC/C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAmB;IAE3C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAoB;IAEvC;;OAEG;IACI,SAAS,CACd,uBAAuB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,EAC3D,aAAa,EAAE,MAAM,GAAG,GACvB,IAAI;CAmER"}
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from "tslib";
2
- import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';
3
- import { logger } from '@sentry/utils';
2
+ import { logger, severityLevelFromString } from '@sentry/utils';
3
+ import { breadcrumbFromObject } from '../breadcrumb';
4
4
  import { NATIVE } from '../wrapper';
5
5
  /** Load device context from native. */
6
6
  export class DeviceContext {
@@ -13,25 +13,59 @@ export class DeviceContext {
13
13
  /**
14
14
  * @inheritDoc
15
15
  */
16
- setupOnce() {
16
+ setupOnce(addGlobalEventProcessor, getCurrentHub) {
17
17
  addGlobalEventProcessor((event) => __awaiter(this, void 0, void 0, function* () {
18
- var _a, _b;
18
+ var _a;
19
19
  const self = getCurrentHub().getIntegration(DeviceContext);
20
20
  if (!self) {
21
21
  return event;
22
22
  }
23
+ let native = null;
23
24
  try {
24
- const contexts = yield NATIVE.fetchNativeDeviceContexts();
25
- const context = (_a = contexts['context']) !== null && _a !== void 0 ? _a : {};
26
- const user = (_b = contexts['user']) !== null && _b !== void 0 ? _b : {};
27
- event.contexts = Object.assign(Object.assign({}, context), event.contexts);
28
- if (!event.user) {
29
- event.user = Object.assign({}, user);
30
- }
25
+ native = yield NATIVE.fetchNativeDeviceContexts();
31
26
  }
32
27
  catch (e) {
33
28
  logger.log(`Failed to get device context from native: ${e}`);
34
29
  }
30
+ if (!native) {
31
+ return event;
32
+ }
33
+ const nativeUser = native.user;
34
+ if (!event.user && nativeUser) {
35
+ event.user = nativeUser;
36
+ }
37
+ const nativeContext = native.context;
38
+ if (nativeContext) {
39
+ event.contexts = Object.assign(Object.assign({}, nativeContext), event.contexts);
40
+ }
41
+ const nativeTags = native.tags;
42
+ if (nativeTags) {
43
+ event.tags = Object.assign(Object.assign({}, nativeTags), event.tags);
44
+ }
45
+ const nativeExtra = native.extra;
46
+ if (nativeExtra) {
47
+ event.extra = Object.assign(Object.assign({}, nativeExtra), event.extra);
48
+ }
49
+ const nativeFingerprint = native.fingerprint;
50
+ if (nativeFingerprint) {
51
+ event.fingerprint = ((_a = event.fingerprint) !== null && _a !== void 0 ? _a : []).concat(nativeFingerprint.filter((item) => { var _a; return ((_a = event.fingerprint) !== null && _a !== void 0 ? _a : []).indexOf(item) < 0; }));
52
+ }
53
+ const nativeLevel = typeof native['level'] === 'string'
54
+ ? severityLevelFromString(native['level'])
55
+ : undefined;
56
+ if (!event.level && nativeLevel) {
57
+ event.level = nativeLevel;
58
+ }
59
+ const nativeEnvironment = native['environment'];
60
+ if (!event.environment && nativeEnvironment) {
61
+ event.environment = nativeEnvironment;
62
+ }
63
+ const nativeBreadcrumbs = Array.isArray(native['breadcrumbs'])
64
+ ? native['breadcrumbs'].map(breadcrumbFromObject)
65
+ : undefined;
66
+ if (nativeBreadcrumbs) {
67
+ event.breadcrumbs = nativeBreadcrumbs;
68
+ }
35
69
  return event;
36
70
  }));
37
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"devicecontext.js","sourceRoot":"","sources":["../../../src/js/integrations/devicecontext.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,uCAAuC;AACvC,MAAM,OAAO,aAAa;IAA1B;QAME;;WAEG;QACI,SAAI,GAAW,aAAa,CAAC,EAAE,CAAC;IA8BzC,CAAC;IA5BC;;OAEG;IACI,SAAS;QACd,uBAAuB,CAAC,CAAO,KAAY,EAAE,EAAE;;YAC7C,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YAED,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,yBAAyB,EAAE,CAAC;gBAE1D,MAAM,OAAO,SAAG,QAAQ,CAAC,SAAS,CAAa,mCAAI,EAAE,CAAC;gBACtD,MAAM,IAAI,SAAG,QAAQ,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC;gBAEpC,KAAK,CAAC,QAAQ,mCAAQ,OAAO,GAAK,KAAK,CAAC,QAAQ,CAAE,CAAC;gBAEnD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;oBACf,KAAK,CAAC,IAAI,qBAAQ,IAAI,CAAE,CAAC;iBAC1B;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,EAAE,CAAC,CAAC;aAC9D;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;;AArCD;;GAEG;AACW,gBAAE,GAAW,eAAe,CAAC","sourcesContent":["import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Contexts, Event, Integration } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { NATIVE } from '../wrapper';\n\n/** Load device context from native. */\nexport class DeviceContext implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'DeviceContext';\n\n /**\n * @inheritDoc\n */\n public name: string = DeviceContext.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n addGlobalEventProcessor(async (event: Event) => {\n const self = getCurrentHub().getIntegration(DeviceContext);\n if (!self) {\n return event;\n }\n\n try {\n const contexts = await NATIVE.fetchNativeDeviceContexts();\n\n const context = contexts['context'] as Contexts ?? {};\n const user = contexts['user'] ?? {};\n\n event.contexts = { ...context, ...event.contexts };\n\n if (!event.user) {\n event.user = { ...user };\n }\n } catch (e) {\n logger.log(`Failed to get device context from native: ${e}`);\n }\n\n return event;\n });\n }\n}\n"]}
1
+ {"version":3,"file":"devicecontext.js","sourceRoot":"","sources":["../../../src/js/integrations/devicecontext.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport type { Event, EventProcessor, Hub, Integration } from '@sentry/types';\nimport { logger, severityLevelFromString } from '@sentry/utils';\n\nimport { breadcrumbFromObject } from '../breadcrumb';\nimport type { NativeDeviceContextsResponse } from '../NativeRNSentry';\nimport { NATIVE } from '../wrapper';\n\n/** Load device context from native. */\nexport class DeviceContext implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'DeviceContext';\n\n /**\n * @inheritDoc\n */\n public name: string = DeviceContext.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(\n addGlobalEventProcessor: (callback: EventProcessor) => void,\n getCurrentHub: () => Hub,\n ): void {\n addGlobalEventProcessor(async (event: Event) => {\n const self = getCurrentHub().getIntegration(DeviceContext);\n if (!self) {\n return event;\n }\n\n let native: NativeDeviceContextsResponse | null = null;\n try {\n native = await NATIVE.fetchNativeDeviceContexts();\n } catch (e) {\n logger.log(`Failed to get device context from native: ${e}`);\n }\n\n if (!native) {\n return event;\n }\n\n const nativeUser = native.user;\n if (!event.user && nativeUser) {\n event.user = nativeUser;\n }\n\n const nativeContext = native.context;\n if (nativeContext) {\n event.contexts = { ...nativeContext, ...event.contexts };\n }\n\n const nativeTags = native.tags;\n if (nativeTags) {\n event.tags = { ...nativeTags, ...event.tags };\n }\n\n const nativeExtra = native.extra;\n if (nativeExtra) {\n event.extra = { ...nativeExtra, ...event.extra };\n }\n\n const nativeFingerprint = native.fingerprint;\n if (nativeFingerprint) {\n event.fingerprint = (event.fingerprint ?? []).concat(\n nativeFingerprint.filter((item) => (event.fingerprint ?? []).indexOf(item) < 0),\n )\n }\n\n const nativeLevel = typeof native['level'] === 'string'\n ? severityLevelFromString(native['level'])\n : undefined;\n if (!event.level && nativeLevel) {\n event.level = nativeLevel;\n }\n\n const nativeEnvironment = native['environment'];\n if (!event.environment && nativeEnvironment) {\n event.environment = nativeEnvironment;\n }\n\n const nativeBreadcrumbs = Array.isArray(native['breadcrumbs'])\n ? native['breadcrumbs'].map(breadcrumbFromObject)\n : undefined;\n if (nativeBreadcrumbs) {\n event.breadcrumbs = nativeBreadcrumbs;\n }\n\n return event;\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { EventProcessor, Integration } from '@sentry/types';
1
+ import type { EventProcessor, Integration } from '@sentry/types';
2
2
  /** Default EventOrigin instrumentation */
3
3
  export declare class EventOrigin implements Integration {
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"eventorigin.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/eventorigin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5D,0CAA0C;AAC1C,qBAAa,WAAY,YAAW,WAAW;IAC7C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAiB;IAEzC;;OAEG;IACI,IAAI,EAAE,MAAM,CAAkB;IAErC;;OAEG;IACI,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;CAU7E"}
1
+ {"version":3,"file":"eventorigin.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/eventorigin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjE,0CAA0C;AAC1C,qBAAa,WAAY,YAAW,WAAW;IAC7C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAiB;IAEzC;;OAEG;IACI,IAAI,EAAE,MAAM,CAAkB;IAErC;;OAEG;IACI,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;CAU7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"eventorigin.js","sourceRoot":"","sources":["../../../src/js/integrations/eventorigin.ts"],"names":[],"mappings":"AAEA,0CAA0C;AAC1C,MAAM,OAAO,WAAW;IAAxB;QAME;;WAEG;QACI,SAAI,GAAW,WAAW,CAAC,EAAE,CAAC;IAevC,CAAC;IAbC;;OAEG;IACI,SAAS,CAAC,uBAAoD;QACnE,uBAAuB,CAAC,CAAC,KAAK,EAAE,EAAE;;YAChC,KAAK,CAAC,IAAI,SAAG,KAAK,CAAC,IAAI,mCAAI,EAAE,CAAC;YAE9B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC;YAE/C,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;;AAtBD;;GAEG;AACW,cAAE,GAAW,aAAa,CAAC","sourcesContent":["import { EventProcessor, Integration } from '@sentry/types';\n\n/** Default EventOrigin instrumentation */\nexport class EventOrigin implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'EventOrigin';\n\n /**\n * @inheritDoc\n */\n public name: string = EventOrigin.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (e: EventProcessor) => void): void {\n addGlobalEventProcessor((event) => {\n event.tags = event.tags ?? {};\n\n event.tags['event.origin'] = 'javascript';\n event.tags['event.environment'] = 'javascript';\n\n return event;\n });\n }\n}\n"]}
1
+ {"version":3,"file":"eventorigin.js","sourceRoot":"","sources":["../../../src/js/integrations/eventorigin.ts"],"names":[],"mappings":"AAEA,0CAA0C;AAC1C,MAAM,OAAO,WAAW;IAAxB;QAME;;WAEG;QACI,SAAI,GAAW,WAAW,CAAC,EAAE,CAAC;IAevC,CAAC;IAbC;;OAEG;IACI,SAAS,CAAC,uBAAoD;QACnE,uBAAuB,CAAC,CAAC,KAAK,EAAE,EAAE;;YAChC,KAAK,CAAC,IAAI,SAAG,KAAK,CAAC,IAAI,mCAAI,EAAE,CAAC;YAE9B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC;YAE/C,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;;AAtBD;;GAEG;AACW,cAAE,GAAW,aAAa,CAAC","sourcesContent":["import type { EventProcessor, Integration } from '@sentry/types';\n\n/** Default EventOrigin instrumentation */\nexport class EventOrigin implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'EventOrigin';\n\n /**\n * @inheritDoc\n */\n public name: string = EventOrigin.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (e: EventProcessor) => void): void {\n addGlobalEventProcessor((event) => {\n event.tags = event.tags ?? {};\n\n event.tags['event.origin'] = 'javascript';\n event.tags['event.environment'] = 'javascript';\n\n return event;\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { EventProcessor, Integration } from '@sentry/types';
1
+ import type { EventProcessor, Integration } from '@sentry/types';
2
2
  /** Loads runtime JS modules from prepared file. */
3
3
  export declare class ModulesLoader implements Integration {
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"modulesloader.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/modulesloader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIlE,mDAAmD;AACnD,qBAAa,aAAc,YAAW,WAAW;IAC/C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAmB;IAE3C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAoB;IAEvC;;OAEG;IACI,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;CAkB7E"}
1
+ {"version":3,"file":"modulesloader.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/modulesloader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKvE,mDAAmD;AACnD,qBAAa,aAAc,YAAW,WAAW;IAC/C;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAmB;IAE3C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAoB;IAEvC;;OAEG;IACI,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;CAsB7E"}
@@ -1,4 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
+ import { logger } from '@sentry/utils';
2
3
  import { NATIVE } from '../wrapper';
3
4
  /** Loads runtime JS modules from prepared file. */
4
5
  export class ModulesLoader {
@@ -16,11 +17,16 @@ export class ModulesLoader {
16
17
  let modules;
17
18
  addGlobalEventProcessor((event) => __awaiter(this, void 0, void 0, function* () {
18
19
  if (!isSetup) {
19
- modules = yield NATIVE.fetchModules();
20
+ try {
21
+ modules = yield NATIVE.fetchModules();
22
+ }
23
+ catch (e) {
24
+ logger.log(`Failed to get modules from native: ${e}`);
25
+ }
20
26
  isSetup = true;
21
27
  }
22
28
  if (modules) {
23
- event.modules = Object.assign(Object.assign({}, event.modules), modules);
29
+ event.modules = Object.assign(Object.assign({}, modules), event.modules);
24
30
  }
25
31
  return event;
26
32
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"modulesloader.js","sourceRoot":"","sources":["../../../src/js/integrations/modulesloader.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,mDAAmD;AACnD,MAAM,OAAO,aAAa;IAA1B;QAME;;WAEG;QACI,SAAI,GAAW,aAAa,CAAC,EAAE,CAAC;IAuBzC,CAAC;IArBC;;OAEG;IACI,SAAS,CAAC,uBAAoD;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,OAAsC,CAAC;QAE3C,uBAAuB,CAAC,CAAO,KAAY,EAAE,EAAE;YAC7C,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;gBACtC,OAAO,GAAG,IAAI,CAAC;aAChB;YACD,IAAI,OAAO,EAAE;gBACX,KAAK,CAAC,OAAO,mCACR,KAAK,CAAC,OAAO,GACb,OAAO,CACX,CAAC;aACH;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;;AA9BD;;GAEG;AACW,gBAAE,GAAW,eAAe,CAAC","sourcesContent":["import { Event,EventProcessor, Integration } from '@sentry/types';\n\nimport { NATIVE } from '../wrapper';\n\n/** Loads runtime JS modules from prepared file. */\nexport class ModulesLoader implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ModulesLoader';\n\n /**\n * @inheritDoc\n */\n public name: string = ModulesLoader.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (e: EventProcessor) => void): void {\n let isSetup = false;\n let modules: Record<string, string> | null;\n\n addGlobalEventProcessor(async (event: Event) => {\n if (!isSetup) {\n modules = await NATIVE.fetchModules();\n isSetup = true;\n }\n if (modules) {\n event.modules = {\n ...event.modules,\n ...modules,\n };\n }\n return event;\n });\n }\n}\n"]}
1
+ {"version":3,"file":"modulesloader.js","sourceRoot":"","sources":["../../../src/js/integrations/modulesloader.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,mDAAmD;AACnD,MAAM,OAAO,aAAa;IAA1B;QAME;;WAEG;QACI,SAAI,GAAW,aAAa,CAAC,EAAE,CAAC;IA2BzC,CAAC;IAzBC;;OAEG;IACI,SAAS,CAAC,uBAAoD;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,OAAsC,CAAC;QAE3C,uBAAuB,CAAC,CAAO,KAAY,EAAE,EAAE;YAC7C,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI;oBACF,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;iBACvC;gBAAC,OAAO,CAAC,EAAE;oBACV,MAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC;iBACvD;gBACD,OAAO,GAAG,IAAI,CAAC;aAChB;YACD,IAAI,OAAO,EAAE;gBACX,KAAK,CAAC,OAAO,mCACR,OAAO,GACP,KAAK,CAAC,OAAO,CACjB,CAAC;aACH;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;;AAlCD;;GAEG;AACW,gBAAE,GAAW,eAAe,CAAC","sourcesContent":["import type { Event,EventProcessor, Integration } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { NATIVE } from '../wrapper';\n\n/** Loads runtime JS modules from prepared file. */\nexport class ModulesLoader implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ModulesLoader';\n\n /**\n * @inheritDoc\n */\n public name: string = ModulesLoader.id;\n\n /**\n * @inheritDoc\n */\n public setupOnce(addGlobalEventProcessor: (e: EventProcessor) => void): void {\n let isSetup = false;\n let modules: Record<string, string> | null;\n\n addGlobalEventProcessor(async (event: Event) => {\n if (!isSetup) {\n try {\n modules = await NATIVE.fetchModules();\n } catch (e) {\n logger.log(`Failed to get modules from native: ${e}`);\n }\n isSetup = true;\n }\n if (modules) {\n event.modules = {\n ...modules,\n ...event.modules,\n };\n }\n return event;\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Integration } from '@sentry/types';
1
+ import type { Integration } from '@sentry/types';
2
2
  /** ReactNativeErrorHandlers Options */
3
3
  interface ReactNativeErrorHandlersOptions {
4
4
  onerror: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"reactnativeerrorhandlers.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/reactnativeerrorhandlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAiB,MAAM,eAAe,CAAC;AAM3D,uCAAuC;AACvC,UAAU,+BAA+B;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAUD,2CAA2C;AAC3C,qBAAa,wBAAyB,YAAW,WAAW;IAC1D;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAA8B;IAEtD;;OAEG;IACI,IAAI,EAAE,MAAM,CAA+B;IAElD,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,kBAAkB;gBACC,OAAO,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC;IASrE;;OAEG;IACI,SAAS,IAAI,IAAI;IAKxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAyCxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,cAAc;CAoEvB"}
1
+ {"version":3,"file":"reactnativeerrorhandlers.d.ts","sourceRoot":"","sources":["../../../src/js/integrations/reactnativeerrorhandlers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,WAAW,EAAiB,MAAM,eAAe,CAAC;AAM3E,uCAAuC;AACvC,UAAU,+BAA+B;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAOD,2CAA2C;AAC3C,qBAAa,wBAAyB,YAAW,WAAW;IAC1D;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAA8B;IAEtD;;OAEG;IACI,IAAI,EAAE,MAAM,CAA+B;IAElD,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAE3D,kBAAkB;gBACC,OAAO,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC;IASrE;;OAEG;IACI,SAAS,IAAI,IAAI;IAKxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAyCxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,cAAc;CAqEvB"}
@@ -131,10 +131,11 @@ export class ReactNativeErrorHandlers {
131
131
  return;
132
132
  }
133
133
  const options = client.getOptions();
134
- const event = yield client.eventFromException(error, {
134
+ const hint = {
135
135
  originalException: error,
136
136
  attachments: scope === null || scope === void 0 ? void 0 : scope.getAttachments(),
137
- });
137
+ };
138
+ const event = yield client.eventFromException(error, hint);
138
139
  if (isFatal) {
139
140
  event.level = 'fatal';
140
141
  addExceptionMechanism(event, {
@@ -142,7 +143,7 @@ export class ReactNativeErrorHandlers {
142
143
  type: 'onerror',
143
144
  });
144
145
  }
145
- currentHub.captureEvent(event);
146
+ currentHub.captureEvent(event, hint);
146
147
  if (!__DEV__) {
147
148
  void client.flush(options.shutdownTimeout || 2000).then(() => {
148
149
  defaultHandler(error, isFatal);
@@ -1 +1 @@
1
- {"version":3,"file":"reactnativeerrorhandlers.js","sourceRoot":"","sources":["../../../src/js/integrations/reactnativeerrorhandlers.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentHub } from '@sentry/core';\nimport { Integration, SeverityLevel } from '@sentry/types';\nimport { addExceptionMechanism, logger } from '@sentry/utils';\n\nimport { ReactNativeClient } from '../client';\nimport { RN_GLOBAL_OBJ } from '../utils/worldwide';\n\n/** ReactNativeErrorHandlers Options */\ninterface ReactNativeErrorHandlersOptions {\n onerror: boolean;\n onunhandledrejection: boolean;\n patchGlobalPromise: boolean;\n}\n\ninterface PromiseRejectionTrackingOptions {\n onUnhandled: (id: string, error: unknown) => void;\n onHandled: (id: string) => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ndeclare const global: any;\n\n/** ReactNativeErrorHandlers Integration */\nexport class ReactNativeErrorHandlers implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ReactNativeErrorHandlers';\n\n /**\n * @inheritDoc\n */\n public name: string = ReactNativeErrorHandlers.id;\n\n /** ReactNativeOptions */\n private readonly _options: ReactNativeErrorHandlersOptions;\n\n /** Constructor */\n public constructor(options?: Partial<ReactNativeErrorHandlersOptions>) {\n this._options = {\n onerror: true,\n onunhandledrejection: true,\n patchGlobalPromise: true,\n ...options,\n };\n }\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n this._handleUnhandledRejections();\n this._handleOnError();\n }\n\n /**\n * Handle Promises\n */\n private _handleUnhandledRejections(): void {\n if (this._options.onunhandledrejection) {\n if (this._options.patchGlobalPromise) {\n this._polyfillPromise();\n }\n\n this._attachUnhandledRejectionHandler();\n this._checkPromiseAndWarn();\n }\n }\n /**\n * Polyfill the global promise instance with one we can be sure that we can attach the tracking to.\n *\n * In newer RN versions >=0.63, the global promise is not the same reference as the one imported from the promise library.\n * This is due to a version mismatch between promise versions.\n * Originally we tried a solution where we would have you put a package resolution to ensure the promise instances match. However,\n * - Using a package resolution requires the you to manually troubleshoot.\n * - The package resolution fix no longer works with 0.67 on iOS Hermes.\n */\n private _polyfillPromise(): void {\n /* eslint-disable import/no-extraneous-dependencies,@typescript-eslint/no-var-requires */\n const {\n polyfillGlobal,\n } = require('react-native/Libraries/Utilities/PolyfillFunctions');\n\n // Below, we follow the exact way React Native initializes its promise library, and we globally replace it.\n const Promise = require('promise/setimmediate/es6-extensions');\n\n // As of RN 0.67 only done and finally are used\n require('promise/setimmediate/done');\n require('promise/setimmediate/finally');\n\n polyfillGlobal('Promise', () => Promise);\n /* eslint-enable import/no-extraneous-dependencies,@typescript-eslint/no-var-requires */\n }\n /**\n * Attach the unhandled rejection handler\n */\n private _attachUnhandledRejectionHandler(): void {\n const tracking: {\n disable: () => void;\n enable: (arg: unknown) => void;\n // eslint-disable-next-line import/no-extraneous-dependencies,@typescript-eslint/no-var-requires\n } = require('promise/setimmediate/rejection-tracking');\n\n const promiseRejectionTrackingOptions: PromiseRejectionTrackingOptions = {\n onUnhandled: (id, rejection = {}) => {\n // eslint-disable-next-line no-console\n console.warn(\n `Possible Unhandled Promise Rejection (id: ${id}):\\n${rejection}`\n );\n },\n onHandled: (id) => {\n // eslint-disable-next-line no-console\n console.warn(\n `Promise Rejection Handled (id: ${id})\\n` +\n 'This means you can ignore any previous messages of the form ' +\n `\"Possible Unhandled Promise Rejection (id: ${id}):\"`\n );\n },\n };\n\n tracking.enable({\n allRejections: true,\n onUnhandled: (id: string, error: Error) => {\n if (__DEV__) {\n promiseRejectionTrackingOptions.onUnhandled(id, error);\n }\n\n getCurrentHub().captureException(error, {\n data: { id },\n originalException: error,\n });\n },\n onHandled: (id: string) => {\n promiseRejectionTrackingOptions.onHandled(id);\n },\n });\n }\n /**\n * Checks if the promise is the same one or not, if not it will warn the user\n */\n private _checkPromiseAndWarn(): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires,import/no-extraneous-dependencies\n const Promise = require('promise/setimmediate/es6-extensions');\n\n if (Promise !== RN_GLOBAL_OBJ.Promise) {\n logger.warn(\n 'Unhandled promise rejections will not be caught by Sentry. Read about how to fix this on our troubleshooting page.'\n );\n } else {\n logger.log('Unhandled promise rejections will be caught by Sentry.');\n }\n } catch (e) {\n // Do Nothing\n logger.warn(\n 'Unhandled promise rejections will not be caught by Sentry. Read about how to fix this on our troubleshooting page.'\n );\n }\n }\n /**\n * Handle errors\n */\n private _handleOnError(): void {\n if (this._options.onerror) {\n let handlingFatal = false;\n\n const defaultHandler =\n ErrorUtils.getGlobalHandler && ErrorUtils.getGlobalHandler();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ErrorUtils.setGlobalHandler(async (error: any, isFatal?: boolean) => {\n // We want to handle fatals, but only in production mode.\n const shouldHandleFatal = isFatal && !__DEV__;\n if (shouldHandleFatal) {\n if (handlingFatal) {\n logger.log(\n 'Encountered multiple fatals in a row. The latest:',\n error\n );\n return;\n }\n handlingFatal = true;\n }\n\n const currentHub = getCurrentHub();\n const client = currentHub.getClient<ReactNativeClient>();\n const scope = currentHub.getScope();\n\n if (!client) {\n logger.error(\n 'Sentry client is missing, the error event might be lost.',\n error\n );\n\n // If there is no client something is fishy, anyway we call the default handler\n defaultHandler(error, isFatal);\n\n return;\n }\n\n const options = client.getOptions();\n\n const event = await client.eventFromException(error, {\n originalException: error,\n attachments: scope?.getAttachments(),\n });\n\n if (isFatal) {\n event.level = 'fatal' as SeverityLevel;\n\n addExceptionMechanism(event, {\n handled: false,\n type: 'onerror',\n });\n }\n\n currentHub.captureEvent(event);\n\n if (!__DEV__) {\n void client.flush(options.shutdownTimeout || 2000).then(() => {\n defaultHandler(error, isFatal);\n });\n } else {\n // If in dev, we call the default handler anyway and hope the error will be sent\n // Just for a better dev experience\n defaultHandler(error, isFatal);\n }\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"reactnativeerrorhandlers.js","sourceRoot":"","sources":["../../../src/js/integrations/reactnativeerrorhandlers.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAcnD,2CAA2C;AAC3C,MAAM,OAAO,wBAAwB;IAcnC,kBAAkB;IAClB,YAAmB,OAAkD;QATrE;;WAEG;QACI,SAAI,GAAW,wBAAwB,CAAC,EAAE,CAAC;QAOhD,IAAI,CAAC,QAAQ,mBACX,OAAO,EAAE,IAAI,EACb,oBAAoB,EAAE,IAAI,EAC1B,kBAAkB,EAAE,IAAI,IACrB,OAAO,CACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,SAAS;QACd,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE;gBACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB;YAED,IAAI,CAAC,gCAAgC,EAAE,CAAC;YACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;IACH,CAAC;IACD;;;;;;;;OAQG;IACK,gBAAgB;QACtB,yFAAyF;QACzF,MAAM,EACJ,cAAc,GACf,GAAG,OAAO,CAAC,oDAAoD,CAAC,CAAC;QAElE,2GAA2G;QAC3G,MAAM,OAAO,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAE/D,+CAA+C;QAC/C,OAAO,CAAC,2BAA2B,CAAC,CAAC;QACrC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAExC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QACzC,wFAAwF;IAC1F,CAAC;IACD;;OAEG;IACK,gCAAgC;QACtC,MAAM,QAAQ,GAIV,OAAO,CAAC,yCAAyC,CAAC,CAAC;QAEvD,MAAM,+BAA+B,GAAoC;YACvE,WAAW,EAAE,CAAC,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE;gBAClC,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CACV,6CAA6C,EAAE,OAAO,SAAS,EAAE,CAClE,CAAC;YACJ,CAAC;YACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;gBAChB,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CACV,kCAAkC,EAAE,KAAK;oBACzC,8DAA8D;oBAC9D,8CAA8C,EAAE,KAAK,CACtD,CAAC;YACJ,CAAC;SACF,CAAC;QAEF,QAAQ,CAAC,MAAM,CAAC;YACd,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,CAAC,EAAU,EAAE,KAAY,EAAE,EAAE;gBACxC,IAAI,OAAO,EAAE;oBACX,+BAA+B,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;iBACxD;gBAED,aAAa,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE;oBACtC,IAAI,EAAE,EAAE,EAAE,EAAE;oBACZ,iBAAiB,EAAE,KAAK;iBACzB,CAAC,CAAC;YACL,CAAC;YACD,SAAS,EAAE,CAAC,EAAU,EAAE,EAAE;gBACxB,+BAA+B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD;;OAEG;IACK,oBAAoB;QAC1B,IAAI;YACF,gGAAgG;YAChG,MAAM,OAAO,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;YAE/D,IAAI,OAAO,KAAK,aAAa,CAAC,OAAO,EAAE;gBACrC,MAAM,CAAC,IAAI,CACT,oHAAoH,CACrH,CAAC;aACH;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;aACtE;SACF;QAAC,OAAO,CAAC,EAAE;YACV,aAAa;YACb,MAAM,CAAC,IAAI,CACT,oHAAoH,CACrH,CAAC;SACH;IACH,CAAC;IACD;;OAEG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACzB,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,MAAM,cAAc,GAClB,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAE/D,8DAA8D;YAC9D,UAAU,CAAC,gBAAgB,CAAC,CAAO,KAAU,EAAE,OAAiB,EAAE,EAAE;gBAClE,yDAAyD;gBACzD,MAAM,iBAAiB,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC;gBAC9C,IAAI,iBAAiB,EAAE;oBACrB,IAAI,aAAa,EAAE;wBACjB,MAAM,CAAC,GAAG,CACR,mDAAmD,EACnD,KAAK,CACN,CAAC;wBACF,OAAO;qBACR;oBACD,aAAa,GAAG,IAAI,CAAC;iBACtB;gBAED,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAqB,CAAC;gBACzD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAEpC,IAAI,CAAC,MAAM,EAAE;oBACX,MAAM,CAAC,KAAK,CACV,0DAA0D,EAC1D,KAAK,CACN,CAAC;oBAEF,+EAA+E;oBAC/E,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAE/B,OAAO;iBACR;gBAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;gBAEpC,MAAM,IAAI,GAAc;oBACtB,iBAAiB,EAAE,KAAK;oBACxB,WAAW,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE;iBACrC,CAAC;gBACF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAE3D,IAAI,OAAO,EAAE;oBACX,KAAK,CAAC,KAAK,GAAG,OAAwB,CAAC;oBAEvC,qBAAqB,CAAC,KAAK,EAAE;wBAC3B,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,SAAS;qBAChB,CAAC,CAAC;iBACJ;gBAED,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAErC,IAAI,CAAC,OAAO,EAAE;oBACZ,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;wBAC3D,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBACjC,CAAC,CAAC,CAAC;iBACJ;qBAAM;oBACL,gFAAgF;oBAChF,mCAAmC;oBACnC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;iBAChC;YACH,CAAC,CAAA,CAAC,CAAC;SACJ;IACH,CAAC;;AA9MD;;GAEG;AACW,2BAAE,GAAW,0BAA0B,CAAC","sourcesContent":["import { getCurrentHub } from '@sentry/core';\nimport type { EventHint, Integration, SeverityLevel } from '@sentry/types';\nimport { addExceptionMechanism, logger } from '@sentry/utils';\n\nimport type { ReactNativeClient } from '../client';\nimport { RN_GLOBAL_OBJ } from '../utils/worldwide';\n\n/** ReactNativeErrorHandlers Options */\ninterface ReactNativeErrorHandlersOptions {\n onerror: boolean;\n onunhandledrejection: boolean;\n patchGlobalPromise: boolean;\n}\n\ninterface PromiseRejectionTrackingOptions {\n onUnhandled: (id: string, error: unknown) => void;\n onHandled: (id: string) => void;\n}\n\n/** ReactNativeErrorHandlers Integration */\nexport class ReactNativeErrorHandlers implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ReactNativeErrorHandlers';\n\n /**\n * @inheritDoc\n */\n public name: string = ReactNativeErrorHandlers.id;\n\n /** ReactNativeOptions */\n private readonly _options: ReactNativeErrorHandlersOptions;\n\n /** Constructor */\n public constructor(options?: Partial<ReactNativeErrorHandlersOptions>) {\n this._options = {\n onerror: true,\n onunhandledrejection: true,\n patchGlobalPromise: true,\n ...options,\n };\n }\n\n /**\n * @inheritDoc\n */\n public setupOnce(): void {\n this._handleUnhandledRejections();\n this._handleOnError();\n }\n\n /**\n * Handle Promises\n */\n private _handleUnhandledRejections(): void {\n if (this._options.onunhandledrejection) {\n if (this._options.patchGlobalPromise) {\n this._polyfillPromise();\n }\n\n this._attachUnhandledRejectionHandler();\n this._checkPromiseAndWarn();\n }\n }\n /**\n * Polyfill the global promise instance with one we can be sure that we can attach the tracking to.\n *\n * In newer RN versions >=0.63, the global promise is not the same reference as the one imported from the promise library.\n * This is due to a version mismatch between promise versions.\n * Originally we tried a solution where we would have you put a package resolution to ensure the promise instances match. However,\n * - Using a package resolution requires the you to manually troubleshoot.\n * - The package resolution fix no longer works with 0.67 on iOS Hermes.\n */\n private _polyfillPromise(): void {\n /* eslint-disable import/no-extraneous-dependencies,@typescript-eslint/no-var-requires */\n const {\n polyfillGlobal,\n } = require('react-native/Libraries/Utilities/PolyfillFunctions');\n\n // Below, we follow the exact way React Native initializes its promise library, and we globally replace it.\n const Promise = require('promise/setimmediate/es6-extensions');\n\n // As of RN 0.67 only done and finally are used\n require('promise/setimmediate/done');\n require('promise/setimmediate/finally');\n\n polyfillGlobal('Promise', () => Promise);\n /* eslint-enable import/no-extraneous-dependencies,@typescript-eslint/no-var-requires */\n }\n /**\n * Attach the unhandled rejection handler\n */\n private _attachUnhandledRejectionHandler(): void {\n const tracking: {\n disable: () => void;\n enable: (arg: unknown) => void;\n // eslint-disable-next-line import/no-extraneous-dependencies,@typescript-eslint/no-var-requires\n } = require('promise/setimmediate/rejection-tracking');\n\n const promiseRejectionTrackingOptions: PromiseRejectionTrackingOptions = {\n onUnhandled: (id, rejection = {}) => {\n // eslint-disable-next-line no-console\n console.warn(\n `Possible Unhandled Promise Rejection (id: ${id}):\\n${rejection}`\n );\n },\n onHandled: (id) => {\n // eslint-disable-next-line no-console\n console.warn(\n `Promise Rejection Handled (id: ${id})\\n` +\n 'This means you can ignore any previous messages of the form ' +\n `\"Possible Unhandled Promise Rejection (id: ${id}):\"`\n );\n },\n };\n\n tracking.enable({\n allRejections: true,\n onUnhandled: (id: string, error: Error) => {\n if (__DEV__) {\n promiseRejectionTrackingOptions.onUnhandled(id, error);\n }\n\n getCurrentHub().captureException(error, {\n data: { id },\n originalException: error,\n });\n },\n onHandled: (id: string) => {\n promiseRejectionTrackingOptions.onHandled(id);\n },\n });\n }\n /**\n * Checks if the promise is the same one or not, if not it will warn the user\n */\n private _checkPromiseAndWarn(): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires,import/no-extraneous-dependencies\n const Promise = require('promise/setimmediate/es6-extensions');\n\n if (Promise !== RN_GLOBAL_OBJ.Promise) {\n logger.warn(\n 'Unhandled promise rejections will not be caught by Sentry. Read about how to fix this on our troubleshooting page.'\n );\n } else {\n logger.log('Unhandled promise rejections will be caught by Sentry.');\n }\n } catch (e) {\n // Do Nothing\n logger.warn(\n 'Unhandled promise rejections will not be caught by Sentry. Read about how to fix this on our troubleshooting page.'\n );\n }\n }\n /**\n * Handle errors\n */\n private _handleOnError(): void {\n if (this._options.onerror) {\n let handlingFatal = false;\n\n const defaultHandler =\n ErrorUtils.getGlobalHandler && ErrorUtils.getGlobalHandler();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ErrorUtils.setGlobalHandler(async (error: any, isFatal?: boolean) => {\n // We want to handle fatals, but only in production mode.\n const shouldHandleFatal = isFatal && !__DEV__;\n if (shouldHandleFatal) {\n if (handlingFatal) {\n logger.log(\n 'Encountered multiple fatals in a row. The latest:',\n error\n );\n return;\n }\n handlingFatal = true;\n }\n\n const currentHub = getCurrentHub();\n const client = currentHub.getClient<ReactNativeClient>();\n const scope = currentHub.getScope();\n\n if (!client) {\n logger.error(\n 'Sentry client is missing, the error event might be lost.',\n error\n );\n\n // If there is no client something is fishy, anyway we call the default handler\n defaultHandler(error, isFatal);\n\n return;\n }\n\n const options = client.getOptions();\n\n const hint: EventHint = {\n originalException: error,\n attachments: scope?.getAttachments(),\n };\n const event = await client.eventFromException(error, hint);\n\n if (isFatal) {\n event.level = 'fatal' as SeverityLevel;\n\n addExceptionMechanism(event, {\n handled: false,\n type: 'onerror',\n });\n }\n\n currentHub.captureEvent(event, hint);\n\n if (!__DEV__) {\n void client.flush(options.shutdownTimeout || 2000).then(() => {\n defaultHandler(error, isFatal);\n });\n } else {\n // If in dev, we call the default handler anyway and hope the error will be sent\n // Just for a better dev experience\n defaultHandler(error, isFatal);\n }\n });\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Context, EventProcessor, Integration } from '@sentry/types';
1
+ import type { Context, EventProcessor, Integration } from '@sentry/types';
2
2
  export interface ReactNativeContext extends Context {
3
3
  js_engine?: string;
4
4
  turbo_module: boolean;