Skip to content

Commit b8fe88f

Browse files
committed
Merge branch 'v9' into v9-feat/replace-custom-platform-checker
2 parents fc54e2e + 75e3eba commit b8fe88f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1641
-1942
lines changed

.github/workflows/analyze.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
working-directory: ${{ inputs.package }}
3333
steps:
3434
- uses: actions/checkout@v4
35-
- uses: dart-lang/setup-dart@e630b99d28a3b71860378cafdc2a067c71107f94 # pin@v1
35+
- uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # pin@v1
3636
if: ${{ inputs.sdk == 'dart' }}
3737
- uses: subosito/flutter-action@f2c4f6686ca8e8d6e6d0f28410eeef506ed66aff # [email protected]
3838
if: ${{ inputs.sdk == 'flutter' }}

.github/workflows/diagrams.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jobs:
77
runs-on: ubuntu-latest
88
name: "Create class diagrams of all packages"
99
steps:
10-
- uses: dart-lang/setup-dart@e630b99d28a3b71860378cafdc2a067c71107f94 # pin@v1
10+
- uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # pin@v1
1111
with:
1212
sdk: stable
1313

.github/workflows/e2e_dart.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
matrix:
3939
sdk: [stable, beta]
4040
steps:
41-
- uses: dart-lang/setup-dart@e630b99d28a3b71860378cafdc2a067c71107f94 # pin@v1
41+
- uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # pin@v1
4242
with:
4343
sdk: ${{ matrix.sdk }}
4444
- uses: actions/checkout@v4

.github/workflows/flutter-symbols.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
steps:
2222
- uses: actions/checkout@v4
2323

24-
- uses: dart-lang/setup-dart@e630b99d28a3b71860378cafdc2a067c71107f94 # pin@v1
24+
- uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # pin@v1
2525

2626
- run: dart pub get
2727

@@ -33,7 +33,7 @@ jobs:
3333
steps:
3434
- uses: actions/checkout@v4
3535

36-
- uses: dart-lang/setup-dart@e630b99d28a3b71860378cafdc2a067c71107f94 # pin@v1
36+
- uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # pin@v1
3737

3838
- run: dart pub get
3939

.github/workflows/format-and-fix.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
working-directory: ${{ matrix.package.name }}
3131
steps:
3232
- uses: actions/checkout@v4
33-
- uses: dart-lang/setup-dart@e630b99d28a3b71860378cafdc2a067c71107f94 # pin@v1
33+
- uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c # pin@v1
3434
if: ${{ matrix.package.sdk == 'dart' }}
3535
- uses: subosito/flutter-action@f2c4f6686ca8e8d6e6d0f28410eeef506ed66aff # [email protected]
3636
if: ${{ matrix.package.sdk == 'flutter' }}

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
steps:
2020
- name: Get auth token
2121
id: token
22-
uses: actions/create-github-app-token@67e27a7eb7db372a1c61a7f9bdab8699e9ee57f7 # v1.11.3
22+
uses: actions/create-github-app-token@0d564482f06ca65fa9e77e2510873638c82206f2 # v1.11.5
2323
with:
2424
app-id: ${{ vars.SENTRY_RELEASE_BOT_CLIENT_ID }}
2525
private-key: ${{ secrets.SENTRY_RELEASE_BOT_PRIVATE_KEY }}

.github/workflows/testflight.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
- uses: actions/checkout@v4
1717
- uses: subosito/flutter-action@f2c4f6686ca8e8d6e6d0f28410eeef506ed66aff # [email protected]
1818
- run: xcodes select 15.0.1
19-
- uses: ruby/setup-ruby@d781c1b4ed31764801bfae177617bb0446f5ef8d # pin@v1.218.0
19+
- uses: ruby/setup-ruby@32110d4e311bd8996b2a82bf2a43b714ccc91777 # pin@v1.221.0
2020
with:
2121
ruby-version: '2.7.5'
2222
bundler-cache: true

CHANGELOG.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,21 @@
88
- Increase minimum SDK version requirements to Dart v3.5.0 and Flutter v3.24.0 ([#2643](https://github.com/getsentry/sentry-dart/pull/2643))
99
- Remove screenshot option `attachScreenshotOnlyWhenResumed` ([#2664](https://github.com/getsentry/sentry-dart/pull/2664))
1010
- Remove deprecated `beforeScreenshot` ([#2662](https://github.com/getsentry/sentry-dart/pull/2662))
11+
- Remove old user feedback api ([#2686](https://github.com/getsentry/sentry-dart/pull/2686))
1112
- Remove deprecated loggers ([#2685](https://github.com/getsentry/sentry-dart/pull/2685))
1213
- Remove user segment ([#2687](https://github.com/getsentry/sentry-dart/pull/2687))
1314
- Enable JS SDK native integration by default ([#2688](https://github.com/getsentry/sentry-dart/pull/2688))
1415
- Remove `enableTracing` ([#2695](https://github.com/getsentry/sentry-dart/pull/2695))
1516
- Remove `options.autoAppStart` and `setAppStartEnd` ([#2680](https://github.com/getsentry/sentry-dart/pull/2680))
17+
- Bump Drift min version to `2.24.0` and use `QueryInterceptor` instead of `QueryExecutor` ([#2679](https://github.com/getsentry/sentry-dart/pull/2679))
1618
- Add hint for transactions ([#2675](https://github.com/getsentry/sentry-dart/pull/2675))
1719
- `BeforeSendTransactionCallback` now has a `Hint` parameter
1820
- Remove `dart:html` usage in favour of `package:web` ([#2710](https://github.com/getsentry/sentry-dart/pull/2710))
19-
21+
- Remove max response body size ([#2709](https://github.com/getsentry/sentry-dart/pull/2709))
22+
- Responses are now only attached if size is below ~0.15mb
23+
- Responses are attached to the `Hint` object, which can be read in `beforeSend`/`beforeSendTransaction` callbacks via `hint.response`.
24+
- For now, only the `dio` integration is supported.
25+
2026
### Enhancements
2127

2228
- Replay: improve Android native interop performance by using JNI ([#2670](https://github.com/getsentry/sentry-dart/pull/2670))
@@ -39,6 +45,16 @@
3945

4046
### Deprecations
4147

48+
- Deprecate Drift `SentryQueryExecutor` ([#2715](https://github.com/getsentry/sentry-dart/pull/2715))
49+
- This will be replace by `SentryQueryInterceptor` in the next major v9
50+
```dart
51+
// Example usage in Sentry Flutter v9
52+
final executor = NativeDatabase.memory().interceptWith(
53+
SentryQueryInterceptor(databaseName: 'your_db_name'),
54+
);
55+
56+
final db = AppDatabase(executor);
57+
```
4258
- Deprecate `autoAppStart` and `setAppStartEnd` ([#2681](https://github.com/getsentry/sentry-dart/pull/2681))
4359

4460
### Other

dart/lib/sentry.dart

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,60 +5,50 @@
55
/// A pure Dart client for Sentry.io crash reporting.
66
library;
77

8-
export 'src/run_zoned_guarded_integration.dart';
8+
export 'src/event_processor.dart';
9+
export 'src/exception_cause.dart';
10+
export 'src/exception_cause_extractor.dart';
11+
export 'src/exception_stacktrace_extractor.dart';
12+
export 'src/exception_type_identifier.dart';
13+
export 'src/hint.dart';
14+
export 'src/http_client/sentry_http_client.dart';
15+
export 'src/http_client/sentry_http_client_error.dart';
916
export 'src/hub.dart';
10-
// useful for tests
1117
export 'src/hub_adapter.dart';
12-
export 'src/platform_checker.dart';
18+
export 'src/integration.dart';
1319
export 'src/noop_isolate_error_integration.dart'
1420
if (dart.library.io) 'src/isolate_error_integration.dart';
21+
export 'src/performance_collector.dart';
22+
export 'src/platform_checker.dart';
1523
export 'src/protocol.dart';
24+
export 'src/protocol/sentry_feedback.dart';
25+
export 'src/protocol/sentry_proxy.dart';
26+
export 'src/run_zoned_guarded_integration.dart';
1627
export 'src/scope.dart';
1728
export 'src/scope_observer.dart';
1829
export 'src/sentry.dart';
30+
export 'src/sentry_attachment/sentry_attachment.dart';
31+
export 'src/sentry_baggage.dart';
32+
export 'src/sentry_client.dart';
1933
export 'src/sentry_envelope.dart';
2034
export 'src/sentry_envelope_item.dart';
21-
export 'src/sentry_client.dart';
2235
export 'src/sentry_options.dart';
23-
// useful for integrations
36+
// ignore: invalid_export_of_internal_element
37+
export 'src/constants.dart';
38+
// ignore: invalid_export_of_internal_element
39+
export 'src/sentry_trace_origins.dart';
40+
export 'src/span_data_convention.dart';
41+
export 'src/spotlight.dart';
2442
export 'src/throwable_mechanism.dart';
25-
export 'src/transport/transport.dart';
26-
export 'src/integration.dart';
27-
export 'src/event_processor.dart';
28-
export 'src/http_client/sentry_http_client.dart';
29-
export 'src/http_client/sentry_http_client_error.dart';
30-
export 'src/sentry_attachment/sentry_attachment.dart';
31-
export 'src/sentry_user_feedback.dart';
32-
export 'src/utils/tracing_utils.dart';
33-
export 'src/performance_collector.dart';
34-
// tracing
3543
export 'src/tracing.dart';
36-
export 'src/hint.dart';
44+
export 'src/transport/transport.dart';
3745
export 'src/type_check_hint.dart';
38-
export 'src/sentry_baggage.dart';
39-
// exception extraction
40-
export 'src/exception_cause_extractor.dart';
41-
export 'src/exception_cause.dart';
42-
export 'src/exception_stacktrace_extractor.dart';
43-
export 'src/exception_type_identifier.dart';
44-
// URL
4546
// ignore: invalid_export_of_internal_element
46-
export 'src/utils/http_sanitizer.dart';
47-
// ignore: invalid_export_of_internal_element
48-
export 'src/utils/url_details.dart';
47+
export 'src/utils.dart';
4948
// ignore: invalid_export_of_internal_element
5049
export 'src/utils/http_header_utils.dart';
5150
// ignore: invalid_export_of_internal_element
52-
export 'src/sentry_trace_origins.dart';
53-
// ignore: invalid_export_of_internal_element
54-
export 'src/sentry_span_operations.dart';
51+
export 'src/utils/http_sanitizer.dart';
52+
export 'src/utils/tracing_utils.dart';
5553
// ignore: invalid_export_of_internal_element
56-
export 'src/utils.dart';
57-
// spotlight debugging
58-
export 'src/spotlight.dart';
59-
// proxy
60-
export 'src/protocol/sentry_proxy.dart';
61-
// feedback
62-
export 'src/protocol/sentry_feedback.dart';
63-
// constants
64-
export 'src/span_data_convention.dart';
54+
export 'src/utils/url_details.dart';

dart/lib/src/constants.dart

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import 'package:meta/meta.dart';
2+
3+
@internal
4+
class SentrySpanOperations {
5+
static const String uiLoad = 'ui.load';
6+
static const String uiTimeToInitialDisplay = 'ui.load.initial_display';
7+
static const String uiTimeToFullDisplay = 'ui.load.full_display';
8+
static const String dbSqlQuery = 'db.sql.query';
9+
static const String dbSqlTransaction = 'db.sql.transaction';
10+
static const String dbSqlBatch = 'db.sql.batch';
11+
static const String dbOpen = 'db.open';
12+
static const String dbClose = 'db.close';
13+
}
14+
15+
@internal
16+
class SentrySpanData {
17+
static const String dbSystemKey = 'db.system';
18+
static const String dbNameKey = 'db.name';
19+
20+
static const String dbSystemSqlite = 'db.sqlite';
21+
}
22+
23+
@internal
24+
class SentrySpanDescriptions {
25+
static const String dbTransaction = 'Transaction';
26+
static String dbBatch({required List<String> statements}) =>
27+
'Batch $statements';
28+
static String dbOpen({required String dbName}) => 'Open database $dbName';
29+
static String dbClose({required String dbName}) => 'Close database $dbName';
30+
}

dart/lib/src/hint.dart

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import 'protocol/sentry_response.dart';
12
import 'sentry_attachment/sentry_attachment.dart';
2-
import 'sentry_options.dart';
3+
4+
import 'package:meta/meta.dart';
35

46
/// Hints are used in [BeforeSendCallback], [BeforeBreadcrumbCallback] and
57
/// event processors.
@@ -41,6 +43,9 @@ import 'sentry_options.dart';
4143
/// };
4244
/// ```
4345
class Hint {
46+
@internal
47+
static const maxResponseBodySize = 157286;
48+
4449
final Map<String, dynamic> _internalStorage = {};
4550

4651
final List<SentryAttachment> attachments = [];
@@ -49,6 +54,8 @@ class Hint {
4954

5055
SentryAttachment? viewHierarchy;
5156

57+
SentryResponse? response;
58+
5259
Hint();
5360

5461
factory Hint.withAttachment(SentryAttachment attachment) {
@@ -81,6 +88,12 @@ class Hint {
8188
return hint;
8289
}
8390

91+
factory Hint.withResponse(SentryResponse response) {
92+
final hint = Hint();
93+
hint.response = response;
94+
return hint;
95+
}
96+
8497
// Key/Value Storage
8598

8699
void addAll(Map<String, dynamic> keysAndValues) {

dart/lib/src/hub.dart

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -242,40 +242,6 @@ class Hub {
242242
return sentryId;
243243
}
244244

245-
@Deprecated(
246-
'Will be removed in a future version. Use [captureFeedback] instead')
247-
Future<void> captureUserFeedback(SentryUserFeedback userFeedback) async {
248-
if (!_isEnabled) {
249-
_options.logger(
250-
SentryLevel.warning,
251-
"Instance is disabled and this 'captureUserFeedback' call is a no-op.",
252-
);
253-
return;
254-
}
255-
if (userFeedback.eventId == SentryId.empty()) {
256-
_options.logger(
257-
SentryLevel.warning,
258-
'Captured UserFeedback with empty id, dropping the feedback',
259-
);
260-
return;
261-
}
262-
try {
263-
final item = _peek();
264-
265-
await item.client.captureUserFeedback(userFeedback);
266-
} catch (exception, stacktrace) {
267-
_options.logger(
268-
SentryLevel.error,
269-
'Error while capturing user feedback for ${userFeedback.eventId}',
270-
exception: exception,
271-
stackTrace: stacktrace,
272-
);
273-
if (_options.automatedTestMode) {
274-
rethrow;
275-
}
276-
}
277-
}
278-
279245
/// Captures the feedback.
280246
Future<SentryId> captureFeedback(
281247
SentryFeedback feedback, {

dart/lib/src/hub_adapter.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'scope.dart';
1111
import 'sentry.dart';
1212
import 'sentry_client.dart';
1313
import 'sentry_options.dart';
14-
import 'sentry_user_feedback.dart';
1514
import 'tracing.dart';
1615

1716
/// Hub adapter to make Integrations testable
@@ -112,12 +111,6 @@ class HubAdapter implements Hub {
112111
@override
113112
ISentrySpan? getSpan() => Sentry.currentHub.getSpan();
114113

115-
@override
116-
// ignore: deprecated_member_use_from_same_package
117-
Future<void> captureUserFeedback(SentryUserFeedback userFeedback) =>
118-
// ignore: deprecated_member_use_from_same_package
119-
Sentry.captureUserFeedback(userFeedback);
120-
121114
@override
122115
ISentrySpan startTransactionWithContext(
123116
SentryTransactionContext transactionContext, {

dart/lib/src/noop_hub.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import 'protocol/sentry_feedback.dart';
1010
import 'scope.dart';
1111
import 'sentry_client.dart';
1212
import 'sentry_options.dart';
13-
import 'sentry_user_feedback.dart';
1413
import 'tracing.dart';
1514

1615
class NoOpHub implements Hub {
@@ -86,10 +85,6 @@ class NoOpHub implements Hub {
8685
}) async =>
8786
SentryId.empty();
8887

89-
@override
90-
// ignore: deprecated_member_use_from_same_package
91-
Future<void> captureUserFeedback(SentryUserFeedback userFeedback) async {}
92-
9388
@override
9489
Future<SentryId> captureFeedback(
9590
SentryFeedback feedback, {

dart/lib/src/noop_sentry_client.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'scope.dart';
77
import 'sentry_client.dart';
88
import 'sentry_envelope.dart';
99
import 'sentry_trace_context_header.dart';
10-
import 'sentry_user_feedback.dart';
1110

1211
class NoOpSentryClient implements SentryClient {
1312
NoOpSentryClient._();
@@ -51,10 +50,6 @@ class NoOpSentryClient implements SentryClient {
5150
Future<SentryId> captureEnvelope(SentryEnvelope envelope) async =>
5251
SentryId.empty();
5352

54-
@override
55-
// ignore: deprecated_member_use_from_same_package
56-
Future<void> captureUserFeedback(SentryUserFeedback userFeedback) async {}
57-
5853
@override
5954
Future<void> close() async {}
6055

dart/lib/src/protocol/contexts.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,10 @@ class Contexts extends MapView<String, dynamic> {
137137

138138
set trace(SentryTraceContext? trace) => this[SentryTraceContext.type] = trace;
139139

140-
/// Response context for a HTTP response.
140+
/// Response context for a HTTP response. Not added automatically.
141141
SentryResponse? get response => this[SentryResponse.type];
142142

143+
/// Use [Hint.response] in `beforeSend/beforeSendTransaction` to populate this value.
143144
set response(SentryResponse? value) => this[SentryResponse.type] = value;
144145

145146
/// Feedback context for a feedback event.

0 commit comments

Comments
 (0)