@meshconnect/web-link-sdk 3.2.14 → 3.2.15
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/jest.setup.ts +4 -0
- package/package.json +20 -8
- package/src/Link.test.ts +434 -0
- package/src/Link.ts +491 -0
- package/src/index.ts +3 -0
- package/src/utils/__snapshots__/popup.test.ts.snap +89 -0
- package/src/utils/connectors/evm/chainConfigs.ts +120 -0
- package/src/utils/connectors/evm/chainSwitching.ts +165 -0
- package/src/utils/connectors/evm/index.ts +8 -0
- package/src/utils/connectors/evm/provider.ts +22 -0
- package/src/utils/connectors/evm/signing.ts +39 -0
- package/src/utils/connectors/evm/transactions.ts +356 -0
- package/src/utils/connectors/evm/types.ts +63 -0
- package/src/utils/connectors/evm/walletConnection.ts +140 -0
- package/src/utils/connectors/evm/walletDiscovery.ts +67 -0
- package/src/utils/connectors/solana/connection.ts +69 -0
- package/src/utils/connectors/solana/index.ts +5 -0
- package/src/utils/connectors/solana/providerDiscovery.ts +153 -0
- package/src/utils/connectors/solana/signing.ts +18 -0
- package/src/utils/connectors/solana/transaction.ts +382 -0
- package/src/utils/connectors/solana/types.ts +66 -0
- package/{utils/event-types.js → src/utils/event-types.test.ts} +15 -5
- package/src/utils/event-types.ts +350 -0
- package/src/utils/popup.test.ts +50 -0
- package/src/utils/popup.ts +123 -0
- package/src/utils/sdk-specs.test.ts +18 -0
- package/src/utils/sdk-specs.ts +7 -0
- package/src/utils/style.test.ts +33 -0
- package/src/utils/style.ts +15 -0
- package/src/utils/types.ts +270 -0
- package/src/utils/version.ts +1 -0
- package/src/utils/wallet/EVMWalletStrategy.ts +176 -0
- package/src/utils/wallet/SolanaWalletStrategy.ts +207 -0
- package/src/utils/wallet/WalletStrategy.ts +99 -0
- package/src/utils/wallet/WalletStrategyFactory.ts +46 -0
- package/src/utils/wallet/__tests__/EVMWalletStrategy.test.ts +233 -0
- package/src/utils/wallet/__tests__/SolanaWalletStrategy.test.ts +253 -0
- package/src/utils/wallet/__tests__/WalletStrategy.test.ts +77 -0
- package/src/utils/wallet/__tests__/WalletStrategyFactory.test.ts +65 -0
- package/src/utils/wallet/index.ts +4 -0
- package/src/utils/wallet-browser-event-types.ts +190 -0
- package/tools/copy.js +26 -0
- package/tools/update-version.js +10 -0
- package/tsconfig.json +14 -0
- package/Link.d.ts +0 -2
- package/Link.js +0 -530
- package/index.d.ts +0 -3
- package/index.js +0 -3
- package/utils/connectors/evm/chainConfigs.d.ts +0 -2
- package/utils/connectors/evm/chainConfigs.js +0 -115
- package/utils/connectors/evm/chainSwitching.d.ts +0 -15
- package/utils/connectors/evm/chainSwitching.js +0 -242
- package/utils/connectors/evm/index.d.ts +0 -8
- package/utils/connectors/evm/index.js +0 -8
- package/utils/connectors/evm/provider.d.ts +0 -6
- package/utils/connectors/evm/provider.js +0 -13
- package/utils/connectors/evm/signing.d.ts +0 -1
- package/utils/connectors/evm/signing.js +0 -78
- package/utils/connectors/evm/transactions.d.ts +0 -28
- package/utils/connectors/evm/transactions.js +0 -381
- package/utils/connectors/evm/types.d.ts +0 -57
- package/utils/connectors/evm/types.js +0 -1
- package/utils/connectors/evm/walletConnection.d.ts +0 -20
- package/utils/connectors/evm/walletConnection.js +0 -160
- package/utils/connectors/evm/walletDiscovery.d.ts +0 -10
- package/utils/connectors/evm/walletDiscovery.js +0 -55
- package/utils/connectors/solana/connection.d.ts +0 -4
- package/utils/connectors/solana/connection.js +0 -108
- package/utils/connectors/solana/index.d.ts +0 -5
- package/utils/connectors/solana/index.js +0 -5
- package/utils/connectors/solana/providerDiscovery.d.ts +0 -3
- package/utils/connectors/solana/providerDiscovery.js +0 -127
- package/utils/connectors/solana/signing.d.ts +0 -1
- package/utils/connectors/solana/signing.js +0 -59
- package/utils/connectors/solana/transaction.d.ts +0 -17
- package/utils/connectors/solana/transaction.js +0 -362
- package/utils/connectors/solana/types.d.ts +0 -71
- package/utils/connectors/solana/types.js +0 -8
- package/utils/event-types.d.ts +0 -233
- package/utils/popup.d.ts +0 -3
- package/utils/popup.js +0 -36
- package/utils/sdk-specs.d.ts +0 -5
- package/utils/sdk-specs.js +0 -6
- package/utils/style.d.ts +0 -3
- package/utils/style.js +0 -13
- package/utils/types.d.ts +0 -234
- package/utils/types.js +0 -1
- package/utils/version.d.ts +0 -1
- package/utils/version.js +0 -1
- package/utils/wallet/EVMWalletStrategy.d.ts +0 -31
- package/utils/wallet/EVMWalletStrategy.js +0 -265
- package/utils/wallet/SolanaWalletStrategy.d.ts +0 -33
- package/utils/wallet/SolanaWalletStrategy.js +0 -293
- package/utils/wallet/WalletStrategy.d.ts +0 -61
- package/utils/wallet/WalletStrategy.js +0 -25
- package/utils/wallet/WalletStrategyFactory.d.ts +0 -15
- package/utils/wallet/WalletStrategyFactory.js +0 -31
- package/utils/wallet/index.d.ts +0 -4
- package/utils/wallet/index.js +0 -4
- package/utils/wallet-browser-event-types.d.ts +0 -116
- package/utils/wallet-browser-event-types.js +0 -17
@@ -1,381 +0,0 @@
|
|
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 { getActiveRawProvider } from './provider';
|
39
|
-
var isUserRejection = function (error) {
|
40
|
-
var _a;
|
41
|
-
if (!error)
|
42
|
-
return false;
|
43
|
-
// Check for various wallet rejection patterns
|
44
|
-
var message = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || '';
|
45
|
-
return (error.code === 4001 || // Standard EIP-1193 user rejection code
|
46
|
-
message.includes('user rejected') ||
|
47
|
-
message.includes('user denied') ||
|
48
|
-
message.includes('user cancelled') ||
|
49
|
-
message.includes('declined'));
|
50
|
-
};
|
51
|
-
/**
|
52
|
-
* Sends a native EVM transaction
|
53
|
-
*/
|
54
|
-
export var sendEVMTransaction = function (toAddress, amount, fromAddress, gasLimit, maxFeePerGas, maxPriorityFeePerGas) { return __awaiter(void 0, void 0, void 0, function () {
|
55
|
-
var activeRawProvider, chainIdHex, chainId, provider, signer, network, tx, receipt, txError_1, error_1;
|
56
|
-
return __generator(this, function (_a) {
|
57
|
-
switch (_a.label) {
|
58
|
-
case 0:
|
59
|
-
_a.trys.push([0, 9, , 10]);
|
60
|
-
activeRawProvider = getActiveRawProvider();
|
61
|
-
if (!activeRawProvider) {
|
62
|
-
throw new Error('No active EVM provider');
|
63
|
-
}
|
64
|
-
return [4 /*yield*/, activeRawProvider.request({
|
65
|
-
method: 'eth_chainId'
|
66
|
-
})];
|
67
|
-
case 1:
|
68
|
-
chainIdHex = _a.sent();
|
69
|
-
chainId = parseInt(chainIdHex, 16);
|
70
|
-
provider = new ethers.BrowserProvider(activeRawProvider);
|
71
|
-
return [4 /*yield*/, provider.getSigner(fromAddress)
|
72
|
-
// Verify we're still on the same network before proceeding
|
73
|
-
];
|
74
|
-
case 2:
|
75
|
-
signer = _a.sent();
|
76
|
-
return [4 /*yield*/, provider.getNetwork()];
|
77
|
-
case 3:
|
78
|
-
network = _a.sent();
|
79
|
-
if (Number(network.chainId) !== chainId) {
|
80
|
-
throw new Error('Network changed during transaction setup');
|
81
|
-
}
|
82
|
-
_a.label = 4;
|
83
|
-
case 4:
|
84
|
-
_a.trys.push([4, 7, , 8]);
|
85
|
-
return [4 /*yield*/, signer.sendTransaction({
|
86
|
-
to: toAddress,
|
87
|
-
value: amount,
|
88
|
-
gasLimit: gasLimit ? BigInt(Math.floor(gasLimit)) : undefined,
|
89
|
-
maxFeePerGas: maxFeePerGas
|
90
|
-
? BigInt(Math.floor(maxFeePerGas))
|
91
|
-
: undefined,
|
92
|
-
maxPriorityFeePerGas: maxPriorityFeePerGas
|
93
|
-
? BigInt(Math.floor(maxPriorityFeePerGas))
|
94
|
-
: undefined
|
95
|
-
})];
|
96
|
-
case 5:
|
97
|
-
tx = _a.sent();
|
98
|
-
return [4 /*yield*/, tx.wait()];
|
99
|
-
case 6:
|
100
|
-
receipt = _a.sent();
|
101
|
-
return [2 /*return*/, receipt ? receipt.hash : ''];
|
102
|
-
case 7:
|
103
|
-
txError_1 = _a.sent();
|
104
|
-
if (isUserRejection(txError_1)) {
|
105
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
106
|
-
}
|
107
|
-
throw txError_1;
|
108
|
-
case 8: return [3 /*break*/, 10];
|
109
|
-
case 9:
|
110
|
-
error_1 = _a.sent();
|
111
|
-
console.error('Transaction error:', error_1);
|
112
|
-
if (isUserRejection(error_1)) {
|
113
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
114
|
-
}
|
115
|
-
if (error_1.code === 'NETWORK_ERROR') {
|
116
|
-
return [2 /*return*/, new Error('Network changed during transaction. Please try again.')];
|
117
|
-
}
|
118
|
-
return [2 /*return*/, error_1 instanceof Error
|
119
|
-
? error_1
|
120
|
-
: new Error('Failed to send transaction')];
|
121
|
-
case 10: return [2 /*return*/];
|
122
|
-
}
|
123
|
-
});
|
124
|
-
}); };
|
125
|
-
/**
|
126
|
-
* Sends an EVM token transaction
|
127
|
-
*/
|
128
|
-
export var sendEVMTokenTransaction = function (contractAddress, abi, functionName, args, fromAddress) { return __awaiter(void 0, void 0, void 0, function () {
|
129
|
-
var activeRawProvider, chainIdHex, chainId, provider, signer, network, contract, txOptions, gasLimit, maxFeePerGas, maxPriorityFeePerGas, tx, receipt, txError_2, error_2;
|
130
|
-
return __generator(this, function (_a) {
|
131
|
-
switch (_a.label) {
|
132
|
-
case 0:
|
133
|
-
_a.trys.push([0, 9, , 10]);
|
134
|
-
activeRawProvider = getActiveRawProvider();
|
135
|
-
if (!activeRawProvider) {
|
136
|
-
throw new Error('No active EVM provider');
|
137
|
-
}
|
138
|
-
return [4 /*yield*/, activeRawProvider.request({
|
139
|
-
method: 'eth_chainId'
|
140
|
-
})];
|
141
|
-
case 1:
|
142
|
-
chainIdHex = _a.sent();
|
143
|
-
chainId = parseInt(chainIdHex, 16);
|
144
|
-
provider = new ethers.BrowserProvider(activeRawProvider);
|
145
|
-
return [4 /*yield*/, provider.getSigner(fromAddress)
|
146
|
-
// Verify we're still on the same network before proceeding
|
147
|
-
];
|
148
|
-
case 2:
|
149
|
-
signer = _a.sent();
|
150
|
-
return [4 /*yield*/, provider.getNetwork()];
|
151
|
-
case 3:
|
152
|
-
network = _a.sent();
|
153
|
-
if (Number(network.chainId) !== chainId) {
|
154
|
-
throw new Error('Network changed during transaction setup');
|
155
|
-
}
|
156
|
-
contract = new ethers.Contract(contractAddress, abi, signer);
|
157
|
-
txOptions = {};
|
158
|
-
gasLimit = (args === null || args === void 0 ? void 0 : args[2]) !== undefined ? toSafeNumber(args[2], 'gasLimit') : undefined;
|
159
|
-
maxFeePerGas = (args === null || args === void 0 ? void 0 : args[3]) !== undefined
|
160
|
-
? toSafeNumber(args[3], 'maxFeePerGas')
|
161
|
-
: undefined;
|
162
|
-
maxPriorityFeePerGas = (args === null || args === void 0 ? void 0 : args[4]) !== undefined
|
163
|
-
? toSafeNumber(args[4], 'maxPriorityFeePerGas')
|
164
|
-
: undefined;
|
165
|
-
txOptions.gasLimit = gasLimit ? BigInt(Math.floor(gasLimit)) : undefined;
|
166
|
-
txOptions.maxFeePerGas = maxFeePerGas
|
167
|
-
? BigInt(Math.floor(maxFeePerGas))
|
168
|
-
: undefined;
|
169
|
-
txOptions.maxPriorityFeePerGas = maxPriorityFeePerGas
|
170
|
-
? BigInt(Math.floor(maxPriorityFeePerGas))
|
171
|
-
: undefined;
|
172
|
-
_a.label = 4;
|
173
|
-
case 4:
|
174
|
-
_a.trys.push([4, 7, , 8]);
|
175
|
-
return [4 /*yield*/, contract[functionName](args[0], args[1], txOptions)
|
176
|
-
// Wait for transaction confirmation
|
177
|
-
];
|
178
|
-
case 5:
|
179
|
-
tx = _a.sent();
|
180
|
-
return [4 /*yield*/, tx.wait()];
|
181
|
-
case 6:
|
182
|
-
receipt = _a.sent();
|
183
|
-
return [2 /*return*/, receipt ? receipt.hash : ''];
|
184
|
-
case 7:
|
185
|
-
txError_2 = _a.sent();
|
186
|
-
if (isUserRejection(txError_2)) {
|
187
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
188
|
-
}
|
189
|
-
throw txError_2;
|
190
|
-
case 8: return [3 /*break*/, 10];
|
191
|
-
case 9:
|
192
|
-
error_2 = _a.sent();
|
193
|
-
console.error('Token transaction error:', error_2);
|
194
|
-
if (isUserRejection(error_2)) {
|
195
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
196
|
-
}
|
197
|
-
if (error_2.code === 'NETWORK_ERROR') {
|
198
|
-
return [2 /*return*/, new Error('Network changed during transaction. Please try again.')];
|
199
|
-
}
|
200
|
-
return [2 /*return*/, error_2 instanceof Error
|
201
|
-
? error_2
|
202
|
-
: new Error('Failed to send token transaction')];
|
203
|
-
case 10: return [2 /*return*/];
|
204
|
-
}
|
205
|
-
});
|
206
|
-
}); };
|
207
|
-
/**
|
208
|
-
* Sends an native smart contract transaction
|
209
|
-
*/
|
210
|
-
export var sendNativeSmartContractTransaction = function (contractAddress, abi, functionName, args, fromAddress, value) { return __awaiter(void 0, void 0, void 0, function () {
|
211
|
-
var activeRawProvider, chainIdHex, chainId, provider, signer, network, contract, txOptions, gasLimit, maxFeePerGas, maxPriorityFeePerGas, tx, receipt, txError_3, error_3;
|
212
|
-
return __generator(this, function (_a) {
|
213
|
-
switch (_a.label) {
|
214
|
-
case 0:
|
215
|
-
_a.trys.push([0, 9, , 10]);
|
216
|
-
activeRawProvider = getActiveRawProvider();
|
217
|
-
if (!activeRawProvider) {
|
218
|
-
throw new Error('No active EVM provider');
|
219
|
-
}
|
220
|
-
return [4 /*yield*/, activeRawProvider.request({
|
221
|
-
method: 'eth_chainId'
|
222
|
-
})];
|
223
|
-
case 1:
|
224
|
-
chainIdHex = _a.sent();
|
225
|
-
chainId = parseInt(chainIdHex, 16);
|
226
|
-
provider = new ethers.BrowserProvider(activeRawProvider);
|
227
|
-
return [4 /*yield*/, provider.getSigner(fromAddress)
|
228
|
-
// Verify we're still on the same network before proceeding
|
229
|
-
];
|
230
|
-
case 2:
|
231
|
-
signer = _a.sent();
|
232
|
-
return [4 /*yield*/, provider.getNetwork()];
|
233
|
-
case 3:
|
234
|
-
network = _a.sent();
|
235
|
-
if (Number(network.chainId) !== chainId) {
|
236
|
-
throw new Error('Network changed during transaction setup');
|
237
|
-
}
|
238
|
-
contract = new ethers.Contract(contractAddress, abi, signer);
|
239
|
-
txOptions = {};
|
240
|
-
gasLimit = (args === null || args === void 0 ? void 0 : args[1]) !== undefined ? toSafeNumber(args[1], 'gasLimit') : undefined;
|
241
|
-
maxFeePerGas = (args === null || args === void 0 ? void 0 : args[2]) !== undefined
|
242
|
-
? toSafeNumber(args[2], 'maxFeePerGas')
|
243
|
-
: undefined;
|
244
|
-
maxPriorityFeePerGas = (args === null || args === void 0 ? void 0 : args[3]) !== undefined
|
245
|
-
? toSafeNumber(args[3], 'maxPriorityFeePerGas')
|
246
|
-
: undefined;
|
247
|
-
txOptions.gasLimit = gasLimit ? BigInt(Math.floor(gasLimit)) : undefined;
|
248
|
-
txOptions.maxFeePerGas = maxFeePerGas
|
249
|
-
? BigInt(Math.floor(maxFeePerGas))
|
250
|
-
: undefined;
|
251
|
-
txOptions.maxPriorityFeePerGas = maxPriorityFeePerGas
|
252
|
-
? BigInt(Math.floor(maxPriorityFeePerGas))
|
253
|
-
: undefined;
|
254
|
-
if (value) {
|
255
|
-
txOptions.value = value;
|
256
|
-
}
|
257
|
-
_a.label = 4;
|
258
|
-
case 4:
|
259
|
-
_a.trys.push([4, 7, , 8]);
|
260
|
-
return [4 /*yield*/, contract[functionName](args[0], txOptions)
|
261
|
-
// Wait for transaction confirmation
|
262
|
-
];
|
263
|
-
case 5:
|
264
|
-
tx = _a.sent();
|
265
|
-
return [4 /*yield*/, tx.wait()];
|
266
|
-
case 6:
|
267
|
-
receipt = _a.sent();
|
268
|
-
return [2 /*return*/, receipt ? receipt.hash : ''];
|
269
|
-
case 7:
|
270
|
-
txError_3 = _a.sent();
|
271
|
-
if (isUserRejection(txError_3)) {
|
272
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
273
|
-
}
|
274
|
-
throw txError_3;
|
275
|
-
case 8: return [3 /*break*/, 10];
|
276
|
-
case 9:
|
277
|
-
error_3 = _a.sent();
|
278
|
-
console.error('Token transaction error:', error_3);
|
279
|
-
if (isUserRejection(error_3)) {
|
280
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
281
|
-
}
|
282
|
-
if (error_3.code === 'NETWORK_ERROR') {
|
283
|
-
return [2 /*return*/, new Error('Network changed during transaction. Please try again.')];
|
284
|
-
}
|
285
|
-
return [2 /*return*/, error_3 instanceof Error
|
286
|
-
? error_3
|
287
|
-
: new Error('Failed to send token transaction')];
|
288
|
-
case 10: return [2 /*return*/];
|
289
|
-
}
|
290
|
-
});
|
291
|
-
}); };
|
292
|
-
function toSafeNumber(value, name) {
|
293
|
-
if (typeof value !== 'number' || Number.isNaN(value)) {
|
294
|
-
throw new TypeError("Invalid ".concat(name, ": expected a number, got ").concat(typeof value, " (").concat(value, ")"));
|
295
|
-
}
|
296
|
-
return value;
|
297
|
-
}
|
298
|
-
/**
|
299
|
-
* Sends a batch of EVM transactions
|
300
|
-
*/
|
301
|
-
export var sendEVMTransactionBatch = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
302
|
-
var activeRawProvider, provider, response, result, txError_4, error_4;
|
303
|
-
var _a, _b;
|
304
|
-
return __generator(this, function (_c) {
|
305
|
-
switch (_c.label) {
|
306
|
-
case 0:
|
307
|
-
_c.trys.push([0, 10, , 11]);
|
308
|
-
activeRawProvider = getActiveRawProvider();
|
309
|
-
if (!activeRawProvider) {
|
310
|
-
throw new Error('No active EVM provider');
|
311
|
-
}
|
312
|
-
provider = new ethers.BrowserProvider(activeRawProvider);
|
313
|
-
_c.label = 1;
|
314
|
-
case 1:
|
315
|
-
_c.trys.push([1, 8, , 9]);
|
316
|
-
return [4 /*yield*/, provider.send('wallet_sendCalls', [params])
|
317
|
-
// Wait for transaction confirmation
|
318
|
-
];
|
319
|
-
case 2:
|
320
|
-
response = _c.sent();
|
321
|
-
result = void 0;
|
322
|
-
_c.label = 3;
|
323
|
-
case 3: return [4 /*yield*/, provider.send('wallet_getCallsStatus', [response.id])
|
324
|
-
// wait 1 second if receipt is not yet available
|
325
|
-
];
|
326
|
-
case 4:
|
327
|
-
result = _c.sent();
|
328
|
-
if (!(result.status == 100)) return [3 /*break*/, 6];
|
329
|
-
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
|
330
|
-
case 5:
|
331
|
-
_c.sent();
|
332
|
-
_c.label = 6;
|
333
|
-
case 6:
|
334
|
-
if (result.status == 100) return [3 /*break*/, 3];
|
335
|
-
_c.label = 7;
|
336
|
-
case 7: return [2 /*return*/, (result === null || result === void 0 ? void 0 : result.status) != 200
|
337
|
-
? new Error('Failed to send batched transactions')
|
338
|
-
: (_b = (_a = result.receipts.find(function (x) { return x; })) === null || _a === void 0 ? void 0 : _a.transactionHash) !== null && _b !== void 0 ? _b : new Error('Failed to get batched transactions receipt')];
|
339
|
-
case 8:
|
340
|
-
txError_4 = _c.sent();
|
341
|
-
if (isUserRejection(txError_4)) {
|
342
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
343
|
-
}
|
344
|
-
throw txError_4;
|
345
|
-
case 9: return [3 /*break*/, 11];
|
346
|
-
case 10:
|
347
|
-
error_4 = _c.sent();
|
348
|
-
console.error('Token transaction error:', error_4);
|
349
|
-
if (isUserRejection(error_4)) {
|
350
|
-
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
351
|
-
}
|
352
|
-
if (error_4.code === 'NETWORK_ERROR') {
|
353
|
-
return [2 /*return*/, new Error('Network changed during transaction. Please try again.')];
|
354
|
-
}
|
355
|
-
return [2 /*return*/, error_4 instanceof Error
|
356
|
-
? error_4
|
357
|
-
: new Error('Failed to send token transaction')];
|
358
|
-
case 11: return [2 /*return*/];
|
359
|
-
}
|
360
|
-
});
|
361
|
-
}); };
|
362
|
-
export var getWalletCapabilities = function (from, chainId) { return __awaiter(void 0, void 0, void 0, function () {
|
363
|
-
var activeRawProvider, provider, capabilities;
|
364
|
-
return __generator(this, function (_a) {
|
365
|
-
switch (_a.label) {
|
366
|
-
case 0:
|
367
|
-
activeRawProvider = getActiveRawProvider();
|
368
|
-
if (!activeRawProvider) {
|
369
|
-
throw new Error('No active EVM provider');
|
370
|
-
}
|
371
|
-
provider = new ethers.BrowserProvider(activeRawProvider);
|
372
|
-
return [4 /*yield*/, provider.send('wallet_getCapabilities', [
|
373
|
-
from,
|
374
|
-
[chainId]
|
375
|
-
])];
|
376
|
-
case 1:
|
377
|
-
capabilities = _a.sent();
|
378
|
-
return [2 /*return*/, capabilities[chainId]];
|
379
|
-
}
|
380
|
-
});
|
381
|
-
}); };
|
@@ -1,57 +0,0 @@
|
|
1
|
-
import { ethers, Eip1193Provider } from 'ethers';
|
2
|
-
export interface EVMConnectResult {
|
3
|
-
accounts: string[];
|
4
|
-
chainId: number;
|
5
|
-
isConnected: boolean;
|
6
|
-
}
|
7
|
-
export interface EVMProvider extends ethers.Eip1193Provider {
|
8
|
-
on(event: string, listener: (...args: any[]) => void): void;
|
9
|
-
removeListener(event: string, listener: (...args: any[]) => void): void;
|
10
|
-
removeAllListeners(): void;
|
11
|
-
[key: string]: any;
|
12
|
-
}
|
13
|
-
export interface InjectedProviderInfo {
|
14
|
-
name: string;
|
15
|
-
id: string;
|
16
|
-
icon?: string;
|
17
|
-
injectedData: {
|
18
|
-
provider: EVMProvider;
|
19
|
-
[key: string]: any;
|
20
|
-
};
|
21
|
-
}
|
22
|
-
export interface ChainConfig {
|
23
|
-
name: string;
|
24
|
-
nativeCurrency: {
|
25
|
-
decimals: number;
|
26
|
-
name: string;
|
27
|
-
symbol: string;
|
28
|
-
};
|
29
|
-
rpcUrls: {
|
30
|
-
default: {
|
31
|
-
http: string[];
|
32
|
-
};
|
33
|
-
};
|
34
|
-
blockExplorers: {
|
35
|
-
default: {
|
36
|
-
name: string;
|
37
|
-
url: string;
|
38
|
-
};
|
39
|
-
};
|
40
|
-
}
|
41
|
-
export interface EIP6963ProviderInfo {
|
42
|
-
uuid: string;
|
43
|
-
name: string;
|
44
|
-
icon?: string;
|
45
|
-
rdns?: string;
|
46
|
-
}
|
47
|
-
export interface EIP6963ProviderDetail {
|
48
|
-
info: EIP6963ProviderInfo;
|
49
|
-
provider: Eip1193Provider;
|
50
|
-
}
|
51
|
-
export interface EIP6963AnnounceProviderEvent extends CustomEvent {
|
52
|
-
type: 'eip6963:announceProvider';
|
53
|
-
detail: EIP6963ProviderDetail;
|
54
|
-
}
|
55
|
-
export interface EIP6963RequestProviderEvent extends Event {
|
56
|
-
type: 'eip6963:requestProvider';
|
57
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,20 +0,0 @@
|
|
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>;
|
@@ -1,160 +0,0 @@
|
|
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) {
|
54
|
-
return p.name.toLowerCase() === walletName.toLowerCase() ||
|
55
|
-
p.name.toLowerCase().includes(walletName.toLowerCase());
|
56
|
-
});
|
57
|
-
if (matchingProvider) {
|
58
|
-
return matchingProvider.injectedData.provider;
|
59
|
-
}
|
60
|
-
if (window.ethereum) {
|
61
|
-
return window.ethereum;
|
62
|
-
}
|
63
|
-
throw new Error("No provider found for wallet ".concat(walletName, ". Please make sure the wallet is installed and enabled."));
|
64
|
-
};
|
65
|
-
/**
|
66
|
-
* Connects to an EVM wallet
|
67
|
-
*/
|
68
|
-
export var connectToEVMWallet = function (walletName, targetChainId, walletDetail) { return __awaiter(void 0, void 0, void 0, function () {
|
69
|
-
var provider, browserProvider, existingAccounts, error_1, signer, address, chainId, switchResult, error_2;
|
70
|
-
return __generator(this, function (_a) {
|
71
|
-
switch (_a.label) {
|
72
|
-
case 0:
|
73
|
-
_a.trys.push([0, 12, , 13]);
|
74
|
-
provider = void 0;
|
75
|
-
try {
|
76
|
-
provider = getEVMProvider(walletName, walletDetail);
|
77
|
-
}
|
78
|
-
catch (error) {
|
79
|
-
throw new Error("No provider found for wallet ".concat(walletName));
|
80
|
-
}
|
81
|
-
browserProvider = new ethers.BrowserProvider(provider);
|
82
|
-
setActiveEVMProvider(browserProvider, provider);
|
83
|
-
existingAccounts = void 0;
|
84
|
-
_a.label = 1;
|
85
|
-
case 1:
|
86
|
-
_a.trys.push([1, 3, , 4]);
|
87
|
-
return [4 /*yield*/, provider.request({ method: 'eth_accounts' })];
|
88
|
-
case 2:
|
89
|
-
existingAccounts = _a.sent();
|
90
|
-
return [3 /*break*/, 4];
|
91
|
-
case 3:
|
92
|
-
error_1 = _a.sent();
|
93
|
-
existingAccounts = [];
|
94
|
-
return [3 /*break*/, 4];
|
95
|
-
case 4:
|
96
|
-
if (!(!existingAccounts || existingAccounts.length === 0)) return [3 /*break*/, 6];
|
97
|
-
return [4 /*yield*/, browserProvider.send('eth_requestAccounts', [])];
|
98
|
-
case 5:
|
99
|
-
_a.sent();
|
100
|
-
_a.label = 6;
|
101
|
-
case 6: return [4 /*yield*/, browserProvider.getSigner()];
|
102
|
-
case 7:
|
103
|
-
signer = _a.sent();
|
104
|
-
return [4 /*yield*/, signer.getAddress()];
|
105
|
-
case 8:
|
106
|
-
address = _a.sent();
|
107
|
-
return [4 /*yield*/, browserProvider
|
108
|
-
.getNetwork()
|
109
|
-
.then(function (network) { return Number(network.chainId); })];
|
110
|
-
case 9:
|
111
|
-
chainId = _a.sent();
|
112
|
-
if (!(targetChainId && chainId !== targetChainId)) return [3 /*break*/, 11];
|
113
|
-
return [4 /*yield*/, switchEVMChain(targetChainId, provider)];
|
114
|
-
case 10:
|
115
|
-
switchResult = _a.sent();
|
116
|
-
if (switchResult instanceof Error) {
|
117
|
-
throw switchResult;
|
118
|
-
}
|
119
|
-
chainId = switchResult.chainId;
|
120
|
-
_a.label = 11;
|
121
|
-
case 11: return [2 /*return*/, {
|
122
|
-
accounts: [address],
|
123
|
-
chainId: chainId,
|
124
|
-
isConnected: true
|
125
|
-
}];
|
126
|
-
case 12:
|
127
|
-
error_2 = _a.sent();
|
128
|
-
console.error('EVM wallet connection error:', error_2);
|
129
|
-
return [2 /*return*/, error_2 instanceof Error
|
130
|
-
? error_2
|
131
|
-
: new Error("Failed to connect to ".concat(walletName, " wallet"))];
|
132
|
-
case 13: return [2 /*return*/];
|
133
|
-
}
|
134
|
-
});
|
135
|
-
}); };
|
136
|
-
/**
|
137
|
-
* Disconnects from an EVM wallet
|
138
|
-
*/
|
139
|
-
export var disconnectFromEVMWallet = function (walletName) { return __awaiter(void 0, void 0, void 0, function () {
|
140
|
-
var provider;
|
141
|
-
return __generator(this, function (_a) {
|
142
|
-
try {
|
143
|
-
provider = getActiveRawProvider();
|
144
|
-
if (!provider) {
|
145
|
-
return [2 /*return*/];
|
146
|
-
}
|
147
|
-
if (provider.removeAllListeners) {
|
148
|
-
provider.removeAllListeners();
|
149
|
-
}
|
150
|
-
clearActiveProviders();
|
151
|
-
}
|
152
|
-
catch (error) {
|
153
|
-
console.error('EVM wallet disconnection error:', error);
|
154
|
-
return [2 /*return*/, error instanceof Error
|
155
|
-
? error
|
156
|
-
: new Error("Failed to disconnect from ".concat(walletName, " wallet"))];
|
157
|
-
}
|
158
|
-
return [2 /*return*/];
|
159
|
-
});
|
160
|
-
}); };
|
@@ -1,10 +0,0 @@
|
|
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[];
|