@subwallet/extension-base 1.3.35-0 → 1.3.37-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/background/KoniTypes.d.ts +13 -0
- package/background/types.d.ts +2 -1
- package/cjs/core/logic-validation/request.js +13 -1
- package/cjs/koni/background/handlers/Extension.js +189 -108
- package/cjs/koni/background/handlers/State.js +14 -9
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -1
- package/cjs/services/request-service/handler/EvmRequestHandler.js +4 -1
- package/cjs/services/swap-service/handler/kyber-handler.js +355 -0
- package/cjs/services/swap-service/handler/uniswap-handler.js +209 -40
- package/cjs/services/swap-service/index.js +28 -2
- package/cjs/services/swap-service/utils.js +4 -1
- package/cjs/services/transaction-service/index.js +252 -28
- package/cjs/types/swap/index.js +2 -1
- package/cjs/utils/cardano.js +10 -2
- package/core/logic-validation/request.js +13 -1
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +82 -2
- package/koni/background/handlers/State.js +15 -10
- package/package.json +14 -9
- package/packageInfo.js +1 -1
- package/services/chain-service/types.d.ts +1 -1
- package/services/event-service/types.d.ts +6 -6
- package/services/request-service/handler/AuthRequestHandler.js +4 -1
- package/services/request-service/handler/EvmRequestHandler.js +4 -1
- package/services/swap-service/handler/kyber-handler.d.ts +28 -0
- package/services/swap-service/handler/kyber-handler.js +346 -0
- package/services/swap-service/handler/uniswap-handler.d.ts +48 -0
- package/services/swap-service/handler/uniswap-handler.js +209 -40
- package/services/swap-service/index.js +28 -2
- package/services/swap-service/utils.js +4 -1
- package/services/transaction-service/helpers/index.d.ts +5 -5
- package/services/transaction-service/index.d.ts +10 -5
- package/services/transaction-service/index.js +234 -12
- package/services/transaction-service/types.d.ts +23 -10
- package/types/swap/index.d.ts +4 -1
- package/types/swap/index.js +2 -1
- package/utils/cardano.d.ts +2 -0
- package/utils/cardano.js +7 -0
|
@@ -207,6 +207,22 @@ class TransactionService {
|
|
|
207
207
|
extrinsicHash: transactionId
|
|
208
208
|
};
|
|
209
209
|
}
|
|
210
|
+
fillDutchTransactionDefaultInfo(transaction) {
|
|
211
|
+
const isInternal = !transaction.url;
|
|
212
|
+
const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, isInternal, (0, _helpers2.isWalletConnectRequest)(transaction.id));
|
|
213
|
+
return {
|
|
214
|
+
...transaction,
|
|
215
|
+
createdAt: new Date().getTime(),
|
|
216
|
+
updatedAt: new Date().getTime(),
|
|
217
|
+
errors: transaction.errors || [],
|
|
218
|
+
warnings: transaction.warnings || [],
|
|
219
|
+
url: transaction.url || _constants2.EXTENSION_REQUEST_URL,
|
|
220
|
+
status: _KoniTypes.ExtrinsicStatus.QUEUED,
|
|
221
|
+
isInternal,
|
|
222
|
+
id: transactionId,
|
|
223
|
+
extrinsicHash: transactionId
|
|
224
|
+
};
|
|
225
|
+
}
|
|
210
226
|
async addTransaction(inputTransaction) {
|
|
211
227
|
const transactions = this.transactions;
|
|
212
228
|
// Fill transaction default info
|
|
@@ -219,6 +235,15 @@ class TransactionService {
|
|
|
219
235
|
});
|
|
220
236
|
return await this.sendTransaction(transaction);
|
|
221
237
|
}
|
|
238
|
+
addDutchTransaction(inputTransaction) {
|
|
239
|
+
const transactions = this.transactions;
|
|
240
|
+
const transaction = this.fillDutchTransactionDefaultInfo(inputTransaction);
|
|
241
|
+
transactions[transaction.id] = transaction;
|
|
242
|
+
this.transactionSubject.next({
|
|
243
|
+
...transactions
|
|
244
|
+
});
|
|
245
|
+
return this.sendDutchTransaction(transaction);
|
|
246
|
+
}
|
|
222
247
|
generateBeforeHandleResponseErrors(errors) {
|
|
223
248
|
return {
|
|
224
249
|
errors,
|
|
@@ -334,6 +359,62 @@ class TransactionService {
|
|
|
334
359
|
'eventsHandler' in validatedTransaction && delete validatedTransaction.eventsHandler;
|
|
335
360
|
return validatedTransaction;
|
|
336
361
|
}
|
|
362
|
+
async handleDutchTransaction(transaction) {
|
|
363
|
+
var _transaction$step2;
|
|
364
|
+
const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, true);
|
|
365
|
+
const validatedTransaction = {
|
|
366
|
+
...transaction,
|
|
367
|
+
id: transactionId,
|
|
368
|
+
extrinsicHash: '',
|
|
369
|
+
status: undefined,
|
|
370
|
+
errors: transaction.errors || [],
|
|
371
|
+
warnings: transaction.warnings || [],
|
|
372
|
+
processId: (_transaction$step2 = transaction.step) === null || _transaction$step2 === void 0 ? void 0 : _transaction$step2.processId
|
|
373
|
+
};
|
|
374
|
+
const txInput = {
|
|
375
|
+
...transaction,
|
|
376
|
+
isInternal: true,
|
|
377
|
+
status: _KoniTypes.ExtrinsicStatus.QUEUED,
|
|
378
|
+
id: transactionId,
|
|
379
|
+
extrinsicHash: transactionId,
|
|
380
|
+
createdAt: new Date().getTime(),
|
|
381
|
+
updatedAt: new Date().getTime()
|
|
382
|
+
};
|
|
383
|
+
const emitter = this.addDutchTransaction(txInput);
|
|
384
|
+
await new Promise(resolve => {
|
|
385
|
+
if (transaction.resolveOnDone) {
|
|
386
|
+
emitter.on('success', data => {
|
|
387
|
+
validatedTransaction.id = data.id;
|
|
388
|
+
validatedTransaction.extrinsicHash = data.extrinsicHash;
|
|
389
|
+
resolve();
|
|
390
|
+
});
|
|
391
|
+
} else {
|
|
392
|
+
emitter.on('signed', data => {
|
|
393
|
+
validatedTransaction.id = data.id;
|
|
394
|
+
validatedTransaction.extrinsicHash = data.extrinsicHash;
|
|
395
|
+
resolve();
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
emitter.on('error', data => {
|
|
399
|
+
if (data.errors.length > 0) {
|
|
400
|
+
validatedTransaction.errors.push(...data.errors);
|
|
401
|
+
resolve();
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
emitter.on('timeout', data => {
|
|
405
|
+
if (transaction.errorOnTimeOut && data.errors.length > 0) {
|
|
406
|
+
validatedTransaction.errors.push(...data.errors);
|
|
407
|
+
resolve();
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
// @ts-ignore
|
|
413
|
+
'transaction' in validatedTransaction && delete validatedTransaction.transaction;
|
|
414
|
+
'additionalValidator' in validatedTransaction && delete validatedTransaction.additionalValidator;
|
|
415
|
+
'eventsHandler' in validatedTransaction && delete validatedTransaction.eventsHandler;
|
|
416
|
+
return validatedTransaction;
|
|
417
|
+
}
|
|
337
418
|
async sendTransaction(transaction) {
|
|
338
419
|
// Send Transaction
|
|
339
420
|
const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : transaction.chainType === 'evm' ? this.signAndSendEvmTransaction(transaction) : transaction.chainType === 'cardano' ? this.signAndSendCardanoTransaction(transaction) : this.signAndSendTonTransaction(transaction));
|
|
@@ -381,10 +462,7 @@ class TransactionService {
|
|
|
381
462
|
if (step) {
|
|
382
463
|
const rejectError = data.errors.find(error => {
|
|
383
464
|
// TODO: REFACTOR ERROR CODE
|
|
384
|
-
|
|
385
|
-
return true;
|
|
386
|
-
}
|
|
387
|
-
return false;
|
|
465
|
+
return [_types.BasicTxErrorType.UNABLE_TO_SIGN, _types.BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType);
|
|
388
466
|
});
|
|
389
467
|
|
|
390
468
|
/**
|
|
@@ -457,10 +535,7 @@ class TransactionService {
|
|
|
457
535
|
if (step) {
|
|
458
536
|
const rejectError = data.errors.find(error => {
|
|
459
537
|
// TODO: REFACTOR ERROR CODE
|
|
460
|
-
|
|
461
|
-
return true;
|
|
462
|
-
}
|
|
463
|
-
return false;
|
|
538
|
+
return [_types.BasicTxErrorType.UNABLE_TO_SIGN, _types.BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType);
|
|
464
539
|
});
|
|
465
540
|
|
|
466
541
|
/**
|
|
@@ -482,6 +557,83 @@ class TransactionService {
|
|
|
482
557
|
eventsHandler === null || eventsHandler === void 0 ? void 0 : eventsHandler(emitter);
|
|
483
558
|
return emitter;
|
|
484
559
|
}
|
|
560
|
+
sendDutchTransaction(transaction) {
|
|
561
|
+
// Send Transaction
|
|
562
|
+
const emitter = this.signAndSendEvmDutchTransaction(transaction);
|
|
563
|
+
const {
|
|
564
|
+
eventsHandler,
|
|
565
|
+
step
|
|
566
|
+
} = transaction;
|
|
567
|
+
emitter.on('send', data => {
|
|
568
|
+
this.onSend(data);
|
|
569
|
+
if (step) {
|
|
570
|
+
this.updateProcessStepStatus(step, {
|
|
571
|
+
transactionId: transaction.id,
|
|
572
|
+
status: _types.StepStatus.SUBMITTING,
|
|
573
|
+
chain: transaction.chain
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
emitter.on('extrinsicHash', data => {
|
|
578
|
+
this.onHasTransactionHash(data);
|
|
579
|
+
if (step) {
|
|
580
|
+
this.updateProcessStepStatus(step, {
|
|
581
|
+
extrinsicHash: data.extrinsicHash,
|
|
582
|
+
status: _types.StepStatus.PROCESSING
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
emitter.on('success', data => {
|
|
587
|
+
this.handlePostProcessing(data.id);
|
|
588
|
+
this.onSuccess(data);
|
|
589
|
+
if (step) {
|
|
590
|
+
this.updateProcessStepStatus(step, {
|
|
591
|
+
status: _types.StepStatus.COMPLETE
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
});
|
|
595
|
+
emitter.on('error', data => {
|
|
596
|
+
// this.handlePostProcessing(data.id); // might enable this later
|
|
597
|
+
this.onFailed({
|
|
598
|
+
...data,
|
|
599
|
+
errors: [...data.errors, new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR)]
|
|
600
|
+
});
|
|
601
|
+
if (step) {
|
|
602
|
+
const rejectError = data.errors.find(error => {
|
|
603
|
+
// TODO: REFACTOR ERROR CODE
|
|
604
|
+
return [_types.BasicTxErrorType.UNABLE_TO_SIGN, _types.BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType);
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* Now simple check, first step have step id = 1.
|
|
609
|
+
* Improve to fetch the process from db
|
|
610
|
+
* */
|
|
611
|
+
if (rejectError && step.stepId === 1) {
|
|
612
|
+
this.deleteProcess(step);
|
|
613
|
+
} else {
|
|
614
|
+
this.updateProcessStepStatus(step, {
|
|
615
|
+
status: _types.StepStatus.FAILED
|
|
616
|
+
});
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
});
|
|
620
|
+
emitter.on('timeout', data => {
|
|
621
|
+
this.onTimeOut({
|
|
622
|
+
...data,
|
|
623
|
+
errors: [...data.errors, new _TransactionError.TransactionError(_types.BasicTxErrorType.TIMEOUT)]
|
|
624
|
+
});
|
|
625
|
+
if (step) {
|
|
626
|
+
this.updateProcessStepStatus(step, {
|
|
627
|
+
status: _types.StepStatus.TIMEOUT
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
// Todo: handle any event with transaction.eventsHandler
|
|
633
|
+
|
|
634
|
+
eventsHandler === null || eventsHandler === void 0 ? void 0 : eventsHandler(emitter);
|
|
635
|
+
return emitter;
|
|
636
|
+
}
|
|
485
637
|
removeTransaction(id) {
|
|
486
638
|
if (this.transactions[id]) {
|
|
487
639
|
delete this.transactions[id];
|
|
@@ -505,7 +657,7 @@ class TransactionService {
|
|
|
505
657
|
return (0, _utils3.getExplorerLink)(chainInfo, transaction.extrinsicHash, 'tx');
|
|
506
658
|
}
|
|
507
659
|
transactionToHistories(id, startBlock, nonce, eventLogs) {
|
|
508
|
-
var _transaction$
|
|
660
|
+
var _transaction$step3;
|
|
509
661
|
const transaction = this.getTransaction(id);
|
|
510
662
|
const extrinsicType = transaction.extrinsicType;
|
|
511
663
|
const chainInfo = this.state.chainService.getChainInfoByKey(transaction.chain);
|
|
@@ -530,7 +682,7 @@ class TransactionService {
|
|
|
530
682
|
// Will be added in next step
|
|
531
683
|
nonce: nonce !== null && nonce !== void 0 ? nonce : 0,
|
|
532
684
|
startBlock: startBlock || 0,
|
|
533
|
-
processId: (_transaction$
|
|
685
|
+
processId: (_transaction$step3 = transaction.step) === null || _transaction$step3 === void 0 ? void 0 : _transaction$step3.processId
|
|
534
686
|
};
|
|
535
687
|
const nativeAsset = (0, _utils2._getChainNativeTokenBasicInfo)(chainInfo);
|
|
536
688
|
const baseNativeAmount = {
|
|
@@ -1369,7 +1521,79 @@ class TransactionService {
|
|
|
1369
1521
|
});
|
|
1370
1522
|
return emitter;
|
|
1371
1523
|
}
|
|
1372
|
-
|
|
1524
|
+
signAndSendEvmDutchTransaction(_ref12) {
|
|
1525
|
+
let {
|
|
1526
|
+
address,
|
|
1527
|
+
id,
|
|
1528
|
+
isPassConfirmation,
|
|
1529
|
+
step,
|
|
1530
|
+
transaction,
|
|
1531
|
+
url
|
|
1532
|
+
} = _ref12;
|
|
1533
|
+
const emitter = new _eventemitter.default();
|
|
1534
|
+
const eventData = {
|
|
1535
|
+
id,
|
|
1536
|
+
errors: [],
|
|
1537
|
+
warnings: [],
|
|
1538
|
+
extrinsicHash: id,
|
|
1539
|
+
processId: step === null || step === void 0 ? void 0 : step.processId
|
|
1540
|
+
};
|
|
1541
|
+
|
|
1542
|
+
// todo: review this object
|
|
1543
|
+
const evmSignaturePayload = {
|
|
1544
|
+
id: id,
|
|
1545
|
+
type: 'eth_signTypedData_v4',
|
|
1546
|
+
payload: transaction,
|
|
1547
|
+
address: address,
|
|
1548
|
+
hashPayload: '',
|
|
1549
|
+
canSign: true,
|
|
1550
|
+
processId: step === null || step === void 0 ? void 0 : step.processId
|
|
1551
|
+
};
|
|
1552
|
+
this.state.requestService.addConfirmation(id, url || _constants2.EXTENSION_REQUEST_URL, 'submitApiRequest', evmSignaturePayload, {
|
|
1553
|
+
isPassConfirmation
|
|
1554
|
+
}).then(_ref13 => {
|
|
1555
|
+
let {
|
|
1556
|
+
isApproved,
|
|
1557
|
+
payload: signature
|
|
1558
|
+
} = _ref13;
|
|
1559
|
+
if (isApproved) {
|
|
1560
|
+
emitter.emit('signed', eventData);
|
|
1561
|
+
emitter.emit('send', eventData);
|
|
1562
|
+
transaction.submitSwapOrder().then(isSendSuccess => {
|
|
1563
|
+
if (!isSendSuccess) {
|
|
1564
|
+
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('Failed to sign'));
|
|
1565
|
+
}
|
|
1566
|
+
this.handleTransactionTimeout(emitter, eventData);
|
|
1567
|
+
transaction.cronCheckTxSuccess().then(order => {
|
|
1568
|
+
if (!order) {
|
|
1569
|
+
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED));
|
|
1570
|
+
emitter.emit('error', eventData);
|
|
1571
|
+
} else {
|
|
1572
|
+
eventData.extrinsicHash = order.txHash;
|
|
1573
|
+
emitter.emit('extrinsicHash', eventData);
|
|
1574
|
+
emitter.emit('success', eventData);
|
|
1575
|
+
}
|
|
1576
|
+
}).catch(e => {
|
|
1577
|
+
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED, (0, _i18next.t)(e.message)));
|
|
1578
|
+
emitter.emit('error', eventData);
|
|
1579
|
+
});
|
|
1580
|
+
}).catch(e => {
|
|
1581
|
+
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SEND, (0, _i18next.t)(e.message)));
|
|
1582
|
+
emitter.emit('error', eventData);
|
|
1583
|
+
});
|
|
1584
|
+
} else {
|
|
1585
|
+
this.removeTransaction(id);
|
|
1586
|
+
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.USER_REJECT_REQUEST));
|
|
1587
|
+
emitter.emit('error', eventData);
|
|
1588
|
+
}
|
|
1589
|
+
}).catch(e => {
|
|
1590
|
+
this.removeTransaction(id);
|
|
1591
|
+
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SIGN, (0, _i18next.t)(e.message)));
|
|
1592
|
+
emitter.emit('error', eventData);
|
|
1593
|
+
});
|
|
1594
|
+
return emitter;
|
|
1595
|
+
}
|
|
1596
|
+
signAndSendSubstrateTransaction(_ref14) {
|
|
1373
1597
|
var _this$state$chainServ;
|
|
1374
1598
|
let {
|
|
1375
1599
|
address,
|
|
@@ -1381,7 +1605,7 @@ class TransactionService {
|
|
|
1381
1605
|
tokenPayFeeSlug,
|
|
1382
1606
|
transaction,
|
|
1383
1607
|
url
|
|
1384
|
-
} =
|
|
1608
|
+
} = _ref14;
|
|
1385
1609
|
const tip = (feeCustom === null || feeCustom === void 0 ? void 0 : feeCustom.tip) || '0';
|
|
1386
1610
|
const feeAssetId = tokenPayFeeSlug && !(0, _utils2._isNativeTokenBySlug)(tokenPayFeeSlug) && _constants._SUPPORT_TOKEN_PAY_FEE_GROUP.assetHub.includes(chain) ? (_this$state$chainServ = this.state.chainService.getAssetBySlug(tokenPayFeeSlug).metadata) === null || _this$state$chainServ === void 0 ? void 0 : _this$state$chainServ.multilocation : undefined;
|
|
1387
1611
|
const emitter = new _eventemitter.default();
|
|
@@ -1470,20 +1694,20 @@ class TransactionService {
|
|
|
1470
1694
|
if (!eventData.extrinsicHash) {
|
|
1471
1695
|
eventData.extrinsicHash = txState.txHash.toHex();
|
|
1472
1696
|
}
|
|
1473
|
-
txState.events.filter(
|
|
1697
|
+
txState.events.filter(_ref15 => {
|
|
1474
1698
|
let {
|
|
1475
1699
|
event: {
|
|
1476
1700
|
section
|
|
1477
1701
|
}
|
|
1478
|
-
} =
|
|
1702
|
+
} = _ref15;
|
|
1479
1703
|
return section === 'system';
|
|
1480
|
-
}).forEach(
|
|
1704
|
+
}).forEach(_ref16 => {
|
|
1481
1705
|
let {
|
|
1482
1706
|
event: {
|
|
1483
1707
|
data: [error],
|
|
1484
1708
|
method
|
|
1485
1709
|
}
|
|
1486
|
-
} =
|
|
1710
|
+
} = _ref16;
|
|
1487
1711
|
if (method === 'ExtrinsicFailed') {
|
|
1488
1712
|
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED, error.toString()));
|
|
1489
1713
|
emitter.emit('error', eventData);
|
|
@@ -1506,7 +1730,7 @@ class TransactionService {
|
|
|
1506
1730
|
});
|
|
1507
1731
|
return emitter;
|
|
1508
1732
|
}
|
|
1509
|
-
signAndSendTonTransaction(
|
|
1733
|
+
signAndSendTonTransaction(_ref17) {
|
|
1510
1734
|
let {
|
|
1511
1735
|
address,
|
|
1512
1736
|
chain,
|
|
@@ -1515,7 +1739,7 @@ class TransactionService {
|
|
|
1515
1739
|
step,
|
|
1516
1740
|
transaction,
|
|
1517
1741
|
url
|
|
1518
|
-
} =
|
|
1742
|
+
} = _ref17;
|
|
1519
1743
|
const walletContract = _uiKeyring.default.getPair(address).ton.currentContract;
|
|
1520
1744
|
const emitter = new _eventemitter.default();
|
|
1521
1745
|
const eventData = {
|
|
@@ -1532,11 +1756,11 @@ class TransactionService {
|
|
|
1532
1756
|
...payload,
|
|
1533
1757
|
messagePayload: (0, _utils.cellToBase64Str)(message),
|
|
1534
1758
|
messages: []
|
|
1535
|
-
}, {}).then(
|
|
1759
|
+
}, {}).then(_ref18 => {
|
|
1536
1760
|
let {
|
|
1537
1761
|
isApproved,
|
|
1538
1762
|
payload
|
|
1539
|
-
} =
|
|
1763
|
+
} = _ref18;
|
|
1540
1764
|
if (!isApproved) {
|
|
1541
1765
|
this.removeTransaction(id);
|
|
1542
1766
|
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.USER_REJECT_REQUEST));
|
|
@@ -1571,8 +1795,8 @@ class TransactionService {
|
|
|
1571
1795
|
if (!externalMsgHash) {
|
|
1572
1796
|
return;
|
|
1573
1797
|
}
|
|
1574
|
-
tonApi.getStatusByExtMsgHash(externalMsgHash, extrinsicType).then(
|
|
1575
|
-
let [status, hex] =
|
|
1798
|
+
tonApi.getStatusByExtMsgHash(externalMsgHash, extrinsicType).then(_ref19 => {
|
|
1799
|
+
let [status, hex] = _ref19;
|
|
1576
1800
|
if (status && hex) {
|
|
1577
1801
|
eventData.extrinsicHash = hex;
|
|
1578
1802
|
emitter.emit('extrinsicHash', eventData);
|
|
@@ -1601,13 +1825,13 @@ class TransactionService {
|
|
|
1601
1825
|
});
|
|
1602
1826
|
return emitter;
|
|
1603
1827
|
}
|
|
1604
|
-
signAndSendCardanoTransaction(
|
|
1828
|
+
signAndSendCardanoTransaction(_ref20) {
|
|
1605
1829
|
let {
|
|
1606
1830
|
chain,
|
|
1607
1831
|
id,
|
|
1608
1832
|
transaction,
|
|
1609
1833
|
url
|
|
1610
|
-
} =
|
|
1834
|
+
} = _ref20;
|
|
1611
1835
|
const emitter = new _eventemitter.default();
|
|
1612
1836
|
const eventData = {
|
|
1613
1837
|
id,
|
|
@@ -1617,11 +1841,11 @@ class TransactionService {
|
|
|
1617
1841
|
};
|
|
1618
1842
|
const transactionConfig = transaction;
|
|
1619
1843
|
const cardanoApi = this.state.chainService.getCardanoApi(chain);
|
|
1620
|
-
this.state.requestService.addConfirmationCardano(id, url || _constants2.EXTENSION_REQUEST_URL, 'cardanoSendTransactionRequest', transactionConfig, {}).then(
|
|
1844
|
+
this.state.requestService.addConfirmationCardano(id, url || _constants2.EXTENSION_REQUEST_URL, 'cardanoSendTransactionRequest', transactionConfig, {}).then(_ref21 => {
|
|
1621
1845
|
let {
|
|
1622
1846
|
isApproved,
|
|
1623
1847
|
payload
|
|
1624
|
-
} =
|
|
1848
|
+
} = _ref21;
|
|
1625
1849
|
if (!isApproved) {
|
|
1626
1850
|
this.removeTransaction(id);
|
|
1627
1851
|
eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.USER_REJECT_REQUEST));
|
|
@@ -1812,9 +2036,9 @@ class TransactionService {
|
|
|
1812
2036
|
}
|
|
1813
2037
|
}
|
|
1814
2038
|
async createProcessNotification(transactionId) {
|
|
1815
|
-
var _transaction$
|
|
2039
|
+
var _transaction$step4;
|
|
1816
2040
|
const transaction = this.getTransaction(transactionId);
|
|
1817
|
-
if (transaction && (_transaction$
|
|
2041
|
+
if (transaction && (_transaction$step4 = transaction.step) !== null && _transaction$step4 !== void 0 && _transaction$step4.processId) {
|
|
1818
2042
|
const process = this.aliveProcessMap.get(transaction.step.processId);
|
|
1819
2043
|
if (process) {
|
|
1820
2044
|
await this.state.inappNotificationService.createProcessNotification(process);
|
package/cjs/types/swap/index.js
CHANGED
|
@@ -42,13 +42,14 @@ exports.SwapProviderId = SwapProviderId;
|
|
|
42
42
|
SwapProviderId["WESTEND_ASSET_HUB"] = "WESTEND_ASSET_HUB";
|
|
43
43
|
SwapProviderId["SIMPLE_SWAP"] = "SIMPLE_SWAP";
|
|
44
44
|
SwapProviderId["UNISWAP"] = "UNISWAP";
|
|
45
|
+
SwapProviderId["KYBER"] = "KYBER";
|
|
45
46
|
})(SwapProviderId || (exports.SwapProviderId = SwapProviderId = {}));
|
|
46
47
|
const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET,
|
|
47
48
|
// SwapProviderId.HYDRADX_TESTNET,
|
|
48
49
|
SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB,
|
|
49
50
|
// SwapProviderId.ROCOCO_ASSET_HUB,
|
|
50
51
|
// SwapProviderId.WESTEND_ASSET_HUB,
|
|
51
|
-
SwapProviderId.SIMPLE_SWAP, SwapProviderId.UNISWAP];
|
|
52
|
+
SwapProviderId.SIMPLE_SWAP, SwapProviderId.UNISWAP, SwapProviderId.KYBER];
|
|
52
53
|
exports._SUPPORTED_SWAP_PROVIDERS = _SUPPORTED_SWAP_PROVIDERS;
|
|
53
54
|
// process handling
|
|
54
55
|
let SwapFeeType;
|
package/cjs/utils/cardano.js
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.convertCardanoHexToBech32 = exports.convertCardanoAddressToHex = void 0;
|
|
6
|
+
exports.validateAddressNetwork = exports.convertCardanoHexToBech32 = exports.convertCardanoAddressToHex = void 0;
|
|
7
7
|
var _cardanoSerializationLibNodejs = require("@emurgo/cardano-serialization-lib-nodejs");
|
|
8
|
+
var _keyring = require("@subwallet/keyring");
|
|
8
9
|
// Copyright 2019-2022 @polkadot/extension authors & contributors
|
|
9
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
10
11
|
|
|
@@ -17,4 +18,11 @@ const convertCardanoHexToBech32 = hexAddress => {
|
|
|
17
18
|
const addr = _cardanoSerializationLibNodejs.Address.from_hex(hexAddress);
|
|
18
19
|
return addr.to_bech32();
|
|
19
20
|
};
|
|
20
|
-
exports.convertCardanoHexToBech32 = convertCardanoHexToBech32;
|
|
21
|
+
exports.convertCardanoHexToBech32 = convertCardanoHexToBech32;
|
|
22
|
+
const validateAddressNetwork = (address, chainInfo) => {
|
|
23
|
+
if (!(chainInfo !== null && chainInfo !== void 0 && chainInfo.cardanoInfo) || !chainInfo.isTestnet) {
|
|
24
|
+
return (0, _keyring.isCardanoMainnetAddress)(address);
|
|
25
|
+
}
|
|
26
|
+
return (0, _keyring.isCardanoTestnetAddress)(address);
|
|
27
|
+
};
|
|
28
|
+
exports.validateAddressNetwork = validateAddressNetwork;
|
|
@@ -8,6 +8,7 @@ import { TransactionError } from '@subwallet/extension-base/background/errors/Tr
|
|
|
8
8
|
import { CardanoProviderErrorType, EvmProviderErrorType } from '@subwallet/extension-base/background/KoniTypes';
|
|
9
9
|
import { BasicTxErrorType } from '@subwallet/extension-base/types';
|
|
10
10
|
import { BN_ZERO, combineEthFee, createPromiseHandler, isSameAddress, stripUrl, wait } from '@subwallet/extension-base/utils';
|
|
11
|
+
import { validateAddressNetwork } from '@subwallet/extension-base/utils/cardano';
|
|
11
12
|
import { isContractAddress, parseContractInput } from '@subwallet/extension-base/utils/eth/parseTransaction';
|
|
12
13
|
import { getId } from '@subwallet/extension-base/utils/getId';
|
|
13
14
|
import { isCardanoAddress, isSubstrateAddress } from '@subwallet/keyring';
|
|
@@ -547,8 +548,10 @@ export function validationAuthWCMiddleware(koni, url, payload, topic) {
|
|
|
547
548
|
export async function validationCardanoSignDataMiddleware(koni, url, payload_) {
|
|
548
549
|
const {
|
|
549
550
|
address,
|
|
551
|
+
authInfo,
|
|
550
552
|
errors,
|
|
551
|
-
pair: pair_
|
|
553
|
+
pair: pair_,
|
|
554
|
+
type
|
|
552
555
|
} = payload_;
|
|
553
556
|
const payload = payload_.payloadAfterValidated;
|
|
554
557
|
const {
|
|
@@ -570,6 +573,15 @@ export async function validationCardanoSignDataMiddleware(koni, url, payload_) {
|
|
|
570
573
|
if (!isCardanoAddress(address)) {
|
|
571
574
|
handleError('Not found cardano address');
|
|
572
575
|
}
|
|
576
|
+
const currentCardanoNetwork = koni.requestService.getDAppChainInfo({
|
|
577
|
+
autoActive: true,
|
|
578
|
+
accessType: 'cardano',
|
|
579
|
+
defaultChain: authInfo === null || authInfo === void 0 ? void 0 : authInfo.currentNetworkMap[type],
|
|
580
|
+
url
|
|
581
|
+
});
|
|
582
|
+
if (!validateAddressNetwork(address, currentCardanoNetwork)) {
|
|
583
|
+
handleError('Invalid address network');
|
|
584
|
+
}
|
|
573
585
|
const pair = pair_ || keyring.getPair(address);
|
|
574
586
|
if (!(pair !== null && pair !== void 0 && pair.meta.isExtneral)) {
|
|
575
587
|
canSign = true;
|
|
@@ -59,6 +59,7 @@ export default class KoniExtension {
|
|
|
59
59
|
private changeAuthorizationAll;
|
|
60
60
|
private _changeAuthorization;
|
|
61
61
|
toggleAuthorization2(url: string): Promise<ResponseAuthorizeList>;
|
|
62
|
+
private switchCurrentNetworkAuthorization;
|
|
62
63
|
private changeAuthorization;
|
|
63
64
|
private _changeAuthorizationPerAcc;
|
|
64
65
|
private _changeAuthorizationBlock;
|
|
@@ -36,7 +36,7 @@ import { _isPolygonChainBridge, getClaimPolygonBridge, isClaimedPolygonBridge }
|
|
|
36
36
|
import { _isPosChainBridge, getClaimPosBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/posBridge';
|
|
37
37
|
import { _DEFAULT_MANTA_ZK_CHAIN, _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
|
|
38
38
|
import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
|
|
39
|
-
import { _getAssetDecimals, _getAssetSymbol, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getEvmChainId, _isAssetSmartContractNft, _isChainEvmCompatible, _isChainSubstrateCompatible, _isCustomAsset, _isLocalToken, _isMantaZkAsset, _isNativeToken, _isNativeTokenBySlug, _isPureEvmChain, _isTokenEvmSmartContract, _isTokenTransferredByCardano, _isTokenTransferredByEvm, _isTokenTransferredByTon } from '@subwallet/extension-base/services/chain-service/utils';
|
|
39
|
+
import { _getAssetDecimals, _getAssetSymbol, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getEvmChainId, _isAssetSmartContractNft, _isChainEnabled, _isChainEvmCompatible, _isChainSubstrateCompatible, _isCustomAsset, _isLocalToken, _isMantaZkAsset, _isNativeToken, _isNativeTokenBySlug, _isPureEvmChain, _isTokenEvmSmartContract, _isTokenTransferredByCardano, _isTokenTransferredByEvm, _isTokenTransferredByTon } from '@subwallet/extension-base/services/chain-service/utils';
|
|
40
40
|
import { calculateToAmountByReservePool } from '@subwallet/extension-base/services/fee-service/utils';
|
|
41
41
|
import { batchExtrinsicSetFeeHydration, getAssetHubTokensCanPayFee, getHydrationTokensCanPayFee } from '@subwallet/extension-base/services/fee-service/utils/tokenPayFee';
|
|
42
42
|
import { EXTENSION_REQUEST_URL } from '@subwallet/extension-base/services/request-service/constants';
|
|
@@ -45,7 +45,7 @@ import { isProposalExpired, isSupportWalletConnectChain, isSupportWalletConnectN
|
|
|
45
45
|
import { SWStorage } from '@subwallet/extension-base/storage';
|
|
46
46
|
import { AccountsStore } from '@subwallet/extension-base/stores';
|
|
47
47
|
import { AccountSignMode, BasicTxErrorType, BasicTxWarningCode, CommonStepType, EarningProcessType, ProcessType, StakingTxErrorType, StepStatus, SwapFeeType, YieldPoolType, YieldStepType } from '@subwallet/extension-base/types';
|
|
48
|
-
import { _analyzeAddress, calculateMaxTransferable, combineAllAccountProxy, createTransactionFromRLP, detectTransferTxType, getAccountSignMode, isSameAddress, MODULE_SUPPORT, reformatAddress, signatureToHex, transformAccounts, transformAddresses, uniqueStringArray } from '@subwallet/extension-base/utils';
|
|
48
|
+
import { _analyzeAddress, calculateMaxTransferable, combineAllAccountProxy, createPromiseHandler, createTransactionFromRLP, detectTransferTxType, getAccountSignMode, isSameAddress, MODULE_SUPPORT, reformatAddress, signatureToHex, transformAccounts, transformAddresses, uniqueStringArray } from '@subwallet/extension-base/utils';
|
|
49
49
|
import { parseContractInput, parseEvmRlp } from '@subwallet/extension-base/utils/eth/parseTransaction';
|
|
50
50
|
import { getId } from '@subwallet/extension-base/utils/getId';
|
|
51
51
|
import { getKeypairTypeByAddress, isAddress, isCardanoAddress, isSubstrateAddress, isTonAddress } from '@subwallet/keyring';
|
|
@@ -648,6 +648,63 @@ export default class KoniExtension {
|
|
|
648
648
|
});
|
|
649
649
|
});
|
|
650
650
|
}
|
|
651
|
+
async switchCurrentNetworkAuthorization({
|
|
652
|
+
authSwitchNetworkType,
|
|
653
|
+
networkKey,
|
|
654
|
+
url
|
|
655
|
+
}) {
|
|
656
|
+
const authUrls = await this.#koniState.getAuthList();
|
|
657
|
+
const chainInfo = this.#koniState.chainService.getChainInfoByKey(networkKey);
|
|
658
|
+
const chainState = this.#koniState.getChainStateByKey(networkKey);
|
|
659
|
+
const {
|
|
660
|
+
promise,
|
|
661
|
+
resolve
|
|
662
|
+
} = createPromiseHandler();
|
|
663
|
+
const typeInfoMap = {
|
|
664
|
+
substrate: 'substrateInfo',
|
|
665
|
+
evm: 'evmInfo',
|
|
666
|
+
cardano: 'cardanoInfo',
|
|
667
|
+
ton: 'tonInfo'
|
|
668
|
+
};
|
|
669
|
+
const typeInfoKey = typeInfoMap[authSwitchNetworkType];
|
|
670
|
+
if (!typeInfoKey || !chainInfo[typeInfoKey]) {
|
|
671
|
+
throw new Error(t('Network {{networkKey}} is not {{authSwitchNetworkType}}', {
|
|
672
|
+
replace: {
|
|
673
|
+
networkKey,
|
|
674
|
+
authSwitchNetworkType
|
|
675
|
+
}
|
|
676
|
+
}));
|
|
677
|
+
}
|
|
678
|
+
const authUrl = authUrls[url];
|
|
679
|
+
if (!authUrl) {
|
|
680
|
+
throw new Error(t('Not found {{url}} in auth list', {
|
|
681
|
+
replace: {
|
|
682
|
+
url
|
|
683
|
+
}
|
|
684
|
+
}));
|
|
685
|
+
}
|
|
686
|
+
if (chainInfo && !_isChainEnabled(chainState)) {
|
|
687
|
+
await this.enableChainWithPriorityAssets({
|
|
688
|
+
chainSlug: networkKey,
|
|
689
|
+
enableTokens: true
|
|
690
|
+
});
|
|
691
|
+
}
|
|
692
|
+
if (!authUrl.accountAuthTypes.includes(authSwitchNetworkType)) {
|
|
693
|
+
throw new Error(t('Network {{networkKey}} is not supported by {{authSwitchNetworkType}}', {
|
|
694
|
+
replace: {
|
|
695
|
+
networkKey,
|
|
696
|
+
authSwitchNetworkType
|
|
697
|
+
}
|
|
698
|
+
}));
|
|
699
|
+
}
|
|
700
|
+
authUrl.currentNetworkMap[authSwitchNetworkType] = networkKey;
|
|
701
|
+
this.#koniState.setAuthorize(authUrls, () => {
|
|
702
|
+
resolve({
|
|
703
|
+
list: authUrls
|
|
704
|
+
});
|
|
705
|
+
});
|
|
706
|
+
return promise;
|
|
707
|
+
}
|
|
651
708
|
changeAuthorization(data, id, port) {
|
|
652
709
|
const cb = createSubscription(id, port);
|
|
653
710
|
this._changeAuthorization(data.url, data.connectValue, items => {
|
|
@@ -2720,6 +2777,7 @@ export default class KoniExtension {
|
|
|
2720
2777
|
getTransaction({
|
|
2721
2778
|
id
|
|
2722
2779
|
}) {
|
|
2780
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
2723
2781
|
const {
|
|
2724
2782
|
transaction,
|
|
2725
2783
|
...transactionResult
|
|
@@ -2730,6 +2788,7 @@ export default class KoniExtension {
|
|
|
2730
2788
|
const cb = createSubscription(id, port);
|
|
2731
2789
|
function convertRs(rs, processMap) {
|
|
2732
2790
|
return Object.fromEntries(Object.entries(rs).map(([key, value]) => {
|
|
2791
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
2733
2792
|
const {
|
|
2734
2793
|
additionalValidator,
|
|
2735
2794
|
eventsHandler,
|
|
@@ -3767,6 +3826,7 @@ export default class KoniExtension {
|
|
|
3767
3826
|
chainType,
|
|
3768
3827
|
extrinsic,
|
|
3769
3828
|
extrinsicType,
|
|
3829
|
+
isDutch,
|
|
3770
3830
|
isPermit,
|
|
3771
3831
|
transferNativeAmount,
|
|
3772
3832
|
txChain,
|
|
@@ -3823,6 +3883,24 @@ export default class KoniExtension {
|
|
|
3823
3883
|
step
|
|
3824
3884
|
});
|
|
3825
3885
|
}
|
|
3886
|
+
if (isDutch) {
|
|
3887
|
+
return await this.#koniState.transactionService.handleDutchTransaction({
|
|
3888
|
+
address,
|
|
3889
|
+
chain: txChain,
|
|
3890
|
+
transaction: extrinsic,
|
|
3891
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
3892
|
+
data: txData,
|
|
3893
|
+
extrinsicType,
|
|
3894
|
+
// change this depends on step
|
|
3895
|
+
chainType,
|
|
3896
|
+
resolveOnDone: !isLastStep,
|
|
3897
|
+
transferNativeAmount,
|
|
3898
|
+
...this.createPassConfirmationParams(isPassConfirmation),
|
|
3899
|
+
errorOnTimeOut,
|
|
3900
|
+
eventsHandler,
|
|
3901
|
+
step
|
|
3902
|
+
});
|
|
3903
|
+
}
|
|
3826
3904
|
return await this.#koniState.transactionService.handleTransaction({
|
|
3827
3905
|
address,
|
|
3828
3906
|
chain: txChain,
|
|
@@ -4234,6 +4312,8 @@ export default class KoniExtension {
|
|
|
4234
4312
|
return this.getAuthListV2();
|
|
4235
4313
|
case 'pri(authorize.toggle)':
|
|
4236
4314
|
return this.toggleAuthorization2(request);
|
|
4315
|
+
case 'pri(authorize.switchCurrentNetwork)':
|
|
4316
|
+
return this.switchCurrentNetworkAuthorization(request);
|
|
4237
4317
|
case 'pri(settings.changeBalancesVisibility)':
|
|
4238
4318
|
return await this.toggleBalancesVisibility();
|
|
4239
4319
|
|