Files
trezor-suite/suite-native/analytics/src/analyticsThunks.ts
Matej Kriz dfd609f5ef feat(sentry): filter sentry events by allowReportTag same as on desktop
- Allow to report only redacted event before info about user confirmation of analytics is loaded or during initial lunch before we even asked user to allow analytics.
2025-04-11 22:29:13 +02:00

77 lines
2.5 KiB
TypeScript

import {
analyticsActions,
selectAnalyticsInstanceId,
selectHasUserAllowedTracking,
selectIsAnalyticsConfirmed,
selectIsAnalyticsEnabled,
} from '@suite-common/analytics';
import { createThunk } from '@suite-common/redux-utils';
import { isDevelopEnv } from '@suite-native/config';
import { allowSentryReport, setSentryUser } from '@suite-native/sentry';
import { getTrackingRandomId } from '@trezor/analytics';
import { getCommitHash } from '@trezor/env-utils';
import { analytics } from './analytics';
import { EventType } from './constants';
const ACTION_PREFIX = '@suite-native/analytics';
export const enableAnalyticsThunk = createThunk(
`${ACTION_PREFIX}/enableAnalyticsThunk`,
(_, { dispatch }) => {
analytics.report({
type: EventType.SettingsDataPermission,
payload: { analyticsPermission: true },
});
allowSentryReport(true);
dispatch(analyticsActions.enableAnalytics());
},
);
export const disableAnalyticsThunk = createThunk(
`${ACTION_PREFIX}/disableAnalyticsThunk`,
(_, { dispatch }) => {
analytics.report(
{ type: EventType.SettingsDataPermission, payload: { analyticsPermission: false } },
{ force: true },
);
allowSentryReport(false);
dispatch(analyticsActions.disableAnalytics());
},
);
export const initAnalyticsThunk = createThunk(
`${ACTION_PREFIX}/init`,
(_, { dispatch, getState }) => {
const sessionId = getTrackingRandomId();
const instanceId = selectAnalyticsInstanceId(getState()) ?? getTrackingRandomId();
const userAllowedTracking = selectHasUserAllowedTracking(getState());
const isAnalyticsEnabled = selectIsAnalyticsEnabled(getState());
const isAnalyticsConfirmed = selectIsAnalyticsConfirmed(getState());
analytics.init(userAllowedTracking, {
instanceId,
sessionId,
environment: 'mobile',
commitId: getCommitHash(),
isDev: isDevelopEnv(),
callbacks: {
onEnable: () => dispatch(enableAnalyticsThunk()),
onDisable: () => dispatch(disableAnalyticsThunk()),
},
});
allowSentryReport(!!userAllowedTracking);
dispatch(
analyticsActions.initAnalytics({
instanceId,
sessionId,
enabled: isAnalyticsEnabled,
confirmed: isAnalyticsConfirmed,
}),
);
},
);