Skip to content

feat(extension): [LW-7417] track manual re-sync and hd wallet discovery #712

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { useAnalyticsContext, useBackgroundServiceAPIContext } from '@providers'
import { useSearchParams, useObservable, Button } from '@lace/common';
import { walletRoutePaths } from '@routes/wallet-paths';
import { PostHogAction } from '@providers/AnalyticsProvider/analyticsTracker';
import uniq from 'lodash/uniq';

const { Title } = Typography;

Expand Down Expand Up @@ -58,7 +59,7 @@ export const SettingsWalletBase = <AdditionalDrawers extends string>({

const { t } = useTranslation();
const { addressesDiscoverer } = useAddressesDiscoverer();
const { environmentName, inMemoryWallet } = useWalletStore();
const { environmentName, inMemoryWallet, walletInfo } = useWalletStore();
const { AVAILABLE_CHAINS } = config();
const unspendable = useObservable(inMemoryWallet.balance.utxo.unspendable$);

Expand Down Expand Up @@ -116,7 +117,18 @@ export const SettingsWalletBase = <AdditionalDrawers extends string>({
<Button
size="medium"
className={styles.settingsButton}
onClick={() => addressesDiscoverer.discover()}
onClick={async () => {
analytics.sendEventToPostHog(PostHogAction.SettingsWalletHdWalletSyncSyncClick);

const oldHdAddressesCount = uniq((walletInfo?.addresses ?? []).map(({ index }) => index)).length;
const newAddresses = await addressesDiscoverer.discover();
const newHdAddressesCount = uniq(newAddresses.map(({ index }) => index)).length;
const newHdWalletAddressesDiscovered = newHdAddressesCount > oldHdAddressesCount;

if (newHdWalletAddressesDiscovered) {
analytics.sendEventToPostHog(PostHogAction.SettingsWalletHdWalletSyncSyncNewAddresses);
}
}}
block={popupView}
data-testid="settings-wallet-wallet-sync-cta"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { useTranslation } from 'react-i18next';
import {
AnalyticsEventNames,
EnhancedAnalyticsOptInStatus,
PostHogAction,
postHogOnboardingActions
} from '@providers/AnalyticsProvider/analyticsTracker';
import { config } from '@src/config';
Expand Down Expand Up @@ -174,6 +175,14 @@ export const HardwareWalletFlow = ({
setDoesUserAllowAnalytics(
isAnalyticsAccepted ? EnhancedAnalyticsOptInStatus.OptedIn : EnhancedAnalyticsOptInStatus.OptedOut
);
const addressDiscoverySubscriber = wallet.asyncKeyAgent.knownAddresses$.subscribe((addresses) => {
if (addresses.length === 0) return;
const hdWalletDiscovered = addresses.some((addr) => addr.index > 0);
if (hdWalletDiscovered) {
analytics.sendEventToPostHog(PostHogAction.OnboardingRestoreHdWallet);
}
addressDiscoverySubscriber.unsubscribe();
});
await analytics.setOptedInForEnhancedAnalytics(
isAnalyticsAccepted ? EnhancedAnalyticsOptInStatus.OptedIn : EnhancedAnalyticsOptInStatus.OptedOut
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { WarningModal } from '@src/views/browser-view/components/WarningModal';
import {
AnalyticsEventNames,
EnhancedAnalyticsOptInStatus,
PostHogAction,
postHogOnboardingActions,
UserTrackingType
} from '@providers/AnalyticsProvider/analyticsTracker';
Expand Down Expand Up @@ -290,6 +291,15 @@ export const WalletSetupWizard = ({
await analytics.setOptedInForEnhancedAnalytics(
isAnalyticsAccepted ? EnhancedAnalyticsOptInStatus.OptedIn : EnhancedAnalyticsOptInStatus.OptedOut
);
const addressDiscoverySubscriber = wallet.wallet.asyncKeyAgent.knownAddresses$.subscribe((addresses) => {
Copy link
Contributor Author

@refi93 refi93 Nov 7, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like this "wild" subscription in a component which basically triggers only after the onboarding flow is already finished/unmounted but it was the most sensible solution I could come up with, given the discovery happens asynchronously in the background :/ At least the posthog event is fired from within the WalletSetupWizard component

An alternative I considered was adding some flag in the wallet store to signal that the user has just onboarded and then based on it do the tracking from the top level component which determines whether to show the wallet to the user or wallet setup wizard but that seemed like an overkill for the sake of tracking and even uglier in the end

if (addresses.length === 0) return;
const hdWalletDiscovered = addresses.some((addr) => addr.index > 0);
if (setupType === SetupType.RESTORE && hdWalletDiscovered) {
analytics.sendEventToPostHog(PostHogAction.OnboardingRestoreHdWallet);
}
addressDiscoverySubscriber.unsubscribe();
});

if (setupType === SetupType.FORGOT_PASSWORD) {
deleteFromLocalStorage('isForgotPasswordFlow');
goToMyWallet(wallet);
Expand Down
3 changes: 3 additions & 0 deletions packages/common/src/analytics/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export enum PostHogAction {
OnboardingRestoreEnterPassphrase09NextClick = 'onboarding | restore wallet | enter passphrase #09 | next | click',
OnboardingRestoreEnterPassphrase17NextClick = 'onboarding | restore wallet | enter passphrase #17 | next | click',
OnboardingRestoreWalletNamePasswordNextClick = 'onboarding | restore wallet | wallet name & password | next | click',
OnboardingRestoreHdWallet = 'onboarding | restore wallet | hd wallet',
// Create new wallet
OnboardingCreateDoneGoToWallet = 'onboarding | new wallet | all done | go to my wallet | click',
OnboardingCreateAnalyticsAgreeClick = 'onboarding | new wallet | analytics | agree | click',
Expand Down Expand Up @@ -159,6 +160,8 @@ export enum PostHogAction {
SettingsAnalyticsAgreeClick = 'settings | analytics | agree | click',
SettingsAnalyticsSkipClick = 'settings | analytics | skip | click',
SettingsFaqsClick = 'settings | faqs | click',
SettingsWalletHdWalletSyncSyncClick = 'settings | wallet | hd wallet sync | sync | click',
SettingsWalletHdWalletSyncSyncNewAddresses = 'settings | wallet | hd wallet sync | sync | new addresses',
// Recieve section
ReceiveClick = 'receive | receive | click',
ReceiveCopyAddressIconClick = 'receive | receive | copy address icon | click',
Expand Down