getsentry / getsentry/sentry-react-native

Support RN SDK use in libraries

Offen
#4,377 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Errors Feature React-Native
Vorherrschende Sprache
TypeScript
Sterne
1.8k
Forks
366
Ø Merge
1 T. 5 Std.
Gemergte PRs (30 T.)
93

Beschreibung

### 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://library-dsn@sentry.io/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
}
]
}
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, das Problem mit React Native 0.71.11, Hermes, Metro und Sentry React Native SDK 6.2.0 unter Android und iOS zu reproduzieren, wobei der beforeSend-Callback von Sentry.init und der Beispiel-Stacktrace verwendet werden. Verfolge, wie die Dateinamen von stacktrace.frames erzeugt werden, und definiere als Abschluss entweder eine zuverlässige Unterscheidung zwischen Bibliothek und Client oder eine dokumentierte Einschränkung und Alternative.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, react-native
Bereich
mobile, observability
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.