@dynamic-labs/solana 4.39.0 → 4.40.1

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 (44) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +17 -12
  5. package/src/CoinbaseSolana/CoinbaseSolana.cjs +4 -0
  6. package/src/CoinbaseSolana/CoinbaseSolana.js +4 -0
  7. package/src/Phantom/Phantom.cjs +4 -0
  8. package/src/Phantom/Phantom.js +4 -0
  9. package/src/SolanaWalletConnectors.cjs +17 -8
  10. package/src/SolanaWalletConnectors.js +17 -8
  11. package/src/Solflare/Solflare.cjs +4 -0
  12. package/src/Solflare/Solflare.js +4 -0
  13. package/src/index.cjs +3 -1
  14. package/src/index.js +3 -1
  15. package/src/injected/BackpackSol/BackpackSol.cjs +4 -0
  16. package/src/injected/BackpackSol/BackpackSol.js +4 -0
  17. package/src/injected/FallbackSolanaConnector/FallbackSolanaConnector.cjs +4 -0
  18. package/src/injected/FallbackSolanaConnector/FallbackSolanaConnector.js +4 -0
  19. package/src/injected/InjectedWalletBase/InjectedWalletBase.cjs +37 -14
  20. package/src/injected/InjectedWalletBase/InjectedWalletBase.d.ts +8 -0
  21. package/src/injected/InjectedWalletBase/InjectedWalletBase.js +37 -14
  22. package/src/injected/fetchInjectedWalletConnectors.cjs +2 -13
  23. package/src/injected/fetchInjectedWalletConnectors.js +2 -13
  24. package/src/utils/getConnectorConstructorInjectedWallet/getConnectorConstructorInjectedWallet.cjs +46 -0
  25. package/src/utils/getConnectorConstructorInjectedWallet/getConnectorConstructorInjectedWallet.d.ts +9 -0
  26. package/src/utils/getConnectorConstructorInjectedWallet/getConnectorConstructorInjectedWallet.js +42 -0
  27. package/src/utils/getConnectorConstructorInjectedWallet/index.d.ts +1 -0
  28. package/src/walletConnect/SolanaWalletConnectConnector/SolanaWalletConnectConnector.cjs +426 -0
  29. package/src/walletConnect/SolanaWalletConnectConnector/SolanaWalletConnectConnector.d.ts +64 -0
  30. package/src/walletConnect/SolanaWalletConnectConnector/SolanaWalletConnectConnector.js +417 -0
  31. package/src/walletConnect/SolanaWalletConnectConnector/createSolanaSignerForWalletConnect/createSolanaSignerForWalletConnect.cjs +126 -0
  32. package/src/walletConnect/SolanaWalletConnectConnector/createSolanaSignerForWalletConnect/createSolanaSignerForWalletConnect.d.ts +7 -0
  33. package/src/walletConnect/SolanaWalletConnectConnector/createSolanaSignerForWalletConnect/createSolanaSignerForWalletConnect.js +122 -0
  34. package/src/walletConnect/SolanaWalletConnectConnector/createSolanaSignerForWalletConnect/index.d.ts +1 -0
  35. package/src/walletConnect/SolanaWalletConnectConnector/index.d.ts +1 -0
  36. package/src/walletConnect/SolanaWalletConnectConnector/types.d.ts +40 -0
  37. package/src/walletConnect/utils/addSolanaWalletConnectConnectors/addSolanaWalletConnectConnectors.cjs +64 -0
  38. package/src/walletConnect/utils/addSolanaWalletConnectConnectors/addSolanaWalletConnectConnectors.d.ts +12 -0
  39. package/src/walletConnect/utils/addSolanaWalletConnectConnectors/addSolanaWalletConnectConnectors.js +60 -0
  40. package/src/walletConnect/utils/addSolanaWalletConnectConnectors/index.d.ts +1 -0
  41. package/src/walletConnect/utils/getSolanaWalletConnectConnector/getSolanaWalletConnectConnector.cjs +21 -0
  42. package/src/walletConnect/utils/getSolanaWalletConnectConnector/getSolanaWalletConnectConnector.d.ts +2 -0
  43. package/src/walletConnect/utils/getSolanaWalletConnectConnector/getSolanaWalletConnectConnector.js +17 -0
  44. package/src/walletConnect/utils/getSolanaWalletConnectConnector/index.d.ts +1 -0
@@ -0,0 +1,426 @@
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$1 = require('@walletconnect/utils');
9
+ var bs58 = require('bs58');
10
+ var EventEmitter = require('eventemitter3');
11
+ var solanaCore = require('@dynamic-labs/solana-core');
12
+ var utils = require('@dynamic-labs/utils');
13
+ var walletConnect = require('@dynamic-labs/wallet-connect');
14
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
15
+ var logger = require('../../utils/logger.cjs');
16
+ var createSolanaSignerForWalletConnect = require('./createSolanaSignerForWalletConnect/createSolanaSignerForWalletConnect.cjs');
17
+
18
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
+
20
+ var bs58__default = /*#__PURE__*/_interopDefaultLegacy(bs58);
21
+ var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
22
+
23
+ const WC_SOLANA_CURRENT_CHAIN_KEY = 'dynamic-wc2-solana-current-chain';
24
+ class SolanaWalletConnectConnector extends solanaCore.SolanaWalletConnector {
25
+ constructor(opts) {
26
+ super(opts);
27
+ this.activeAccountEmitter = new EventEmitter__default["default"]();
28
+ this.isInitialized = false;
29
+ this.canConnectViaQrCode = true;
30
+ this.isWalletConnect = true;
31
+ this.canHandleMultipleConnections = false;
32
+ this.name = opts.walletName;
33
+ const storedChainId = utils.StorageService.getItem(WC_SOLANA_CURRENT_CHAIN_KEY);
34
+ if (storedChainId) {
35
+ this.setNetworkId(storedChainId);
36
+ }
37
+ if (opts.overrideKey) {
38
+ this.overrideKey = opts.overrideKey;
39
+ }
40
+ if (!opts.projectId) {
41
+ throw new utils.DynamicError('WalletConnect project ID is required');
42
+ }
43
+ }
44
+ get deepLinkPreference() {
45
+ var _a;
46
+ return (_a = this.constructorProps.deepLinkPreference) !== null && _a !== void 0 ? _a : 'native';
47
+ }
48
+ /**
49
+ * Accesses the sign client singleton instance, and throws if it is not
50
+ * immediately available.
51
+ */
52
+ get signClient() {
53
+ if (!SolanaWalletConnectConnector.signClientReference) {
54
+ throw new utils.DynamicError('Failed to access sign client for Wallet Connect Solana: Sign client not initialized');
55
+ }
56
+ return SolanaWalletConnectConnector.signClientReference;
57
+ }
58
+ getSupportedNetworks() {
59
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
60
+ var _a, _b;
61
+ if (!this.session) {
62
+ return [];
63
+ }
64
+ const sessionChains = (_b = (_a = this.session.namespaces.solana) === null || _a === void 0 ? void 0 : _a.chains) !== null && _b !== void 0 ? _b : [];
65
+ return this.solNetworks
66
+ .filter((network) => sessionChains.includes(`solana:${network.genesisHash}`))
67
+ .map((network) => network.chainId.toString());
68
+ });
69
+ }
70
+ getActiveAddress() {
71
+ var _a, _b;
72
+ if (!this.session) {
73
+ return undefined;
74
+ }
75
+ return (_b = (_a = this.session.namespaces.solana) === null || _a === void 0 ? void 0 : _a.accounts) === null || _b === void 0 ? void 0 : _b[0].split(':')[2];
76
+ }
77
+ listenToActiveAccountChange(listener) {
78
+ this.activeAccountEmitter.on('activeAccountDidChange', listener);
79
+ return () => {
80
+ this.activeAccountEmitter.off('activeAccountDidChange', listener);
81
+ };
82
+ }
83
+ getSigner() {
84
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
85
+ return createSolanaSignerForWalletConnect.createSolanaSignerForWalletConnect({ walletConnector: this });
86
+ });
87
+ }
88
+ connect() {
89
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
90
+ throw new Error('Connect method not implemented.');
91
+ });
92
+ }
93
+ init() {
94
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
95
+ if (this.isInitialized) {
96
+ return;
97
+ }
98
+ logger.logger.logVerboseTroubleshootingMessage('[SolanaWalletConnect] init called');
99
+ this.isInitialized = true;
100
+ if (SolanaWalletConnectConnector.signClientPromise) {
101
+ yield SolanaWalletConnectConnector.signClientPromise;
102
+ this.setupWCEventListeners();
103
+ return;
104
+ }
105
+ const { appLogoUrl, appName, projectId } = this.constructorProps;
106
+ SolanaWalletConnectConnector.signClientPromise = walletConnect.getSignClientSingleton({
107
+ appIcon: appLogoUrl !== null && appLogoUrl !== void 0 ? appLogoUrl : '',
108
+ appName: appName !== null && appName !== void 0 ? appName : '',
109
+ projectId,
110
+ });
111
+ SolanaWalletConnectConnector.signClientReference =
112
+ yield SolanaWalletConnectConnector.signClientPromise;
113
+ this.setupWCEventListeners();
114
+ });
115
+ }
116
+ setupWCEventListeners() {
117
+ logger.logger.debug('[SolanaWalletConnect] setupWCEventListeners');
118
+ this.signClient.on('session_event', ({ params: { event }, topic }) => {
119
+ var _a, _b;
120
+ // Ignore events for wallets other than the one we are connected to
121
+ if (!this.session || topic !== this.session.topic) {
122
+ return;
123
+ }
124
+ if (event.name === 'chainChanged') {
125
+ const chainParam = event.data;
126
+ let chainId = chainParam;
127
+ // Handle potentially CAIP-2 format
128
+ if (chainParam.startsWith('solana:')) {
129
+ const chainHash = chainParam.split(':')[1];
130
+ chainId =
131
+ (_b = (_a = this.solNetworks
132
+ .find((network) => network.genesisHash === chainHash)) === null || _a === void 0 ? void 0 : _a.networkId.toString()) !== null && _b !== void 0 ? _b : chainParam;
133
+ }
134
+ logger.logger.debug('[SolanaWalletConnect] onChainChange', { chainId });
135
+ if (chainId === this.getNetworkId()) {
136
+ logger.logger.debug(`[SolanaWalletConnect] onChainChange - ignoring chainChanged event with same chain id as current chain id: ${chainId}`);
137
+ return;
138
+ }
139
+ // This will already emit an event so no need to call this.emit('chainChange', { chain: chainId });
140
+ this.switchNetwork({ networkChainId: parseInt(chainId) });
141
+ return;
142
+ }
143
+ if (event.name === 'accountsChanged') {
144
+ const accountsParam = event.data;
145
+ const accounts = utils.filterDuplicates(accountsParam.map((account) => {
146
+ // Handle potentially CAIP-10 format
147
+ if (account.startsWith('solana:')) {
148
+ return account.split(':')[2];
149
+ }
150
+ return account;
151
+ }));
152
+ logger.logger.debug('[SolanaWalletConnect] onAccountChanged', { accounts });
153
+ this.emit('accountChange', { accounts });
154
+ return;
155
+ }
156
+ if (event.name === 'disconnected') {
157
+ logger.logger.debug('[SolanaWalletConnect] onDisconnect');
158
+ this.emit('disconnect');
159
+ this.endSession();
160
+ return;
161
+ }
162
+ });
163
+ }
164
+ endSession() {
165
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
166
+ logger.logger.debug('[SolanaWalletConnect] endSession');
167
+ this.connectionUri = undefined;
168
+ if (!this.session) {
169
+ return;
170
+ }
171
+ yield this.signClient.disconnect({
172
+ reason: utils$1.SDK_ERRORS.USER_DISCONNECTED,
173
+ topic: this.session.topic,
174
+ });
175
+ this.session = undefined;
176
+ });
177
+ }
178
+ displayUri(connectionOpts) {
179
+ if (!this.connectionUri) {
180
+ return;
181
+ }
182
+ logger.logger.debug('[SolanaWalletConnect] handleDisplayURI', this.connectionUri);
183
+ walletConnectorCore.performPlatformSpecificConnectionMethod(this.connectionUri, this.metadata.deepLinks, {
184
+ onDesktopUri: connectionOpts === null || connectionOpts === void 0 ? void 0 : connectionOpts.onDesktopUri,
185
+ onDisplayUri: connectionOpts === null || connectionOpts === void 0 ? void 0 : connectionOpts.onDisplayUri,
186
+ }, this.deepLinkPreference);
187
+ }
188
+ getAddress(opts) {
189
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
190
+ var _a;
191
+ logger.logger.debug('[SolanaWalletConnect] getAddress', opts);
192
+ /**
193
+ * In mobile/Safari, if the user just navigates back after the deeplink prompt the connection
194
+ * is not rejected, so the previous connection URI is still valid and we can use it to handle the connection
195
+ */
196
+ if (this.connectionUri) {
197
+ logger.logger.debug('[SolanaWalletConnect] getAddress - connecting to WalletConnect with existing connection URI');
198
+ this.displayUri(opts);
199
+ return;
200
+ }
201
+ /**
202
+ * If we are already connected to a session, we need to end it first
203
+ */
204
+ yield this.endSession();
205
+ logger.logger.logVerboseTroubleshootingMessage('[WalletConnectConnector] getAddress', {
206
+ inAppBrowserUrl: (_a = this.metadata) === null || _a === void 0 ? void 0 : _a.inAppBrowserUrl,
207
+ isMobile: utils.isMobile(),
208
+ mobileExperience: this.mobileExperience,
209
+ });
210
+ const didOpenInAppBrowser = this.openInAppBrowserIfRequired();
211
+ if (didOpenInAppBrowser) {
212
+ return;
213
+ }
214
+ logger.logger.debug('[SolanaWalletConnect] getAddress - connecting to WalletConnect');
215
+ const chains = this.solNetworks.map((network) => `solana:${network.genesisHash}`);
216
+ try {
217
+ const { approval, uri } = yield this.signClient.connect({
218
+ optionalNamespaces: {
219
+ solana: {
220
+ chains,
221
+ events: ['chainChanged', 'accountsChanged', 'disconnected'],
222
+ methods: [
223
+ 'solana_signMessage',
224
+ 'solana_signTransaction',
225
+ 'solana_requestAccounts',
226
+ 'solana_getAccounts',
227
+ 'solana_signAllTransactions',
228
+ 'solana_signAndSendTransaction',
229
+ ],
230
+ },
231
+ },
232
+ });
233
+ logger.logger.debug('[SolanaWalletConnect] getAddress - connection URI', uri);
234
+ this.connectionUri = uri;
235
+ this.displayUri(opts);
236
+ this.session = yield approval();
237
+ const activeAddress = this.getActiveAddress();
238
+ this.activeAccountEmitter.emit('activeAccountDidChange', activeAddress);
239
+ return activeAddress;
240
+ }
241
+ finally {
242
+ this.connectionUri = undefined;
243
+ }
244
+ });
245
+ }
246
+ signClientRequest(_a) {
247
+ return _tslib.__awaiter(this, arguments, void 0, function* ({ method, params, }) {
248
+ var _b, _c;
249
+ if (!this.session) {
250
+ throw new utils.DynamicError('Session not initialized. Please connect to a wallet first.');
251
+ }
252
+ const chainHash = (_c = (_b = this.getSelectedNetwork()) === null || _b === void 0 ? void 0 : _b.genesisHash) !== null && _c !== void 0 ? _c : this.solNetworks[0].genesisHash;
253
+ const chainId = `solana:${chainHash}`;
254
+ try {
255
+ const requestPromise = this.signClient.request({
256
+ chainId,
257
+ request: {
258
+ method,
259
+ params,
260
+ },
261
+ topic: this.session.topic,
262
+ });
263
+ this.deepLinkIfApplicable({ method });
264
+ return yield requestPromise;
265
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
266
+ }
267
+ catch (error) {
268
+ // If they are throwing a generic error, lets end session to ensure the user will be prompted to reconnect
269
+ // on the next attempt. This should fix the issue.
270
+ // Yes their error message has a typo on "occured"
271
+ if (error.message === 'An error has occured. Please, try again.') {
272
+ yield this.endSession();
273
+ throw new utils.DynamicError('Wallet connection lost. Please, try again.');
274
+ }
275
+ throw error;
276
+ }
277
+ });
278
+ }
279
+ deepLinkIfApplicable(params) {
280
+ const methodsThatRequireDeepLink = [
281
+ 'solana_signMessage',
282
+ 'solana_signTransaction',
283
+ 'solana_signAllTransactions',
284
+ 'solana_signAndSendTransaction',
285
+ ];
286
+ const deepLink = this.getDeepLink();
287
+ if (utils.isMobile() &&
288
+ deepLink &&
289
+ methodsThatRequireDeepLink.includes(params.method)) {
290
+ utils.PlatformService.openURL(deepLink);
291
+ }
292
+ }
293
+ signMessage(messageToSign, options) {
294
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
295
+ logger.logger.logVerboseTroubleshootingMessage('[SolanaWalletConnect] signMessage', messageToSign, options);
296
+ const encodedMessage = new TextEncoder().encode(messageToSign);
297
+ const decodedSignature = yield this.signEncodedMessage(encodedMessage, options);
298
+ return utils.bufferToBase64(decodedSignature);
299
+ });
300
+ }
301
+ signEncodedMessage(encodedMessage, options) {
302
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
303
+ logger.logger.logVerboseTroubleshootingMessage('[SolanaWalletConnect] signEncodedMessage', encodedMessage, options);
304
+ if (options === null || options === void 0 ? void 0 : options.address) {
305
+ yield this.validateActiveWallet(options.address);
306
+ }
307
+ const activeAddress = this.getActiveAddress();
308
+ if (!activeAddress) {
309
+ throw new utils.DynamicError('No active address found');
310
+ }
311
+ const { signature } = yield this.signClientRequest({
312
+ method: 'solana_signMessage',
313
+ params: {
314
+ message: bs58__default["default"].encode(encodedMessage),
315
+ pubkey: new web3_js.PublicKey(activeAddress).toBase58(),
316
+ },
317
+ });
318
+ return bs58__default["default"].decode(signature);
319
+ });
320
+ }
321
+ serializeTransaction(transaction) {
322
+ const serialized = transaction.serialize({
323
+ requireAllSignatures: false,
324
+ verifySignatures: false,
325
+ });
326
+ return bs58__default["default"].encode(new Uint8Array(serialized));
327
+ }
328
+ signTransaction(transaction) {
329
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
330
+ const activeAddress = this.getActiveAddress();
331
+ if (!activeAddress) {
332
+ throw new utils.DynamicError('Active account address is required');
333
+ }
334
+ const serializedTransaction = this.serializeTransaction(transaction);
335
+ const { transaction: signedTransaction } = yield this.signClientRequest({
336
+ method: 'solana_signTransaction',
337
+ params: { transaction: serializedTransaction },
338
+ });
339
+ const decodedTransaction = bs58__default["default"].decode(signedTransaction);
340
+ if (solanaCore.isVersionedTransaction(transaction)) {
341
+ return web3_js.VersionedTransaction.deserialize(decodedTransaction);
342
+ }
343
+ return web3_js.Transaction.from(decodedTransaction);
344
+ });
345
+ }
346
+ signAllTransactions(transactions) {
347
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
348
+ const serializedTransactions = transactions.map(this.serializeTransaction);
349
+ const { transactions: signedTransactions } = yield this.signClientRequest({
350
+ method: 'solana_signAllTransactions',
351
+ params: { transactions: serializedTransactions },
352
+ });
353
+ return signedTransactions.map((signedTransaction, index) => {
354
+ const originalTransaction = transactions[index];
355
+ const decodedTransaction = bs58__default["default"].decode(signedTransaction);
356
+ if (solanaCore.isVersionedTransaction(originalTransaction)) {
357
+ return web3_js.VersionedTransaction.deserialize(decodedTransaction);
358
+ }
359
+ return web3_js.Transaction.from(decodedTransaction);
360
+ });
361
+ });
362
+ }
363
+ signAndSendTransaction(transaction, options) {
364
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
365
+ const serializedTransaction = this.serializeTransaction(transaction);
366
+ const { signature } = yield this.signClientRequest({
367
+ method: 'solana_signAndSendTransaction',
368
+ params: { options, transaction: serializedTransaction },
369
+ });
370
+ return signature;
371
+ });
372
+ }
373
+ getDeepLink() {
374
+ const deepLink = walletConnectorCore.getDeepLink({
375
+ deepLinks: this.metadata.deepLinks,
376
+ mode: 'regular',
377
+ preference: this.deepLinkPreference,
378
+ // TODO: verify whether we need the uri
379
+ // uri: provider.signer.uri,
380
+ });
381
+ logger.logger.logVerboseTroubleshootingMessage('[SolanaWalletConnect] getDeepLink - deepLink', deepLink);
382
+ if (!deepLink) {
383
+ return;
384
+ }
385
+ if (this.session) {
386
+ // we need to include the session topic here because it helps the wallet
387
+ // auto redirect back to the dapp after signing
388
+ return `${deepLink}?sessionTopic=${this.session.topic}`;
389
+ }
390
+ return deepLink;
391
+ }
392
+ getConnectedAccounts() {
393
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
394
+ /**
395
+ * Each session has a single account (it might be on multiple chains hence the array),
396
+ * but that account is stored as a CAIP-10 string, so we need to parse it to get the address
397
+ */
398
+ const account = this.getActiveAddress();
399
+ if (!account) {
400
+ return [];
401
+ }
402
+ logger.logger.logVerboseTroubleshootingMessage('[SolanaWalletConnect] getConnectedAccounts - activeAccounts', [account]);
403
+ return [account];
404
+ });
405
+ }
406
+ getConnectionUri() {
407
+ return this.connectionUri;
408
+ }
409
+ validateActiveWallet(expectedAddress) {
410
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
411
+ logger.logger.debug('[SolanaWalletConnect] validateActiveWallet - validating wallet', expectedAddress);
412
+ const [activeAddress] = yield this.getConnectedAccounts();
413
+ const isWalletActive = walletConnectorCore.isSameAddress(activeAddress, expectedAddress, this.connectedChain);
414
+ if (isWalletActive) {
415
+ logger.logger.debug('[SolanaWalletConnect] validateActiveWallet - wallet is active');
416
+ return;
417
+ }
418
+ return this.handleWalletNotActive({
419
+ activeAddress,
420
+ expectedAddress,
421
+ });
422
+ });
423
+ }
424
+ }
425
+
426
+ exports.SolanaWalletConnectConnector = SolanaWalletConnectConnector;
@@ -0,0 +1,64 @@
1
+ import { SendOptions, Transaction, VersionedTransaction } from '@solana/web3.js';
2
+ import SignClient from '@walletconnect/sign-client';
3
+ import type { SessionTypes } from '@walletconnect/types';
4
+ import { ISolanaSigner, SolanaWalletConnector, SolanaWalletConnectorOpts } from '@dynamic-labs/solana-core';
5
+ import { DeepLinkVariant, GetAddressOpts, IWalletConnectConnector } from '@dynamic-labs/wallet-connector-core';
6
+ export type SolanaWalletConnectConnectorOpts = SolanaWalletConnectorOpts & {
7
+ projectId?: string;
8
+ walletName: string;
9
+ deepLinkPreference?: DeepLinkVariant;
10
+ appLogoUrl?: string;
11
+ appName?: string;
12
+ overrideKey?: string;
13
+ };
14
+ export declare class SolanaWalletConnectConnector extends SolanaWalletConnector implements IWalletConnectConnector {
15
+ name: string;
16
+ static signClientReference: SignClient | undefined;
17
+ static signClientPromise: Promise<SignClient> | undefined;
18
+ /**
19
+ * When a WalletConnect connection is initiated, we store the connection URI
20
+ * so we can use it to handle the URI for wallet app connection and still have
21
+ * it if we need it again before the connection is established (for instance,
22
+ * when a user navigates back to the dapp after a deeplink and then attempts to deeplink again)
23
+ */
24
+ private connectionUri;
25
+ session: SessionTypes.Struct | undefined;
26
+ private activeAccountEmitter;
27
+ isInitialized: boolean;
28
+ canConnectViaQrCode: boolean;
29
+ isWalletConnect: boolean;
30
+ canHandleMultipleConnections: boolean;
31
+ constructor(opts: SolanaWalletConnectConnectorOpts);
32
+ get deepLinkPreference(): DeepLinkVariant;
33
+ /**
34
+ * Accesses the sign client singleton instance, and throws if it is not
35
+ * immediately available.
36
+ */
37
+ get signClient(): SignClient;
38
+ getSupportedNetworks(): Promise<string[]>;
39
+ getActiveAddress(): string | undefined;
40
+ listenToActiveAccountChange(listener: (account: string) => void): VoidFunction;
41
+ getSigner(): Promise<ISolanaSigner>;
42
+ connect(): Promise<void>;
43
+ init(): Promise<void>;
44
+ private setupWCEventListeners;
45
+ endSession(): Promise<void>;
46
+ private displayUri;
47
+ getAddress(opts?: GetAddressOpts): Promise<string | undefined>;
48
+ private signClientRequest;
49
+ private deepLinkIfApplicable;
50
+ signMessage(messageToSign: string, options?: {
51
+ address?: string;
52
+ }): Promise<string | undefined>;
53
+ signEncodedMessage(encodedMessage: Uint8Array, options?: {
54
+ address?: string;
55
+ }): Promise<Uint8Array>;
56
+ private serializeTransaction;
57
+ signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
58
+ signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
59
+ signAndSendTransaction<T extends Transaction | VersionedTransaction>(transaction: T, options?: SendOptions): Promise<string>;
60
+ getDeepLink(): string | undefined;
61
+ getConnectedAccounts(): Promise<string[]>;
62
+ getConnectionUri(): string | undefined;
63
+ validateActiveWallet(expectedAddress: string): Promise<void>;
64
+ }