@meshconnect/uwc-injected-connector 0.2.7 → 0.2.9

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 (31) hide show
  1. package/dist/injected-connector.js +2 -2
  2. package/dist/injected-connector.js.map +1 -1
  3. package/dist/services/ethereum-transaction-service.d.ts.map +1 -1
  4. package/dist/services/ethereum-transaction-service.js +11 -20
  5. package/dist/services/ethereum-transaction-service.js.map +1 -1
  6. package/dist/services/signature-service.d.ts +2 -2
  7. package/dist/services/signature-service.d.ts.map +1 -1
  8. package/dist/services/signature-service.js +3 -10
  9. package/dist/services/signature-service.js.map +1 -1
  10. package/dist/services/solana/solana-transaction-service.d.ts +14 -2
  11. package/dist/services/solana/solana-transaction-service.d.ts.map +1 -1
  12. package/dist/services/solana/solana-transaction-service.js +87 -47
  13. package/dist/services/solana/solana-transaction-service.js.map +1 -1
  14. package/dist/services/solana/solana-wallet-service.d.ts +6 -7
  15. package/dist/services/solana/solana-wallet-service.d.ts.map +1 -1
  16. package/dist/services/solana/solana-wallet-service.js +13 -15
  17. package/dist/services/solana/solana-wallet-service.js.map +1 -1
  18. package/dist/services/transaction-service.d.ts +2 -2
  19. package/dist/services/transaction-service.d.ts.map +1 -1
  20. package/dist/services/transaction-service.js.map +1 -1
  21. package/dist/wallet-standard-discovery.d.ts +11 -9
  22. package/dist/wallet-standard-discovery.d.ts.map +1 -1
  23. package/dist/wallet-standard-discovery.js +47 -23
  24. package/dist/wallet-standard-discovery.js.map +1 -1
  25. package/package.json +2 -2
  26. package/src/injected-connector.ts +2 -2
  27. package/src/services/signature-service.ts +5 -17
  28. package/src/services/solana/solana-transaction-service.ts +121 -60
  29. package/src/services/solana/solana-wallet-service.ts +21 -23
  30. package/src/services/transaction-service.ts +3 -3
  31. package/src/wallet-standard-discovery.ts +77 -32
@@ -7,28 +7,97 @@
7
7
  import type { Wallet } from '@wallet-standard/base'
8
8
  import { getWallets } from '@wallet-standard/app'
9
9
  import { isWalletAdapterCompatibleStandardWallet } from '@solana/wallet-adapter-base'
10
- import type { WalletAdapter } from '@solana/wallet-adapter-base'
11
10
  import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base'
12
- import { CoinbaseWalletAdapter } from '@solana/wallet-adapter-wallets'
11
+ import type { Transaction } from '@solana/web3.js'
12
+
13
+ export interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
14
+ customFunctions: (
15
+ | 'sendSerializedTransaction'
16
+ | 'signSerializedTransaction'
17
+ | 'signAllSerializedTransactions'
18
+ )[]
19
+ sendSerializedTransaction: (
20
+ transaction: unknown,
21
+ rpcUrl: string
22
+ ) => Promise<string>
23
+ signSerializedTransaction: (
24
+ transaction: unknown
25
+ ) => Promise<Error | Transaction>
26
+ signAllSerializedTransactions: (
27
+ transactions: unknown[]
28
+ ) => Promise<Error | Transaction[]>
29
+ }
30
+
31
+ export type SolanaAdapter =
32
+ | ExtendedStandardWalletAdapter
33
+ | StandardWalletAdapter
13
34
 
14
35
  export interface WalletStandardInfo {
15
36
  uuid: string
16
37
  name: string
17
38
  chains: string[]
18
39
  features: string[]
19
- adapter: WalletAdapter | undefined
40
+ adapter: SolanaAdapter | undefined
20
41
  }
21
42
 
22
- export interface SolanaWalletWithAdapter {
23
- info: WalletStandardInfo
24
- wallet: Wallet
25
- adapter?: WalletAdapter
43
+ /**
44
+ * Polls for bridge wallets when UWCBridgeInitialized is true
45
+ * @returns Promise that resolves to an array of detected wallets from the bridge
46
+ */
47
+ async function pollForBridgeWallets(): Promise<WalletStandardInfo[]> {
48
+ const pollInterval = 100 // Poll every 100ms
49
+ const maxPollTime = 3000 // Poll for maximum 3 seconds
50
+ const startTime = Date.now()
51
+
52
+ return new Promise(resolve => {
53
+ const poll = () => {
54
+ // Check if we've exceeded the max poll time
55
+ if (Date.now() - startTime > maxPollTime) {
56
+ resolve([])
57
+ return
58
+ }
59
+
60
+ // Check if window.walletStandardWallets is available
61
+ if (
62
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
63
+ // @ts-ignore - window.eip6963Wallets is set by the bridge
64
+ window.walletStandardWallets &&
65
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
66
+ // @ts-ignore - window.eip6963Wallets is set by the bridge
67
+ Array.isArray(window.walletStandardWallets)
68
+ ) {
69
+ const bridgeWallets =
70
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
71
+ // @ts-ignore
72
+ window.walletStandardWallets as WalletStandardInfo[]
73
+ resolve(bridgeWallets)
74
+ return
75
+ }
76
+
77
+ // Continue polling
78
+ setTimeout(poll, pollInterval)
79
+ }
80
+
81
+ // Start polling
82
+ poll()
83
+ })
26
84
  }
27
85
 
28
86
  /**
29
87
  * Gets all available Solana wallets using Wallet Standard
30
88
  */
31
- export function getSolanaWallets(): WalletStandardInfo[] {
89
+ export async function getSolanaWallets(): Promise<WalletStandardInfo[]> {
90
+ // UWCBridgeChildInitialized is only initialized if app runs in an iframe. We can skip checking for bridge proxy providers when it's not necessary.
91
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
92
+ // @ts-ignore - window.UWCBridgeInitialized is set by the bridge
93
+ if (window.UWCBridgeChildInitialized === true) {
94
+ const wallets = await pollForBridgeWallets()
95
+
96
+ if (wallets.length > 0) {
97
+ return wallets
98
+ }
99
+ }
100
+
32
101
  const { get } = getWallets()
33
102
  const wallets = get()
34
103
 
@@ -56,30 +125,6 @@ export function getSolanaWallets(): WalletStandardInfo[] {
56
125
  }
57
126
  }
58
127
 
59
- // Initialize traditional wallet adapters - Only import CBW for now, as it's not using Wallet Standard
60
- const walletAdapters = [new CoinbaseWalletAdapter()]
61
-
62
- // Add traditional wallet adapters (but skip duplicates)
63
- for (const adapter of walletAdapters) {
64
- if (walletNames.has(adapter.name)) {
65
- // Skipping duplicate wallet already detected via Wallet Standard
66
- continue
67
- }
68
-
69
- const readyState = adapter.readyState
70
- const isDetected = readyState === 'Installed' || readyState === 'Loadable'
71
-
72
- // Only add if installed
73
- if (isDetected) {
74
- solanaWallets.push({
75
- uuid: `${adapter.name}-traditional`.toLowerCase().replace(/\s+/g, '-'),
76
- name: adapter.name,
77
- chains: ['solana:mainnet'],
78
- features: [],
79
- adapter: adapter
80
- })
81
- }
82
- }
83
128
  return solanaWallets
84
129
  }
85
130