diff --git a/CHANGELOG.md b/CHANGELOG.md index 65fb381f6..46322e685 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,24 @@ # Changelog -## Unreleased +## 5.33.0 + +### Features + +- Add an option to disable native (iOS and Android) profiling for the `HermesProfiling` integration ([#4094](https://github.com/getsentry/sentry-react-native/pull/4094)) + + To disable native profilers add the `hermesProfilingIntegration`. + + ```js + import * as Sentry from '@sentry/react-native'; + + Sentry.init({ + integrations: [ + Sentry.hermesProfilingIntegration({ platformProfilers: false }), + ], + }); + ``` + +## 5.32.0 ### Features @@ -20,14 +38,21 @@ ### Changes +- Add Android Logger when new frame event is not emitted ([#4081](https://github.com/getsentry/sentry-react-native/pull/4081)) - React Native Tracing Deprecations ([#4073](https://github.com/getsentry/sentry-react-native/pull/4073)) - `new ReactNativeTracing` to `reactNativeTracingIntegration()` - - `new ReactNavigationInstrumentation` to `reactNativeTracingIntegration()`. - - `new ReactNativeNavigationInstrumentation` to `reactNativeTracingIntegration()`. + - `new ReactNavigationInstrumentation` to `reactNavigationIntegration()`. + - `new ReactNativeNavigationInstrumentation` to `reactNativeNavigationIntegration()`. - `ReactNavigationV4Instrumentation` won't be supported in the next major SDK version, upgrade to `react-navigation@5` or newer. - `RoutingInstrumentation` and `RoutingInstrumentationInstance` replace by `Integration` interface from `@sentry/types`. - `enableAppStartTracking`, `enableNativeFramesTracking`, `enableStallTracking`, `enableUserInteractionTracing` moved to `Sentry.init({})` root options. +### Dependencies + +- Bump CLI from v2.34.0 to v2.36.1 ([#4055](https://github.com/getsentry/sentry-react-native/pull/4055)) + - [changelog](https://github.com/getsentry/sentry-cli/blob/master/CHANGELOG.md#2361) + - [diff](https://github.com/getsentry/sentry-cli/compare/2.34.0...2.36.1) + ## 5.31.1 ### Fixes @@ -238,6 +263,24 @@ Access to Mobile Replay is limited to early access orgs on Sentry. If you're interested, [sign up for the waitlist](https://sentry.io/lp/mobile-replay-beta/) +## 5.24.2 + +### Features + +- Add an option to disable native (iOS and Android) profiling for the `HermesProfiling` integration ([#4094](https://github.com/getsentry/sentry-react-native/pull/4094)) + + To disable native profilers add the `hermesProfilingIntegration`. + + ```js + import * as Sentry from '@sentry/react-native'; + + Sentry.init({ + integrations: [ + Sentry.hermesProfilingIntegration({ platformProfilers: false }), + ], + }); + ``` + ## 5.24.1 ### Fixes diff --git a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java index fcfcb4390..1fcaabb66 100644 --- a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +++ b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java @@ -718,15 +718,17 @@ private void initializeAndroidProfiler() { ); } - public WritableMap startProfiling() { + public WritableMap startProfiling(boolean platformProfilers) { final WritableMap result = new WritableNativeMap(); - if (androidProfiler == null) { + if (androidProfiler == null && platformProfilers) { initializeAndroidProfiler(); } try { HermesSamplingProfiler.enable(); - androidProfiler.start(); + if (androidProfiler != null) { + androidProfiler.start(); + } result.putBoolean("started", true); } catch (Throwable e) { @@ -741,7 +743,10 @@ public WritableMap stopProfiling() { final WritableMap result = new WritableNativeMap(); File output = null; try { - AndroidProfiler.ProfileEndData end = androidProfiler.endAndCollect(false, null); + AndroidProfiler.ProfileEndData end = null; + if (androidProfiler != null) { + end = androidProfiler.endAndCollect(false, null); + } HermesSamplingProfiler.disable(); output = File.createTempFile( @@ -753,14 +758,16 @@ public WritableMap stopProfiling() { HermesSamplingProfiler.dumpSampledTraceToFile(output.getPath()); result.putString("profile", readStringFromFile(output)); - WritableMap androidProfile = new WritableNativeMap(); - byte[] androidProfileBytes = FileUtils.readBytesFromFile(end.traceFile.getPath(), maxTraceFileSize); - String base64AndroidProfile = Base64.encodeToString(androidProfileBytes, NO_WRAP | NO_PADDING); + if (end != null) { + WritableMap androidProfile = new WritableNativeMap(); + byte[] androidProfileBytes = FileUtils.readBytesFromFile(end.traceFile.getPath(), maxTraceFileSize); + String base64AndroidProfile = Base64.encodeToString(androidProfileBytes, NO_WRAP | NO_PADDING); - androidProfile.putString("sampled_profile", base64AndroidProfile); - androidProfile.putInt("android_api_level", buildInfo.getSdkInfoVersion()); - androidProfile.putString("build_id", getProguardUuid()); - result.putMap("androidProfile", androidProfile); + androidProfile.putString("sampled_profile", base64AndroidProfile); + androidProfile.putInt("android_api_level", buildInfo.getSdkInfoVersion()); + androidProfile.putString("build_id", getProguardUuid()); + result.putMap("androidProfile", androidProfile); + } } catch (Throwable e) { result.putString("error", e.toString()); } finally { diff --git a/android/src/main/java/io/sentry/react/RNSentryOnDrawReporterManager.java b/android/src/main/java/io/sentry/react/RNSentryOnDrawReporterManager.java index 0026082ad..a33f4fc1c 100644 --- a/android/src/main/java/io/sentry/react/RNSentryOnDrawReporterManager.java +++ b/android/src/main/java/io/sentry/react/RNSentryOnDrawReporterManager.java @@ -18,8 +18,10 @@ import java.util.Map; +import io.sentry.ILogger; import io.sentry.SentryDate; import io.sentry.SentryDateProvider; +import io.sentry.SentryLevel; import io.sentry.android.core.AndroidLogger; import io.sentry.android.core.BuildInfoProvider; import io.sentry.android.core.SentryAndroidDateProvider; @@ -68,6 +70,8 @@ public Map getExportedCustomBubblingEventTypeConstants() { public static class RNSentryOnDrawReporterView extends View { + private static final ILogger logger = new AndroidLogger("RNSentryOnDrawReporterView"); + private final @Nullable ReactApplicationContext reactContext; private final @NotNull SentryDateProvider dateProvider = new SentryAndroidDateProvider(); private final @Nullable Runnable emitInitialDisplayEvent; @@ -96,6 +100,7 @@ public void setFullDisplay(boolean fullDisplay) { return; } + logger.log(SentryLevel.DEBUG, "[TimeToDisplay] Register full display event emitter."); registerForNextDraw(emitFullDisplayEvent); } @@ -104,16 +109,27 @@ public void setInitialDisplay(boolean initialDisplay) { return; } + logger.log(SentryLevel.DEBUG, "[TimeToDisplay] Register initial display event emitter."); registerForNextDraw(emitInitialDisplayEvent); } private void registerForNextDraw(@Nullable Runnable emitter) { + if (emitter == null) { + logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, emitter is null."); + return; + } + if (buildInfo == null) { + logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, buildInfo is null."); + return; + } if (reactContext == null) { + logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, reactContext is null."); return; } @Nullable Activity activity = reactContext.getCurrentActivity(); - if (activity == null || emitter == null || buildInfo == null) { + if (activity == null) { + logger.log(SentryLevel.ERROR, "[TimeToDisplay] Won't emit next frame drawn event, reactContext is null."); return; } @@ -129,6 +145,7 @@ private void emitDisplayEvent(String type) { event.putDouble("newFrameTimestampInSeconds", endDate.nanoTimestamp() / 1e9); if (reactContext == null) { + logger.log(SentryLevel.ERROR, "[TimeToDisplay] Recorded next frame draw but can't emit the event, reactContext is null."); return; } reactContext diff --git a/android/src/newarch/java/io/sentry/react/RNSentryModule.java b/android/src/newarch/java/io/sentry/react/RNSentryModule.java index f5f6ea608..fd5b902e5 100644 --- a/android/src/newarch/java/io/sentry/react/RNSentryModule.java +++ b/android/src/newarch/java/io/sentry/react/RNSentryModule.java @@ -139,8 +139,8 @@ public void fetchNativeSdkInfo(Promise promise) { } @Override - public WritableMap startProfiling() { - return this.impl.startProfiling(); + public WritableMap startProfiling(boolean platformProfilers) { + return this.impl.startProfiling(platformProfilers); } @Override diff --git a/android/src/oldarch/java/io/sentry/react/RNSentryModule.java b/android/src/oldarch/java/io/sentry/react/RNSentryModule.java index 656b8c604..6b135ecb9 100644 --- a/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +++ b/android/src/oldarch/java/io/sentry/react/RNSentryModule.java @@ -139,8 +139,8 @@ public void fetchNativeSdkInfo(Promise promise) { } @ReactMethod(isBlockingSynchronousMethod = true) - public WritableMap startProfiling() { - return this.impl.startProfiling(); + public WritableMap startProfiling(boolean platformProfilers) { + return this.impl.startProfiling(platformProfilers); } @ReactMethod(isBlockingSynchronousMethod = true) diff --git a/ios/RNSentry.mm b/ios/RNSentry.mm index 392869cad..1ff85705f 100644 --- a/ios/RNSentry.mm +++ b/ios/RNSentry.mm @@ -649,18 +649,22 @@ - (NSDictionary*) fetchNativeStackFramesBy: (NSArray*)instructionsAdd static SentryId* nativeProfileTraceId = nil; static uint64_t nativeProfileStartTime = 0; -RCT_EXPORT_SYNCHRONOUS_TYPED_METHOD(NSDictionary *, startProfiling) +RCT_EXPORT_SYNCHRONOUS_TYPED_METHOD(NSDictionary *, startProfiling: (BOOL)platformProfilers) { #if SENTRY_PROFILING_ENABLED try { facebook::hermes::HermesRuntime::enableSamplingProfiler(); - if (nativeProfileTraceId == nil && nativeProfileStartTime == 0) { + if (nativeProfileTraceId == nil && nativeProfileStartTime == 0 && platformProfilers) { #if SENTRY_TARGET_PROFILING_SUPPORTED nativeProfileTraceId = [RNSentryId newId]; nativeProfileStartTime = [PrivateSentrySDKOnly startProfilerForTrace: nativeProfileTraceId]; #endif } else { - NSLog(@"Native profiling already in progress. Currently existing trace: %@", nativeProfileTraceId); + if (!platformProfilers) { + NSLog(@"Native profiling is disabled. Only starting Hermes profiling."); + } else { + NSLog(@"Native profiling already in progress. Currently existing trace: %@", nativeProfileTraceId); + } } return @{ @"started": @YES }; } catch (const std::exception& ex) { diff --git a/package.json b/package.json index 0f8fd2085..825db24b2 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@sentry/react-native", "homepage": "https://github.com/getsentry/sentry-react-native", "repository": "https://github.com/getsentry/sentry-react-native", - "version": "5.31.1", + "version": "5.33.0", "description": "Official Sentry SDK for react-native", "typings": "dist/js/index.d.ts", "types": "dist/js/index.d.ts", @@ -69,7 +69,7 @@ "dependencies": { "@sentry/babel-plugin-component-annotate": "2.20.1", "@sentry/browser": "7.119.0", - "@sentry/cli": "2.34.0", + "@sentry/cli": "2.36.1", "@sentry/core": "7.119.0", "@sentry/hub": "7.119.0", "@sentry/integrations": "7.119.0", diff --git a/samples/expo/app.json b/samples/expo/app.json index a4b97e722..61bcb0cb9 100644 --- a/samples/expo/app.json +++ b/samples/expo/app.json @@ -4,7 +4,7 @@ "slug": "sentry-react-native-expo-sample", "jsEngine": "hermes", "scheme": "sentry-expo-sample", - "version": "5.31.1", + "version": "5.33.0", "orientation": "portrait", "icon": "./assets/icon.png", "userInterfaceStyle": "light", @@ -19,7 +19,7 @@ "ios": { "supportsTablet": true, "bundleIdentifier": "io.sentry.expo.sample", - "buildNumber": "20" + "buildNumber": "22" }, "android": { "adaptiveIcon": { @@ -27,7 +27,7 @@ "backgroundColor": "#ffffff" }, "package": "io.sentry.expo.sample", - "versionCode": 20 + "versionCode": 22 }, "web": { "bundler": "metro", diff --git a/samples/expo/package.json b/samples/expo/package.json index 202934f3f..1e2d86f2b 100644 --- a/samples/expo/package.json +++ b/samples/expo/package.json @@ -1,6 +1,6 @@ { "name": "sentry-react-native-expo-sample", - "version": "5.31.1", + "version": "5.33.0", "main": "expo-router/entry", "scripts": { "start": "expo start", diff --git a/samples/react-native/android/app/build.gradle b/samples/react-native/android/app/build.gradle index 49b771f0b..159a51328 100644 --- a/samples/react-native/android/app/build.gradle +++ b/samples/react-native/android/app/build.gradle @@ -134,8 +134,8 @@ android { applicationId "io.sentry.reactnative.sample" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 23 - versionName "5.31.1" + versionCode 25 + versionName "5.33.0" } signingConfigs { diff --git a/samples/react-native/ios/sentryreactnativesample.xcodeproj/project.pbxproj b/samples/react-native/ios/sentryreactnativesample.xcodeproj/project.pbxproj index 7e2bd5a16..7475b94b4 100644 --- a/samples/react-native/ios/sentryreactnativesample.xcodeproj/project.pbxproj +++ b/samples/react-native/ios/sentryreactnativesample.xcodeproj/project.pbxproj @@ -632,13 +632,14 @@ ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = ( "$(inherited)", - " ", + "-DRN_FABRIC_ENABLED", ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", + "-DRN_FABRIC_ENABLED", ); OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; @@ -714,13 +715,14 @@ MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = ( "$(inherited)", - " ", + "-DRN_FABRIC_ENABLED", ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", + "-DRN_FABRIC_ENABLED", ); OTHER_LDFLAGS = "$(inherited)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; diff --git a/samples/react-native/ios/sentryreactnativesample/Info.plist b/samples/react-native/ios/sentryreactnativesample/Info.plist index c8c25093b..5c3e08682 100644 --- a/samples/react-native/ios/sentryreactnativesample/Info.plist +++ b/samples/react-native/ios/sentryreactnativesample/Info.plist @@ -17,11 +17,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 5.31.1 + 5.33.0 CFBundleSignature ???? CFBundleVersion - 27 + 29 LSRequiresIPhoneOS NSAppTransportSecurity diff --git a/samples/react-native/ios/sentryreactnativesampleTests/Info.plist b/samples/react-native/ios/sentryreactnativesampleTests/Info.plist index 8ad7ecc9f..d40ec2cd4 100644 --- a/samples/react-native/ios/sentryreactnativesampleTests/Info.plist +++ b/samples/react-native/ios/sentryreactnativesampleTests/Info.plist @@ -15,10 +15,10 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.31.1 + 5.33.0 CFBundleSignature ???? CFBundleVersion - 27 + 29 diff --git a/samples/react-native/package.json b/samples/react-native/package.json index 546ead287..d4c1b2195 100644 --- a/samples/react-native/package.json +++ b/samples/react-native/package.json @@ -1,6 +1,6 @@ { "name": "sentry-react-native-sample", - "version": "5.31.1", + "version": "5.33.0", "private": true, "scripts": { "postinstall": "patch-package", diff --git a/src/js/NativeRNSentry.ts b/src/js/NativeRNSentry.ts index c57a02832..abfd546f6 100644 --- a/src/js/NativeRNSentry.ts +++ b/src/js/NativeRNSentry.ts @@ -35,7 +35,7 @@ export interface Spec extends TurboModule { enableNativeFramesTracking(): void; fetchModules(): Promise; fetchViewHierarchy(): Promise; - startProfiling(): { started?: boolean; error?: string }; + startProfiling(platformProfilers: boolean): { started?: boolean; error?: string }; stopProfiling(): { profile?: string; nativeProfile?: UnsafeObject; diff --git a/src/js/profiling/integration.ts b/src/js/profiling/integration.ts index 9fd2d0a0e..79b34a141 100644 --- a/src/js/profiling/integration.ts +++ b/src/js/profiling/integration.ts @@ -5,7 +5,7 @@ import type { Event, Integration, IntegrationClass, - IntegrationFn, + IntegrationFnResult, ThreadCpuProfile, Transaction, } from '@sentry/types'; @@ -31,12 +31,27 @@ const INTEGRATION_NAME = 'HermesProfiling'; const MS_TO_NS: number = 1e6; +export interface HermesProfilingOptions { + /** + * Enable or disable profiling of native (iOS and Android) threads + * + * @default true + */ + platformProfilers?: boolean; +} + +const defaultOptions: Required = { + platformProfilers: true, +}; + /** * Profiling integration creates a profile for each transaction and adds it to the event envelope. * * @experimental */ -export const hermesProfilingIntegration: IntegrationFn = () => { +export const hermesProfilingIntegration = ( + initOptions: HermesProfilingOptions = defaultOptions, +): IntegrationFnResult => { let _currentProfile: | { profile_id: string; @@ -44,6 +59,7 @@ export const hermesProfilingIntegration: IntegrationFn = () => { } | undefined; let _currentProfileTimeout: number | undefined; + const usePlatformProfilers = initOptions.platformProfilers ?? true; const setupOnce = (): void => { if (!isHermesEnabled()) { @@ -138,7 +154,7 @@ export const hermesProfilingIntegration: IntegrationFn = () => { * Starts a new profile and links it to the transaction. */ const _startNewProfile = (transaction: Transaction): void => { - const profileStartTimestampNs = startProfiling(); + const profileStartTimestampNs = startProfiling(usePlatformProfilers); if (!profileStartTimestampNs) { return; } @@ -227,8 +243,8 @@ export const HermesProfiling = convertIntegrationFnToClass( /** * Starts Profilers and returns the timestamp when profiling started in nanoseconds. */ -export function startProfiling(): number | null { - const started = NATIVE.startProfiling(); +export function startProfiling(platformProfilers: boolean): number | null { + const started = NATIVE.startProfiling(platformProfilers); if (!started) { return null; } diff --git a/src/js/version.ts b/src/js/version.ts index 33a625dc2..8a3d2dd74 100644 --- a/src/js/version.ts +++ b/src/js/version.ts @@ -1,3 +1,3 @@ export const SDK_PACKAGE_NAME = 'npm:@sentry/react-native'; export const SDK_NAME = 'sentry.javascript.react-native'; -export const SDK_VERSION = '5.31.1'; +export const SDK_VERSION = '5.33.0'; diff --git a/src/js/wrapper.ts b/src/js/wrapper.ts index 164d955a9..ed1bd7d1f 100644 --- a/src/js/wrapper.ts +++ b/src/js/wrapper.ts @@ -95,7 +95,7 @@ interface SentryNativeWrapper { fetchModules(): Promise | null>; fetchViewHierarchy(): PromiseLike; - startProfiling(): boolean; + startProfiling(platformProfilers: boolean): boolean; stopProfiling(): { hermesProfile: Hermes.Profile; nativeProfile?: NativeProfileEvent; @@ -531,7 +531,7 @@ export const NATIVE: SentryNativeWrapper = { return raw ? new Uint8Array(raw) : null; }, - startProfiling(): boolean { + startProfiling(platformProfilers: boolean): boolean { if (!this.enableNative) { throw this._DisabledNativeError; } @@ -539,7 +539,7 @@ export const NATIVE: SentryNativeWrapper = { throw this._NativeClientError; } - const { started, error } = RNSentry.startProfiling(); + const { started, error } = RNSentry.startProfiling(platformProfilers); if (started) { logger.log('[NATIVE] Start Profiling'); } else { diff --git a/test/profiling/integration.test.ts b/test/profiling/integration.test.ts index 2a8003c49..b5ae1e4a8 100644 --- a/test/profiling/integration.test.ts +++ b/test/profiling/integration.test.ts @@ -9,6 +9,7 @@ import type { Envelope, Event, Profile, ThreadCpuProfile, Transaction, Transport import * as Sentry from '../../src/js'; import type { NativeDeviceContextsResponse } from '../../src/js/NativeRNSentry'; import { getDebugMetadata } from '../../src/js/profiling/debugid'; +import type { HermesProfilingOptions } from '../../src/js/profiling/integration'; import { hermesProfilingIntegration } from '../../src/js/profiling/integration'; import type { AndroidProfileEvent } from '../../src/js/profiling/types'; import { getDefaultEnvironment, isHermesEnabled, notWeb } from '../../src/js/utils/environment'; @@ -351,12 +352,24 @@ describe('profiling integration', () => { jest.runAllTimers(); }); }); + + test('platformProviders flag passed down to native', () => { + mock = initTestClient({ withProfiling: true, hermesProfilingOptions: { platformProfilers: false } }); + const transaction: Transaction = Sentry.startTransaction({ + name: 'test-name', + }); + transaction.finish(); + jest.runAllTimers(); + + expect(mockWrapper.NATIVE.startProfiling).toBeCalledWith(false); + }); }); function initTestClient( testOptions: { withProfiling?: boolean; environment?: string; + hermesProfilingOptions?: HermesProfilingOptions; } = { withProfiling: true, }, @@ -372,6 +385,12 @@ function initTestClient( if (!testOptions.withProfiling) { return integrations.filter(i => i.name !== 'HermesProfiling'); } + return integrations.map(integration => { + if (integration.name === 'HermesProfiling') { + return hermesProfilingIntegration(testOptions.hermesProfilingOptions ?? {}); + } + return integration; + }); return integrations; }, transport: () => ({ diff --git a/test/wrapper.test.ts b/test/wrapper.test.ts index 884fd1a83..2e06ed5c8 100644 --- a/test/wrapper.test.ts +++ b/test/wrapper.test.ts @@ -574,13 +574,13 @@ describe('Tests Native Wrapper', () => { (RNSentry.startProfiling as jest.MockedFunction).mockReturnValue({ started: true, }); - expect(NATIVE.startProfiling()).toBe(true); + expect(NATIVE.startProfiling(true)).toBe(true); }); test('failed start profiling returns false', () => { (RNSentry.startProfiling as jest.MockedFunction).mockReturnValue({ error: 'error', }); - expect(NATIVE.startProfiling()).toBe(false); + expect(NATIVE.startProfiling(true)).toBe(false); }); test('stop profiling returns hermes profile', () => { (RNSentry.stopProfiling as jest.MockedFunction).mockReturnValue({ diff --git a/yarn.lock b/yarn.lock index 780a15ecb..7be82aeca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3827,45 +3827,45 @@ "@sentry/types" "7.119.0" "@sentry/utils" "7.119.0" -"@sentry/cli-darwin@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-darwin/-/cli-darwin-2.34.0.tgz#a67a2246e763fb42c561562d3b1bd80ea38b518c" - integrity sha512-mzQj58xxRej8uATdXgwHq3KZC2HhfGIyl+jVTh7nXzizOS5OsYZtShpGRxwfeC3eNZ6NqY7h0FWxJD6cUFgauA== - -"@sentry/cli-linux-arm64@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.34.0.tgz#bb35b2d7db3ec453a46ec9bb41cf273668cbab84" - integrity sha512-Sgl6b2BYI0uNB9WfJLkq4UZsOAXo35uwemtrXIJOz0zc9V4QIFwvmMYXAHpNVC3Z/dSU5PaWBJHEtUKouX5mOQ== - -"@sentry/cli-linux-arm@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm/-/cli-linux-arm-2.34.0.tgz#1f778b259d5cc9d3bd56aa7ddf2a5913be86794c" - integrity sha512-FkNc22FOKU57h+s8ZkqTz/5Y+6GrCK2fSde2dntofOPJheBBuaYz7CDq0dEM9GuBCcvogQj8sf2hMb8+gdJrgA== - -"@sentry/cli-linux-i686@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-i686/-/cli-linux-i686-2.34.0.tgz#0e00b03f0960c89e9ad97a757e40f39d5bf0d922" - integrity sha512-W7QNzOsbhzsRY5deRsHCqJH4C/yNxwlX6b1JqBO1s7Zb0t5KhM3fFgZJ4DmLZMOvngnJ2wSuyDQCwTNPyEWsAw== - -"@sentry/cli-linux-x64@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-linux-x64/-/cli-linux-x64-2.34.0.tgz#68476f5665293d44d5719746c581c88d5ea30c0b" - integrity sha512-EJCzldxeNsEIgf5ASj0E9/6J5SwUVgtfoiOYjhBxj2e41jEDlh6o5uMNE4H+J2GX3zPFrN3LgsZYevgPqA35Mw== - -"@sentry/cli-win32-i686@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-win32-i686/-/cli-win32-i686-2.34.0.tgz#2550aef7d10915f656680e5ce9bde17fb80d7a37" - integrity sha512-bITy/IiT/y1MZhvKSt5UrBEDUNcOtQV20BZDyPriPijBcJ/1U69lgH3IM4bxIaTiicFnMdxbOlQhRSdm8SKURg== - -"@sentry/cli-win32-x64@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli-win32-x64/-/cli-win32-x64-2.34.0.tgz#8d37e659f39c85a7b6a2ddb89a3d6ea79aac745a" - integrity sha512-wpP/w7Fhsr7+cbCgE/OI8hSh3pqESRpcdNgtBQjMuKN2FSE1E+GHrk5GB+fKZG2OAV4IN4HxE/z3NioAJeThfQ== - -"@sentry/cli@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.34.0.tgz#58367aa7f05bf42e2d7330a5f51b60eaf1735f16" - integrity sha512-hS3MRtEOT1Y27ufBesTTg4xJx6Msf77U609ncy2u7z8uoTZgO8HNsq9DwuxitX5MTrREEJ+frCMFsYvwqkQcJw== +"@sentry/cli-darwin@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-darwin/-/cli-darwin-2.36.1.tgz#786adf6984dbe3c6fb7dac51b625c314117b807d" + integrity sha512-JOHQjVD8Kqxm1jUKioAP5ohLOITf+Dh6+DBz4gQjCNdotsvNW5m63TKROwq2oB811p+Jzv5304ujmN4cAqW1Ww== + +"@sentry/cli-linux-arm64@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.36.1.tgz#ff449d7e7e715166257998c02cf635ca02acbadd" + integrity sha512-R//3ZEkbzvoStr3IA7nxBZNiBYyxOljOqAhgiTnejXHmnuwDzM3TBA2n5vKPE/kBFxboEBEw0UTzTIRb1T0bgw== + +"@sentry/cli-linux-arm@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm/-/cli-linux-arm-2.36.1.tgz#1ae5d335a1b4cd217a34c2bd6c6f5e0670136eb3" + integrity sha512-gvEOKN0fWL2AVqUBKHNXPRZfJNvKTs8kQhS8cQqahZGgZHiPCI4BqW45cKMq+ZTt1UUbLmt6khx5Dz7wi+0i5A== + +"@sentry/cli-linux-i686@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-i686/-/cli-linux-i686-2.36.1.tgz#112b9e26357e918cbbba918114ec8cdab07cdf60" + integrity sha512-R7sW5Vk/HacVy2YgQoQB+PwccvFYf2CZVPSFSFm2z7MEfNe77UYHWUq+sjJ4vxWG6HDWGVmaX0fjxyDkE01JRA== + +"@sentry/cli-linux-x64@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-x64/-/cli-linux-x64-2.36.1.tgz#c3e5bdb0c9a4bb44c83927c62a3cd7e006709bf7" + integrity sha512-UMr3ik8ksA7zQfbzsfwCb+ztenLnaeAbX94Gp+bzANZwPfi/vVHf2bLyqsBs4OyVt9SPlN1bbM/RTGfMjZ3JOw== + +"@sentry/cli-win32-i686@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-win32-i686/-/cli-win32-i686-2.36.1.tgz#819573320e885e1dbf59b0a01d3bd370c84c1708" + integrity sha512-CflvhnvxPEs5GWQuuDtYSLqPrBaPbcSJFlBuUIb+8WNzRxvVfjgw1qzfZmkQqABqiy/YEsEekllOoMFZAvCcVA== + +"@sentry/cli-win32-x64@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-win32-x64/-/cli-win32-x64-2.36.1.tgz#80779b4bffb4e2e32944eae72c60e6f40151b4dc" + integrity sha512-wWqht2xghcK3TGnooHZSzA3WSjdtno/xFjZLvWmw38rblGwgKMxLZnlxV6uDyS+OJ6CbfDTlCRay/0TIqA0N8g== + +"@sentry/cli@2.36.1": + version "2.36.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.36.1.tgz#a9146b798cb6d2f782a7a48d74633ddcd88dc8d3" + integrity sha512-gzK5uQKDWKhyH5udoB5+oaUNrS//urWyaXgKvHKz4gFfl744HuKY9dpLPP2nMnf0zLGmGM6xJnMXLqILq0mtxw== dependencies: https-proxy-agent "^5.0.0" node-fetch "^2.6.7" @@ -3873,13 +3873,13 @@ proxy-from-env "^1.1.0" which "^2.0.2" optionalDependencies: - "@sentry/cli-darwin" "2.34.0" - "@sentry/cli-linux-arm" "2.34.0" - "@sentry/cli-linux-arm64" "2.34.0" - "@sentry/cli-linux-i686" "2.34.0" - "@sentry/cli-linux-x64" "2.34.0" - "@sentry/cli-win32-i686" "2.34.0" - "@sentry/cli-win32-x64" "2.34.0" + "@sentry/cli-darwin" "2.36.1" + "@sentry/cli-linux-arm" "2.36.1" + "@sentry/cli-linux-arm64" "2.36.1" + "@sentry/cli-linux-i686" "2.36.1" + "@sentry/cli-linux-x64" "2.36.1" + "@sentry/cli-win32-i686" "2.36.1" + "@sentry/cli-win32-x64" "2.36.1" "@sentry/cli@^1.72.0": version "1.74.6"