From ef3e8fdc84b67045058ff4f2281178d1c53007e5 Mon Sep 17 00:00:00 2001 From: Christer Date: Wed, 12 Nov 2025 11:24:52 +0100 Subject: [PATCH 1/2] feat(cli_tools): Enable IP geotracking in analytics events --- packages/cli_tools/lib/src/analytics/analytics.dart | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/cli_tools/lib/src/analytics/analytics.dart b/packages/cli_tools/lib/src/analytics/analytics.dart index af0f9ce..9e437d9 100644 --- a/packages/cli_tools/lib/src/analytics/analytics.dart +++ b/packages/cli_tools/lib/src/analytics/analytics.dart @@ -19,21 +19,24 @@ class MixPanelAnalytics implements Analytics { static const _defaultTimeout = Duration(seconds: 2); final String _uniqueUserId; - final String _endpoint; final String _projectToken; final String _version; + + final String _endpoint; final Duration _timeout; MixPanelAnalytics({ required final String uniqueUserId, required final String projectToken, required final String version, - final String endpoint = _defaultEndpoint, + final String? endpoint, final Duration timeout = _defaultTimeout, + final bool disableIpTracking = false, }) : _uniqueUserId = uniqueUserId, _projectToken = projectToken, _version = version, - _endpoint = endpoint, + _endpoint = (endpoint ?? _defaultEndpoint) + + (disableIpTracking ? '?ip=0' : '?ip=1'), _timeout = timeout; @override From 41e7926df0f84f043851d16d4f94a1beced80b2e Mon Sep 17 00:00:00 2001 From: Christer Date: Wed, 12 Nov 2025 12:16:47 +0100 Subject: [PATCH 2/2] fix(cli_tools): Improved endpoint generation --- .../lib/src/analytics/analytics.dart | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/packages/cli_tools/lib/src/analytics/analytics.dart b/packages/cli_tools/lib/src/analytics/analytics.dart index 9e437d9..0fa718a 100644 --- a/packages/cli_tools/lib/src/analytics/analytics.dart +++ b/packages/cli_tools/lib/src/analytics/analytics.dart @@ -22,7 +22,7 @@ class MixPanelAnalytics implements Analytics { final String _projectToken; final String _version; - final String _endpoint; + final Uri _endpoint; final Duration _timeout; MixPanelAnalytics({ @@ -35,10 +35,28 @@ class MixPanelAnalytics implements Analytics { }) : _uniqueUserId = uniqueUserId, _projectToken = projectToken, _version = version, - _endpoint = (endpoint ?? _defaultEndpoint) + - (disableIpTracking ? '?ip=0' : '?ip=1'), + _endpoint = _buildEndpoint( + endpoint ?? _defaultEndpoint, + disableIpTracking, + ), _timeout = timeout; + static Uri _buildEndpoint( + final String baseEndpoint, + final bool disableIpTracking, + ) { + final uri = Uri.parse(baseEndpoint); + final ipValue = disableIpTracking ? '0' : '1'; + + final updatedUri = uri.replace( + queryParameters: { + ...uri.queryParameters, + 'ip': ipValue, + }, + ); + return updatedUri; + } + @override void cleanUp() {} @@ -74,7 +92,7 @@ class MixPanelAnalytics implements Analytics { Future _quietPost(final String payload) async { try { await http.post( - Uri.parse(_endpoint), + _endpoint, body: 'data=$payload', headers: { 'Accept': 'text/plain',