@sentry/react-native 7.0.0-beta.2 → 7.0.0-rc.2
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.
- package/RNSentry.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +77 -0
- package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
- package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +5 -0
- package/dist/js/NativeRNSentry.d.ts +1 -0
- package/dist/js/NativeRNSentry.d.ts.map +1 -1
- package/dist/js/NativeRNSentry.js.map +1 -1
- package/dist/js/client.d.ts +2 -2
- package/dist/js/client.d.ts.map +1 -1
- package/dist/js/client.js +6 -6
- package/dist/js/client.js.map +1 -1
- package/dist/js/feedback/FeedbackWidget.js +12 -12
- package/dist/js/feedback/FeedbackWidget.js.map +1 -1
- package/dist/js/feedback/FeedbackWidgetManager.js +2 -2
- package/dist/js/feedback/FeedbackWidgetManager.js.map +1 -1
- package/dist/js/feedback/FeedbackWidgetProvider.js +3 -3
- package/dist/js/feedback/FeedbackWidgetProvider.js.map +1 -1
- package/dist/js/index.d.ts +1 -1
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js +1 -1
- package/dist/js/index.js.map +1 -1
- package/dist/js/integrations/appRegistry.js +2 -2
- package/dist/js/integrations/appRegistry.js.map +1 -1
- package/dist/js/integrations/debugsymbolicator.js +3 -3
- package/dist/js/integrations/debugsymbolicator.js.map +1 -1
- package/dist/js/integrations/debugsymbolicatorutils.js +3 -3
- package/dist/js/integrations/debugsymbolicatorutils.js.map +1 -1
- package/dist/js/integrations/default.d.ts.map +1 -1
- package/dist/js/integrations/default.js +7 -4
- package/dist/js/integrations/default.js.map +1 -1
- package/dist/js/integrations/devicecontext.js +2 -2
- package/dist/js/integrations/devicecontext.js.map +1 -1
- package/dist/js/integrations/expocontext.d.ts.map +1 -1
- package/dist/js/integrations/expocontext.js +2 -2
- package/dist/js/integrations/expocontext.js.map +1 -1
- package/dist/js/integrations/exports.d.ts +1 -0
- package/dist/js/integrations/exports.d.ts.map +1 -1
- package/dist/js/integrations/exports.js +1 -0
- package/dist/js/integrations/exports.js.map +1 -1
- package/dist/js/integrations/logEnricherIntegration.d.ts +3 -0
- package/dist/js/integrations/logEnricherIntegration.d.ts.map +1 -0
- package/dist/js/integrations/logEnricherIntegration.js +65 -0
- package/dist/js/integrations/logEnricherIntegration.js.map +1 -0
- package/dist/js/integrations/modulesloader.js +2 -2
- package/dist/js/integrations/modulesloader.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js +12 -12
- package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlersutils.js +6 -6
- package/dist/js/integrations/reactnativeerrorhandlersutils.js.map +1 -1
- package/dist/js/integrations/sdkinfo.js +3 -3
- package/dist/js/integrations/sdkinfo.js.map +1 -1
- package/dist/js/integrations/spotlight.js +4 -4
- package/dist/js/integrations/spotlight.js.map +1 -1
- package/dist/js/integrations/viewhierarchy.js +2 -2
- package/dist/js/integrations/viewhierarchy.js.map +1 -1
- package/dist/js/options.d.ts +8 -0
- package/dist/js/options.d.ts.map +1 -1
- package/dist/js/options.js.map +1 -1
- package/dist/js/playground/modal.js +3 -3
- package/dist/js/playground/modal.js.map +1 -1
- package/dist/js/profiling/convertHermesProfile.js +5 -5
- package/dist/js/profiling/convertHermesProfile.js.map +1 -1
- package/dist/js/profiling/debugid.d.ts.map +1 -1
- package/dist/js/profiling/debugid.js +2 -2
- package/dist/js/profiling/debugid.js.map +1 -1
- package/dist/js/profiling/integration.js +13 -13
- package/dist/js/profiling/integration.js.map +1 -1
- package/dist/js/profiling/utils.js +3 -3
- package/dist/js/profiling/utils.js.map +1 -1
- package/dist/js/replay/CustomMask.js +3 -3
- package/dist/js/replay/CustomMask.js.map +1 -1
- package/dist/js/replay/mobilereplay.js +5 -5
- package/dist/js/replay/mobilereplay.js.map +1 -1
- package/dist/js/sdk.js +7 -7
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/tools/ModulesCollector.js +12 -12
- package/dist/js/tools/ModulesCollector.js.map +1 -1
- package/dist/js/tools/enableLogger.js +1 -1
- package/dist/js/tools/enableLogger.js.map +1 -1
- package/dist/js/tools/metroMiddleware.js +6 -6
- package/dist/js/tools/metroMiddleware.js.map +1 -1
- package/dist/js/tools/metroconfig.js +2 -2
- package/dist/js/tools/metroconfig.js.map +1 -1
- package/dist/js/tools/sentryBabelTransformerUtils.d.ts.map +1 -1
- package/dist/js/tools/sentryBabelTransformerUtils.js +6 -6
- package/dist/js/tools/sentryBabelTransformerUtils.js.map +1 -1
- package/dist/js/touchevents.js +3 -3
- package/dist/js/touchevents.js.map +1 -1
- package/dist/js/tracing/gesturetracing.js +5 -5
- package/dist/js/tracing/gesturetracing.js.map +1 -1
- package/dist/js/tracing/integrations/appStart.js +34 -34
- package/dist/js/tracing/integrations/appStart.js.map +1 -1
- package/dist/js/tracing/integrations/nativeFrames.js +14 -14
- package/dist/js/tracing/integrations/nativeFrames.js.map +1 -1
- package/dist/js/tracing/integrations/stalltracking.js +7 -7
- package/dist/js/tracing/integrations/stalltracking.js.map +1 -1
- package/dist/js/tracing/integrations/timeToDisplayIntegration.js +11 -11
- package/dist/js/tracing/integrations/timeToDisplayIntegration.js.map +1 -1
- package/dist/js/tracing/integrations/userInteraction.js +8 -8
- package/dist/js/tracing/integrations/userInteraction.js.map +1 -1
- package/dist/js/tracing/onSpanEndUtils.js +10 -10
- package/dist/js/tracing/onSpanEndUtils.js.map +1 -1
- package/dist/js/tracing/reactnativeprofiler.js +2 -2
- package/dist/js/tracing/reactnativeprofiler.js.map +1 -1
- package/dist/js/tracing/reactnavigation.js +14 -14
- package/dist/js/tracing/reactnavigation.js.map +1 -1
- package/dist/js/tracing/span.d.ts.map +1 -1
- package/dist/js/tracing/span.js +11 -5
- package/dist/js/tracing/span.js.map +1 -1
- package/dist/js/tracing/timetodisplay.js +20 -20
- package/dist/js/tracing/timetodisplay.js.map +1 -1
- package/dist/js/tracing/utils.js +2 -2
- package/dist/js/tracing/utils.js.map +1 -1
- package/dist/js/utils/safe.js +3 -3
- package/dist/js/utils/safe.js.map +1 -1
- package/dist/js/version.d.ts +1 -1
- package/dist/js/version.d.ts.map +1 -1
- package/dist/js/version.js +1 -1
- package/dist/js/version.js.map +1 -1
- package/dist/js/wrapper.d.ts +1 -0
- package/dist/js/wrapper.d.ts.map +1 -1
- package/dist/js/wrapper.js +40 -26
- package/dist/js/wrapper.js.map +1 -1
- package/ios/RNSentry.h +7 -1
- package/ios/RNSentry.mm +86 -21
- package/ios/RNSentryReplay.mm +4 -0
- package/ios/RNSentryReplayBreadcrumbConverter.h +1 -1
- package/ios/RNSentryReplayBreadcrumbConverter.m +17 -4
- package/ios/RNSentryReplayQuality.h +13 -0
- package/ios/RNSentryReplayQuality.m +25 -0
- package/ios/RNSentryVersion.m +1 -1
- package/ios/SentrySDKWrapper.h +18 -0
- package/ios/SentrySDKWrapper.m +31 -0
- package/package.json +11 -11
- package/scripts/expo-upload-sourcemaps.js +4 -1
- package/scripts/sentry-xcode-debug-files.sh +25 -2
- package/scripts/sentry-xcode.sh +23 -3
- package/sentry.gradle +27 -6
- package/src/js/NativeRNSentry.ts +1 -0
- package/ts3.8/dist/js/NativeRNSentry.d.ts +1 -0
- package/ts3.8/dist/js/client.d.ts +2 -2
- package/ts3.8/dist/js/index.d.ts +1 -1
- package/ts3.8/dist/js/integrations/exports.d.ts +1 -0
- package/ts3.8/dist/js/integrations/logEnricherIntegration.d.ts +3 -0
- package/ts3.8/dist/js/options.d.ts +8 -0
- package/ts3.8/dist/js/version.d.ts +1 -1
- package/ts3.8/dist/js/wrapper.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/profiling/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport type { Envelope, Event, ThreadCpuProfile } from '@sentry/core';\nimport { forEachEnvelopeItem, logger } from '@sentry/core';\nimport { getDefaultEnvironment } from '../utils/environment';\nimport { getDebugMetadata } from './debugid';\nimport type {\n AndroidCombinedProfileEvent,\n AndroidProfileEvent,\n CombinedProfileEvent,\n HermesProfileEvent,\n ProfileEvent,\n RawThreadCpuProfile,\n} from './types';\n\n/**\n *\n */\nexport function isValidProfile(profile: ThreadCpuProfile): profile is RawThreadCpuProfile & { profile_id: string } {\n if (profile.samples.length <= 1) {\n if (__DEV__) {\n // Log a warning if the profile has less than 2 samples so users can know why\n // they are not seeing any profiling data and we cant avoid the back and forth\n // of asking them to provide us with a dump of the profile data.\n logger.log('[Profiling] Discarding profile because it contains less than 2 samples');\n }\n return false;\n }\n return true;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nexport function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[] {\n const events: Event[] = [];\n\n forEachEnvelopeItem(envelope, (item, type) => {\n if (type !== 'transaction') {\n return;\n }\n\n // First item is the type\n for (let j = 1; j < item.length; j++) {\n const event = item[j];\n\n // @ts-expect-error accessing private property\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.contexts?.trace?.data?.profile_id) {\n events.push(item[j] as Event);\n }\n }\n });\n\n return events;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {ProfileEvent | null}\n */\nexport function enrichCombinedProfileWithEventContext(\n profile_id: string,\n profile: CombinedProfileEvent | AndroidCombinedProfileEvent,\n event: Event,\n): ProfileEvent | null {\n if ('js_profile' in profile) {\n return enrichAndroidProfileWithEventContext(profile_id, profile, event);\n }\n\n if (!profile.profile || !isValidProfile(profile.profile)) {\n return null;\n }\n\n const trace_id = event.contexts?.trace?.trace_id || '';\n\n // Log a warning if the profile has an invalid traceId (should be uuidv4).\n // All profiles and transactions are rejected if this is the case and we want to\n // warn users that this is happening if they enable debug flag\n if (trace_id?.length !== 32) {\n if (__DEV__) {\n logger.log(`[Profiling] Invalid traceId: ${trace_id} on profiled event`);\n }\n }\n\n return {\n ...profile,\n event_id: profile_id,\n runtime: {\n name: 'hermes',\n version: '', // TODO: get hermes version\n },\n timestamp: event.start_timestamp ? new Date(event.start_timestamp * 1000).toISOString() : new Date().toISOString(),\n release: event.release || '',\n environment: event.environment || getDefaultEnvironment(),\n os: {\n name: event.contexts?.os?.name || '',\n version: event.contexts?.os?.version || '',\n build_number: event.contexts?.os?.build || '',\n },\n device: {\n locale: (event.contexts?.device && (event.contexts.device.locale as string)) || '',\n model: event.contexts?.device?.model || '',\n manufacturer: event.contexts?.device?.manufacturer || '',\n architecture: event.contexts?.device?.arch || '',\n is_emulator: event.contexts?.device?.simulator || false,\n },\n transaction: {\n name: event.transaction || '',\n id: event.event_id || '',\n trace_id,\n active_thread_id: profile.transaction?.active_thread_id || '',\n },\n debug_meta: {\n images: [...getDebugMetadata(), ...(profile.debug_meta?.images || [])],\n },\n };\n}\n\n/**\n * Creates Android profiling envelope item.\n */\nexport function enrichAndroidProfileWithEventContext(\n profile_id: string,\n profile: AndroidCombinedProfileEvent,\n event: Event,\n): AndroidProfileEvent | null {\n return {\n ...profile,\n debug_meta: {\n images: getDebugMetadata(),\n },\n build_id: profile.build_id || '',\n\n device_cpu_frequencies: [],\n device_is_emulator: event.contexts?.device?.simulator || false,\n device_locale: (event.contexts?.device && (event.contexts.device.locale as string)) || '',\n device_manufacturer: event.contexts?.device?.manufacturer || '',\n device_model: event.contexts?.device?.model || '',\n device_os_name: event.contexts?.os?.name || '',\n device_os_version: event.contexts?.os?.version || '',\n\n device_physical_memory_bytes:\n (event.contexts?.device?.memory_size && Number(event.contexts.device.memory_size).toString(10)) || '',\n\n environment: event.environment || getDefaultEnvironment(),\n\n profile_id,\n\n timestamp: event.start_timestamp ? new Date(event.start_timestamp * 1000).toISOString() : new Date().toISOString(),\n\n release: event.release || '',\n dist: event.dist || '',\n\n transaction_id: event.event_id || '',\n transaction_name: event.transaction || '',\n trace_id: event.contexts?.trace?.trace_id || '',\n\n version_name: event.release || '',\n version_code: event.dist || '',\n };\n}\n\n/**\n * Creates profiling event compatible carrier Object from raw Hermes profile.\n */\nexport function createHermesProfilingEvent(profile: RawThreadCpuProfile): HermesProfileEvent {\n return {\n platform: 'javascript',\n version: '1',\n profile,\n transaction: {\n active_thread_id: profile.active_thread_id,\n },\n };\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nexport function addProfilesToEnvelope(envelope: Envelope, profiles: ProfileEvent[]): Envelope {\n if (!profiles.length) {\n return envelope;\n }\n\n for (const profile of profiles) {\n // @ts-expect-error untyped envelope\n envelope[1].push([{ type: 'profile' }, profile]);\n }\n return envelope;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/profiling/utils.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport type { Envelope, Event, ThreadCpuProfile } from '@sentry/core';\nimport { debug, forEachEnvelopeItem } from '@sentry/core';\nimport { getDefaultEnvironment } from '../utils/environment';\nimport { getDebugMetadata } from './debugid';\nimport type {\n AndroidCombinedProfileEvent,\n AndroidProfileEvent,\n CombinedProfileEvent,\n HermesProfileEvent,\n ProfileEvent,\n RawThreadCpuProfile,\n} from './types';\n\n/**\n *\n */\nexport function isValidProfile(profile: ThreadCpuProfile): profile is RawThreadCpuProfile & { profile_id: string } {\n if (profile.samples.length <= 1) {\n if (__DEV__) {\n // Log a warning if the profile has less than 2 samples so users can know why\n // they are not seeing any profiling data and we cant avoid the back and forth\n // of asking them to provide us with a dump of the profile data.\n debug.log('[Profiling] Discarding profile because it contains less than 2 samples');\n }\n return false;\n }\n return true;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nexport function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[] {\n const events: Event[] = [];\n\n forEachEnvelopeItem(envelope, (item, type) => {\n if (type !== 'transaction') {\n return;\n }\n\n // First item is the type\n for (let j = 1; j < item.length; j++) {\n const event = item[j];\n\n // @ts-expect-error accessing private property\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.contexts?.trace?.data?.profile_id) {\n events.push(item[j] as Event);\n }\n }\n });\n\n return events;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {ProfileEvent | null}\n */\nexport function enrichCombinedProfileWithEventContext(\n profile_id: string,\n profile: CombinedProfileEvent | AndroidCombinedProfileEvent,\n event: Event,\n): ProfileEvent | null {\n if ('js_profile' in profile) {\n return enrichAndroidProfileWithEventContext(profile_id, profile, event);\n }\n\n if (!profile.profile || !isValidProfile(profile.profile)) {\n return null;\n }\n\n const trace_id = event.contexts?.trace?.trace_id || '';\n\n // Log a warning if the profile has an invalid traceId (should be uuidv4).\n // All profiles and transactions are rejected if this is the case and we want to\n // warn users that this is happening if they enable debug flag\n if (trace_id?.length !== 32) {\n if (__DEV__) {\n debug.log(`[Profiling] Invalid traceId: ${trace_id} on profiled event`);\n }\n }\n\n return {\n ...profile,\n event_id: profile_id,\n runtime: {\n name: 'hermes',\n version: '', // TODO: get hermes version\n },\n timestamp: event.start_timestamp ? new Date(event.start_timestamp * 1000).toISOString() : new Date().toISOString(),\n release: event.release || '',\n environment: event.environment || getDefaultEnvironment(),\n os: {\n name: event.contexts?.os?.name || '',\n version: event.contexts?.os?.version || '',\n build_number: event.contexts?.os?.build || '',\n },\n device: {\n locale: (event.contexts?.device && (event.contexts.device.locale as string)) || '',\n model: event.contexts?.device?.model || '',\n manufacturer: event.contexts?.device?.manufacturer || '',\n architecture: event.contexts?.device?.arch || '',\n is_emulator: event.contexts?.device?.simulator || false,\n },\n transaction: {\n name: event.transaction || '',\n id: event.event_id || '',\n trace_id,\n active_thread_id: profile.transaction?.active_thread_id || '',\n },\n debug_meta: {\n images: [...getDebugMetadata(), ...(profile.debug_meta?.images || [])],\n },\n };\n}\n\n/**\n * Creates Android profiling envelope item.\n */\nexport function enrichAndroidProfileWithEventContext(\n profile_id: string,\n profile: AndroidCombinedProfileEvent,\n event: Event,\n): AndroidProfileEvent | null {\n return {\n ...profile,\n debug_meta: {\n images: getDebugMetadata(),\n },\n build_id: profile.build_id || '',\n\n device_cpu_frequencies: [],\n device_is_emulator: event.contexts?.device?.simulator || false,\n device_locale: (event.contexts?.device && (event.contexts.device.locale as string)) || '',\n device_manufacturer: event.contexts?.device?.manufacturer || '',\n device_model: event.contexts?.device?.model || '',\n device_os_name: event.contexts?.os?.name || '',\n device_os_version: event.contexts?.os?.version || '',\n\n device_physical_memory_bytes:\n (event.contexts?.device?.memory_size && Number(event.contexts.device.memory_size).toString(10)) || '',\n\n environment: event.environment || getDefaultEnvironment(),\n\n profile_id,\n\n timestamp: event.start_timestamp ? new Date(event.start_timestamp * 1000).toISOString() : new Date().toISOString(),\n\n release: event.release || '',\n dist: event.dist || '',\n\n transaction_id: event.event_id || '',\n transaction_name: event.transaction || '',\n trace_id: event.contexts?.trace?.trace_id || '',\n\n version_name: event.release || '',\n version_code: event.dist || '',\n };\n}\n\n/**\n * Creates profiling event compatible carrier Object from raw Hermes profile.\n */\nexport function createHermesProfilingEvent(profile: RawThreadCpuProfile): HermesProfileEvent {\n return {\n platform: 'javascript',\n version: '1',\n profile,\n transaction: {\n active_thread_id: profile.active_thread_id,\n },\n };\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nexport function addProfilesToEnvelope(envelope: Envelope, profiles: ProfileEvent[]): Envelope {\n if (!profiles.length) {\n return envelope;\n }\n\n for (const profile of profiles) {\n // @ts-expect-error untyped envelope\n envelope[1].push([{ type: 'profile' }, profile]);\n }\n return envelope;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { debug } from '@sentry/core';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { UIManager, View } from 'react-native';
|
|
4
4
|
import { isExpoGo } from '../utils/environment';
|
|
@@ -25,7 +25,7 @@ const UnmaskFallback = (viewProps) => {
|
|
|
25
25
|
const hasViewManagerConfig = (nativeComponentName) => { var _a; return (_a = UIManager.hasViewManagerConfig) === null || _a === void 0 ? void 0 : _a.call(UIManager, nativeComponentName); };
|
|
26
26
|
const Mask = (() => {
|
|
27
27
|
if (isExpoGo() || !hasViewManagerConfig(MaskNativeComponentName)) {
|
|
28
|
-
|
|
28
|
+
debug.warn(`[SentrySessionReplay] Can't load ${MaskNativeComponentName}.`);
|
|
29
29
|
return MaskFallback;
|
|
30
30
|
}
|
|
31
31
|
// Based on @react-native/babel-plugin-codegen output
|
|
@@ -36,7 +36,7 @@ const Mask = (() => {
|
|
|
36
36
|
})();
|
|
37
37
|
const Unmask = (() => {
|
|
38
38
|
if (isExpoGo() || !hasViewManagerConfig(UnmaskNativeComponentName)) {
|
|
39
|
-
|
|
39
|
+
debug.warn(`[SentrySessionReplay] Can't load ${UnmaskNativeComponentName}.`);
|
|
40
40
|
return UnmaskFallback;
|
|
41
41
|
}
|
|
42
42
|
// Based on @react-native/babel-plugin-codegen output
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomMask.js","sourceRoot":"","sources":["../../../src/js/replay/CustomMask.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"CustomMask.js","sourceRoot":"","sources":["../../../src/js/replay/CustomMask.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,uBAAuB,GAGzB,OAAO,CAAC,gEAAgE,CAAC,CAAC;AAE9E,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AACrD,MAAM,yBAAyB,GAAG,sBAAsB,CAAC;AAEzD,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAU,EAAE,CAAC,yBAAyB,SAAS,2DAA2D,SAAS,+EAA+E,CAAC;AAEzO,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAQ,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE;QACd,gGAAgG;QAChG,4CAA4C;QAC5C,sCAAsC;QACtC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,SAAoB,EAAsB,EAAE;IAChE,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,oBAAC,IAAI,oBAAK,SAAS,EAAI,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,SAAoB,EAAsB,EAAE;IAClE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,OAAO,oBAAC,IAAI,oBAAK,SAAS,EAAI,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,mBAA2B,EAAW,EAAE,WAAC,OAAA,MAAA,SAAS,CAAC,oBAAoB,0DAAG,mBAAmB,CAAC,CAAA,EAAA,CAAC;AAE7H,MAAM,IAAI,GAAG,CAAC,GAA8D,EAAE;IAC5E,IAAI,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,EAAE;QAChE,KAAK,CAAC,IAAI,CAAC,oCAAoC,uBAAuB,GAAG,CAAC,CAAC;QAC3E,OAAO,YAAY,CAAC;KACrB;IAED,qDAAqD;IACrD,8KAA8K;IAC9K,OAAO,uBAAuB,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;QACjE,eAAe,EAAE,uBAAuB;KACzC,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,EAAE,CAAA;AAEJ,MAAM,MAAM,GAAG,CAAC,GAA8D,EAAE;IAC9E,IAAI,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,EAAE;QAClE,KAAK,CAAC,IAAI,CAAC,oCAAoC,yBAAyB,GAAG,CAAC,CAAC;QAC7E,OAAO,cAAc,CAAC;KACvB;IAED,qDAAqD;IACrD,8KAA8K;IAC9K,OAAO,uBAAuB,CAAC,GAAG,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,eAAe,EAAE,yBAAyB;KAC3C,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,EAAE,CAAC;AAEL,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import { debug } from '@sentry/core';\nimport * as React from 'react';\nimport type { HostComponent, ViewProps } from 'react-native';\nimport { UIManager, View } from 'react-native';\nimport { isExpoGo } from '../utils/environment';\n\nconst NativeComponentRegistry: {\n get<T, C extends Record<string, unknown>>(componentName: string, createViewConfig: () => C): HostComponent<T>;\n// eslint-disable-next-line @typescript-eslint/no-var-requires\n} = require('react-native/Libraries/NativeComponent/NativeComponentRegistry');\n\nconst MaskNativeComponentName = 'RNSentryReplayMask';\nconst UnmaskNativeComponentName = 'RNSentryReplayUnmask';\n\nconst warnMessage = (component: string): string => `[SentrySessionReplay] ${component} component is not supported on the current platform. If ${component} should be supported, please ensure that the application build is up to date.`;\n\nconst warn = (component: string): void => {\n setTimeout(() => {\n // Missing mask component could cause leaking PII, we have to ensure that the warning is visible\n // even if the app is running without debug.\n // eslint-disable-next-line no-console\n console.warn(warnMessage(component));\n }, 0);\n};\n\nconst MaskFallback = (viewProps: ViewProps): React.ReactElement => {\n warn('Mask');\n return <View {...viewProps} />;\n};\n\nconst UnmaskFallback = (viewProps: ViewProps): React.ReactElement => {\n warn('Unmask');\n return <View {...viewProps} />;\n};\n\nconst hasViewManagerConfig = (nativeComponentName: string): boolean => UIManager.hasViewManagerConfig?.(nativeComponentName);\n\nconst Mask = ((): HostComponent<ViewProps> | React.ComponentType<ViewProps> => {\n if (isExpoGo() || !hasViewManagerConfig(MaskNativeComponentName)) {\n debug.warn(`[SentrySessionReplay] Can't load ${MaskNativeComponentName}.`);\n return MaskFallback;\n }\n\n // Based on @react-native/babel-plugin-codegen output\n // https://github.com/facebook/react-native/blob/b32c6c2cc1bc566a85a883901dbf5e23b5a75b61/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js#L139\n return NativeComponentRegistry.get(MaskNativeComponentName, () => ({\n uiViewClassName: MaskNativeComponentName,\n }));\n})()\n\nconst Unmask = ((): HostComponent<ViewProps> | React.ComponentType<ViewProps> => {\n if (isExpoGo() || !hasViewManagerConfig(UnmaskNativeComponentName)) {\n debug.warn(`[SentrySessionReplay] Can't load ${UnmaskNativeComponentName}.`);\n return UnmaskFallback;\n }\n\n // Based on @react-native/babel-plugin-codegen output\n // https://github.com/facebook/react-native/blob/b32c6c2cc1bc566a85a883901dbf5e23b5a75b61/packages/react-native-codegen/src/generators/components/GenerateViewConfigJs.js#L139\n return NativeComponentRegistry.get(UnmaskNativeComponentName, () => ({\n uiViewClassName: UnmaskNativeComponentName,\n }));\n})();\n\nexport { Mask, Unmask, MaskFallback, UnmaskFallback };\n"]}
|
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
10
|
+
import { debug } from '@sentry/core';
|
|
11
11
|
import { isHardCrash } from '../misc';
|
|
12
12
|
import { hasHooks } from '../utils/clientutils';
|
|
13
13
|
import { isExpoGo, notMobileOs } from '../utils/environment';
|
|
@@ -47,10 +47,10 @@ function mergeOptions(initOptions) {
|
|
|
47
47
|
*/
|
|
48
48
|
export const mobileReplayIntegration = (initOptions = defaultOptions) => {
|
|
49
49
|
if (isExpoGo()) {
|
|
50
|
-
|
|
50
|
+
debug.warn(`[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} is not supported in Expo Go. Use EAS Build or \`expo prebuild\` to enable it.`);
|
|
51
51
|
}
|
|
52
52
|
if (notMobileOs()) {
|
|
53
|
-
|
|
53
|
+
debug.warn(`[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} is not supported on this platform.`);
|
|
54
54
|
}
|
|
55
55
|
if (isExpoGo() || notMobileOs()) {
|
|
56
56
|
return mobileReplayIntegrationNoop();
|
|
@@ -66,12 +66,12 @@ export const mobileReplayIntegration = (initOptions = defaultOptions) => {
|
|
|
66
66
|
}
|
|
67
67
|
const recordingReplayId = NATIVE.getCurrentReplayId();
|
|
68
68
|
if (recordingReplayId) {
|
|
69
|
-
|
|
69
|
+
debug.log(`[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} assign already recording replay ${recordingReplayId} for event ${event.event_id}.`);
|
|
70
70
|
return event;
|
|
71
71
|
}
|
|
72
72
|
const replayId = yield NATIVE.captureReplay(isHardCrash(event));
|
|
73
73
|
if (!replayId) {
|
|
74
|
-
|
|
74
|
+
debug.log(`[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} not sampled for event ${event.event_id}.`);
|
|
75
75
|
return event;
|
|
76
76
|
}
|
|
77
77
|
return event;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobilereplay.js","sourceRoot":"","sources":["../../../src/js/replay/mobilereplay.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mobilereplay.js","sourceRoot":"","sources":["../../../src/js/replay/mobilereplay.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Client, DynamicSamplingContext, Event, Integration } from '@sentry/core';\nimport { debug } from '@sentry/core';\nimport { isHardCrash } from '../misc';\nimport { hasHooks } from '../utils/clientutils';\nimport { isExpoGo, notMobileOs } from '../utils/environment';\nimport { NATIVE } from '../wrapper';\nimport { enrichXhrBreadcrumbsForMobileReplay } from './xhrUtils';\n\nexport const MOBILE_REPLAY_INTEGRATION_NAME = 'MobileReplay';\n\nexport interface MobileReplayOptions {\n /**\n * Mask all text in recordings\n *\n * @default true\n */\n maskAllText?: boolean;\n\n /**\n * Mask all images in recordings\n *\n * @default true\n */\n maskAllImages?: boolean;\n\n /**\n * Mask all vector graphics in recordings\n * Supports `react-native-svg`\n *\n * @default true\n */\n maskAllVectors?: boolean;\n\n /**\n * Enables the up to 5x faster experimental view renderer used by the Session Replay integration on iOS.\n *\n * Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing\n * interruptions and visual lag.\n *\n * - Experiment: This is an experimental feature and is therefore disabled by default.\n *\n * @deprecated Use `enableViewRendererV2` instead.\n */\n enableExperimentalViewRenderer?: boolean;\n\n /**\n * Enables up to 5x faster new view renderer used by the Session Replay integration on iOS.\n *\n * Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing\n * interruptions and visual lag. [Our benchmarks](https://github.com/getsentry/sentry-cocoa/pull/4940) have shown a significant improvement of\n * **up to 4-5x faster rendering** (reducing `~160ms` to `~36ms` per frame) on older devices.\n *\n * - Experiment: In case you are noticing issues with the new view renderer, please report the issue on [GitHub](https://github.com/getsentry/sentry-cocoa).\n * Eventually, we will remove this feature flag and use the new view renderer by default.\n *\n * @default true\n */\n enableViewRendererV2?: boolean;\n\n /**\n * Enables up to 5x faster but incomplete view rendering used by the Session Replay integration on iOS.\n *\n * Enabling this flag will reduce the amount of time it takes to render each frame of the session replay on the main thread, therefore reducing\n * interruptions and visual lag.\n *\n * - Note: This flag can only be used together with `enableExperimentalViewRenderer` with up to 20% faster render times.\n * - Experiment: This is an experimental feature and is therefore disabled by default.\n *\n * @default false\n */\n enableFastViewRendering?: boolean;\n}\n\nconst defaultOptions: Required<MobileReplayOptions> = {\n maskAllText: true,\n maskAllImages: true,\n maskAllVectors: true,\n enableExperimentalViewRenderer: false,\n enableViewRendererV2: true,\n enableFastViewRendering: false,\n};\n\nfunction mergeOptions(initOptions: Partial<MobileReplayOptions>): Required<MobileReplayOptions> {\n const merged = {\n ...defaultOptions,\n ...initOptions,\n };\n\n if (initOptions.enableViewRendererV2 === undefined && initOptions.enableExperimentalViewRenderer !== undefined) {\n merged.enableViewRendererV2 = initOptions.enableExperimentalViewRenderer;\n }\n\n return merged;\n}\n\ntype MobileReplayIntegration = Integration & {\n options: Required<MobileReplayOptions>;\n};\n\n/**\n * The Mobile Replay Integration, let's you adjust the default mobile replay options.\n * To be passed to `Sentry.init` with `replaysOnErrorSampleRate` or `replaysSessionSampleRate`.\n *\n * ```javascript\n * Sentry.init({\n * replaysOnErrorSampleRate: 1.0,\n * replaysSessionSampleRate: 1.0,\n * integrations: [mobileReplayIntegration({\n * // Adjust the default options\n * })],\n * });\n * ```\n *\n * @experimental\n */\nexport const mobileReplayIntegration = (initOptions: MobileReplayOptions = defaultOptions): MobileReplayIntegration => {\n if (isExpoGo()) {\n debug.warn(\n `[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} is not supported in Expo Go. Use EAS Build or \\`expo prebuild\\` to enable it.`,\n );\n }\n if (notMobileOs()) {\n debug.warn(`[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} is not supported on this platform.`);\n }\n\n if (isExpoGo() || notMobileOs()) {\n return mobileReplayIntegrationNoop();\n }\n\n const options = mergeOptions(initOptions);\n\n async function processEvent(event: Event): Promise<Event> {\n const hasException = event.exception?.values && event.exception.values.length > 0;\n if (!hasException) {\n // Event is not an error, will not capture replay\n return event;\n }\n\n const recordingReplayId = NATIVE.getCurrentReplayId();\n if (recordingReplayId) {\n debug.log(\n `[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} assign already recording replay ${recordingReplayId} for event ${event.event_id}.`,\n );\n return event;\n }\n\n const replayId = await NATIVE.captureReplay(isHardCrash(event));\n if (!replayId) {\n debug.log(`[Sentry] ${MOBILE_REPLAY_INTEGRATION_NAME} not sampled for event ${event.event_id}.`);\n return event;\n }\n\n return event;\n }\n\n function setup(client: Client): void {\n if (!hasHooks(client)) {\n return;\n }\n\n client.on('createDsc', (dsc: DynamicSamplingContext) => {\n if (dsc.replay_id) {\n return;\n }\n\n // TODO: For better performance, we should emit replayId changes on native, and hold the replayId value in JS\n const currentReplayId = NATIVE.getCurrentReplayId();\n if (currentReplayId) {\n dsc.replay_id = currentReplayId;\n }\n });\n\n client.on('beforeAddBreadcrumb', enrichXhrBreadcrumbsForMobileReplay);\n }\n\n // TODO: When adding manual API, ensure overlap with the web replay so users can use the same API interchangeably\n // https://github.com/getsentry/sentry-javascript/blob/develop/packages/replay-internal/src/integration.ts#L45\n return {\n name: MOBILE_REPLAY_INTEGRATION_NAME,\n setup,\n processEvent,\n options: options,\n };\n};\n\nconst mobileReplayIntegrationNoop = (): MobileReplayIntegration => {\n return {\n name: MOBILE_REPLAY_INTEGRATION_NAME,\n options: defaultOptions,\n };\n};\n"]}
|
package/dist/js/sdk.js
CHANGED
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { getClient, getGlobalScope, getIntegrationsToSetup, getIsolationScope, initAndBind,
|
|
10
|
+
import { debug, getClient, getGlobalScope, getIntegrationsToSetup, getIsolationScope, initAndBind, makeDsn, stackParserFromStackParserOptions, withScope as coreWithScope, } from '@sentry/core';
|
|
11
11
|
import { defaultStackParser, makeFetchTransport, Profiler } from '@sentry/react';
|
|
12
12
|
import * as React from 'react';
|
|
13
13
|
import { ReactNativeClient } from './client';
|
|
@@ -64,7 +64,7 @@ export function init(passedOptions) {
|
|
|
64
64
|
}
|
|
65
65
|
const dsnComponents = makeDsn(dsn);
|
|
66
66
|
if (!dsnComponents) {
|
|
67
|
-
|
|
67
|
+
debug.error('Failed to extract url from DSN: ', dsn);
|
|
68
68
|
return undefined;
|
|
69
69
|
}
|
|
70
70
|
const port = dsnComponents.port ? `:${dsnComponents.port}` : '';
|
|
@@ -116,8 +116,8 @@ export function init(passedOptions) {
|
|
|
116
116
|
});
|
|
117
117
|
initAndBind(ReactNativeClient, options);
|
|
118
118
|
if (isExpoGo()) {
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
debug.log('Offline caching, native errors features are not available in Expo Go.');
|
|
120
|
+
debug.log('Use EAS Build / Native Release Build to test these features.');
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
/**
|
|
@@ -158,7 +158,7 @@ export function flush() {
|
|
|
158
158
|
// eslint-disable-next-line no-empty
|
|
159
159
|
}
|
|
160
160
|
catch (_) { }
|
|
161
|
-
|
|
161
|
+
debug.error('Failed to flush the event queue.');
|
|
162
162
|
return false;
|
|
163
163
|
});
|
|
164
164
|
}
|
|
@@ -174,7 +174,7 @@ export function close() {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
catch (e) {
|
|
177
|
-
|
|
177
|
+
debug.error('Failed to close the SDK');
|
|
178
178
|
}
|
|
179
179
|
});
|
|
180
180
|
}
|
|
@@ -197,7 +197,7 @@ export function withScope(callback) {
|
|
|
197
197
|
return callback(scope);
|
|
198
198
|
}
|
|
199
199
|
catch (e) {
|
|
200
|
-
|
|
200
|
+
debug.error('Error while running withScope callback', e);
|
|
201
201
|
return undefined;
|
|
202
202
|
}
|
|
203
203
|
};
|
package/dist/js/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport type { Breadcrumb, BreadcrumbHint, Integration, Scope } from '@sentry/core';\nimport {\n getClient,\n getGlobalScope,\n getIntegrationsToSetup,\n getIsolationScope,\n initAndBind,\n logger,\n makeDsn,\n stackParserFromStackParserOptions,\n withScope as coreWithScope,\n} from '@sentry/core';\nimport { defaultStackParser, makeFetchTransport, Profiler } from '@sentry/react';\nimport * as React from 'react';\nimport { ReactNativeClient } from './client';\nimport { FeedbackWidgetProvider } from './feedback/FeedbackWidgetProvider';\nimport { getDevServer } from './integrations/debugsymbolicatorutils';\nimport { getDefaultIntegrations } from './integrations/default';\nimport type { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { shouldEnableNativeNagger } from './options';\nimport { enableSyncToNative } from './scopeSync';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler } from './tracing';\nimport { useEncodePolyfill } from './transports/encodePolyfill';\nimport { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';\nimport { getDefaultEnvironment, isExpoGo, isRunningInMetroDevServer, isWeb } from './utils/environment';\nimport { getDefaultRelease } from './utils/release';\nimport { safeFactory, safeTracesSampler } from './utils/safe';\nimport { NATIVE } from './wrapper';\n\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracing: true,\n enableWatchdogTerminationTracking: true,\n patchGlobalPromise: true,\n sendClientReports: true,\n maxQueueSize: DEFAULT_BUFFER_SIZE,\n attachStacktrace: true,\n enableCaptureFailedRequests: false,\n enableNdk: true,\n enableAppStartTracking: true,\n enableNativeFramesTracking: true,\n enableStallTracking: true,\n enableUserInteractionTracing: false,\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n if (isRunningInMetroDevServer()) {\n return;\n }\n\n const maxQueueSize = passedOptions.maxQueueSize\n // eslint-disable-next-line deprecation/deprecation\n ?? passedOptions.transportOptions?.bufferSize\n ?? DEFAULT_OPTIONS.maxQueueSize;\n\n const enableNative = passedOptions.enableNative === undefined || passedOptions.enableNative\n ? NATIVE.isNativeAvailable()\n : false;\n\n useEncodePolyfill();\n if (enableNative) {\n enableSyncToNative(getGlobalScope());\n enableSyncToNative(getIsolationScope());\n }\n\n const getURLFromDSN = (dsn: string | undefined): string | undefined => {\n if (!dsn) {\n return undefined;\n }\n const dsnComponents = makeDsn(dsn);\n if (!dsnComponents) {\n logger.error('Failed to extract url from DSN: ', dsn);\n return undefined;\n }\n const port = dsnComponents.port ? `:${dsnComponents.port}` : '';\n return `${dsnComponents.protocol}://${dsnComponents.host}${port}`;\n };\n\n const userBeforeBreadcrumb = safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' });\n\n // Exclude Dev Server and Sentry Dsn request from Breadcrumbs\n const devServerUrl = getDevServer()?.url;\n const dsn = getURLFromDSN(passedOptions.dsn);\n const defaultBeforeBreadcrumb = (breadcrumb: Breadcrumb, _hint?: BreadcrumbHint): Breadcrumb | null => {\n const type = breadcrumb.type || '';\n const url = typeof breadcrumb.data?.url === 'string' ? breadcrumb.data.url : '';\n if (type === 'http' && ((devServerUrl && url.startsWith(devServerUrl)) || (dsn && url.startsWith(dsn)))) {\n return null;\n }\n return breadcrumb;\n };\n\n const chainedBeforeBreadcrumb = (breadcrumb: Breadcrumb, hint?: BreadcrumbHint): Breadcrumb | null => {\n let modifiedBreadcrumb = breadcrumb;\n if (userBeforeBreadcrumb) {\n const result = userBeforeBreadcrumb(breadcrumb, hint);\n if (result === null) {\n return null;\n }\n modifiedBreadcrumb = result;\n }\n return defaultBeforeBreadcrumb(modifiedBreadcrumb, hint);\n };\n\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n release: passedOptions.release ?? getDefaultRelease(),\n enableNative,\n enableNativeNagger: shouldEnableNativeNagger(passedOptions.enableNativeNagger),\n // If custom transport factory fails the SDK won't initialize\n transport: passedOptions.transport\n || makeNativeTransportFactory({\n enableNative,\n })\n || makeFetchTransport,\n transportOptions: {\n ...DEFAULT_OPTIONS.transportOptions,\n ...(passedOptions.transportOptions ?? {}),\n bufferSize: maxQueueSize,\n },\n maxQueueSize,\n integrations: [],\n stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser),\n beforeBreadcrumb: chainedBeforeBreadcrumb,\n initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }),\n };\n if ('tracesSampler' in options) {\n options.tracesSampler = safeTracesSampler(options.tracesSampler);\n }\n\n if (!('environment' in options)) {\n options.environment = getDefaultEnvironment();\n }\n\n const defaultIntegrations: false | Integration[] = passedOptions.defaultIntegrations === undefined\n ? getDefaultIntegrations(options)\n : passedOptions.defaultIntegrations;\n\n options.integrations = getIntegrationsToSetup({\n integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),\n defaultIntegrations,\n });\n initAndBind(ReactNativeClient, options);\n\n if (isExpoGo()) {\n logger.info('Offline caching, native errors features are not available in Expo Go.');\n logger.info('Use EAS Build / Native Release Build to test these features.');\n }\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\nexport function wrap<P extends Record<string, unknown>>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const profilerProps = {\n ...(options?.profilerProps),\n name: RootComponent.displayName ?? 'Root',\n updateProps: {}\n };\n\n const ProfilerComponent = isWeb() ? Profiler : ReactNativeProfiler;\n\n const RootApp: React.FC<P> = appProps => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ProfilerComponent {...profilerProps}>\n <FeedbackWidgetProvider>\n <RootComponent {...appProps} />\n </FeedbackWidgetProvider>\n </ProfilerComponent>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n NATIVE.nativeCrash();\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getClient();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n logger.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getClient();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n logger.error('Failed to close the SDK');\n }\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T | undefined {\n const safeCallback = (scope: Scope): T | undefined => {\n try {\n return callback(scope);\n } catch (e) {\n logger.error('Error while running withScope callback', e);\n return undefined;\n }\n };\n return coreWithScope(safeCallback);\n}\n\n/**\n * Returns if the app crashed in the last run.\n */\nexport async function crashedLastRun(): Promise<boolean | null> {\n return NATIVE.crashedLastRun();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport type { Breadcrumb, BreadcrumbHint, Integration, Scope } from '@sentry/core';\nimport {\n debug,\n getClient,\n getGlobalScope,\n getIntegrationsToSetup,\n getIsolationScope,\n initAndBind,\n makeDsn,\n stackParserFromStackParserOptions,\n withScope as coreWithScope,\n} from '@sentry/core';\nimport { defaultStackParser, makeFetchTransport, Profiler } from '@sentry/react';\nimport * as React from 'react';\nimport { ReactNativeClient } from './client';\nimport { FeedbackWidgetProvider } from './feedback/FeedbackWidgetProvider';\nimport { getDevServer } from './integrations/debugsymbolicatorutils';\nimport { getDefaultIntegrations } from './integrations/default';\nimport type { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { shouldEnableNativeNagger } from './options';\nimport { enableSyncToNative } from './scopeSync';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler } from './tracing';\nimport { useEncodePolyfill } from './transports/encodePolyfill';\nimport { DEFAULT_BUFFER_SIZE, makeNativeTransportFactory } from './transports/native';\nimport { getDefaultEnvironment, isExpoGo, isRunningInMetroDevServer, isWeb } from './utils/environment';\nimport { getDefaultRelease } from './utils/release';\nimport { safeFactory, safeTracesSampler } from './utils/safe';\nimport { NATIVE } from './wrapper';\n\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracing: true,\n enableWatchdogTerminationTracking: true,\n patchGlobalPromise: true,\n sendClientReports: true,\n maxQueueSize: DEFAULT_BUFFER_SIZE,\n attachStacktrace: true,\n enableCaptureFailedRequests: false,\n enableNdk: true,\n enableAppStartTracking: true,\n enableNativeFramesTracking: true,\n enableStallTracking: true,\n enableUserInteractionTracing: false,\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n if (isRunningInMetroDevServer()) {\n return;\n }\n\n const maxQueueSize = passedOptions.maxQueueSize\n // eslint-disable-next-line deprecation/deprecation\n ?? passedOptions.transportOptions?.bufferSize\n ?? DEFAULT_OPTIONS.maxQueueSize;\n\n const enableNative = passedOptions.enableNative === undefined || passedOptions.enableNative\n ? NATIVE.isNativeAvailable()\n : false;\n\n useEncodePolyfill();\n if (enableNative) {\n enableSyncToNative(getGlobalScope());\n enableSyncToNative(getIsolationScope());\n }\n\n const getURLFromDSN = (dsn: string | undefined): string | undefined => {\n if (!dsn) {\n return undefined;\n }\n const dsnComponents = makeDsn(dsn);\n if (!dsnComponents) {\n debug.error('Failed to extract url from DSN: ', dsn);\n return undefined;\n }\n const port = dsnComponents.port ? `:${dsnComponents.port}` : '';\n return `${dsnComponents.protocol}://${dsnComponents.host}${port}`;\n };\n\n const userBeforeBreadcrumb = safeFactory(passedOptions.beforeBreadcrumb, { loggerMessage: 'The beforeBreadcrumb threw an error' });\n\n // Exclude Dev Server and Sentry Dsn request from Breadcrumbs\n const devServerUrl = getDevServer()?.url;\n const dsn = getURLFromDSN(passedOptions.dsn);\n const defaultBeforeBreadcrumb = (breadcrumb: Breadcrumb, _hint?: BreadcrumbHint): Breadcrumb | null => {\n const type = breadcrumb.type || '';\n const url = typeof breadcrumb.data?.url === 'string' ? breadcrumb.data.url : '';\n if (type === 'http' && ((devServerUrl && url.startsWith(devServerUrl)) || (dsn && url.startsWith(dsn)))) {\n return null;\n }\n return breadcrumb;\n };\n\n const chainedBeforeBreadcrumb = (breadcrumb: Breadcrumb, hint?: BreadcrumbHint): Breadcrumb | null => {\n let modifiedBreadcrumb = breadcrumb;\n if (userBeforeBreadcrumb) {\n const result = userBeforeBreadcrumb(breadcrumb, hint);\n if (result === null) {\n return null;\n }\n modifiedBreadcrumb = result;\n }\n return defaultBeforeBreadcrumb(modifiedBreadcrumb, hint);\n };\n\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n release: passedOptions.release ?? getDefaultRelease(),\n enableNative,\n enableNativeNagger: shouldEnableNativeNagger(passedOptions.enableNativeNagger),\n // If custom transport factory fails the SDK won't initialize\n transport: passedOptions.transport\n || makeNativeTransportFactory({\n enableNative,\n })\n || makeFetchTransport,\n transportOptions: {\n ...DEFAULT_OPTIONS.transportOptions,\n ...(passedOptions.transportOptions ?? {}),\n bufferSize: maxQueueSize,\n },\n maxQueueSize,\n integrations: [],\n stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser),\n beforeBreadcrumb: chainedBeforeBreadcrumb,\n initialScope: safeFactory(passedOptions.initialScope, { loggerMessage: 'The initialScope threw an error' }),\n };\n if ('tracesSampler' in options) {\n options.tracesSampler = safeTracesSampler(options.tracesSampler);\n }\n\n if (!('environment' in options)) {\n options.environment = getDefaultEnvironment();\n }\n\n const defaultIntegrations: false | Integration[] = passedOptions.defaultIntegrations === undefined\n ? getDefaultIntegrations(options)\n : passedOptions.defaultIntegrations;\n\n options.integrations = getIntegrationsToSetup({\n integrations: safeFactory(passedOptions.integrations, { loggerMessage: 'The integrations threw an error' }),\n defaultIntegrations,\n });\n initAndBind(ReactNativeClient, options);\n\n if (isExpoGo()) {\n debug.log('Offline caching, native errors features are not available in Expo Go.');\n debug.log('Use EAS Build / Native Release Build to test these features.');\n }\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\nexport function wrap<P extends Record<string, unknown>>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const profilerProps = {\n ...(options?.profilerProps),\n name: RootComponent.displayName ?? 'Root',\n updateProps: {}\n };\n\n const ProfilerComponent = isWeb() ? Profiler : ReactNativeProfiler;\n\n const RootApp: React.FC<P> = appProps => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ProfilerComponent {...profilerProps}>\n <FeedbackWidgetProvider>\n <RootComponent {...appProps} />\n </FeedbackWidgetProvider>\n </ProfilerComponent>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n NATIVE.nativeCrash();\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getClient();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n debug.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getClient();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n debug.error('Failed to close the SDK');\n }\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T | undefined {\n const safeCallback = (scope: Scope): T | undefined => {\n try {\n return callback(scope);\n } catch (e) {\n debug.error('Error while running withScope callback', e);\n return undefined;\n }\n };\n return coreWithScope(safeCallback);\n}\n\n/**\n * Returns if the app crashed in the last run.\n */\nexport async function crashedLastRun(): Promise<boolean | null> {\n return NATIVE.crashedLastRun();\n}\n"]}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const core_1 = require("@sentry/core");
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
|
-
core_1.
|
|
6
|
+
core_1.debug.enable();
|
|
7
7
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
8
8
|
const { dirname, join, resolve, sep: posixSep } = path_1.posix;
|
|
9
9
|
/**
|
|
@@ -51,7 +51,7 @@ class ModulesCollector {
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
catch (error) {
|
|
54
|
-
core_1.
|
|
54
|
+
core_1.debug.error(`Failed to read ${pkgPath}`);
|
|
55
55
|
}
|
|
56
56
|
return upDirSearch(); // processed package.json file, continue up search
|
|
57
57
|
};
|
|
@@ -64,33 +64,33 @@ class ModulesCollector {
|
|
|
64
64
|
*/
|
|
65
65
|
static run({ sourceMapPath, outputModulesPath, modulesPaths, collect, }) {
|
|
66
66
|
if (!sourceMapPath) {
|
|
67
|
-
core_1.
|
|
67
|
+
core_1.debug.error('First argument `source-map-path` is missing!');
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
70
|
if (!outputModulesPath) {
|
|
71
|
-
core_1.
|
|
71
|
+
core_1.debug.error('Second argument `modules-output-path` is missing!');
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
if (!modulesPaths || modulesPaths.length === 0) {
|
|
75
|
-
core_1.
|
|
75
|
+
core_1.debug.error('Third argument `modules-paths` is missing!');
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
|
-
core_1.
|
|
79
|
-
core_1.
|
|
80
|
-
core_1.
|
|
78
|
+
core_1.debug.log('Reading source map from', sourceMapPath);
|
|
79
|
+
core_1.debug.log('Saving modules to', outputModulesPath);
|
|
80
|
+
core_1.debug.log('Resolving modules from paths', modulesPaths.join(', '));
|
|
81
81
|
if (!(0, fs_1.existsSync)(sourceMapPath)) {
|
|
82
|
-
core_1.
|
|
82
|
+
core_1.debug.error(`Source map file does not exist at ${sourceMapPath}`);
|
|
83
83
|
return;
|
|
84
84
|
}
|
|
85
85
|
for (const modulesPath of modulesPaths) {
|
|
86
86
|
if (!(0, fs_1.existsSync)(modulesPath)) {
|
|
87
|
-
core_1.
|
|
87
|
+
core_1.debug.error(`Modules path does not exist at ${modulesPath}`);
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
const map = JSON.parse((0, fs_1.readFileSync)(sourceMapPath, 'utf8'));
|
|
92
92
|
if (!map.sources || !Array.isArray(map.sources)) {
|
|
93
|
-
core_1.
|
|
93
|
+
core_1.debug.error(`Modules not collected. No sources found in the source map (${sourceMapPath})!`);
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
const sources = map.sources;
|
|
@@ -100,7 +100,7 @@ class ModulesCollector {
|
|
|
100
100
|
(0, fs_1.mkdirSync)(outputModulesDirPath, { recursive: true });
|
|
101
101
|
}
|
|
102
102
|
(0, fs_1.writeFileSync)(outputModulesPath, JSON.stringify(modules, null, 2));
|
|
103
|
-
core_1.
|
|
103
|
+
core_1.debug.log(`Modules collected and saved to: ${outputModulesPath}`);
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
exports.default = ModulesCollector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModulesCollector.js","sourceRoot":"","sources":["../../../src/js/tools/ModulesCollector.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"ModulesCollector.js","sourceRoot":"","sources":["../../../src/js/tools/ModulesCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import { debug } from '@sentry/core';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { posix, sep } from 'path';\n\ndebug.enable();\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst { dirname, join, resolve, sep: posixSep } = posix;\n\ninterface Package {\n name?: string;\n version?: string;\n}\n\n/**\n * Collects JS modules from source paths.\n */\nexport default class ModulesCollector {\n /** Collect method */\n public static collect(sources: unknown[], modulesPaths: string[]): Record<string, string> {\n const normalizedModulesPaths = modulesPaths.map(modulesPath => resolve(modulesPath.split(sep).join(posixSep)));\n\n const infos: Record<string, string> = {};\n const seen: Record<string, true> = {};\n\n sources.forEach((path: unknown) => {\n if (typeof path !== 'string') {\n return;\n }\n\n let dir = path; // included source file path\n let candidate: Package | null = null;\n\n /** Traverse directories upward in the search of all package.json files */\n const upDirSearch = (): void => {\n const parentDir = dir;\n dir = dirname(parentDir);\n\n if (normalizedModulesPaths.includes(resolve(dir))) {\n if (candidate?.name && candidate?.version) {\n infos[candidate.name] = candidate.version;\n } else if (candidate?.name) {\n infos[candidate.name] = 'unknown';\n }\n return;\n }\n\n if (!dir || parentDir === dir || seen[dir]) {\n return;\n }\n seen[dir] = true;\n\n const pkgPath = join(dir, 'package.json');\n if (!existsSync(pkgPath)) {\n // fast-forward if the package.json doesn't exist\n return upDirSearch();\n }\n\n try {\n const info: Package = JSON.parse(readFileSync(pkgPath, 'utf8'));\n candidate = {\n name: info.name,\n version: info.version,\n };\n } catch (error) {\n debug.error(`Failed to read ${pkgPath}`);\n }\n\n return upDirSearch(); // processed package.json file, continue up search\n };\n\n upDirSearch();\n });\n\n return infos;\n }\n\n /**\n * Runs collection of modules.\n */\n public static run({\n sourceMapPath,\n outputModulesPath,\n modulesPaths,\n collect,\n }: Partial<{\n sourceMapPath: string;\n outputModulesPath: string;\n modulesPaths: string[];\n collect: (sources: unknown[], modulesPaths: string[]) => Record<string, string>;\n }>): void {\n if (!sourceMapPath) {\n debug.error('First argument `source-map-path` is missing!');\n return;\n }\n if (!outputModulesPath) {\n debug.error('Second argument `modules-output-path` is missing!');\n return;\n }\n if (!modulesPaths || modulesPaths.length === 0) {\n debug.error('Third argument `modules-paths` is missing!');\n return;\n }\n\n debug.log('Reading source map from', sourceMapPath);\n debug.log('Saving modules to', outputModulesPath);\n debug.log('Resolving modules from paths', modulesPaths.join(', '));\n\n if (!existsSync(sourceMapPath)) {\n debug.error(`Source map file does not exist at ${sourceMapPath}`);\n return;\n }\n for (const modulesPath of modulesPaths) {\n if (!existsSync(modulesPath)) {\n debug.error(`Modules path does not exist at ${modulesPath}`);\n return;\n }\n }\n\n const map: { sources?: unknown } = JSON.parse(readFileSync(sourceMapPath, 'utf8'));\n if (!map.sources || !Array.isArray(map.sources)) {\n debug.error(`Modules not collected. No sources found in the source map (${sourceMapPath})!`);\n return;\n }\n\n const sources: unknown[] = map.sources;\n const modules = collect ? collect(sources, modulesPaths) : ModulesCollector.collect(sources, modulesPaths);\n\n const outputModulesDirPath = dirname(outputModulesPath);\n if (!existsSync(outputModulesDirPath)) {\n mkdirSync(outputModulesDirPath, { recursive: true });\n }\n writeFileSync(outputModulesPath, JSON.stringify(modules, null, 2));\n debug.log(`Modules collected and saved to: ${outputModulesPath}`);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enableLogger.js","sourceRoot":"","sources":["../../../src/js/tools/enableLogger.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"enableLogger.js","sourceRoot":"","sources":["../../../src/js/tools/enableLogger.ts"],"names":[],"mappings":";;;AAAA,uCAAqC;AAErC;;GAEG;AACH,SAAgB,YAAY;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,OAAO,EAAE;QAC5C,YAAK,CAAC,MAAM,EAAE,CAAC;KAChB;AACH,CAAC;AAJD,oCAIC","sourcesContent":["import { debug } from '@sentry/core';\n\n/**\n * Enables debug logger when SENTRY_LOG_LEVEL=debug.\n */\nexport function enableLogger(): void {\n if (process.env.SENTRY_LOG_LEVEL === 'debug') {\n debug.enable();\n }\n}\n"]}
|
|
@@ -19,7 +19,7 @@ const readFileAsync = (0, util_1.promisify)(fs_1.readFile);
|
|
|
19
19
|
* adds source context to the in app frames.
|
|
20
20
|
*/
|
|
21
21
|
const stackFramesContextMiddleware = (request, response) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
-
core_1.
|
|
22
|
+
core_1.debug.log('[@sentry/react-native/metro] Received request for stack frames context.');
|
|
23
23
|
request.setEncoding('utf8');
|
|
24
24
|
const rawBody = yield getRawBody(request);
|
|
25
25
|
let body = {};
|
|
@@ -27,13 +27,13 @@ const stackFramesContextMiddleware = (request, response) => __awaiter(void 0, vo
|
|
|
27
27
|
body = JSON.parse(rawBody);
|
|
28
28
|
}
|
|
29
29
|
catch (e) {
|
|
30
|
-
core_1.
|
|
30
|
+
core_1.debug.log('[@sentry/react-native/metro] Could not parse request body.', e);
|
|
31
31
|
badRequest(response, 'Invalid request body. Expected a JSON object.');
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
const stack = body.stack;
|
|
35
35
|
if (!Array.isArray(stack)) {
|
|
36
|
-
core_1.
|
|
36
|
+
core_1.debug.log('[@sentry/react-native/metro] Invalid stack frames.', stack);
|
|
37
37
|
badRequest(response, 'Invalid stack frames. Expected an array.');
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
@@ -41,7 +41,7 @@ const stackFramesContextMiddleware = (request, response) => __awaiter(void 0, vo
|
|
|
41
41
|
response.setHeader('Content-Type', 'application/json');
|
|
42
42
|
response.statusCode = 200;
|
|
43
43
|
response.end(JSON.stringify({ stack: stackWithSourceContext }));
|
|
44
|
-
core_1.
|
|
44
|
+
core_1.debug.log('[@sentry/react-native/metro] Sent stack frames context.');
|
|
45
45
|
});
|
|
46
46
|
exports.stackFramesContextMiddleware = stackFramesContextMiddleware;
|
|
47
47
|
function addSourceContext(frame) {
|
|
@@ -51,7 +51,7 @@ function addSourceContext(frame) {
|
|
|
51
51
|
}
|
|
52
52
|
try {
|
|
53
53
|
if (typeof frame.filename !== 'string') {
|
|
54
|
-
core_1.
|
|
54
|
+
core_1.debug.warn('[@sentry/react-native/metro] Could not read source context for frame without filename.');
|
|
55
55
|
return frame;
|
|
56
56
|
}
|
|
57
57
|
const source = yield readFileAsync(frame.filename, { encoding: 'utf8' });
|
|
@@ -59,7 +59,7 @@ function addSourceContext(frame) {
|
|
|
59
59
|
(0, core_1.addContextToFrame)(lines, frame);
|
|
60
60
|
}
|
|
61
61
|
catch (error) {
|
|
62
|
-
core_1.
|
|
62
|
+
core_1.debug.warn('[@sentry/react-native/metro] Could not read source context for frame.', error);
|
|
63
63
|
}
|
|
64
64
|
return frame;
|
|
65
65
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metroMiddleware.js","sourceRoot":"","sources":["../../../src/js/tools/metroMiddleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"metroMiddleware.js","sourceRoot":"","sources":["../../../src/js/tools/metroMiddleware.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StackFrame } from '@sentry/core';\nimport { addContextToFrame, debug } from '@sentry/core';\nimport { readFile } from 'fs';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport type { InputConfigT, Middleware } from 'metro-config';\nimport { promisify } from 'util';\n\nconst readFileAsync = promisify(readFile);\n\n/**\n * Accepts Sentry formatted stack frames and\n * adds source context to the in app frames.\n */\nexport const stackFramesContextMiddleware: Middleware = async (\n request: IncomingMessage,\n response: ServerResponse,\n): Promise<void> => {\n debug.log('[@sentry/react-native/metro] Received request for stack frames context.');\n request.setEncoding('utf8');\n const rawBody = await getRawBody(request);\n\n let body: {\n stack?: Partial<StackFrame>[];\n } = {};\n try {\n body = JSON.parse(rawBody);\n } catch (e) {\n debug.log('[@sentry/react-native/metro] Could not parse request body.', e);\n badRequest(response, 'Invalid request body. Expected a JSON object.');\n return;\n }\n\n const stack = body.stack;\n if (!Array.isArray(stack)) {\n debug.log('[@sentry/react-native/metro] Invalid stack frames.', stack);\n badRequest(response, 'Invalid stack frames. Expected an array.');\n return;\n }\n\n const stackWithSourceContext = await Promise.all(stack.map(addSourceContext));\n response.setHeader('Content-Type', 'application/json');\n response.statusCode = 200;\n response.end(JSON.stringify({ stack: stackWithSourceContext }));\n debug.log('[@sentry/react-native/metro] Sent stack frames context.');\n};\n\nasync function addSourceContext(frame: StackFrame): Promise<StackFrame> {\n if (!frame.in_app) {\n return frame;\n }\n\n try {\n if (typeof frame.filename !== 'string') {\n debug.warn('[@sentry/react-native/metro] Could not read source context for frame without filename.');\n return frame;\n }\n\n const source = await readFileAsync(frame.filename, { encoding: 'utf8' });\n const lines = source.split('\\n');\n addContextToFrame(lines, frame);\n } catch (error) {\n debug.warn('[@sentry/react-native/metro] Could not read source context for frame.', error);\n }\n return frame;\n}\n\nfunction badRequest(response: ServerResponse, message: string): void {\n response.statusCode = 400;\n response.end(message);\n}\n\nfunction getRawBody(request: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n let data = '';\n request.on('data', chunk => {\n data += chunk;\n });\n request.on('end', () => {\n resolve(data);\n });\n request.on('error', reject);\n });\n}\n\nconst SENTRY_MIDDLEWARE_PATH = '/__sentry';\nconst SENTRY_CONTEXT_REQUEST_PATH = `${SENTRY_MIDDLEWARE_PATH}/context`;\n\n/**\n * Creates a middleware that adds source context to the Sentry formatted stack frames.\n */\nexport const createSentryMetroMiddleware = (middleware: Middleware): Middleware => {\n return (request: IncomingMessage, response: ServerResponse, next: unknown) => {\n if (request.url?.startsWith(SENTRY_CONTEXT_REQUEST_PATH)) {\n return stackFramesContextMiddleware(request, response);\n }\n return middleware(request, response, next);\n };\n};\n\n/**\n * Adds the Sentry middleware to the Metro server config.\n */\nexport const withSentryMiddleware = (config: InputConfigT): InputConfigT => {\n if (!config.server) {\n // @ts-expect-error server is typed read only\n config.server = {};\n }\n\n const originalEnhanceMiddleware = config.server.enhanceMiddleware;\n config.server.enhanceMiddleware = (middleware, server) => {\n const sentryMiddleware = createSentryMetroMiddleware(middleware);\n return originalEnhanceMiddleware ? originalEnhanceMiddleware(sentryMiddleware, server) : sentryMiddleware;\n };\n return config;\n};\n"]}
|
|
@@ -88,7 +88,7 @@ function loadExpoMetroConfigModule() {
|
|
|
88
88
|
function withSentryBabelTransformer(config, annotateReactComponents) {
|
|
89
89
|
var _a;
|
|
90
90
|
const defaultBabelTransformerPath = (_a = config.transformer) === null || _a === void 0 ? void 0 : _a.babelTransformerPath;
|
|
91
|
-
core_1.
|
|
91
|
+
core_1.debug.log('Default Babel transformer path from `config.transformer`:', defaultBabelTransformerPath);
|
|
92
92
|
if (!defaultBabelTransformerPath) {
|
|
93
93
|
// This has to be console.warn because the options is enabled but won't be used
|
|
94
94
|
// eslint-disable-next-line no-console
|
|
@@ -157,7 +157,7 @@ function withSentryFramesCollapsed(config) {
|
|
|
157
157
|
const originalCustomizeFrame = (_a = config.symbolicator) === null || _a === void 0 ? void 0 : _a.customizeFrame;
|
|
158
158
|
const collapseSentryInternalFrames = (frame) => typeof frame.file === 'string' &&
|
|
159
159
|
(frame.file.includes('node_modules/@sentry/core/cjs/instrument.js') ||
|
|
160
|
-
frame.file.includes('node_modules/@sentry/core/cjs/
|
|
160
|
+
frame.file.includes('node_modules/@sentry/core/cjs/debug.js'));
|
|
161
161
|
const customizeFrame = (frame) => {
|
|
162
162
|
const originalOrSentryCustomizeFrame = (originalCustomization) => (Object.assign(Object.assign({}, originalCustomization), { collapse: (originalCustomization === null || originalCustomization === void 0 ? void 0 : originalCustomization.collapse) || collapseSentryInternalFrames(frame) }));
|
|
163
163
|
const maybePromiseCustomization = (originalCustomizeFrame === null || originalCustomizeFrame === void 0 ? void 0 : originalCustomizeFrame(frame)) || undefined;
|