Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support RN SDK use in libraries #4377

Open
allandallopez opened this issue Dec 16, 2024 · 2 comments
Open

Support RN SDK use in libraries #4377

allandallopez opened this issue Dec 16, 2024 · 2 comments

Comments

@allandallopez
Copy link

What React Native libraries do you use?

React Native without Frameworks

Are you using sentry.io or on-premise?

sentry.io (SaS)

@sentry/react-native SDK Version

6.2.0

How does your development environment look like?

Sentry React Native SDK Version: 6.2.0
React Native Version: 0.71.11
Hermes Enabled: Yes
Platforms Tested: Android, iOS
Build Tools: Metro bundler

Sentry.init()

Sentry.init({
  dsn: 'https://[email protected]/library-project-id',
  release: '0.0.1',
  beforeSend(event) {
    // Attempting to filter errors based on stacktrace
    const isFromLibrary = event.exception?.values?.some((value) =>
      value.stacktrace?.frames?.some((frame) =>
        frame.filename?.includes('/node_modules/@my-library-name')
      )
    );

    return isFromLibrary ? event : null;
  },
});

Steps to Reproduce

I am unable to effectively filter errors in my React Native project using stacktrace.frames in the beforeSend callback. Despite providing proper logic to inspect the stack trace and filenames, the error events do not include sufficient information to reliably distinguish between errors originating from my project( my project is react native library ) and those from the client app.

This has become a critical issue for my project, where I am building a React Native SDK that will be integrated into client apps. I want to ensure that only errors from my SDK are sent to my Sentry project, while unexpected errors from client apps (using their own DSN and release) are excluded.

Expected Result

  • I expect the stacktrace.frames[].filename to include the library name or a clear identifier (e.g., node_modules/@my-library or similar) that shows where the error originates. This would make it much easier to filter errors specific to the project.

  • If this is not posible, is there another reliable way to distinguish between errors originating from the library and client app without relying solely on the stacktrace? Thanks

Actual Result

Stacktrace Does Not Contain library Identifiers:

The stacktrace.frames[].filename does not include a clear path to node_modules/@my/library-name or any other library-specific identifier.
Example stacktrace from a client app error:

"stacktrace": {
  "frames": [
    {
      "filename": "app:///Pressability.js",
      "function": "responderEventHandlers.onResponderRelease",
      "lineno": 525,
      "colno": 27
    },
    {
      "filename": "app:///index.js",
      "function": "TouchableOpacity.props.onPress",
      "lineno": 171,
      "colno": 27
    }
  ]
}
@getsantry getsantry bot moved this to Waiting for: Product Owner in GitHub Issues with 👀 3 Dec 16, 2024
@krystofwoldrich krystofwoldrich changed the title Unable to Filter Errors Using Stacktrace in React Native Library Support RN SDK use in libraries Dec 17, 2024
@krystofwoldrich
Copy link
Member

Hi @allandallopez,
thank you for the message, but the Sentry React Native SDK at the moment doesn't support running inside of a library.

The Sentry.init is a global init, which would interfere with the users Sentry.init.

The library path or other identifier is not know in the release runtime because the JS code is executed from a bundle. The information you are looking for is only available after symbolication which happens on the server side.


I've changed the title and the type of this issue to a feature request to collect the information about use of the SDK in libraries.

@allandallopez
Copy link
Author

hi @krystofwoldrich, thanks for the explanation and for updating this to a feature request! Hopefully, this use case can be supported in a future version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: No status
Status: Needs Discussion
Development

No branches or pull requests

3 participants