@meshconnect/web-link-sdk 3.0.11 → 3.1.0-rc.0
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/Link.js +173 -205
- package/package.json +6 -6
- package/utils/connectors/evm/chainConfigs.d.ts +2 -0
- package/utils/connectors/evm/chainConfigs.js +115 -0
- package/utils/connectors/evm/chainSwitching.d.ts +15 -0
- package/utils/connectors/evm/chainSwitching.js +242 -0
- package/utils/connectors/evm/index.d.ts +8 -0
- package/utils/connectors/evm/index.js +8 -0
- package/utils/connectors/evm/provider.d.ts +6 -0
- package/utils/connectors/evm/provider.js +13 -0
- package/utils/connectors/evm/signing.d.ts +1 -0
- package/utils/connectors/evm/signing.js +78 -0
- package/utils/connectors/evm/transactions.d.ts +9 -0
- package/utils/connectors/evm/transactions.js +201 -0
- package/utils/connectors/evm/types.d.ts +58 -0
- package/utils/connectors/evm/types.js +1 -0
- package/utils/connectors/evm/walletConnection.d.ts +20 -0
- package/utils/connectors/evm/walletConnection.js +161 -0
- package/utils/connectors/evm/walletDiscovery.d.ts +10 -0
- package/utils/connectors/evm/walletDiscovery.js +55 -0
- package/utils/connectors/solana/connection.d.ts +3 -0
- package/utils/connectors/solana/connection.js +94 -0
- package/utils/connectors/solana/index.d.ts +5 -0
- package/utils/connectors/solana/index.js +5 -0
- package/utils/connectors/solana/providerDiscovery.d.ts +3 -0
- package/utils/connectors/solana/providerDiscovery.js +75 -0
- package/utils/connectors/solana/signing.d.ts +1 -0
- package/utils/connectors/solana/signing.js +59 -0
- package/utils/connectors/solana/transaction.d.ts +2 -0
- package/utils/connectors/solana/transaction.js +158 -0
- package/utils/connectors/solana/types.d.ts +68 -0
- package/utils/connectors/solana/types.js +8 -0
- package/utils/event-types.d.ts +10 -2
- package/utils/event-types.js +2 -1
- package/utils/sdk-specs.d.ts +1 -0
- package/utils/sdk-specs.js +2 -1
- package/utils/types.d.ts +38 -29
- package/utils/version.d.ts +1 -1
- package/utils/version.js +1 -1
- package/utils/wallet/EVMWalletStrategy.d.ts +23 -0
- package/utils/wallet/EVMWalletStrategy.js +205 -0
- package/utils/wallet/SolanaWalletStrategy.d.ts +29 -0
- package/utils/wallet/SolanaWalletStrategy.js +194 -0
- package/utils/wallet/WalletStrategy.d.ts +45 -0
- package/utils/wallet/WalletStrategy.js +25 -0
- package/utils/wallet/WalletStrategyFactory.d.ts +15 -0
- package/utils/wallet/WalletStrategyFactory.js +31 -0
- package/utils/wallet/index.d.ts +4 -0
- package/utils/wallet/index.js +4 -0
- package/utils/wallet-browser-event-types.d.ts +16 -2
- package/utils/wagmiCoreConnectorsUtils.d.ts +0 -11
- package/utils/wagmiCoreConnectorsUtils.js +0 -396
@@ -0,0 +1,20 @@
|
|
1
|
+
import { EVMProvider, EVMConnectResult, EIP6963ProviderDetail } from './types';
|
2
|
+
declare global {
|
3
|
+
interface Window {
|
4
|
+
ethereum?: EVMProvider & {
|
5
|
+
providers?: EVMProvider[];
|
6
|
+
};
|
7
|
+
}
|
8
|
+
}
|
9
|
+
/**
|
10
|
+
* Gets an EVM provider for a specific wallet
|
11
|
+
*/
|
12
|
+
export declare const getEVMProvider: (walletName?: string, walletDetail?: EIP6963ProviderDetail) => EVMProvider;
|
13
|
+
/**
|
14
|
+
* Connects to an EVM wallet
|
15
|
+
*/
|
16
|
+
export declare const connectToEVMWallet: (walletName: string, targetChainId?: number, walletDetail?: EIP6963ProviderDetail) => Promise<EVMConnectResult | Error>;
|
17
|
+
/**
|
18
|
+
* Disconnects from an EVM wallet
|
19
|
+
*/
|
20
|
+
export declare const disconnectFromEVMWallet: (walletName: string) => Promise<void | Error>;
|
@@ -0,0 +1,161 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
14
|
+
function step(op) {
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
19
|
+
switch (op[0]) {
|
20
|
+
case 0: case 1: t = op; break;
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
24
|
+
default:
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
29
|
+
if (t[2]) _.ops.pop();
|
30
|
+
_.trys.pop(); continue;
|
31
|
+
}
|
32
|
+
op = body.call(thisArg, _);
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
35
|
+
}
|
36
|
+
};
|
37
|
+
import { ethers } from 'ethers';
|
38
|
+
import { setActiveEVMProvider, getActiveRawProvider, clearActiveProviders } from './provider';
|
39
|
+
import { switchEVMChain } from './chainSwitching';
|
40
|
+
import { initializeWalletDiscovery, findAvailableProviders } from './walletDiscovery';
|
41
|
+
initializeWalletDiscovery();
|
42
|
+
/**
|
43
|
+
* Gets an EVM provider for a specific wallet
|
44
|
+
*/
|
45
|
+
export var getEVMProvider = function (walletName, walletDetail) {
|
46
|
+
if (walletDetail === null || walletDetail === void 0 ? void 0 : walletDetail.provider) {
|
47
|
+
return walletDetail.provider;
|
48
|
+
}
|
49
|
+
if (!walletName) {
|
50
|
+
throw new Error('Wallet name is required');
|
51
|
+
}
|
52
|
+
var providers = findAvailableProviders();
|
53
|
+
var matchingProvider = providers.find(function (p) { return p.name.toLowerCase() === walletName.toLowerCase(); });
|
54
|
+
if (matchingProvider) {
|
55
|
+
return matchingProvider.injectedData.provider;
|
56
|
+
}
|
57
|
+
if (window.ethereum) {
|
58
|
+
return window.ethereum;
|
59
|
+
}
|
60
|
+
throw new Error("No provider found for wallet ".concat(walletName, ". Please make sure the wallet is installed and enabled."));
|
61
|
+
};
|
62
|
+
/**
|
63
|
+
* Connects to an EVM wallet
|
64
|
+
*/
|
65
|
+
export var connectToEVMWallet = function (walletName, targetChainId, walletDetail) { return __awaiter(void 0, void 0, void 0, function () {
|
66
|
+
var provider, browserProvider, existingAccounts, signer, address, chainId, switchResult, error_1;
|
67
|
+
return __generator(this, function (_a) {
|
68
|
+
switch (_a.label) {
|
69
|
+
case 0:
|
70
|
+
_a.trys.push([0, 9, , 10]);
|
71
|
+
provider = void 0;
|
72
|
+
try {
|
73
|
+
provider = getEVMProvider(walletName, walletDetail);
|
74
|
+
}
|
75
|
+
catch (error) {
|
76
|
+
throw new Error("No provider found for wallet ".concat(walletName));
|
77
|
+
}
|
78
|
+
browserProvider = new ethers.BrowserProvider(provider);
|
79
|
+
setActiveEVMProvider(browserProvider, provider);
|
80
|
+
setupEventListeners(provider);
|
81
|
+
return [4 /*yield*/, provider.request({ method: 'eth_accounts' })];
|
82
|
+
case 1:
|
83
|
+
existingAccounts = _a.sent();
|
84
|
+
if (!(!existingAccounts || existingAccounts.length === 0)) return [3 /*break*/, 3];
|
85
|
+
return [4 /*yield*/, browserProvider.send('eth_requestAccounts', [])];
|
86
|
+
case 2:
|
87
|
+
_a.sent();
|
88
|
+
_a.label = 3;
|
89
|
+
case 3: return [4 /*yield*/, browserProvider.getSigner()];
|
90
|
+
case 4:
|
91
|
+
signer = _a.sent();
|
92
|
+
return [4 /*yield*/, signer.getAddress()];
|
93
|
+
case 5:
|
94
|
+
address = _a.sent();
|
95
|
+
return [4 /*yield*/, browserProvider
|
96
|
+
.getNetwork()
|
97
|
+
.then(function (network) { return Number(network.chainId); })];
|
98
|
+
case 6:
|
99
|
+
chainId = _a.sent();
|
100
|
+
if (!(targetChainId && chainId !== targetChainId)) return [3 /*break*/, 8];
|
101
|
+
return [4 /*yield*/, switchEVMChain(targetChainId, provider)];
|
102
|
+
case 7:
|
103
|
+
switchResult = _a.sent();
|
104
|
+
if (switchResult instanceof Error) {
|
105
|
+
throw switchResult;
|
106
|
+
}
|
107
|
+
chainId = switchResult.chainId;
|
108
|
+
_a.label = 8;
|
109
|
+
case 8: return [2 /*return*/, {
|
110
|
+
accounts: [address],
|
111
|
+
chainId: chainId,
|
112
|
+
isConnected: true
|
113
|
+
}];
|
114
|
+
case 9:
|
115
|
+
error_1 = _a.sent();
|
116
|
+
console.error('EVM wallet connection error:', error_1);
|
117
|
+
return [2 /*return*/, error_1 instanceof Error
|
118
|
+
? error_1
|
119
|
+
: new Error("Failed to connect to ".concat(walletName, " wallet"))];
|
120
|
+
case 10: return [2 /*return*/];
|
121
|
+
}
|
122
|
+
});
|
123
|
+
}); };
|
124
|
+
/**
|
125
|
+
* Sets up event listeners for the provider
|
126
|
+
*/
|
127
|
+
var setupEventListeners = function (provider) {
|
128
|
+
var handleAccountsChanged = function (accounts) {
|
129
|
+
console.log('Accounts changed:', accounts);
|
130
|
+
};
|
131
|
+
var handleChainChanged = function (chainId) {
|
132
|
+
console.log('Chain changed:', parseInt(chainId, 16));
|
133
|
+
};
|
134
|
+
provider.on('accountsChanged', handleAccountsChanged);
|
135
|
+
provider.on('chainChanged', handleChainChanged);
|
136
|
+
};
|
137
|
+
/**
|
138
|
+
* Disconnects from an EVM wallet
|
139
|
+
*/
|
140
|
+
export var disconnectFromEVMWallet = function (walletName) { return __awaiter(void 0, void 0, void 0, function () {
|
141
|
+
var provider;
|
142
|
+
return __generator(this, function (_a) {
|
143
|
+
try {
|
144
|
+
provider = getActiveRawProvider();
|
145
|
+
if (!provider) {
|
146
|
+
return [2 /*return*/];
|
147
|
+
}
|
148
|
+
if (provider.removeAllListeners) {
|
149
|
+
provider.removeAllListeners();
|
150
|
+
}
|
151
|
+
clearActiveProviders();
|
152
|
+
}
|
153
|
+
catch (error) {
|
154
|
+
console.error('EVM wallet disconnection error:', error);
|
155
|
+
return [2 /*return*/, error instanceof Error
|
156
|
+
? error
|
157
|
+
: new Error("Failed to disconnect from ".concat(walletName, " wallet"))];
|
158
|
+
}
|
159
|
+
return [2 /*return*/];
|
160
|
+
});
|
161
|
+
}); };
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { InjectedProviderInfo } from './types';
|
2
|
+
/**
|
3
|
+
* Initializes EIP-6963 wallet discovery protocol
|
4
|
+
* @returns Cleanup function for event listeners
|
5
|
+
*/
|
6
|
+
export declare const initializeWalletDiscovery: () => (() => void);
|
7
|
+
/**
|
8
|
+
* Finds all available EVM providers using EIP-6963
|
9
|
+
*/
|
10
|
+
export declare const findAvailableProviders: () => InjectedProviderInfo[];
|
@@ -0,0 +1,55 @@
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
2
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
3
|
+
if (ar || !(i in from)) {
|
4
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
5
|
+
ar[i] = from[i];
|
6
|
+
}
|
7
|
+
}
|
8
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
9
|
+
};
|
10
|
+
var discoveredWallets = [];
|
11
|
+
/**
|
12
|
+
* Initializes EIP-6963 wallet discovery protocol
|
13
|
+
* @returns Cleanup function for event listeners
|
14
|
+
*/
|
15
|
+
export var initializeWalletDiscovery = function () {
|
16
|
+
var handleAnnouncement = function (event) {
|
17
|
+
var providerDetail = event.detail;
|
18
|
+
discoveredWallets = __spreadArray(__spreadArray([], discoveredWallets, true), [providerDetail], false);
|
19
|
+
};
|
20
|
+
window.addEventListener('eip6963:announceProvider', handleAnnouncement);
|
21
|
+
window.dispatchEvent(new Event('eip6963:requestProvider'));
|
22
|
+
return function () {
|
23
|
+
window.removeEventListener('eip6963:announceProvider', handleAnnouncement);
|
24
|
+
};
|
25
|
+
};
|
26
|
+
/**
|
27
|
+
* Finds all available EVM providers using EIP-6963
|
28
|
+
*/
|
29
|
+
export var findAvailableProviders = function () {
|
30
|
+
var providers = [];
|
31
|
+
// Initialize wallet discovery if not already done
|
32
|
+
if (discoveredWallets.length === 0) {
|
33
|
+
initializeWalletDiscovery();
|
34
|
+
}
|
35
|
+
// Add EIP-6963 discovered wallets
|
36
|
+
discoveredWallets.forEach(function (wallet) {
|
37
|
+
var injectedData = {
|
38
|
+
provider: wallet.provider
|
39
|
+
};
|
40
|
+
// Copy all boolean properties that start with 'is'
|
41
|
+
for (var key in wallet.provider) {
|
42
|
+
var provider = wallet.provider;
|
43
|
+
if (key.startsWith('is') && typeof provider[key] === 'boolean') {
|
44
|
+
injectedData[key] = provider[key];
|
45
|
+
}
|
46
|
+
}
|
47
|
+
providers.push({
|
48
|
+
name: wallet.info.name,
|
49
|
+
id: wallet.info.uuid,
|
50
|
+
icon: wallet.info.icon,
|
51
|
+
injectedData: injectedData
|
52
|
+
});
|
53
|
+
});
|
54
|
+
return providers;
|
55
|
+
};
|
@@ -0,0 +1,94 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
14
|
+
function step(op) {
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
19
|
+
switch (op[0]) {
|
20
|
+
case 0: case 1: t = op; break;
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
24
|
+
default:
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
29
|
+
if (t[2]) _.ops.pop();
|
30
|
+
_.trys.pop(); continue;
|
31
|
+
}
|
32
|
+
op = body.call(thisArg, _);
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
35
|
+
}
|
36
|
+
};
|
37
|
+
import { getSolanaProvider } from './providerDiscovery';
|
38
|
+
export var connectToSolanaWallet = function (walletName) { return __awaiter(void 0, void 0, void 0, function () {
|
39
|
+
var provider_1, response, error_1;
|
40
|
+
return __generator(this, function (_a) {
|
41
|
+
switch (_a.label) {
|
42
|
+
case 0:
|
43
|
+
_a.trys.push([0, 2, , 3]);
|
44
|
+
provider_1 = getSolanaProvider(walletName);
|
45
|
+
if (provider_1.publicKey && provider_1.isConnected) {
|
46
|
+
return [2 /*return*/, {
|
47
|
+
accounts: [provider_1.publicKey.toString()],
|
48
|
+
chainId: '101',
|
49
|
+
isConnected: true
|
50
|
+
}];
|
51
|
+
}
|
52
|
+
return [4 /*yield*/, provider_1.connect({ onlyIfTrusted: true }).catch(function () {
|
53
|
+
// If eager connect fails, try regular connect
|
54
|
+
return provider_1.connect();
|
55
|
+
})];
|
56
|
+
case 1:
|
57
|
+
response = _a.sent();
|
58
|
+
if (!(response === null || response === void 0 ? void 0 : response.publicKey)) {
|
59
|
+
throw new Error("".concat(walletName, " connection failed - no public key returned"));
|
60
|
+
}
|
61
|
+
return [2 /*return*/, {
|
62
|
+
accounts: [response.publicKey.toString()],
|
63
|
+
chainId: '101',
|
64
|
+
isConnected: true
|
65
|
+
}];
|
66
|
+
case 2:
|
67
|
+
error_1 = _a.sent();
|
68
|
+
return [2 /*return*/, error_1 instanceof Error
|
69
|
+
? error_1
|
70
|
+
: new Error("Failed to connect to ".concat(walletName, " wallet"))];
|
71
|
+
case 3: return [2 /*return*/];
|
72
|
+
}
|
73
|
+
});
|
74
|
+
}); };
|
75
|
+
export var disconnectFromSolanaWallet = function (walletName) { return __awaiter(void 0, void 0, void 0, function () {
|
76
|
+
var provider, error_2;
|
77
|
+
return __generator(this, function (_a) {
|
78
|
+
switch (_a.label) {
|
79
|
+
case 0:
|
80
|
+
_a.trys.push([0, 2, , 3]);
|
81
|
+
provider = getSolanaProvider(walletName);
|
82
|
+
return [4 /*yield*/, provider.disconnect()];
|
83
|
+
case 1:
|
84
|
+
_a.sent();
|
85
|
+
return [3 /*break*/, 3];
|
86
|
+
case 2:
|
87
|
+
error_2 = _a.sent();
|
88
|
+
return [2 /*return*/, error_2 instanceof Error
|
89
|
+
? error_2
|
90
|
+
: new Error("Failed to disconnect from ".concat(walletName, " wallet"))];
|
91
|
+
case 3: return [2 /*return*/];
|
92
|
+
}
|
93
|
+
});
|
94
|
+
}); };
|
@@ -0,0 +1,75 @@
|
|
1
|
+
import { SolanaWalletType } from './types';
|
2
|
+
var identifyWalletType = function (provider) {
|
3
|
+
if (provider.isPhantom)
|
4
|
+
return SolanaWalletType.PHANTOM;
|
5
|
+
if (provider.isSolflare)
|
6
|
+
return SolanaWalletType.SOLFLARE;
|
7
|
+
if (provider.isTrust || provider.isTrustWallet)
|
8
|
+
return SolanaWalletType.TRUST;
|
9
|
+
if (provider.isExodus)
|
10
|
+
return SolanaWalletType.EXODUS;
|
11
|
+
return SolanaWalletType.UNKNOWN;
|
12
|
+
};
|
13
|
+
var getProviderByType = function (type) {
|
14
|
+
var _a, _b, _c, _d;
|
15
|
+
// First try to get the provider directly using the wallet name
|
16
|
+
var dynamicProvider = (_a = window[type]) === null || _a === void 0 ? void 0 : _a.solana;
|
17
|
+
if (dynamicProvider) {
|
18
|
+
return dynamicProvider;
|
19
|
+
}
|
20
|
+
// Then check known provider locations
|
21
|
+
switch (type) {
|
22
|
+
case SolanaWalletType.PHANTOM:
|
23
|
+
return (_b = window.phantom) === null || _b === void 0 ? void 0 : _b.solana;
|
24
|
+
case SolanaWalletType.SOLFLARE:
|
25
|
+
return window.solflare;
|
26
|
+
case SolanaWalletType.TRUST:
|
27
|
+
return (_c = window.trustwallet) === null || _c === void 0 ? void 0 : _c.solana;
|
28
|
+
case SolanaWalletType.EXODUS:
|
29
|
+
return (_d = window.exodus) === null || _d === void 0 ? void 0 : _d.solana;
|
30
|
+
case SolanaWalletType.UNKNOWN:
|
31
|
+
return window.solana;
|
32
|
+
}
|
33
|
+
};
|
34
|
+
export var findAvailableSolanaProviders = function () {
|
35
|
+
var providers = {};
|
36
|
+
// Check all known wallet types
|
37
|
+
Object.values(SolanaWalletType).forEach(function (type) {
|
38
|
+
if (getProviderByType(type)) {
|
39
|
+
providers[type] = true;
|
40
|
+
}
|
41
|
+
});
|
42
|
+
// Also check window.solana if not already found
|
43
|
+
if (window.solana && !Object.keys(providers).length) {
|
44
|
+
var walletType = identifyWalletType(window.solana);
|
45
|
+
providers[walletType] = true;
|
46
|
+
}
|
47
|
+
return providers;
|
48
|
+
};
|
49
|
+
export var getSolanaProvider = function (walletName) {
|
50
|
+
var _a;
|
51
|
+
var normalizedName = walletName
|
52
|
+
.toLowerCase()
|
53
|
+
.replace(/\s+/g, '');
|
54
|
+
var availableProviders = findAvailableSolanaProviders();
|
55
|
+
// First check if the requested wallet is available
|
56
|
+
if (availableProviders[normalizedName]) {
|
57
|
+
var provider = getProviderByType(normalizedName);
|
58
|
+
if (provider)
|
59
|
+
return provider;
|
60
|
+
}
|
61
|
+
// If not found and it's a dynamic provider, try direct access
|
62
|
+
var dynamicProvider = (_a = window[normalizedName]) === null || _a === void 0 ? void 0 : _a.solana;
|
63
|
+
if (dynamicProvider) {
|
64
|
+
return dynamicProvider;
|
65
|
+
}
|
66
|
+
// If still not found, check window.solana as last resort
|
67
|
+
if (window.solana) {
|
68
|
+
var detectedType = identifyWalletType(window.solana);
|
69
|
+
if (detectedType === normalizedName ||
|
70
|
+
normalizedName === SolanaWalletType.UNKNOWN) {
|
71
|
+
return window.solana;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
throw new Error("Provider not found for wallet: ".concat(walletName));
|
75
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const signSolanaMessage: (walletName: string, message: string) => Promise<string | Error>;
|
@@ -0,0 +1,59 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
14
|
+
function step(op) {
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
19
|
+
switch (op[0]) {
|
20
|
+
case 0: case 1: t = op; break;
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
24
|
+
default:
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
29
|
+
if (t[2]) _.ops.pop();
|
30
|
+
_.trys.pop(); continue;
|
31
|
+
}
|
32
|
+
op = body.call(thisArg, _);
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
35
|
+
}
|
36
|
+
};
|
37
|
+
import bs58 from 'bs58';
|
38
|
+
import { getSolanaProvider } from './providerDiscovery';
|
39
|
+
export var signSolanaMessage = function (walletName, message) { return __awaiter(void 0, void 0, void 0, function () {
|
40
|
+
var provider, messageBytes, signedMessage, error_1;
|
41
|
+
return __generator(this, function (_a) {
|
42
|
+
switch (_a.label) {
|
43
|
+
case 0:
|
44
|
+
_a.trys.push([0, 2, , 3]);
|
45
|
+
provider = getSolanaProvider(walletName);
|
46
|
+
messageBytes = new TextEncoder().encode(message);
|
47
|
+
return [4 /*yield*/, provider.signMessage(messageBytes)];
|
48
|
+
case 1:
|
49
|
+
signedMessage = _a.sent();
|
50
|
+
return [2 /*return*/, bs58.encode(signedMessage.signature)];
|
51
|
+
case 2:
|
52
|
+
error_1 = _a.sent();
|
53
|
+
return [2 /*return*/, error_1 instanceof Error
|
54
|
+
? error_1
|
55
|
+
: new Error("Failed to sign message with ".concat(walletName, " wallet"))];
|
56
|
+
case 3: return [2 /*return*/];
|
57
|
+
}
|
58
|
+
});
|
59
|
+
}); };
|