@dynamic-labs-sdk/solana 0.1.0-alpha.3 → 0.1.0-alpha.30
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 +303 -0
- package/addSolanaWalletStandardExtension.cjs.js +118 -156
- package/addSolanaWalletStandardExtension.esm.js +121 -159
- package/addWaasSolanaExtension.cjs.js +60 -74
- package/addWaasSolanaExtension.esm.js +62 -76
- package/index.cjs.js +66 -21
- package/index.esm.js +64 -21
- package/isVersionedTransaction.cjs.js +1 -42
- package/isVersionedTransaction.esm.js +2 -42
- package/package.json +5 -5
- package/src/SolanaWalletProvider.types.d.ts +21 -3
- package/src/SolanaWalletProvider.types.d.ts.map +1 -1
- package/src/exports/index.d.ts +3 -1
- package/src/exports/index.d.ts.map +1 -1
- package/src/signAllTransactions/index.d.ts +2 -0
- package/src/signAllTransactions/index.d.ts.map +1 -0
- package/src/signAllTransactions/signAllTransactions.d.ts +18 -0
- package/src/signAllTransactions/signAllTransactions.d.ts.map +1 -0
- package/src/signAndSendTransaction/index.d.ts +2 -0
- package/src/signAndSendTransaction/index.d.ts.map +1 -0
- package/src/signAndSendTransaction/signAndSendTransaction.d.ts +18 -0
- package/src/signAndSendTransaction/signAndSendTransaction.d.ts.map +1 -0
- package/src/signTransaction/index.d.ts +2 -0
- package/src/signTransaction/index.d.ts.map +1 -0
- package/src/signTransaction/signTransaction.d.ts +18 -0
- package/src/signTransaction/signTransaction.d.ts.map +1 -0
- package/src/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.d.ts.map +1 -1
- package/src/waas/utils/createWalletProviderForWaasSolana/createWalletProviderForWaasSolana.d.ts.map +1 -1
- package/src/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts.map +1 -1
- package/src/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.d.ts +7 -0
- package/src/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.d.ts.map +1 -0
- package/src/walletStandard/utils/getActiveNetworkCluster/index.d.ts +2 -0
- package/src/walletStandard/utils/getActiveNetworkCluster/index.d.ts.map +1 -0
- package/waas.cjs.js +0 -1
- package/waas.esm.js +0 -1
- package/src/SolanaSigner.types.d.ts +0 -40
- package/src/SolanaSigner.types.d.ts.map +0 -1
- package/src/getSigner/getSigner.d.ts +0 -16
- package/src/getSigner/getSigner.d.ts.map +0 -1
- package/src/getSigner/index.d.ts +0 -2
- package/src/getSigner/index.d.ts.map +0 -1
- package/src/waas/utils/createSolanaSignerFromSolanaWaasProvider/createSolanaSignerFromSolanaWaasProvider.d.ts +0 -11
- package/src/waas/utils/createSolanaSignerFromSolanaWaasProvider/createSolanaSignerFromSolanaWaasProvider.d.ts.map +0 -1
- package/src/waas/utils/createSolanaSignerFromSolanaWaasProvider/index.d.ts +0 -2
- package/src/waas/utils/createSolanaSignerFromSolanaWaasProvider/index.d.ts.map +0 -1
- package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/createSolanaSignerFromSolanaStandardWallet.d.ts +0 -10
- package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/createSolanaSignerFromSolanaStandardWallet.d.ts.map +0 -1
- package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/index.d.ts +0 -2
- package/src/walletStandard/utils/createSolanaSignerFromSolanaStandardWallet/index.d.ts.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createBaseNetworkProvider, getNetworkProviderBuilderRegistry,
|
|
1
|
+
import { createBaseNetworkProvider, getNetworkProviderBuilderRegistry, formatWalletProviderKey, createWalletProviderEventEmitter, assertDefined, formatWalletProviderGroupKey, switchActiveNetworkInLastKnownRegistry, getActiveNetworkIdFromLastKnownRegistry, bufferToBase64, getDefaultClient, hasExtension, registerExtension, getWalletProviderRegistry, WalletProviderPriority } from '@dynamic-labs-sdk/client/core';
|
|
2
2
|
import { getWallets } from '@wallet-standard/app';
|
|
3
|
-
import { _ as _extends,
|
|
3
|
+
import { _ as _extends, i as isVersionedTransaction } from './isVersionedTransaction.esm.js';
|
|
4
4
|
import { Connection, PublicKey, VersionedTransaction, Transaction } from '@solana/web3.js';
|
|
5
|
-
import { assertWalletAccountSigningAvailability } from '@dynamic-labs-sdk/client';
|
|
5
|
+
import { getActiveNetworkData, assertWalletAccountSigningAvailability } from '@dynamic-labs-sdk/client';
|
|
6
6
|
import { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';
|
|
7
7
|
import bs58 from 'bs58';
|
|
8
8
|
|
|
@@ -22,6 +22,7 @@ const fetchSolBalance = async ({ address, rpcUrl })=>{
|
|
|
22
22
|
|
|
23
23
|
const createSolanaNetworkProvider = (networkData)=>_extends({}, createBaseNetworkProvider('SOL', networkData), {
|
|
24
24
|
cluster: networkData.cluster,
|
|
25
|
+
genesisHash: networkData.genesisHash,
|
|
25
26
|
getBalance: async ({ address })=>({
|
|
26
27
|
balance: await fetchSolBalance({
|
|
27
28
|
address,
|
|
@@ -43,36 +44,28 @@ const registerSolanaNetworkProviderBuilder = (client)=>{
|
|
|
43
44
|
});
|
|
44
45
|
};
|
|
45
46
|
|
|
47
|
+
const getActiveNetworkCluster = async ({ walletAccount }, client)=>{
|
|
48
|
+
const { networkData } = await getActiveNetworkData({
|
|
49
|
+
walletAccount
|
|
50
|
+
}, client);
|
|
51
|
+
if (!(networkData == null ? void 0 : networkData.cluster)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
return `solana:${networkData.cluster}`;
|
|
55
|
+
};
|
|
56
|
+
|
|
46
57
|
const getFeaturesForSolanaStandardWallet = (wallet)=>{
|
|
47
58
|
return wallet.features;
|
|
48
59
|
};
|
|
49
60
|
|
|
50
|
-
const
|
|
61
|
+
const createWalletProviderFromSolanaStandardWallet = ({ dynamicClient, walletStandardWallet })=>{
|
|
51
62
|
const features = getFeaturesForSolanaStandardWallet(walletStandardWallet);
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
};
|
|
59
|
-
const getChain = ()=>{
|
|
60
|
-
assertDefined(networkProvider.cluster, `Cluster was not defined for network provider ${networkProvider.displayName} (networkId: ${networkProvider.networkId})`);
|
|
61
|
-
return `solana:${networkProvider.cluster}`;
|
|
62
|
-
};
|
|
63
|
-
const isConnected = ()=>{
|
|
64
|
-
var _walletStandardWallet_accounts;
|
|
65
|
-
return ((_walletStandardWallet_accounts = walletStandardWallet.accounts) == null ? void 0 : _walletStandardWallet_accounts.length) > 0;
|
|
66
|
-
};
|
|
67
|
-
const getCurrentAccount = async ()=>{
|
|
68
|
-
var _walletStandardWallet_accounts;
|
|
69
|
-
if (!isConnected()) {
|
|
70
|
-
await connect();
|
|
71
|
-
}
|
|
72
|
-
const account = (_walletStandardWallet_accounts = walletStandardWallet.accounts) == null ? void 0 : _walletStandardWallet_accounts[0];
|
|
73
|
-
assertDefined(account, 'No connected accounts found');
|
|
74
|
-
return account;
|
|
75
|
-
};
|
|
63
|
+
const walletProviderType = WalletProviderEnum.BrowserExtension;
|
|
64
|
+
const key = formatWalletProviderKey({
|
|
65
|
+
chain: 'SOL',
|
|
66
|
+
displayName: walletStandardWallet.name,
|
|
67
|
+
walletProviderType
|
|
68
|
+
});
|
|
76
69
|
const connect = async ()=>{
|
|
77
70
|
var _features_standardconnect, _result_accounts;
|
|
78
71
|
const autoConnectedAccounts = walletStandardWallet.accounts;
|
|
@@ -81,8 +74,12 @@ const createSolanaSignerFromSolanaStandardWallet = ({ networkProvider, walletSta
|
|
|
81
74
|
// so we need to check for that first
|
|
82
75
|
if ((autoConnectedAccounts == null ? void 0 : autoConnectedAccounts.length) && autoConnectedAccounts[0].publicKey && autoConnectedAccounts[0].address) {
|
|
83
76
|
return {
|
|
84
|
-
|
|
85
|
-
|
|
77
|
+
addresses: [
|
|
78
|
+
{
|
|
79
|
+
address: autoConnectedAccounts[0].address,
|
|
80
|
+
publicKey: autoConnectedAccounts[0].publicKey.toString()
|
|
81
|
+
}
|
|
82
|
+
]
|
|
86
83
|
};
|
|
87
84
|
}
|
|
88
85
|
const connectMethod = (_features_standardconnect = features['standard:connect']) == null ? void 0 : _features_standardconnect.connect;
|
|
@@ -90,11 +87,14 @@ const createSolanaSignerFromSolanaStandardWallet = ({ networkProvider, walletSta
|
|
|
90
87
|
const result = await connectMethod({
|
|
91
88
|
silent: false
|
|
92
89
|
});
|
|
93
|
-
const connectedAccount = result == null ? void 0 : (_result_accounts = result.accounts) == null ? void 0 : _result_accounts[0];
|
|
94
|
-
assertDefined(connectedAccount, 'No connected accounts');
|
|
95
90
|
return {
|
|
96
|
-
|
|
97
|
-
|
|
91
|
+
addresses: (_result_accounts = result.accounts) == null ? void 0 : _result_accounts.map((account)=>{
|
|
92
|
+
var _account_publicKey;
|
|
93
|
+
return {
|
|
94
|
+
address: account.address,
|
|
95
|
+
publicKey: (_account_publicKey = account.publicKey) == null ? void 0 : _account_publicKey.toString()
|
|
96
|
+
};
|
|
97
|
+
})
|
|
98
98
|
};
|
|
99
99
|
};
|
|
100
100
|
const disconnect = async ()=>{
|
|
@@ -103,53 +103,58 @@ const createSolanaSignerFromSolanaStandardWallet = ({ networkProvider, walletSta
|
|
|
103
103
|
assertDefined(disconnectMethod, 'disconnect method not found in wallet features');
|
|
104
104
|
await disconnectMethod();
|
|
105
105
|
};
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
106
|
+
const getActiveNetworkId = async ()=>getActiveNetworkIdFromLastKnownRegistry({
|
|
107
|
+
client: dynamicClient,
|
|
108
|
+
walletProviderKey: key
|
|
109
|
+
});
|
|
110
|
+
const getCurrentAccount = async ()=>{
|
|
111
|
+
var _walletStandardWallet_accounts;
|
|
112
|
+
if (!isConnected() && connect) {
|
|
113
|
+
await connect();
|
|
111
114
|
}
|
|
112
|
-
|
|
113
|
-
|
|
115
|
+
const account = (_walletStandardWallet_accounts = walletStandardWallet.accounts) == null ? void 0 : _walletStandardWallet_accounts[0];
|
|
116
|
+
assertDefined(account, 'No connected accounts found');
|
|
117
|
+
return account;
|
|
118
|
+
};
|
|
119
|
+
const isConnected = ()=>{
|
|
120
|
+
var _walletStandardWallet_accounts;
|
|
121
|
+
return ((_walletStandardWallet_accounts = walletStandardWallet.accounts) == null ? void 0 : _walletStandardWallet_accounts.length) > 0;
|
|
122
|
+
};
|
|
123
|
+
const getConnectedAddresses = async ()=>{
|
|
124
|
+
if (!isConnected() && connect) {
|
|
125
|
+
await connect();
|
|
114
126
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const publicKey = (_prop_accounts = prop.accounts) == null ? void 0 : (_prop_accounts_ = _prop_accounts[0]) == null ? void 0 : _prop_accounts_.publicKey;
|
|
118
|
-
if (publicKey) {
|
|
119
|
-
listener(new TextDecoder().decode(publicKey));
|
|
120
|
-
}
|
|
127
|
+
return {
|
|
128
|
+
addresses: walletStandardWallet.accounts.map((account)=>account.address)
|
|
121
129
|
};
|
|
122
|
-
// 'change' is the only event that is supported by the wallet standard
|
|
123
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
124
|
-
return onMethod('change', wrappedListener);
|
|
125
130
|
};
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
});
|
|
138
|
-
const signedTransaction = signTransactionResult[0].signedTransaction;
|
|
139
|
-
if (isVersionedTransaction(transaction)) {
|
|
140
|
-
return VersionedTransaction.deserialize(signedTransaction);
|
|
141
|
-
}
|
|
142
|
-
return Transaction.from(signedTransaction);
|
|
131
|
+
const signAllTransactions = async ({ transactions, walletAccount })=>{
|
|
132
|
+
const signedTransactions = await Promise.all(transactions.map(async (transaction)=>{
|
|
133
|
+
const { signedTransaction } = await signTransaction({
|
|
134
|
+
transaction,
|
|
135
|
+
walletAccount
|
|
136
|
+
});
|
|
137
|
+
return signedTransaction;
|
|
138
|
+
}));
|
|
139
|
+
return {
|
|
140
|
+
signedTransactions
|
|
141
|
+
};
|
|
143
142
|
};
|
|
144
|
-
const
|
|
145
|
-
const signAndSendTransaction = async (transaction)=>{
|
|
143
|
+
const signAndSendTransaction = async ({ transaction, walletAccount })=>{
|
|
146
144
|
var _features_solanasignAndSendTransaction;
|
|
145
|
+
await assertWalletAccountSigningAvailability({
|
|
146
|
+
walletAccount
|
|
147
|
+
}, dynamicClient);
|
|
147
148
|
const signAndSendTransactionMethod = (_features_solanasignAndSendTransaction = features['solana:signAndSendTransaction']) == null ? void 0 : _features_solanasignAndSendTransaction.signAndSendTransaction;
|
|
148
149
|
assertDefined(signAndSendTransactionMethod, 'signAndSendTransaction method not found in wallet features');
|
|
149
150
|
const account = await getCurrentAccount();
|
|
151
|
+
const chain = await getActiveNetworkCluster({
|
|
152
|
+
walletAccount
|
|
153
|
+
}, dynamicClient);
|
|
154
|
+
assertDefined(chain, 'Could not get active chain for wallet account');
|
|
150
155
|
const signedTransactions = await signAndSendTransactionMethod({
|
|
151
156
|
account,
|
|
152
|
-
chain
|
|
157
|
+
chain,
|
|
153
158
|
transaction: transaction.serialize({
|
|
154
159
|
requireAllSignatures: false
|
|
155
160
|
})
|
|
@@ -159,107 +164,66 @@ const createSolanaSignerFromSolanaStandardWallet = ({ networkProvider, walletSta
|
|
|
159
164
|
signature: bs58.encode(signature)
|
|
160
165
|
};
|
|
161
166
|
};
|
|
162
|
-
const signMessage = async (message)=>{
|
|
167
|
+
const signMessage = async ({ message, walletAccount })=>{
|
|
163
168
|
var _features_solanasignMessage;
|
|
164
169
|
const signMessageMethod = (_features_solanasignMessage = features['solana:signMessage']) == null ? void 0 : _features_solanasignMessage.signMessage;
|
|
165
170
|
assertDefined(signMessageMethod, 'signMessage method not found in wallet features');
|
|
171
|
+
assertDefined(walletAccount, 'Wallet account not found');
|
|
172
|
+
await assertWalletAccountSigningAvailability({
|
|
173
|
+
walletAccount
|
|
174
|
+
}, dynamicClient);
|
|
175
|
+
const encodedMessage = new TextEncoder().encode(message);
|
|
166
176
|
const account = await getCurrentAccount();
|
|
167
177
|
const messages = await signMessageMethod({
|
|
168
178
|
account,
|
|
169
|
-
message
|
|
179
|
+
message: encodedMessage
|
|
170
180
|
});
|
|
171
181
|
return {
|
|
172
|
-
signature: messages[0].signature
|
|
182
|
+
signature: bufferToBase64(messages[0].signature)
|
|
173
183
|
};
|
|
174
184
|
};
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
},
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const createWalletProviderFromSolanaStandardWallet = ({ dynamicClient, walletStandardWallet })=>{
|
|
194
|
-
const key = formatWalletProviderKey(walletStandardWallet.name, 'SOL');
|
|
195
|
-
const getActiveNetworkId = async ()=>getActiveNetworkIdFromLastKnownRegistry({
|
|
196
|
-
client: dynamicClient,
|
|
197
|
-
walletProviderKey: key
|
|
198
|
-
});
|
|
199
|
-
const switchActiveNetwork = async ({ networkId })=>switchActiveNetworkInLastKnownRegistry({
|
|
200
|
-
client: dynamicClient,
|
|
201
|
-
networkId,
|
|
202
|
-
walletProviderKey: key
|
|
185
|
+
const signTransaction = async ({ transaction, walletAccount })=>{
|
|
186
|
+
var _features_solanasignTransaction;
|
|
187
|
+
const signMessageMethod = (_features_solanasignTransaction = features['solana:signTransaction']) == null ? void 0 : _features_solanasignTransaction.signTransaction;
|
|
188
|
+
assertDefined(signMessageMethod, 'signTransaction method not found in wallet features');
|
|
189
|
+
await assertWalletAccountSigningAvailability({
|
|
190
|
+
walletAccount
|
|
191
|
+
}, dynamicClient);
|
|
192
|
+
const account = await getCurrentAccount();
|
|
193
|
+
const chain = await getActiveNetworkCluster({
|
|
194
|
+
walletAccount
|
|
195
|
+
}, dynamicClient);
|
|
196
|
+
assertDefined(chain, 'Could not get active chain for wallet account');
|
|
197
|
+
const signTransactionResult = await signMessageMethod({
|
|
198
|
+
account,
|
|
199
|
+
chain,
|
|
200
|
+
transaction: transaction.serialize({
|
|
201
|
+
requireAllSignatures: false
|
|
202
|
+
})
|
|
203
203
|
});
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
result.address
|
|
210
|
-
] : []
|
|
211
|
-
};
|
|
212
|
-
};
|
|
213
|
-
const disconnect = async ()=>{
|
|
214
|
-
const signer = await getSigner();
|
|
215
|
-
await signer.disconnect();
|
|
216
|
-
};
|
|
217
|
-
const getConnectedAddresses = async ()=>{
|
|
218
|
-
const signer = await getSigner();
|
|
219
|
-
if (!signer.isConnected) {
|
|
220
|
-
await signer.connect();
|
|
204
|
+
const signedTransaction = signTransactionResult[0].signedTransaction;
|
|
205
|
+
if (isVersionedTransaction(transaction)) {
|
|
206
|
+
return {
|
|
207
|
+
signedTransaction: VersionedTransaction.deserialize(signedTransaction)
|
|
208
|
+
};
|
|
221
209
|
}
|
|
222
210
|
return {
|
|
223
|
-
|
|
211
|
+
signedTransaction: Transaction.from(signedTransaction)
|
|
224
212
|
};
|
|
225
213
|
};
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}, dynamicClient);
|
|
231
|
-
}
|
|
232
|
-
const { networkId } = await getActiveNetworkId();
|
|
233
|
-
const networkProvider = getNetworkProviderFromNetworkId({
|
|
234
|
-
chain: 'SOL',
|
|
235
|
-
networkId
|
|
236
|
-
}, dynamicClient);
|
|
237
|
-
return createSolanaSignerFromSolanaStandardWallet({
|
|
238
|
-
networkProvider,
|
|
239
|
-
walletStandardWallet
|
|
214
|
+
const switchActiveNetwork = async ({ networkId })=>switchActiveNetworkInLastKnownRegistry({
|
|
215
|
+
client: dynamicClient,
|
|
216
|
+
networkId,
|
|
217
|
+
walletProviderKey: key
|
|
240
218
|
});
|
|
241
|
-
};
|
|
242
|
-
const signMessage = async ({ message, walletAccount })=>{
|
|
243
|
-
const signer = await getSigner(walletAccount);
|
|
244
|
-
const encodedMessage = new TextEncoder().encode(message);
|
|
245
|
-
const signedMessage = await signer.signMessage(encodedMessage, 'utf8');
|
|
246
|
-
assertDefined(signedMessage, 'Failed to sign message');
|
|
247
|
-
return {
|
|
248
|
-
signature: bufferToBase64(signedMessage.signature)
|
|
249
|
-
};
|
|
250
|
-
};
|
|
251
|
-
const getEventsFeature = ()=>{
|
|
252
|
-
const features = getFeaturesForSolanaStandardWallet(walletStandardWallet);
|
|
253
|
-
const eventsFeature = features['standard:events'];
|
|
254
|
-
return eventsFeature;
|
|
255
|
-
};
|
|
256
219
|
const { getEventEmitter, cleanupEventEmitter } = createWalletProviderEventEmitter({
|
|
257
220
|
removeEventListeners: ({ setupReturnValue })=>{
|
|
258
221
|
assertDefined(setupReturnValue, 'Setup return value not defined');
|
|
259
222
|
setupReturnValue();
|
|
260
223
|
},
|
|
261
224
|
setupEventListeners: ({ handleAccountsChanged })=>{
|
|
262
|
-
|
|
225
|
+
const eventsFeature = features['standard:events'];
|
|
226
|
+
return eventsFeature.on('change', ({ accounts })=>{
|
|
263
227
|
var _accounts_map;
|
|
264
228
|
handleAccountsChanged({
|
|
265
229
|
addresses: (_accounts_map = accounts == null ? void 0 : accounts.map((account)=>account.address)) != null ? _accounts_map : []
|
|
@@ -277,27 +241,25 @@ const createWalletProviderFromSolanaStandardWallet = ({ dynamicClient, walletSta
|
|
|
277
241
|
chain: 'SOL',
|
|
278
242
|
connect,
|
|
279
243
|
disconnect,
|
|
244
|
+
get events () {
|
|
245
|
+
return getEventEmitter();
|
|
246
|
+
},
|
|
280
247
|
getActiveNetworkId,
|
|
281
248
|
getConnectedAddresses,
|
|
282
|
-
getSigner,
|
|
283
|
-
getWalletProviderType: ()=>WalletProviderEnum.BrowserExtension,
|
|
284
249
|
groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),
|
|
285
250
|
key,
|
|
286
251
|
metadata: {
|
|
287
252
|
displayName: walletStandardWallet.name,
|
|
288
253
|
icon: walletStandardWallet.icon
|
|
289
254
|
},
|
|
255
|
+
signAllTransactions,
|
|
256
|
+
signAndSendTransaction,
|
|
290
257
|
signMessage,
|
|
258
|
+
signTransaction,
|
|
291
259
|
switchActiveNetwork,
|
|
292
|
-
terminate
|
|
260
|
+
terminate,
|
|
261
|
+
walletProviderType
|
|
293
262
|
};
|
|
294
|
-
// The provider will only implement events if this external wallet provider
|
|
295
|
-
// implements the standard:events feature
|
|
296
|
-
if (getEventsFeature()) {
|
|
297
|
-
Object.defineProperty(walletProvider, 'events', {
|
|
298
|
-
get: ()=>getEventEmitter()
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
263
|
return walletProvider;
|
|
302
264
|
};
|
|
303
265
|
|
|
@@ -6,7 +6,6 @@ var client = require('@dynamic-labs-sdk/client');
|
|
|
6
6
|
var core$1 = require('@dynamic-labs-sdk/client/waas/core');
|
|
7
7
|
var sdkApiCore = require('@dynamic-labs/sdk-api-core');
|
|
8
8
|
var web3_js = require('@solana/web3.js');
|
|
9
|
-
var bs58 = require('bs58');
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* Returns a new Solana connection for the given network provider.
|
|
@@ -30,66 +29,14 @@ var bs58 = require('bs58');
|
|
|
30
29
|
return new web3_js.Connection(networkData.rpcUrls.http[0], commitmentOrConfig);
|
|
31
30
|
};
|
|
32
31
|
|
|
33
|
-
const createSolanaSignerFromSolanaWaasProvider = ({ networkData, waasProvider, walletAccount })=>{
|
|
34
|
-
const publicKey = new web3_js.PublicKey(walletAccount.address);
|
|
35
|
-
const signAndSendTransaction = async (transaction)=>{
|
|
36
|
-
const signedTransaction = await signTransaction(transaction);
|
|
37
|
-
const connection = getSolanaConnection({
|
|
38
|
-
networkData
|
|
39
|
-
});
|
|
40
|
-
const rawTransaction = signedTransaction.serialize();
|
|
41
|
-
const signature = await connection.sendRawTransaction(rawTransaction);
|
|
42
|
-
return {
|
|
43
|
-
signature
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
const signMessage = async (messageArrayBuffer)=>{
|
|
47
|
-
const message = bs58.encode(messageArrayBuffer);
|
|
48
|
-
const { signature } = await waasProvider.signMessage({
|
|
49
|
-
message,
|
|
50
|
-
walletAccount
|
|
51
|
-
});
|
|
52
|
-
return {
|
|
53
|
-
signature: bs58.decode(signature)
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
const signTransaction = async (transaction)=>{
|
|
57
|
-
const messageBytes = isVersionedTransaction.isVersionedTransaction(transaction) ? transaction.message.serialize() : transaction.serializeMessage();
|
|
58
|
-
const serializedTransaction = core.getBuffer().from(messageBytes).toString('hex');
|
|
59
|
-
const { signature } = await waasProvider.signSerializedTransaction({
|
|
60
|
-
serializedTransaction,
|
|
61
|
-
walletAccount
|
|
62
|
-
});
|
|
63
|
-
transaction.addSignature(publicKey, core.getBuffer().from(signature, 'hex'));
|
|
64
|
-
transaction.serialize({
|
|
65
|
-
requireAllSignatures: false,
|
|
66
|
-
verifySignatures: true
|
|
67
|
-
});
|
|
68
|
-
return transaction;
|
|
69
|
-
};
|
|
70
|
-
const signAllTransactions = async (transactions)=>{
|
|
71
|
-
return Promise.all(transactions.map(signTransaction));
|
|
72
|
-
};
|
|
73
|
-
return isVersionedTransaction._extends({}, isVersionedTransaction.createEmptyEventEmitter(), {
|
|
74
|
-
connect: ()=>{
|
|
75
|
-
throw new core.MethodNotImplementedError('connect');
|
|
76
|
-
},
|
|
77
|
-
disconnect: ()=>{
|
|
78
|
-
throw new core.MethodNotImplementedError('disconnect');
|
|
79
|
-
},
|
|
80
|
-
isConnected: true,
|
|
81
|
-
providers: [],
|
|
82
|
-
publicKey,
|
|
83
|
-
signAllTransactions,
|
|
84
|
-
signAndSendTransaction,
|
|
85
|
-
signMessage,
|
|
86
|
-
signTransaction
|
|
87
|
-
});
|
|
88
|
-
};
|
|
89
|
-
|
|
90
32
|
const createWalletProviderForWaasSolana = (sdkClient)=>{
|
|
91
33
|
const chain = 'SOL';
|
|
92
|
-
const
|
|
34
|
+
const walletProviderType = sdkApiCore.WalletProviderEnum.EmbeddedWallet;
|
|
35
|
+
const key = core.formatWalletProviderKey({
|
|
36
|
+
chain,
|
|
37
|
+
displayName: core$1.DYNAMIC_WAAS_METADATA.displayName,
|
|
38
|
+
walletProviderType
|
|
39
|
+
});
|
|
93
40
|
const waasProvider = core$1.createWaasProvider({
|
|
94
41
|
chain,
|
|
95
42
|
sdkClient
|
|
@@ -111,22 +58,59 @@ const createWalletProviderForWaasSolana = (sdkClient)=>{
|
|
|
111
58
|
addresses: waasSolanaAddresses
|
|
112
59
|
};
|
|
113
60
|
};
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
message,
|
|
61
|
+
const signAndSendTransaction = async ({ transaction, walletAccount })=>{
|
|
62
|
+
const { signedTransaction } = await signTransaction({
|
|
63
|
+
transaction,
|
|
118
64
|
walletAccount
|
|
119
65
|
});
|
|
120
|
-
};
|
|
121
|
-
const getSigner = async (walletAccount)=>{
|
|
122
|
-
core.assertDefined(walletAccount, 'Wallet account is required');
|
|
123
66
|
const { networkData } = await client.getActiveNetworkData({
|
|
124
67
|
walletAccount
|
|
125
68
|
}, sdkClient);
|
|
126
69
|
core.assertDefined(networkData, 'Network data is required');
|
|
127
|
-
|
|
128
|
-
networkData
|
|
129
|
-
|
|
70
|
+
const connection = getSolanaConnection({
|
|
71
|
+
networkData
|
|
72
|
+
});
|
|
73
|
+
const rawTransaction = signedTransaction.serialize();
|
|
74
|
+
const signature = await connection.sendRawTransaction(rawTransaction);
|
|
75
|
+
return {
|
|
76
|
+
signature
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
const signTransaction = async ({ transaction, walletAccount })=>{
|
|
80
|
+
const messageBytes = isVersionedTransaction.isVersionedTransaction(transaction) ? transaction.message.serialize() : transaction.serializeMessage();
|
|
81
|
+
const serializedTransaction = core.getBuffer()// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
+
.from(messageBytes).toString('hex');
|
|
83
|
+
const { signature } = await waasProvider.signSerializedTransaction({
|
|
84
|
+
serializedTransaction,
|
|
85
|
+
walletAccount
|
|
86
|
+
});
|
|
87
|
+
const publicKey = new web3_js.PublicKey(walletAccount.address);
|
|
88
|
+
transaction.addSignature(publicKey, // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
89
|
+
core.getBuffer().from(signature, 'hex'));
|
|
90
|
+
transaction.serialize({
|
|
91
|
+
requireAllSignatures: false,
|
|
92
|
+
verifySignatures: true
|
|
93
|
+
});
|
|
94
|
+
return {
|
|
95
|
+
signedTransaction: transaction
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
const signAllTransactions = async ({ transactions, walletAccount })=>{
|
|
99
|
+
const signedTransactions = await Promise.all(transactions.map(async (transaction)=>{
|
|
100
|
+
const { signedTransaction } = await signTransaction({
|
|
101
|
+
transaction,
|
|
102
|
+
walletAccount
|
|
103
|
+
});
|
|
104
|
+
return signedTransaction;
|
|
105
|
+
}));
|
|
106
|
+
return {
|
|
107
|
+
signedTransactions
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
const signMessage = async ({ message, walletAccount })=>{
|
|
111
|
+
core.assertDefined(walletAccount, 'Wallet account is required');
|
|
112
|
+
return waasProvider.signMessage({
|
|
113
|
+
message,
|
|
130
114
|
walletAccount
|
|
131
115
|
});
|
|
132
116
|
};
|
|
@@ -134,16 +118,18 @@ const createWalletProviderForWaasSolana = (sdkClient)=>{
|
|
|
134
118
|
chain,
|
|
135
119
|
getActiveNetworkId,
|
|
136
120
|
getConnectedAddresses,
|
|
137
|
-
|
|
138
|
-
getWalletProviderType: ()=>sdkApiCore.WalletProviderEnum.EmbeddedWallet,
|
|
139
|
-
groupKey: core.formatWalletProviderGroupKey(core$1.DYNAMIC_WAAS_METADATA.name),
|
|
121
|
+
groupKey: core.formatWalletProviderGroupKey(core$1.DYNAMIC_WAAS_METADATA.displayName),
|
|
140
122
|
key,
|
|
141
123
|
metadata: {
|
|
142
|
-
displayName: core$1.DYNAMIC_WAAS_METADATA.
|
|
124
|
+
displayName: core$1.DYNAMIC_WAAS_METADATA.displayName,
|
|
143
125
|
icon: core$1.DYNAMIC_WAAS_METADATA.icon
|
|
144
126
|
},
|
|
127
|
+
signAllTransactions,
|
|
128
|
+
signAndSendTransaction,
|
|
145
129
|
signMessage,
|
|
146
|
-
|
|
130
|
+
signTransaction,
|
|
131
|
+
switchActiveNetwork,
|
|
132
|
+
walletProviderType
|
|
147
133
|
});
|
|
148
134
|
};
|
|
149
135
|
|