@mezo-org/passport 0.4.0-dev.2 → 0.4.0-dev.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/README.md +18 -22
  2. package/dist/src/api/auth.d.ts +57 -52
  3. package/dist/src/api/auth.d.ts.map +1 -1
  4. package/dist/src/api/auth.js +22 -53
  5. package/dist/src/api/auth.js.map +1 -1
  6. package/dist/src/api/client.d.ts +24 -0
  7. package/dist/src/api/client.d.ts.map +1 -0
  8. package/dist/src/api/client.js +54 -0
  9. package/dist/src/api/client.js.map +1 -0
  10. package/dist/src/api/fetch-error.d.ts +5 -0
  11. package/dist/src/api/fetch-error.d.ts.map +1 -0
  12. package/dist/src/api/fetch-error.js +8 -0
  13. package/dist/src/api/fetch-error.js.map +1 -0
  14. package/dist/src/api/index.d.ts +3 -0
  15. package/dist/src/api/index.d.ts.map +1 -0
  16. package/dist/src/api/index.js +3 -0
  17. package/dist/src/api/index.js.map +1 -0
  18. package/dist/src/api/portal.d.ts +33 -0
  19. package/dist/src/api/portal.d.ts.map +1 -0
  20. package/dist/src/api/portal.js +23 -0
  21. package/dist/src/api/portal.js.map +1 -0
  22. package/dist/src/assets/DefaultAvatar.d.ts +5 -0
  23. package/dist/src/assets/DefaultAvatar.d.ts.map +1 -0
  24. package/dist/src/assets/DefaultAvatar.js +21 -0
  25. package/dist/src/assets/DefaultAvatar.js.map +1 -0
  26. package/dist/src/components/Dropdown/ConnectedTrigger.d.ts +8 -0
  27. package/dist/src/components/Dropdown/ConnectedTrigger.d.ts.map +1 -0
  28. package/dist/src/components/Dropdown/ConnectedTrigger.js +39 -0
  29. package/dist/src/components/Dropdown/ConnectedTrigger.js.map +1 -0
  30. package/dist/src/components/Dropdown/Content.d.ts +23 -0
  31. package/dist/src/components/Dropdown/Content.d.ts.map +1 -0
  32. package/dist/src/components/Dropdown/Content.js +27 -0
  33. package/dist/src/components/Dropdown/Content.js.map +1 -0
  34. package/dist/src/components/Dropdown/DisconnectedTrigger.d.ts +7 -0
  35. package/dist/src/components/Dropdown/DisconnectedTrigger.d.ts.map +1 -0
  36. package/dist/src/components/Dropdown/DisconnectedTrigger.js +13 -0
  37. package/dist/src/components/Dropdown/DisconnectedTrigger.js.map +1 -0
  38. package/dist/src/components/Dropdown/Dropdown.d.ts +23 -0
  39. package/dist/src/components/Dropdown/Dropdown.d.ts.map +1 -0
  40. package/dist/src/components/Dropdown/Dropdown.js +65 -0
  41. package/dist/src/components/Dropdown/Dropdown.js.map +1 -0
  42. package/dist/src/components/Dropdown/ListingItem.d.ts +13 -0
  43. package/dist/src/components/Dropdown/ListingItem.d.ts.map +1 -0
  44. package/dist/src/components/Dropdown/ListingItem.js +34 -0
  45. package/dist/src/components/Dropdown/ListingItem.js.map +1 -0
  46. package/dist/src/components/Dropdown/NestedViewLayout.d.ts +7 -0
  47. package/dist/src/components/Dropdown/NestedViewLayout.d.ts.map +1 -0
  48. package/dist/src/components/Dropdown/NestedViewLayout.js +34 -0
  49. package/dist/src/components/Dropdown/NestedViewLayout.js.map +1 -0
  50. package/dist/src/components/Dropdown/Receive/Receive.d.ts +7 -0
  51. package/dist/src/components/Dropdown/Receive/Receive.d.ts.map +1 -0
  52. package/dist/src/components/Dropdown/Receive/Receive.js +53 -0
  53. package/dist/src/components/Dropdown/Receive/Receive.js.map +1 -0
  54. package/dist/src/components/Dropdown/Root/AccountAddressActions.d.ts +7 -0
  55. package/dist/src/components/Dropdown/Root/AccountAddressActions.d.ts.map +1 -0
  56. package/dist/src/components/Dropdown/Root/AccountAddressActions.js +48 -0
  57. package/dist/src/components/Dropdown/Root/AccountAddressActions.js.map +1 -0
  58. package/dist/src/components/Dropdown/Root/AccountAssetItem.d.ts +11 -0
  59. package/dist/src/components/Dropdown/Root/AccountAssetItem.d.ts.map +1 -0
  60. package/dist/src/components/Dropdown/Root/AccountAssetItem.js +9 -0
  61. package/dist/src/components/Dropdown/Root/AccountAssetItem.js.map +1 -0
  62. package/dist/src/components/Dropdown/Root/AccountBalance.d.ts +8 -0
  63. package/dist/src/components/Dropdown/Root/AccountBalance.d.ts.map +1 -0
  64. package/dist/src/components/Dropdown/Root/AccountBalance.js +15 -0
  65. package/dist/src/components/Dropdown/Root/AccountBalance.js.map +1 -0
  66. package/dist/src/components/Dropdown/Root/AccountOtherAssets.d.ts +9 -0
  67. package/dist/src/components/Dropdown/Root/AccountOtherAssets.d.ts.map +1 -0
  68. package/dist/src/components/Dropdown/Root/AccountOtherAssets.js +47 -0
  69. package/dist/src/components/Dropdown/Root/AccountOtherAssets.js.map +1 -0
  70. package/dist/src/components/Dropdown/Root/Root.d.ts +23 -0
  71. package/dist/src/components/Dropdown/Root/Root.d.ts.map +1 -0
  72. package/dist/src/components/Dropdown/Root/Root.js +57 -0
  73. package/dist/src/components/Dropdown/Root/Root.js.map +1 -0
  74. package/dist/src/components/Dropdown/Root/WalletAddress.d.ts +8 -0
  75. package/dist/src/components/Dropdown/Root/WalletAddress.d.ts.map +1 -0
  76. package/dist/src/components/Dropdown/Root/WalletAddress.js +64 -0
  77. package/dist/src/components/Dropdown/Root/WalletAddress.js.map +1 -0
  78. package/dist/src/components/Dropdown/Root/WelcomeBlock.d.ts +8 -0
  79. package/dist/src/components/Dropdown/Root/WelcomeBlock.d.ts.map +1 -0
  80. package/dist/src/components/Dropdown/Root/WelcomeBlock.js +44 -0
  81. package/dist/src/components/Dropdown/Root/WelcomeBlock.js.map +1 -0
  82. package/dist/src/components/Dropdown/TestnetTopBanner.d.ts +3 -0
  83. package/dist/src/components/Dropdown/TestnetTopBanner.d.ts.map +1 -0
  84. package/dist/src/components/Dropdown/TestnetTopBanner.js +14 -0
  85. package/dist/src/components/Dropdown/TestnetTopBanner.js.map +1 -0
  86. package/dist/src/components/Dropdown/index.d.ts +3 -0
  87. package/dist/src/components/Dropdown/index.d.ts.map +1 -0
  88. package/dist/src/components/Dropdown/index.js +2 -0
  89. package/dist/src/components/Dropdown/index.js.map +1 -0
  90. package/dist/src/components/index.d.ts +2 -0
  91. package/dist/src/components/index.d.ts.map +1 -0
  92. package/dist/src/components/index.js +2 -0
  93. package/dist/src/components/index.js.map +1 -0
  94. package/dist/src/config.js +2 -2
  95. package/dist/src/config.js.map +1 -1
  96. package/dist/src/constants.d.ts +2 -1
  97. package/dist/src/constants.d.ts.map +1 -1
  98. package/dist/src/constants.js +5 -4
  99. package/dist/src/constants.js.map +1 -1
  100. package/dist/src/hooks/constants.d.ts +3 -3
  101. package/dist/src/hooks/constants.js +4 -4
  102. package/dist/src/hooks/constants.js.map +1 -1
  103. package/dist/src/hooks/index.d.ts +4 -4
  104. package/dist/src/hooks/index.d.ts.map +1 -1
  105. package/dist/src/hooks/index.js +4 -4
  106. package/dist/src/hooks/index.js.map +1 -1
  107. package/dist/src/hooks/useAssetsConversionRates.d.ts +7 -0
  108. package/dist/src/hooks/useAssetsConversionRates.d.ts.map +1 -0
  109. package/dist/src/hooks/useAssetsConversionRates.js +24 -0
  110. package/dist/src/hooks/useAssetsConversionRates.js.map +1 -0
  111. package/dist/src/hooks/useAuthApiClient.d.ts +1 -1
  112. package/dist/src/hooks/useAuthApiClient.d.ts.map +1 -1
  113. package/dist/src/hooks/useAuthenticateWithWallet.d.ts +73 -0
  114. package/dist/src/hooks/useAuthenticateWithWallet.d.ts.map +1 -0
  115. package/dist/src/hooks/useAuthenticateWithWallet.js +69 -0
  116. package/dist/src/hooks/useAuthenticateWithWallet.js.map +1 -0
  117. package/dist/src/hooks/useBorrowData.d.ts +1418 -0
  118. package/dist/src/hooks/useBorrowData.d.ts.map +1 -0
  119. package/dist/src/hooks/useBorrowData.js +65 -0
  120. package/dist/src/hooks/useBorrowData.js.map +1 -0
  121. package/dist/src/hooks/useCreateAccount.d.ts +41 -137
  122. package/dist/src/hooks/useCreateAccount.d.ts.map +1 -1
  123. package/dist/src/hooks/useCreateAccount.js +8 -10
  124. package/dist/src/hooks/useCreateAccount.js.map +1 -1
  125. package/dist/src/hooks/useCreateSession.d.ts +12 -182
  126. package/dist/src/hooks/useCreateSession.d.ts.map +1 -1
  127. package/dist/src/hooks/useCreateSession.js +12 -18
  128. package/dist/src/hooks/useCreateSession.js.map +1 -1
  129. package/dist/src/hooks/useDropdownData.d.ts +39 -0
  130. package/dist/src/hooks/useDropdownData.d.ts.map +1 -0
  131. package/dist/src/hooks/useDropdownData.js +63 -0
  132. package/dist/src/hooks/useDropdownData.js.map +1 -0
  133. package/dist/src/hooks/useEnsureNoSessionAndFetchNonce.d.ts +5 -0
  134. package/dist/src/hooks/useEnsureNoSessionAndFetchNonce.d.ts.map +1 -0
  135. package/dist/src/hooks/useEnsureNoSessionAndFetchNonce.js +34 -0
  136. package/dist/src/hooks/useEnsureNoSessionAndFetchNonce.js.map +1 -0
  137. package/dist/src/hooks/useGetAccountByAddress.d.ts +3 -5
  138. package/dist/src/hooks/useGetAccountByAddress.d.ts.map +1 -1
  139. package/dist/src/hooks/useGetAccountByAddress.js +3 -4
  140. package/dist/src/hooks/useGetAccountByAddress.js.map +1 -1
  141. package/dist/src/hooks/useGetAccountByMezoId.d.ts +3 -5
  142. package/dist/src/hooks/useGetAccountByMezoId.d.ts.map +1 -1
  143. package/dist/src/hooks/useGetAccountByMezoId.js +3 -4
  144. package/dist/src/hooks/useGetAccountByMezoId.js.map +1 -1
  145. package/dist/src/hooks/useGetCurrentAccount.d.ts +14 -8
  146. package/dist/src/hooks/useGetCurrentAccount.d.ts.map +1 -1
  147. package/dist/src/hooks/useGetCurrentAccount.js +28 -6
  148. package/dist/src/hooks/useGetCurrentAccount.js.map +1 -1
  149. package/dist/src/hooks/useGetSession.d.ts +3 -20
  150. package/dist/src/hooks/useGetSession.d.ts.map +1 -1
  151. package/dist/src/hooks/useGetSession.js +2 -2
  152. package/dist/src/hooks/useGetSession.js.map +1 -1
  153. package/dist/src/hooks/useLinkAccount.d.ts +15 -121
  154. package/dist/src/hooks/useLinkAccount.d.ts.map +1 -1
  155. package/dist/src/hooks/useLinkAccount.js +8 -21
  156. package/dist/src/hooks/useLinkAccount.js.map +1 -1
  157. package/dist/src/hooks/usePortalApiClient.d.ts +2 -0
  158. package/dist/src/hooks/usePortalApiClient.d.ts.map +1 -0
  159. package/dist/src/hooks/usePortalApiClient.js +6 -0
  160. package/dist/src/hooks/usePortalApiClient.js.map +1 -0
  161. package/dist/src/hooks/useRefreshPassport.d.ts +17 -0
  162. package/dist/src/hooks/useRefreshPassport.d.ts.map +1 -0
  163. package/dist/src/hooks/useRefreshPassport.js +29 -0
  164. package/dist/src/hooks/useRefreshPassport.js.map +1 -0
  165. package/dist/src/hooks/useSignInWithDiscord.d.ts +12 -181
  166. package/dist/src/hooks/useSignInWithDiscord.d.ts.map +1 -1
  167. package/dist/src/hooks/useSignInWithDiscord.js +11 -22
  168. package/dist/src/hooks/useSignInWithDiscord.js.map +1 -1
  169. package/dist/src/hooks/useSignInWithWallet.d.ts +12 -181
  170. package/dist/src/hooks/useSignInWithWallet.d.ts.map +1 -1
  171. package/dist/src/hooks/useSignInWithWallet.js +6 -44
  172. package/dist/src/hooks/useSignInWithWallet.js.map +1 -1
  173. package/dist/src/hooks/useSignOut.d.ts +12 -28
  174. package/dist/src/hooks/useSignOut.d.ts.map +1 -1
  175. package/dist/src/hooks/useSignOut.js +11 -6
  176. package/dist/src/hooks/useSignOut.js.map +1 -1
  177. package/dist/src/hooks/useSignUpWithWallet.d.ts +73 -0
  178. package/dist/src/hooks/useSignUpWithWallet.d.ts.map +1 -0
  179. package/dist/src/hooks/useSignUpWithWallet.js +11 -0
  180. package/dist/src/hooks/useSignUpWithWallet.js.map +1 -0
  181. package/dist/src/hooks/useTokensBalances.d.ts +74 -0
  182. package/dist/src/hooks/useTokensBalances.d.ts.map +1 -0
  183. package/dist/src/hooks/useTokensBalances.js +140 -0
  184. package/dist/src/hooks/useTokensBalances.js.map +1 -0
  185. package/dist/src/hooks/useUpdateMezoId.d.ts +30 -82
  186. package/dist/src/hooks/useUpdateMezoId.d.ts.map +1 -1
  187. package/dist/src/hooks/useUpdateMezoId.js +8 -12
  188. package/dist/src/hooks/useUpdateMezoId.js.map +1 -1
  189. package/dist/src/hooks/useWalletAccount.d.ts +13 -0
  190. package/dist/src/hooks/useWalletAccount.d.ts.map +1 -0
  191. package/dist/src/hooks/useWalletAccount.js +29 -0
  192. package/dist/src/hooks/useWalletAccount.js.map +1 -0
  193. package/dist/src/index.d.ts +1 -0
  194. package/dist/src/index.d.ts.map +1 -1
  195. package/dist/src/index.js +1 -0
  196. package/dist/src/index.js.map +1 -1
  197. package/dist/src/lib/contracts/index.d.ts +10 -0
  198. package/dist/src/lib/contracts/index.d.ts.map +1 -0
  199. package/dist/src/lib/contracts/index.js +49 -0
  200. package/dist/src/lib/contracts/index.js.map +1 -0
  201. package/dist/src/lib/contracts/musd.d.ts +107 -0
  202. package/dist/src/lib/contracts/musd.d.ts.map +1 -0
  203. package/dist/src/lib/contracts/musd.js +1070 -0
  204. package/dist/src/lib/contracts/musd.js.map +1 -0
  205. package/dist/src/lib/contracts/troveManager.d.ts +1401 -0
  206. package/dist/src/lib/contracts/troveManager.d.ts.map +1 -0
  207. package/dist/src/lib/contracts/troveManager.js +1820 -0
  208. package/dist/src/lib/contracts/troveManager.js.map +1 -0
  209. package/dist/src/provider.d.ts +10 -13
  210. package/dist/src/provider.d.ts.map +1 -1
  211. package/dist/src/provider.js +11 -20
  212. package/dist/src/provider.js.map +1 -1
  213. package/dist/src/stores/dropdownStore.d.ts +12 -0
  214. package/dist/src/stores/dropdownStore.d.ts.map +1 -0
  215. package/dist/src/stores/dropdownStore.js +13 -0
  216. package/dist/src/stores/dropdownStore.js.map +1 -0
  217. package/dist/src/utils/address.d.ts +15 -0
  218. package/dist/src/utils/address.d.ts.map +1 -0
  219. package/dist/src/utils/address.js +37 -0
  220. package/dist/src/utils/address.js.map +1 -0
  221. package/dist/src/utils/address.test.d.ts +2 -0
  222. package/dist/src/utils/address.test.d.ts.map +1 -0
  223. package/dist/src/utils/address.test.js +40 -0
  224. package/dist/src/utils/address.test.js.map +1 -0
  225. package/dist/src/utils/cryptoAssets.d.ts +44 -0
  226. package/dist/src/utils/cryptoAssets.d.ts.map +1 -0
  227. package/dist/src/utils/cryptoAssets.js +131 -0
  228. package/dist/src/utils/cryptoAssets.js.map +1 -0
  229. package/dist/src/utils/cryptoAssets.test.d.ts +2 -0
  230. package/dist/src/utils/cryptoAssets.test.d.ts.map +1 -0
  231. package/dist/src/utils/cryptoAssets.test.js +67 -0
  232. package/dist/src/utils/cryptoAssets.test.js.map +1 -0
  233. package/dist/src/utils/currency.d.ts +14 -0
  234. package/dist/src/utils/currency.d.ts.map +1 -0
  235. package/dist/src/utils/currency.js +27 -0
  236. package/dist/src/utils/currency.js.map +1 -0
  237. package/dist/src/utils/currency.test.d.ts +2 -0
  238. package/dist/src/utils/currency.test.d.ts.map +1 -0
  239. package/dist/src/utils/currency.test.js +34 -0
  240. package/dist/src/utils/currency.test.js.map +1 -0
  241. package/dist/src/utils/numbers.d.ts +58 -0
  242. package/dist/src/utils/numbers.d.ts.map +1 -0
  243. package/dist/src/utils/numbers.js +132 -0
  244. package/dist/src/utils/numbers.js.map +1 -0
  245. package/dist/src/utils/numbers.test.d.ts +2 -0
  246. package/dist/src/utils/numbers.test.d.ts.map +1 -0
  247. package/dist/src/utils/numbers.test.js +170 -0
  248. package/dist/src/utils/numbers.test.js.map +1 -0
  249. package/package.json +12 -5
  250. package/src/api/auth.ts +104 -129
  251. package/src/api/client.ts +78 -0
  252. package/src/api/fetch-error.ts +8 -0
  253. package/src/api/index.ts +2 -0
  254. package/src/api/portal.ts +57 -0
  255. package/src/assets/DefaultAvatar.tsx +74 -0
  256. package/src/components/Dropdown/ConnectedTrigger.tsx +76 -0
  257. package/src/components/Dropdown/Content.tsx +98 -0
  258. package/src/components/Dropdown/DisconnectedTrigger.tsx +36 -0
  259. package/src/components/Dropdown/Dropdown.tsx +139 -0
  260. package/src/components/Dropdown/ListingItem.tsx +80 -0
  261. package/src/components/Dropdown/NestedViewLayout.tsx +75 -0
  262. package/src/components/Dropdown/README.md +41 -0
  263. package/src/components/Dropdown/Receive/Receive.tsx +119 -0
  264. package/src/components/Dropdown/Root/AccountAddressActions.tsx +101 -0
  265. package/src/components/Dropdown/Root/AccountAssetItem.tsx +26 -0
  266. package/src/components/Dropdown/Root/AccountBalance.tsx +30 -0
  267. package/src/components/Dropdown/Root/AccountOtherAssets.tsx +63 -0
  268. package/src/components/Dropdown/Root/Root.tsx +147 -0
  269. package/src/components/Dropdown/Root/WalletAddress.tsx +128 -0
  270. package/src/components/Dropdown/Root/WelcomeBlock.tsx +91 -0
  271. package/src/components/Dropdown/TestnetTopBanner.tsx +32 -0
  272. package/src/components/Dropdown/index.ts +2 -0
  273. package/src/components/index.ts +1 -0
  274. package/src/config.ts +2 -2
  275. package/src/constants.ts +5 -4
  276. package/src/hooks/constants.ts +4 -4
  277. package/src/hooks/index.ts +7 -4
  278. package/src/hooks/useAssetsConversionRates.ts +32 -0
  279. package/src/hooks/useAuthenticateWithWallet.ts +102 -0
  280. package/src/hooks/useBorrowData.ts +79 -0
  281. package/src/hooks/useCreateAccount.ts +20 -11
  282. package/src/hooks/useCreateSession.ts +24 -18
  283. package/src/hooks/useDropdownData.ts +101 -0
  284. package/src/hooks/useEnsureNoSessionAndFetchNonce.ts +46 -0
  285. package/src/hooks/useGetAccountByAddress.ts +11 -5
  286. package/src/hooks/useGetAccountByMezoId.ts +11 -5
  287. package/src/hooks/useGetCurrentAccount.ts +53 -7
  288. package/src/hooks/useGetSession.ts +10 -3
  289. package/src/hooks/useLinkAccount.ts +19 -31
  290. package/src/hooks/usePortalApiClient.ts +6 -0
  291. package/src/hooks/useRefreshPassport.ts +40 -0
  292. package/src/hooks/useSignInWithDiscord.ts +19 -28
  293. package/src/hooks/useSignInWithWallet.ts +14 -55
  294. package/src/hooks/useSignOut.ts +22 -6
  295. package/src/hooks/useSignUpWithWallet.ts +21 -0
  296. package/src/hooks/useTokensBalances.ts +187 -0
  297. package/src/hooks/useUpdateMezoId.ts +20 -12
  298. package/src/hooks/useWalletAccount.ts +55 -0
  299. package/src/index.ts +1 -0
  300. package/src/lib/contracts/index.ts +75 -0
  301. package/src/lib/contracts/musd.ts +1071 -0
  302. package/src/lib/contracts/troveManager.ts +1819 -0
  303. package/src/provider.ts +30 -37
  304. package/src/stores/dropdownStore.ts +20 -0
  305. package/src/utils/address.test.ts +48 -0
  306. package/src/utils/address.ts +45 -0
  307. package/src/utils/cryptoAssets.test.ts +79 -0
  308. package/src/utils/cryptoAssets.ts +173 -0
  309. package/src/utils/currency.test.ts +38 -0
  310. package/src/utils/currency.ts +32 -0
  311. package/src/utils/numbers.test.ts +220 -0
  312. package/src/utils/numbers.ts +188 -0
@@ -0,0 +1,102 @@
1
+ import { useSignMessage } from "wagmi"
2
+ import { MutationOptions, useMutation } from "@tanstack/react-query"
3
+ import { useCreateAccount } from "./useCreateAccount"
4
+ import { useCreateSession } from "./useCreateSession"
5
+ import { useEnsureNoSessionAndFetchNonce } from "./useEnsureNoSessionAndFetchNonce"
6
+ import { createSignInWithWalletMessage } from "../utils/siww"
7
+ import { useGetAccountByAddress } from "./useGetAccountByAddress"
8
+ import type { Session } from "../api"
9
+ import useWalletAccount from "./useWalletAccount"
10
+
11
+ function useAuthenticateWithWallet(
12
+ shouldCreateAccount = false,
13
+ mutationOptions: Omit<
14
+ MutationOptions<Session>,
15
+ "mutationFn" | "mutationKey"
16
+ > = {},
17
+ ) {
18
+ const { walletAddress, chainId, connector, networkFamily } =
19
+ useWalletAccount()
20
+ const { ensureNoSessionAndFetchNonce } = useEnsureNoSessionAndFetchNonce()
21
+ const { createSessionAsync } = useCreateSession()
22
+ const { createAccountAsync } = useCreateAccount()
23
+ const { signMessageAsync } = useSignMessage()
24
+
25
+ const { refetch: getAccountByAddress } = useGetAccountByAddress(
26
+ walletAddress,
27
+ {
28
+ enabled: false,
29
+ retry: false,
30
+ },
31
+ )
32
+
33
+ const { mutate, mutateAsync, ...signInMutationRestParameters } = useMutation({
34
+ mutationFn: async () => {
35
+ if (!walletAddress) {
36
+ throw new Error("Sign in error: Wallet not connected!")
37
+ }
38
+
39
+ const nonce = await ensureNoSessionAndFetchNonce()
40
+
41
+ const messageResult = createSignInWithWalletMessage(
42
+ walletAddress,
43
+ nonce,
44
+ networkFamily,
45
+ chainId,
46
+ )
47
+ const signatureResult = await signMessageAsync({
48
+ message: messageResult,
49
+ connector,
50
+ })
51
+
52
+ if (shouldCreateAccount) {
53
+ const getAccountByAddressResult = await getAccountByAddress()
54
+
55
+ if (getAccountByAddressResult.data) {
56
+ throw new Error(
57
+ "Wallet authentication failed: Account creation failed. Account already exists.",
58
+ )
59
+ }
60
+
61
+ if (getAccountByAddressResult.error) {
62
+ throw new Error(
63
+ `Wallet authentication failed: Account creation failed. Could not verify if account already exists: ${getAccountByAddressResult.error}`,
64
+ )
65
+ }
66
+
67
+ // Fetch was successful, but no account was found
68
+ try {
69
+ const createAccountResult = await createAccountAsync({
70
+ type: "wallet",
71
+ message: messageResult,
72
+ signature: signatureResult,
73
+ })
74
+
75
+ if (!createAccountResult) {
76
+ throw new Error("Failed to create new account")
77
+ }
78
+ } catch (error) {
79
+ throw new Error(
80
+ `Wallet authentication failed: Account creation failed: ${error}`,
81
+ )
82
+ }
83
+ }
84
+
85
+ return (await createSessionAsync({
86
+ type: "wallet",
87
+ message: messageResult,
88
+ signature: signatureResult,
89
+ })) as Session
90
+ // ^ By passing type: "wallet" we know for sure the return type is Session
91
+ },
92
+ ...mutationOptions,
93
+ })
94
+
95
+ return {
96
+ authenticateWithWallet: mutate,
97
+ authenticateWithWalletAsync: mutateAsync,
98
+ ...signInMutationRestParameters,
99
+ }
100
+ }
101
+
102
+ export { useAuthenticateWithWallet }
@@ -0,0 +1,79 @@
1
+ import { useAccount, useReadContract } from "wagmi"
2
+ import { useCallback } from "react"
3
+ import { useQueryClient } from "@tanstack/react-query"
4
+ import { ONE_MINUTE_MS } from "../utils/time"
5
+ import { troveManagerContract } from "../lib/contracts"
6
+ import { usePassportContext } from "./usePassportContext"
7
+ import { CHAIN_ID } from "../constants"
8
+
9
+ /**
10
+ * Query hook for getting borrow data. Returns collateral and trove debt for the
11
+ * connected account, based on it's evm address.
12
+ * @param queryOptions Query options passed to the underlying `useQuery` hook.
13
+ */
14
+ export function useBorrowData(queryOptions = {}) {
15
+ const { environment = "mainnet" } = usePassportContext()
16
+ const { address } = useAccount()
17
+ return useReadContract({
18
+ abi: troveManagerContract.abi,
19
+ address: troveManagerContract.address[environment],
20
+ functionName: "getEntireDebtAndColl",
21
+ args: [address || "0x"],
22
+ query: {
23
+ enabled: !!address,
24
+ staleTime: 5 * ONE_MINUTE_MS,
25
+ retry: 1,
26
+ select: (data) => {
27
+ if (!data) return undefined
28
+
29
+ const [collateral, principal, interest] = data
30
+ return {
31
+ collateral,
32
+ troveDebt: principal + interest,
33
+ }
34
+ },
35
+ ...queryOptions,
36
+ },
37
+ chainId: CHAIN_ID[environment],
38
+ })
39
+ }
40
+
41
+ /**
42
+ * Hook for for invalidating current user's borrow data. Can be used to
43
+ * invalidate borrow data manually, which forces the data to be re-fetched.
44
+ * @returns Function `invalidateBorrowData` for invalidating the borrow data
45
+ */
46
+ export function useInvalidateBorrowData() {
47
+ const queryClient = useQueryClient()
48
+
49
+ const { queryKey } = useBorrowData()
50
+
51
+ const invalidateBorrowDataHandler = useCallback(
52
+ () => queryClient.invalidateQueries({ queryKey }),
53
+ [queryClient, queryKey],
54
+ )
55
+
56
+ return {
57
+ invalidateBorrowData: invalidateBorrowDataHandler,
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Hook for for resetting current user's borrow data. Can be used to reset
63
+ * borrow data manually, which forces the data to be re-fetched.
64
+ * @returns Function `resetBorrowData` for resetting the borrow data
65
+ */
66
+ export function useResetBorrowData() {
67
+ const queryClient = useQueryClient()
68
+
69
+ const { queryKey } = useBorrowData()
70
+
71
+ const resetBorrowDataHandler = useCallback(
72
+ () => queryClient.resetQueries({ queryKey }),
73
+ [queryClient, queryKey],
74
+ )
75
+
76
+ return {
77
+ resetBorrowData: resetBorrowDataHandler,
78
+ }
79
+ }
@@ -1,26 +1,35 @@
1
- import { useQueryClient, useMutation } from "@tanstack/react-query"
1
+ import {
2
+ useQueryClient,
3
+ useMutation,
4
+ MutationOptions,
5
+ DefaultError,
6
+ } from "@tanstack/react-query"
2
7
  import { useAuthApiClient } from "./useAuthApiClient"
3
8
  import { QUERY_KEYS } from "./constants"
4
- import { CreateAccountRequest } from "../api/auth"
9
+ import type { CreateAccountRequest, CreateAccountResponse } from "../api"
5
10
 
6
- export function useCreateAccount(useMutationOptions = {}) {
11
+ export function useCreateAccount(
12
+ mutationOptions: Omit<
13
+ MutationOptions<CreateAccountResponse, DefaultError, CreateAccountRequest>,
14
+ "mutationFn" | "mutationKey"
15
+ > = {},
16
+ ) {
7
17
  const queryClient = useQueryClient()
8
18
  const authApiClient = useAuthApiClient()
9
19
 
20
+ const { onSuccess: customOnSuccess, ...restMutationOptions } = mutationOptions
21
+
10
22
  const { mutate, mutateAsync, ...rest } = useMutation({
11
23
  mutationFn: (createAccountRequest: CreateAccountRequest) =>
12
24
  authApiClient.createAccount(createAccountRequest),
13
- onSuccess: () => {
14
- queryClient.resetQueries({
15
- queryKey: [QUERY_KEYS.ACCOUNT_BY_ADDRESS],
16
- exact: false,
17
- })
25
+ onSuccess: (data, variables, context) => {
18
26
  queryClient.resetQueries({
19
- queryKey: [QUERY_KEYS.ACCOUNT_BY_MEZO_ID],
20
- exact: false,
27
+ queryKey: [QUERY_KEYS.ACCOUNT],
21
28
  })
29
+
30
+ if (customOnSuccess) customOnSuccess(data, variables, context)
22
31
  },
23
- ...useMutationOptions,
32
+ ...restMutationOptions,
24
33
  })
25
34
 
26
35
  return { createAccount: mutate, createAccountAsync: mutateAsync, ...rest }
@@ -1,37 +1,43 @@
1
- import { useQueryClient, useMutation } from "@tanstack/react-query"
1
+ import {
2
+ useQueryClient,
3
+ useMutation,
4
+ MutationOptions,
5
+ DefaultError,
6
+ } from "@tanstack/react-query"
2
7
  import { useAuthApiClient } from "./useAuthApiClient"
3
- import { CreateSessionRequest } from "../api/auth"
8
+ import type { CreateSessionRequest, CreateSessionResponse } from "../api"
4
9
  import { QUERY_KEYS } from "./constants"
5
10
 
6
11
  /**
7
12
  * This hook is not exposed for external consumers. For creating session they
8
13
  * should use `useSignIn` hook related to the authentication method.
9
14
  */
10
- export function useCreateSession(useMutationOptions = {}) {
15
+ export function useCreateSession(
16
+ mutationOptions: Omit<
17
+ MutationOptions<CreateSessionResponse, DefaultError, CreateSessionRequest>,
18
+ "mutationFn" | "mutationKey"
19
+ > = {},
20
+ ) {
11
21
  const queryClient = useQueryClient()
12
22
  const authApiClient = useAuthApiClient()
13
23
 
24
+ const { onSuccess: customOnSuccess, ...restMutationOptions } = mutationOptions
25
+
14
26
  const { mutate, mutateAsync, ...rest } = useMutation({
15
27
  mutationFn: (createSessionRequest: CreateSessionRequest) =>
16
28
  authApiClient.createSession(createSessionRequest),
17
- onSuccess: (data) => {
18
- // Since `getSession` query also has code in it's query keys we can't
19
- // set query data for a specific query, because we don't know if the
20
- // code was used or not. Because of that we just reset all getSession
21
- // queries
29
+ onSuccess: (data, variables, context) => {
30
+ // Since `getSession` query also has code in its query keys we can't set
31
+ // query data for a specific query, because we don't know if the code was
32
+ // used or not. Because of that we just reset all getSession queries
33
+ queryClient.resetQueries({ queryKey: [QUERY_KEYS.SESSION] })
22
34
  queryClient.resetQueries({
23
- queryKey: [QUERY_KEYS.SESSION],
24
- exact: false,
35
+ queryKey: [QUERY_KEYS.ACCOUNT, QUERY_KEYS.CURRENT],
25
36
  })
26
- if ("user" in data) {
27
- queryClient.setQueryData([QUERY_KEYS.CURRENT_ACCOUNT], data.user)
28
- } else {
29
- queryClient.resetQueries({
30
- queryKey: [QUERY_KEYS.CURRENT_ACCOUNT],
31
- })
32
- }
37
+
38
+ if (customOnSuccess) customOnSuccess(data, variables, context)
33
39
  },
34
- ...useMutationOptions,
40
+ ...restMutationOptions,
35
41
  })
36
42
 
37
43
  return { createSession: mutate, createSessionAsync: mutateAsync, ...rest }
@@ -0,0 +1,101 @@
1
+ import { useBalance } from "wagmi"
2
+ import { useGetCurrentAccount } from "."
3
+ import {
4
+ CryptoAssetKey,
5
+ isBitcoinLikeCryptoAsset,
6
+ mapCryptoAssetToDetails,
7
+ } from "../utils/cryptoAssets"
8
+ import { fromFixedPoint } from "../utils/numbers"
9
+ import useAssetsConversionRates from "./useAssetsConversionRates"
10
+ import useWalletAccount from "./useWalletAccount"
11
+ import { useTokensBalances } from "./useTokensBalances"
12
+ import { useBorrowData } from "./useBorrowData"
13
+
14
+ export type DropdownCryptoAsset<T = CryptoAssetKey> = {
15
+ type: T
16
+ balance: bigint
17
+ }
18
+
19
+ /**
20
+ * Aggregates dropdown data for Dropdown component.
21
+ * @returns Dropdown data.
22
+ * @dev This hook is for internal use only.
23
+ */
24
+ export default function useDropdownData() {
25
+ const { data: btcBalance } = useBalance()
26
+ const {
27
+ walletAddress,
28
+ accountAddress,
29
+ networkFamily: walletType,
30
+ } = useWalletAccount()
31
+ const { data: passportAccount } = useGetCurrentAccount()
32
+ const { data: assetsConversionRates } = useAssetsConversionRates()
33
+ const { data: tokensBalances } = useTokensBalances()
34
+ const { data: debt } = useBorrowData()
35
+ const mezoId = passportAccount?.mezoId
36
+
37
+ const detailedAssets = Object.fromEntries(
38
+ [
39
+ ["BTC", btcBalance?.value ?? 0n],
40
+ ...Object.entries(tokensBalances ?? {}),
41
+ ].map((asset) => {
42
+ const [type, balance] = asset as [CryptoAssetKey, bigint]
43
+
44
+ let usdConversionRate: number | undefined
45
+ if (isBitcoinLikeCryptoAsset(type))
46
+ usdConversionRate = assetsConversionRates?.usd.btc
47
+ if (type === "mT") {
48
+ usdConversionRate = assetsConversionRates?.usd.t
49
+ }
50
+
51
+ return [
52
+ type,
53
+ mapCryptoAssetToDetails(type, balance, usdConversionRate || 1),
54
+ ]
55
+ }),
56
+ ) as Record<CryptoAssetKey, ReturnType<typeof mapCryptoAssetToDetails>>
57
+
58
+ const assets = {
59
+ btc: detailedAssets.BTC,
60
+ musd: detailedAssets.MUSD,
61
+ }
62
+
63
+ const otherAssetsData = Object.values(detailedAssets).filter(
64
+ (asset) => !["BTC", "MUSD"].includes(asset.type),
65
+ )
66
+
67
+ const otherAssetsCount = otherAssetsData.length
68
+
69
+ const otherAssetsUsdTotal = otherAssetsData.reduce(
70
+ (sum, { usdBalance }) => sum + usdBalance,
71
+ 0,
72
+ )
73
+
74
+ const usdTotalBalance = Object.values(detailedAssets).reduce(
75
+ (sum, { usdBalance }) => sum + usdBalance,
76
+ 0,
77
+ )
78
+
79
+ const matsBalance = passportAccount?.mats.totalMats || 0
80
+
81
+ const usdCollateral = fromFixedPoint(
82
+ (debt?.collateral ?? 0n) * BigInt(assetsConversionRates?.usd.btc ?? 0),
83
+ 18,
84
+ )
85
+
86
+ const usdTroveDebt = fromFixedPoint(debt?.troveDebt ?? 0n, 18)
87
+
88
+ return {
89
+ mezoId,
90
+ matsBalance,
91
+ accountAddress,
92
+ walletAddress,
93
+ walletType,
94
+ usdTotalBalance,
95
+ usdTroveDebt,
96
+ usdCollateral,
97
+ assets,
98
+ otherAssetsCount,
99
+ otherAssetsUsdTotal,
100
+ }
101
+ }
@@ -0,0 +1,46 @@
1
+ import { useCallback } from "react"
2
+ import { useGetSession } from "./useGetSession"
3
+ import { useSignOut } from "./useSignOut"
4
+
5
+ function useEnsureNoSessionAndFetchNonce() {
6
+ const { refetch: getSession } = useGetSession(undefined, {
7
+ enabled: false,
8
+ retry: false,
9
+ })
10
+ const { signOutAsync } = useSignOut()
11
+
12
+ const getAndValidateSession = useCallback(async () => {
13
+ const getSessionResult = await getSession()
14
+
15
+ // TODO: We should create a separate endpoint that will always return nonce
16
+ if (getSessionResult.error) {
17
+ throw new Error(
18
+ `Sign in error: Failed to fetch the current session: ${getSessionResult.error}`,
19
+ )
20
+ }
21
+ if (!getSessionResult.data) {
22
+ throw new Error(
23
+ "Sign in error: Failed to fetch the current session; no data returned.",
24
+ )
25
+ }
26
+
27
+ return getSessionResult.data
28
+ }, [getSession])
29
+
30
+ const ensureNoSessionAndFetchNonce = useCallback(async () => {
31
+ let getSessionResult = await getAndValidateSession()
32
+
33
+ if (!("nonce" in getSessionResult)) {
34
+ // If there is active session we are terminating it
35
+ await signOutAsync()
36
+ // Because we've signed out we can assume nonce will be returned here
37
+ getSessionResult = (await getAndValidateSession()) as { nonce: string }
38
+ }
39
+
40
+ return getSessionResult.nonce
41
+ }, [getAndValidateSession, signOutAsync])
42
+
43
+ return { ensureNoSessionAndFetchNonce }
44
+ }
45
+
46
+ export { useEnsureNoSessionAndFetchNonce }
@@ -1,19 +1,25 @@
1
- import { useQuery, skipToken } from "@tanstack/react-query"
1
+ import { useQuery, skipToken, UseBaseQueryOptions } from "@tanstack/react-query"
2
2
  import { useAuthApiClient } from "./useAuthApiClient"
3
3
  import { QUERY_KEYS } from "./constants"
4
4
  import { ONE_MINUTE_MS } from "../utils/time"
5
+ import type { GetAccountByMezoIdOrAddressResponse } from "../api"
5
6
 
6
- export function useGetAccountByAddress(address?: string, useQueryOptions = {}) {
7
+ export function useGetAccountByAddress(
8
+ address?: string,
9
+ queryOptions: Omit<
10
+ UseBaseQueryOptions<GetAccountByMezoIdOrAddressResponse | null>,
11
+ "queryKey" | "queryFn"
12
+ > = {},
13
+ ) {
7
14
  const authApiClient = useAuthApiClient()
8
15
 
9
16
  return useQuery({
10
- queryKey: [QUERY_KEYS.ACCOUNT_BY_ADDRESS, address],
17
+ queryKey: [QUERY_KEYS.ACCOUNT, address],
11
18
  queryFn: address
12
19
  ? () => authApiClient.getAccountByMezoIdOrAddress(address)
13
20
  : skipToken,
14
21
  staleTime: ONE_MINUTE_MS,
15
22
  retry: 1,
16
- enabled: !!address,
17
- ...useQueryOptions,
23
+ ...queryOptions,
18
24
  })
19
25
  }
@@ -1,19 +1,25 @@
1
- import { useQuery, skipToken } from "@tanstack/react-query"
1
+ import { useQuery, skipToken, UseBaseQueryOptions } from "@tanstack/react-query"
2
2
  import { useAuthApiClient } from "./useAuthApiClient"
3
3
  import { QUERY_KEYS } from "./constants"
4
4
  import { ONE_MINUTE_MS } from "../utils/time"
5
+ import type { GetAccountByMezoIdOrAddressResponse } from "../api"
5
6
 
6
- export function useGetAccountByMezoId(mezoId?: string, useQueryOptions = {}) {
7
+ export function useGetAccountByMezoId(
8
+ mezoId?: string,
9
+ queryOptions: Omit<
10
+ UseBaseQueryOptions<GetAccountByMezoIdOrAddressResponse | null>,
11
+ "queryKey" | "queryFn"
12
+ > = {},
13
+ ) {
7
14
  const authApiClient = useAuthApiClient()
8
15
 
9
16
  return useQuery({
10
- queryKey: [QUERY_KEYS.ACCOUNT_BY_MEZO_ID, mezoId],
17
+ queryKey: [QUERY_KEYS.ACCOUNT, mezoId],
11
18
  queryFn: mezoId
12
19
  ? () => authApiClient.getAccountByMezoIdOrAddress(mezoId)
13
20
  : skipToken,
14
21
  staleTime: ONE_MINUTE_MS,
15
22
  retry: 1,
16
- enabled: !!mezoId,
17
- ...useQueryOptions,
23
+ ...queryOptions,
18
24
  })
19
25
  }
@@ -1,16 +1,62 @@
1
- import { useQuery } from "@tanstack/react-query"
2
- import { useAuthApiClient } from "./useAuthApiClient"
3
- import { QUERY_KEYS } from "./constants"
1
+ import { UseBaseQueryOptions, useQuery } from "@tanstack/react-query"
4
2
  import { ONE_MINUTE_MS } from "../utils/time"
3
+ import { QUERY_KEYS } from "./constants"
4
+ import { useAuthApiClient } from "./useAuthApiClient"
5
+ import { usePortalApiClient } from "./usePortalApiClient"
6
+ import type { GetCurrentAccountResponse } from "../api"
5
7
 
6
- export function useGetCurrentAccount(useQueryOptions = {}) {
8
+ type GetCurrentAccountResponseWithMats = GetCurrentAccountResponse & {
9
+ mats: {
10
+ totalMats: number
11
+ }
12
+ }
13
+
14
+ export function useGetCurrentAccount(
15
+ queryOptions: Omit<
16
+ UseBaseQueryOptions<GetCurrentAccountResponseWithMats>,
17
+ "queryKey" | "queryFn"
18
+ > = {},
19
+ ) {
7
20
  const authApiClient = useAuthApiClient()
21
+ const portalApiClient = usePortalApiClient()
8
22
 
9
23
  return useQuery({
10
- queryKey: [QUERY_KEYS.CURRENT_ACCOUNT],
11
- queryFn: () => authApiClient.getCurrentAccount(),
24
+ queryKey: [QUERY_KEYS.ACCOUNT, QUERY_KEYS.CURRENT],
25
+ queryFn: async () => {
26
+ const currentAccount = await authApiClient.getCurrentAccount()
27
+ const linkedWallets = currentAccount?.linkedAccounts?.filter(
28
+ (account) => account.type === "wallet",
29
+ )
30
+ if (!linkedWallets || linkedWallets.length === 0) {
31
+ return {
32
+ ...currentAccount,
33
+ mats: {
34
+ totalMats: 0,
35
+ },
36
+ }
37
+ }
38
+
39
+ const addresses = linkedWallets.map(
40
+ (account) => account.btcAddress || account.evmAddress,
41
+ )
42
+ const mats = await Promise.all(
43
+ addresses.map((address) => portalApiClient.getPortalMats(address)),
44
+ )
45
+
46
+ const totalMats = mats.reduce(
47
+ (sumMats, currentMats) => sumMats + currentMats.totalMats,
48
+ 0,
49
+ )
50
+
51
+ return {
52
+ ...currentAccount,
53
+ mats: {
54
+ totalMats,
55
+ },
56
+ }
57
+ },
12
58
  staleTime: ONE_MINUTE_MS,
13
59
  retry: 1,
14
- ...useQueryOptions,
60
+ ...queryOptions,
15
61
  })
16
62
  }
@@ -1,15 +1,22 @@
1
- import { useQuery } from "@tanstack/react-query"
1
+ import { useQuery, UseBaseQueryOptions } from "@tanstack/react-query"
2
2
  import { useAuthApiClient } from "./useAuthApiClient"
3
3
  import { QUERY_KEYS } from "./constants"
4
4
  import { ONE_MINUTE_MS } from "../utils/time"
5
+ import type { GetSessionResponse } from "../api"
5
6
 
6
- export function useGetSession(code?: string, useQueryOptions = {}) {
7
+ export function useGetSession(
8
+ code?: string,
9
+ queryOptions: Omit<
10
+ UseBaseQueryOptions<GetSessionResponse>,
11
+ "queryKey" | "queryFn"
12
+ > = {},
13
+ ) {
7
14
  const authApiClient = useAuthApiClient()
8
15
  return useQuery({
9
16
  queryKey: [QUERY_KEYS.SESSION, code],
10
17
  queryFn: () => authApiClient.getSession(code),
11
18
  staleTime: ONE_MINUTE_MS,
12
19
  retry: 1,
13
- ...useQueryOptions,
20
+ ...queryOptions,
14
21
  })
15
22
  }
@@ -1,44 +1,32 @@
1
- import { useQueryClient, useMutation } from "@tanstack/react-query"
1
+ import {
2
+ useQueryClient,
3
+ useMutation,
4
+ MutationOptions,
5
+ DefaultError,
6
+ } from "@tanstack/react-query"
2
7
  import { useAuthApiClient } from "./useAuthApiClient"
3
- import { LinkAccountRequest } from "../api/auth"
8
+ import type { LinkAccountRequest, LinkAccountResponse } from "../api"
4
9
  import { QUERY_KEYS } from "./constants"
5
10
 
6
- export function useLinkAccount(useMutationOptions = {}) {
11
+ export function useLinkAccount(
12
+ mutationOptions: Omit<
13
+ MutationOptions<LinkAccountResponse, DefaultError, LinkAccountRequest>,
14
+ "mutationFn" | "mutationKey"
15
+ > = {},
16
+ ) {
7
17
  const queryClient = useQueryClient()
8
18
  const authApiClient = useAuthApiClient()
9
19
 
20
+ const { onSuccess: customOnSuccess, ...restMutationOptions } = mutationOptions
21
+
10
22
  const { mutate, mutateAsync, ...rest } = useMutation({
11
23
  mutationFn: (linkAccountRequest: LinkAccountRequest) =>
12
24
  authApiClient.linkAccount(linkAccountRequest),
13
- onSuccess: (data) => {
14
- if ("user_metadata" in data) {
15
- if (data.user_metadata.mezoId) {
16
- queryClient.setQueryData(
17
- [QUERY_KEYS.ACCOUNT_BY_MEZO_ID, data.user_metadata.mezoId],
18
- data,
19
- )
20
- }
21
-
22
- queryClient.setQueryData(
23
- [QUERY_KEYS.ACCOUNT_BY_ADDRESS, data.user_metadata.btcAddress],
24
- data,
25
- )
26
- queryClient.setQueryData(
27
- [QUERY_KEYS.ACCOUNT_BY_ADDRESS, data.user_metadata.evmAddress],
28
- data,
29
- )
30
- } else {
31
- queryClient.resetQueries({
32
- queryKey: [QUERY_KEYS.ACCOUNT_BY_MEZO_ID],
33
- exact: false,
34
- })
35
- queryClient.resetQueries({
36
- queryKey: [QUERY_KEYS.ACCOUNT_BY_ADDRESS],
37
- exact: false,
38
- })
39
- }
25
+ onSuccess: (data, variables, context) => {
26
+ queryClient.resetQueries({ queryKey: [QUERY_KEYS.ACCOUNT] })
27
+ if (customOnSuccess) customOnSuccess(data, variables, context)
40
28
  },
41
- ...useMutationOptions,
29
+ ...restMutationOptions,
42
30
  })
43
31
 
44
32
  return { linkAccount: mutate, linkAccountAsync: mutateAsync, ...rest }
@@ -0,0 +1,6 @@
1
+ import { usePassportContext } from "./usePassportContext"
2
+
3
+ export function usePortalApiClient() {
4
+ const { portalApiClient } = usePassportContext()
5
+ return portalApiClient
6
+ }