@meshconnect/web-link-sdk 3.1.11 → 3.2.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 +80 -41
- package/package.json +1 -1
- package/utils/connectors/evm/transactions.d.ts +16 -2
- package/utils/connectors/evm/transactions.js +105 -31
- package/utils/popup.d.ts +1 -1
- package/utils/popup.js +1 -2
- package/utils/types.d.ts +20 -2
- package/utils/version.d.ts +1 -1
- package/utils/version.js +1 -1
- package/utils/wallet/EVMWalletStrategy.d.ts +2 -1
- package/utils/wallet/EVMWalletStrategy.js +25 -3
- package/utils/wallet/SolanaWalletStrategy.d.ts +1 -0
- package/utils/wallet/SolanaWalletStrategy.js +3 -0
- package/utils/wallet/WalletStrategy.d.ts +3 -1
- package/utils/wallet-browser-event-types.d.ts +16 -2
- package/utils/wallet-browser-event-types.js +2 -1
package/Link.js
CHANGED
@@ -53,8 +53,9 @@ import { WalletStrategyFactory } from './utils/wallet';
|
|
53
53
|
var currentOptions;
|
54
54
|
var targetOrigin;
|
55
55
|
var linkTokenOrigin;
|
56
|
+
var currentIframeId = iframeId;
|
56
57
|
var iframeElement = function () {
|
57
|
-
return document.getElementById(
|
58
|
+
return document.getElementById(currentIframeId);
|
58
59
|
};
|
59
60
|
function sendMessageToIframe(message) {
|
60
61
|
var _a;
|
@@ -158,7 +159,7 @@ function handleLinkEvent(event) {
|
|
158
159
|
}
|
159
160
|
function handleWalletBrowserEvent(event) {
|
160
161
|
return __awaiter(this, void 0, void 0, function () {
|
161
|
-
var walletFactory, _a, payload, networkType, strategy, result, error_1, payload, networkType, strategy, result, error_2, payload, networkType, strategy, result, error_3, payload, networkType, strategy, result, error_4, payload, getResponseType, networkType, strategy, result, responseType, error_5, errorType, payload, networkType, strategy, error_6;
|
162
|
+
var walletFactory, _a, payload, networkType, strategy, result, error_1, payload, networkType, strategy, result, error_2, payload, networkType, strategy, result, error_3, payload, networkType, strategy, result, error_4, payload, getResponseType, networkType, strategy, result, responseType, error_5, errorType, payload, responseType, networkType, strategy, result, error_6, payload, networkType, strategy, error_7;
|
162
163
|
var _b;
|
163
164
|
return __generator(this, function (_c) {
|
164
165
|
switch (_c.label) {
|
@@ -173,9 +174,10 @@ function handleWalletBrowserEvent(event) {
|
|
173
174
|
case 'walletBrowserNonNativeTransferRequest': return [3 /*break*/, 21];
|
174
175
|
case 'walletBrowserNativeSmartDeposit': return [3 /*break*/, 21];
|
175
176
|
case 'walletBrowserNonNativeSmartDeposit': return [3 /*break*/, 21];
|
176
|
-
case '
|
177
|
+
case 'walletBrowserTransactionBatchRequest': return [3 /*break*/, 26];
|
178
|
+
case 'walletBrowserDisconnect': return [3 /*break*/, 31];
|
177
179
|
}
|
178
|
-
return [3 /*break*/,
|
180
|
+
return [3 /*break*/, 39];
|
179
181
|
case 1:
|
180
182
|
payload = event.data.payload;
|
181
183
|
_c.label = 2;
|
@@ -200,7 +202,7 @@ function handleWalletBrowserEvent(event) {
|
|
200
202
|
console.error('Connection error:', error_1);
|
201
203
|
handleErrorAndSendMessage(error_1, 'SDKinjectedConnectionCompleted');
|
202
204
|
return [3 /*break*/, 5];
|
203
|
-
case 5: return [3 /*break*/,
|
205
|
+
case 5: return [3 /*break*/, 39];
|
204
206
|
case 6:
|
205
207
|
payload = event.data.payload;
|
206
208
|
_c.label = 7;
|
@@ -220,7 +222,7 @@ function handleWalletBrowserEvent(event) {
|
|
220
222
|
error_2 = _c.sent();
|
221
223
|
handleErrorAndSendMessage(error_2, 'SDKsignRequestCompleted');
|
222
224
|
return [3 /*break*/, 10];
|
223
|
-
case 10: return [3 /*break*/,
|
225
|
+
case 10: return [3 /*break*/, 39];
|
224
226
|
case 11:
|
225
227
|
payload = event.data.payload;
|
226
228
|
_c.label = 12;
|
@@ -245,7 +247,7 @@ function handleWalletBrowserEvent(event) {
|
|
245
247
|
console.error('Chain switch failed:', error_3);
|
246
248
|
handleErrorAndSendMessage(error_3, 'SDKswitchChainCompleted');
|
247
249
|
return [3 /*break*/, 15];
|
248
|
-
case 15: return [3 /*break*/,
|
250
|
+
case 15: return [3 /*break*/, 39];
|
249
251
|
case 16:
|
250
252
|
payload = event.data.payload;
|
251
253
|
_c.label = 17;
|
@@ -265,7 +267,7 @@ function handleWalletBrowserEvent(event) {
|
|
265
267
|
error_4 = _c.sent();
|
266
268
|
handleErrorAndSendMessage(error_4, 'SDKnativeTransferCompleted');
|
267
269
|
return [3 /*break*/, 20];
|
268
|
-
case 20: return [3 /*break*/,
|
270
|
+
case 20: return [3 /*break*/, 39];
|
269
271
|
case 21:
|
270
272
|
payload = event.data.payload;
|
271
273
|
getResponseType = function (type) {
|
@@ -301,41 +303,64 @@ function handleWalletBrowserEvent(event) {
|
|
301
303
|
errorType = getResponseType(event.data.type);
|
302
304
|
handleErrorAndSendMessage(error_5, errorType);
|
303
305
|
return [3 /*break*/, 25];
|
304
|
-
case 25: return [3 /*break*/,
|
306
|
+
case 25: return [3 /*break*/, 39];
|
305
307
|
case 26:
|
306
308
|
payload = event.data.payload;
|
309
|
+
responseType = 'SDKtransactionBatchCompleted';
|
307
310
|
_c.label = 27;
|
308
311
|
case 27:
|
309
|
-
_c.trys.push([27,
|
310
|
-
|
312
|
+
_c.trys.push([27, 29, , 30]);
|
313
|
+
networkType = (payload.from.startsWith('0x') ? 'evm' : 'solana');
|
314
|
+
strategy = walletFactory.getStrategy(networkType);
|
315
|
+
return [4 /*yield*/, strategy.sendTransactionBatch(payload)];
|
316
|
+
case 28:
|
317
|
+
result = _c.sent();
|
318
|
+
sendMessageToIframe({
|
319
|
+
type: responseType,
|
320
|
+
payload: {
|
321
|
+
txHash: result
|
322
|
+
}
|
323
|
+
});
|
324
|
+
return [3 /*break*/, 30];
|
325
|
+
case 29:
|
326
|
+
error_6 = _c.sent();
|
327
|
+
handleErrorAndSendMessage(error_6, responseType);
|
328
|
+
return [3 /*break*/, 30];
|
329
|
+
case 30: return [3 /*break*/, 39];
|
330
|
+
case 31:
|
331
|
+
payload = event.data.payload;
|
332
|
+
_c.label = 32;
|
333
|
+
case 32:
|
334
|
+
_c.trys.push([32, 37, , 38]);
|
335
|
+
if (!(payload === null || payload === void 0 ? void 0 : payload.networkType)) return [3 /*break*/, 34];
|
311
336
|
networkType = (payload.networkType === 'solana' ? 'solana' : 'evm');
|
312
337
|
strategy = walletFactory.getStrategy(networkType);
|
313
338
|
return [4 /*yield*/, strategy.disconnect(payload)];
|
314
|
-
case
|
339
|
+
case 33:
|
315
340
|
_c.sent();
|
316
|
-
return [3 /*break*/,
|
317
|
-
case
|
341
|
+
return [3 /*break*/, 36];
|
342
|
+
case 34:
|
318
343
|
// Disconnect from all if no specific network type
|
319
344
|
return [4 /*yield*/, Promise.all([
|
320
345
|
walletFactory.getStrategy('solana').disconnect(payload),
|
321
346
|
walletFactory.getStrategy('evm').disconnect(payload)
|
322
347
|
])];
|
323
|
-
case
|
348
|
+
case 35:
|
324
349
|
// Disconnect from all if no specific network type
|
325
350
|
_c.sent();
|
326
|
-
_c.label =
|
327
|
-
case
|
351
|
+
_c.label = 36;
|
352
|
+
case 36:
|
328
353
|
sendMessageToIframe({
|
329
354
|
type: 'SDKdisconnectSuccess'
|
330
355
|
});
|
331
|
-
return [3 /*break*/,
|
332
|
-
case
|
333
|
-
|
334
|
-
console.error('Error during disconnect:',
|
335
|
-
handleErrorAndSendMessage(
|
336
|
-
return [3 /*break*/,
|
337
|
-
case
|
338
|
-
case
|
356
|
+
return [3 /*break*/, 38];
|
357
|
+
case 37:
|
358
|
+
error_7 = _c.sent();
|
359
|
+
console.error('Error during disconnect:', error_7);
|
360
|
+
handleErrorAndSendMessage(error_7, 'SDKdisconnectSuccess');
|
361
|
+
return [3 /*break*/, 38];
|
362
|
+
case 38: return [3 /*break*/, 39];
|
363
|
+
case 39: return [2 /*return*/];
|
339
364
|
}
|
340
365
|
});
|
341
366
|
});
|
@@ -372,24 +397,35 @@ function handleErrorAndSendMessage(error, messageType) {
|
|
372
397
|
});
|
373
398
|
}
|
374
399
|
export var createLink = function (options) {
|
375
|
-
var openLink = function (linkToken
|
376
|
-
var linkUrl;
|
400
|
+
var openLink = function (linkToken, customIframeId) {
|
377
401
|
var _a;
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
402
|
+
if (!linkToken) {
|
403
|
+
(_a = options === null || options === void 0 ? void 0 : options.onExit) === null || _a === void 0 ? void 0 : _a.call(options, 'Invalid link token!');
|
404
|
+
return;
|
405
|
+
}
|
406
|
+
currentOptions = options;
|
407
|
+
var linkUrl = window.atob(linkToken);
|
408
|
+
linkUrl = addLanguage(linkUrl, currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.language);
|
409
|
+
linkTokenOrigin = new URL(linkUrl).origin;
|
410
|
+
window.removeEventListener('message', eventsListener);
|
411
|
+
if (customIframeId) {
|
412
|
+
var iframe = document.getElementById(customIframeId);
|
413
|
+
if (iframe) {
|
414
|
+
iframe.allow = 'clipboard-read *; clipboard-write *';
|
415
|
+
iframe.src = linkUrl;
|
416
|
+
currentIframeId = customIframeId;
|
382
417
|
}
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
418
|
+
else {
|
419
|
+
console.warn("Mesh SDK: No iframe found with id ".concat(customIframeId));
|
420
|
+
}
|
421
|
+
}
|
422
|
+
else {
|
423
|
+
currentIframeId = iframeId;
|
424
|
+
addPopup(linkUrl);
|
425
|
+
}
|
426
|
+
window.addEventListener('message', eventsListener);
|
427
|
+
targetOrigin = window.location.origin;
|
428
|
+
};
|
393
429
|
var closeLink = function () {
|
394
430
|
var _a;
|
395
431
|
removePopup();
|
@@ -401,3 +437,6 @@ export var createLink = function (options) {
|
|
401
437
|
closeLink: closeLink
|
402
438
|
};
|
403
439
|
};
|
440
|
+
function addLanguage(linkUrl, language) {
|
441
|
+
return "".concat(linkUrl).concat(linkUrl.includes('?') ? '&' : '?', "lng=").concat(language || 'en');
|
442
|
+
}
|
package/package.json
CHANGED
@@ -2,8 +2,22 @@ import { ethers } from 'ethers';
|
|
2
2
|
/**
|
3
3
|
* Sends a native EVM transaction
|
4
4
|
*/
|
5
|
-
export declare const sendEVMTransaction: (toAddress: string, amount: bigint, fromAddress: string) => Promise<string | Error>;
|
5
|
+
export declare const sendEVMTransaction: (toAddress: string, amount: bigint, fromAddress: string, gasLimit?: number | null, maxFeePerGas?: number | null, maxPriorityFeePerGas?: number | null) => Promise<string | Error>;
|
6
6
|
/**
|
7
7
|
* Sends an EVM token transaction
|
8
8
|
*/
|
9
|
-
export declare const sendEVMTokenTransaction: (contractAddress: string, abi: ethers.InterfaceAbi, functionName: string, args: unknown[], fromAddress: string
|
9
|
+
export declare const sendEVMTokenTransaction: (contractAddress: string, abi: ethers.InterfaceAbi, functionName: string, args: unknown[], fromAddress: string) => Promise<string | Error>;
|
10
|
+
/**
|
11
|
+
* Sends a batch of EVM transactions
|
12
|
+
*/
|
13
|
+
export declare const sendEVMTransactionBatch: (params: {
|
14
|
+
version: string;
|
15
|
+
from: string;
|
16
|
+
chainId: string;
|
17
|
+
atomicRequired: boolean;
|
18
|
+
calls: {
|
19
|
+
to: string;
|
20
|
+
value: string;
|
21
|
+
data?: string;
|
22
|
+
}[];
|
23
|
+
}) => Promise<string | Error>;
|
@@ -34,15 +34,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
34
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
35
35
|
}
|
36
36
|
};
|
37
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
38
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
39
|
-
if (ar || !(i in from)) {
|
40
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
41
|
-
ar[i] = from[i];
|
42
|
-
}
|
43
|
-
}
|
44
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
45
|
-
};
|
46
37
|
import { ethers } from 'ethers';
|
47
38
|
import { getActiveRawProvider } from './provider';
|
48
39
|
var isUserRejection = function (error) {
|
@@ -60,7 +51,7 @@ var isUserRejection = function (error) {
|
|
60
51
|
/**
|
61
52
|
* Sends a native EVM transaction
|
62
53
|
*/
|
63
|
-
export var sendEVMTransaction = function (toAddress, amount, fromAddress) { return __awaiter(void 0, void 0, void 0, function () {
|
54
|
+
export var sendEVMTransaction = function (toAddress, amount, fromAddress, gasLimit, maxFeePerGas, maxPriorityFeePerGas) { return __awaiter(void 0, void 0, void 0, function () {
|
64
55
|
var activeRawProvider, chainIdHex, chainId, provider, signer, network, tx, receipt, txError_1, error_1;
|
65
56
|
return __generator(this, function (_a) {
|
66
57
|
switch (_a.label) {
|
@@ -93,7 +84,14 @@ export var sendEVMTransaction = function (toAddress, amount, fromAddress) { retu
|
|
93
84
|
_a.trys.push([4, 7, , 8]);
|
94
85
|
return [4 /*yield*/, signer.sendTransaction({
|
95
86
|
to: toAddress,
|
96
|
-
value: amount
|
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
|
97
95
|
})];
|
98
96
|
case 5:
|
99
97
|
tx = _a.sent();
|
@@ -127,12 +125,12 @@ export var sendEVMTransaction = function (toAddress, amount, fromAddress) { retu
|
|
127
125
|
/**
|
128
126
|
* Sends an EVM token transaction
|
129
127
|
*/
|
130
|
-
export var sendEVMTokenTransaction = function (contractAddress, abi, functionName, args, fromAddress
|
131
|
-
var activeRawProvider, chainIdHex, chainId, provider, signer, network, contract, txOptions,
|
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;
|
132
130
|
return __generator(this, function (_a) {
|
133
131
|
switch (_a.label) {
|
134
132
|
case 0:
|
135
|
-
_a.trys.push([0,
|
133
|
+
_a.trys.push([0, 9, , 10]);
|
136
134
|
activeRawProvider = getActiveRawProvider();
|
137
135
|
if (!activeRawProvider) {
|
138
136
|
throw new Error('No active EVM provider');
|
@@ -157,34 +155,40 @@ export var sendEVMTokenTransaction = function (contractAddress, abi, functionNam
|
|
157
155
|
}
|
158
156
|
contract = new ethers.Contract(contractAddress, abi, signer);
|
159
157
|
txOptions = {};
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
txOptions.gasPrice = feeData.gasPrice
|
164
|
-
? (feeData.gasPrice * BigInt(1000)) / BigInt(100)
|
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')
|
165
161
|
: undefined;
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
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
|
+
];
|
171
178
|
case 5:
|
172
|
-
_a.trys.push([5, 8, , 9]);
|
173
|
-
return [4 /*yield*/, contract[functionName].apply(contract, __spreadArray(__spreadArray([], args, false), [txOptions], false))];
|
174
|
-
case 6:
|
175
179
|
tx = _a.sent();
|
176
180
|
return [4 /*yield*/, tx.wait()];
|
177
|
-
case
|
181
|
+
case 6:
|
178
182
|
receipt = _a.sent();
|
179
183
|
return [2 /*return*/, receipt ? receipt.hash : ''];
|
180
|
-
case
|
184
|
+
case 7:
|
181
185
|
txError_2 = _a.sent();
|
182
186
|
if (isUserRejection(txError_2)) {
|
183
187
|
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
184
188
|
}
|
185
189
|
throw txError_2;
|
186
|
-
case
|
187
|
-
case
|
190
|
+
case 8: return [3 /*break*/, 10];
|
191
|
+
case 9:
|
188
192
|
error_2 = _a.sent();
|
189
193
|
console.error('Token transaction error:', error_2);
|
190
194
|
if (isUserRejection(error_2)) {
|
@@ -196,6 +200,76 @@ export var sendEVMTokenTransaction = function (contractAddress, abi, functionNam
|
|
196
200
|
return [2 /*return*/, error_2 instanceof Error
|
197
201
|
? error_2
|
198
202
|
: new Error('Failed to send token transaction')];
|
203
|
+
case 10: return [2 /*return*/];
|
204
|
+
}
|
205
|
+
});
|
206
|
+
}); };
|
207
|
+
function toSafeNumber(value, name) {
|
208
|
+
if (typeof value !== 'number' || Number.isNaN(value)) {
|
209
|
+
throw new TypeError("Invalid ".concat(name, ": expected a number, got ").concat(typeof value, " (").concat(value, ")"));
|
210
|
+
}
|
211
|
+
return value;
|
212
|
+
}
|
213
|
+
/**
|
214
|
+
* Sends a batch of EVM transactions
|
215
|
+
*/
|
216
|
+
export var sendEVMTransactionBatch = function (params) { return __awaiter(void 0, void 0, void 0, function () {
|
217
|
+
var activeRawProvider, provider, response, result, txError_3, error_3;
|
218
|
+
var _a, _b;
|
219
|
+
return __generator(this, function (_c) {
|
220
|
+
switch (_c.label) {
|
221
|
+
case 0:
|
222
|
+
_c.trys.push([0, 10, , 11]);
|
223
|
+
activeRawProvider = getActiveRawProvider();
|
224
|
+
if (!activeRawProvider) {
|
225
|
+
throw new Error('No active EVM provider');
|
226
|
+
}
|
227
|
+
provider = new ethers.BrowserProvider(activeRawProvider);
|
228
|
+
_c.label = 1;
|
229
|
+
case 1:
|
230
|
+
_c.trys.push([1, 8, , 9]);
|
231
|
+
return [4 /*yield*/, provider.send('wallet_sendCalls', [params])
|
232
|
+
// Wait for transaction confirmation
|
233
|
+
];
|
234
|
+
case 2:
|
235
|
+
response = _c.sent();
|
236
|
+
result = void 0;
|
237
|
+
_c.label = 3;
|
238
|
+
case 3: return [4 /*yield*/, provider.send('wallet_getCallsStatus', [response.id])
|
239
|
+
// wait 1 second if receipt is not yet available
|
240
|
+
];
|
241
|
+
case 4:
|
242
|
+
result = _c.sent();
|
243
|
+
if (!(result.status == 100)) return [3 /*break*/, 6];
|
244
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
|
245
|
+
case 5:
|
246
|
+
_c.sent();
|
247
|
+
_c.label = 6;
|
248
|
+
case 6:
|
249
|
+
if (result.status == 100) return [3 /*break*/, 3];
|
250
|
+
_c.label = 7;
|
251
|
+
case 7: return [2 /*return*/, (result === null || result === void 0 ? void 0 : result.status) != 200
|
252
|
+
? new Error('Failed to send batched transactions')
|
253
|
+
: (_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')];
|
254
|
+
case 8:
|
255
|
+
txError_3 = _c.sent();
|
256
|
+
if (isUserRejection(txError_3)) {
|
257
|
+
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
258
|
+
}
|
259
|
+
throw txError_3;
|
260
|
+
case 9: return [3 /*break*/, 11];
|
261
|
+
case 10:
|
262
|
+
error_3 = _c.sent();
|
263
|
+
console.error('Token transaction error:', error_3);
|
264
|
+
if (isUserRejection(error_3)) {
|
265
|
+
return [2 /*return*/, new Error('Transaction was rejected by user')];
|
266
|
+
}
|
267
|
+
if (error_3.code === 'NETWORK_ERROR') {
|
268
|
+
return [2 /*return*/, new Error('Network changed during transaction. Please try again.')];
|
269
|
+
}
|
270
|
+
return [2 /*return*/, error_3 instanceof Error
|
271
|
+
? error_3
|
272
|
+
: new Error('Failed to send token transaction')];
|
199
273
|
case 11: return [2 /*return*/];
|
200
274
|
}
|
201
275
|
});
|
package/utils/popup.d.ts
CHANGED
package/utils/popup.js
CHANGED
@@ -12,14 +12,13 @@ export function removePopup() {
|
|
12
12
|
var existingStyles = window.document.getElementById(stylesId);
|
13
13
|
(_b = existingStyles === null || existingStyles === void 0 ? void 0 : existingStyles.parentElement) === null || _b === void 0 ? void 0 : _b.removeChild(existingStyles);
|
14
14
|
}
|
15
|
-
export function addPopup(iframeLink
|
15
|
+
export function addPopup(iframeLink) {
|
16
16
|
removePopup();
|
17
17
|
var styleElement = document.createElement('style');
|
18
18
|
styleElement.id = stylesId;
|
19
19
|
var style = getLinkStyle(iframeLink);
|
20
20
|
styleElement.textContent = getStylesContent(style);
|
21
21
|
window.document.head.appendChild(styleElement);
|
22
|
-
iframeLink = "".concat(iframeLink).concat(iframeLink.includes('?') ? '&' : '?', "lng=").concat(language || 'en');
|
23
22
|
var popupRootElement = document.createElement('div');
|
24
23
|
popupRootElement.id = popupId;
|
25
24
|
var popupBackdropElement = document.createElement('div');
|
package/utils/types.d.ts
CHANGED
@@ -4,8 +4,10 @@ export type EventType = 'brokerageAccountAccessToken' | 'delayedAuthentication'
|
|
4
4
|
export interface Link {
|
5
5
|
/**
|
6
6
|
* A function that takes linkToken parameter from `/api/v1/linktoken` endpoint as an input, and opens the Link UI popup
|
7
|
+
* @param linkToken - Base64 encoded link token from the `/api/v1/linktoken` endpoint
|
8
|
+
* @param customIframeId - Optional custom ID for the existing iframe element. If not provided, a new iframe element will be created
|
7
9
|
*/
|
8
|
-
openLink: (linkToken: string) =>
|
10
|
+
openLink: (linkToken: string, customIframeId?: string) => void;
|
9
11
|
/**
|
10
12
|
* A function to close Link UI popup
|
11
13
|
*/
|
@@ -119,6 +121,9 @@ export interface TransferPayload {
|
|
119
121
|
network: string;
|
120
122
|
blockhash?: string;
|
121
123
|
walletName?: string;
|
124
|
+
gasLimit?: number | null;
|
125
|
+
maxFeePerGas?: number | null;
|
126
|
+
maxPriorityFeePerGas?: number | null;
|
122
127
|
}
|
123
128
|
export interface SmartContractPayload {
|
124
129
|
address: string;
|
@@ -129,7 +134,20 @@ export interface SmartContractPayload {
|
|
129
134
|
value?: string;
|
130
135
|
walletName?: string;
|
131
136
|
blockhash?: string;
|
132
|
-
gasLimit?:
|
137
|
+
gasLimit?: number | null;
|
138
|
+
maxFeePerGas?: number | null;
|
139
|
+
maxPriorityFeePerGas?: number | null;
|
140
|
+
}
|
141
|
+
export interface TransactionBatchPayload {
|
142
|
+
version: string;
|
143
|
+
from: string;
|
144
|
+
chainId: string;
|
145
|
+
atomicRequired: boolean;
|
146
|
+
calls: {
|
147
|
+
to: string;
|
148
|
+
value: string;
|
149
|
+
data?: string;
|
150
|
+
}[];
|
133
151
|
}
|
134
152
|
export interface DisconnectPayload {
|
135
153
|
networkType?: string;
|
package/utils/version.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export declare const sdkVersion = "3.
|
1
|
+
export declare const sdkVersion = "3.2.0";
|
package/utils/version.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export var sdkVersion = '3.
|
1
|
+
export var sdkVersion = '3.2.0';
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { BaseWalletStrategy } from './WalletStrategy';
|
2
|
-
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload } from '../types';
|
2
|
+
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload, TransactionBatchPayload } from '../types';
|
3
3
|
export declare class EVMWalletStrategy extends BaseWalletStrategy {
|
4
4
|
connect(payload: WalletBrowserPayload): Promise<{
|
5
5
|
accounts: string[];
|
@@ -14,6 +14,7 @@ export declare class EVMWalletStrategy extends BaseWalletStrategy {
|
|
14
14
|
}>;
|
15
15
|
sendNativeTransfer(payload: TransferPayload): Promise<string>;
|
16
16
|
sendSmartContractInteraction(payload: SmartContractPayload): Promise<string>;
|
17
|
+
sendTransactionBatch(payload: TransactionBatchPayload): Promise<string>;
|
17
18
|
getProviders(): {
|
18
19
|
icon: string | undefined;
|
19
20
|
id: string;
|
@@ -50,7 +50,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
50
50
|
}
|
51
51
|
};
|
52
52
|
import { BaseWalletStrategy } from './WalletStrategy';
|
53
|
-
import { connectToEVMWallet, disconnectFromEVMWallet, signEVMMessage, sendEVMTransaction, sendEVMTokenTransaction, switchEVMChain, findAvailableProviders } from '../connectors/evm';
|
53
|
+
import { connectToEVMWallet, disconnectFromEVMWallet, signEVMMessage, sendEVMTransaction, sendEVMTokenTransaction, switchEVMChain, findAvailableProviders, sendEVMTransactionBatch } from '../connectors/evm';
|
54
54
|
var EVMWalletStrategy = /** @class */ (function (_super) {
|
55
55
|
__extends(EVMWalletStrategy, _super);
|
56
56
|
function EVMWalletStrategy() {
|
@@ -155,7 +155,7 @@ var EVMWalletStrategy = /** @class */ (function (_super) {
|
|
155
155
|
switch (_a.label) {
|
156
156
|
case 0:
|
157
157
|
_a.trys.push([0, 2, , 3]);
|
158
|
-
return [4 /*yield*/, sendEVMTransaction(payload.toAddress, BigInt(payload.amount * Math.pow(10, payload.decimalPlaces)), payload.account)];
|
158
|
+
return [4 /*yield*/, sendEVMTransaction(payload.toAddress, BigInt(payload.amount * Math.pow(10, payload.decimalPlaces)), payload.account, payload.gasLimit, payload.maxFeePerGas, payload.maxPriorityFeePerGas)];
|
159
159
|
case 1:
|
160
160
|
result = _a.sent();
|
161
161
|
if (result instanceof Error) {
|
@@ -177,7 +177,7 @@ var EVMWalletStrategy = /** @class */ (function (_super) {
|
|
177
177
|
switch (_a.label) {
|
178
178
|
case 0:
|
179
179
|
_a.trys.push([0, 2, , 3]);
|
180
|
-
return [4 /*yield*/, sendEVMTokenTransaction(payload.address, JSON.parse(payload.abi), payload.functionName, payload.args, payload.account
|
180
|
+
return [4 /*yield*/, sendEVMTokenTransaction(payload.address, JSON.parse(payload.abi), payload.functionName, payload.args, payload.account)];
|
181
181
|
case 1:
|
182
182
|
result = _a.sent();
|
183
183
|
if (result instanceof Error) {
|
@@ -192,6 +192,28 @@ var EVMWalletStrategy = /** @class */ (function (_super) {
|
|
192
192
|
});
|
193
193
|
});
|
194
194
|
};
|
195
|
+
EVMWalletStrategy.prototype.sendTransactionBatch = function (payload) {
|
196
|
+
return __awaiter(this, void 0, void 0, function () {
|
197
|
+
var result, error_7;
|
198
|
+
return __generator(this, function (_a) {
|
199
|
+
switch (_a.label) {
|
200
|
+
case 0:
|
201
|
+
_a.trys.push([0, 2, , 3]);
|
202
|
+
return [4 /*yield*/, sendEVMTransactionBatch(payload)];
|
203
|
+
case 1:
|
204
|
+
result = _a.sent();
|
205
|
+
if (result instanceof Error) {
|
206
|
+
throw result;
|
207
|
+
}
|
208
|
+
return [2 /*return*/, result];
|
209
|
+
case 2:
|
210
|
+
error_7 = _a.sent();
|
211
|
+
throw this.handleError(error_7, 'send EVM smart contract interaction');
|
212
|
+
case 3: return [2 /*return*/];
|
213
|
+
}
|
214
|
+
});
|
215
|
+
});
|
216
|
+
};
|
195
217
|
EVMWalletStrategy.prototype.getProviders = function () {
|
196
218
|
return findAvailableProviders().map(function (provider) { return ({
|
197
219
|
icon: provider.icon,
|
@@ -18,6 +18,7 @@ export declare class SolanaWalletStrategy extends BaseWalletStrategy {
|
|
18
18
|
}>;
|
19
19
|
sendNativeTransfer(payload: TransferPayload): Promise<string>;
|
20
20
|
sendSmartContractInteraction(payload: SmartContractPayload): Promise<string>;
|
21
|
+
sendTransactionBatch(): Promise<string>;
|
21
22
|
getProviders(): {
|
22
23
|
id: string;
|
23
24
|
type: string;
|
@@ -209,6 +209,9 @@ var SolanaWalletStrategy = /** @class */ (function (_super) {
|
|
209
209
|
});
|
210
210
|
});
|
211
211
|
};
|
212
|
+
SolanaWalletStrategy.prototype.sendTransactionBatch = function () {
|
213
|
+
throw new Error('Method not implemented.');
|
214
|
+
};
|
212
215
|
SolanaWalletStrategy.prototype.getProviders = function () {
|
213
216
|
var solanaProviderMap = findAvailableSolanaProviders();
|
214
217
|
return Object.keys(solanaProviderMap).map(function (id) { return ({
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload } from '../types';
|
1
|
+
import { WalletBrowserPayload, SignRequestPayload, ChainSwitchPayload, TransferPayload, SmartContractPayload, DisconnectPayload, TransactionBatchPayload } from '../types';
|
2
2
|
export interface WalletStrategy {
|
3
3
|
connect(payload: WalletBrowserPayload): Promise<{
|
4
4
|
accounts: string[];
|
@@ -13,6 +13,7 @@ export interface WalletStrategy {
|
|
13
13
|
}>;
|
14
14
|
sendNativeTransfer(payload: TransferPayload): Promise<string>;
|
15
15
|
sendSmartContractInteraction(payload: SmartContractPayload): Promise<string>;
|
16
|
+
sendTransactionBatch(payload: TransactionBatchPayload): Promise<string>;
|
16
17
|
getProviders(): {
|
17
18
|
id: string;
|
18
19
|
type: string;
|
@@ -34,6 +35,7 @@ export declare abstract class BaseWalletStrategy implements WalletStrategy {
|
|
34
35
|
}>;
|
35
36
|
abstract sendNativeTransfer(payload: TransferPayload): Promise<string>;
|
36
37
|
abstract sendSmartContractInteraction(payload: SmartContractPayload): Promise<string>;
|
38
|
+
abstract sendTransactionBatch(payload: TransactionBatchPayload): Promise<string>;
|
37
39
|
abstract getProviders(): {
|
38
40
|
id: string;
|
39
41
|
type: string;
|
@@ -1,5 +1,5 @@
|
|
1
|
-
export type WalletBrowserEventType = WalletBrowserInjectedWalletSelected | WalletBrowserSignRequest | WalletBrowserChainSwitchRequest | WalletBrowserTransferBalanceRequest | WalletBrowserNativeTransferRequest | WalletBrowserNonNativeTransferRequest | WalletBrowserNativeSmartDeposit | WalletBrowserNonNativeSmartDeposit | WalletBrowserDisconnect;
|
2
|
-
declare const WALLET_BROWSER_EVENT_TYPE_KEYS: readonly ["walletBrowserInjectedWalletSelected", "walletBrowserSignRequest", "walletBrowserChainSwitchRequest", "walletBrowserTransferBalanceRequest", "walletBrowserNativeTransferRequest", "walletBrowserNonNativeTransferRequest", "walletBrowserNativeSmartDeposit", "walletBrowserNonNativeSmartDeposit", "walletBrowserDisconnect"];
|
1
|
+
export type WalletBrowserEventType = WalletBrowserInjectedWalletSelected | WalletBrowserSignRequest | WalletBrowserChainSwitchRequest | WalletBrowserTransferBalanceRequest | WalletBrowserNativeTransferRequest | WalletBrowserNonNativeTransferRequest | WalletBrowserNativeSmartDeposit | WalletBrowserNonNativeSmartDeposit | WalletBrowserDisconnect | WalletBrowserTransactionBatch;
|
2
|
+
declare const WALLET_BROWSER_EVENT_TYPE_KEYS: readonly ["walletBrowserInjectedWalletSelected", "walletBrowserSignRequest", "walletBrowserChainSwitchRequest", "walletBrowserTransferBalanceRequest", "walletBrowserNativeTransferRequest", "walletBrowserNonNativeTransferRequest", "walletBrowserNativeSmartDeposit", "walletBrowserNonNativeSmartDeposit", "walletBrowserDisconnect", "walletBrowserTransactionBatchRequest"];
|
3
3
|
export type NetworkType = 'unknown' | 'evm' | 'solana' | 'bitcoin' | 'cardano' | 'tron' | 'avalancheX' | 'tezos' | 'dogecoin' | 'ripple' | 'stellar' | 'litecoin' | 'sui' | 'aptos' | 'tvm';
|
4
4
|
export type WalletBrowserEventTypeKeys = (typeof WALLET_BROWSER_EVENT_TYPE_KEYS)[number];
|
5
5
|
export declare function isWalletBrowserEventTypeKey(key: string): key is WalletBrowserEventTypeKeys;
|
@@ -77,4 +77,18 @@ export interface WalletBrowserDisconnect extends WalletBrowserEventBase {
|
|
77
77
|
walletName?: string;
|
78
78
|
};
|
79
79
|
}
|
80
|
+
export interface WalletBrowserTransactionBatch extends WalletBrowserEventBase {
|
81
|
+
type: 'walletBrowserTransactionBatchRequest';
|
82
|
+
payload: {
|
83
|
+
version: string;
|
84
|
+
from: string;
|
85
|
+
chainId: string;
|
86
|
+
atomicRequired: boolean;
|
87
|
+
calls: {
|
88
|
+
to: string;
|
89
|
+
value: string;
|
90
|
+
data?: string;
|
91
|
+
}[];
|
92
|
+
};
|
93
|
+
}
|
80
94
|
export {};
|
@@ -7,7 +7,8 @@ var WALLET_BROWSER_EVENT_TYPE_KEYS = [
|
|
7
7
|
'walletBrowserNonNativeTransferRequest',
|
8
8
|
'walletBrowserNativeSmartDeposit',
|
9
9
|
'walletBrowserNonNativeSmartDeposit',
|
10
|
-
'walletBrowserDisconnect'
|
10
|
+
'walletBrowserDisconnect',
|
11
|
+
'walletBrowserTransactionBatchRequest'
|
11
12
|
];
|
12
13
|
export function isWalletBrowserEventTypeKey(key) {
|
13
14
|
return WALLET_BROWSER_EVENT_TYPE_KEYS.includes(key);
|