68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import useMangoAccount from './useMangoAccount'
|
|
import { useWallet } from '@solana/wallet-adapter-react'
|
|
import { WHITE_LIST_API } from 'utils/constants'
|
|
import useMangoGroup from './useMangoGroup'
|
|
import { useCallback, useMemo } from 'react'
|
|
|
|
export default function useAnalytics() {
|
|
const { group } = useMangoGroup()
|
|
const { mangoAccountAddress, mangoAccount } = useMangoAccount()
|
|
const { publicKey } = useWallet()
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
const ignoredMints = [
|
|
'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So',
|
|
'So11111111111111111111111111111111111111112',
|
|
'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
|
|
'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1',
|
|
'7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn',
|
|
'7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj',
|
|
]
|
|
const banks = useMemo(() => {
|
|
return group && mangoAccount
|
|
? [...group.banksMapByMint.values()].filter(
|
|
(x) =>
|
|
x.length &&
|
|
x[0] &&
|
|
x[0].collateralFeePerDay > 0 &&
|
|
!ignoredMints.includes(x[0].mint.toBase58()) &&
|
|
mangoAccount.getTokenBalanceUi(x[0]) * x[0].uiPrice > 10000,
|
|
)
|
|
: []
|
|
}, [group, ignoredMints, mangoAccount])
|
|
|
|
const sendAnalytics = useCallback(
|
|
async (data: object, tag: string) => {
|
|
if (
|
|
publicKey?.toBase58() &&
|
|
tag &&
|
|
data &&
|
|
mangoAccountAddress &&
|
|
banks.length
|
|
) {
|
|
const enchantedData = JSON.stringify({
|
|
mangoAccountAddress: mangoAccountAddress,
|
|
...data,
|
|
})
|
|
|
|
await fetch(`${WHITE_LIST_API}analytics/add`, {
|
|
method: 'POST',
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
wallet: publicKey.toBase58(),
|
|
data: enchantedData,
|
|
tag: tag,
|
|
}),
|
|
})
|
|
}
|
|
},
|
|
[banks, mangoAccountAddress, publicKey],
|
|
)
|
|
|
|
return {
|
|
sendAnalytics,
|
|
}
|
|
}
|