feat(suite): Divide analytics to relevant packages refactor(suite): Split suite-common/analytics fix(suite): Fix errors fix(suite): Update codeowners fix(suite): Fix undefined in event attributes fix(suite): Fix suite-native tests chore: split Services for Native vs Desktop refactor(suite): Polish @suite-common/analytics refactor(suite): Polish @suite/analytics and @suite-native/analytics refactor(suite): Add analytics and legacyAnalytics to extraDependencies refactor(suite): add useAnalytics and useLegacyAnalytics for desktop/native refactor(suite): use analytics reporting in thunks refactor(suite): fix naming and event type refactor(suite): Refactor existing analytics reporting refactor(suite): Refactor existing analytics reporting refactor(suite): Refactor existing analytics reporting in actions refactor(suite): Delete generate docs refactor(suite): Fix analytics in middleware refactor(suite): Refactor useLegacyAnalytics for suite native fix(suite): Fix errors fix(suite): Fix errors fix(suite): Fix issues from code review fix(suite): Fix side effect in guideActions refactor(suite): Create getTypedNativeLegacyAnalytics and getTypedDesktopLegacyAnalytics fix(suite): Fix type errors refactor(suite): Extract types from suite-common/analytics to separated package fix(suite): Fix bugs fix: missing shared legacy analytics type in desktop analytics type fix(suite): Fix errors refactor(suite): Refactor useLegacyAnalytics and useAnalytics to new package structure fix(suite): Fix depchecks fix(suite): Fix yarnlock and depchecks fix(suite): Update project refs WIP fix: desktop services typing from extra WIP # Conflicts: # packages/suite/src/hooks/suite/useLabelingCombined.ts # suite-native/app/src/navigation/AppTabNavigator.tsx # Conflicts: # packages/suite-desktop-ui/package.json # packages/suite-desktop-ui/src/support/DesktopUpdater/EarlyAccessDisable.tsx # packages/suite-desktop-ui/src/support/DesktopUpdater/EarlyAccessEnable.tsx # packages/suite-desktop-ui/tsconfig.json # packages/suite/src/actions/suite/suiteActions.ts # packages/suite/src/components/connection/BluetoothConnectionModal.tsx # packages/suite/src/components/connection/CantSeeTrezorModal.tsx # packages/suite/src/components/connection/ConnectDeviceGlobalModal.tsx # packages/suite/src/components/guide/Feedback.tsx # packages/suite/src/components/guide/Guide.tsx # packages/suite/src/components/guide/SupportFeedbackSelection.tsx # packages/suite/src/components/suite/PrerequisitesGuide/DeviceConnect.tsx # packages/suite/src/components/suite/bluetooth/BluetoothDeviceListItem.tsx # packages/suite/src/components/suite/layouts/SuiteLayout/PageHeader/GlobalSendReceive/GlobalReceiveModal/GlobalReceiveModal.tsx # packages/suite/src/components/suite/layouts/SuiteLayout/PageHeader/GlobalSendReceive/GlobalSendReceiveButtons.tsx # packages/suite/src/components/suite/layouts/SuiteLayout/PageHeader/HeaderDropdown.tsx # packages/suite/src/components/suite/layouts/SuiteLayout/PageHeader/TradeActions.tsx # packages/suite/src/components/suite/modals/ReduxModal/ConfirmValueModal/ConfirmValueModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/TransactionReviewModal/TransactionReviewModalBodyInner.tsx # packages/suite/src/components/suite/modals/ReduxModal/TransactionReviewModal/TransactionReviewOutputList/TransactionReviewModalBottomContent.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/AddAccountModal/AddAccountButton/AddAccountButton.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/AddTokenModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ApproveModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/AutoStartBeforeQuitModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ClaimModal/ClaimModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ConfirmUnverifiedModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/ConnectPermissionsModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/MultiShareBackupModal/MultiShareBackupModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/RevokeModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/StellarManageTokenModal.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/UnstakeModal/UnstakeForm/UnstakeButton.tsx # packages/suite/src/components/suite/modals/ReduxModal/UserContextModal/UnstakeModal/UnstakeModal.tsx # packages/suite/src/components/wallet/WalletLayout/AccountBanners/StakingBanner.tsx # packages/suite/src/components/wallet/WalletLayout/AccountTopPanel/AccountNavigation.tsx # packages/suite/src/hooks/settings/backends/useBackendsForm.ts # packages/suite/src/hooks/suite/useChangeDeviceLabel.ts # packages/suite/src/hooks/wallet/trading/form/useTradingExchangeForm.ts # packages/suite/src/hooks/wallet/trading/form/useTradingSellForm.ts # packages/suite/src/views/dashboard/AssetsView/AssetCard/AssetCard.tsx # packages/suite/src/views/dashboard/AssetsView/AssetTable/AssetRow.tsx # packages/suite/src/views/dashboard/DashboardFooter.tsx # packages/suite/src/views/dashboard/StakingDashboard/StakingDashboardAccountRow.tsx # packages/suite/src/views/onboarding/steps/DeviceAuthenticityStep/SecurityCheck.tsx # packages/suite/src/views/settings/SettingsDevice/AutoLock.tsx # packages/suite/src/views/settings/SettingsDevice/Brightness.tsx # packages/suite/src/views/settings/SettingsDevice/ChangePin.tsx # packages/suite/src/views/settings/SettingsDevice/DisplayRotation.tsx # packages/suite/src/views/settings/SettingsDevice/ForgetDevice.tsx # packages/suite/src/views/settings/SettingsDevice/HapticFeedback.tsx # packages/suite/src/views/settings/SettingsDevice/MultiShareBackup.tsx # packages/suite/src/views/settings/SettingsDevice/Passphrase.tsx # packages/suite/src/views/settings/SettingsDevice/PinProtection.tsx # packages/suite/src/views/settings/SettingsDevice/ThpAutoconnect.tsx # packages/suite/src/views/settings/SettingsDevice/WipeCode.tsx # packages/suite/src/views/settings/SettingsDevice/WipeDevice/WipeDeviceModal.tsx # packages/suite/src/views/settings/SettingsGeneral/AddressDisplay.tsx # packages/suite/src/views/settings/SettingsGeneral/AutoEject.tsx # packages/suite/src/views/settings/SettingsGeneral/BaseCurrency.tsx # packages/suite/src/views/settings/SettingsGeneral/BioAuthSettings.tsx # packages/suite/src/views/settings/SettingsGeneral/DesktopSuiteBanner.tsx # packages/suite/src/views/settings/SettingsGeneral/Labeling.tsx # packages/suite/src/views/settings/SettingsGeneral/Language.tsx # packages/suite/src/views/settings/SettingsGeneral/MevProtection.tsx # packages/suite/src/views/settings/SettingsGeneral/NetworkReserve.tsx # packages/suite/src/views/settings/SettingsGeneral/Theme.tsx # packages/suite/src/views/settings/SettingsGeneral/TorOnionLinks.tsx # packages/suite/src/views/suite/SwitchDevice/DeviceItem/EjectConfirmation.tsx # packages/suite/src/views/suite/SwitchDevice/SwitchDevice.tsx # packages/suite/src/views/wallet/send/Outputs/Address.tsx # packages/suite/src/views/wallet/send/SendRaw.tsx # packages/suite/src/views/wallet/staking/components/StakingDashboard/components/ClaimCard.tsx # packages/suite/src/views/wallet/staking/components/StakingDashboard/components/EmptyStakingCard.tsx # packages/suite/src/views/wallet/staking/components/StakingDashboard/components/NewProviderCard.tsx # packages/suite/src/views/wallet/staking/components/StakingDashboard/components/StakingCard.tsx # packages/suite/src/views/wallet/tokens/TokensNavigation.tsx # packages/suite/src/views/wallet/tokens/common/TokensTable/TokenRow.tsx # packages/suite/src/views/wallet/trading/common/TradingDetail/TradingDetailBuy/TradingDetailBuy.tsx # packages/suite/src/views/wallet/trading/common/TradingDetail/TradingDetailExchange/TradingDetailExchange.tsx # packages/suite/src/views/wallet/trading/common/TradingDetail/TradingDetailSell/TradingDetailSell.tsx # packages/suite/src/views/wallet/trading/common/TradingForm/TradingFormApproval.tsx # packages/suite/src/views/wallet/trading/common/TradingLayout/TradingLayoutNavigation.tsx # packages/suite/src/views/wallet/trading/common/TradingSelectedOffer/TradingOfferExchange/TradingOfferExchange.tsx # packages/suite/src/views/wallet/trading/common/TradingSelectedOffer/TradingOfferSell/TradingOfferSellTransaction.tsx # packages/suite/src/views/wallet/transactions/TradeBox/TradeBox.tsx # packages/suite/src/views/wallet/transactions/TransactionList/TransactionListActions/ExportAction.tsx # packages/suite/src/views/wallet/transactions/components/AccountEmpty.tsx # suite/e2e/package.json # suite/e2e/tsconfig.json # yarn.lock
Suite Analytics
This is the shared analytics package for Trezor Suite, containing all event types used across the app. It is designed to work in both web and native (mobile) environments.
Depending on your environment, you can choose one of the following packages, each with its own set of events:
// @TODO
| Package | Environment | Events Defined In |
|---|---|---|
@suite-common/analytics |
@suite-common |
./src/events/shared |
@suite/analytics |
@trezor/suite |
./src/events/suite |
@suite-native/analytics |
@suite-native |
./src/events/suite-native |
More details can be found in the company Notion where implemented events with expected attributes and other notes related to analytics can be found.
Tracking
Data from production builds (codesign branch) should be sent to:
- Desktop build: https://data.trezor.io/suite/log/desktop/stable.log
- Web build: https://data.trezor.io/suite/log/web/stable.log
- Mobile build: https://data.trezor.io/suite/log/mobile/stable.log
Data from development builds should be sent to:
- Desktop build: https://data.trezor.io/suite/log/desktop/develop.log
- Web build: https://data.trezor.io/suite/log/web/develop.log
- Mobile build: https://data.trezor.io/suite/log/mobile/develop.log
Add/Modify event
In case a new event has to be added or an old one has to be modified, please follow the following subsections.
What to track
Navigation between pages is not required to be tracked as it is tracked automatically by router/location-change event. However, a case when it is good to track it is when a user can get to the same location using different methods (e.g. two different buttons on the same page). All other user actions without sensitive info can be tracked. If you are in doubt, please contact our analyst.
Type declaration
All events and their properties should be declared in src/events/suite/types.ts (or in the corresponding directory for other environments).
Event types should be declared in the EventType enum in src/events/suite/constants.ts.
Supplementary types can be declared in src/events/suite/definitions.ts.
Reporting in code
To report an event, import analytics from the package based on your environment and initialize analytics (as soon as app starts).
// Desktop/web
import { analytics } from '@suite/analytics';
// Suite Native
import { analytics } from '@suite-native/analytics';
// Suite Common
import { analytics } from '@suite-common/analytics';
analytics.init(enabled, {
instanceId,
sessionId,
environment,
commitId,
isDev,
callbacks: {
onEnable: () => ...,
onDisable: () => ...,
},
});
After that, you can use report method anywhere in your project scope.
// @TODO fix docs
analytics.report({
type: 'event',
payload: {
attribute: attributeValue,
},
});
Versioning
From Suite version 22.10.1, analytics uses Suite versioning. That means, that analytics version will change even if there are no changes in analytics changelog. However, there can be changes in Suite functionality, which can also change behavior of analytics.
Changelog
Add a record of change to Notion. Please use a format of previous records.
Company table
Add event to the analytics overview in the Company Notion.
How to check that events are tracked?
- Option: Open DevTools, navigate to Network tab, filter traffic by
.logand check the Query String Parameters section - Option: Get access to Keboola via access form (link in company Notion)
- Option: Create a modified build of app with an analytics server URL pointing to your server
Suite Native:
- Option: Set the environment variable
EXPO_PUBLIC_IS_ANALYTICS_LOGGER_ENABLED=trueand run the app. The logs will be printed to the console.