Skip to content

Commit 3e379f0

Browse files
committed
Query zerion stats for mixpanel analytics
1 parent aa8c406 commit 3e379f0

File tree

2 files changed

+52
-7
lines changed

2 files changed

+52
-7
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { QueryClient } from '@tanstack/react-query';
2+
3+
export const backgroundQueryClient = new QueryClient();

src/shared/analytics/shared/mixpanel-data-helpers.ts

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import type { Account } from 'src/background/account/Account';
22
import { getAddressActivity } from 'src/ui/shared/requests/useAddressActivity';
33
import { INTERNAL_SYMBOL_CONTEXT } from 'src/background/Wallet/Wallet';
44
import { isReadonlyContainer } from 'src/shared/types/validators';
5+
import { ZerionAPI } from 'src/modules/zerion-api/zerion-api';
6+
import { backgroundQueryClient } from 'src/modules/query-client/query-client.background';
57
import { getAddressesPortfolio } from './getTotalWalletsBalance';
68

79
async function getFundedWalletsCount(addresses: string[]) {
@@ -33,6 +35,44 @@ async function getPortfolioStats(addresses: string[]) {
3335
});
3436
}
3537

38+
async function getZerionStats(addresses: string[]) {
39+
const response = await backgroundQueryClient.fetchQuery({
40+
queryKey: ['ZerionAPI.getWalletsMeta', addresses],
41+
queryFn: () => ZerionAPI.getWalletsMeta({ identifiers: addresses }),
42+
staleTime: 1000 * 60 * 60 * 12, // HALF A DAY
43+
});
44+
if (!response.data) {
45+
return null;
46+
}
47+
const stats = {
48+
zerion_premium_holder: false,
49+
og_dna_premium_holder: false,
50+
dna_holder: false,
51+
};
52+
for (const item of response.data) {
53+
if (item.membership.premium) {
54+
stats.zerion_premium_holder = true;
55+
}
56+
if (item.membership.premium?.features.early_access) {
57+
// TODO: make sure this is the right check
58+
stats.og_dna_premium_holder = true;
59+
}
60+
61+
if (item.membership.tokens?.length) {
62+
stats.dna_holder = true;
63+
}
64+
if (
65+
stats.dna_holder &&
66+
stats.og_dna_premium_holder &&
67+
stats.zerion_premium_holder
68+
) {
69+
// No need to make further checks
70+
break;
71+
}
72+
}
73+
return stats;
74+
}
75+
3676
export async function getBaseMixpanelParams(account: Account) {
3777
const getUserId = () => account.getUser()?.id;
3878
const apiLayer = account.getCurrentWallet();
@@ -56,10 +96,12 @@ export async function getBaseMixpanelParams(account: Account) {
5696
);
5797
const userId = getUserId();
5898

59-
const portfolioStats =
60-
ownedAddresses && ownedAddresses.length
61-
? await getPortfolioStats(ownedAddresses)
62-
: null;
99+
const portfolioStats = ownedAddresses?.length
100+
? await getPortfolioStats(ownedAddresses)
101+
: null;
102+
const zerionStats = ownedAddresses?.length
103+
? await getZerionStats(ownedAddresses)
104+
: null;
63105
return {
64106
$user_id: userId,
65107
num_favourite_tokens: 0,
@@ -78,8 +120,8 @@ export async function getBaseMixpanelParams(account: Account) {
78120
total_balance: portfolioStats?.totalValue ?? 0,
79121
currency: 'usd',
80122
language: 'en',
81-
zerion_premium_holder: /* todo */ false,
82-
og_dna_premium_holder: /* todo */ false,
83-
dna_holder: /* todo */ false,
123+
zerion_premium_holder: zerionStats?.zerion_premium_holder ?? false,
124+
og_dna_premium_holder: zerionStats?.og_dna_premium_holder ?? false,
125+
dna_holder: zerionStats?.dna_holder ?? false,
84126
};
85127
}

0 commit comments

Comments
 (0)