From 7ae9e396703255c372b928c7fbb3ef7c63784c5a Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 23 Apr 2025 13:39:50 +0200 Subject: [PATCH 1/7] Add sendDefaultPii --- .../kotlin/multiplatform/PlatformOptions.android.kt | 3 +++ .../kotlin/multiplatform/PlatformOptions.apple.kt | 3 +++ .../io/sentry/kotlin/multiplatform/SentryOptions.kt | 10 ++++++++++ .../io/sentry/kotlin/multiplatform/PlatformOptions.kt | 1 + .../sentry/kotlin/multiplatform/SentryOptionsTest.kt | 2 ++ 5 files changed, 19 insertions(+) diff --git a/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt b/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt index 02a7e439..76e6cc57 100644 --- a/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt +++ b/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt @@ -73,6 +73,9 @@ class SentryAndroidOptionsWrapper(private val androidOptions: SentryAndroidOptio override val sessionReplay: AndroidSentryReplayOptions get() = androidOptions.sessionReplay + override val sendDefaultPii: Boolean + get() = androidOptions.isSendDefaultPii + override fun applyFromOptions(options: SentryOptions) { options.toAndroidSentryOptionsCallback().invoke(androidOptions) } diff --git a/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt b/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt index 5c9891d7..47bcd12f 100644 --- a/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt +++ b/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt @@ -54,6 +54,9 @@ open class SentryAppleOptionsWrapper(private val cocoaOptions: CocoaSentryOption override val diagnosticLevel: SentryLevel get() = cocoaOptions.diagnosticLevel.toKmpSentryLevel()!! + override val sendDefaultPii: Boolean + get() = cocoaOptions.sendDefaultPii + override fun applyFromOptions(options: SentryOptions) { options.toCocoaOptionsConfiguration().invoke(cocoaOptions) } diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 9f59f3a9..66d658ae 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -191,6 +191,16 @@ public open class SentryOptions { */ public var sessionReplay: SentryReplayOptions = SentryReplayOptions() + /** + * Set this option to true to send default PII data to Sentry. + * Among other things, enabling this will enable automatic IP address collection on events. + * + * For further details, refer to the documentation in the respective native SDKs: + * - [Cocoa](https://docs.sentry.io/platforms/apple/data-management/data-collected/) + * - [Android](https://docs.sentry.io/platforms/android/data-management/data-collected/) + */ + public var sendDefaultPii: Boolean = false + /** * Experimental options for new features, these options are going to be promoted to SentryOptions * before GA. diff --git a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt index b89952f9..c34aa6ba 100644 --- a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt @@ -14,6 +14,7 @@ interface CommonPlatformOptions { val maxAttachmentSize: Long val sampleRate: Double? val tracesSampleRate: Double? + val sendDefaultPii: Boolean fun applyFromOptions(options: SentryOptions) } diff --git a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt index 40b7b431..2bb260f3 100644 --- a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt +++ b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt @@ -133,6 +133,7 @@ class SentryOptionsTest : BaseSentryTest() { assertTrue(options.sessionReplay.maskAllImages) assertEquals(SentryReplayOptions.Quality.MEDIUM, options.sessionReplay.quality) assertTrue(options.enableWatchdogTerminationTracking) + assertFalse(options.sendDefaultPii) } @Test @@ -163,6 +164,7 @@ class SentryOptionsTest : BaseSentryTest() { sessionReplay.maskAllText = false sessionReplay.maskAllImages = false sessionReplay.quality = SentryReplayOptions.Quality.LOW + sendDefaultPii = true } val platformOptions = createPlatformOptions() From b07d321357f709bac0c17e58edf9feeeab5ca820 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 23 Apr 2025 14:09:46 +0200 Subject: [PATCH 2/7] Add sendDefaultPii --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eed1e432..39f1a79e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Feature + +- Add `sendDefaultPii` option ([#377](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/377)) + ## 0.12.0 ### Feature From 10b150db729ded394e7a1b0556fa4b08c25fc198 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 23 Apr 2025 14:33:36 +0200 Subject: [PATCH 3/7] Api dump --- .../api/android/sentry-kotlin-multiplatform.api | 2 ++ .../api/jvm/sentry-kotlin-multiplatform.api | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api index e479b79a..cab31bff 100644 --- a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api @@ -185,6 +185,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun getRelease ()Ljava/lang/String; public final fun getSampleRate ()Ljava/lang/Double; public final fun getSdk ()Lio/sentry/kotlin/multiplatform/protocol/SdkVersion; + public final fun getSendDefaultPii ()Z public final fun getSessionReplay ()Lio/sentry/kotlin/multiplatform/SentryReplayOptions; public final fun getSessionTrackingIntervalMillis ()J public final fun getTracesSampleRate ()Ljava/lang/Double; @@ -214,6 +215,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun setRelease (Ljava/lang/String;)V public final fun setSampleRate (Ljava/lang/Double;)V public final fun setSdk (Lio/sentry/kotlin/multiplatform/protocol/SdkVersion;)V + public final fun setSendDefaultPii (Z)V public final fun setSessionReplay (Lio/sentry/kotlin/multiplatform/SentryReplayOptions;)V public final fun setSessionTrackingIntervalMillis (J)V public final fun setTracesSampleRate (Ljava/lang/Double;)V diff --git a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api index e0779801..d122843d 100644 --- a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api @@ -182,6 +182,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun getRelease ()Ljava/lang/String; public final fun getSampleRate ()Ljava/lang/Double; public final fun getSdk ()Lio/sentry/kotlin/multiplatform/protocol/SdkVersion; + public final fun getSendDefaultPii ()Z public final fun getSessionReplay ()Lio/sentry/kotlin/multiplatform/SentryReplayOptions; public final fun getSessionTrackingIntervalMillis ()J public final fun getTracesSampleRate ()Ljava/lang/Double; @@ -211,6 +212,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun setRelease (Ljava/lang/String;)V public final fun setSampleRate (Ljava/lang/Double;)V public final fun setSdk (Lio/sentry/kotlin/multiplatform/protocol/SdkVersion;)V + public final fun setSendDefaultPii (Z)V public final fun setSessionReplay (Lio/sentry/kotlin/multiplatform/SentryReplayOptions;)V public final fun setSessionTrackingIntervalMillis (J)V public final fun setTracesSampleRate (Ljava/lang/Double;)V From 81231610535be5352715d678c2e1fda70e149071 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 23 Apr 2025 15:33:40 +0200 Subject: [PATCH 4/7] Fix test --- .../io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt b/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt index 7a3afecf..48eac5a8 100644 --- a/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt +++ b/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt @@ -46,6 +46,9 @@ class SentryJvmOptionsWrapper(private val jvmOptions: JvmSentryOptions) : Platfo override val diagnosticLevel: SentryLevel get() = jvmOptions.diagnosticLevel.toKmpSentryLevel()!! + override val sendDefaultPii: Boolean + get() = jvmOptions.isSendDefaultPii + override fun applyFromOptions(options: SentryOptions) { options.toJvmSentryOptionsCallback().invoke(jvmOptions) } From 55dfc740132224c3e61a0960f6bd98c0aa559329 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 24 Apr 2025 11:00:14 +0200 Subject: [PATCH 5/7] Update --- .../multiplatform/extensions/SentryOptionsExtensions.apple.kt | 1 + .../multiplatform/extensions/SentryOptionsExtensions.jvm.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt index d7c488a0..77ce7d0c 100644 --- a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt +++ b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt @@ -23,6 +23,7 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(kmpOptions: SentryOptions) kmpOptions.environment?.let { cocoaOptions.environment = it } + cocoaOptions.sendDefaultPii = kmpOptions.sendDefaultPii cocoaOptions.releaseName = kmpOptions.release cocoaOptions.debug = kmpOptions.debug cocoaOptions.sessionTrackingIntervalMillis = kmpOptions.sessionTrackingIntervalMillis.convert() diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt index 2f42adac..2caf8d6e 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt @@ -23,6 +23,7 @@ internal fun JvmSentryOptions.applyJvmBaseOptions(kmpOptions: SentryOptions) { jvmOptions.isAttachStacktrace = kmpOptions.attachStackTrace jvmOptions.dist = kmpOptions.dist jvmOptions.environment = kmpOptions.environment + jvmOptions.isSendDefaultPii = kmpOptions.sendDefaultPii jvmOptions.release = kmpOptions.release jvmOptions.isDebug = kmpOptions.debug jvmOptions.sessionTrackingIntervalMillis = kmpOptions.sessionTrackingIntervalMillis From e205dece845df5ccd74407e5f8730c2da3cd6c6f Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 24 Apr 2025 11:05:52 +0200 Subject: [PATCH 6/7] Update docs --- .../kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 66d658ae..59cfd113 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -192,9 +192,11 @@ public open class SentryOptions { public var sessionReplay: SentryReplayOptions = SentryReplayOptions() /** - * Set this option to true to send default PII data to Sentry. + * If this flag is enabled, certain personally identifiable information (PII) is added by active integrations. * Among other things, enabling this will enable automatic IP address collection on events. * + * If you enable this option, be sure to manually remove what you don't want to send using our features for managing sensitive data. + * * For further details, refer to the documentation in the respective native SDKs: * - [Cocoa](https://docs.sentry.io/platforms/apple/data-management/data-collected/) * - [Android](https://docs.sentry.io/platforms/android/data-management/data-collected/) From b85add6d54eb18099736e602f154f3acdd3d36da Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 24 Apr 2025 11:12:21 +0200 Subject: [PATCH 7/7] Fix analyze --- .../kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 59cfd113..124fa0d3 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -195,7 +195,8 @@ public open class SentryOptions { * If this flag is enabled, certain personally identifiable information (PII) is added by active integrations. * Among other things, enabling this will enable automatic IP address collection on events. * - * If you enable this option, be sure to manually remove what you don't want to send using our features for managing sensitive data. + * If you enable this option, be sure to manually remove what you don't want to send using + * our features for managing sensitive data. * * For further details, refer to the documentation in the respective native SDKs: * - [Cocoa](https://docs.sentry.io/platforms/apple/data-management/data-collected/)