@dynamic-labs/multi-wallet 0.15.1-minimal.0 → 0.15.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.
- package/CHANGELOG.md +52 -0
- package/package.json +17 -13
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/multi-wallet.d.ts +1 -0
- package/src/multi-wallet.js +67 -2
- package/src/multi-wallet.js.map +1 -1
- package/src/types.d.ts +1 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.d.ts +3 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js +30 -0
- package/src/utils/assignConfirmationScreenToProvider/assignConfirmationScreenToProvider.js.map +1 -0
- package/src/utils/assignConfirmationScreenToProvider/index.d.ts +1 -0
- package/src/utils/assignConfirmationScreenToProvider/index.js +6 -0
- package/src/utils/assignConfirmationScreenToProvider/index.js.map +1 -0
- package/src/wallets/algorand/myalgo.d.ts +34 -0
- package/src/wallets/algorand/myalgo.js +178 -0
- package/src/wallets/algorand/myalgo.js.map +1 -0
- package/src/wallets/algorand/myalgoSigner.d.ts +21 -0
- package/src/wallets/algorand/myalgoSigner.js +23 -0
- package/src/wallets/algorand/myalgoSigner.js.map +1 -0
- package/src/wallets/ethereum/BloctoEvm.d.ts +34 -0
- package/src/wallets/ethereum/BloctoEvm.js +135 -0
- package/src/wallets/ethereum/BloctoEvm.js.map +1 -0
- package/src/wallets/ethereum/MagicLink.d.ts +48 -0
- package/src/wallets/ethereum/MagicLink.js +178 -0
- package/src/wallets/ethereum/MagicLink.js.map +1 -0
- package/src/wallets/ethereum/fortmatic.d.ts +34 -0
- package/src/wallets/ethereum/fortmatic.js +93 -0
- package/src/wallets/ethereum/fortmatic.js.map +1 -0
- package/src/wallets/ethereum/injected/BloctoInjected.d.ts +6 -0
- package/src/wallets/ethereum/injected/BloctoInjected.js +13 -0
- package/src/wallets/ethereum/injected/BloctoInjected.js.map +1 -0
- package/src/wallets/flow/blocto.d.ts +13 -0
- package/src/wallets/flow/blocto.js +29 -0
- package/src/wallets/flow/blocto.js.map +1 -0
- package/src/wallets/flow/dapper.d.ts +13 -0
- package/src/wallets/flow/dapper.js +29 -0
- package/src/wallets/flow/dapper.js.map +1 -0
- package/src/wallets/flow/flow-provider.d.ts +34 -0
- package/src/wallets/flow/flow-provider.js +184 -0
- package/src/wallets/flow/flow-provider.js.map +1 -0
- package/src/wallets/flow/lilico.d.ts +15 -0
- package/src/wallets/flow/lilico.js +50 -0
- package/src/wallets/flow/lilico.js.map +1 -0
- package/src/wallets/solana/CoinbaseSolana.d.ts +26 -0
- package/src/wallets/solana/CoinbaseSolana.js +76 -0
- package/src/wallets/solana/CoinbaseSolana.js.map +1 -0
- package/src/wallets/solana/glow.d.ts +25 -0
- package/src/wallets/solana/glow.js +73 -0
- package/src/wallets/solana/glow.js.map +1 -0
- package/src/wallets/solana/injected/BraveSol.d.ts +6 -0
- package/src/wallets/solana/injected/BraveSol.js +17 -0
- package/src/wallets/solana/injected/BraveSol.js.map +1 -0
- package/src/wallets/solana/injected/ExodusSol.d.ts +5 -0
- package/src/wallets/solana/injected/ExodusSol.js +12 -0
- package/src/wallets/solana/injected/ExodusSol.js.map +1 -0
- package/src/wallets/solana/phantom-ledger.d.ts +16 -0
- package/src/wallets/solana/phantom-ledger.js +67 -0
- package/src/wallets/solana/phantom-ledger.js.map +1 -0
- package/src/wallets/solana/phantom.d.ts +26 -0
- package/src/wallets/solana/phantom.js +99 -0
- package/src/wallets/solana/phantom.js.map +1 -0
- package/src/wallets/solana/slope.d.ts +39 -0
- package/src/wallets/solana/slope.js +124 -0
- package/src/wallets/solana/slope.js.map +1 -0
- package/src/wallets/solana/solProvider.d.ts +16 -0
- package/src/wallets/solana/solProvider.js +56 -0
- package/src/wallets/solana/solProvider.js.map +1 -0
- package/src/wallets/solana/solProviderHelper.d.ts +29 -0
- package/src/wallets/solana/solProviderHelper.js +144 -0
- package/src/wallets/solana/solProviderHelper.js.map +1 -0
- package/src/wallets/solana/solflare.d.ts +26 -0
- package/src/wallets/solana/solflare.js +93 -0
- package/src/wallets/solana/solflare.js.map +1 -0
- package/src/wallets/starknet/argentx.d.ts +6 -0
- package/src/wallets/starknet/argentx.js +11 -0
- package/src/wallets/starknet/argentx.js.map +1 -0
- package/src/wallets/starknet/braavos.d.ts +6 -0
- package/src/wallets/starknet/braavos.js +11 -0
- package/src/wallets/starknet/braavos.js.map +1 -0
- package/src/wallets/starknet/ethereumContractAbi.json +340 -0
- package/src/wallets/starknet/starknetProvider.d.ts +31 -0
- package/src/wallets/starknet/starknetProvider.js +98 -0
- package/src/wallets/starknet/starknetProvider.js.map +1 -0
- package/src/wallets/starknet/starknetProviderHelper.d.ts +17 -0
- package/src/wallets/starknet/starknetProviderHelper.js +159 -0
- package/src/wallets/starknet/starknetProviderHelper.js.map +1 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.walletName = exports.MEMO_PROGRAM_ID = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
const errors_1 = require("../../errors");
|
|
7
|
+
const extractNonce_1 = require("../../utils/extractNonce");
|
|
8
|
+
const phantom_1 = tslib_1.__importDefault(require("./phantom"));
|
|
9
|
+
exports.MEMO_PROGRAM_ID = new web3_js_1.PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr');
|
|
10
|
+
/**
|
|
11
|
+
* I'm exporting the walletName to use it for DYN-1447. As we only need the wallet name,
|
|
12
|
+
* exporting it in this way, we avoid to instantiate the whole PhantomLedger class every time.
|
|
13
|
+
*/
|
|
14
|
+
exports.walletName = 'Phantom Ledger';
|
|
15
|
+
class PhantomLedger extends phantom_1.default {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
this.name = exports.walletName;
|
|
19
|
+
this.buildAuthTx = (message) => {
|
|
20
|
+
const transaction = new web3_js_1.Transaction();
|
|
21
|
+
transaction.add(new web3_js_1.TransactionInstruction({
|
|
22
|
+
data: Buffer.from(message, 'utf8'),
|
|
23
|
+
keys: [],
|
|
24
|
+
programId: exports.MEMO_PROGRAM_ID,
|
|
25
|
+
}));
|
|
26
|
+
return transaction;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
signMessage() {
|
|
30
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
throw new errors_1.NotSupportedError(`Message signing is currently not supported on ${exports.walletName}
|
|
32
|
+
You can use signMessageViaTransaction instead to achieve similar functionality
|
|
33
|
+
by signing a transaction with a memo instruction.
|
|
34
|
+
You can read more about it here https://github.com/solana-labs/solana/issues/21366`);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
proveOwnership(messageToSign) {
|
|
38
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
const nonce = (0, extractNonce_1.extractNonce)(messageToSign);
|
|
40
|
+
if (!nonce) {
|
|
41
|
+
throw new errors_1.DynamicError('Nonce missing');
|
|
42
|
+
}
|
|
43
|
+
return this.signMessageViaTransaction(nonce);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
signMessageViaTransaction(messageToSign) {
|
|
47
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const address = yield this.fetchPublicAddress();
|
|
49
|
+
if (!address) {
|
|
50
|
+
throw new errors_1.DynamicError('Address missing');
|
|
51
|
+
}
|
|
52
|
+
const transaction = this.buildAuthTx(messageToSign);
|
|
53
|
+
transaction.feePayer = new web3_js_1.PublicKey(address);
|
|
54
|
+
transaction.recentBlockhash = (yield this.getWeb3Provider().getLatestBlockhash()).blockhash;
|
|
55
|
+
const signer = yield this.getSigner();
|
|
56
|
+
if (!signer) {
|
|
57
|
+
throw new errors_1.DynamicError('Signer not found');
|
|
58
|
+
}
|
|
59
|
+
const signedTransaction = yield signer.signTransaction(transaction);
|
|
60
|
+
return JSON.stringify({
|
|
61
|
+
signedTransaction: signedTransaction.serialize(),
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.default = PhantomLedger;
|
|
67
|
+
//# sourceMappingURL=phantom-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom-ledger.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/phantom-ledger.ts"],"names":[],"mappings":";;;;AAAA,6CAIyB;AAEzB,yCAA+D;AAC/D,2DAAwD;AAExD,gEAAgC;AAEnB,QAAA,eAAe,GAAG,IAAI,mBAAS,CAC1C,6CAA6C,CAC9C,CAAC;AAEF;;;GAGG;AACU,QAAA,UAAU,GAAG,gBAAgB,CAAC;AAE3C,MAAM,aAAc,SAAQ,iBAAO;IAAnC;;QACW,SAAI,GAAG,kBAAU,CAAC;QAgDnB,gBAAW,GAAG,CAAC,OAAe,EAAe,EAAE;YACrD,MAAM,WAAW,GAAG,IAAI,qBAAW,EAAE,CAAC;YAEtC,WAAW,CAAC,GAAG,CACb,IAAI,gCAAsB,CAAC;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;gBAClC,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,uBAAe;aAC3B,CAAC,CACH,CAAC;YACF,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC;IACJ,CAAC;IA1DgB,WAAW;;YACxB,MAAM,IAAI,0BAAiB,CACzB,iDAAiD,kBAAU;;;yFAGwB,CACpF,CAAC;QACJ,CAAC;KAAA;IAEc,cAAc,CAC3B,aAAqB;;YAErB,MAAM,KAAK,GAAG,IAAA,2BAAY,EAAC,aAAa,CAAC,CAAC;YAE1C,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,qBAAY,CAAC,eAAe,CAAC,CAAC;aACzC;YAED,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;KAAA;IAEK,yBAAyB,CAAC,aAAqB;;YACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,qBAAY,CAAC,iBAAiB,CAAC,CAAC;aAC3C;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACpD,WAAW,CAAC,QAAQ,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,WAAW,CAAC,eAAe,GAAG,CAC5B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,kBAAkB,EAAE,CAClD,CAAC,SAAS,CAAC;YAEZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAEtC,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,IAAI,qBAAY,CAAC,kBAAkB,CAAC,CAAC;aAC5C;YAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,iBAAiB,EAAE,iBAAiB,CAAC,SAAS,EAAE;aACjD,CAAC,CAAC;QACL,CAAC;KAAA;CAcF;AAED,kBAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Chain, WalletConnector, WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
2
|
+
import { ISolana } from '../window';
|
|
3
|
+
import { SolProvider } from './solProvider';
|
|
4
|
+
import { SolProviderHelper } from './solProviderHelper';
|
|
5
|
+
declare class Phantom extends SolProvider implements WalletConnector {
|
|
6
|
+
name: string;
|
|
7
|
+
supportedChains: Chain[];
|
|
8
|
+
connectedChain: Chain;
|
|
9
|
+
canConnectViaQrCode: boolean;
|
|
10
|
+
canConnectViaCustodialService: boolean;
|
|
11
|
+
isWalletConnect: boolean;
|
|
12
|
+
solProviderHelper: SolProviderHelper;
|
|
13
|
+
get key(): string;
|
|
14
|
+
setupEventListeners(listeners: WalletEventListeners): Promise<() => void>;
|
|
15
|
+
teardownEventListeners(): void;
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
getSigner(): Promise<ISolana | undefined>;
|
|
18
|
+
isInstalledOnBrowser(): boolean;
|
|
19
|
+
fetchPublicAddress(): Promise<string | undefined>;
|
|
20
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
21
|
+
proveOwnership(messageToSign: string): Promise<string | undefined>;
|
|
22
|
+
supportsNetworkSwitching(): boolean;
|
|
23
|
+
switchNetwork(): Promise<void>;
|
|
24
|
+
getConnectedAccounts(): Promise<string[]>;
|
|
25
|
+
}
|
|
26
|
+
export default Phantom;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const errors_1 = require("../../errors");
|
|
5
|
+
const isMobile_1 = require("../../utils/isMobile");
|
|
6
|
+
const normalizeWalletName_1 = require("../../utils/normalizeWalletName");
|
|
7
|
+
const solProvider_1 = require("./solProvider");
|
|
8
|
+
const solProviderHelper_1 = require("./solProviderHelper");
|
|
9
|
+
class Phantom extends solProvider_1.SolProvider {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.name = 'Phantom';
|
|
13
|
+
this.supportedChains = ['SOL'];
|
|
14
|
+
this.connectedChain = 'SOL';
|
|
15
|
+
this.canConnectViaQrCode = false;
|
|
16
|
+
this.canConnectViaCustodialService = false;
|
|
17
|
+
this.isWalletConnect = false;
|
|
18
|
+
this.solProviderHelper = new solProviderHelper_1.SolProviderHelper();
|
|
19
|
+
}
|
|
20
|
+
get key() {
|
|
21
|
+
return (0, normalizeWalletName_1.normalizeWalletName)(this.name);
|
|
22
|
+
}
|
|
23
|
+
setupEventListeners(listeners) {
|
|
24
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
return this.solProviderHelper._setupEventListeners(Object.assign(Object.assign({}, listeners), { onDisconnect: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
// noop for now because phantom sends a disconnect event when the page reloads,
|
|
27
|
+
// resulting in a log out.
|
|
28
|
+
}) }), this.solProviderHelper.findProvider(this.name));
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
teardownEventListeners() {
|
|
32
|
+
this.solProviderHelper._teardownEventListeners(this.name);
|
|
33
|
+
}
|
|
34
|
+
connect() {
|
|
35
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
36
|
+
yield this.solProviderHelper.connectWithName(this.name);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
getSigner() {
|
|
40
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
return this.solProviderHelper.connectWithName(this.name);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
isInstalledOnBrowser() {
|
|
45
|
+
var _a;
|
|
46
|
+
/**
|
|
47
|
+
* When Glow wallet is installed and Phantom isn't, isPhantom will
|
|
48
|
+
* still be true. This added check is to return false in that scenario.
|
|
49
|
+
* It relies on the fact that if both Glow and Phantom are enabled,
|
|
50
|
+
* solana.isGlow will return false.
|
|
51
|
+
*/
|
|
52
|
+
return (this.solProviderHelper.isInstalledHelper(this.name) &&
|
|
53
|
+
!((_a = window.solana) === null || _a === void 0 ? void 0 : _a.isGlow));
|
|
54
|
+
}
|
|
55
|
+
fetchPublicAddress() {
|
|
56
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
if (this.isInstalledOnBrowser()) {
|
|
58
|
+
return this.solProviderHelper.fetchPublicAddressWithName(this.name);
|
|
59
|
+
}
|
|
60
|
+
const url = encodeURIComponent(window.location.toString());
|
|
61
|
+
const ref = encodeURIComponent(window.location.origin);
|
|
62
|
+
// samsung browser only supports native links, not universal links
|
|
63
|
+
if ((0, isMobile_1.isMobile)()) {
|
|
64
|
+
if ((0, isMobile_1.isSamsungBrowser)()) {
|
|
65
|
+
window.location.assign(`phantom://browse/${url}?ref=${ref}`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
window.location.assign(`https://phantom.app/ul/browse/${url}?ref=${ref}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
signMessage(messageToSign) {
|
|
75
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
return this.solProviderHelper.signMessageWithName(messageToSign, this.name);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
proveOwnership(messageToSign) {
|
|
80
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
return this.signMessage(messageToSign);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
supportsNetworkSwitching() {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
switchNetwork() {
|
|
88
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
throw new errors_1.DynamicError('Not supported');
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
getConnectedAccounts() {
|
|
93
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
return this.solProviderHelper.getConnectedAccountsWithName(this.name);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.default = Phantom;
|
|
99
|
+
//# sourceMappingURL=phantom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/phantom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Chain, WalletConnector } from '@dynamic-labs/wallet-connector-core';
|
|
2
|
+
import { ISolana } from '../window';
|
|
3
|
+
import { SolProvider } from './solProvider';
|
|
4
|
+
interface ConnectData {
|
|
5
|
+
data: {
|
|
6
|
+
publicKey: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
interface SignatureData {
|
|
10
|
+
data: {
|
|
11
|
+
signature: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
declare class Slope extends SolProvider implements WalletConnector {
|
|
15
|
+
name: string;
|
|
16
|
+
supportedChains: Chain[];
|
|
17
|
+
connectedChain: Chain;
|
|
18
|
+
canConnectViaQrCode: boolean;
|
|
19
|
+
canConnectViaCustodialService: boolean;
|
|
20
|
+
isWalletConnect: boolean;
|
|
21
|
+
private static _wallet;
|
|
22
|
+
get key(): string;
|
|
23
|
+
get wallet(): ISolana | undefined;
|
|
24
|
+
setupEventListeners(): void;
|
|
25
|
+
teardownEventListeners(): void;
|
|
26
|
+
connect(): Promise<void>;
|
|
27
|
+
getSigner(): Promise<undefined>;
|
|
28
|
+
getBalance(): Promise<string | undefined>;
|
|
29
|
+
isInstalledOnBrowser(): boolean;
|
|
30
|
+
isConnectData: (value: unknown) => value is ConnectData;
|
|
31
|
+
isSignatureData: (value: unknown) => value is SignatureData;
|
|
32
|
+
fetchPublicAddress(): Promise<string | undefined>;
|
|
33
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
34
|
+
proveOwnership(messageToSign: string): Promise<string | undefined>;
|
|
35
|
+
supportsNetworkSwitching(): boolean;
|
|
36
|
+
switchNetwork(): Promise<void>;
|
|
37
|
+
getConnectedAccounts(): Promise<string[]>;
|
|
38
|
+
}
|
|
39
|
+
export default Slope;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
const errors_1 = require("../../errors");
|
|
6
|
+
const logger_1 = require("../../utils/logger");
|
|
7
|
+
const normalizeWalletName_1 = require("../../utils/normalizeWalletName");
|
|
8
|
+
const solProvider_1 = require("./solProvider");
|
|
9
|
+
class Slope extends solProvider_1.SolProvider {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.name = 'Slope';
|
|
13
|
+
this.supportedChains = ['SOL'];
|
|
14
|
+
this.connectedChain = 'SOL';
|
|
15
|
+
this.canConnectViaQrCode = false;
|
|
16
|
+
this.canConnectViaCustodialService = false;
|
|
17
|
+
this.isWalletConnect = false;
|
|
18
|
+
this.isConnectData = (value) => { var _a; return ((_a = value.data) === null || _a === void 0 ? void 0 : _a.publicKey) !== undefined; };
|
|
19
|
+
this.isSignatureData = (value) => { var _a; return ((_a = value.data) === null || _a === void 0 ? void 0 : _a.signature) !== undefined; };
|
|
20
|
+
}
|
|
21
|
+
get key() {
|
|
22
|
+
return (0, normalizeWalletName_1.normalizeWalletName)(this.name);
|
|
23
|
+
}
|
|
24
|
+
get wallet() {
|
|
25
|
+
if (!window.Slope) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
if (!Slope._wallet) {
|
|
29
|
+
Slope._wallet = new window.Slope();
|
|
30
|
+
}
|
|
31
|
+
return Slope._wallet;
|
|
32
|
+
}
|
|
33
|
+
setupEventListeners() {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
teardownEventListeners() {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
connect() {
|
|
40
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
if (this.wallet === undefined)
|
|
42
|
+
return;
|
|
43
|
+
yield this.wallet.connect();
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
getSigner() {
|
|
47
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
return undefined;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getBalance() {
|
|
52
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
try {
|
|
54
|
+
if (this.wallet === undefined)
|
|
55
|
+
return undefined;
|
|
56
|
+
const response = yield this.wallet.connect();
|
|
57
|
+
const publicKey = new web3_js_1.PublicKey(this.isConnectData(response) && response.data.publicKey);
|
|
58
|
+
const balance = this.lamportsToSol(yield this.getWeb3Provider().getBalance(publicKey));
|
|
59
|
+
return balance.toString();
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
logger_1.logger.debug(e);
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
isInstalledOnBrowser() {
|
|
68
|
+
return typeof window.Slope === 'function';
|
|
69
|
+
}
|
|
70
|
+
fetchPublicAddress() {
|
|
71
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
72
|
+
try {
|
|
73
|
+
if (this.wallet === undefined)
|
|
74
|
+
return undefined;
|
|
75
|
+
const response = yield this.wallet.connect();
|
|
76
|
+
return this.isConnectData(response) ? response.data.publicKey : undefined;
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
logger_1.logger.debug(e);
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
signMessage(messageToSign) {
|
|
85
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
const encodedMessage = new TextEncoder().encode(messageToSign);
|
|
87
|
+
try {
|
|
88
|
+
if (this.wallet === undefined)
|
|
89
|
+
return undefined;
|
|
90
|
+
const response = yield this.wallet.signMessage(encodedMessage);
|
|
91
|
+
return this.isSignatureData(response)
|
|
92
|
+
? response.data.signature
|
|
93
|
+
: undefined;
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
logger_1.logger.debug(e);
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
proveOwnership(messageToSign) {
|
|
102
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
return this.signMessage(messageToSign);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
supportsNetworkSwitching() {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
switchNetwork() {
|
|
110
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
throw new errors_1.DynamicError('Not supported');
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
getConnectedAccounts() {
|
|
115
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
if (this.wallet === undefined)
|
|
117
|
+
return [];
|
|
118
|
+
const response = yield this.wallet.connect();
|
|
119
|
+
return this.isConnectData(response) ? [response.data.publicKey] : [];
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.default = Slope;
|
|
124
|
+
//# sourceMappingURL=slope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slope.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/slope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Connection } from '@solana/web3.js';
|
|
2
|
+
import type { NetworkConfiguration } from '@dynamic-labs/sdk-api';
|
|
3
|
+
import { ISolana } from '../window';
|
|
4
|
+
export declare abstract class SolProvider {
|
|
5
|
+
solNetworks: NetworkConfiguration[];
|
|
6
|
+
constructor({ solNetworks }: {
|
|
7
|
+
solNetworks: NetworkConfiguration[];
|
|
8
|
+
});
|
|
9
|
+
getWeb3Provider(): Connection;
|
|
10
|
+
getRpcProvider(): Promise<Connection | undefined>;
|
|
11
|
+
abstract getSigner(): Promise<ISolana | undefined>;
|
|
12
|
+
abstract connect(): Promise<void>;
|
|
13
|
+
getNetwork(): Promise<number | undefined>;
|
|
14
|
+
getBalance(): Promise<string | undefined>;
|
|
15
|
+
lamportsToSol(lamports: number): number;
|
|
16
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SolProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/* eslint-disable prefer-destructuring */
|
|
6
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
7
|
+
const rpcProviders_1 = require("../../rpcProviders");
|
|
8
|
+
const errors_1 = require("../../errors");
|
|
9
|
+
class SolProvider {
|
|
10
|
+
constructor({ solNetworks }) {
|
|
11
|
+
this.solNetworks = solNetworks;
|
|
12
|
+
}
|
|
13
|
+
getWeb3Provider() {
|
|
14
|
+
var _a;
|
|
15
|
+
const [network] = this.solNetworks;
|
|
16
|
+
if (!network) {
|
|
17
|
+
throw new errors_1.DynamicError('No enabled networks');
|
|
18
|
+
}
|
|
19
|
+
const rpcUrl = ((_a = network.privateCustomerRpcUrls) === null || _a === void 0 ? void 0 : _a[0]) || network.rpcUrls[0];
|
|
20
|
+
return new web3_js_1.Connection(rpcUrl, 'confirmed');
|
|
21
|
+
}
|
|
22
|
+
getRpcProvider() {
|
|
23
|
+
var _a;
|
|
24
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
if (this.solNetworks.length === 0)
|
|
26
|
+
return;
|
|
27
|
+
const configurations = {
|
|
28
|
+
evm: undefined,
|
|
29
|
+
solana: this.solNetworks,
|
|
30
|
+
starknet: undefined,
|
|
31
|
+
};
|
|
32
|
+
return (_a = (0, rpcProviders_1.getSolanaDefaultRpcProvider)(configurations)) === null || _a === void 0 ? void 0 : _a.provider;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
getNetwork() {
|
|
36
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
return undefined;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
getBalance() {
|
|
41
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
const signer = yield this.getSigner();
|
|
43
|
+
if (!signer)
|
|
44
|
+
return;
|
|
45
|
+
const publicKey = new web3_js_1.PublicKey(signer.publicKey.toString());
|
|
46
|
+
const balance = this.lamportsToSol(yield this.getWeb3Provider().getBalance(publicKey));
|
|
47
|
+
return balance.toString();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Solana uses lamports as the smallest unit of currency. This converts lamports to SOL.
|
|
51
|
+
lamportsToSol(lamports) {
|
|
52
|
+
return lamports / 1000000000;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.SolProvider = SolProvider;
|
|
56
|
+
//# sourceMappingURL=solProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solProvider.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/solProvider.ts"],"names":[],"mappings":";;;;AAAA,yCAAyC;AACzC,6CAAwD;AAKxD,qDAAiE;AACjE,yCAA4C;AAE5C,MAAsB,WAAW;IAG/B,YAAY,EAAE,WAAW,EAA2C;QAClE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,eAAe;;QACb,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAEnC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,qBAAY,CAAC,qBAAqB,CAAC,CAAC;SAC/C;QAED,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,CAAC,sBAAsB,0CAAG,CAAC,CAAC,KAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEzE,OAAO,IAAI,oBAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;IAEK,cAAc;;;YAClB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE1C,MAAM,cAAc,GAAG;gBACrB,GAAG,EAAE,SAAS;gBACd,MAAM,EAAE,IAAI,CAAC,WAAW;gBACxB,QAAQ,EAAE,SAAS;aACpB,CAAC;YACF,OAAO,MAAA,IAAA,0CAA2B,EAAC,cAAc,CAAC,0CAAE,QAAQ,CAAC;;KAC9D;IAKK,UAAU;;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;IAEK,UAAU;;YACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,SAAS,GAAG,IAAI,mBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAChC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CACnD,CAAC;YACF,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC;KAAA;IAED,wFAAwF;IACxF,aAAa,CAAC,QAAgB;QAC5B,OAAO,QAAQ,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAnDD,kCAmDC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { WalletEventListeners } from '@dynamic-labs/wallet-connector-core';
|
|
2
|
+
import { ISolana, ProviderCondition } from '../window';
|
|
3
|
+
export interface SignedMessage {
|
|
4
|
+
signature: Uint8Array;
|
|
5
|
+
}
|
|
6
|
+
type Provider = () => ISolana | undefined;
|
|
7
|
+
export declare class SolProviderHelper {
|
|
8
|
+
GlowProvider: Provider;
|
|
9
|
+
CoinbaseProvider: Provider;
|
|
10
|
+
PhantomProvider: Provider;
|
|
11
|
+
SolflareProvider: Provider;
|
|
12
|
+
BraveProvider: Provider;
|
|
13
|
+
ExodusProvider: Provider;
|
|
14
|
+
providers: {
|
|
15
|
+
[wallet: string]: Provider;
|
|
16
|
+
};
|
|
17
|
+
installedProviderLookup(providerFlags: Array<ProviderCondition>): ISolana | undefined;
|
|
18
|
+
allInstalledProviders(): ISolana[];
|
|
19
|
+
findSolanaProviders(solana?: ISolana): ISolana[];
|
|
20
|
+
isInstalledHelper(walletName: string): boolean;
|
|
21
|
+
findProvider(walletName: string): ISolana | undefined;
|
|
22
|
+
fetchPublicAddressWithName(name: string): Promise<string | undefined>;
|
|
23
|
+
connectWithName(name: string): Promise<ISolana | undefined>;
|
|
24
|
+
signMessageWithName(messageToSign: string, name: string): Promise<string | undefined>;
|
|
25
|
+
_setupEventListeners(listeners: WalletEventListeners, web3Provider?: ISolana): () => void;
|
|
26
|
+
_teardownEventListeners(name: string): void;
|
|
27
|
+
getConnectedAccountsWithName(name: string): Promise<string[]>;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SolProviderHelper = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const convertors_1 = require("../../utils/convertors");
|
|
6
|
+
const ProviderLookup_1 = require("../ProviderLookup");
|
|
7
|
+
const normalizeWalletName_1 = require("../../utils/normalizeWalletName");
|
|
8
|
+
class SolProviderHelper {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.GlowProvider = () => this.installedProviderLookup([{ flag: 'isGlow', value: true }]);
|
|
11
|
+
this.CoinbaseProvider = () => this.findSolanaProviders(window.coinbaseSolana)[0];
|
|
12
|
+
this.PhantomProvider = () => this.installedProviderLookup([
|
|
13
|
+
{ flag: 'isPhantom', value: true },
|
|
14
|
+
{ flag: 'isBraveWallet', value: false },
|
|
15
|
+
{ flag: 'isExodus', value: false },
|
|
16
|
+
]);
|
|
17
|
+
this.SolflareProvider = () => this.installedProviderLookup([{ flag: 'isSolflare', value: true }]);
|
|
18
|
+
this.BraveProvider = () => this.installedProviderLookup([
|
|
19
|
+
{ flag: 'isPhantom', value: true },
|
|
20
|
+
{ flag: 'isBraveWallet', value: true },
|
|
21
|
+
]);
|
|
22
|
+
this.ExodusProvider = () => this.installedProviderLookup([
|
|
23
|
+
{ flag: 'isPhantom', value: true },
|
|
24
|
+
{ flag: 'isExodus', value: true },
|
|
25
|
+
]);
|
|
26
|
+
this.providers = {
|
|
27
|
+
bravesol: this.BraveProvider,
|
|
28
|
+
coinbasesolana: this.CoinbaseProvider,
|
|
29
|
+
exodussol: this.ExodusProvider,
|
|
30
|
+
glow: this.GlowProvider,
|
|
31
|
+
phantom: this.PhantomProvider,
|
|
32
|
+
phantomledger: this.PhantomProvider,
|
|
33
|
+
solflare: this.SolflareProvider,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
installedProviderLookup(providerFlags) {
|
|
37
|
+
return (0, ProviderLookup_1.ProviderLookup)(this.allInstalledProviders(), providerFlags);
|
|
38
|
+
}
|
|
39
|
+
allInstalledProviders() {
|
|
40
|
+
return this.findSolanaProviders(window.solana).concat(this.findSolanaProviders(window.solflare), this.findSolanaProviders(window.glowSolana));
|
|
41
|
+
}
|
|
42
|
+
findSolanaProviders(solana) {
|
|
43
|
+
const solanaProviders = [];
|
|
44
|
+
if (solana && !solana.providers) {
|
|
45
|
+
solanaProviders.push(solana);
|
|
46
|
+
}
|
|
47
|
+
else if (solana && solana.providers) {
|
|
48
|
+
solana.providers.forEach((provider) => {
|
|
49
|
+
solanaProviders.push(provider);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return solanaProviders;
|
|
53
|
+
}
|
|
54
|
+
isInstalledHelper(walletName) {
|
|
55
|
+
return this.findProvider(walletName) !== undefined;
|
|
56
|
+
}
|
|
57
|
+
findProvider(walletName) {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
return (_b = (_a = this.providers)[(0, normalizeWalletName_1.normalizeWalletName)(walletName)]) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
60
|
+
}
|
|
61
|
+
fetchPublicAddressWithName(name) {
|
|
62
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
const provider = this.findProvider(name);
|
|
64
|
+
if (!provider) {
|
|
65
|
+
return Promise.resolve(undefined);
|
|
66
|
+
}
|
|
67
|
+
yield provider.connect();
|
|
68
|
+
const { publicKey } = provider;
|
|
69
|
+
return publicKey ? publicKey.toString() : Promise.resolve(undefined);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
connectWithName(name) {
|
|
73
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
const provider = this.findProvider(name);
|
|
75
|
+
if (!provider) {
|
|
76
|
+
return Promise.resolve(undefined);
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
yield provider.connect();
|
|
80
|
+
return provider;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
signMessageWithName(messageToSign, name) {
|
|
88
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
const walletAddress = yield this.fetchPublicAddressWithName(name);
|
|
90
|
+
if (!walletAddress) {
|
|
91
|
+
return Promise.resolve(undefined);
|
|
92
|
+
}
|
|
93
|
+
const provider = this.findProvider(name);
|
|
94
|
+
if (!provider) {
|
|
95
|
+
return Promise.resolve(undefined);
|
|
96
|
+
}
|
|
97
|
+
const encodedMessage = new TextEncoder().encode(messageToSign);
|
|
98
|
+
return provider.connect().then(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
const { signature } = (yield provider.signMessage(encodedMessage, 'utf8'));
|
|
100
|
+
return (0, convertors_1.bufferToBase64)(signature);
|
|
101
|
+
}));
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
_setupEventListeners(listeners, web3Provider) {
|
|
105
|
+
const handleAccountChange = (address) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
var _a, _b, _c;
|
|
107
|
+
if (!address) {
|
|
108
|
+
yield (web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.connect());
|
|
109
|
+
if ((_a = web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.publicKey) === null || _a === void 0 ? void 0 : _a.toString()) {
|
|
110
|
+
(_b = listeners.onAccountChange) === null || _b === void 0 ? void 0 : _b.call(listeners, [web3Provider.publicKey.toString()]);
|
|
111
|
+
}
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (address.toString()) {
|
|
115
|
+
yield ((_c = listeners.onAccountChange) === null || _c === void 0 ? void 0 : _c.call(listeners, [address.toString()]));
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
const handleDisconnect = () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
var _d;
|
|
120
|
+
yield ((_d = listeners.onDisconnect) === null || _d === void 0 ? void 0 : _d.call(listeners));
|
|
121
|
+
});
|
|
122
|
+
web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.on('accountChanged', handleAccountChange);
|
|
123
|
+
web3Provider === null || web3Provider === void 0 ? void 0 : web3Provider.on('disconnect', handleDisconnect);
|
|
124
|
+
return () => { };
|
|
125
|
+
}
|
|
126
|
+
_teardownEventListeners(name) {
|
|
127
|
+
const web3Provider = this.findProvider(name);
|
|
128
|
+
if (!web3Provider) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
web3Provider.removeAllListeners();
|
|
132
|
+
}
|
|
133
|
+
getConnectedAccountsWithName(name) {
|
|
134
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
135
|
+
const provider = this.findProvider(name);
|
|
136
|
+
if (!provider || !provider.publicKey) {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
return [provider.publicKey.toString()];
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.SolProviderHelper = SolProviderHelper;
|
|
144
|
+
//# sourceMappingURL=solProviderHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solProviderHelper.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/solana/solProviderHelper.ts"],"names":[],"mappings":"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"}
|