0xtrails 0.1.2 → 0.1.3

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 (103) hide show
  1. package/dist/analytics.d.ts +68 -1
  2. package/dist/analytics.d.ts.map +1 -1
  3. package/dist/{ccip-BmFTEOaB.js → ccip-CWd4g9uZ.js} +1 -1
  4. package/dist/chains.d.ts +9 -3
  5. package/dist/chains.d.ts.map +1 -1
  6. package/dist/ens.d.ts +7 -0
  7. package/dist/ens.d.ts.map +1 -0
  8. package/dist/error.d.ts +2 -0
  9. package/dist/error.d.ts.map +1 -1
  10. package/dist/{index-BPsVj7zK.js → index-BTUBzx4R.js} +23624 -21770
  11. package/dist/index.js +2 -2
  12. package/dist/lifi.d.ts +4 -0
  13. package/dist/lifi.d.ts.map +1 -0
  14. package/dist/mode.d.ts +1 -1
  15. package/dist/mode.d.ts.map +1 -1
  16. package/dist/prepareSend.d.ts +3 -1
  17. package/dist/prepareSend.d.ts.map +1 -1
  18. package/dist/prices.d.ts +2 -0
  19. package/dist/prices.d.ts.map +1 -1
  20. package/dist/relaySdk.d.ts.map +1 -1
  21. package/dist/relayer.d.ts.map +1 -1
  22. package/dist/tokenBalances.d.ts.map +1 -1
  23. package/dist/tokens.d.ts +2 -1
  24. package/dist/tokens.d.ts.map +1 -1
  25. package/dist/trails.d.ts +3 -3
  26. package/dist/trails.d.ts.map +1 -1
  27. package/dist/transactions.d.ts.map +1 -1
  28. package/dist/wallets.d.ts +247 -5
  29. package/dist/wallets.d.ts.map +1 -1
  30. package/dist/widget/components/ChainFilterDropdown.d.ts +2 -0
  31. package/dist/widget/components/ChainFilterDropdown.d.ts.map +1 -1
  32. package/dist/widget/components/ConnectWallet.d.ts +1 -0
  33. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  34. package/dist/widget/components/DebugScreensDropdown.d.ts.map +1 -1
  35. package/dist/widget/components/FundSendForm.d.ts +2 -2
  36. package/dist/widget/components/FundSendForm.d.ts.map +1 -1
  37. package/dist/widget/components/PaySendForm.d.ts +2 -2
  38. package/dist/widget/components/PaySendForm.d.ts.map +1 -1
  39. package/dist/widget/components/QrCode.d.ts +1 -1
  40. package/dist/widget/components/QrCode.d.ts.map +1 -1
  41. package/dist/widget/components/RefundAddressInput.d.ts +13 -0
  42. package/dist/widget/components/RefundAddressInput.d.ts.map +1 -0
  43. package/dist/widget/components/Swap.d.ts +43 -0
  44. package/dist/widget/components/Swap.d.ts.map +1 -0
  45. package/dist/widget/components/TokenList.d.ts +0 -2
  46. package/dist/widget/components/TokenList.d.ts.map +1 -1
  47. package/dist/widget/components/TokenSelector.d.ts +26 -0
  48. package/dist/widget/components/TokenSelector.d.ts.map +1 -0
  49. package/dist/widget/components/WalletConnect.d.ts.map +1 -1
  50. package/dist/widget/components/WalletConnectionPending.d.ts +12 -0
  51. package/dist/widget/components/WalletConnectionPending.d.ts.map +1 -0
  52. package/dist/widget/components/WalletList.d.ts.map +1 -1
  53. package/dist/widget/hooks/useAmountUsd.d.ts +1 -3
  54. package/dist/widget/hooks/useAmountUsd.d.ts.map +1 -1
  55. package/dist/widget/hooks/useCheckout.d.ts.map +1 -1
  56. package/dist/widget/hooks/useSendForm.d.ts +6 -4
  57. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  58. package/dist/widget/hooks/useTokenList.d.ts +2 -3
  59. package/dist/widget/hooks/useTokenList.d.ts.map +1 -1
  60. package/dist/widget/index.js +1 -1
  61. package/dist/widget/widget.d.ts.map +1 -1
  62. package/package.json +9 -6
  63. package/src/aave.ts +13 -13
  64. package/src/analytics.ts +87 -4
  65. package/src/chains.ts +45 -7
  66. package/src/constants.ts +4 -4
  67. package/src/ens.ts +17 -0
  68. package/src/error.ts +16 -1
  69. package/src/lifi.ts +58 -0
  70. package/src/mode.ts +1 -1
  71. package/src/morpho.ts +3 -3
  72. package/src/pools.ts +18 -18
  73. package/src/prepareSend.ts +35 -3
  74. package/src/prices.ts +21 -0
  75. package/src/relaySdk.ts +1 -0
  76. package/src/relayer.ts +8 -0
  77. package/src/tokenBalances.ts +3 -0
  78. package/src/tokens.ts +85 -19
  79. package/src/trails.ts +2 -2
  80. package/src/transactions.ts +1 -0
  81. package/src/wallets.ts +275 -35
  82. package/src/widget/compiled.css +1 -1
  83. package/src/widget/components/ChainFilterDropdown.tsx +42 -33
  84. package/src/widget/components/ChainImage.tsx +1 -1
  85. package/src/widget/components/ConnectWallet.tsx +92 -128
  86. package/src/widget/components/DebugScreensDropdown.tsx +3 -0
  87. package/src/widget/components/FundSendForm.tsx +17 -3
  88. package/src/widget/components/PaySendForm.tsx +16 -2
  89. package/src/widget/components/QRCodeDeposit.tsx +1 -1
  90. package/src/widget/components/QrCode.tsx +277 -16
  91. package/src/widget/components/Receipt.tsx +1 -1
  92. package/src/widget/components/RefundAddressInput.tsx +149 -0
  93. package/src/widget/components/Swap.tsx +648 -0
  94. package/src/widget/components/TokenList.tsx +27 -363
  95. package/src/widget/components/TokenSelector.tsx +405 -0
  96. package/src/widget/components/WalletConnect.tsx +9 -7
  97. package/src/widget/components/WalletConnectionPending.tsx +157 -0
  98. package/src/widget/components/WalletList.tsx +6 -5
  99. package/src/widget/hooks/useAmountUsd.ts +3 -8
  100. package/src/widget/hooks/useCheckout.ts +3 -2
  101. package/src/widget/hooks/useSendForm.ts +66 -32
  102. package/src/widget/hooks/useTokenList.ts +158 -106
  103. package/src/widget/widget.tsx +335 -72
package/src/wallets.ts CHANGED
@@ -1,16 +1,23 @@
1
1
  import { getWalletConnectProjectId } from "./config.js"
2
2
  import WalletConnectLogo from "./widget/assets/WalletConnect-logo-blue-bg.svg"
3
3
  import { Wallet as WalletIcon } from "lucide-react"
4
-
5
- import { injected, walletConnect, safe, baseAccount } from "wagmi/connectors"
4
+ import {
5
+ injected,
6
+ walletConnect,
7
+ safe,
8
+ baseAccount,
9
+ gemini,
10
+ } from "wagmi/connectors"
11
+ import { useConnect } from "wagmi"
12
+ import React from "react"
6
13
 
7
14
  type Connector = any
8
15
 
9
16
  export interface WalletConfig {
10
17
  id: string
11
18
  name: string
12
- logo: string
13
- connector: () => Connector
19
+ icon: string
20
+ connector?: Connector
14
21
  }
15
22
 
16
23
  // WalletConnect connector singleton to avoid multiple Core initializations
@@ -25,97 +32,226 @@ function getWalletConnectConnectorSingleton() {
25
32
  return wcConnectorSingleton
26
33
  }
27
34
 
28
- export const walletConnectConnector: () => Connector =
29
- getWalletConnectConnectorSingleton
35
+ export const walletConnectConnector: Connector =
36
+ getWalletConnectConnectorSingleton()
37
+
38
+ export const injectedConnector = injected()
39
+ export const safeConnector: Connector = safe()
40
+ export const baseAccountConnector: Connector = baseAccount()
41
+ export const geminiConnector: Connector = gemini()
42
+
43
+ export function windowProviderOrWalletConnect(
44
+ walletId: string,
45
+ windowObjectIdentifier: string | string[],
46
+ name: string,
47
+ ) {
48
+ if (typeof window !== "undefined") {
49
+ let provider: any
50
+ if (Array.isArray(windowObjectIdentifier)) {
51
+ // Handle array case: ["phantom", "ethereum"] -> window.phantom.ethereum
52
+ provider = windowObjectIdentifier.reduce(
53
+ (obj, key) => obj?.[key],
54
+ window as any,
55
+ )
56
+ } else {
57
+ // Handle string case: "phantom" -> window.phantom
58
+ provider = (window as any)[windowObjectIdentifier]
59
+ }
60
+
61
+ if (provider) {
62
+ return injected({
63
+ target() {
64
+ return {
65
+ id: walletId,
66
+ name: name || walletId,
67
+ provider: provider,
68
+ }
69
+ },
70
+ })
71
+ }
72
+ }
73
+ return walletConnectConnector
74
+ }
75
+
76
+ export const metamaskConnector = injected({
77
+ target() {
78
+ return {
79
+ id: "metamask",
80
+ name: "metamask",
81
+ provider:
82
+ typeof window !== "undefined" ? (window as any).ethereum : undefined,
83
+ }
84
+ },
85
+ })
86
+
87
+ export const rainbowConnector = windowProviderOrWalletConnect(
88
+ "rainbow",
89
+ "rainbow",
90
+ "Rainbow",
91
+ )
92
+ export const trustwalletConnector = windowProviderOrWalletConnect(
93
+ "trustwallet",
94
+ "trustwallet",
95
+ "Trust",
96
+ )
97
+ export const phantomConnector = windowProviderOrWalletConnect(
98
+ "phantom",
99
+ ["phantom", "ethereum"],
100
+ "Phantom",
101
+ )
102
+ export const okxwalletConnector = windowProviderOrWalletConnect(
103
+ "okxwallet",
104
+ "okxwallet",
105
+ "OKX Wallet",
106
+ )
107
+ export const zerionConnector = windowProviderOrWalletConnect(
108
+ "zerion",
109
+ "zerionWallet",
110
+ "Zerion",
111
+ )
112
+ export const ambireConnector = windowProviderOrWalletConnect(
113
+ "ambire",
114
+ "ambire",
115
+ "Ambire",
116
+ )
117
+ export const rabbyConnector = windowProviderOrWalletConnect(
118
+ "rabby",
119
+ "rabby",
120
+ "Rabby",
121
+ )
122
+ export const coinbaseWalletConnector = windowProviderOrWalletConnect(
123
+ "coinbase",
124
+ "coinbaseWalletExtension",
125
+ "Coinbase Wallet",
126
+ )
127
+
128
+ export const connectors = [
129
+ injectedConnector,
130
+ walletConnectConnector,
131
+ safeConnector,
132
+ baseAccountConnector,
133
+ geminiConnector,
134
+ coinbaseWalletConnector,
135
+ metamaskConnector,
136
+ rainbowConnector,
137
+ trustwalletConnector,
138
+ phantomConnector,
139
+ okxwalletConnector,
140
+ zerionConnector,
141
+ ambireConnector,
142
+ rabbyConnector,
143
+ ]
30
144
 
31
145
  export const WALLET_CONFIGS: Record<string, WalletConfig> = {
32
146
  injected: {
33
147
  id: "injected",
34
- name: "Injected Web3",
35
- connector: injected,
36
- logo: WalletIcon as unknown as string,
148
+ name: "Browser Wallet",
149
+ connector: injectedConnector,
150
+ icon: WalletIcon as unknown as string,
37
151
  },
38
152
  walletconnect: {
39
153
  id: "walletconnect",
40
154
  name: "WalletConnect",
41
155
  connector: walletConnectConnector,
42
- logo: WalletConnectLogo as string,
156
+ icon: WalletConnectLogo as string,
43
157
  },
44
158
  metamask: {
45
159
  id: "metamask",
46
160
  name: "MetaMask",
47
- connector: injected,
48
- logo: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjIzIiBoZWlnaHQ9IjIzIiB4PSIzLjUiIHk9IjMuNSIgdmlld0JveD0iMCAwIDE0MS41MSAxMzYuNDIiPjxwYXRoIGZpbGw9IiNGRjVDMTYiIGQ9Im0xMzIuMjQgMTMxLjc1LTMwLjQ4LTkuMDctMjIuOTkgMTMuNzQtMTYuMDMtLjAxLTIzLTEzLjc0LTMwLjQ3IDkuMDhMMCAxMDAuNDdsOS4yNy0zNC43M0wwIDM2LjQgOS4yNyAwbDQ3LjYgMjguNDRoMjcuNzZMMTMyLjI0IDBsOS4yNyAzNi4zOC05LjI3IDI5LjM2IDkuMjcgMzQuNzItOS4yNyAzMS4zWiIvPjxwYXRoIGZpbGw9IiNGRjVDMTYiIGQ9Im05LjI3IDAgNDcuNjEgMjguNDZMNTQuOTggNDggOS4yOSAwWm0zMC40NyAxMDAuNDggMjAuOTUgMTUuOTUtMjAuOTUgNi4yNHYtMjIuMlpNNTkuMDEgNzQuMSA1NSA0OCAyOS4yMiA2NS43NWgtLjAybC4wOCAxOC4yNyAxMC40NS05LjkyaDE5LjI5Wk0xMzIuMjUgMGwtNDcuNiAyOC40Nkw4Ni41MSA0OGw0NS43Mi00OFptLTMwLjQ3IDEwMC40OC0yMC45NCAxNS45NSAyMC45NCA2LjI0di0yMi4yWm0xMC41My0zNC43M0w4Ni41MyA0OCA4Mi41IDc0LjFoMTkuMjdsMTAuNDYgOS45LjA3LTE4LjI2WiIvPjxwYXRoIGZpbGw9IiNFMzQ4MDciIGQ9Im0zOS43MyAxMjIuNjctMzAuNDYgOS4wOEwwIDEwMC40OGgzOS43M3YyMi4yWk01OS4wMiA3NC4xbDUuODIgMzcuNzEtOC4wNy0yMC45Ny0yNy40OS02LjgyIDEwLjQ2LTkuOTJINTlabTQyLjc2IDQ4LjU5IDMwLjQ3IDkuMDcgOS4yNy0zMS4yN2gtMzkuNzR6TTgyLjUgNzQuMDlsLTUuODIgMzcuNzEgOC4wNi0yMC45NyAyNy41LTYuODItMTAuNDctOS45MnoiLz48cGF0aCBmaWxsPSIjRkY4RDVEIiBkPSJtMCAxMDAuNDcgOS4yNy0zNC43M0gyOS4ybC4wNyAxOC4yNyAyNy41IDYuODIgOC4wNiAyMC45Ny00LjE1IDQuNjItMjAuOTQtMTUuOTZIMFptMTQxLjUgMC05LjI2LTM0LjczaC0xOS45M2wtLjA3IDE4LjI3LTI3LjUgNi44Mi04LjA2IDIwLjk3IDQuMTUgNC42MiAyMC45NC0xNS45NmgzOS43NFpNODQuNjQgMjguNDRINTYuODhsLTEuODkgMTkuNTQgOS44NCA2My44aDExLjg1bDkuODUtNjMuOC0xLjktMTkuNTRaIi8+PHBhdGggZmlsbD0iIzY2MTgwMCIgZD0iTTkuMjcgMCAwIDM2LjM4bDkuMjcgMjkuMzZIMjkuMkw1NC45OCA0OHptNDMuOTggODEuNjdoLTkuMDNsLTQuOTIgNC44MSAxNy40NyA0LjMzLTMuNTItOS4xNVpNMTMyLjI0IDBsOS4yNyAzNi4zOC05LjI3IDI5LjM2aC0xOS45M0w4Ni41MyA0OHpNODguMjcgODEuNjdoOS4wNGw0LjkyIDQuODItMTcuNDkgNC4zNCAzLjUzLTkuMTdabS05LjUgNDIuMyAyLjA2LTcuNTQtNC4xNS00LjYySDY0LjgybC00LjE0IDQuNjIgMi4wNSA3LjU0Ii8+PHBhdGggZmlsbD0iI0MwQzRDRCIgZD0iTTc4Ljc3IDEyMy45N3YxMi40NUg2Mi43NHYtMTIuNDVoMTYuMDJaIi8+PHBhdGggZmlsbD0iI0U3RUJGNiIgZD0ibTM5Ljc0IDEyMi42NiAyMyAxMy43NnYtMTIuNDZsLTIuMDUtNy41NHptNjIuMDMgMC0yMyAxMy43NnYtMTIuNDZsMi4wNi03LjU0eiIvPjwvc3ZnPjwvc3ZnPg==",
161
+ connector: metamaskConnector,
162
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjIzIiBoZWlnaHQ9IjIzIiB4PSIzLjUiIHk9IjMuNSIgdmlld0JveD0iMCAwIDE0MS41MSAxMzYuNDIiPjxwYXRoIGZpbGw9IiNGRjVDMTYiIGQ9Im0xMzIuMjQgMTMxLjc1LTMwLjQ4LTkuMDctMjIuOTkgMTMuNzQtMTYuMDMtLjAxLTIzLTEzLjc0LTMwLjQ3IDkuMDhMMCAxMDAuNDdsOS4yNy0zNC43M0wwIDM2LjQgOS4yNyAwbDQ3LjYgMjguNDRoMjcuNzZMMTMyLjI0IDBsOS4yNyAzNi4zOC05LjI3IDI5LjM2IDkuMjcgMzQuNzItOS4yNyAzMS4zWiIvPjxwYXRoIGZpbGw9IiNGRjVDMTYiIGQ9Im05LjI3IDAgNDcuNjEgMjguNDZMNTQuOTggNDggOS4yOSAwWm0zMC40NyAxMDAuNDggMjAuOTUgMTUuOTUtMjAuOTUgNi4yNHYtMjIuMlpNNTkuMDEgNzQuMSA1NSA0OCAyOS4yMiA2NS43NWgtLjAybC4wOCAxOC4yNyAxMC40NS05LjkyaDE5LjI5Wk0xMzIuMjUgMGwtNDcuNiAyOC40Nkw4Ni41MSA0OGw0NS43Mi00OFptLTMwLjQ3IDEwMC40OC0yMC45NCAxNS45NSAyMC45NCA2LjI0di0yMi4yWm0xMC41My0zNC43M0w4Ni41MyA0OCA4Mi41IDc0LjFoMTkuMjdsMTAuNDYgOS45LjA3LTE4LjI2WiIvPjxwYXRoIGZpbGw9IiNFMzQ4MDciIGQ9Im0zOS43MyAxMjIuNjctMzAuNDYgOS4wOEwwIDEwMC40OGgzOS43M3YyMi4yWk01OS4wMiA3NC4xbDUuODIgMzcuNzEtOC4wNy0yMC45Ny0yNy40OS02LjgyIDEwLjQ2LTkuOTJINTlabTQyLjc2IDQ4LjU5IDMwLjQ3IDkuMDcgOS4yNy0zMS4yN2gtMzkuNzR6TTgyLjUgNzQuMDlsLTUuODIgMzcuNzEgOC4wNi0yMC45NyAyNy41LTYuODItMTAuNDctOS45MnoiLz48cGF0aCBmaWxsPSIjRkY4RDVEIiBkPSJtMCAxMDAuNDcgOS4yNy0zNC43M0gyOS4ybC4wNyAxOC4yNyAyNy41IDYuODIgOC4wNiAyMC45Ny00LjE1IDQuNjItMjAuOTQtMTUuOTZIMFptMTQxLjUgMC05LjI2LTM0LjczaC0xOS45M2wtLjA3IDE4LjI3LTI3LjUgNi44Mi04LjA2IDIwLjk3IDQuMTUgNC42MiAyMC45NC0xNS45NmgzOS43NFpNODQuNjQgMjguNDRINTYuODhsLTEuODkgMTkuNTQgOS44NCA2My44aDExLjg1bDkuODUtNjMuOC0xLjktMTkuNTRaIi8+PHBhdGggZmlsbD0iIzY2MTgwMCIgZD0iTTkuMjcgMCAwIDM2LjM4bDkuMjcgMjkuMzZIMjkuMkw1NC45OCA0OHptNDMuOTggODEuNjdoLTkuMDNsLTQuOTIgNC44MSAxNy40NyA0LjMzLTMuNTItOS4xNVpNMTMyLjI0IDBsOS4yNyAzNi4zOC05LjI3IDI5LjM2aC0xOS45M0w4Ni41MyA0OHpNODguMjcgODEuNjdoOS4wNGw0LjkyIDQuODItMTcuNDkgNC4zNCAzLjUzLTkuMTdabS05LjUgNDIuMyAyLjA2LTcuNTQtNC4xNS00LjYySDY0LjgybC00LjE0IDQuNjIgMi4wNSA3LjU0Ii8+PHBhdGggZmlsbD0iI0MwQzRDRCIgZD0iTTc4Ljc3IDEyMy45N3YxMi40NUg2Mi43NHYtMTIuNDVoMTYuMDJaIi8+PHBhdGggZmlsbD0iI0U3RUJGNiIgZD0ibTM5Ljc0IDEyMi42NiAyMyAxMy43NnYtMTIuNDZsLTIuMDUtNy41NHptNjIuMDMgMC0yMyAxMy43NnYtMTIuNDZsMi4wNi03LjU0eiIvPjwvc3ZnPjwvc3ZnPg==",
49
163
  },
50
164
  baseAccount: {
51
165
  id: "baseAccount",
52
166
  name: "Base",
53
- connector: baseAccount,
54
- logo: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAALZJREFUaEPtmjEOhDAMBNc/O14GvOzys3CAKK6eAlmaVGl2Zc+kTOU685vkc9/bnD2prZK5/TZY24z9P+g4F5hNh7/GdoG37WlAA5CATwgCxHENYISwQAMQII5rACOEBRqAAHFcAxghLNAABIjjGsAIYYEGIEAc1wBGCAs0AAHiuAYwQligAQgQxzWAEcICDUCAOK4BjBAWaAACxHENYISwQAMQII6fBjr+VHkW3+u+tfyxMpJaDgYzYxb/ALZVAAAAAElFTkSuQmCC",
167
+ connector: baseAccountConnector,
168
+ icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAALZJREFUaEPtmjEOhDAMBNc/O14GvOzys3CAKK6eAlmaVGl2Zc+kTOU685vkc9/bnD2prZK5/TZY24z9P+g4F5hNh7/GdoG37WlAA5CATwgCxHENYISwQAMQII5rACOEBRqAAHFcAxghLNAABIjjGsAIYYEGIEAc1wBGCAs0AAHiuAYwQligAQgQxzWAEcICDUCAOK4BjBAWaAACxHENYISwQAMQII6fBjr+VHkW3+u+tfyxMpJaDgYzYxb/ALZVAAAAAElFTkSuQmCC",
55
169
  },
56
170
  safe: {
57
171
  id: "safe",
58
172
  name: "Safe",
59
- connector: safe,
60
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/3913df81-63c2-4413-d60b-8ff83cbed500?projectId=34357d3c125c2bcf2ce2bc3309d98715",
173
+ connector: safeConnector,
174
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/3913df81-63c2-4413-d60b-8ff83cbed500?projectId=34357d3c125c2bcf2ce2bc3309d98715",
61
175
  },
62
176
  rainbow: {
63
177
  id: "rainbow",
64
178
  name: "Rainbow",
65
- connector: walletConnectConnector,
66
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/7a33d7f1-3d12-4b5c-f3ee-5cd83cb1b500?projectId=34357d3c125c2bcf2ce2bc3309d98715",
179
+ connector: rainbowConnector,
180
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/7a33d7f1-3d12-4b5c-f3ee-5cd83cb1b500?projectId=34357d3c125c2bcf2ce2bc3309d98715",
67
181
  },
68
182
  trust: {
69
183
  id: "trust",
70
184
  name: "Trust",
71
- connector: walletConnectConnector,
72
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/7677b54f-3486-46e2-4e37-bf8747814f00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
185
+ connector: trustwalletConnector,
186
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/7677b54f-3486-46e2-4e37-bf8747814f00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
73
187
  },
74
188
  ambire: {
75
189
  id: "ambire",
76
190
  name: "Ambire Wallet",
77
- connector: walletConnectConnector,
78
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/c39b3a16-1a38-4588-f089-cb7aeb584700?projectId=34357d3c125c2bcf2ce2bc3309d98715",
191
+ connector: ambireConnector,
192
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/c39b3a16-1a38-4588-f089-cb7aeb584700?projectId=34357d3c125c2bcf2ce2bc3309d98715",
79
193
  },
80
194
  argent: {
81
195
  id: "argent",
82
196
  name: "Argent",
83
197
  connector: walletConnectConnector,
84
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/215158d2-614b-49c9-410f-77aa661c3900?projectId=34357d3c125c2bcf2ce2bc3309d98715",
198
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/215158d2-614b-49c9-410f-77aa661c3900?projectId=34357d3c125c2bcf2ce2bc3309d98715",
85
199
  },
86
200
  binance: {
87
201
  id: "binance",
88
202
  name: "Binance Wallet",
89
203
  connector: walletConnectConnector,
90
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/ebac7b39-688c-41e3-7912-a4fefba74600?projectId=34357d3c125c2bcf2ce2bc3309d98715",
204
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/ebac7b39-688c-41e3-7912-a4fefba74600?projectId=34357d3c125c2bcf2ce2bc3309d98715",
91
205
  },
92
206
  okx: {
93
207
  id: "okx",
94
208
  name: "OKX Wallet",
95
- connector: walletConnectConnector,
96
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/c55df831-3c52-49fc-d1d1-97a926dc0c00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
209
+ connector: okxwalletConnector,
210
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/c55df831-3c52-49fc-d1d1-97a926dc0c00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
97
211
  },
98
212
  zerion: {
99
213
  id: "zerion",
100
214
  name: "Zerion",
101
- connector: walletConnectConnector,
102
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/73f6f52f-7862-49e7-bb85-ba93ab72cc00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
215
+ connector: zerionConnector,
216
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/73f6f52f-7862-49e7-bb85-ba93ab72cc00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
103
217
  },
104
218
  phantom: {
105
219
  id: "phantom",
106
220
  name: "Phantom",
107
- connector: walletConnectConnector,
108
- logo: "https://explorer-api.walletconnect.com/v3/logo/sm/b6ec7b81-bb4f-427d-e290-7631e6e50d00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
221
+ connector: phantomConnector,
222
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/b6ec7b81-bb4f-427d-e290-7631e6e50d00?projectId=34357d3c125c2bcf2ce2bc3309d98715",
109
223
  },
110
224
  coinbase: {
111
225
  id: "coinbase",
112
226
  name: "Coinbase Wallet",
113
- connector: walletConnectConnector,
114
- logo: "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMTAyNCAxMDI0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHN0eWxlPSdoZWlnaHQ6MjhweDt3aWR0aDoyOHB4Jz48cmVjdCB3aWR0aD0nMTAyNCcgaGVpZ2h0PScxMDI0JyBmaWxsPScjMDA1MkZGJyByeD0nMTAwJyByeT0nMTAwJz48L3JlY3Q+PHBhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNTIgNTEyQzE1MiA3MTAuODIzIDMxMy4xNzcgODcyIDUxMiA4NzJDNzEwLjgyMyA4NzIgODcyIDcxMC44MjMgODcyIDUxMkM4NzIgMzEzLjE3NyA3MTAuODIzIDE1MiA1MTIgMTUyQzMxMy4xNzcgMTUyIDE1MiAzMTMuMTc3IDE1MiA1MTJaTTQyMCAzOTZDNDA2Ljc0NSAzOTYgMzk2IDQwNi43NDUgMzk2IDQyMFY2MDRDMzk2IDYxNy4yNTUgNDA2Ljc0NSA2MjggNDIwIDYyOEg2MDRDNjE3LjI1NSA2MjggNjI4IDYxNy4yNTUgNjI4IDYwNFY0MjBDNjI4IDQwNi43NDUgNjE3LjI1NSAzOTYgNjA0IDM5Nkg0MjBaJyBmaWxsPSd3aGl0ZSc+PC9wYXRoPjwvc3ZnPg==",
227
+ connector: coinbaseWalletConnector,
228
+ icon: "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMTAyNCAxMDI0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHN0eWxlPSdoZWlnaHQ6MjhweDt3aWR0aDoyOHB4Jz48cmVjdCB3aWR0aD0nMTAyNCcgaGVpZ2h0PScxMDI0JyBmaWxsPScjMDA1MkZGJyByeD0nMTAwJyByeT0nMTAwJz48L3JlY3Q+PHBhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNTIgNTEyQzE1MiA3MTAuODIzIDMxMy4xNzcgODcyIDUxMiA4NzJDNzEwLjgyMyA4NzIgODcyIDcxMC44MjMgODcyIDUxMkM4NzIgMzEzLjE3NyA3MTAuODIzIDE1MiA1MTIgMTUyQzMxMy4xNzcgMTUyIDE1MiAzMTMuMTc3IDE1MiA1MTJaTTQyMCAzOTZDNDA2Ljc0NSAzOTYgMzk2IDQwNi43NDUgMzk2IDQyMFY2MDRDMzk2IDYxNy4yNTUgNDA2Ljc0NSA2MjggNDIwIDYyOEg2MDRDNjE3LjI1NSA2MjggNjI4IDYxNy4yNTUgNjI4IDYwNFY0MjBDNjI4IDQwNi43NDUgNjE3LjI1NSAzOTYgNjA0IDM5Nkg0MjBaJyBmaWxsPSd3aGl0ZSc+PC9wYXRoPjwvc3ZnPg==",
229
+ },
230
+ rabby: {
231
+ id: "rabby",
232
+ name: "Rabby",
233
+ connector: rabbyConnector,
234
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/255e6ba2-8dfd-43ad-e88e-57cbb98f6800?projectId=34357d3c125c2bcf2ce2bc3309d98715",
235
+ },
236
+ privy: {
237
+ id: "privy",
238
+ name: "Privy",
239
+ icon: "https://avatars.githubusercontent.com/u/81824329?s=200&v=4",
240
+ },
241
+ gemini: {
242
+ id: "gemini",
243
+ name: "Gemini",
244
+ connector: geminiConnector,
245
+ icon: "https://explorer-api.walletconnect.com/v3/logo/sm/56a3fd87-2627-4903-fddd-205224dac500?projectId=34357d3c125c2bcf2ce2bc3309d98715",
246
+ },
247
+ sequence: {
248
+ id: "sequence",
249
+ name: "Sequence",
250
+ icon: "https://v3.sequence-dev.app/icon.svg",
115
251
  },
116
252
  }
117
253
 
118
- export const featuredWallets = [
254
+ export const topShownWallets = [
119
255
  "metamask",
120
256
  "walletconnect",
121
257
  "baseAccount",
@@ -123,12 +259,116 @@ export const featuredWallets = [
123
259
  "phantom",
124
260
  ]
125
261
 
126
- export const getWalletLogo = (walletId?: string): string => {
262
+ export const getWalletIcon = (walletId?: string): string => {
127
263
  if (!walletId) return ""
128
- return (WALLET_CONFIGS[walletId]?.logo || "") as string
264
+ return (WALLET_CONFIGS[walletId]?.icon || "") as string
129
265
  }
130
266
 
131
267
  export const getWalletName = (walletId?: string): string => {
132
268
  if (!walletId) return ""
133
269
  return (WALLET_CONFIGS[walletId]?.name || "") as string
134
270
  }
271
+
272
+ export const wagmiConnectorToWalletId = (wagmiConnector: any): string => {
273
+ const wagmiConnectorName = (
274
+ wagmiConnector?.name ||
275
+ wagmiConnector?.id ||
276
+ ""
277
+ ).toLowerCase()
278
+ if (wagmiConnectorName.includes("rabby")) return "rabby"
279
+ if (wagmiConnectorName.includes("metamask")) return "metamask"
280
+ if (wagmiConnectorName.includes("walletconnect")) return "walletconnect"
281
+ if (wagmiConnectorName.includes("coinbase")) return "coinbase"
282
+ if (wagmiConnectorName.includes("base")) return "baseAccount"
283
+ if (wagmiConnectorName.includes("rainbow")) return "rainbow"
284
+ if (wagmiConnectorName.includes("trust")) return "trust"
285
+ if (wagmiConnectorName.includes("ambire")) return "ambire"
286
+ if (wagmiConnectorName.includes("argent")) return "argent"
287
+ if (wagmiConnectorName.includes("okx")) return "okxwallet"
288
+ if (wagmiConnectorName.includes("privy")) return "privy"
289
+ if (wagmiConnectorName.includes("gemini")) return "gemini"
290
+ if (wagmiConnectorName.includes("sequence")) return "sequence"
291
+ return wagmiConnector.id || "injected"
292
+ }
293
+
294
+ // Hook to get combined wallets from WALLET_CONFIGS and wagmi connectors
295
+ export const useWallets = () => {
296
+ const { connectors } = useConnect()
297
+
298
+ const allWallets = React.useMemo(() => {
299
+ // Get config wallets that have connectors
300
+ const configWallets = Object.values(WALLET_CONFIGS)
301
+ .filter((config) => config.connector)
302
+ .map((config) => ({
303
+ id: config.id,
304
+ name: config.name,
305
+ icon: config.icon,
306
+ connector: config.connector,
307
+ source: "config" as const,
308
+ }))
309
+
310
+ // Get wagmi wallets
311
+ const wagmiWallets =
312
+ connectors?.map((connector: any) => ({
313
+ id: wagmiConnectorToWalletId(connector),
314
+ name: connector.name || "",
315
+ icon:
316
+ getWalletIcon(wagmiConnectorToWalletId(connector)) ||
317
+ connector.icon ||
318
+ "",
319
+ connector: connector,
320
+ source: "wagmi" as const,
321
+ })) || []
322
+
323
+ // Combine and deduplicate, prioritizing wagmi over config
324
+ const allWallets: any[] = []
325
+
326
+ for (const wallet of configWallets) {
327
+ if (!wallet.connector) {
328
+ wallet.connector = connectors?.find(
329
+ (connector: any) => wagmiConnectorToWalletId(connector) === wallet.id,
330
+ )
331
+ if (!wallet.connector) {
332
+ continue
333
+ }
334
+ }
335
+ allWallets.push({
336
+ id: wallet.id,
337
+ name: wallet.name,
338
+ icon: wallet.icon,
339
+ connector: wallet.connector,
340
+ source: "config" as const,
341
+ })
342
+ }
343
+
344
+ for (const wallet of wagmiWallets) {
345
+ if (
346
+ !allWallets.find((w: any) => w.id === wagmiConnectorToWalletId(wallet))
347
+ ) {
348
+ const configWallet = configWallets.find(
349
+ (config: any) => config.id === wallet.id,
350
+ )
351
+
352
+ allWallets.push({
353
+ id: wallet.id,
354
+ name: configWallet?.name || wallet.name,
355
+ icon: configWallet?.icon || wallet.icon,
356
+ connector: wallet.connector,
357
+ source: "wagmi" as const,
358
+ })
359
+ }
360
+ }
361
+
362
+ return allWallets
363
+ }, [connectors])
364
+
365
+ return {
366
+ wallets: allWallets,
367
+ }
368
+ }
369
+
370
+ // Helper method to find wallet by ID using the hook (for use in components)
371
+ export const useFindWalletById = (walletId: string) => {
372
+ const { wallets } = useWallets()
373
+ return wallets.find((wallet: any) => wallet.id === walletId) || null
374
+ }