@dynamic-labs/solana 2.1.0-alpha.8 → 2.1.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.
- package/CHANGELOG.md +264 -0
- package/package.json +14 -10
- package/src/CoinbaseSolana.cjs +1 -0
- package/src/CoinbaseSolana.js +1 -0
- package/src/SolanaWalletStandardConnector/SolanaWalletStandardConnector.cjs +100 -0
- package/src/SolanaWalletStandardConnector/SolanaWalletStandardConnector.d.ts +21 -0
- package/src/SolanaWalletStandardConnector/SolanaWalletStandardConnector.js +96 -0
- package/src/SolanaWalletStandardConnector/index.d.ts +1 -0
- package/src/SolanaWalletStandardConnector/utils/createSolanaSignerFromWalletStandard/createSolanaSignerFromWalletStandard.cjs +117 -0
- package/src/SolanaWalletStandardConnector/utils/createSolanaSignerFromWalletStandard/createSolanaSignerFromWalletStandard.d.ts +4 -0
- package/src/SolanaWalletStandardConnector/utils/createSolanaSignerFromWalletStandard/createSolanaSignerFromWalletStandard.js +113 -0
- package/src/SolanaWalletStandardConnector/utils/createSolanaSignerFromWalletStandard/index.d.ts +1 -0
- package/src/index.cjs +2 -0
- package/src/index.js +2 -0
- package/src/injected/BackpackSol.cjs +1 -1
- package/src/injected/BackpackSol.js +1 -1
- package/src/injected/InjectedWalletBase.cjs +14 -3
- package/src/injected/InjectedWalletBase.js +14 -3
- package/src/injected/UnknownInjected.cjs +21 -0
- package/src/injected/UnknownInjected.d.ts +8 -0
- package/src/injected/UnknownInjected.js +17 -0
- package/src/injected/fetchInjectedWalletConnectors.cjs +18 -2
- package/src/injected/fetchInjectedWalletConnectors.js +18 -2
- package/src/injected/index.d.ts +1 -0
- package/src/solProviderHelper.cjs +11 -7
- package/src/solProviderHelper.d.ts +2 -2
- package/src/solProviderHelper.js +11 -7
- package/src/types.d.ts +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,268 @@
|
|
|
1
1
|
|
|
2
|
+
## [2.1.0](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.32...v2.1.0) (2024-06-04)
|
|
3
|
+
|
|
4
|
+
## Features
|
|
5
|
+
|
|
6
|
+
### General Availability
|
|
7
|
+
|
|
8
|
+
- Support for Coinbase Smart Wallet comes as a default with V2.1, check out [the configuration guide and overview](https://docs.dynamic.xyz/wallets/advanced-wallets/coinbase-smart-wallet)
|
|
9
|
+
|
|
10
|
+
### New closed betas ([talk to us](https://dynamic.xyz/slack) for access)
|
|
11
|
+
|
|
12
|
+
- React Native - You can now build mobile-first onboarding experiences with the same Dynamic magic but for React Native, get started [here](https://docs.dynamic.xyz/react-native/introduction)
|
|
13
|
+
|
|
14
|
+
- Cookie Authentication - Dynamic can now be configured to set a secure, HttpOnly cookie that can be used for authenticating with Dynamic’s backend. This will contain a minified version of our JWT token.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Improvements
|
|
18
|
+
|
|
19
|
+
### General Wallets
|
|
20
|
+
- Phantom integration now supports Bitcoin out of the box
|
|
21
|
+
|
|
22
|
+
### Headless
|
|
23
|
+
- Social Sign-in is now available, learn more in the [guide here](https://docs.dynamic.xyz/headless/headless-social)
|
|
24
|
+
|
|
25
|
+
### Hooks
|
|
26
|
+
- [useSwitchWallet](https://docs.dynamic.xyz/react-sdk/hooks/useswitchwallet) now means you can easily switch between wallets for an authenticated user.
|
|
27
|
+
|
|
28
|
+
### Signup UI
|
|
29
|
+
- Farcaster QR code shows by default if the only login option, learn more [here](https://docs.dynamic.xyz/guides/integrations/farcaster/sign-in-with-farcaster)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## [2.1.0-alpha.32](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.31...v2.1.0-alpha.32) (2024-06-04)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Features
|
|
36
|
+
|
|
37
|
+
* favor base mainnet when using coinbase sdk ([#5834](https://github.com/dynamic-labs/DynamicAuth/issues/5834)) ([fee5294](https://github.com/dynamic-labs/DynamicAuth/commit/fee529461e6b033938d3ec044c139f5efcb24f6d))
|
|
38
|
+
* open OKX deep link for Bitcoin ([#5818](https://github.com/dynamic-labs/DynamicAuth/issues/5818)) ([c33e93c](https://github.com/dynamic-labs/DynamicAuth/commit/c33e93c81b384d8cd91b3bd0414dd9ea669405c4))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### Bug Fixes
|
|
42
|
+
|
|
43
|
+
* change Bitget Wallet to Bitget ([#5824](https://github.com/dynamic-labs/DynamicAuth/issues/5824)) ([23b8813](https://github.com/dynamic-labs/DynamicAuth/commit/23b8813e233be07392f5a3e283226b238b9fd99b))
|
|
44
|
+
* coinbase isInstalled ([#5821](https://github.com/dynamic-labs/DynamicAuth/issues/5821)) ([d0e5a37](https://github.com/dynamic-labs/DynamicAuth/commit/d0e5a37c6dd0cb6b85a5704767c93d495aa22854))
|
|
45
|
+
* filter window.solana in solProviderHelper if no extensionLocators are set ([#5819](https://github.com/dynamic-labs/DynamicAuth/issues/5819)) ([ca098ad](https://github.com/dynamic-labs/DynamicAuth/commit/ca098adb787365f9969c1a1f853d3c65ddd40d54))
|
|
46
|
+
* only send ordinal address if only one address retrieved from btc wallet ([#5817](https://github.com/dynamic-labs/DynamicAuth/issues/5817)) ([d54cef4](https://github.com/dynamic-labs/DynamicAuth/commit/d54cef424368b804fde0a4e607fefce22877a304))
|
|
47
|
+
|
|
48
|
+
## [2.1.0-alpha.31](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.30...v2.1.0-alpha.31) (2024-05-31)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
### Bug Fixes
|
|
52
|
+
|
|
53
|
+
* export solana private keys in the correct format ([#5809](https://github.com/dynamic-labs/DynamicAuth/issues/5809)) ([08ac1f8](https://github.com/dynamic-labs/DynamicAuth/commit/08ac1f87bb02ad07fd1fc1f544fdcc64ebe635b8))
|
|
54
|
+
* magiceden evm network switching ([#5800](https://github.com/dynamic-labs/DynamicAuth/issues/5800)) ([9b86797](https://github.com/dynamic-labs/DynamicAuth/commit/9b8679735f3db4b33bb57409c3a69adf2beb82aa))
|
|
55
|
+
* pass all signing inputs to createPsbtOptions ([#5798](https://github.com/dynamic-labs/DynamicAuth/issues/5798)) ([628ad4f](https://github.com/dynamic-labs/DynamicAuth/commit/628ad4f8c161496a0610ecbc3052735f8ceae98d))
|
|
56
|
+
* trigger onboarding async ([#5805](https://github.com/dynamic-labs/DynamicAuth/issues/5805)) ([2c1f98c](https://github.com/dynamic-labs/DynamicAuth/commit/2c1f98c0d91422f75e2d6d32ea4a27c2bc8d8376))
|
|
57
|
+
|
|
58
|
+
## [2.1.0-alpha.30](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.29...v2.1.0-alpha.30) (2024-05-31)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
### Bug Fixes
|
|
62
|
+
|
|
63
|
+
* ensure initExpirationTime is called automatically after authenticating ([#5797](https://github.com/dynamic-labs/DynamicAuth/issues/5797)) ([87eb802](https://github.com/dynamic-labs/DynamicAuth/commit/87eb802e0c2d3af2ca116e07099bfef426d30a1f))
|
|
64
|
+
* initExpirationTime should use expiresAt from storage ([#5799](https://github.com/dynamic-labs/DynamicAuth/issues/5799)) ([384ed17](https://github.com/dynamic-labs/DynamicAuth/commit/384ed1747d9b813ac0d34aaee36eb6480cb256d3))
|
|
65
|
+
* only run useValidateSession once on rerender ([#5795](https://github.com/dynamic-labs/DynamicAuth/issues/5795)) ([ba4446d](https://github.com/dynamic-labs/DynamicAuth/commit/ba4446df95726248b877a84def959cabe81ad9b6))
|
|
66
|
+
* store expiresAt timestamp from VerifyResponse in local storage for use in initExpirationTime ([#5796](https://github.com/dynamic-labs/DynamicAuth/issues/5796)) ([5f8aaeb](https://github.com/dynamic-labs/DynamicAuth/commit/5f8aaeb1cd45b10cb007f9eac25d18f50f142d8f))
|
|
67
|
+
|
|
68
|
+
## [2.1.0-alpha.29](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.28...v2.1.0-alpha.29) (2024-05-30)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
### Features
|
|
72
|
+
|
|
73
|
+
* add account and chain to coinbase walletClient ([#5776](https://github.com/dynamic-labs/DynamicAuth/issues/5776)) ([557091c](https://github.com/dynamic-labs/DynamicAuth/commit/557091c0efaec11273bd40b53c8bcd633c1bf48d))
|
|
74
|
+
* add support for phantom btc ([#5717](https://github.com/dynamic-labs/DynamicAuth/issues/5717)) ([c61ca4f](https://github.com/dynamic-labs/DynamicAuth/commit/c61ca4f437796be2b420902de7e7de730725d122))
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
### Bug Fixes
|
|
78
|
+
|
|
79
|
+
* add phantom btc mobile redirect ([#5789](https://github.com/dynamic-labs/DynamicAuth/issues/5789)) ([aaa2654](https://github.com/dynamic-labs/DynamicAuth/commit/aaa26548668b0733e7930c1d7f5cc3937b3dfb50))
|
|
80
|
+
* clear settings and configurations when logged out on page load ([#5787](https://github.com/dynamic-labs/DynamicAuth/issues/5787)) ([53c4d0b](https://github.com/dynamic-labs/DynamicAuth/commit/53c4d0b4686debdb43b1ab1b8b9e296ed4dd74b6))
|
|
81
|
+
* lookup projectSettings from store to check if cookie enabled ([#5790](https://github.com/dynamic-labs/DynamicAuth/issues/5790)) ([6f2314b](https://github.com/dynamic-labs/DynamicAuth/commit/6f2314b0afef984e6caea79ead73d12c5c6d83f0))
|
|
82
|
+
|
|
83
|
+
## [2.1.0-alpha.28](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.27...v2.1.0-alpha.28) (2024-05-29)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
### Features
|
|
87
|
+
|
|
88
|
+
* adds solana standard wallet connector ([#5752](https://github.com/dynamic-labs/DynamicAuth/issues/5752)) ([0040940](https://github.com/dynamic-labs/DynamicAuth/commit/0040940fd1adb37ab3106bb0e4dfe79403bc41f2))
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
### Bug Fixes
|
|
92
|
+
|
|
93
|
+
* farcaster fetch url fix ([#5767](https://github.com/dynamic-labs/DynamicAuth/issues/5767)) ([1408ba9](https://github.com/dynamic-labs/DynamicAuth/commit/1408ba92680363b9db7820a63d5e3d15dc26ad22))
|
|
94
|
+
|
|
95
|
+
## [2.1.0-alpha.27](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.26...v2.1.0-alpha.27) (2024-05-29)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
### Bug Fixes
|
|
99
|
+
|
|
100
|
+
* coinbase connection ([#5764](https://github.com/dynamic-labs/DynamicAuth/issues/5764)) ([aeacd1c](https://github.com/dynamic-labs/DynamicAuth/commit/aeacd1c55dc471fbf8c14eb05ab356b0a90aa239))
|
|
101
|
+
|
|
102
|
+
## [2.1.0-alpha.26](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.25...v2.1.0-alpha.26) (2024-05-29)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
### Features
|
|
106
|
+
|
|
107
|
+
* add farcaster login to react native ([#5713](https://github.com/dynamic-labs/DynamicAuth/issues/5713)) ([08f4473](https://github.com/dynamic-labs/DynamicAuth/commit/08f4473eec9b32b82b6f703fa4d5136514a61b25))
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
### Bug Fixes
|
|
111
|
+
|
|
112
|
+
* better error handling of invalid mfa otp ([#5759](https://github.com/dynamic-labs/DynamicAuth/issues/5759)) ([72ab01f](https://github.com/dynamic-labs/DynamicAuth/commit/72ab01f8f919f147eeedfabf8b4838802abf308a))
|
|
113
|
+
* show correct status for magic eden btc wallets after ([#5748](https://github.com/dynamic-labs/DynamicAuth/issues/5748)) ([b8f20bb](https://github.com/dynamic-labs/DynamicAuth/commit/b8f20bb796b9a2e88817ef3b0da6ac32e9012b18))
|
|
114
|
+
|
|
115
|
+
## [2.1.0-alpha.25](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.24...v2.1.0-alpha.25) (2024-05-27)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
### Bug Fixes
|
|
119
|
+
|
|
120
|
+
* btc balance calculation ([#5737](https://github.com/dynamic-labs/DynamicAuth/issues/5737)) ([9b5ceb3](https://github.com/dynamic-labs/DynamicAuth/commit/9b5ceb32d543037f60d7104f0b81b3abc86ebd10))
|
|
121
|
+
|
|
122
|
+
## [2.1.0-alpha.24](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.23...v2.1.0-alpha.24) (2024-05-26)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
### Features
|
|
126
|
+
|
|
127
|
+
* add onMfaCompleteOnce to useMfa ([#5702](https://github.com/dynamic-labs/DynamicAuth/issues/5702)) ([6451e33](https://github.com/dynamic-labs/DynamicAuth/commit/6451e3369ef1b4ba116378f0dd3fe4e82007e670))
|
|
128
|
+
* prompt custom fields during onboarding ([#5302](https://github.com/dynamic-labs/DynamicAuth/issues/5302)) ([8664223](https://github.com/dynamic-labs/DynamicAuth/commit/86642232cf2b490a820169f48ba8dc093010e1a0))
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
### Bug Fixes
|
|
132
|
+
|
|
133
|
+
* correct text on pending signature screen to match the embedded widget modal text ([#5707](https://github.com/dynamic-labs/DynamicAuth/issues/5707)) ([44a6a06](https://github.com/dynamic-labs/DynamicAuth/commit/44a6a0664e08d4b9fc25dd86c0e30f8d585558e0))
|
|
134
|
+
* pass captcha token for farcaster login ([#5706](https://github.com/dynamic-labs/DynamicAuth/issues/5706)) ([32bcb6e](https://github.com/dynamic-labs/DynamicAuth/commit/32bcb6e0e06c6e273c07f32893dfd550deeb6a19))
|
|
135
|
+
* use coinbase provider to get connected accounts for consistency ([#5711](https://github.com/dynamic-labs/DynamicAuth/issues/5711)) ([b9e9170](https://github.com/dynamic-labs/DynamicAuth/commit/b9e9170dad1ac27a85a44a7177b82055ce0035cb))
|
|
136
|
+
|
|
137
|
+
## [2.1.0-alpha.23](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.22...v2.1.0-alpha.23) (2024-05-23)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
### Features
|
|
141
|
+
|
|
142
|
+
* add authFailure and authInit events ([#5659](https://github.com/dynamic-labs/DynamicAuth/issues/5659)) ([f4f592a](https://github.com/dynamic-labs/DynamicAuth/commit/f4f592aaacd96fae9333b803c235c5f1fea0e20e))
|
|
143
|
+
* prompt mfa on signup and signin ([#5599](https://github.com/dynamic-labs/DynamicAuth/issues/5599)) ([8d4ecf4](https://github.com/dynamic-labs/DynamicAuth/commit/8d4ecf4c69c59c1fb14e79511fb2f9b33a7e3d89))
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
### Bug Fixes
|
|
147
|
+
|
|
148
|
+
* close auth modal if create embedded wallet throws ([#5683](https://github.com/dynamic-labs/DynamicAuth/issues/5683)) ([5331d73](https://github.com/dynamic-labs/DynamicAuth/commit/5331d731a171bb52a598eb5b25f7ba80cef7a64c))
|
|
149
|
+
* prevent state update when the webview is unmounted ([#5688](https://github.com/dynamic-labs/DynamicAuth/issues/5688)) ([8e4ecbd](https://github.com/dynamic-labs/DynamicAuth/commit/8e4ecbdcdb5f48c57ecaad90d663c66529013192))
|
|
150
|
+
* show phone number in use error message ([#5681](https://github.com/dynamic-labs/DynamicAuth/issues/5681)) ([e62f7b7](https://github.com/dynamic-labs/DynamicAuth/commit/e62f7b7b6a5e217944346faf2410028433cecad4))
|
|
151
|
+
|
|
152
|
+
## [2.1.0-alpha.22](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.21...v2.1.0-alpha.22) (2024-05-21)
|
|
153
|
+
|
|
154
|
+
## [2.1.0-alpha.21](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.20...v2.1.0-alpha.21) (2024-05-21)
|
|
155
|
+
|
|
156
|
+
## [2.1.0-alpha.20](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.19...v2.1.0-alpha.20) (2024-05-21)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
### Features
|
|
160
|
+
|
|
161
|
+
* adds client.networks module ([#5650](https://github.com/dynamic-labs/DynamicAuth/issues/5650)) ([70f7fe5](https://github.com/dynamic-labs/DynamicAuth/commit/70f7fe5f437756c51e787ac12183be0a23c51b89))
|
|
162
|
+
* user fields supports custom fields ([#5639](https://github.com/dynamic-labs/DynamicAuth/issues/5639)) ([8eb5788](https://github.com/dynamic-labs/DynamicAuth/commit/8eb5788fc3e1286929f5949ecb57736b21b13fb5))
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
### Bug Fixes
|
|
166
|
+
|
|
167
|
+
* add webcredentials to expo ([#5640](https://github.com/dynamic-labs/DynamicAuth/issues/5640)) ([9026fbf](https://github.com/dynamic-labs/DynamicAuth/commit/9026fbf0108537e884588f3adcdb9f0db04a159b))
|
|
168
|
+
* init ethers web3provider without a network if selected network is unsupported ([#5651](https://github.com/dynamic-labs/DynamicAuth/issues/5651)) ([e82040f](https://github.com/dynamic-labs/DynamicAuth/commit/e82040f424b17a70fac4400ab5b85a0dc6c0e35a))
|
|
169
|
+
|
|
170
|
+
## [2.1.0-alpha.19](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.18...v2.1.0-alpha.19) (2024-05-17)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
### Features
|
|
174
|
+
|
|
175
|
+
* add createUserProfileFromSDKUser ([#5596](https://github.com/dynamic-labs/DynamicAuth/issues/5596)) ([d37a1b4](https://github.com/dynamic-labs/DynamicAuth/commit/d37a1b4119f5ff4fff1e987d157f6d5abf105a8b))
|
|
176
|
+
* add headless social sign-in ([#5439](https://github.com/dynamic-labs/DynamicAuth/issues/5439)) ([e32fdf8](https://github.com/dynamic-labs/DynamicAuth/commit/e32fdf863718d661b90b592c8df734e92386ddf3))
|
|
177
|
+
* fetch custom fields in profile and update user ([#5627](https://github.com/dynamic-labs/DynamicAuth/issues/5627)) ([3940c25](https://github.com/dynamic-labs/DynamicAuth/commit/3940c2542bb330f3ed9a8eb98eed9d05c8fcb03a))
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
### Bug Fixes
|
|
181
|
+
|
|
182
|
+
* include applinks details to AASA ([#5635](https://github.com/dynamic-labs/DynamicAuth/issues/5635)) ([ce94fec](https://github.com/dynamic-labs/DynamicAuth/commit/ce94fec80adbb3eb4efcb79d1aa2cc6eb35eab6f))
|
|
183
|
+
* include the appOrigin to every api call to create correct passkey ([#5636](https://github.com/dynamic-labs/DynamicAuth/issues/5636)) ([ee64df3](https://github.com/dynamic-labs/DynamicAuth/commit/ee64df3b90037bd29cca161e601973ef202c58f0))
|
|
184
|
+
* use PromptModal when using the DynamicMultiWalletPromptsWidget for pending connection views ([#5594](https://github.com/dynamic-labs/DynamicAuth/issues/5594)) ([c095b6e](https://github.com/dynamic-labs/DynamicAuth/commit/c095b6e4c974f02cfe632963be92d16bb201dfa5))
|
|
185
|
+
|
|
186
|
+
## [2.1.0-alpha.18](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.17...v2.1.0-alpha.18) (2024-05-15)
|
|
187
|
+
|
|
188
|
+
## [2.1.0-alpha.17](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.16...v2.1.0-alpha.17) (2024-05-15)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
### Features
|
|
192
|
+
|
|
193
|
+
* add coinbaseWalletPreference prop ([#5607](https://github.com/dynamic-labs/DynamicAuth/issues/5607)) ([1ac3b2c](https://github.com/dynamic-labs/DynamicAuth/commit/1ac3b2ce7abb136465f4aa88b045dfb70d99aad7))
|
|
194
|
+
|
|
195
|
+
## [2.1.0-alpha.16](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.15...v2.1.0-alpha.16) (2024-05-14)
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
### Features
|
|
199
|
+
|
|
200
|
+
* add client.sdk.error with errors from the webview ([#5520](https://github.com/dynamic-labs/DynamicAuth/issues/5520)) ([a886927](https://github.com/dynamic-labs/DynamicAuth/commit/a8869273bf361c870d6e3cb82a28d9ccec65905b))
|
|
201
|
+
* add setDefaultTabIndex to default the selected wallets tab ([#5593](https://github.com/dynamic-labs/DynamicAuth/issues/5593)) ([6e8ce05](https://github.com/dynamic-labs/DynamicAuth/commit/6e8ce053c4f6f009acc57dac55a8e9c74fbcc73b))
|
|
202
|
+
* add visibility/auth-flow/user-profile to react-native ([#5564](https://github.com/dynamic-labs/DynamicAuth/issues/5564)) ([d93cea8](https://github.com/dynamic-labs/DynamicAuth/commit/d93cea82a123c6ec4d3d594a7dc064f4db2981c2))
|
|
203
|
+
|
|
204
|
+
## [2.1.0-alpha.15](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.14...v2.1.0-alpha.15) (2024-05-13)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
### Bug Fixes
|
|
208
|
+
|
|
209
|
+
* when a pregen is created, primaryWallet is not being setup ([#5584](https://github.com/dynamic-labs/DynamicAuth/issues/5584)) ([de08721](https://github.com/dynamic-labs/DynamicAuth/commit/de0872151e09f91dcbfaf1d043cf830f9df8d799))
|
|
210
|
+
|
|
211
|
+
## [2.1.0-alpha.14](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.13...v2.1.0-alpha.14) (2024-05-09)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
### Features
|
|
215
|
+
|
|
216
|
+
* add useSwitchWallet ([#5575](https://github.com/dynamic-labs/DynamicAuth/issues/5575)) ([d3053d9](https://github.com/dynamic-labs/DynamicAuth/commit/d3053d920110c26ef8052e77bf59e07dedc7c683))
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
### Bug Fixes
|
|
220
|
+
|
|
221
|
+
* linking phantom wallets in mobile ([#5524](https://github.com/dynamic-labs/DynamicAuth/issues/5524)) ([28d90f5](https://github.com/dynamic-labs/DynamicAuth/commit/28d90f5126b9c22535b63a3797cc060ef089fc63))
|
|
222
|
+
* only show farcaster QR code if Social Login is enabled ([#5559](https://github.com/dynamic-labs/DynamicAuth/issues/5559)) ([fa71aaf](https://github.com/dynamic-labs/DynamicAuth/commit/fa71aaf0f80da31d397600b2fd0cbea99b3689a4))
|
|
223
|
+
* remove goerli testnets and add sepolia ([#5565](https://github.com/dynamic-labs/DynamicAuth/issues/5565)) ([888eb03](https://github.com/dynamic-labs/DynamicAuth/commit/888eb031ef6f4dbbdc3015265cce8647d2c720b0))
|
|
224
|
+
|
|
225
|
+
## [2.1.0-alpha.13](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.12...v2.1.0-alpha.13) (2024-05-03)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
### Bug Fixes
|
|
229
|
+
|
|
230
|
+
* ensure Farcaster QR uses useSocialAuth hook ([#5550](https://github.com/dynamic-labs/DynamicAuth/issues/5550)) ([57fcd97](https://github.com/dynamic-labs/DynamicAuth/commit/57fcd97c44e3f52065dcf856acf7bca7b24fabc7))
|
|
231
|
+
|
|
232
|
+
## [2.1.0-alpha.12](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.11...v2.1.0-alpha.12) (2024-05-02)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
### Features
|
|
236
|
+
|
|
237
|
+
* display Farcaster QR code when it is the only login option ([#5514](https://github.com/dynamic-labs/DynamicAuth/issues/5514)) ([7b166d9](https://github.com/dynamic-labs/DynamicAuth/commit/7b166d9a30c581746f0e2edb71c44fc015dc128e))
|
|
238
|
+
|
|
239
|
+
## [2.1.0-alpha.11](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.10...v2.1.0-alpha.11) (2024-05-02)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
### Features
|
|
243
|
+
|
|
244
|
+
* **GVTY-1050:** add account token balances hook ([#5521](https://github.com/dynamic-labs/DynamicAuth/issues/5521)) ([5a6f937](https://github.com/dynamic-labs/DynamicAuth/commit/5a6f93733019f3b8d5c7a2c7a5537172a1e7eba4))
|
|
245
|
+
* headless reveal embedded wallet key ([#5518](https://github.com/dynamic-labs/DynamicAuth/issues/5518)) ([77c1536](https://github.com/dynamic-labs/DynamicAuth/commit/77c15360b2b28c52cbdeafb3ce8ca7e80dbecf57))
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
### Bug Fixes
|
|
249
|
+
|
|
250
|
+
* fallback to walletconnect for zerion on mobile ([#5536](https://github.com/dynamic-labs/DynamicAuth/issues/5536)) ([f0e5bfe](https://github.com/dynamic-labs/DynamicAuth/commit/f0e5bfea0b2ab271fd4c1475c8ce708ecb1a5926))
|
|
251
|
+
|
|
252
|
+
## [2.1.0-alpha.10](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.9...v2.1.0-alpha.10) (2024-04-30)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
### Features
|
|
256
|
+
|
|
257
|
+
* bump @coinbase/wallet-sdk to latest beta ([#5388](https://github.com/dynamic-labs/DynamicAuth/issues/5388)) ([9225546](https://github.com/dynamic-labs/DynamicAuth/commit/922554630ccf2ef98bc297521309918f922bc671))
|
|
258
|
+
|
|
259
|
+
## [2.1.0-alpha.9](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.8...v2.1.0-alpha.9) (2024-04-30)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
### Features
|
|
263
|
+
|
|
264
|
+
* headless create embedded wallet with optional passkey data parameter ([#5487](https://github.com/dynamic-labs/DynamicAuth/issues/5487)) ([891c3d7](https://github.com/dynamic-labs/DynamicAuth/commit/891c3d77a02a019140bcb8dd03b62b1afd69710e))
|
|
265
|
+
|
|
2
266
|
## [2.1.0-alpha.8](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.7...v2.1.0-alpha.8) (2024-04-26)
|
|
3
267
|
|
|
4
268
|
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/solana",
|
|
3
|
-
"version": "2.1.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
|
-
"url": "https://github.com/dynamic-labs/
|
|
6
|
+
"url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
|
|
7
7
|
"directory": "packages/solana"
|
|
8
8
|
},
|
|
9
9
|
"description": "A React SDK for implementing wallet web3 authentication and authorization to your website.",
|
|
@@ -27,16 +27,20 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@solana/web3.js": "1.91.6",
|
|
30
|
-
"@dynamic-labs/sdk-api-core": "0.0.
|
|
30
|
+
"@dynamic-labs/sdk-api-core": "0.0.453",
|
|
31
|
+
"@wallet-standard/app": "1.0.1",
|
|
32
|
+
"@wallet-standard/base": "1.0.1",
|
|
33
|
+
"@wallet-standard/features": "1.0.1",
|
|
34
|
+
"@wallet-standard/experimental-features": "0.1.1",
|
|
31
35
|
"bs58": "5.0.0",
|
|
32
36
|
"tweetnacl": "1.0.3",
|
|
33
|
-
"@dynamic-labs/rpc-provider-solana": "2.1.0
|
|
34
|
-
"@dynamic-labs/rpc-providers": "2.1.0
|
|
35
|
-
"@dynamic-labs/turnkey": "2.1.0
|
|
36
|
-
"@dynamic-labs/types": "2.1.0
|
|
37
|
-
"@dynamic-labs/utils": "2.1.0
|
|
38
|
-
"@dynamic-labs/wallet-book": "2.1.0
|
|
39
|
-
"@dynamic-labs/wallet-connector-core": "2.1.0
|
|
37
|
+
"@dynamic-labs/rpc-provider-solana": "2.1.0",
|
|
38
|
+
"@dynamic-labs/rpc-providers": "2.1.0",
|
|
39
|
+
"@dynamic-labs/turnkey": "2.1.0",
|
|
40
|
+
"@dynamic-labs/types": "2.1.0",
|
|
41
|
+
"@dynamic-labs/utils": "2.1.0",
|
|
42
|
+
"@dynamic-labs/wallet-book": "2.1.0",
|
|
43
|
+
"@dynamic-labs/wallet-connector-core": "2.1.0",
|
|
40
44
|
"eventemitter3": "5.0.1"
|
|
41
45
|
},
|
|
42
46
|
"peerDependencies": {}
|
package/src/CoinbaseSolana.cjs
CHANGED
|
@@ -12,6 +12,7 @@ require('tweetnacl');
|
|
|
12
12
|
require('bs58');
|
|
13
13
|
require('@solana/web3.js');
|
|
14
14
|
var InjectedWalletBase = require('./injected/InjectedWalletBase.cjs');
|
|
15
|
+
require('./SolanaWalletStandardConnector/SolanaWalletStandardConnector.cjs');
|
|
15
16
|
var isSignedMessage = require('./utils/isSignedMessage.cjs');
|
|
16
17
|
|
|
17
18
|
class CoinbaseSolana extends InjectedWalletBase.InjectedWalletBase {
|
package/src/CoinbaseSolana.js
CHANGED
|
@@ -8,6 +8,7 @@ import 'tweetnacl';
|
|
|
8
8
|
import 'bs58';
|
|
9
9
|
import '@solana/web3.js';
|
|
10
10
|
import { InjectedWalletBase } from './injected/InjectedWalletBase.js';
|
|
11
|
+
import './SolanaWalletStandardConnector/SolanaWalletStandardConnector.js';
|
|
11
12
|
import { isSignedMessage } from './utils/isSignedMessage.js';
|
|
12
13
|
|
|
13
14
|
class CoinbaseSolana extends InjectedWalletBase {
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../_virtual/_tslib.cjs');
|
|
7
|
+
var app = require('@wallet-standard/app');
|
|
8
|
+
var solWalletConnector = require('../solWalletConnector.cjs');
|
|
9
|
+
var createSolanaSignerFromWalletStandard = require('./utils/createSolanaSignerFromWalletStandard/createSolanaSignerFromWalletStandard.cjs');
|
|
10
|
+
|
|
11
|
+
const encoder = new TextEncoder();
|
|
12
|
+
class SolanaWalletStandardConnector extends solWalletConnector.SolWalletConnector {
|
|
13
|
+
constructor(props) {
|
|
14
|
+
super(props);
|
|
15
|
+
this.connectedChain = 'SOL';
|
|
16
|
+
this.supportedChains = ['SOL'];
|
|
17
|
+
}
|
|
18
|
+
get wallet() {
|
|
19
|
+
const walletStandard = SolanaWalletStandardConnector.getWallet(this.walletBook, this.key);
|
|
20
|
+
if (!walletStandard) {
|
|
21
|
+
throw new Error('Wallet not found');
|
|
22
|
+
}
|
|
23
|
+
return walletStandard;
|
|
24
|
+
}
|
|
25
|
+
get walletFeatures() {
|
|
26
|
+
return this.wallet.features;
|
|
27
|
+
}
|
|
28
|
+
connect() {
|
|
29
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
yield this.walletFeatures['standard:connect'].connect();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
endSession() {
|
|
34
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
yield this.walletFeatures['standard:disconnect'].disconnect();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
isInstalledOnBrowser() {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
getAddress() {
|
|
42
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
yield this.connect();
|
|
44
|
+
const [address] = yield this.getConnectedAccounts();
|
|
45
|
+
return address;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
getConnectedAccounts() {
|
|
49
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const addresses = this.wallet.accounts.map((account) => account.address);
|
|
51
|
+
return addresses;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
signMessage(messageToSign) {
|
|
55
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
const signer = yield this.getSigner();
|
|
57
|
+
if (!signer) {
|
|
58
|
+
throw new Error('Signer not found');
|
|
59
|
+
}
|
|
60
|
+
const message = encoder.encode(messageToSign);
|
|
61
|
+
const signature = yield signer.signMessage(message);
|
|
62
|
+
if (!(signature instanceof Uint8Array)) {
|
|
63
|
+
throw new Error('Signature not found');
|
|
64
|
+
}
|
|
65
|
+
return Buffer.from(signature).toString('base64');
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
getSigner() {
|
|
69
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const { wallet } = this;
|
|
71
|
+
return createSolanaSignerFromWalletStandard.createSolanaSignerFromWalletStandard(wallet, this);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
static getWallet(walletBook, walletKey) {
|
|
75
|
+
var _a, _b;
|
|
76
|
+
const wallets = app.getWallets().get();
|
|
77
|
+
const injectedConfig = (_a = walletBook.wallets[walletKey].injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.chain === 'sol');
|
|
78
|
+
if (!injectedConfig)
|
|
79
|
+
return;
|
|
80
|
+
const { features } = (_b = injectedConfig.walletStandard) !== null && _b !== void 0 ? _b : {};
|
|
81
|
+
if (!features)
|
|
82
|
+
return;
|
|
83
|
+
const wallet = wallets.find((wallet) => {
|
|
84
|
+
var _a;
|
|
85
|
+
const isNameMatch = wallet.name === ((_a = injectedConfig.walletStandard) === null || _a === void 0 ? void 0 : _a.name);
|
|
86
|
+
if (!isNameMatch)
|
|
87
|
+
return false;
|
|
88
|
+
const hasFeatures = features.reduce((hasAllFeatures, key) => {
|
|
89
|
+
const walletFeatures = Object.keys(wallet.features);
|
|
90
|
+
if (!hasAllFeatures)
|
|
91
|
+
return false;
|
|
92
|
+
return walletFeatures.includes(key);
|
|
93
|
+
}, true);
|
|
94
|
+
return hasFeatures;
|
|
95
|
+
});
|
|
96
|
+
return wallet;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
exports.SolanaWalletStandardConnector = SolanaWalletStandardConnector;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Wallet } from '@wallet-standard/base';
|
|
2
|
+
import { ConnectFeature, DisconnectFeature } from '@wallet-standard/features';
|
|
3
|
+
import { Chain } from '@dynamic-labs/wallet-connector-core';
|
|
4
|
+
import { WalletBookSchema } from '@dynamic-labs/wallet-book';
|
|
5
|
+
import { SolWalletConnector, SolWalletConnectorOpts } from './../solWalletConnector';
|
|
6
|
+
import { ISolana } from './../types';
|
|
7
|
+
export declare abstract class SolanaWalletStandardConnector extends SolWalletConnector {
|
|
8
|
+
connectedChain: Chain;
|
|
9
|
+
supportedChains: Chain[];
|
|
10
|
+
constructor(props: SolWalletConnectorOpts);
|
|
11
|
+
get wallet(): Wallet;
|
|
12
|
+
get walletFeatures(): ConnectFeature & DisconnectFeature;
|
|
13
|
+
connect(): Promise<void>;
|
|
14
|
+
endSession(): Promise<void>;
|
|
15
|
+
isInstalledOnBrowser(): boolean;
|
|
16
|
+
getAddress(): Promise<string | undefined>;
|
|
17
|
+
getConnectedAccounts(): Promise<string[]>;
|
|
18
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
19
|
+
getSigner(): Promise<ISolana | undefined>;
|
|
20
|
+
static getWallet(walletBook: WalletBookSchema, walletKey: string): Wallet | undefined;
|
|
21
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../_virtual/_tslib.js';
|
|
3
|
+
import { getWallets } from '@wallet-standard/app';
|
|
4
|
+
import { SolWalletConnector } from '../solWalletConnector.js';
|
|
5
|
+
import { createSolanaSignerFromWalletStandard } from './utils/createSolanaSignerFromWalletStandard/createSolanaSignerFromWalletStandard.js';
|
|
6
|
+
|
|
7
|
+
const encoder = new TextEncoder();
|
|
8
|
+
class SolanaWalletStandardConnector extends SolWalletConnector {
|
|
9
|
+
constructor(props) {
|
|
10
|
+
super(props);
|
|
11
|
+
this.connectedChain = 'SOL';
|
|
12
|
+
this.supportedChains = ['SOL'];
|
|
13
|
+
}
|
|
14
|
+
get wallet() {
|
|
15
|
+
const walletStandard = SolanaWalletStandardConnector.getWallet(this.walletBook, this.key);
|
|
16
|
+
if (!walletStandard) {
|
|
17
|
+
throw new Error('Wallet not found');
|
|
18
|
+
}
|
|
19
|
+
return walletStandard;
|
|
20
|
+
}
|
|
21
|
+
get walletFeatures() {
|
|
22
|
+
return this.wallet.features;
|
|
23
|
+
}
|
|
24
|
+
connect() {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
yield this.walletFeatures['standard:connect'].connect();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
endSession() {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
yield this.walletFeatures['standard:disconnect'].disconnect();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
isInstalledOnBrowser() {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
getAddress() {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
yield this.connect();
|
|
40
|
+
const [address] = yield this.getConnectedAccounts();
|
|
41
|
+
return address;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
getConnectedAccounts() {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const addresses = this.wallet.accounts.map((account) => account.address);
|
|
47
|
+
return addresses;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
signMessage(messageToSign) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
const signer = yield this.getSigner();
|
|
53
|
+
if (!signer) {
|
|
54
|
+
throw new Error('Signer not found');
|
|
55
|
+
}
|
|
56
|
+
const message = encoder.encode(messageToSign);
|
|
57
|
+
const signature = yield signer.signMessage(message);
|
|
58
|
+
if (!(signature instanceof Uint8Array)) {
|
|
59
|
+
throw new Error('Signature not found');
|
|
60
|
+
}
|
|
61
|
+
return Buffer.from(signature).toString('base64');
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
getSigner() {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
const { wallet } = this;
|
|
67
|
+
return createSolanaSignerFromWalletStandard(wallet, this);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
static getWallet(walletBook, walletKey) {
|
|
71
|
+
var _a, _b;
|
|
72
|
+
const wallets = getWallets().get();
|
|
73
|
+
const injectedConfig = (_a = walletBook.wallets[walletKey].injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.chain === 'sol');
|
|
74
|
+
if (!injectedConfig)
|
|
75
|
+
return;
|
|
76
|
+
const { features } = (_b = injectedConfig.walletStandard) !== null && _b !== void 0 ? _b : {};
|
|
77
|
+
if (!features)
|
|
78
|
+
return;
|
|
79
|
+
const wallet = wallets.find((wallet) => {
|
|
80
|
+
var _a;
|
|
81
|
+
const isNameMatch = wallet.name === ((_a = injectedConfig.walletStandard) === null || _a === void 0 ? void 0 : _a.name);
|
|
82
|
+
if (!isNameMatch)
|
|
83
|
+
return false;
|
|
84
|
+
const hasFeatures = features.reduce((hasAllFeatures, key) => {
|
|
85
|
+
const walletFeatures = Object.keys(wallet.features);
|
|
86
|
+
if (!hasAllFeatures)
|
|
87
|
+
return false;
|
|
88
|
+
return walletFeatures.includes(key);
|
|
89
|
+
}, true);
|
|
90
|
+
return hasFeatures;
|
|
91
|
+
});
|
|
92
|
+
return wallet;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export { SolanaWalletStandardConnector };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SolanaWalletStandardConnector } from './SolanaWalletStandardConnector';
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../../_virtual/_tslib.cjs');
|
|
7
|
+
var web3_js = require('@solana/web3.js');
|
|
8
|
+
var utils = require('../../../phantomRedirect/utils.cjs');
|
|
9
|
+
|
|
10
|
+
const isVersionedTransaction = (transaction) => !('instructions' in transaction);
|
|
11
|
+
const createSolanaSignerFromWalletStandard = (wallet, walletConnector) => {
|
|
12
|
+
const features = wallet.features;
|
|
13
|
+
const getCurrentAccount = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
const address = yield walletConnector.getAddress();
|
|
15
|
+
const account = wallet.accounts.find((account) => account.address === address);
|
|
16
|
+
if (!account) {
|
|
17
|
+
throw new Error('Account not found');
|
|
18
|
+
}
|
|
19
|
+
return account;
|
|
20
|
+
});
|
|
21
|
+
const getChain = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
const rpc = (_b = (_a = walletConnector.solNetworks[0].privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : walletConnector.solNetworks[0].rpcUrls[0];
|
|
24
|
+
const cluster = yield utils.fetchCluster(rpc);
|
|
25
|
+
return `solana:${cluster}`;
|
|
26
|
+
});
|
|
27
|
+
const signTransaction = (transaction) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
const account = yield getCurrentAccount();
|
|
29
|
+
const signTransactionResult = yield features['solana:signTransaction'].signTransaction({
|
|
30
|
+
account,
|
|
31
|
+
chain: yield getChain(),
|
|
32
|
+
transaction: transaction.serialize({
|
|
33
|
+
requireAllSignatures: false,
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
if (isVersionedTransaction(transaction)) {
|
|
37
|
+
return web3_js.VersionedTransaction.deserialize(signTransactionResult[0].signedTransaction);
|
|
38
|
+
}
|
|
39
|
+
return web3_js.Transaction.from(signTransactionResult[0].signedTransaction);
|
|
40
|
+
});
|
|
41
|
+
const signAllTransactions = (transactions) => _tslib.__awaiter(void 0, void 0, void 0, function* () { return Promise.all(transactions.map(signTransaction)); });
|
|
42
|
+
const signAndSendTransaction = (transaction) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
+
const account = yield getCurrentAccount();
|
|
44
|
+
const signedTransactions = yield features['solana:signAndSendTransaction'].signAndSendTransaction({
|
|
45
|
+
account,
|
|
46
|
+
chain: yield getChain(),
|
|
47
|
+
transaction: transaction.serialize(),
|
|
48
|
+
});
|
|
49
|
+
const [{ signature }] = signedTransactions;
|
|
50
|
+
return { signature: new TextDecoder().decode(signature) };
|
|
51
|
+
});
|
|
52
|
+
const signMessage = (message) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
+
const account = yield getCurrentAccount();
|
|
54
|
+
const messages = yield features['solana:signMessage'].signMessage({
|
|
55
|
+
account,
|
|
56
|
+
message,
|
|
57
|
+
});
|
|
58
|
+
return messages[0].signature;
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
addListener: () => {
|
|
62
|
+
throw new Error('Not implemented');
|
|
63
|
+
},
|
|
64
|
+
connect: () => {
|
|
65
|
+
throw new Error('Not implemented');
|
|
66
|
+
},
|
|
67
|
+
disconnect: () => walletConnector.endSession(),
|
|
68
|
+
emit: () => {
|
|
69
|
+
throw new Error('Not implemented');
|
|
70
|
+
},
|
|
71
|
+
eventNames: () => {
|
|
72
|
+
throw new Error('Not implemented');
|
|
73
|
+
},
|
|
74
|
+
isBackpack: false,
|
|
75
|
+
isBraveWallet: false,
|
|
76
|
+
isConnected: true,
|
|
77
|
+
isExodus: false,
|
|
78
|
+
isGlow: false,
|
|
79
|
+
isMagicEden: false,
|
|
80
|
+
isPhantom: false,
|
|
81
|
+
isSolflare: false,
|
|
82
|
+
listenerCount: () => {
|
|
83
|
+
throw new Error('Not implemented');
|
|
84
|
+
},
|
|
85
|
+
listeners: () => {
|
|
86
|
+
throw new Error('Not implemented');
|
|
87
|
+
},
|
|
88
|
+
off: () => {
|
|
89
|
+
throw new Error('Not implemented');
|
|
90
|
+
},
|
|
91
|
+
on: () => {
|
|
92
|
+
throw new Error('Not implemented');
|
|
93
|
+
},
|
|
94
|
+
once: () => {
|
|
95
|
+
throw new Error('Not implemented');
|
|
96
|
+
},
|
|
97
|
+
providers: [],
|
|
98
|
+
get publicKey() {
|
|
99
|
+
return new web3_js.PublicKey(wallet.accounts[0].publicKey);
|
|
100
|
+
},
|
|
101
|
+
removeAllListeners: () => {
|
|
102
|
+
throw new Error('Not implemented');
|
|
103
|
+
},
|
|
104
|
+
removeListener: () => {
|
|
105
|
+
throw new Error('Not implemented');
|
|
106
|
+
},
|
|
107
|
+
send: () => {
|
|
108
|
+
throw new Error('Not implemented');
|
|
109
|
+
},
|
|
110
|
+
signAllTransactions,
|
|
111
|
+
signAndSendTransaction,
|
|
112
|
+
signMessage,
|
|
113
|
+
signTransaction,
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
exports.createSolanaSignerFromWalletStandard = createSolanaSignerFromWalletStandard;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Wallet } from '@wallet-standard/base';
|
|
2
|
+
import { ISolana } from '../../../types';
|
|
3
|
+
import { SolWalletConnector } from '../../../solWalletConnector';
|
|
4
|
+
export declare const createSolanaSignerFromWalletStandard: (wallet: Wallet, walletConnector: SolWalletConnector) => ISolana;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../../../_virtual/_tslib.js';
|
|
3
|
+
import { PublicKey, VersionedTransaction, Transaction } from '@solana/web3.js';
|
|
4
|
+
import { fetchCluster } from '../../../phantomRedirect/utils.js';
|
|
5
|
+
|
|
6
|
+
const isVersionedTransaction = (transaction) => !('instructions' in transaction);
|
|
7
|
+
const createSolanaSignerFromWalletStandard = (wallet, walletConnector) => {
|
|
8
|
+
const features = wallet.features;
|
|
9
|
+
const getCurrentAccount = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
10
|
+
const address = yield walletConnector.getAddress();
|
|
11
|
+
const account = wallet.accounts.find((account) => account.address === address);
|
|
12
|
+
if (!account) {
|
|
13
|
+
throw new Error('Account not found');
|
|
14
|
+
}
|
|
15
|
+
return account;
|
|
16
|
+
});
|
|
17
|
+
const getChain = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
const rpc = (_b = (_a = walletConnector.solNetworks[0].privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : walletConnector.solNetworks[0].rpcUrls[0];
|
|
20
|
+
const cluster = yield fetchCluster(rpc);
|
|
21
|
+
return `solana:${cluster}`;
|
|
22
|
+
});
|
|
23
|
+
const signTransaction = (transaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
const account = yield getCurrentAccount();
|
|
25
|
+
const signTransactionResult = yield features['solana:signTransaction'].signTransaction({
|
|
26
|
+
account,
|
|
27
|
+
chain: yield getChain(),
|
|
28
|
+
transaction: transaction.serialize({
|
|
29
|
+
requireAllSignatures: false,
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
if (isVersionedTransaction(transaction)) {
|
|
33
|
+
return VersionedTransaction.deserialize(signTransactionResult[0].signedTransaction);
|
|
34
|
+
}
|
|
35
|
+
return Transaction.from(signTransactionResult[0].signedTransaction);
|
|
36
|
+
});
|
|
37
|
+
const signAllTransactions = (transactions) => __awaiter(void 0, void 0, void 0, function* () { return Promise.all(transactions.map(signTransaction)); });
|
|
38
|
+
const signAndSendTransaction = (transaction) => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
+
const account = yield getCurrentAccount();
|
|
40
|
+
const signedTransactions = yield features['solana:signAndSendTransaction'].signAndSendTransaction({
|
|
41
|
+
account,
|
|
42
|
+
chain: yield getChain(),
|
|
43
|
+
transaction: transaction.serialize(),
|
|
44
|
+
});
|
|
45
|
+
const [{ signature }] = signedTransactions;
|
|
46
|
+
return { signature: new TextDecoder().decode(signature) };
|
|
47
|
+
});
|
|
48
|
+
const signMessage = (message) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
const account = yield getCurrentAccount();
|
|
50
|
+
const messages = yield features['solana:signMessage'].signMessage({
|
|
51
|
+
account,
|
|
52
|
+
message,
|
|
53
|
+
});
|
|
54
|
+
return messages[0].signature;
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
addListener: () => {
|
|
58
|
+
throw new Error('Not implemented');
|
|
59
|
+
},
|
|
60
|
+
connect: () => {
|
|
61
|
+
throw new Error('Not implemented');
|
|
62
|
+
},
|
|
63
|
+
disconnect: () => walletConnector.endSession(),
|
|
64
|
+
emit: () => {
|
|
65
|
+
throw new Error('Not implemented');
|
|
66
|
+
},
|
|
67
|
+
eventNames: () => {
|
|
68
|
+
throw new Error('Not implemented');
|
|
69
|
+
},
|
|
70
|
+
isBackpack: false,
|
|
71
|
+
isBraveWallet: false,
|
|
72
|
+
isConnected: true,
|
|
73
|
+
isExodus: false,
|
|
74
|
+
isGlow: false,
|
|
75
|
+
isMagicEden: false,
|
|
76
|
+
isPhantom: false,
|
|
77
|
+
isSolflare: false,
|
|
78
|
+
listenerCount: () => {
|
|
79
|
+
throw new Error('Not implemented');
|
|
80
|
+
},
|
|
81
|
+
listeners: () => {
|
|
82
|
+
throw new Error('Not implemented');
|
|
83
|
+
},
|
|
84
|
+
off: () => {
|
|
85
|
+
throw new Error('Not implemented');
|
|
86
|
+
},
|
|
87
|
+
on: () => {
|
|
88
|
+
throw new Error('Not implemented');
|
|
89
|
+
},
|
|
90
|
+
once: () => {
|
|
91
|
+
throw new Error('Not implemented');
|
|
92
|
+
},
|
|
93
|
+
providers: [],
|
|
94
|
+
get publicKey() {
|
|
95
|
+
return new PublicKey(wallet.accounts[0].publicKey);
|
|
96
|
+
},
|
|
97
|
+
removeAllListeners: () => {
|
|
98
|
+
throw new Error('Not implemented');
|
|
99
|
+
},
|
|
100
|
+
removeListener: () => {
|
|
101
|
+
throw new Error('Not implemented');
|
|
102
|
+
},
|
|
103
|
+
send: () => {
|
|
104
|
+
throw new Error('Not implemented');
|
|
105
|
+
},
|
|
106
|
+
signAllTransactions,
|
|
107
|
+
signAndSendTransaction,
|
|
108
|
+
signMessage,
|
|
109
|
+
signTransaction,
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export { createSolanaSignerFromWalletStandard };
|
package/src/SolanaWalletStandardConnector/utils/createSolanaSignerFromWalletStandard/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createSolanaSignerFromWalletStandard } from './createSolanaSignerFromWalletStandard';
|
package/src/index.cjs
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
6
6
|
var turnkey = require('@dynamic-labs/turnkey');
|
|
7
7
|
var Phantom = require('./Phantom.cjs');
|
|
8
8
|
var fetchInjectedWalletConnectors = require('./injected/fetchInjectedWalletConnectors.cjs');
|
|
9
|
+
var UnknownInjected = require('./injected/UnknownInjected.cjs');
|
|
9
10
|
var isSignedMessage = require('./utils/isSignedMessage.cjs');
|
|
10
11
|
var isBackpackSolanaSigner = require('./utils/isBackpackSolanaSigner.cjs');
|
|
11
12
|
|
|
@@ -15,6 +16,7 @@ const SolanaWalletConnectors = (props) => [
|
|
|
15
16
|
...fetchInjectedWalletConnectors.fetchInjectedWalletConnectors(props),
|
|
16
17
|
...turnkey.TurnkeySolanaWalletConnectors(props),
|
|
17
18
|
Phantom.Phantom,
|
|
19
|
+
UnknownInjected.UnknownInjected,
|
|
18
20
|
];
|
|
19
21
|
|
|
20
22
|
exports.isSignedMessage = isSignedMessage.isSignedMessage;
|
package/src/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { TurnkeySolanaWalletConnectors } from '@dynamic-labs/turnkey';
|
|
3
3
|
import { Phantom } from './Phantom.js';
|
|
4
4
|
import { injectedWalletOverrides, fetchInjectedWalletConnectors } from './injected/fetchInjectedWalletConnectors.js';
|
|
5
|
+
import { UnknownInjected } from './injected/UnknownInjected.js';
|
|
5
6
|
export { isSignedMessage } from './utils/isSignedMessage.js';
|
|
6
7
|
export { isBackpackSolanaSigner } from './utils/isBackpackSolanaSigner.js';
|
|
7
8
|
|
|
@@ -11,6 +12,7 @@ const SolanaWalletConnectors = (props) => [
|
|
|
11
12
|
...fetchInjectedWalletConnectors(props),
|
|
12
13
|
...TurnkeySolanaWalletConnectors(props),
|
|
13
14
|
Phantom,
|
|
15
|
+
UnknownInjected,
|
|
14
16
|
];
|
|
15
17
|
|
|
16
18
|
export { SolanaWalletConnectors };
|
|
@@ -11,7 +11,7 @@ var InjectedWalletBase = require('./InjectedWalletBase.cjs');
|
|
|
11
11
|
class BackpackSol extends InjectedWalletBase.InjectedWalletBase {
|
|
12
12
|
constructor(opts) {
|
|
13
13
|
super(opts);
|
|
14
|
-
this.name = '
|
|
14
|
+
this.name = 'Backpack';
|
|
15
15
|
this.overrideKey = 'backpacksol';
|
|
16
16
|
this.wallet = walletBook.findWalletBookWallet(this.walletBook, this.key);
|
|
17
17
|
}
|
|
@@ -7,7 +7,7 @@ import { InjectedWalletBase } from './InjectedWalletBase.js';
|
|
|
7
7
|
class BackpackSol extends InjectedWalletBase {
|
|
8
8
|
constructor(opts) {
|
|
9
9
|
super(opts);
|
|
10
|
-
this.name = '
|
|
10
|
+
this.name = 'Backpack';
|
|
11
11
|
this.overrideKey = 'backpacksol';
|
|
12
12
|
this.wallet = findWalletBookWallet(this.walletBook, this.key);
|
|
13
13
|
}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
|
|
6
6
|
var _tslib = require('../../_virtual/_tslib.cjs');
|
|
7
7
|
var walletBook = require('@dynamic-labs/wallet-book');
|
|
8
|
+
var utils = require('@dynamic-labs/utils');
|
|
8
9
|
var solProviderHelper = require('../solProviderHelper.cjs');
|
|
9
10
|
var solWalletConnector = require('../solWalletConnector.cjs');
|
|
10
11
|
var SignMessageNotSupportedError = require('../errors/SignMessageNotSupportedError.cjs');
|
|
@@ -49,10 +50,20 @@ class InjectedWalletBase extends solWalletConnector.SolWalletConnector {
|
|
|
49
50
|
}
|
|
50
51
|
getAddress() {
|
|
51
52
|
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
var _a;
|
|
53
|
-
if (!this.isInstalledOnBrowser())
|
|
53
|
+
var _a, _b;
|
|
54
|
+
if (!this.isInstalledOnBrowser()) {
|
|
55
|
+
if (utils.isMobile() &&
|
|
56
|
+
((_a = this.wallet) === null || _a === void 0 ? void 0 : _a.mobile) &&
|
|
57
|
+
this.wallet.mobile.inAppBrowser) {
|
|
58
|
+
const inAppBrowserCompiledTemplate = utils.template(this.wallet.mobile.inAppBrowser);
|
|
59
|
+
const deepLink = inAppBrowserCompiledTemplate({
|
|
60
|
+
encodedDappURI: encodeURIComponent(window.location.toString()),
|
|
61
|
+
});
|
|
62
|
+
window.location.assign(deepLink);
|
|
63
|
+
}
|
|
54
64
|
return;
|
|
55
|
-
|
|
65
|
+
}
|
|
66
|
+
return (_b = this.getSolProviderHelper()) === null || _b === void 0 ? void 0 : _b.getAddress();
|
|
56
67
|
});
|
|
57
68
|
}
|
|
58
69
|
signMessage(messageToSign) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { __awaiter } from '../../_virtual/_tslib.js';
|
|
3
3
|
import { findWalletBookWallet } from '@dynamic-labs/wallet-book';
|
|
4
|
+
import { isMobile, template } from '@dynamic-labs/utils';
|
|
4
5
|
import { SolProviderHelper } from '../solProviderHelper.js';
|
|
5
6
|
import { SolWalletConnector } from '../solWalletConnector.js';
|
|
6
7
|
import { SignMessageNotSupportedError } from '../errors/SignMessageNotSupportedError.js';
|
|
@@ -45,10 +46,20 @@ class InjectedWalletBase extends SolWalletConnector {
|
|
|
45
46
|
}
|
|
46
47
|
getAddress() {
|
|
47
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
var _a;
|
|
49
|
-
if (!this.isInstalledOnBrowser())
|
|
49
|
+
var _a, _b;
|
|
50
|
+
if (!this.isInstalledOnBrowser()) {
|
|
51
|
+
if (isMobile() &&
|
|
52
|
+
((_a = this.wallet) === null || _a === void 0 ? void 0 : _a.mobile) &&
|
|
53
|
+
this.wallet.mobile.inAppBrowser) {
|
|
54
|
+
const inAppBrowserCompiledTemplate = template(this.wallet.mobile.inAppBrowser);
|
|
55
|
+
const deepLink = inAppBrowserCompiledTemplate({
|
|
56
|
+
encodedDappURI: encodeURIComponent(window.location.toString()),
|
|
57
|
+
});
|
|
58
|
+
window.location.assign(deepLink);
|
|
59
|
+
}
|
|
50
60
|
return;
|
|
51
|
-
|
|
61
|
+
}
|
|
62
|
+
return (_b = this.getSolProviderHelper()) === null || _b === void 0 ? void 0 : _b.getAddress();
|
|
52
63
|
});
|
|
53
64
|
}
|
|
54
65
|
signMessage(messageToSign) {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var walletBook = require('@dynamic-labs/wallet-book');
|
|
7
|
+
var InjectedWalletBase = require('./InjectedWalletBase.cjs');
|
|
8
|
+
|
|
9
|
+
class UnknownInjected extends InjectedWalletBase.InjectedWalletBase {
|
|
10
|
+
constructor(opts) {
|
|
11
|
+
super(opts);
|
|
12
|
+
this.name = 'Unknown';
|
|
13
|
+
this.overrideKey = 'unknown';
|
|
14
|
+
this.wallet = walletBook.findWalletBookWallet(this.walletBook, this.key);
|
|
15
|
+
}
|
|
16
|
+
isInstalledOnBrowser() {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.UnknownInjected = UnknownInjected;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SolWalletConnectorOpts } from '../solWalletConnector';
|
|
2
|
+
import { InjectedWalletBase } from './InjectedWalletBase';
|
|
3
|
+
export declare class UnknownInjected extends InjectedWalletBase {
|
|
4
|
+
name: string;
|
|
5
|
+
overrideKey: string;
|
|
6
|
+
constructor(opts: SolWalletConnectorOpts);
|
|
7
|
+
isInstalledOnBrowser(): boolean;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { findWalletBookWallet } from '@dynamic-labs/wallet-book';
|
|
3
|
+
import { InjectedWalletBase } from './InjectedWalletBase.js';
|
|
4
|
+
|
|
5
|
+
class UnknownInjected extends InjectedWalletBase {
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
super(opts);
|
|
8
|
+
this.name = 'Unknown';
|
|
9
|
+
this.overrideKey = 'unknown';
|
|
10
|
+
this.wallet = findWalletBookWallet(this.walletBook, this.key);
|
|
11
|
+
}
|
|
12
|
+
isInstalledOnBrowser() {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { UnknownInjected };
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
|
|
6
6
|
var CoinbaseSolana = require('../CoinbaseSolana.cjs');
|
|
7
7
|
var Solflare = require('../Solflare.cjs');
|
|
8
|
+
var SolanaWalletStandardConnector = require('../SolanaWalletStandardConnector/SolanaWalletStandardConnector.cjs');
|
|
8
9
|
var InjectedWalletBase = require('./InjectedWalletBase.cjs');
|
|
9
10
|
var BackpackSol = require('./BackpackSol.cjs');
|
|
10
11
|
|
|
@@ -25,12 +26,27 @@ const fetchInjectedWalletConnectors = ({ walletBook, }) => {
|
|
|
25
26
|
return Object.entries((_a = walletBook === null || walletBook === void 0 ? void 0 : walletBook.wallets) !== null && _a !== void 0 ? _a : {})
|
|
26
27
|
.filter(([key, wallet]) => {
|
|
27
28
|
var _a;
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
const isSolanaWallet = Boolean((_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.chain === 'sol'));
|
|
30
|
+
const shouldBeFiltered = filteredInjectedWalletKeysOverrides.includes(key);
|
|
31
|
+
return isSolanaWallet && !shouldBeFiltered;
|
|
30
32
|
})
|
|
31
33
|
.map(([key, wallet]) => {
|
|
34
|
+
var _a;
|
|
32
35
|
const { shortName } = wallet;
|
|
33
36
|
const name = shortName || wallet.name;
|
|
37
|
+
const hasWalletStandard = Boolean((_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.walletStandard));
|
|
38
|
+
if (hasWalletStandard) {
|
|
39
|
+
const isWalletStandardPresent = Boolean(SolanaWalletStandardConnector.SolanaWalletStandardConnector.getWallet(walletBook, key));
|
|
40
|
+
if (isWalletStandardPresent) {
|
|
41
|
+
return class extends SolanaWalletStandardConnector.SolanaWalletStandardConnector {
|
|
42
|
+
constructor(props) {
|
|
43
|
+
super(Object.assign({}, props));
|
|
44
|
+
this.name = name;
|
|
45
|
+
this.overrideKey = key;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
34
50
|
return class extends InjectedWalletBase.InjectedWalletBase {
|
|
35
51
|
constructor(props) {
|
|
36
52
|
super(Object.assign({}, props));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { CoinbaseSolana } from '../CoinbaseSolana.js';
|
|
3
3
|
import { Solflare } from '../Solflare.js';
|
|
4
|
+
import { SolanaWalletStandardConnector } from '../SolanaWalletStandardConnector/SolanaWalletStandardConnector.js';
|
|
4
5
|
import { InjectedWalletBase } from './InjectedWalletBase.js';
|
|
5
6
|
import { BackpackSol } from './BackpackSol.js';
|
|
6
7
|
|
|
@@ -21,12 +22,27 @@ const fetchInjectedWalletConnectors = ({ walletBook, }) => {
|
|
|
21
22
|
return Object.entries((_a = walletBook === null || walletBook === void 0 ? void 0 : walletBook.wallets) !== null && _a !== void 0 ? _a : {})
|
|
22
23
|
.filter(([key, wallet]) => {
|
|
23
24
|
var _a;
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
const isSolanaWallet = Boolean((_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.chain === 'sol'));
|
|
26
|
+
const shouldBeFiltered = filteredInjectedWalletKeysOverrides.includes(key);
|
|
27
|
+
return isSolanaWallet && !shouldBeFiltered;
|
|
26
28
|
})
|
|
27
29
|
.map(([key, wallet]) => {
|
|
30
|
+
var _a;
|
|
28
31
|
const { shortName } = wallet;
|
|
29
32
|
const name = shortName || wallet.name;
|
|
33
|
+
const hasWalletStandard = Boolean((_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.walletStandard));
|
|
34
|
+
if (hasWalletStandard) {
|
|
35
|
+
const isWalletStandardPresent = Boolean(SolanaWalletStandardConnector.getWallet(walletBook, key));
|
|
36
|
+
if (isWalletStandardPresent) {
|
|
37
|
+
return class extends SolanaWalletStandardConnector {
|
|
38
|
+
constructor(props) {
|
|
39
|
+
super(Object.assign({}, props));
|
|
40
|
+
this.name = name;
|
|
41
|
+
this.overrideKey = key;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
30
46
|
return class extends InjectedWalletBase {
|
|
31
47
|
constructor(props) {
|
|
32
48
|
super(Object.assign({}, props));
|
package/src/injected/index.d.ts
CHANGED
|
@@ -33,11 +33,14 @@ class SolProviderHelper {
|
|
|
33
33
|
if (config.windowLocations) {
|
|
34
34
|
for (const windowLocation of config.windowLocations) {
|
|
35
35
|
const foundProviders = utils.getProvidersFromWindow(windowLocation);
|
|
36
|
-
if (foundProviders && foundProviders.length)
|
|
36
|
+
if (foundProviders && foundProviders.length) {
|
|
37
37
|
providers.push(...foundProviders);
|
|
38
|
+
}
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
+
// We should only include the `window.solana` provider
|
|
42
|
+
// when extensionLocators are provided
|
|
43
|
+
if (config.extensionLocators.length !== 0 && window.solana) {
|
|
41
44
|
if (!window.solana.providers) {
|
|
42
45
|
providers.push(window.solana);
|
|
43
46
|
}
|
|
@@ -47,13 +50,14 @@ class SolProviderHelper {
|
|
|
47
50
|
}
|
|
48
51
|
return providers;
|
|
49
52
|
}
|
|
50
|
-
installedProviderLookup(
|
|
53
|
+
installedProviderLookup(extensionLocators) {
|
|
51
54
|
const allInstalledProviders = this.installedProviders();
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
if (
|
|
55
|
+
// No need to search through the window.solana providers if the
|
|
56
|
+
// wallet doesn't have extensionLocators
|
|
57
|
+
if (extensionLocators.length === 0) {
|
|
55
58
|
return allInstalledProviders[0];
|
|
56
|
-
|
|
59
|
+
}
|
|
60
|
+
return walletConnectorCore.ProviderLookup(allInstalledProviders, extensionLocators);
|
|
57
61
|
}
|
|
58
62
|
findProvider() {
|
|
59
63
|
return this.getInstalledProvider();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { WalletSchema } from '@dynamic-labs/wallet-book';
|
|
2
2
|
import { ProviderCondition, WalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
3
|
-
import { ISolana,
|
|
3
|
+
import { ISolana, ExtensionLocator as ExtensionLocator } from './types';
|
|
4
4
|
export declare class SolProviderHelper {
|
|
5
5
|
private wallet;
|
|
6
6
|
constructor(wallet: WalletSchema);
|
|
@@ -19,7 +19,7 @@ export declare class SolProviderHelper {
|
|
|
19
19
|
} | undefined;
|
|
20
20
|
getInstalledProvider(): ISolana | undefined;
|
|
21
21
|
installedProviders(): (import("./types").ISolanaSigner | import("./types").IBackpackSolanaSigner | import("./types").ICoinbaseSolanaSigner)[];
|
|
22
|
-
installedProviderLookup(
|
|
22
|
+
installedProviderLookup(extensionLocators: Array<ProviderCondition<ExtensionLocator>>): ISolana | undefined;
|
|
23
23
|
findProvider(): ISolana | undefined;
|
|
24
24
|
isInstalledHelper(): boolean;
|
|
25
25
|
getAddress(): Promise<string | undefined>;
|
package/src/solProviderHelper.js
CHANGED
|
@@ -29,11 +29,14 @@ class SolProviderHelper {
|
|
|
29
29
|
if (config.windowLocations) {
|
|
30
30
|
for (const windowLocation of config.windowLocations) {
|
|
31
31
|
const foundProviders = getProvidersFromWindow(windowLocation);
|
|
32
|
-
if (foundProviders && foundProviders.length)
|
|
32
|
+
if (foundProviders && foundProviders.length) {
|
|
33
33
|
providers.push(...foundProviders);
|
|
34
|
+
}
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
// We should only include the `window.solana` provider
|
|
38
|
+
// when extensionLocators are provided
|
|
39
|
+
if (config.extensionLocators.length !== 0 && window.solana) {
|
|
37
40
|
if (!window.solana.providers) {
|
|
38
41
|
providers.push(window.solana);
|
|
39
42
|
}
|
|
@@ -43,13 +46,14 @@ class SolProviderHelper {
|
|
|
43
46
|
}
|
|
44
47
|
return providers;
|
|
45
48
|
}
|
|
46
|
-
installedProviderLookup(
|
|
49
|
+
installedProviderLookup(extensionLocators) {
|
|
47
50
|
const allInstalledProviders = this.installedProviders();
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
if (
|
|
51
|
+
// No need to search through the window.solana providers if the
|
|
52
|
+
// wallet doesn't have extensionLocators
|
|
53
|
+
if (extensionLocators.length === 0) {
|
|
51
54
|
return allInstalledProviders[0];
|
|
52
|
-
|
|
55
|
+
}
|
|
56
|
+
return ProviderLookup(allInstalledProviders, extensionLocators);
|
|
53
57
|
}
|
|
54
58
|
findProvider() {
|
|
55
59
|
return this.getInstalledProvider();
|
package/src/types.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export type SignedMessage = {
|
|
|
34
34
|
signature: Uint8Array;
|
|
35
35
|
};
|
|
36
36
|
export type ISolanaSigner = {
|
|
37
|
-
[key in
|
|
37
|
+
[key in ExtensionLocator]: boolean;
|
|
38
38
|
} & EventEmitter<ISolanaEvents> & {
|
|
39
39
|
publicKey?: {
|
|
40
40
|
toBytes(): Uint8Array;
|
|
@@ -63,6 +63,6 @@ export type ICoinbaseSolanaSigner = Omit<ISolanaSigner, 'signMessage'> & {
|
|
|
63
63
|
signMessage: (message: Uint8Array, publicKey?: string) => Promise<void | Uint8Array>;
|
|
64
64
|
};
|
|
65
65
|
export type ISolana = ISolanaSigner | IBackpackSolanaSigner | ICoinbaseSolanaSigner;
|
|
66
|
-
export type
|
|
67
|
-
export type EthProviderCondition = ProviderCondition<
|
|
66
|
+
export type ExtensionLocator = 'isBraveWallet' | 'isGlow' | 'isPhantom' | 'isSolflare' | 'isExodus' | 'isBackpack' | 'isMagicEden';
|
|
67
|
+
export type EthProviderCondition = ProviderCondition<ExtensionLocator>;
|
|
68
68
|
export {};
|