@dynamic-labs/solana 0.17.0-RC.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 (49) hide show
  1. package/CHANGELOG.md +793 -0
  2. package/LICENSE +21 -0
  3. package/README.md +0 -0
  4. package/_virtual/_tslib.cjs +30 -0
  5. package/_virtual/_tslib.js +26 -0
  6. package/package.json +36 -0
  7. package/src/CoinbaseSolana.cjs +53 -0
  8. package/src/CoinbaseSolana.d.ts +14 -0
  9. package/src/CoinbaseSolana.js +49 -0
  10. package/src/Glow.cjs +50 -0
  11. package/src/Glow.d.ts +13 -0
  12. package/src/Glow.js +46 -0
  13. package/src/Slope.cjs +98 -0
  14. package/src/Slope.d.ts +27 -0
  15. package/src/Slope.js +94 -0
  16. package/src/Solflare.cjs +66 -0
  17. package/src/Solflare.d.ts +11 -0
  18. package/src/Solflare.js +62 -0
  19. package/src/index.cjs +24 -0
  20. package/src/index.d.ts +3 -0
  21. package/src/index.js +18 -0
  22. package/src/injected/BraveSol.cjs +21 -0
  23. package/src/injected/BraveSol.d.ts +5 -0
  24. package/src/injected/BraveSol.js +17 -0
  25. package/src/injected/ExodusSol.cjs +14 -0
  26. package/src/injected/ExodusSol.d.ts +4 -0
  27. package/src/injected/ExodusSol.js +10 -0
  28. package/src/injected/InjectedWalletBase.cjs +68 -0
  29. package/src/injected/InjectedWalletBase.d.ts +13 -0
  30. package/src/injected/InjectedWalletBase.js +64 -0
  31. package/src/injected/Phantom.cjs +14 -0
  32. package/src/injected/Phantom.d.ts +4 -0
  33. package/src/injected/Phantom.js +10 -0
  34. package/src/injected/PhantomLedger.cjs +70 -0
  35. package/src/injected/PhantomLedger.d.ts +14 -0
  36. package/src/injected/PhantomLedger.js +65 -0
  37. package/src/injected/index.cjs +12 -0
  38. package/src/injected/index.d.ts +2 -0
  39. package/src/injected/index.js +8 -0
  40. package/src/solProviderHelper.cjs +162 -0
  41. package/src/solProviderHelper.d.ts +29 -0
  42. package/src/solProviderHelper.js +158 -0
  43. package/src/solWalletConnector.cjs +75 -0
  44. package/src/solWalletConnector.d.ts +21 -0
  45. package/src/solWalletConnector.js +71 -0
  46. package/src/types.d.ts +42 -0
  47. package/src/utils/extractNonce.cjs +13 -0
  48. package/src/utils/extractNonce.d.ts +1 -0
  49. package/src/utils/extractNonce.js +9 -0
@@ -0,0 +1,162 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../_virtual/_tslib.cjs');
6
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
7
+ var utils = require('@dynamic-labs/utils');
8
+
9
+ var _a;
10
+ class SolProviderHelper {
11
+ static installedProviderLookup(providerFlags) {
12
+ return walletConnectorCore.ProviderLookup(this.allInstalledProviders(), providerFlags);
13
+ }
14
+ static allInstalledProviders() {
15
+ return this.findSolanaProviders(window.solana).concat(this.findSolanaProviders(window.solflare), this.findSolanaProviders(window.glowSolana));
16
+ }
17
+ static findSolanaProviders(solana) {
18
+ const solanaProviders = [];
19
+ if (solana && !solana.providers) {
20
+ solanaProviders.push(solana);
21
+ }
22
+ else if (solana && solana.providers) {
23
+ solana.providers.forEach((provider) => {
24
+ solanaProviders.push(provider);
25
+ });
26
+ }
27
+ return solanaProviders;
28
+ }
29
+ static isInstalledHelper(walletName) {
30
+ return this.findProvider(walletName) !== undefined;
31
+ }
32
+ static findProvider(walletName) {
33
+ var _b, _c;
34
+ return (_c = (_b = this.providers)[walletConnectorCore.normalizeWalletName(walletName)]) === null || _c === void 0 ? void 0 : _c.call(_b);
35
+ }
36
+ static fetchPublicAddressWithName(name) {
37
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
38
+ const provider = this.findProvider(name);
39
+ if (!provider) {
40
+ return Promise.resolve(undefined);
41
+ }
42
+ yield provider.connect();
43
+ const { publicKey } = provider;
44
+ return publicKey ? publicKey.toString() : Promise.resolve(undefined);
45
+ });
46
+ }
47
+ static connectWithName(name) {
48
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
49
+ const provider = this.findProvider(name);
50
+ if (!provider) {
51
+ return Promise.resolve(undefined);
52
+ }
53
+ try {
54
+ yield provider.connect();
55
+ return provider;
56
+ }
57
+ catch (err) {
58
+ return undefined;
59
+ }
60
+ });
61
+ }
62
+ static signMessageWithName(messageToSign, name) {
63
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
64
+ const walletAddress = yield this.fetchPublicAddressWithName(name);
65
+ if (!walletAddress) {
66
+ return Promise.resolve(undefined);
67
+ }
68
+ const provider = this.findProvider(name);
69
+ if (!provider) {
70
+ return Promise.resolve(undefined);
71
+ }
72
+ const encodedMessage = new TextEncoder().encode(messageToSign);
73
+ return provider.connect().then(() => _tslib.__awaiter(this, void 0, void 0, function* () {
74
+ const { signature } = (yield provider.signMessage(encodedMessage, 'utf8'));
75
+ return utils.bufferToBase64(signature);
76
+ }));
77
+ });
78
+ }
79
+ static _setupEventListeners(listeners, web3Provider) {
80
+ const handleAccountChange = (address) => _tslib.__awaiter(this, void 0, void 0, function* () {
81
+ var _b, _c, _d;
82
+ if (!address) {
83
+ yield (web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.connect());
84
+ if ((_b = web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.publicKey) === null || _b === void 0 ? void 0 : _b.toString()) {
85
+ (_c = listeners.onAccountChange) === null || _c === void 0 ? void 0 : _c.call(listeners, [web3Provider.publicKey.toString()]);
86
+ }
87
+ return;
88
+ }
89
+ if (address.toString()) {
90
+ yield ((_d = listeners.onAccountChange) === null || _d === void 0 ? void 0 : _d.call(listeners, [address.toString()]));
91
+ }
92
+ });
93
+ const handleDisconnect = () => _tslib.__awaiter(this, void 0, void 0, function* () {
94
+ var _e;
95
+ yield ((_e = listeners.onDisconnect) === null || _e === void 0 ? void 0 : _e.call(listeners));
96
+ });
97
+ web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.on('accountChanged', handleAccountChange);
98
+ web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.on('disconnect', handleDisconnect);
99
+ }
100
+ static _teardownEventListeners(name) {
101
+ const web3Provider = this.findProvider(name);
102
+ if (!web3Provider) {
103
+ return;
104
+ }
105
+ web3Provider.removeAllListeners();
106
+ }
107
+ static getConnectedAccountsWithName(name) {
108
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
109
+ const provider = this.findProvider(name);
110
+ if (!provider) {
111
+ return [];
112
+ }
113
+ let connectionResult;
114
+ try {
115
+ connectionResult = yield provider.connect({
116
+ onlyIfTrusted: true,
117
+ });
118
+ }
119
+ catch (e) {
120
+ return [];
121
+ }
122
+ const { address, publicKey } = connectionResult !== null && connectionResult !== void 0 ? connectionResult : {};
123
+ if (address) {
124
+ return [address];
125
+ }
126
+ else if (publicKey) {
127
+ return [publicKey.toString()];
128
+ }
129
+ else {
130
+ return [];
131
+ }
132
+ });
133
+ }
134
+ }
135
+ _a = SolProviderHelper;
136
+ SolProviderHelper.GlowProvider = () => _a.installedProviderLookup([{ flag: 'isGlow', value: true }]);
137
+ SolProviderHelper.CoinbaseProvider = () => _a.findSolanaProviders(window.coinbaseSolana)[0];
138
+ SolProviderHelper.PhantomProvider = () => _a.installedProviderLookup([
139
+ { flag: 'isPhantom', value: true },
140
+ { flag: 'isBraveWallet', value: false },
141
+ { flag: 'isExodus', value: false },
142
+ ]);
143
+ SolProviderHelper.SolflareProvider = () => _a.installedProviderLookup([{ flag: 'isSolflare', value: true }]);
144
+ SolProviderHelper.BraveProvider = () => _a.installedProviderLookup([
145
+ { flag: 'isPhantom', value: true },
146
+ { flag: 'isBraveWallet', value: true },
147
+ ]);
148
+ SolProviderHelper.ExodusProvider = () => _a.installedProviderLookup([
149
+ { flag: 'isPhantom', value: true },
150
+ { flag: 'isExodus', value: true },
151
+ ]);
152
+ SolProviderHelper.providers = {
153
+ bravesol: _a.BraveProvider,
154
+ coinbasesolana: _a.CoinbaseProvider,
155
+ exodussol: _a.ExodusProvider,
156
+ glow: _a.GlowProvider,
157
+ phantom: _a.PhantomProvider,
158
+ phantomledger: _a.PhantomProvider,
159
+ solflare: _a.SolflareProvider,
160
+ };
161
+
162
+ exports.SolProviderHelper = SolProviderHelper;
@@ -0,0 +1,29 @@
1
+ import { ProviderCondition, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
2
+ import { ISolana, ProviderFlag } from './types';
3
+ export interface SignedMessage {
4
+ signature: Uint8Array;
5
+ }
6
+ type Provider = () => ISolana | undefined;
7
+ export declare class SolProviderHelper {
8
+ static GlowProvider: Provider;
9
+ static CoinbaseProvider: Provider;
10
+ static PhantomProvider: Provider;
11
+ static SolflareProvider: Provider;
12
+ static BraveProvider: Provider;
13
+ static ExodusProvider: Provider;
14
+ static providers: {
15
+ [wallet: string]: Provider;
16
+ };
17
+ static installedProviderLookup(providerFlags: Array<ProviderCondition<ProviderFlag>>): ISolana | undefined;
18
+ static allInstalledProviders(): ISolana[];
19
+ static findSolanaProviders(solana?: ISolana): ISolana[];
20
+ static isInstalledHelper(walletName: string): boolean;
21
+ static findProvider(walletName: string): ISolana | undefined;
22
+ static fetchPublicAddressWithName(name: string): Promise<string | undefined>;
23
+ static connectWithName(name: string): Promise<ISolana | undefined>;
24
+ static signMessageWithName(messageToSign: string, name: string): Promise<string | undefined>;
25
+ static _setupEventListeners(listeners: WalletEventListeners, web3Provider?: ISolana): void;
26
+ static _teardownEventListeners(name: string): void;
27
+ static getConnectedAccountsWithName(name: string): Promise<string[]>;
28
+ }
29
+ export {};
@@ -0,0 +1,158 @@
1
+ import { __awaiter } from '../_virtual/_tslib.js';
2
+ import { ProviderLookup, normalizeWalletName } from '@dynamic-labs/wallet-connector-core';
3
+ import { bufferToBase64 } from '@dynamic-labs/utils';
4
+
5
+ var _a;
6
+ class SolProviderHelper {
7
+ static installedProviderLookup(providerFlags) {
8
+ return ProviderLookup(this.allInstalledProviders(), providerFlags);
9
+ }
10
+ static allInstalledProviders() {
11
+ return this.findSolanaProviders(window.solana).concat(this.findSolanaProviders(window.solflare), this.findSolanaProviders(window.glowSolana));
12
+ }
13
+ static findSolanaProviders(solana) {
14
+ const solanaProviders = [];
15
+ if (solana && !solana.providers) {
16
+ solanaProviders.push(solana);
17
+ }
18
+ else if (solana && solana.providers) {
19
+ solana.providers.forEach((provider) => {
20
+ solanaProviders.push(provider);
21
+ });
22
+ }
23
+ return solanaProviders;
24
+ }
25
+ static isInstalledHelper(walletName) {
26
+ return this.findProvider(walletName) !== undefined;
27
+ }
28
+ static findProvider(walletName) {
29
+ var _b, _c;
30
+ return (_c = (_b = this.providers)[normalizeWalletName(walletName)]) === null || _c === void 0 ? void 0 : _c.call(_b);
31
+ }
32
+ static fetchPublicAddressWithName(name) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ const provider = this.findProvider(name);
35
+ if (!provider) {
36
+ return Promise.resolve(undefined);
37
+ }
38
+ yield provider.connect();
39
+ const { publicKey } = provider;
40
+ return publicKey ? publicKey.toString() : Promise.resolve(undefined);
41
+ });
42
+ }
43
+ static connectWithName(name) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ const provider = this.findProvider(name);
46
+ if (!provider) {
47
+ return Promise.resolve(undefined);
48
+ }
49
+ try {
50
+ yield provider.connect();
51
+ return provider;
52
+ }
53
+ catch (err) {
54
+ return undefined;
55
+ }
56
+ });
57
+ }
58
+ static signMessageWithName(messageToSign, name) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ const walletAddress = yield this.fetchPublicAddressWithName(name);
61
+ if (!walletAddress) {
62
+ return Promise.resolve(undefined);
63
+ }
64
+ const provider = this.findProvider(name);
65
+ if (!provider) {
66
+ return Promise.resolve(undefined);
67
+ }
68
+ const encodedMessage = new TextEncoder().encode(messageToSign);
69
+ return provider.connect().then(() => __awaiter(this, void 0, void 0, function* () {
70
+ const { signature } = (yield provider.signMessage(encodedMessage, 'utf8'));
71
+ return bufferToBase64(signature);
72
+ }));
73
+ });
74
+ }
75
+ static _setupEventListeners(listeners, web3Provider) {
76
+ const handleAccountChange = (address) => __awaiter(this, void 0, void 0, function* () {
77
+ var _b, _c, _d;
78
+ if (!address) {
79
+ yield (web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.connect());
80
+ if ((_b = web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.publicKey) === null || _b === void 0 ? void 0 : _b.toString()) {
81
+ (_c = listeners.onAccountChange) === null || _c === void 0 ? void 0 : _c.call(listeners, [web3Provider.publicKey.toString()]);
82
+ }
83
+ return;
84
+ }
85
+ if (address.toString()) {
86
+ yield ((_d = listeners.onAccountChange) === null || _d === void 0 ? void 0 : _d.call(listeners, [address.toString()]));
87
+ }
88
+ });
89
+ const handleDisconnect = () => __awaiter(this, void 0, void 0, function* () {
90
+ var _e;
91
+ yield ((_e = listeners.onDisconnect) === null || _e === void 0 ? void 0 : _e.call(listeners));
92
+ });
93
+ web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.on('accountChanged', handleAccountChange);
94
+ web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.on('disconnect', handleDisconnect);
95
+ }
96
+ static _teardownEventListeners(name) {
97
+ const web3Provider = this.findProvider(name);
98
+ if (!web3Provider) {
99
+ return;
100
+ }
101
+ web3Provider.removeAllListeners();
102
+ }
103
+ static getConnectedAccountsWithName(name) {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ const provider = this.findProvider(name);
106
+ if (!provider) {
107
+ return [];
108
+ }
109
+ let connectionResult;
110
+ try {
111
+ connectionResult = yield provider.connect({
112
+ onlyIfTrusted: true,
113
+ });
114
+ }
115
+ catch (e) {
116
+ return [];
117
+ }
118
+ const { address, publicKey } = connectionResult !== null && connectionResult !== void 0 ? connectionResult : {};
119
+ if (address) {
120
+ return [address];
121
+ }
122
+ else if (publicKey) {
123
+ return [publicKey.toString()];
124
+ }
125
+ else {
126
+ return [];
127
+ }
128
+ });
129
+ }
130
+ }
131
+ _a = SolProviderHelper;
132
+ SolProviderHelper.GlowProvider = () => _a.installedProviderLookup([{ flag: 'isGlow', value: true }]);
133
+ SolProviderHelper.CoinbaseProvider = () => _a.findSolanaProviders(window.coinbaseSolana)[0];
134
+ SolProviderHelper.PhantomProvider = () => _a.installedProviderLookup([
135
+ { flag: 'isPhantom', value: true },
136
+ { flag: 'isBraveWallet', value: false },
137
+ { flag: 'isExodus', value: false },
138
+ ]);
139
+ SolProviderHelper.SolflareProvider = () => _a.installedProviderLookup([{ flag: 'isSolflare', value: true }]);
140
+ SolProviderHelper.BraveProvider = () => _a.installedProviderLookup([
141
+ { flag: 'isPhantom', value: true },
142
+ { flag: 'isBraveWallet', value: true },
143
+ ]);
144
+ SolProviderHelper.ExodusProvider = () => _a.installedProviderLookup([
145
+ { flag: 'isPhantom', value: true },
146
+ { flag: 'isExodus', value: true },
147
+ ]);
148
+ SolProviderHelper.providers = {
149
+ bravesol: _a.BraveProvider,
150
+ coinbasesolana: _a.CoinbaseProvider,
151
+ exodussol: _a.ExodusProvider,
152
+ glow: _a.GlowProvider,
153
+ phantom: _a.PhantomProvider,
154
+ phantomledger: _a.PhantomProvider,
155
+ solflare: _a.SolflareProvider,
156
+ };
157
+
158
+ export { SolProviderHelper };
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../_virtual/_tslib.cjs');
6
+ var web3_js = require('@solana/web3.js');
7
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
8
+ var rpcProviders = require('@dynamic-labs/rpc-providers');
9
+ var utils = require('@dynamic-labs/utils');
10
+
11
+ class SolWalletConnector extends walletConnectorCore.WalletConnectorBase {
12
+ constructor({ solNetworks, chainRpcProviders }) {
13
+ var _a;
14
+ super();
15
+ this.supportedChains = ['SOL'];
16
+ this.connectedChain = 'SOL';
17
+ this.solNetworks = solNetworks;
18
+ this.chainRpcProviders = chainRpcProviders;
19
+ (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(rpcProviders.ProviderChain.SOLANA, (config) => {
20
+ const rpcProviders = {};
21
+ if (config === null || config === void 0 ? void 0 : config.solana) {
22
+ rpcProviders.solana = config.solana.map((network) => {
23
+ var _a;
24
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
25
+ const provider = new web3_js.Connection(rpcUrl);
26
+ return {
27
+ chainId: network.chainId.toString(),
28
+ chainName: network.name,
29
+ provider,
30
+ };
31
+ });
32
+ }
33
+ return rpcProviders.solana;
34
+ });
35
+ }
36
+ getWeb3Provider() {
37
+ var _a;
38
+ const [network] = this.solNetworks;
39
+ if (!network) {
40
+ throw new utils.DynamicError('No enabled networks');
41
+ }
42
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
43
+ return new web3_js.Connection(rpcUrl, 'confirmed');
44
+ }
45
+ getRpcProvider() {
46
+ var _a, _b;
47
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
48
+ if (this.solNetworks.length === 0)
49
+ return;
50
+ const configurations = {
51
+ cosmos: [],
52
+ evm: undefined,
53
+ solana: this.solNetworks,
54
+ starknet: undefined,
55
+ };
56
+ return (_b = (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.getSolanaRpcProviderByChainId(configurations, '101')) === null || _b === void 0 ? void 0 : _b.provider;
57
+ });
58
+ }
59
+ getBalance() {
60
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
61
+ const signer = yield this.getSigner();
62
+ if (!signer)
63
+ return;
64
+ const publicKey = new web3_js.PublicKey(signer.publicKey.toString());
65
+ const balance = this.lamportsToSol(yield this.getWeb3Provider().getBalance(publicKey));
66
+ return balance.toString();
67
+ });
68
+ }
69
+ // Solana uses lamports as the smallest unit of currency. This converts lamports to SOL.
70
+ lamportsToSol(lamports) {
71
+ return lamports / 1000000000;
72
+ }
73
+ }
74
+
75
+ exports.SolWalletConnector = SolWalletConnector;
@@ -0,0 +1,21 @@
1
+ import { Connection } from '@solana/web3.js';
2
+ import { Chain, WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
3
+ import { GenericNetwork } from '@dynamic-labs/types';
4
+ import { ChainRpcProviders } from '@dynamic-labs/rpc-providers';
5
+ import { ISolana } from './types';
6
+ export type SolWalletConnectorOpts = {
7
+ chainRpcProviders: typeof ChainRpcProviders;
8
+ solNetworks: GenericNetwork[];
9
+ };
10
+ export declare abstract class SolWalletConnector extends WalletConnectorBase {
11
+ solNetworks: GenericNetwork[];
12
+ supportedChains: Chain[];
13
+ connectedChain: Chain;
14
+ constructor({ solNetworks, chainRpcProviders }: SolWalletConnectorOpts);
15
+ getWeb3Provider(): Connection;
16
+ getRpcProvider(): Promise<Connection | undefined>;
17
+ abstract getSigner(): Promise<ISolana | undefined>;
18
+ abstract connect(): Promise<void>;
19
+ getBalance(): Promise<string | undefined>;
20
+ lamportsToSol(lamports: number): number;
21
+ }
@@ -0,0 +1,71 @@
1
+ import { __awaiter } from '../_virtual/_tslib.js';
2
+ import { Connection, PublicKey } from '@solana/web3.js';
3
+ import { WalletConnectorBase } from '@dynamic-labs/wallet-connector-core';
4
+ import { ProviderChain } from '@dynamic-labs/rpc-providers';
5
+ import { DynamicError } from '@dynamic-labs/utils';
6
+
7
+ class SolWalletConnector extends WalletConnectorBase {
8
+ constructor({ solNetworks, chainRpcProviders }) {
9
+ var _a;
10
+ super();
11
+ this.supportedChains = ['SOL'];
12
+ this.connectedChain = 'SOL';
13
+ this.solNetworks = solNetworks;
14
+ this.chainRpcProviders = chainRpcProviders;
15
+ (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.registerChainProviders(ProviderChain.SOLANA, (config) => {
16
+ const rpcProviders = {};
17
+ if (config === null || config === void 0 ? void 0 : config.solana) {
18
+ rpcProviders.solana = config.solana.map((network) => {
19
+ var _a;
20
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
21
+ const provider = new Connection(rpcUrl);
22
+ return {
23
+ chainId: network.chainId.toString(),
24
+ chainName: network.name,
25
+ provider,
26
+ };
27
+ });
28
+ }
29
+ return rpcProviders.solana;
30
+ });
31
+ }
32
+ getWeb3Provider() {
33
+ var _a;
34
+ const [network] = this.solNetworks;
35
+ if (!network) {
36
+ throw new DynamicError('No enabled networks');
37
+ }
38
+ const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
39
+ return new Connection(rpcUrl, 'confirmed');
40
+ }
41
+ getRpcProvider() {
42
+ var _a, _b;
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ if (this.solNetworks.length === 0)
45
+ return;
46
+ const configurations = {
47
+ cosmos: [],
48
+ evm: undefined,
49
+ solana: this.solNetworks,
50
+ starknet: undefined,
51
+ };
52
+ return (_b = (_a = this.chainRpcProviders) === null || _a === void 0 ? void 0 : _a.getSolanaRpcProviderByChainId(configurations, '101')) === null || _b === void 0 ? void 0 : _b.provider;
53
+ });
54
+ }
55
+ getBalance() {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const signer = yield this.getSigner();
58
+ if (!signer)
59
+ return;
60
+ const publicKey = new PublicKey(signer.publicKey.toString());
61
+ const balance = this.lamportsToSol(yield this.getWeb3Provider().getBalance(publicKey));
62
+ return balance.toString();
63
+ });
64
+ }
65
+ // Solana uses lamports as the smallest unit of currency. This converts lamports to SOL.
66
+ lamportsToSol(lamports) {
67
+ return lamports / 1000000000;
68
+ }
69
+ }
70
+
71
+ export { SolWalletConnector };
package/src/types.d.ts ADDED
@@ -0,0 +1,42 @@
1
+ import { Transaction } from '@solana/web3.js';
2
+ import { ProviderCondition } from '@dynamic-labs/wallet-connector-core';
3
+ declare global {
4
+ interface IWindowPhantom {
5
+ solana: ISolana;
6
+ }
7
+ interface Window {
8
+ Slope?: {
9
+ new (): ISolana;
10
+ };
11
+ coinbaseSolana?: ISolana;
12
+ glowSolana?: ISolana;
13
+ phantom?: IWindowPhantom;
14
+ solana?: ISolana;
15
+ solflare?: ISolana;
16
+ }
17
+ }
18
+ type PublicKey = {
19
+ toString: () => string;
20
+ };
21
+ export type ConnectionResult = {
22
+ address?: string;
23
+ publicKey?: PublicKey;
24
+ } | undefined;
25
+ export type ISolana = {
26
+ [key in ProviderFlag]: boolean;
27
+ } & {
28
+ connect: (args?: {
29
+ onlyIfTrusted: boolean;
30
+ }) => Promise<ConnectionResult>;
31
+ disconnect: () => Promise<void | object>;
32
+ on: (eventMessage: string, callback?: (publickey: string) => void) => Promise<void | object>;
33
+ providers: object[];
34
+ publicKey: PublicKey;
35
+ removeAllListeners: () => void;
36
+ removeListener: (eventMessage: string, callback?: (publickey: string) => void) => Promise<void | object>;
37
+ signMessage: (message: Uint8Array, encoding?: string) => Promise<void | object>;
38
+ signTransaction: (transaction: Transaction) => Promise<Transaction>;
39
+ };
40
+ export type ProviderFlag = 'isBraveWallet' | 'isGlow' | 'isPhantom' | 'isSolflare' | 'isExodus';
41
+ export type EthProviderCondition = ProviderCondition<ProviderFlag>;
42
+ export {};
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const extractNonce = (messageToSign) => {
6
+ const regex = messageToSign.match(/Nonce: (.*)/);
7
+ if (regex && regex.length === 2) {
8
+ return regex[1];
9
+ }
10
+ return undefined;
11
+ };
12
+
13
+ exports.extractNonce = extractNonce;
@@ -0,0 +1 @@
1
+ export declare const extractNonce: (messageToSign: string) => string | undefined;
@@ -0,0 +1,9 @@
1
+ const extractNonce = (messageToSign) => {
2
+ const regex = messageToSign.match(/Nonce: (.*)/);
3
+ if (regex && regex.length === 2) {
4
+ return regex[1];
5
+ }
6
+ return undefined;
7
+ };
8
+
9
+ export { extractNonce };