@dynamic-labs-sdk/solana 0.0.1-alpha.10

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 (65) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +15 -0
  3. package/addSolanaWalletStandardExtension.cjs.js +299 -0
  4. package/addSolanaWalletStandardExtension.esm.js +297 -0
  5. package/index.cjs.d.ts +1 -0
  6. package/index.cjs.js +53 -0
  7. package/index.esm.d.ts +1 -0
  8. package/index.esm.js +47 -0
  9. package/package.json +31 -0
  10. package/src/SolanaSigner.types.d.ts +40 -0
  11. package/src/SolanaSigner.types.d.ts.map +1 -0
  12. package/src/SolanaWalletProvider.types.d.ts +11 -0
  13. package/src/SolanaWalletProvider.types.d.ts.map +1 -0
  14. package/src/addSolanaExtension/addSolanaExtension.d.ts +8 -0
  15. package/src/addSolanaExtension/addSolanaExtension.d.ts.map +1 -0
  16. package/src/addSolanaExtension/index.d.ts +2 -0
  17. package/src/addSolanaExtension/index.d.ts.map +1 -0
  18. package/src/errors/NotSolanaProviderError/NotSolanaProviderError.d.ts +8 -0
  19. package/src/errors/NotSolanaProviderError/NotSolanaProviderError.d.ts.map +1 -0
  20. package/src/errors/NotSolanaProviderError/index.d.ts +2 -0
  21. package/src/errors/NotSolanaProviderError/index.d.ts.map +1 -0
  22. package/src/exports/index.d.ts +6 -0
  23. package/src/exports/index.d.ts.map +1 -0
  24. package/src/exports/walletStandard.d.ts +2 -0
  25. package/src/exports/walletStandard.d.ts.map +1 -0
  26. package/src/getSigner/getSigner.d.ts +3 -0
  27. package/src/getSigner/getSigner.d.ts.map +1 -0
  28. package/src/getSigner/index.d.ts +2 -0
  29. package/src/getSigner/index.d.ts.map +1 -0
  30. package/src/isSolanaWalletAccount/index.d.ts +2 -0
  31. package/src/isSolanaWalletAccount/index.d.ts.map +1 -0
  32. package/src/isSolanaWalletAccount/isSolanaWalletAccount.d.ts +3 -0
  33. package/src/isSolanaWalletAccount/isSolanaWalletAccount.d.ts.map +1 -0
  34. package/src/isSolanaWalletProvider/index.d.ts +2 -0
  35. package/src/isSolanaWalletProvider/index.d.ts.map +1 -0
  36. package/src/isSolanaWalletProvider/isSolanaWalletProvider.d.ts +4 -0
  37. package/src/isSolanaWalletProvider/isSolanaWalletProvider.d.ts.map +1 -0
  38. package/src/utils/isVersionedTransaction/index.d.ts +2 -0
  39. package/src/utils/isVersionedTransaction/index.d.ts.map +1 -0
  40. package/src/utils/isVersionedTransaction/isVersionedTransaction.d.ts +3 -0
  41. package/src/utils/isVersionedTransaction/isVersionedTransaction.d.ts.map +1 -0
  42. package/src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.d.ts +4 -0
  43. package/src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.d.ts.map +1 -0
  44. package/src/walletStandard/addSolanaWalletStandardExtension/index.d.ts +2 -0
  45. package/src/walletStandard/addSolanaWalletStandardExtension/index.d.ts.map +1 -0
  46. package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/createSolanaSignerFromSolanaStandardWallet.d.ts +4 -0
  47. package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/createSolanaSignerFromSolanaStandardWallet.d.ts.map +1 -0
  48. package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/index.d.ts +2 -0
  49. package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/index.d.ts.map +1 -0
  50. package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts +8 -0
  51. package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts.map +1 -0
  52. package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/index.d.ts +2 -0
  53. package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/index.d.ts.map +1 -0
  54. package/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.d.ts +11 -0
  55. package/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.d.ts.map +1 -0
  56. package/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/index.d.ts +2 -0
  57. package/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/index.d.ts.map +1 -0
  58. package/src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts +3 -0
  59. package/src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts.map +1 -0
  60. package/src/walletStandard/utils/hasAllRequiredFeatures/index.d.ts +2 -0
  61. package/src/walletStandard/utils/hasAllRequiredFeatures/index.d.ts.map +1 -0
  62. package/walletStandard.cjs.d.ts +1 -0
  63. package/walletStandard.cjs.js +12 -0
  64. package/walletStandard.esm.d.ts +1 -0
  65. package/walletStandard.esm.js +6 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,85 @@
1
+ ## 0.0.1-alpha.10 (2025-07-08)
2
+
3
+ This was a version bump only, there were no code changes.
4
+
5
+ ## 0.0.1-alpha.9 (2025-07-08)
6
+
7
+ ### 🩹 Fixes
8
+
9
+ - throw when attempting to set undefined prop in storage ([#200](https://github.com/dynamic-labs/dynamic-sdk/pull/200))
10
+
11
+ ## 0.0.1-alpha.8 (2025-07-03)
12
+
13
+ This was a version bump only, there were no code changes.
14
+
15
+ ## 0.0.1-alpha.7 (2025-07-02)
16
+
17
+ ### 🩹 Fixes
18
+
19
+ - **mfa:** make device id optional ([#175](https://github.com/dynamic-labs/dynamic-sdk/pull/175))
20
+ - **mfa:** allow create mfa options to authTotpMfaDevice ([#178](https://github.com/dynamic-labs/dynamic-sdk/pull/178))
21
+
22
+ ## 0.0.1-alpha.6 (2025-06-30)
23
+
24
+ ### 🚀 Features
25
+
26
+ - add support for solana wallet standard ([#133](https://github.com/dynamic-labs/dynamic-sdk/pull/133))
27
+ - add support social sign in ([#123](https://github.com/dynamic-labs/dynamic-sdk/pull/123))
28
+ - add support for TOTP MFA ([#139](https://github.com/dynamic-labs/dynamic-sdk/pull/139))([#140](https://github.com/dynamic-labs/dynamic-sdk/pull/140))([#141](https://github.com/dynamic-labs/dynamic-sdk/pull/141))([#142](https://github.com/dynamic-labs/dynamic-sdk/pull/142))([#143](https://github.com/dynamic-labs/dynamic-sdk/pull/143))([#144](https://github.com/dynamic-labs/dynamic-sdk/pull/144))([#149](https://github.com/dynamic-labs/dynamic-sdk/pull/149))([#146](https://github.com/dynamic-labs/dynamic-sdk/pull/146))([#147](https://github.com/dynamic-labs/dynamic-sdk/pull/147))
29
+ - add methods to connect and verify a wallet ([#99](https://github.com/dynamic-labs/dynamic-sdk/pull/99))
30
+ - add signMessage ([#111](https://github.com/dynamic-labs/dynamic-sdk/pull/111))
31
+ - add primary wallet account ([#128](https://github.com/dynamic-labs/dynamic-sdk/pull/128))
32
+ - cache project settings for connected users ([#148](https://github.com/dynamic-labs/dynamic-sdk/pull/148))
33
+ - add updateUser function ([#138](https://github.com/dynamic-labs/dynamic-sdk/pull/138))
34
+
35
+ ### 🩹 Fixes
36
+
37
+ - use correct import path for commonjs ([#125](https://github.com/dynamic-labs/dynamic-sdk/pull/125))
38
+ - ensure change events are fired only when state changes ([#168](https://github.com/dynamic-labs/dynamic-sdk/pull/168))
39
+
40
+ ### 🔧 Refactors
41
+
42
+ - modularize DynamicCoreState with global interface ([#93](https://github.com/dynamic-labs/dynamic-sdk/pull/93))
43
+ - add setVerifyResponse ([#106](https://github.com/dynamic-labs/dynamic-sdk/pull/106))
44
+ - rename set verify response function ([#122](https://github.com/dynamic-labs/dynamic-sdk/pull/122))
45
+
46
+ ## 0.0.1-alpha.5 (2025-06-04)
47
+
48
+ ### 🩹 Fixes
49
+
50
+ - support server side rendering ([#92](https://github.com/dynamic-labs/dynamic-sdk/pull/92))
51
+
52
+ ## 0.0.1-alpha.4 (2025-05-28)
53
+
54
+ ### 🚀 Features
55
+
56
+ - allow manual init of client ([#88](https://github.com/dynamic-labs/dynamic-sdk/pull/88))
57
+
58
+ ### 🩹 Fixes
59
+
60
+ - client core accidentally sharing state among different instances ([#89](https://github.com/dynamic-labs/dynamic-sdk/pull/89))
61
+
62
+ ## 0.0.1-alpha.3 (2025-05-27)
63
+
64
+ ### 🩹 Fixes
65
+
66
+ - properly export state changed events ([#85](https://github.com/dynamic-labs/dynamic-sdk/pull/85))
67
+
68
+ ## 0.0.1-alpha.2 (2025-05-26)
69
+
70
+ ### 🚀 Features
71
+
72
+ - logout user when session expires ([#47](https://github.com/dynamic-labs/dynamic-sdk/pull/47))
73
+ - add sms verification ([#78](https://github.com/dynamic-labs/dynamic-sdk/pull/78))
74
+ - raise changed events for state variables ([#79](https://github.com/dynamic-labs/dynamic-sdk/pull/79))
75
+ - allow extending the client ([#80](https://github.com/dynamic-labs/dynamic-sdk/pull/80))
76
+
77
+ ## 0.0.1-alpha.1 (2025-05-19)
78
+
79
+ ### 🩹 Fixes
80
+
81
+ - make the client package public ([#74](https://github.com/dynamic-labs/dynamic-sdk/pull/74))
82
+
83
+ ## 0.0.1-alpha.0 (2025-05-16)
84
+
85
+ Initial release of the Dynamic SDK.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @dynamic-labs-sdk/solana
2
+
3
+ This package contains the Solana (SVM) integration for the Dynamic SDK.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ import { addSolanaExtension } from '@dynamic-labs-sdk/solana';
9
+ import { createDynamicClient } from '@dynamic-labs-sdk/client';
10
+
11
+ const dynamicClient = createDynamicClient({
12
+ environmentId: '123',
13
+ });
14
+ addSolanaExtension(dynamicClient);
15
+ ```
@@ -0,0 +1,299 @@
1
+ 'use strict';
2
+
3
+ var core = require('@dynamic-labs-sdk/client/core');
4
+ var app = require('@wallet-standard/app');
5
+ var client = require('@dynamic-labs-sdk/client');
6
+ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
7
+ var web3_js = require('@solana/web3.js');
8
+
9
+ const isVersionedTransaction = (transaction)=>!('instructions' in transaction);
10
+
11
+ const getFeaturesForSolanaStandardWallet = (wallet)=>{
12
+ return wallet.features;
13
+ };
14
+
15
+ const createSolanaSignerFromSolanaStandardWallet = (wallet)=>{
16
+ const features = getFeaturesForSolanaStandardWallet(wallet);
17
+ const getPublicKey = ()=>{
18
+ var _wallet_accounts_, _wallet_accounts;
19
+ if (!((_wallet_accounts = wallet.accounts) == null ? void 0 : (_wallet_accounts_ = _wallet_accounts[0]) == null ? void 0 : _wallet_accounts_.publicKey)) {
20
+ return undefined;
21
+ }
22
+ return new web3_js.PublicKey(wallet.accounts[0].publicKey);
23
+ };
24
+ const getChain = ()=>{
25
+ // TODO: add support for getting the chain from the provider
26
+ // const currentNetwork = provider.getSelectedNetwork();
27
+ // assertDefined(currentNetwork, 'Network not found');
28
+ // const cluster = currentNetwork.cluster ?? 'mainnet';
29
+ const cluster = 'mainnet';
30
+ return `solana:${cluster}`;
31
+ };
32
+ const isConnected = ()=>{
33
+ var _wallet_accounts;
34
+ return ((_wallet_accounts = wallet.accounts) == null ? void 0 : _wallet_accounts.length) > 0;
35
+ };
36
+ const getCurrentAccount = async ()=>{
37
+ var _wallet_accounts;
38
+ if (!isConnected()) {
39
+ await connect();
40
+ }
41
+ const account = (_wallet_accounts = wallet.accounts) == null ? void 0 : _wallet_accounts[0];
42
+ core.assertDefined(account, 'No connected accounts found');
43
+ return account;
44
+ };
45
+ const connect = async ()=>{
46
+ var _features_standardconnect, _result_accounts;
47
+ const autoConnectedAccounts = wallet.accounts;
48
+ // some wallets like Farcaster will auto inject the account into the wallet object
49
+ // instead of returning it from the connect method
50
+ // so we need to check for that first
51
+ if ((autoConnectedAccounts == null ? void 0 : autoConnectedAccounts.length) && autoConnectedAccounts[0].publicKey && autoConnectedAccounts[0].address) {
52
+ return {
53
+ address: autoConnectedAccounts[0].address,
54
+ publicKey: autoConnectedAccounts[0].publicKey
55
+ };
56
+ }
57
+ const connectMethod = (_features_standardconnect = features['standard:connect']) == null ? void 0 : _features_standardconnect.connect;
58
+ core.assertDefined(connectMethod, 'connect method not found in wallet features');
59
+ const result = await connectMethod({
60
+ silent: false
61
+ });
62
+ const connectedAccount = result == null ? void 0 : (_result_accounts = result.accounts) == null ? void 0 : _result_accounts[0];
63
+ core.assertDefined(connectedAccount, 'No connected accounts');
64
+ return {
65
+ address: connectedAccount.address,
66
+ publicKey: connectedAccount.publicKey
67
+ };
68
+ };
69
+ const disconnect = async ()=>{
70
+ var _features_standarddisconnect;
71
+ const disconnectMethod = (_features_standarddisconnect = features['standard:disconnect']) == null ? void 0 : _features_standarddisconnect.disconnect;
72
+ core.assertDefined(disconnectMethod, 'disconnect method not found in wallet features');
73
+ await disconnectMethod();
74
+ };
75
+ const on = (event, listener)=>{
76
+ var _features_standardevents;
77
+ const onMethod = (_features_standardevents = features['standard:events']) == null ? void 0 : _features_standardevents.on;
78
+ if (!onMethod) {
79
+ return;
80
+ }
81
+ if (event !== 'accountChanged') {
82
+ return;
83
+ }
84
+ const wrappedListener = (prop)=>{
85
+ var _prop_accounts_, _prop_accounts;
86
+ const publicKey = (_prop_accounts = prop.accounts) == null ? void 0 : (_prop_accounts_ = _prop_accounts[0]) == null ? void 0 : _prop_accounts_.publicKey;
87
+ if (publicKey) {
88
+ listener(new TextDecoder().decode(publicKey));
89
+ }
90
+ };
91
+ // 'change' is the only event that is supported by the wallet standard
92
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
+ return onMethod('change', wrappedListener);
94
+ };
95
+ const signTransaction = async (transaction)=>{
96
+ var _features_solanasignTransaction;
97
+ const signMessageMethod = (_features_solanasignTransaction = features['solana:signTransaction']) == null ? void 0 : _features_solanasignTransaction.signTransaction;
98
+ core.assertDefined(signMessageMethod, 'signTransaction method not found in wallet features');
99
+ const account = await getCurrentAccount();
100
+ const signTransactionResult = await signMessageMethod({
101
+ account,
102
+ chain: getChain(),
103
+ transaction: transaction.serialize({
104
+ requireAllSignatures: false
105
+ })
106
+ });
107
+ const signedTransaction = signTransactionResult[0].signedTransaction;
108
+ if (isVersionedTransaction(transaction)) {
109
+ return web3_js.VersionedTransaction.deserialize(signedTransaction);
110
+ }
111
+ return web3_js.Transaction.from(signedTransaction);
112
+ };
113
+ const signAllTransactions = async (transactions)=>Promise.all(transactions.map(signTransaction));
114
+ const signAndSendTransaction = async (transaction)=>{
115
+ var _features_solanasignAndSendTransaction;
116
+ const signAndSendTransactionMethod = (_features_solanasignAndSendTransaction = features['solana:signAndSendTransaction']) == null ? void 0 : _features_solanasignAndSendTransaction.signAndSendTransaction;
117
+ core.assertDefined(signAndSendTransactionMethod, 'signAndSendTransaction method not found in wallet features');
118
+ const account = await getCurrentAccount();
119
+ const signedTransactions = await signAndSendTransactionMethod({
120
+ account,
121
+ chain: getChain(),
122
+ transaction: transaction.serialize({
123
+ requireAllSignatures: false
124
+ })
125
+ });
126
+ const [{ signature }] = signedTransactions;
127
+ return {
128
+ signature: new TextDecoder().decode(signature)
129
+ };
130
+ };
131
+ const signMessage = async (message)=>{
132
+ var _features_solanasignMessage;
133
+ const signMessageMethod = (_features_solanasignMessage = features['solana:signMessage']) == null ? void 0 : _features_solanasignMessage.signMessage;
134
+ core.assertDefined(signMessageMethod, 'signMessage method not found in wallet features');
135
+ const account = await getCurrentAccount();
136
+ const messages = await signMessageMethod({
137
+ account,
138
+ message
139
+ });
140
+ return {
141
+ signature: messages[0].signature
142
+ };
143
+ };
144
+ return {
145
+ addListener: ()=>{
146
+ throw new core.MethodNotImplementedError('addListener');
147
+ },
148
+ connect,
149
+ disconnect,
150
+ emit: ()=>{
151
+ throw new core.MethodNotImplementedError('emit');
152
+ },
153
+ eventNames: ()=>{
154
+ return [];
155
+ },
156
+ get isConnected () {
157
+ return isConnected();
158
+ },
159
+ listenerCount: ()=>{
160
+ return 0;
161
+ },
162
+ listeners: ()=>{
163
+ return [];
164
+ },
165
+ off: ()=>{
166
+ throw new core.MethodNotImplementedError('off');
167
+ },
168
+ on,
169
+ once: ()=>{
170
+ throw new core.MethodNotImplementedError('once');
171
+ },
172
+ providers: [],
173
+ get publicKey () {
174
+ return getPublicKey();
175
+ },
176
+ removeAllListeners: ()=>{
177
+ throw new core.MethodNotImplementedError('removeAllListeners');
178
+ },
179
+ removeListener: ()=>{
180
+ throw new core.MethodNotImplementedError('removeListener');
181
+ },
182
+ signAllTransactions,
183
+ signAndSendTransaction,
184
+ signMessage,
185
+ signTransaction
186
+ };
187
+ };
188
+
189
+ const createWalletProviderFromSolanaStandardWallet = ({ wallet })=>{
190
+ const connect = async ()=>{
191
+ const signer = await getSigner();
192
+ const result = await signer.connect();
193
+ return {
194
+ addresses: (result == null ? void 0 : result.address) ? [
195
+ result.address
196
+ ] : []
197
+ };
198
+ };
199
+ const disconnect = async ()=>{
200
+ const signer = await getSigner();
201
+ await signer.disconnect();
202
+ };
203
+ const getConnectedAddresses = async ()=>{
204
+ const signer = await getSigner();
205
+ if (!signer.isConnected) {
206
+ await signer.connect();
207
+ }
208
+ return {
209
+ addresses: wallet.accounts.map((account)=>account.address)
210
+ };
211
+ };
212
+ const getSigner = async (walletAccount)=>{
213
+ if (walletAccount) {
214
+ await client.assertWalletAccountSigningAvailability(walletAccount);
215
+ }
216
+ return createSolanaSignerFromSolanaStandardWallet(wallet);
217
+ };
218
+ const proveOwnership = async (walletAccount)=>{
219
+ var _core_metadata;
220
+ const client = core.getClient(walletAccount);
221
+ const core$1 = core.getCore(client);
222
+ const apiClient = core.createApiClient(client);
223
+ const appUrl = (_core_metadata = core$1.metadata) == null ? void 0 : _core_metadata.url;
224
+ core.assertDefined(appUrl, 'App URL is not set');
225
+ const url = new URL(appUrl);
226
+ const { nonce } = await apiClient.getNonce({
227
+ environmentId: core$1.environmentId
228
+ });
229
+ core.assertDefined(nonce, 'Failed to get nonce');
230
+ const messageToSign = await core.formatSignInMessage({
231
+ address: walletAccount.address,
232
+ blockchainName: 'Solana',
233
+ domain: url.host,
234
+ issuedAt: new Date().toISOString(),
235
+ nonce,
236
+ requestId: core$1.environmentId,
237
+ uri: url.toString()
238
+ });
239
+ const signedMessage = await signMessage({
240
+ message: messageToSign,
241
+ walletAccount
242
+ });
243
+ return {
244
+ chain: sdkApiCore.ChainEnum.Sol,
245
+ messageToSign,
246
+ signedMessage: signedMessage.signature
247
+ };
248
+ };
249
+ const signMessage = async ({ message, walletAccount })=>{
250
+ const signer = await getSigner(walletAccount);
251
+ const encodedMessage = new TextEncoder().encode(message);
252
+ const signedMessage = await signer.signMessage(encodedMessage, 'utf8');
253
+ core.assertDefined(signedMessage, 'Failed to sign message');
254
+ return {
255
+ signature: core.bufferToBase64(signedMessage.signature)
256
+ };
257
+ };
258
+ return {
259
+ chain: 'SOL',
260
+ connect,
261
+ disconnect,
262
+ getConnectedAddresses,
263
+ getSigner,
264
+ getWalletProviderType: ()=>sdkApiCore.WalletProviderEnum.BrowserExtension,
265
+ groupKey: core.formatWalletProviderGroupKey(wallet.name),
266
+ key: core.formatWalletProviderKey(wallet.name, sdkApiCore.ChainEnum.Sol),
267
+ metadata: {
268
+ displayName: wallet.name,
269
+ icon: wallet.icon
270
+ },
271
+ proveOwnership,
272
+ signMessage
273
+ };
274
+ };
275
+
276
+ const hasAllRequiredFeatures = (wallet)=>{
277
+ var _wallet_features, _wallet_features1, _wallet_features2, _wallet_features3;
278
+ return Boolean(((_wallet_features = wallet.features) == null ? void 0 : _wallet_features['standard:events']) && ((_wallet_features1 = wallet.features) == null ? void 0 : _wallet_features1['standard:connect']) && ((_wallet_features2 = wallet.features) == null ? void 0 : _wallet_features2['solana:signTransaction']) && ((_wallet_features3 = wallet.features) == null ? void 0 : _wallet_features3['solana:signMessage']));
279
+ };
280
+
281
+ const SOLANA_WALLET_STANDARD_EXTENSION_KEY = 'solanaWalletStandard';
282
+ const addSolanaWalletStandardExtension = (client)=>{
283
+ if (core.hasExtension(client, SOLANA_WALLET_STANDARD_EXTENSION_KEY)) {
284
+ return;
285
+ }
286
+ const walletProviderRegistry = core.getWalletProviderRegistry(client);
287
+ const walletStandardWallet = app.getWallets().get().filter(hasAllRequiredFeatures);
288
+ walletStandardWallet.forEach((wallet)=>{
289
+ const walletProvider = core.assignClient(createWalletProviderFromSolanaStandardWallet({
290
+ wallet
291
+ }), client);
292
+ walletProviderRegistry.register({
293
+ priority: core.WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,
294
+ walletProvider
295
+ });
296
+ });
297
+ };
298
+
299
+ exports.addSolanaWalletStandardExtension = addSolanaWalletStandardExtension;
@@ -0,0 +1,297 @@
1
+ import { MethodNotImplementedError, assertDefined, formatWalletProviderKey, formatWalletProviderGroupKey, bufferToBase64, getClient, getCore, createApiClient, formatSignInMessage, hasExtension, getWalletProviderRegistry, assignClient, WalletProviderPriority } from '@dynamic-labs-sdk/client/core';
2
+ import { getWallets } from '@wallet-standard/app';
3
+ import { assertWalletAccountSigningAvailability } from '@dynamic-labs-sdk/client';
4
+ import { WalletProviderEnum, ChainEnum } from '@dynamic-labs/sdk-api-core';
5
+ import { VersionedTransaction, Transaction, PublicKey } from '@solana/web3.js';
6
+
7
+ const isVersionedTransaction = (transaction)=>!('instructions' in transaction);
8
+
9
+ const getFeaturesForSolanaStandardWallet = (wallet)=>{
10
+ return wallet.features;
11
+ };
12
+
13
+ const createSolanaSignerFromSolanaStandardWallet = (wallet)=>{
14
+ const features = getFeaturesForSolanaStandardWallet(wallet);
15
+ const getPublicKey = ()=>{
16
+ var _wallet_accounts_, _wallet_accounts;
17
+ if (!((_wallet_accounts = wallet.accounts) == null ? void 0 : (_wallet_accounts_ = _wallet_accounts[0]) == null ? void 0 : _wallet_accounts_.publicKey)) {
18
+ return undefined;
19
+ }
20
+ return new PublicKey(wallet.accounts[0].publicKey);
21
+ };
22
+ const getChain = ()=>{
23
+ // TODO: add support for getting the chain from the provider
24
+ // const currentNetwork = provider.getSelectedNetwork();
25
+ // assertDefined(currentNetwork, 'Network not found');
26
+ // const cluster = currentNetwork.cluster ?? 'mainnet';
27
+ const cluster = 'mainnet';
28
+ return `solana:${cluster}`;
29
+ };
30
+ const isConnected = ()=>{
31
+ var _wallet_accounts;
32
+ return ((_wallet_accounts = wallet.accounts) == null ? void 0 : _wallet_accounts.length) > 0;
33
+ };
34
+ const getCurrentAccount = async ()=>{
35
+ var _wallet_accounts;
36
+ if (!isConnected()) {
37
+ await connect();
38
+ }
39
+ const account = (_wallet_accounts = wallet.accounts) == null ? void 0 : _wallet_accounts[0];
40
+ assertDefined(account, 'No connected accounts found');
41
+ return account;
42
+ };
43
+ const connect = async ()=>{
44
+ var _features_standardconnect, _result_accounts;
45
+ const autoConnectedAccounts = wallet.accounts;
46
+ // some wallets like Farcaster will auto inject the account into the wallet object
47
+ // instead of returning it from the connect method
48
+ // so we need to check for that first
49
+ if ((autoConnectedAccounts == null ? void 0 : autoConnectedAccounts.length) && autoConnectedAccounts[0].publicKey && autoConnectedAccounts[0].address) {
50
+ return {
51
+ address: autoConnectedAccounts[0].address,
52
+ publicKey: autoConnectedAccounts[0].publicKey
53
+ };
54
+ }
55
+ const connectMethod = (_features_standardconnect = features['standard:connect']) == null ? void 0 : _features_standardconnect.connect;
56
+ assertDefined(connectMethod, 'connect method not found in wallet features');
57
+ const result = await connectMethod({
58
+ silent: false
59
+ });
60
+ const connectedAccount = result == null ? void 0 : (_result_accounts = result.accounts) == null ? void 0 : _result_accounts[0];
61
+ assertDefined(connectedAccount, 'No connected accounts');
62
+ return {
63
+ address: connectedAccount.address,
64
+ publicKey: connectedAccount.publicKey
65
+ };
66
+ };
67
+ const disconnect = async ()=>{
68
+ var _features_standarddisconnect;
69
+ const disconnectMethod = (_features_standarddisconnect = features['standard:disconnect']) == null ? void 0 : _features_standarddisconnect.disconnect;
70
+ assertDefined(disconnectMethod, 'disconnect method not found in wallet features');
71
+ await disconnectMethod();
72
+ };
73
+ const on = (event, listener)=>{
74
+ var _features_standardevents;
75
+ const onMethod = (_features_standardevents = features['standard:events']) == null ? void 0 : _features_standardevents.on;
76
+ if (!onMethod) {
77
+ return;
78
+ }
79
+ if (event !== 'accountChanged') {
80
+ return;
81
+ }
82
+ const wrappedListener = (prop)=>{
83
+ var _prop_accounts_, _prop_accounts;
84
+ const publicKey = (_prop_accounts = prop.accounts) == null ? void 0 : (_prop_accounts_ = _prop_accounts[0]) == null ? void 0 : _prop_accounts_.publicKey;
85
+ if (publicKey) {
86
+ listener(new TextDecoder().decode(publicKey));
87
+ }
88
+ };
89
+ // 'change' is the only event that is supported by the wallet standard
90
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
91
+ return onMethod('change', wrappedListener);
92
+ };
93
+ const signTransaction = async (transaction)=>{
94
+ var _features_solanasignTransaction;
95
+ const signMessageMethod = (_features_solanasignTransaction = features['solana:signTransaction']) == null ? void 0 : _features_solanasignTransaction.signTransaction;
96
+ assertDefined(signMessageMethod, 'signTransaction method not found in wallet features');
97
+ const account = await getCurrentAccount();
98
+ const signTransactionResult = await signMessageMethod({
99
+ account,
100
+ chain: getChain(),
101
+ transaction: transaction.serialize({
102
+ requireAllSignatures: false
103
+ })
104
+ });
105
+ const signedTransaction = signTransactionResult[0].signedTransaction;
106
+ if (isVersionedTransaction(transaction)) {
107
+ return VersionedTransaction.deserialize(signedTransaction);
108
+ }
109
+ return Transaction.from(signedTransaction);
110
+ };
111
+ const signAllTransactions = async (transactions)=>Promise.all(transactions.map(signTransaction));
112
+ const signAndSendTransaction = async (transaction)=>{
113
+ var _features_solanasignAndSendTransaction;
114
+ const signAndSendTransactionMethod = (_features_solanasignAndSendTransaction = features['solana:signAndSendTransaction']) == null ? void 0 : _features_solanasignAndSendTransaction.signAndSendTransaction;
115
+ assertDefined(signAndSendTransactionMethod, 'signAndSendTransaction method not found in wallet features');
116
+ const account = await getCurrentAccount();
117
+ const signedTransactions = await signAndSendTransactionMethod({
118
+ account,
119
+ chain: getChain(),
120
+ transaction: transaction.serialize({
121
+ requireAllSignatures: false
122
+ })
123
+ });
124
+ const [{ signature }] = signedTransactions;
125
+ return {
126
+ signature: new TextDecoder().decode(signature)
127
+ };
128
+ };
129
+ const signMessage = async (message)=>{
130
+ var _features_solanasignMessage;
131
+ const signMessageMethod = (_features_solanasignMessage = features['solana:signMessage']) == null ? void 0 : _features_solanasignMessage.signMessage;
132
+ assertDefined(signMessageMethod, 'signMessage method not found in wallet features');
133
+ const account = await getCurrentAccount();
134
+ const messages = await signMessageMethod({
135
+ account,
136
+ message
137
+ });
138
+ return {
139
+ signature: messages[0].signature
140
+ };
141
+ };
142
+ return {
143
+ addListener: ()=>{
144
+ throw new MethodNotImplementedError('addListener');
145
+ },
146
+ connect,
147
+ disconnect,
148
+ emit: ()=>{
149
+ throw new MethodNotImplementedError('emit');
150
+ },
151
+ eventNames: ()=>{
152
+ return [];
153
+ },
154
+ get isConnected () {
155
+ return isConnected();
156
+ },
157
+ listenerCount: ()=>{
158
+ return 0;
159
+ },
160
+ listeners: ()=>{
161
+ return [];
162
+ },
163
+ off: ()=>{
164
+ throw new MethodNotImplementedError('off');
165
+ },
166
+ on,
167
+ once: ()=>{
168
+ throw new MethodNotImplementedError('once');
169
+ },
170
+ providers: [],
171
+ get publicKey () {
172
+ return getPublicKey();
173
+ },
174
+ removeAllListeners: ()=>{
175
+ throw new MethodNotImplementedError('removeAllListeners');
176
+ },
177
+ removeListener: ()=>{
178
+ throw new MethodNotImplementedError('removeListener');
179
+ },
180
+ signAllTransactions,
181
+ signAndSendTransaction,
182
+ signMessage,
183
+ signTransaction
184
+ };
185
+ };
186
+
187
+ const createWalletProviderFromSolanaStandardWallet = ({ wallet })=>{
188
+ const connect = async ()=>{
189
+ const signer = await getSigner();
190
+ const result = await signer.connect();
191
+ return {
192
+ addresses: (result == null ? void 0 : result.address) ? [
193
+ result.address
194
+ ] : []
195
+ };
196
+ };
197
+ const disconnect = async ()=>{
198
+ const signer = await getSigner();
199
+ await signer.disconnect();
200
+ };
201
+ const getConnectedAddresses = async ()=>{
202
+ const signer = await getSigner();
203
+ if (!signer.isConnected) {
204
+ await signer.connect();
205
+ }
206
+ return {
207
+ addresses: wallet.accounts.map((account)=>account.address)
208
+ };
209
+ };
210
+ const getSigner = async (walletAccount)=>{
211
+ if (walletAccount) {
212
+ await assertWalletAccountSigningAvailability(walletAccount);
213
+ }
214
+ return createSolanaSignerFromSolanaStandardWallet(wallet);
215
+ };
216
+ const proveOwnership = async (walletAccount)=>{
217
+ var _core_metadata;
218
+ const client = getClient(walletAccount);
219
+ const core = getCore(client);
220
+ const apiClient = createApiClient(client);
221
+ const appUrl = (_core_metadata = core.metadata) == null ? void 0 : _core_metadata.url;
222
+ assertDefined(appUrl, 'App URL is not set');
223
+ const url = new URL(appUrl);
224
+ const { nonce } = await apiClient.getNonce({
225
+ environmentId: core.environmentId
226
+ });
227
+ assertDefined(nonce, 'Failed to get nonce');
228
+ const messageToSign = await formatSignInMessage({
229
+ address: walletAccount.address,
230
+ blockchainName: 'Solana',
231
+ domain: url.host,
232
+ issuedAt: new Date().toISOString(),
233
+ nonce,
234
+ requestId: core.environmentId,
235
+ uri: url.toString()
236
+ });
237
+ const signedMessage = await signMessage({
238
+ message: messageToSign,
239
+ walletAccount
240
+ });
241
+ return {
242
+ chain: ChainEnum.Sol,
243
+ messageToSign,
244
+ signedMessage: signedMessage.signature
245
+ };
246
+ };
247
+ const signMessage = async ({ message, walletAccount })=>{
248
+ const signer = await getSigner(walletAccount);
249
+ const encodedMessage = new TextEncoder().encode(message);
250
+ const signedMessage = await signer.signMessage(encodedMessage, 'utf8');
251
+ assertDefined(signedMessage, 'Failed to sign message');
252
+ return {
253
+ signature: bufferToBase64(signedMessage.signature)
254
+ };
255
+ };
256
+ return {
257
+ chain: 'SOL',
258
+ connect,
259
+ disconnect,
260
+ getConnectedAddresses,
261
+ getSigner,
262
+ getWalletProviderType: ()=>WalletProviderEnum.BrowserExtension,
263
+ groupKey: formatWalletProviderGroupKey(wallet.name),
264
+ key: formatWalletProviderKey(wallet.name, ChainEnum.Sol),
265
+ metadata: {
266
+ displayName: wallet.name,
267
+ icon: wallet.icon
268
+ },
269
+ proveOwnership,
270
+ signMessage
271
+ };
272
+ };
273
+
274
+ const hasAllRequiredFeatures = (wallet)=>{
275
+ var _wallet_features, _wallet_features1, _wallet_features2, _wallet_features3;
276
+ return Boolean(((_wallet_features = wallet.features) == null ? void 0 : _wallet_features['standard:events']) && ((_wallet_features1 = wallet.features) == null ? void 0 : _wallet_features1['standard:connect']) && ((_wallet_features2 = wallet.features) == null ? void 0 : _wallet_features2['solana:signTransaction']) && ((_wallet_features3 = wallet.features) == null ? void 0 : _wallet_features3['solana:signMessage']));
277
+ };
278
+
279
+ const SOLANA_WALLET_STANDARD_EXTENSION_KEY = 'solanaWalletStandard';
280
+ const addSolanaWalletStandardExtension = (client)=>{
281
+ if (hasExtension(client, SOLANA_WALLET_STANDARD_EXTENSION_KEY)) {
282
+ return;
283
+ }
284
+ const walletProviderRegistry = getWalletProviderRegistry(client);
285
+ const walletStandardWallet = getWallets().get().filter(hasAllRequiredFeatures);
286
+ walletStandardWallet.forEach((wallet)=>{
287
+ const walletProvider = assignClient(createWalletProviderFromSolanaStandardWallet({
288
+ wallet
289
+ }), client);
290
+ walletProviderRegistry.register({
291
+ priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,
292
+ walletProvider
293
+ });
294
+ });
295
+ };
296
+
297
+ export { addSolanaWalletStandardExtension as a };
package/index.cjs.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src/exports/index";
package/index.cjs.js ADDED
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var addSolanaWalletStandardExtension = require('./addSolanaWalletStandardExtension.cjs.js');
4
+ var client = require('@dynamic-labs-sdk/client');
5
+ var core = require('@dynamic-labs-sdk/client/core');
6
+ require('@wallet-standard/app');
7
+ require('@dynamic-labs/sdk-api-core');
8
+ require('@solana/web3.js');
9
+
10
+ /**
11
+ * Adds all solana wallets to the client.
12
+ *
13
+ * @param client - The client to add the solana wallets to.
14
+ */ const addSolanaExtension = (client)=>{
15
+ addSolanaWalletStandardExtension.addSolanaWalletStandardExtension(client);
16
+ };
17
+
18
+ class NotSolanaProviderError extends client.BaseError {
19
+ constructor(params){
20
+ super({
21
+ cause: null,
22
+ code: 'not_solana_provider_error',
23
+ docsUrl: null,
24
+ name: 'NotSolanaProviderError',
25
+ shortMessage: 'Provider is not a Solana wallet provider'
26
+ });
27
+ this.providerKey = params.providerKey;
28
+ }
29
+ }
30
+
31
+ const isSolanaWalletProvider = (provider)=>{
32
+ return provider.chain === 'SOL';
33
+ };
34
+
35
+ const getSigner = async (walletAccount)=>{
36
+ const provider = core.getWalletProviderFromWalletAccount(walletAccount);
37
+ if (!isSolanaWalletProvider(provider)) {
38
+ throw new NotSolanaProviderError({
39
+ providerKey: provider.key
40
+ });
41
+ }
42
+ return provider.getSigner(walletAccount);
43
+ };
44
+
45
+ const isSolanaWalletAccount = (walletAccount)=>{
46
+ return walletAccount.chain === 'SOL';
47
+ };
48
+
49
+ exports.NotSolanaProviderError = NotSolanaProviderError;
50
+ exports.addSolanaExtension = addSolanaExtension;
51
+ exports.getSigner = getSigner;
52
+ exports.isSolanaWalletAccount = isSolanaWalletAccount;
53
+ exports.isSolanaWalletProvider = isSolanaWalletProvider;
package/index.esm.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src/exports/index";
package/index.esm.js ADDED
@@ -0,0 +1,47 @@
1
+ import { a as addSolanaWalletStandardExtension } from './addSolanaWalletStandardExtension.esm.js';
2
+ import { BaseError } from '@dynamic-labs-sdk/client';
3
+ import { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';
4
+ import '@wallet-standard/app';
5
+ import '@dynamic-labs/sdk-api-core';
6
+ import '@solana/web3.js';
7
+
8
+ /**
9
+ * Adds all solana wallets to the client.
10
+ *
11
+ * @param client - The client to add the solana wallets to.
12
+ */ const addSolanaExtension = (client)=>{
13
+ addSolanaWalletStandardExtension(client);
14
+ };
15
+
16
+ class NotSolanaProviderError extends BaseError {
17
+ constructor(params){
18
+ super({
19
+ cause: null,
20
+ code: 'not_solana_provider_error',
21
+ docsUrl: null,
22
+ name: 'NotSolanaProviderError',
23
+ shortMessage: 'Provider is not a Solana wallet provider'
24
+ });
25
+ this.providerKey = params.providerKey;
26
+ }
27
+ }
28
+
29
+ const isSolanaWalletProvider = (provider)=>{
30
+ return provider.chain === 'SOL';
31
+ };
32
+
33
+ const getSigner = async (walletAccount)=>{
34
+ const provider = getWalletProviderFromWalletAccount(walletAccount);
35
+ if (!isSolanaWalletProvider(provider)) {
36
+ throw new NotSolanaProviderError({
37
+ providerKey: provider.key
38
+ });
39
+ }
40
+ return provider.getSigner(walletAccount);
41
+ };
42
+
43
+ const isSolanaWalletAccount = (walletAccount)=>{
44
+ return walletAccount.chain === 'SOL';
45
+ };
46
+
47
+ export { NotSolanaProviderError, addSolanaExtension, getSigner, isSolanaWalletAccount, isSolanaWalletProvider };
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@dynamic-labs-sdk/solana",
3
+ "version": "0.0.1-alpha.10",
4
+ "type": "module",
5
+ "main": "./index.cjs.js",
6
+ "module": "./index.esm.js",
7
+ "types": "./index.esm.d.ts",
8
+ "exports": {
9
+ "./package.json": "./package.json",
10
+ ".": {
11
+ "types": "./index.esm.d.ts",
12
+ "import": "./index.esm.js",
13
+ "default": "./index.cjs.js"
14
+ },
15
+ "./walletStandard": {
16
+ "types": "./walletStandard.esm.d.ts",
17
+ "import": "./walletStandard.esm.js",
18
+ "default": "./walletStandard.cjs.js"
19
+ }
20
+ },
21
+ "dependencies": {
22
+ "@dynamic-labs-sdk/client": "0.0.1-alpha.10",
23
+ "@dynamic-labs/sdk-api-core": "0.0.702",
24
+ "@solana/web3.js": "1.98.1",
25
+ "@wallet-standard/app": "1.0.1",
26
+ "@wallet-standard/base": "1.0.1",
27
+ "@wallet-standard/features": "1.0.3",
28
+ "@wallet-standard/experimental-features": "0.1.1",
29
+ "eventemitter3": "^5.0.1"
30
+ }
31
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Solana signer specific types
3
+ */
4
+ import { type SendOptions, type Transaction, type TransactionSignature, type VersionedTransaction } from '@solana/web3.js';
5
+ import type EventEmitter from 'eventemitter3';
6
+ type PublicKey = {
7
+ toString: () => string;
8
+ };
9
+ export type ConnectionResult = {
10
+ address: string;
11
+ publicKey: PublicKey;
12
+ };
13
+ export type SolanaEvents = {
14
+ accountChanged(publicKey: string): unknown;
15
+ activeWalletDidChange(publicKey: string): unknown;
16
+ connect(...args: unknown[]): unknown;
17
+ disconnect(...args: unknown[]): unknown;
18
+ };
19
+ export type SignedMessage = {
20
+ signature: Uint8Array;
21
+ };
22
+ export type SolanaSigner = EventEmitter<SolanaEvents> & {
23
+ connect: (args?: {
24
+ onlyIfTrusted: boolean;
25
+ }) => Promise<ConnectionResult>;
26
+ disconnect(): Promise<void>;
27
+ isConnected: boolean;
28
+ providers: SolanaSigner[];
29
+ publicKey?: {
30
+ toBytes(): Uint8Array;
31
+ };
32
+ signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
33
+ signAndSendTransaction<T extends Transaction | VersionedTransaction>(transaction: T, options?: SendOptions): Promise<{
34
+ signature: TransactionSignature;
35
+ }>;
36
+ signMessage(message: Uint8Array, encoding?: string): Promise<SignedMessage>;
37
+ signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
38
+ };
39
+ export {};
40
+ //# sourceMappingURL=SolanaSigner.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaSigner.types.d.ts","sourceRoot":"","sources":["../../../../packages/solana/src/SolanaSigner.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAE9C,KAAK,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAClD,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACrC,UAAU,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,GAAG;IACtD,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE;QAAE,OAAO,IAAI,UAAU,CAAA;KAAE,CAAC;IACtC,mBAAmB,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAC9D,YAAY,EAAE,CAAC,EAAE,GAChB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,sBAAsB,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EACjE,WAAW,EAAE,CAAC,EACd,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC;QAAE,SAAS,EAAE,oBAAoB,CAAA;KAAE,CAAC,CAAC;IAChD,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5E,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAC1D,WAAW,EAAE,CAAC,GACb,OAAO,CAAC,CAAC,CAAC,CAAC;CACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Solana wallet provider specific types
3
+ */
4
+ import type { WalletAccount } from '@dynamic-labs-sdk/client';
5
+ import type { WalletProvider } from '@dynamic-labs-sdk/client/core';
6
+ import type { SolanaSigner } from './SolanaSigner.types';
7
+ export type SolanaWalletProvider = Omit<WalletProvider, 'chain'> & {
8
+ chain: 'SOL';
9
+ getSigner(walletAccount?: WalletAccount): Promise<SolanaSigner>;
10
+ };
11
+ //# sourceMappingURL=SolanaWalletProvider.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaWalletProvider.types.d.ts","sourceRoot":"","sources":["../../../../packages/solana/src/SolanaWalletProvider.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;IACjE,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACjE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ /**
3
+ * Adds all solana wallets to the client.
4
+ *
5
+ * @param client - The client to add the solana wallets to.
6
+ */
7
+ export declare const addSolanaExtension: (client: DynamicClient) => void;
8
+ //# sourceMappingURL=addSolanaExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addSolanaExtension.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/addSolanaExtension/addSolanaExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,WAAY,aAAa,KAAG,IAE1D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { addSolanaExtension } from './addSolanaExtension';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/addSolanaExtension/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { BaseError } from '@dynamic-labs-sdk/client';
2
+ export declare class NotSolanaProviderError extends BaseError {
3
+ readonly providerKey: string;
4
+ constructor(params: {
5
+ providerKey: string;
6
+ });
7
+ }
8
+ //# sourceMappingURL=NotSolanaProviderError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotSolanaProviderError.d.ts","sourceRoot":"","sources":["../../../../../../packages/solana/src/errors/NotSolanaProviderError/NotSolanaProviderError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE;CAW5C"}
@@ -0,0 +1,2 @@
1
+ export { NotSolanaProviderError } from './NotSolanaProviderError';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/solana/src/errors/NotSolanaProviderError/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { addSolanaExtension } from '../addSolanaExtension';
2
+ export { NotSolanaProviderError } from '../errors/NotSolanaProviderError';
3
+ export { getSigner } from '../getSigner';
4
+ export { isSolanaWalletAccount } from '../isSolanaWalletAccount';
5
+ export { isSolanaWalletProvider } from '../isSolanaWalletProvider';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/exports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { addSolanaWalletStandardExtension } from '../walletStandard/addSolanaWalletStandardExtension';
2
+ //# sourceMappingURL=walletStandard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletStandard.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/exports/walletStandard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,oDAAoD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { WalletAccount } from '@dynamic-labs-sdk/client';
2
+ export declare const getSigner: (walletAccount: WalletAccount) => Promise<import("../SolanaSigner.types").SolanaSigner>;
3
+ //# sourceMappingURL=getSigner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSigner.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/getSigner/getSigner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAM9D,eAAO,MAAM,SAAS,kBAAyB,aAAa,0DAQ3D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getSigner } from './getSigner';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/getSigner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isSolanaWalletAccount } from './isSolanaWalletAccount';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/isSolanaWalletAccount/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { WalletAccount } from '@dynamic-labs-sdk/client';
2
+ export declare const isSolanaWalletAccount: (walletAccount: WalletAccount) => boolean;
3
+ //# sourceMappingURL=isSolanaWalletAccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSolanaWalletAccount.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/isSolanaWalletAccount/isSolanaWalletAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,eAAO,MAAM,qBAAqB,kBACjB,aAAa,KAC3B,OAEF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isSolanaWalletProvider } from './isSolanaWalletProvider';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/isSolanaWalletProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WalletProvider } from '@dynamic-labs-sdk/client';
2
+ import type { SolanaWalletProvider } from '../SolanaWalletProvider.types';
3
+ export declare const isSolanaWalletProvider: (provider: WalletProvider) => provider is SolanaWalletProvider;
4
+ //# sourceMappingURL=isSolanaWalletProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSolanaWalletProvider.d.ts","sourceRoot":"","sources":["../../../../../packages/solana/src/isSolanaWalletProvider/isSolanaWalletProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,eAAO,MAAM,sBAAsB,aACvB,cAAc,KACvB,QAAQ,IAAI,oBAEd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isVersionedTransaction } from './isVersionedTransaction';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/solana/src/utils/isVersionedTransaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Transaction, VersionedTransaction } from '@solana/web3.js';
2
+ export declare const isVersionedTransaction: (transaction: VersionedTransaction | Transaction) => transaction is VersionedTransaction;
3
+ //# sourceMappingURL=isVersionedTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isVersionedTransaction.d.ts","sourceRoot":"","sources":["../../../../../../packages/solana/src/utils/isVersionedTransaction/isVersionedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,eAAO,MAAM,sBAAsB,gBACpB,oBAAoB,GAAG,WAAW,KAC9C,WAAW,IAAI,oBAAwD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ export declare const SOLANA_WALLET_STANDARD_EXTENSION_KEY = "solanaWalletStandard";
3
+ export declare const addSolanaWalletStandardExtension: (client: DynamicClient) => void;
4
+ //# sourceMappingURL=addSolanaWalletStandardExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addSolanaWalletStandardExtension.d.ts","sourceRoot":"","sources":["../../../../../../packages/solana/src/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAY9D,eAAO,MAAM,oCAAoC,yBAAyB,CAAC;AAE3E,eAAO,MAAM,gCAAgC,WACnC,aAAa,KACpB,IAwBF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { addSolanaWalletStandardExtension } from './addSolanaWalletStandardExtension';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/solana/src/walletStandard/addSolanaWalletStandardExtension/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Wallet } from '@wallet-standard/base';
2
+ import type { SolanaSigner } from '../../../SolanaSigner.types';
3
+ export declare const createSolanaSignerFromSolanaStandardWallet: (wallet: Wallet) => SolanaSigner;
4
+ //# sourceMappingURL=createSolanaSignerFromSolanaStandardWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSolanaSignerFromSolanaStandardWallet.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/createSolanaSignerFromSolanaStandardWallet.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAI9E,eAAO,MAAM,0CAA0C,WAC7C,MAAM,KACb,YA0OF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createSolanaSignerFromSolanaStandardWallet } from './createSolanaSignerFromSolanaStandardWallet';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0CAA0C,EAAE,MAAM,8CAA8C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Wallet } from '@wallet-standard/base';
2
+ import type { SolanaWalletProvider } from '../../../SolanaWalletProvider.types';
3
+ type CreateWalletProviderFromSolanaStandardWalletParams = {
4
+ wallet: Wallet;
5
+ };
6
+ export declare const createWalletProviderFromSolanaStandardWallet: ({ wallet, }: CreateWalletProviderFromSolanaStandardWalletParams) => SolanaWalletProvider;
7
+ export {};
8
+ //# sourceMappingURL=createWalletProviderFromSolanaStandardWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWalletProviderFromSolanaStandardWallet.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAGhF,KAAK,kDAAkD,GAAG;IACxD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,eAAO,MAAM,4CAA4C,gBAEtD,kDAAkD,KAAG,oBA2GvD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createWalletProviderFromSolanaStandardWallet } from './createWalletProviderFromSolanaStandardWallet';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4CAA4C,EAAE,MAAM,gDAAgD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Wallet } from '@wallet-standard/base';
2
+ import type { SignAndSendTransactionFeature, SignMessageFeature, SignTransactionFeature } from '@wallet-standard/experimental-features';
3
+ import type { StandardConnectFeature, StandardDisconnectFeature, StandardEventsFeature } from '@wallet-standard/features';
4
+ type WalletStandardFeatures = {
5
+ 'solana:signAndSendTransaction': SignAndSendTransactionFeature['experimental:signAndSendTransaction'];
6
+ 'solana:signMessage': SignMessageFeature['experimental:signMessage'];
7
+ 'solana:signTransaction': SignTransactionFeature['experimental:signTransaction'];
8
+ } & StandardConnectFeature & StandardDisconnectFeature & StandardEventsFeature;
9
+ export declare const getFeaturesForSolanaStandardWallet: (wallet: Wallet) => WalletStandardFeatures;
10
+ export {};
11
+ //# sourceMappingURL=getFeaturesForSolanaStandardWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFeaturesForSolanaStandardWallet.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EACV,6BAA6B,EAC7B,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAEnC,KAAK,sBAAsB,GAAG;IAC5B,+BAA+B,EAAE,6BAA6B,CAAC,qCAAqC,CAAC,CAAC;IACtG,oBAAoB,EAAE,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACrE,wBAAwB,EAAE,sBAAsB,CAAC,8BAA8B,CAAC,CAAC;CAClF,GAAG,sBAAsB,GACxB,yBAAyB,GACzB,qBAAqB,CAAC;AAExB,eAAO,MAAM,kCAAkC,WAAY,MAAM,KACrC,sBAC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getFeaturesForSolanaStandardWallet } from './getFeaturesForSolanaStandardWallet';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/getFeaturesForSolanaStandardWallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Wallet } from '@wallet-standard/base';
2
+ export declare const hasAllRequiredFeatures: (wallet: Wallet) => boolean;
3
+ //# sourceMappingURL=hasAllRequiredFeatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasAllRequiredFeatures.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAM,sBAAsB,WAAY,MAAM,KAAG,OAOvD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { hasAllRequiredFeatures } from './hasAllRequiredFeatures';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/solana/src/walletStandard/utils/hasAllRequiredFeatures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "./src/exports/walletStandard";
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var addSolanaWalletStandardExtension = require('./addSolanaWalletStandardExtension.cjs.js');
4
+ require('@dynamic-labs-sdk/client/core');
5
+ require('@wallet-standard/app');
6
+ require('@dynamic-labs-sdk/client');
7
+ require('@dynamic-labs/sdk-api-core');
8
+ require('@solana/web3.js');
9
+
10
+
11
+
12
+ exports.addSolanaWalletStandardExtension = addSolanaWalletStandardExtension.addSolanaWalletStandardExtension;
@@ -0,0 +1 @@
1
+ export * from "./src/exports/walletStandard";
@@ -0,0 +1,6 @@
1
+ export { a as addSolanaWalletStandardExtension } from './addSolanaWalletStandardExtension.esm.js';
2
+ import '@dynamic-labs-sdk/client/core';
3
+ import '@wallet-standard/app';
4
+ import '@dynamic-labs-sdk/client';
5
+ import '@dynamic-labs/sdk-api-core';
6
+ import '@solana/web3.js';