@mezo-org/passport 0.4.0-dev.9 → 0.5.0

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 (300) hide show
  1. package/README.md +18 -22
  2. package/dist/src/api/auth.d.ts +7 -3
  3. package/dist/src/api/auth.d.ts.map +1 -1
  4. package/dist/src/api/auth.js +3 -1
  5. package/dist/src/api/auth.js.map +1 -1
  6. package/dist/src/api/client.d.ts +4 -1
  7. package/dist/src/api/client.d.ts.map +1 -1
  8. package/dist/src/api/client.js +9 -2
  9. package/dist/src/api/client.js.map +1 -1
  10. package/dist/src/api/portal.d.ts +3 -9
  11. package/dist/src/api/portal.d.ts.map +1 -1
  12. package/dist/src/api/portal.js +8 -5
  13. package/dist/src/api/portal.js.map +1 -1
  14. package/dist/src/components/Dropdown/ConnectedTrigger.d.ts +2 -1
  15. package/dist/src/components/Dropdown/ConnectedTrigger.d.ts.map +1 -1
  16. package/dist/src/components/Dropdown/ConnectedTrigger.js +29 -20
  17. package/dist/src/components/Dropdown/ConnectedTrigger.js.map +1 -1
  18. package/dist/src/components/Dropdown/Content.d.ts +4 -5
  19. package/dist/src/components/Dropdown/Content.d.ts.map +1 -1
  20. package/dist/src/components/Dropdown/Content.js +19 -61
  21. package/dist/src/components/Dropdown/Content.js.map +1 -1
  22. package/dist/src/components/Dropdown/DisconnectedTrigger.d.ts.map +1 -1
  23. package/dist/src/components/Dropdown/DisconnectedTrigger.js +2 -2
  24. package/dist/src/components/Dropdown/DisconnectedTrigger.js.map +1 -1
  25. package/dist/src/components/Dropdown/Dropdown.d.ts +9 -6
  26. package/dist/src/components/Dropdown/Dropdown.d.ts.map +1 -1
  27. package/dist/src/components/Dropdown/Dropdown.js +10 -10
  28. package/dist/src/components/Dropdown/Dropdown.js.map +1 -1
  29. package/dist/src/components/Dropdown/ListingItem.d.ts +14 -0
  30. package/dist/src/components/Dropdown/ListingItem.d.ts.map +1 -0
  31. package/dist/src/components/Dropdown/ListingItem.js +42 -0
  32. package/dist/src/components/Dropdown/ListingItem.js.map +1 -0
  33. package/dist/src/components/Dropdown/NestedViewLayout.d.ts +8 -0
  34. package/dist/src/components/Dropdown/NestedViewLayout.d.ts.map +1 -0
  35. package/dist/src/components/Dropdown/NestedViewLayout.js +32 -0
  36. package/dist/src/components/Dropdown/NestedViewLayout.js.map +1 -0
  37. package/dist/src/components/Dropdown/Receive/Receive.d.ts +4 -0
  38. package/dist/src/components/Dropdown/Receive/Receive.d.ts.map +1 -0
  39. package/dist/src/components/Dropdown/Receive/Receive.js +64 -0
  40. package/dist/src/components/Dropdown/Receive/Receive.js.map +1 -0
  41. package/dist/src/components/Dropdown/Root/AccountAddressActions.d.ts +4 -0
  42. package/dist/src/components/Dropdown/Root/AccountAddressActions.d.ts.map +1 -0
  43. package/dist/src/components/Dropdown/Root/AccountAddressActions.js +49 -0
  44. package/dist/src/components/Dropdown/Root/AccountAddressActions.js.map +1 -0
  45. package/dist/src/components/Dropdown/Root/AccountBalance.d.ts +6 -0
  46. package/dist/src/components/Dropdown/Root/AccountBalance.d.ts.map +1 -0
  47. package/dist/src/components/Dropdown/Root/AccountBalance.js +31 -0
  48. package/dist/src/components/Dropdown/Root/AccountBalance.js.map +1 -0
  49. package/dist/src/components/Dropdown/Root/AccountBtcListing.d.ts +6 -0
  50. package/dist/src/components/Dropdown/Root/AccountBtcListing.d.ts.map +1 -0
  51. package/dist/src/components/Dropdown/Root/AccountBtcListing.js +27 -0
  52. package/dist/src/components/Dropdown/Root/AccountBtcListing.js.map +1 -0
  53. package/dist/src/components/Dropdown/Root/AccountError.d.ts +8 -0
  54. package/dist/src/components/Dropdown/Root/AccountError.d.ts.map +1 -0
  55. package/dist/src/components/Dropdown/Root/AccountError.js +17 -0
  56. package/dist/src/components/Dropdown/Root/AccountError.js.map +1 -0
  57. package/dist/src/components/Dropdown/Root/AccountMusdListing.d.ts +4 -0
  58. package/dist/src/components/Dropdown/Root/AccountMusdListing.d.ts.map +1 -0
  59. package/dist/src/components/Dropdown/Root/AccountMusdListing.js +21 -0
  60. package/dist/src/components/Dropdown/Root/AccountMusdListing.js.map +1 -0
  61. package/dist/src/components/Dropdown/Root/AccountOtherAssets.d.ts +8 -0
  62. package/dist/src/components/Dropdown/Root/AccountOtherAssets.d.ts.map +1 -0
  63. package/dist/src/components/Dropdown/Root/AccountOtherAssets.js +43 -0
  64. package/dist/src/components/Dropdown/Root/AccountOtherAssets.js.map +1 -0
  65. package/dist/src/components/Dropdown/Root/Root.d.ts +8 -0
  66. package/dist/src/components/Dropdown/Root/Root.d.ts.map +1 -0
  67. package/dist/src/components/Dropdown/Root/Root.js +45 -0
  68. package/dist/src/components/Dropdown/Root/Root.js.map +1 -0
  69. package/dist/src/components/Dropdown/Root/WalletAddress.d.ts +4 -0
  70. package/dist/src/components/Dropdown/Root/WalletAddress.d.ts.map +1 -0
  71. package/dist/src/components/Dropdown/Root/WalletAddress.js +66 -0
  72. package/dist/src/components/Dropdown/Root/WalletAddress.js.map +1 -0
  73. package/dist/src/components/Dropdown/Root/WelcomeBlock.d.ts +6 -0
  74. package/dist/src/components/Dropdown/Root/WelcomeBlock.d.ts.map +1 -0
  75. package/dist/src/components/Dropdown/Root/WelcomeBlock.js +88 -0
  76. package/dist/src/components/Dropdown/Root/WelcomeBlock.js.map +1 -0
  77. package/dist/src/components/Dropdown/SlotNumber.d.ts +19 -0
  78. package/dist/src/components/Dropdown/SlotNumber.d.ts.map +1 -0
  79. package/dist/src/components/Dropdown/SlotNumber.js +67 -0
  80. package/dist/src/components/Dropdown/SlotNumber.js.map +1 -0
  81. package/dist/src/components/Dropdown/TestnetTopBanner.d.ts +3 -0
  82. package/dist/src/components/Dropdown/TestnetTopBanner.d.ts.map +1 -0
  83. package/dist/src/components/Dropdown/TestnetTopBanner.js +14 -0
  84. package/dist/src/components/Dropdown/TestnetTopBanner.js.map +1 -0
  85. package/dist/src/config.d.ts +19 -5
  86. package/dist/src/config.d.ts.map +1 -1
  87. package/dist/src/config.js +58 -14
  88. package/dist/src/config.js.map +1 -1
  89. package/dist/src/constants.d.ts +11 -3
  90. package/dist/src/constants.d.ts.map +1 -1
  91. package/dist/src/constants.js +12 -4
  92. package/dist/src/constants.js.map +1 -1
  93. package/dist/src/hooks/index.d.ts +4 -0
  94. package/dist/src/hooks/index.d.ts.map +1 -1
  95. package/dist/src/hooks/index.js +4 -0
  96. package/dist/src/hooks/index.js.map +1 -1
  97. package/dist/src/hooks/useAssetsConversionRates.d.ts +18 -0
  98. package/dist/src/hooks/useAssetsConversionRates.d.ts.map +1 -0
  99. package/dist/src/hooks/useAssetsConversionRates.js +67 -0
  100. package/dist/src/hooks/useAssetsConversionRates.js.map +1 -0
  101. package/dist/src/hooks/useAuthenticateWithWallet.d.ts +13 -13
  102. package/dist/src/hooks/useAuthenticateWithWallet.d.ts.map +1 -1
  103. package/dist/src/hooks/useAuthenticateWithWallet.js +9 -8
  104. package/dist/src/hooks/useAuthenticateWithWallet.js.map +1 -1
  105. package/dist/src/hooks/useBorrowData.d.ts +108 -0
  106. package/dist/src/hooks/useBorrowData.d.ts.map +1 -0
  107. package/dist/src/hooks/useBorrowData.js +201 -0
  108. package/dist/src/hooks/useBorrowData.js.map +1 -0
  109. package/dist/src/hooks/useCreateAccount.d.ts.map +1 -1
  110. package/dist/src/hooks/useCreateAccount.js +22 -1
  111. package/dist/src/hooks/useCreateAccount.js.map +1 -1
  112. package/dist/src/hooks/useGetCurrentAccount.d.ts.map +1 -1
  113. package/dist/src/hooks/useGetCurrentAccount.js +4 -6
  114. package/dist/src/hooks/useGetCurrentAccount.js.map +1 -1
  115. package/dist/src/hooks/useLinkAccount.d.ts +19 -13
  116. package/dist/src/hooks/useLinkAccount.d.ts.map +1 -1
  117. package/dist/src/hooks/useLinkAccount.js +20 -1
  118. package/dist/src/hooks/useLinkAccount.js.map +1 -1
  119. package/dist/src/hooks/useRefreshPassport.d.ts +19 -0
  120. package/dist/src/hooks/useRefreshPassport.d.ts.map +1 -0
  121. package/dist/src/hooks/useRefreshPassport.js +44 -0
  122. package/dist/src/hooks/useRefreshPassport.js.map +1 -0
  123. package/dist/src/hooks/useSignInWithWallet.d.ts +13 -13
  124. package/dist/src/hooks/useSignInWithWallet.d.ts.map +1 -1
  125. package/dist/src/hooks/useSignUpWithWallet.d.ts +13 -13
  126. package/dist/src/hooks/useSignUpWithWallet.d.ts.map +1 -1
  127. package/dist/src/hooks/useTokensBalances.d.ts +75 -0
  128. package/dist/src/hooks/useTokensBalances.d.ts.map +1 -0
  129. package/dist/src/hooks/useTokensBalances.js +181 -0
  130. package/dist/src/hooks/useTokensBalances.js.map +1 -0
  131. package/dist/src/hooks/useValidateMezoId.d.ts +8 -0
  132. package/dist/src/hooks/useValidateMezoId.d.ts.map +1 -0
  133. package/dist/src/hooks/useValidateMezoId.js +24 -0
  134. package/dist/src/hooks/useValidateMezoId.js.map +1 -0
  135. package/dist/src/hooks/useWalletAccount.d.ts +2 -1
  136. package/dist/src/hooks/useWalletAccount.d.ts.map +1 -1
  137. package/dist/src/hooks/useWalletAccount.js +20 -15
  138. package/dist/src/hooks/useWalletAccount.js.map +1 -1
  139. package/dist/src/hooks/useWatchTransferEvents.d.ts +5 -0
  140. package/dist/src/hooks/useWatchTransferEvents.d.ts.map +1 -0
  141. package/dist/src/hooks/useWatchTransferEvents.js +63 -0
  142. package/dist/src/hooks/useWatchTransferEvents.js.map +1 -0
  143. package/dist/src/index.d.ts +2 -1
  144. package/dist/src/index.d.ts.map +1 -1
  145. package/dist/src/index.js +2 -1
  146. package/dist/src/index.js.map +1 -1
  147. package/dist/src/lib/contracts/index.d.ts +13 -0
  148. package/dist/src/lib/contracts/index.d.ts.map +1 -0
  149. package/dist/src/lib/contracts/index.js +66 -0
  150. package/dist/src/lib/contracts/index.js.map +1 -0
  151. package/dist/src/lib/contracts/priceOracle.d.ts +43 -0
  152. package/dist/src/lib/contracts/priceOracle.d.ts.map +1 -0
  153. package/dist/src/lib/contracts/priceOracle.js +52 -0
  154. package/dist/src/lib/contracts/priceOracle.js.map +1 -0
  155. package/dist/src/provider.d.ts +7 -1
  156. package/dist/src/provider.d.ts.map +1 -1
  157. package/dist/src/provider.js +4 -1
  158. package/dist/src/provider.js.map +1 -1
  159. package/dist/src/stores/dropdownStore.d.ts +12 -0
  160. package/dist/src/stores/dropdownStore.d.ts.map +1 -0
  161. package/dist/src/stores/dropdownStore.js +13 -0
  162. package/dist/src/stores/dropdownStore.js.map +1 -0
  163. package/dist/src/utils/address.d.ts +1 -1
  164. package/dist/src/utils/address.d.ts.map +1 -1
  165. package/dist/src/utils/address.js +2 -0
  166. package/dist/src/utils/address.js.map +1 -1
  167. package/dist/src/utils/address.test.js +8 -5
  168. package/dist/src/utils/address.test.js.map +1 -1
  169. package/dist/src/utils/assets.d.ts +145 -0
  170. package/dist/src/utils/assets.d.ts.map +1 -0
  171. package/dist/src/utils/assets.js +100 -0
  172. package/dist/src/utils/assets.js.map +1 -0
  173. package/dist/src/utils/assets.test.d.ts +2 -0
  174. package/dist/src/utils/assets.test.d.ts.map +1 -0
  175. package/dist/src/utils/assets.test.js +46 -0
  176. package/dist/src/utils/assets.test.js.map +1 -0
  177. package/dist/src/utils/currency.d.ts +13 -2
  178. package/dist/src/utils/currency.d.ts.map +1 -1
  179. package/dist/src/utils/currency.js +22 -8
  180. package/dist/src/utils/currency.js.map +1 -1
  181. package/dist/src/utils/currency.test.js +44 -1
  182. package/dist/src/utils/currency.test.js.map +1 -1
  183. package/dist/src/utils/mezoId.d.ts +7 -0
  184. package/dist/src/utils/mezoId.d.ts.map +1 -0
  185. package/dist/src/utils/mezoId.js +41 -0
  186. package/dist/src/utils/mezoId.js.map +1 -0
  187. package/dist/src/utils/numbers.d.ts +15 -33
  188. package/dist/src/utils/numbers.d.ts.map +1 -1
  189. package/dist/src/utils/numbers.js +26 -70
  190. package/dist/src/utils/numbers.js.map +1 -1
  191. package/dist/src/utils/numbers.test.js +46 -42
  192. package/dist/src/utils/numbers.test.js.map +1 -1
  193. package/dist/src/utils/siww.d.ts +1 -0
  194. package/dist/src/utils/siww.d.ts.map +1 -1
  195. package/dist/src/utils/siww.js +50 -12
  196. package/dist/src/utils/siww.js.map +1 -1
  197. package/dist/src/utils/wagmi.d.ts +3 -0
  198. package/dist/src/utils/wagmi.d.ts.map +1 -0
  199. package/dist/src/utils/wagmi.js +7 -0
  200. package/dist/src/utils/wagmi.js.map +1 -0
  201. package/dist/src/wallet/index.d.ts +1 -1
  202. package/dist/src/wallet/index.d.ts.map +1 -1
  203. package/dist/src/wallet/index.js +1 -1
  204. package/dist/src/wallet/index.js.map +1 -1
  205. package/package.json +11 -8
  206. package/src/api/auth.ts +8 -4
  207. package/src/api/client.ts +11 -2
  208. package/src/api/portal.ts +11 -14
  209. package/src/components/Dropdown/ConnectedTrigger.tsx +52 -32
  210. package/src/components/Dropdown/Content.tsx +26 -121
  211. package/src/components/Dropdown/DisconnectedTrigger.tsx +2 -1
  212. package/src/components/Dropdown/Dropdown.tsx +29 -17
  213. package/src/components/Dropdown/ListingItem.tsx +176 -0
  214. package/src/components/Dropdown/NestedViewLayout.tsx +87 -0
  215. package/src/components/Dropdown/README.md +10 -18
  216. package/src/components/Dropdown/Receive/Receive.tsx +144 -0
  217. package/src/components/Dropdown/Root/AccountAddressActions.tsx +99 -0
  218. package/src/components/Dropdown/Root/AccountBalance.tsx +68 -0
  219. package/src/components/Dropdown/Root/AccountBtcListing.tsx +52 -0
  220. package/src/components/Dropdown/Root/AccountError.tsx +34 -0
  221. package/src/components/Dropdown/Root/AccountMusdListing.tsx +45 -0
  222. package/src/components/Dropdown/Root/AccountOtherAssets.tsx +85 -0
  223. package/src/components/Dropdown/Root/Root.tsx +77 -0
  224. package/src/components/Dropdown/Root/WalletAddress.tsx +123 -0
  225. package/src/components/Dropdown/Root/WelcomeBlock.tsx +173 -0
  226. package/src/components/Dropdown/SlotNumber.tsx +131 -0
  227. package/src/components/Dropdown/TestnetTopBanner.tsx +32 -0
  228. package/src/config.ts +88 -20
  229. package/src/constants.ts +12 -4
  230. package/src/hooks/index.ts +7 -0
  231. package/src/hooks/useAssetsConversionRates.ts +79 -0
  232. package/src/hooks/useAuthenticateWithWallet.ts +30 -14
  233. package/src/hooks/useBorrowData.ts +246 -0
  234. package/src/hooks/useCreateAccount.ts +29 -2
  235. package/src/hooks/useGetCurrentAccount.ts +5 -7
  236. package/src/hooks/useLinkAccount.ts +37 -4
  237. package/src/hooks/useRefreshPassport.ts +56 -0
  238. package/src/hooks/useSignInWithWallet.ts +2 -2
  239. package/src/hooks/useSignUpWithWallet.ts +2 -2
  240. package/src/hooks/useTokensBalances.ts +265 -0
  241. package/src/hooks/useValidateMezoId.ts +31 -0
  242. package/src/hooks/useWalletAccount.ts +32 -20
  243. package/src/hooks/useWatchTransferEvents.ts +74 -0
  244. package/src/index.ts +12 -1
  245. package/src/lib/contracts/index.ts +99 -0
  246. package/src/lib/contracts/priceOracle.ts +53 -0
  247. package/src/provider.ts +11 -3
  248. package/src/stores/dropdownStore.ts +20 -0
  249. package/src/utils/address.test.ts +10 -6
  250. package/src/utils/address.ts +5 -3
  251. package/src/utils/assets.test.ts +57 -0
  252. package/src/utils/assets.ts +103 -0
  253. package/src/utils/currency.test.ts +77 -1
  254. package/src/utils/currency.ts +35 -9
  255. package/src/utils/mezoId.ts +51 -0
  256. package/src/utils/numbers.test.ts +49 -42
  257. package/src/utils/numbers.ts +33 -95
  258. package/src/utils/siww.ts +71 -16
  259. package/src/utils/wagmi.ts +12 -0
  260. package/src/wallet/index.ts +3 -2
  261. package/dist/src/components/Dropdown/AccountAddress.d.ts +0 -8
  262. package/dist/src/components/Dropdown/AccountAddress.d.ts.map +0 -1
  263. package/dist/src/components/Dropdown/AccountAddress.js +0 -58
  264. package/dist/src/components/Dropdown/AccountAddress.js.map +0 -1
  265. package/dist/src/components/Dropdown/AccountAssets.d.ts +0 -14
  266. package/dist/src/components/Dropdown/AccountAssets.d.ts.map +0 -1
  267. package/dist/src/components/Dropdown/AccountAssets.js +0 -44
  268. package/dist/src/components/Dropdown/AccountAssets.js.map +0 -1
  269. package/dist/src/components/Dropdown/AccountBalance.d.ts +0 -7
  270. package/dist/src/components/Dropdown/AccountBalance.d.ts.map +0 -1
  271. package/dist/src/components/Dropdown/AccountBalance.js +0 -18
  272. package/dist/src/components/Dropdown/AccountBalance.js.map +0 -1
  273. package/dist/src/components/Dropdown/WelcomeBlock.d.ts +0 -8
  274. package/dist/src/components/Dropdown/WelcomeBlock.d.ts.map +0 -1
  275. package/dist/src/components/Dropdown/WelcomeBlock.js +0 -44
  276. package/dist/src/components/Dropdown/WelcomeBlock.js.map +0 -1
  277. package/dist/src/hooks/useAssetsUSDConversion.d.ts +0 -8
  278. package/dist/src/hooks/useAssetsUSDConversion.d.ts.map +0 -1
  279. package/dist/src/hooks/useAssetsUSDConversion.js +0 -21
  280. package/dist/src/hooks/useAssetsUSDConversion.js.map +0 -1
  281. package/dist/src/hooks/useDropdownData.d.ts +0 -44
  282. package/dist/src/hooks/useDropdownData.d.ts.map +0 -1
  283. package/dist/src/hooks/useDropdownData.js +0 -73
  284. package/dist/src/hooks/useDropdownData.js.map +0 -1
  285. package/dist/src/utils/cryptoAssets.d.ts +0 -28
  286. package/dist/src/utils/cryptoAssets.d.ts.map +0 -1
  287. package/dist/src/utils/cryptoAssets.js +0 -73
  288. package/dist/src/utils/cryptoAssets.js.map +0 -1
  289. package/dist/src/utils/cryptoAssets.test.d.ts +0 -2
  290. package/dist/src/utils/cryptoAssets.test.d.ts.map +0 -1
  291. package/dist/src/utils/cryptoAssets.test.js +0 -49
  292. package/dist/src/utils/cryptoAssets.test.js.map +0 -1
  293. package/src/components/Dropdown/AccountAddress.tsx +0 -111
  294. package/src/components/Dropdown/AccountAssets.tsx +0 -110
  295. package/src/components/Dropdown/AccountBalance.tsx +0 -38
  296. package/src/components/Dropdown/WelcomeBlock.tsx +0 -92
  297. package/src/hooks/useAssetsUSDConversion.ts +0 -31
  298. package/src/hooks/useDropdownData.ts +0 -130
  299. package/src/utils/cryptoAssets.test.ts +0 -59
  300. package/src/utils/cryptoAssets.ts +0 -93
@@ -0,0 +1,123 @@
1
+ import {
2
+ BitcoinCircle,
3
+ Block,
4
+ BlockProps,
5
+ EthCircle,
6
+ LabelMedium,
7
+ LabelXSmall,
8
+ mergeOverrides,
9
+ MonoLabelXSmall,
10
+ useStyletron,
11
+ } from "@mezo-org/mezo-clay"
12
+ import React, { useState } from "react"
13
+ import { useCopyToClipboard } from "usehooks-ts"
14
+ import { usePassportContext } from "../../../hooks/usePassportContext"
15
+ import { getAddressExplorerUrl, trimAddress } from "../../../utils/address"
16
+ import useWalletAccount from "../../../hooks/useWalletAccount"
17
+
18
+ export default function WalletAddress(props: BlockProps) {
19
+ const { overrides, ...restProps } = props
20
+ const { walletAddress, networkFamily } = useWalletAccount()
21
+ const { environment = "mainnet" } = usePassportContext()
22
+ const [, theme] = useStyletron()
23
+ const [, copy] = useCopyToClipboard()
24
+ const [isCopiedMessageVisible, setIsCopiedMessageVisible] = useState(false)
25
+
26
+ const handleCopyAddress = () => {
27
+ copy(walletAddress!)
28
+ setIsCopiedMessageVisible(true)
29
+
30
+ setTimeout(() => {
31
+ setIsCopiedMessageVisible(false)
32
+ }, 2000)
33
+ }
34
+
35
+ const blockExplorerUrl = getAddressExplorerUrl(
36
+ walletAddress!,
37
+ networkFamily,
38
+ environment === "testnet",
39
+ )
40
+ const trimmedAddress = trimAddress(walletAddress!)
41
+ const AccountIcon = networkFamily === "bitcoin" ? BitcoinCircle : EthCircle
42
+
43
+ return (
44
+ <Block
45
+ as="button"
46
+ onClick={handleCopyAddress}
47
+ display="flex"
48
+ alignItems="center"
49
+ backgroundColor="transparent"
50
+ padding={`${theme.sizing.scale800} ${theme.sizing.scale700}`}
51
+ overrides={mergeOverrides(
52
+ {
53
+ Block: {
54
+ style: {
55
+ gap: theme.sizing.scale700,
56
+ borderWidth: 0,
57
+ cursor: "pointer",
58
+ ":hover": {
59
+ backgroundColor: theme.colors.backgroundTertiary,
60
+ },
61
+ },
62
+ },
63
+ },
64
+ overrides,
65
+ )}
66
+ {...restProps}
67
+ >
68
+ <AccountIcon
69
+ color={theme.colors.black}
70
+ size={theme.sizing.scale800}
71
+ overrides={{
72
+ Svg: {
73
+ style: {
74
+ backgroundColor: theme.colors.black,
75
+ overflow: "hidden",
76
+ borderRadius: theme.borders.radius200,
77
+ },
78
+ },
79
+ }}
80
+ />
81
+ <Block
82
+ display="flex"
83
+ flexDirection="column"
84
+ alignItems="flex-start"
85
+ overrides={{
86
+ Block: {
87
+ style: {
88
+ gap: theme.sizing.scale100,
89
+ },
90
+ },
91
+ }}
92
+ >
93
+ <LabelMedium>Connected Wallet</LabelMedium>
94
+
95
+ {isCopiedMessageVisible ? (
96
+ <LabelXSmall color={theme.colors.contentSecondary}>
97
+ Copied address to clipboard
98
+ </LabelXSmall>
99
+ ) : (
100
+ <Block
101
+ as="a"
102
+ color={theme.colors.contentSecondary}
103
+ href={blockExplorerUrl}
104
+ target="_blank"
105
+ overrides={{
106
+ Block: {
107
+ style: {
108
+ color: "inherit",
109
+ textDecoration: "none",
110
+ ":hover": {
111
+ textDecoration: "underline",
112
+ },
113
+ },
114
+ },
115
+ }}
116
+ >
117
+ <MonoLabelXSmall>{trimmedAddress}</MonoLabelXSmall>
118
+ </Block>
119
+ )}
120
+ </Block>
121
+ </Block>
122
+ )
123
+ }
@@ -0,0 +1,173 @@
1
+ import {
2
+ Block,
3
+ BlockProps,
4
+ HeadingMedium,
5
+ LabelLarge,
6
+ Mats,
7
+ mergeOverrides,
8
+ Skeleton,
9
+ useStyletron,
10
+ } from "@mezo-org/mezo-clay"
11
+ import React from "react"
12
+ import DefaultAvatar from "../../../assets/DefaultAvatar"
13
+ import { useGetCurrentAccount } from "../../../hooks"
14
+ import { formatNumberToCompactString } from "../../../utils/numbers"
15
+ import AccountError from "./AccountError"
16
+ import { usePassportContext } from "../../../hooks/usePassportContext"
17
+ import SlotNumber from "../SlotNumber"
18
+
19
+ const DOT_DELIMITER_REGEX = /(?=\.)/
20
+
21
+ function WelcomeBlockSkeleton() {
22
+ const [, theme] = useStyletron()
23
+
24
+ return (
25
+ <Block
26
+ display="flex"
27
+ alignItems="center"
28
+ padding={theme.sizing.scale600}
29
+ paddingTop={theme.sizing.scale900}
30
+ paddingBottom={theme.sizing.scale800}
31
+ overrides={{
32
+ Block: {
33
+ style: {
34
+ gap: theme.sizing.scale600,
35
+ },
36
+ },
37
+ }}
38
+ >
39
+ <Skeleton
40
+ animation
41
+ width={theme.sizing.scale1200}
42
+ height={theme.sizing.scale1200}
43
+ overrides={{
44
+ Root: {
45
+ style: {
46
+ borderRadius: "100%",
47
+ },
48
+ },
49
+ }}
50
+ />
51
+
52
+ <Block
53
+ display="flex"
54
+ flexDirection="column"
55
+ flex={1}
56
+ overrides={{
57
+ Block: {
58
+ style: {
59
+ gap: theme.sizing.scale100,
60
+ },
61
+ },
62
+ }}
63
+ >
64
+ <Skeleton animation width="60%" height={theme.sizing.scale900} />
65
+ <Skeleton animation width="40%" height={theme.sizing.scale800} />
66
+ </Block>
67
+ </Block>
68
+ )
69
+ }
70
+
71
+ type WelcomeBlockProps = BlockProps
72
+
73
+ export default function WelcomeBlock(props: WelcomeBlockProps) {
74
+ const { overrides, ...restProps } = props
75
+ const { accountDataRefetchInterval } = usePassportContext()
76
+
77
+ const { data, isError, isPending } = useGetCurrentAccount({
78
+ staleTime: accountDataRefetchInterval,
79
+ refetchInterval: accountDataRefetchInterval,
80
+ })
81
+ const [, theme] = useStyletron()
82
+
83
+ if (isError) {
84
+ return (
85
+ <AccountError
86
+ padding={theme.sizing.scale600}
87
+ paddingTop={theme.sizing.scale900}
88
+ paddingBottom={theme.sizing.scale800}
89
+ marginBottom={theme.sizing.scale300}
90
+ topic="account information"
91
+ />
92
+ )
93
+ }
94
+
95
+ if (isPending) {
96
+ return <WelcomeBlockSkeleton />
97
+ }
98
+
99
+ const [mezoId, mezoIdSuffix] = (data.mezoId ?? "").split(DOT_DELIMITER_REGEX)
100
+
101
+ return (
102
+ <Block
103
+ display="flex"
104
+ alignItems="center"
105
+ paddingLeft={theme.sizing.scale600}
106
+ paddingRight={theme.sizing.scale600}
107
+ paddingTop={theme.sizing.scale900}
108
+ paddingBottom={theme.sizing.scale800}
109
+ overrides={mergeOverrides(overrides, {
110
+ Block: {
111
+ style: {
112
+ gap: theme.sizing.scale600,
113
+ },
114
+ },
115
+ })}
116
+ {...restProps}
117
+ >
118
+ <Block
119
+ as={DefaultAvatar}
120
+ width={theme.sizing.scale1200}
121
+ height={theme.sizing.scale1200}
122
+ overrides={{
123
+ Block: {
124
+ style: {
125
+ borderRadius: "100%",
126
+ },
127
+ },
128
+ }}
129
+ />
130
+
131
+ <Block display="flex" flexDirection="column">
132
+ {mezoId && mezoIdSuffix && (
133
+ <HeadingMedium as="span">
134
+ <Block as="span">{mezoId}</Block>
135
+ <Block as="span" color={theme.colors.contentSecondary}>
136
+ {mezoIdSuffix}
137
+ </Block>
138
+ </HeadingMedium>
139
+ )}
140
+
141
+ <Block
142
+ display="flex"
143
+ alignItems="center"
144
+ overrides={{
145
+ Block: {
146
+ style: {
147
+ gap: theme.sizing.scale100,
148
+ },
149
+ },
150
+ }}
151
+ >
152
+ <Mats
153
+ size={theme.sizing.scale600}
154
+ overrides={{
155
+ Svg: {
156
+ style: {
157
+ margin: theme.sizing.scale100, // To reduce gap
158
+ },
159
+ },
160
+ }}
161
+ />
162
+
163
+ <LabelLarge color={theme.colors.contentPrimary}>
164
+ <SlotNumber formatFunction={formatNumberToCompactString}>
165
+ {data.mats.totalMats}
166
+ </SlotNumber>{" "}
167
+ mats
168
+ </LabelLarge>
169
+ </Block>
170
+ </Block>
171
+ </Block>
172
+ )
173
+ }
@@ -0,0 +1,131 @@
1
+ /* eslint-disable react/no-array-index-key */
2
+ import React, { useMemo } from "react"
3
+ import { AnimatePresence, motion } from "motion/react"
4
+ import { Block, useStyletron } from "@mezo-org/mezo-clay"
5
+
6
+ type SlotNumberProps = {
7
+ className?: string
8
+ children: number
9
+ formatFunction?: (value: number) => string
10
+ }
11
+
12
+ type SlotNumberDigitProps = {
13
+ className?: string
14
+ children: number
15
+ }
16
+
17
+ function SlotNumberDigit(props: SlotNumberDigitProps) {
18
+ const { children: value, ...restProps } = props
19
+
20
+ const [css] = useStyletron()
21
+
22
+ const digits = [...Array(10).keys()]
23
+
24
+ return (
25
+ <AnimatePresence initial={false}>
26
+ <motion.div
27
+ initial={{
28
+ y: "100%",
29
+ }}
30
+ animate={{
31
+ y: "0%",
32
+ }}
33
+ layout="position"
34
+ className={css({
35
+ position: "relative",
36
+ })}
37
+ {...restProps}
38
+ >
39
+ <Block
40
+ overrides={{
41
+ Block: {
42
+ style: {
43
+ visibility: "hidden",
44
+ },
45
+ },
46
+ }}
47
+ >
48
+ {value}
49
+ </Block>
50
+
51
+ <motion.div
52
+ className={css({
53
+ display: "flex",
54
+ flexDirection: "column",
55
+ position: "absolute",
56
+ inset: 0,
57
+ height: "fit-content",
58
+ })}
59
+ initial={false}
60
+ animate={{ y: `${(value / 10) * -100}%` }}
61
+ transition={{
62
+ type: "spring",
63
+ damping: 16,
64
+ stiffness: 220,
65
+ }}
66
+ >
67
+ {digits.map((digit) => (
68
+ <Block as="span" key={digit}>
69
+ {digit}
70
+ </Block>
71
+ ))}
72
+ </motion.div>
73
+ </motion.div>
74
+ </AnimatePresence>
75
+ )
76
+ }
77
+
78
+ /**
79
+ * SlotNumber component displays a number with animated digits.
80
+ *
81
+ * @typedef {object} SlotNumberProps
82
+ * @property {number} children - The number to display.
83
+ * @property {function} [formatFunction] - Optional function to format the number.
84
+ * @property {BlockProps} [restProps] - Additional properties for the Block component.
85
+ * @see https://pyszkowski.dev/writings/slot-number
86
+ * @returns {JSX.Element} The rendered SlotNumber component.
87
+ */
88
+ function SlotNumber(props: SlotNumberProps) {
89
+ const { children: value, formatFunction, ...restProps } = props
90
+
91
+ const [css] = useStyletron()
92
+
93
+ const characters = useMemo(() => {
94
+ const formattedValue = formatFunction
95
+ ? formatFunction(value)
96
+ : value.toString()
97
+
98
+ return formattedValue
99
+ .split("")
100
+ .map((character) => (/^[0-9]$/.test(character) ? +character : character))
101
+ .reverse()
102
+ }, [formatFunction, value])
103
+
104
+ return (
105
+ <motion.div
106
+ layout
107
+ className={css({
108
+ display: "inline-flex",
109
+ flexDirection: "row-reverse",
110
+ justifyContent: "flex-end",
111
+ overflow: "hidden",
112
+ userSelect: "none",
113
+ })}
114
+ {...restProps}
115
+ >
116
+ {characters.map((character, index) =>
117
+ typeof character === "number" ? (
118
+ <SlotNumberDigit key={`slot-number-character-${index}`}>
119
+ {character}
120
+ </SlotNumberDigit>
121
+ ) : (
122
+ <motion.span layout key={`slot-number-character-${index}`}>
123
+ {character}
124
+ </motion.span>
125
+ ),
126
+ )}
127
+ </motion.div>
128
+ )
129
+ }
130
+
131
+ export default SlotNumber
@@ -0,0 +1,32 @@
1
+ import React from "react"
2
+ import {
3
+ Block,
4
+ InfoCircle,
5
+ LabelSmall,
6
+ useStyletron,
7
+ } from "@mezo-org/mezo-clay"
8
+ import { usePassportContext } from "../../hooks/usePassportContext"
9
+
10
+ export default function TestnetTopBanner() {
11
+ const [, theme] = useStyletron()
12
+
13
+ const { environment } = usePassportContext()
14
+
15
+ if (environment !== "testnet") {
16
+ return null
17
+ }
18
+
19
+ return (
20
+ <Block
21
+ display="flex"
22
+ alignItems="center"
23
+ padding={`${theme.sizing.scale700} ${theme.sizing.scale600}`}
24
+ backgroundColor={theme.colors.warning}
25
+ >
26
+ <InfoCircle size={theme.sizing.scale550} />
27
+ <LabelSmall marginLeft={theme.sizing.scale500}>
28
+ You are using testnet funds.
29
+ </LabelSmall>
30
+ </Block>
31
+ )
32
+ }
package/src/config.ts CHANGED
@@ -1,7 +1,13 @@
1
- import { http } from "viem"
2
1
  import { Chain, getDefaultConfig, WalletList } from "@rainbow-me/rainbowkit"
3
- import { Config, CreateConfigParameters } from "wagmi"
4
- import { CHAIN_ID, mezoMatsnetTestnet, RPC_BY_NETWORK } from "./constants"
2
+ import {
3
+ Config,
4
+ createConfig,
5
+ CreateConfigParameters,
6
+ http,
7
+ webSocket,
8
+ } from "wagmi"
9
+ import { walletConnectWallet } from "@rainbow-me/rainbowkit/wallets"
10
+ import { CHAIN_ID, mezoMainnet, mezoTestnet, RPC_BY_NETWORK } from "./constants"
5
11
  import { getOKXWallet, getUnisatWallet, getXverseWallet } from "./wallet"
6
12
 
7
13
  type WagmiConfigParameters = Omit<
@@ -10,6 +16,7 @@ type WagmiConfigParameters = Omit<
10
16
  >
11
17
  type GetDefaultConfigParameters = WagmiConfigParameters & {
12
18
  appName: string
19
+ mezoNetwork?: "mainnet" | "testnet"
13
20
  appDescription?: string
14
21
  appUrl?: string
15
22
  appIcon?: string
@@ -20,7 +27,8 @@ type GetDefaultConfigParameters = WagmiConfigParameters & {
20
27
  }
21
28
 
22
29
  const transports = {
23
- [CHAIN_ID.testnet]: http(RPC_BY_NETWORK.testnet),
30
+ [CHAIN_ID.mainnet]: http(RPC_BY_NETWORK.mainnet.http),
31
+ [CHAIN_ID.testnet]: http(RPC_BY_NETWORK.testnet.http),
24
32
  } as Pick<CreateConfigParameters, "transports">
25
33
 
26
34
  export const defaultConfig: Required<
@@ -34,39 +42,99 @@ export const defaultConfig: Required<
34
42
  > = {
35
43
  transports,
36
44
  walletConnectProjectId: "",
37
- chains: [mezoMatsnetTestnet],
45
+ chains: [mezoMainnet, mezoTestnet],
38
46
  multiInjectedProviderDiscovery: true,
39
47
  }
40
48
 
41
- const bitcoinWalletConfig = {
42
- rpcUrl: RPC_BY_NETWORK.testnet,
49
+ const bitcoinWalletTestnetConfig = {
50
+ rpcUrl: RPC_BY_NETWORK.testnet.http,
43
51
  chainId: CHAIN_ID.testnet,
44
52
  }
45
53
 
46
- export const unisatWallet = getUnisatWallet(bitcoinWalletConfig)
47
- export const okxWallet = getOKXWallet(bitcoinWalletConfig)
48
- export const xverseWallet = getXverseWallet(bitcoinWalletConfig)
54
+ const bitcoinWalletMainnetConfig = {
55
+ rpcUrl: RPC_BY_NETWORK.mainnet.http,
56
+ chainId: CHAIN_ID.mainnet,
57
+ }
58
+
59
+ export const unisatWalletMezoTestnet = getUnisatWallet(
60
+ bitcoinWalletTestnetConfig,
61
+ )
62
+ export const okxWalletMezoTestnet = getOKXWallet(bitcoinWalletTestnetConfig)
63
+ export const xverseWalletMezoTestnet = getXverseWallet(
64
+ bitcoinWalletTestnetConfig,
65
+ )
66
+
67
+ export const unisatWalletMezoMainnet = getUnisatWallet(
68
+ bitcoinWalletMainnetConfig,
69
+ )
70
+ export const okxWalletMezoMainnet = getOKXWallet(bitcoinWalletMainnetConfig)
71
+ export const xverseWalletMezoMainnet = getXverseWallet(
72
+ bitcoinWalletMainnetConfig,
73
+ )
74
+
75
+ export const preconfiguredWalletConnectWallet = (projectId: string) =>
76
+ walletConnectWallet({
77
+ projectId,
78
+ options: {
79
+ qrModalOptions: {
80
+ enableExplorer: false,
81
+ },
82
+ },
83
+ })
49
84
 
50
- export function getDefaultWallets(): WalletList {
85
+ export function getDefaultWallets(
86
+ network: "mainnet" | "testnet" = "mainnet",
87
+ ): WalletList {
51
88
  return [
52
89
  {
53
90
  groupName: "Bitcoin",
54
- wallets: [unisatWallet, okxWallet, xverseWallet],
91
+ wallets:
92
+ network === "mainnet"
93
+ ? [
94
+ unisatWalletMezoMainnet,
95
+ okxWalletMezoMainnet,
96
+ xverseWalletMezoMainnet,
97
+ ]
98
+ : [
99
+ unisatWalletMezoTestnet,
100
+ okxWalletMezoTestnet,
101
+ xverseWalletMezoTestnet,
102
+ ],
103
+ },
104
+ {
105
+ groupName: "Ethereum",
106
+ wallets: [({ projectId }) => preconfiguredWalletConnectWallet(projectId)],
55
107
  },
56
108
  ]
57
109
  }
58
110
 
59
- export function getConfig({
60
- appName,
61
- bitcoinWallets,
62
- walletConnectProjectId,
63
- ...restParameters
64
- }: GetDefaultConfigParameters): Config {
111
+ export function getConfig(config: GetDefaultConfigParameters): Config {
112
+ const {
113
+ appName,
114
+ mezoNetwork = "mainnet",
115
+ walletConnectProjectId = defaultConfig.walletConnectProjectId,
116
+ ...restParameters
117
+ } = config
118
+
119
+ const wallets = config.bitcoinWallets ?? [...getDefaultWallets(mezoNetwork)]
120
+
65
121
  return getDefaultConfig({
66
122
  ...defaultConfig,
67
123
  appName,
68
- wallets: [...(bitcoinWallets ?? getDefaultWallets())],
69
- projectId: walletConnectProjectId ?? defaultConfig.walletConnectProjectId,
124
+ wallets,
125
+ projectId: walletConnectProjectId,
70
126
  ...restParameters,
71
127
  })
72
128
  }
129
+
130
+ /**
131
+ * This config is only used to listen for Transfer events on mezo chain.
132
+ * Should not be exported in index for public use.
133
+ */
134
+ export const simpleWssMezoConfig = createConfig({
135
+ chains: [mezoMainnet, mezoTestnet],
136
+ transports: {
137
+ [mezoMainnet.id]: webSocket(RPC_BY_NETWORK.mainnet.webSocket),
138
+ [mezoTestnet.id]: webSocket(RPC_BY_NETWORK.testnet.webSocket),
139
+ },
140
+ })
package/src/constants.ts CHANGED
@@ -1,11 +1,19 @@
1
- import { mezoMatsnetTestnet } from "@mezo-org/orangekit"
1
+ import { mezoMainnet, mezoTestnet } from "@mezo-org/orangekit"
2
2
 
3
- export { mezoMatsnetTestnet } from "@mezo-org/orangekit"
3
+ export { mezoMainnet, mezoTestnet } from "@mezo-org/orangekit"
4
4
 
5
5
  export const CHAIN_ID = {
6
- testnet: mezoMatsnetTestnet.id,
6
+ testnet: mezoTestnet.id,
7
+ mainnet: mezoMainnet.id,
7
8
  }
8
9
 
9
10
  export const RPC_BY_NETWORK = {
10
- testnet: mezoMatsnetTestnet.rpcUrls.default.http[0],
11
+ mainnet: {
12
+ http: mezoMainnet.rpcUrls.default.http[0],
13
+ webSocket: mezoMainnet.rpcUrls.default.webSocket?.[0],
14
+ },
15
+ testnet: {
16
+ http: mezoTestnet.rpcUrls.default.http[0],
17
+ webSocket: mezoTestnet.rpcUrls.default.webSocket?.[0],
18
+ },
11
19
  }
@@ -6,13 +6,20 @@ export {
6
6
  useSubscribeToConnectorEvent,
7
7
  useSubscribeToWalletNetworkDoesNotMatchProviderChain,
8
8
  } from "@mezo-org/orangekit"
9
+ export { useInvalidateBorrowData, useResetBorrowData } from "./useBorrowData"
9
10
  export * from "./useGetAccountByAddress"
10
11
  export * from "./useGetAccountByMezoId"
11
12
  export * from "./useGetCurrentAccount"
12
13
  export * from "./useGetSession"
13
14
  export * from "./useLinkAccount"
15
+ export * from "./useRefreshPassport"
14
16
  export * from "./useSignInWithDiscord"
15
17
  export * from "./useSignInWithWallet"
16
18
  export * from "./useSignOut"
17
19
  export * from "./useSignUpWithWallet"
20
+ export {
21
+ useInvalidateTokensBalances,
22
+ useResetTokensBalances,
23
+ } from "./useTokensBalances"
18
24
  export * from "./useUpdateMezoId"
25
+ export * from "./useValidateMezoId"